Мод действительно полезный, несколько его переделал, убрал возможность вывода нескольких вопросов (т.к. на мой взгляд это уже излишне), зато добавил вывод случайного вопроса из базы вопросов. Также (и это очень важно) сделал регистро-независимую проверку ответов на вопросы (ведь человек заранее не знает, в каком регистре набирать ответ).
Для модификации открываем файл
agreed.tpl, находим строки:
CODE:if ($fm->exbb['text_confirmation'] === TRUE)
{
require('modules/text_confirmation/config.php');
foreach ($text_confirmation_config as $key=>$value)
{
echo <<<DATA
<tr>
<td class="profilleft"><b>{$value['title']}</b><br /><span class="desc">{$value['description']}</span></td>
<td class="profilright"><input type="text" style="width: 130px" name="confirm_question_{$key}" size="13" maxlength="10"></td>
</tr>
DATA;
}
}
Заменяем их этими строками:
CODE:if ($fm->exbb['text_confirmation'] === TRUE)
{
require('modules/text_confirmation/config.php');
$_SESSION['text_confirm'] = $value = $text_confirmation_config[array_rand($text_confirmation_config)];
echo <<<DATA
<tr>
<td class="profilleft"><b>{$value['title']}</b><br /><span class="desc">{$value['description']}</span></td>
<td class="profilright"><input type="text" style="width: 130px" name="confirm_question" size="13"></td>
</tr>
DATA;
}
Теперь открываем файл
register.php, находим строки:
CODE:if ($fm->exbb['text_confirmation'] === TRUE)
{
require('modules/text_confirmation/config.php');
foreach ($text_confirmation_config as $key=>$value)
{
if ($fm->input['confirm_question_' . $key] !== $value['answer'])
{
$fm->_Message($fm->LANG['Registration'], $fm->LANG['TextConfirmationError']);
}
}
}
И заменяем их этими строками:
CODE: if ($fm->exbb['text_confirmation'] === TRUE)
{
$value = $_SESSION['text_confirm'];
if ($fm->_LowerCase(trim($fm->input['confirm_question'])) !== $fm->_LowerCase($value['answer']))
{
$fm->_Message($fm->LANG['Registration'], $fm->LANG['TextConfirmationError']);
}
}
Вопросы добавляются вручную в файл
modules/text_confirmation/config.php в следующем формате:
CODE:<?php
$text_confirmation_config = array(
//Пример вопроса
array(
'title' => 'Вопрос',
'description' => 'Описание',
'answer' => 'Ответ'
),
array (
'title' => 'Вопрос 2',
'description' => 'Описание 2',
'answer' => 'Ответ 2'
)
);
?>
На этом всё. И поскольку тема целиком и полностью посвящена этому моду, внесу свои предложения для
Александра Михалицына по дальнейшему развитию. Опцию
Разрешить текстовое подтверждение при регистрации? со страницы конфига в админке лучше переместить на страницу управления модулями, и там же поставить ссылку на настройку модуля (сделать редактирование вопросов через админку крайне важно, тем более что это совсем не сложно). Также заметил интересную особенность поля ответа на вопрос:
CODE:<td class="profilright"><input type="text" style="width: 130px" name="onfirm_question_{$key}" size="13" maxlength="10"></td>
Мало того, что
maxlength="10", так ещё номер вопроса
{$key} в явном виде доступен. Я в своей модификации сохраняю элемент массива текущего вопроса в сессию, и тогда номер вопроса не виден, и в файле
register.php при проверке ответа можно даже не подключать лишний раз файл с базой вопросов.