Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Убрать капчу форума.

00 голосов
1
Здравствуйте. 
Можно ли поменять стандартную капчу на какую-нить другую, не изменить вид капчи, а именно вместо стандартной поставить сторонюю.
Что для этого нужно?
спросил 03 Фев, 14 от InStar (120 баллов)

1 Ответ

00 голосов
Может кому и пригодиться. Задача была поменять на форуме стандартную капчу на recaptcha, ибо боты заспамили форум, не помогла и настройка стандартной капчи.
Капча вырисовывается в шаблоне компонента forum.post.form.
В шаблоне находим место где она выводиться и заменяем все это на вывод recaptcha, при этом заключив вывод recaptcha в такое условие 
Код
<? if($arResult["SHOW_PANEL_EDIT_PANEL_GUEST"] == "Y") {
?>
<div class="group captcha">
   <?require_once($_SERVER["DOCUMENT_ROOT"].'/recaptchalib.php');
   $publickey = "ваш публичный ключ от recaptcha"; 
   echo recaptcha_get_html($publickey);?>
</div>
<? } ?>
Это проверка нужна для того чтобы отображать капчу только для незалогиненных пользователей.После этого нужно в настройках форума (Сервисы->Форумы->Список форумов) отключить использование капчи - "использовать CAPTCHA".
Далее надо проверять что там пользователь понаписал в строке проверки кода. Проверка это должна происходить перед сохранением сообщения, которое происходит в компоненте forum.topic.read файл action.php. Поскольку компонент стандартный, то его надо кастомизировать, чтобы при обновлении системы, не слетели наши изменения.
В этом action.php проверяется переменная $action на текущее действие пользователя, нас интересует case "REPLY". У меня выглядит он так :

Код
if (!$USER->IsAuthorized()) {
            if(isset($_POST["recaptcha_challenge_field"]) && isset($_POST["recaptcha_response_field"]))
            {
              require_once($_SERVER["DOCUMENT_ROOT"].'/recaptchalib.php');
              $privatekey = "ваш приватный ключ от recaptcha";
                $resp = recaptcha_check_answer($privatekey,
                          $_SERVER["REMOTE_ADDR"],
                          $_POST["recaptcha_challenge_field"],
                          $_POST["recaptcha_response_field"]);
                if (!$resp->is_valid) {
                
                $arResult["ERROR_MESSAGE"] = "Неверно указан код защиты от автоматических сообщений."; 
$captcha = false;
                } else {$captcha = true;}
            } 
           } else {$captcha = true;}
переменная $captcha мне понадобилась для дальнейшей проверки, после всех case-ов идет сохранение сообщения,

Код
if ($captcha)
{
   $result = ForumActions($action, $arFields, $strErrorMessage, $strOKMessage); 
}
else {
   $result=false;
   $strErrorMessage = GetMessage("FORUM_POSTM_CAPTCHA");
}
если капча была введена правильно, то сохраняем сообщение, если нет, то устанавливаем $result в false, который и будет возвращаться.

Это все для ответа на сообщение. Если на форуме есть возможность создавать темы незалогиненным пользователям, то похожие действия повторяются и для компонента forum.topic.new.
Вроде ничего не забыл....
Всем удачи!
ответил 12 Июнь, 14 от InStar (120 баллов)

Похожие вопросы

+1 голос
2 ответов
спросил 03 Авг, 17 от аноним
0 голосов
1 ответ
0 голосов
2 ответов
спросил 17 Март, 14 от MrLonG (200 баллов)
0 голосов
2 ответов
спросил 16 Фев, 14 от Tristana (100 баллов)