В прилагаемых архивах хак добавляющий текстовую капчу, для
RUNCMS 2.2.2 и
RUNCMS 1.6.2. (обратите внимание, что для
RUNCMS 1.7 это не подходит)
ВНИМАНИЕ! Это alpha версия, предназначенная для тестирования.
Устанавливайте ее на рабочие сайты на свой страх и риск.
Как устанавливать данный хак, сможете прочитать в файле
readme_rus.txt, в прикрепленных архивах.
---
Для тех, кто хочет вручную добавить этот хак, привожу пример для
RUNCMS 1.6.2.
Будут изменены следующие файлы:
/register.php
/include/registerform.php
/language/russian/user.php
/modules/system/admin/captcha/language/russian/captcha.php
/modules/system/admin/captcha/main.php
и добавлен новый файл
/modules/system/cache/tcaptcha.php
---
1) Открываем файл
/register.php
Находим строку
PHP код:
include_once("./mainfile.php");
и после нее добавляем
PHP код:
include_once(XOOPS_ROOT_PATH."/modules/system/cache/tcaptcha.php");
находим функцию userCheck() и после этой функции, т.е. после строк
Добавляем
PHP код:
function checkTCaptcha($tcaptcha)
{
$stop = '';
if ($tcaptcha['use_tc'] == 1) {
$qq_arr = preg_split('/[\n\r]+/', stripslashes($tcaptcha['tc_qq']));
$ans_arr = explode("|", strtolower($qq_arr[intval($_POST['q_id'])]));
array_shift($ans_arr);
array_walk($ans_arr, create_function('&$val', '$val = trim($val);'));
if (!in_array(strtolower(trim($_POST['tc_ans'])), $ans_arr)) {
$stop .= _US_WRONGTCANSWER . '<br />';
}
}
return $stop;
}
Находим строки (они в двух местах)
PHP код:
$stop = userCheck($uname, $email, $passw, $vpassw);
И после них ставим
PHP код:
$stop .= checkTCaptcha($tcaptcha);
Находим строки
PHP код:
<input type='hidden' name='verify_crc' value='".$myts->makeTboxData4PreviewInForm($verify_crc)."' />
<input type='hidden' name='keystring' value='".$myts->makeTboxData4PreviewInForm($_REQUEST['keystring'])."' />
И после них добавляем
PHP код:
<input type='hidden' name='tc_ans' value='".$myts->makeTboxData4PreviewInForm($tc_ans)."' />
<input type='hidden' name='q_id' value='" . intval($q_id) . "' />
2) Открываем файл
/include/registerform.php
Находим строку
PHP код:
$required = array("uname", "email", "passw", "vpassw");
И перед ней ставим
PHP код:
if ($tcaptcha['use_tc'] == 1 && !$xoopsUser) {
$qq = preg_split('/[\n\r]+/', stripslashes($tcaptcha['tc_qq']));
$q_id = array_rand($qq);
$question = array_shift(explode('|', $qq[$q_id]));
$tcaptcha_tray = new XoopsFormElementTray(_US_ANSWERTHEQUESTION, "<br /><br />");
$tcaptcha_tray->addElement(new XoopsFormLabel($question));
$tcaptcha_tray->addElement(new XoopsFormText('', 'tc_ans', 30, 60, ''));
$reg_form->addElement($tcaptcha_tray);
$reg_form->addElement(new XoopsFormHidden("q_id", $q_id));
}
3) Открываем файл
/language/russian/user.php
в конце файла перед
Ставим
PHP код:
define("_US_WRONGTCANSWER","Вы неправильно ответили на проверочный вопрос. Пожалуйста, измените ваш ответ или обновите страницу для генерации другого вопроса. Если вы не способны ответить на проверочные вопросы, пожалуйста, свяжитесь с администрацией сайта.");
define("_US_ANSWERTHEQUESTION", "Пожалуйста, ответьте на следующий вопрос:");
4) Открываем файл
/modules/system/admin/captcha/main.php
Находим функцию make_menu()
Находим строку
PHP код:
include("./cache/kcaptcha.php");
и после нее ставим
PHP код:
include("./cache/tcaptcha.php");
находим строку
PHP код:
$form->addElement($jpeg_quality);
И после нее ставим
PHP код:
$form->addElement(new FormHeadingRow(_AM_SETTINGTCAPTCHA));
$form->addElement(new XoopsFormRadioYN(_AM_ENABLETCAPTCHA, "use_tc", $tcaptcha['use_tc'], _YES,_NO));
$form->addElement(new XoopsFormTextArea(_AM_QUESTIONSANDANSWERS, 'tc_qq', stripslashes($tcaptcha['tc_qq']), 10));
Находим функцию save_maint()
PHP код:
function save_maint($content)
{
global $xoopsConfig, $myts, $_COOKIE;
$filename = RC_MOD_PATH."/system/cache/kcaptcha.php";
if ($file = fopen($filename, "w"))
{
fwrite($file, $content);
fclose($file);
redirect_header("admin.php?fct=captcha", 1, _UPDATED);
exit();
}
else
{
redirect_header("admin.php?fct=captcha", 1, _NOTUPDATED);
exit();
}
}
И полностью ее заменяем на
PHP код:
function save_maint($content, $filename = 'kcaptcha.php')
{
$filename = RC_MOD_PATH."/system/cache/" . $filename;
if ($file = fopen($filename, "w"))
{
fwrite($file, $content);
fclose($file);
return true;
}
else
{
return false;
}
}
Находим строки
PHP код:
save_maint($content);
make_menu();
и полностью заменяем их на
PHP код:
if (save_maint($content, 'kcaptcha.php') == false) {
redirect_header("admin.php?fct=captcha", 3, _NOTUPDATED);
exit();
}
$tc_qq = $myts->stripPHP($_REQUEST['tc_qq']);
$content = "<?php\n\n";
$content .= '$tcaptcha[\'use_tc\'] = ' . (int)$_REQUEST['use_tc'] . ";\n";
$content .= '$tcaptcha[\'tc_qq\'] = \'' . $myts->oopsAddSlashesGPC($tc_qq) . '\''. ";\n";
$content .= '?>';
if (save_maint($content, 'tcaptcha.php') == false) {
redirect_header("admin.php?fct=captcha", 3, _NOTUPDATED);
exit();
}
redirect_header("admin.php?fct=captcha", 3, _UPDATED);
exit();
5) Открываем файл
/modules/system/admin/captcha/language/russian/captcha.php
в конец файла перед
Добавляем
PHP код:
define("_AM_SETTINGTCAPTCHA", "Настройки текстовой капчи (дополнительные вопросы и ответы при регистрации)");
define("_AM_ENABLETCAPTCHA", "Включить текстовую капчу");
define("_AM_QUESTIONSANDANSWERS", "Введите набор из вопроса и ответа(-ов) <u>в каждой строке</u>. <br /><br /><span style=\"font-weight:normal;\">Сначала идет вопрос, потом, после вертикальной черты, ответ, или несколько вариантов ответа, разделенные вертикальной чертой.<br /><br />Формат: вопрос|ответ<br /><br />или<br /><br />вопрос|ответ1|ответ2|ответ3<br /><br /><b>Пример:</b><br /><br /><span class=\"rcxCode\">Пожалуйста, напечатайте без кавычек слово \"Дормедонт\"|Дормедонт<br />Сколько глаз у Циклопа?|один|1</span><br /><br /><u>Учтите, что ответы не чувствительны к регистру</u>.</span>");
6) Скачиваем прилагаемый архив tcaptcha.zip и распаковываем содержащийся в нем файл tcaptcha.php в директорию
/modules/system/cache/
После чего даем ему права доступа chmod = 666
7) идем в админку в раздел CAPTCHA, и добавляем нужные проверочные вопросы, там же можно отключить текстовую капчу.