Может кому и пригодиться. Задача была поменять на форуме стандартную капчу на recaptcha, ибо боты заспамили форум, не помогла и настройка стандартной капчи.
Капча вырисовывается в шаблоне компонента forum.post.form.
В шаблоне находим место где она выводиться и заменяем все это на вывод recaptcha, при этом заключив вывод recaptcha в такое условие
[CODE]<? 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>
<? } ?>[/CODE]Это проверка нужна для того чтобы отображать капчу только для незалогиненных пользователей.После этого нужно в настройках форума (Сервисы->Форумы->Список форумов) отключить использование капчи - "использовать CAPTCHA".
Далее надо проверять что там пользователь понаписал в строке проверки кода. Проверка это должна происходить перед сохранением сообщения, которое происходит в компоненте forum.topic.read файл action.php. Поскольку компонент стандартный, то его надо кастомизировать, чтобы при обновлении системы, не слетели наши изменения.
В этом action.php проверяется переменная $action на текущее действие пользователя, нас интересует case "REPLY". У меня выглядит он так :
[CODE]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;}[/CODE]переменная $captcha мне понадобилась для дальнейшей проверки, после всех case-ов идет сохранение сообщения,
[CODE]if ($captcha)
{
$result = ForumActions($action, $arFields, $strErrorMessage, $strOKMessage);
}
else {
$result=false;
$strErrorMessage = GetMessage("FORUM_POSTM_CAPTCHA");
}[/CODE]если капча была введена правильно, то сохраняем сообщение, если нет, то устанавливаем $result в false, который и будет возвращаться.
Это все для ответа на сообщение. Если на форуме есть возможность создавать темы незалогиненным пользователям, то похожие действия повторяются и для компонента forum.topic.new.
Вроде ничего не забыл....
Всем удачи!