Captcha и ее смена при каждом обновлении страницы

Материал из Umicms
Перейти к:навигация, поиск

По умолчанию, каптча для одного Гостя не меняется, точнее самое изображение меняется, но набор символов остается неизменным, также после правильного ввода каптчи, для текущего пользователя (Гостя) она отключается. Если по каким-то причинам необходимо сделать так, чтобы при каждом обновлении страницы менялся набор символов для каптчи и даже при правильном вводе каптчи она снова отображалась, то можно воспользоваться кастомным макросом следующего содержания:

public function captchanew($template="default") {
    $config = mainConfiguration::getInstance();
    if(!$config->get('anti-spam', 'captcha.enabled')) {
	return '';
    }
		
    unset($_SESSION['umi_captcha_plain']);
		
    if(getSession('is_human') == 1){
     unset($_COOKIE['user_captcha']);
     unset($_SESSION['is_human']);
    }

    return umiCaptcha::generateCaptcha($template);
}


метод необходимо добавить в файл classes/modules/custom.php, после слов //TODO: Write your own macroses here

В шаблонах сайтах необходимо будет вызвать новый макрос, вместо system captcha(), для TPL вызов следующий:

%custom captchanew()%

в XSLT:

<xsl:apply-templates select="document('udata://custom/captchanew/')/udata" />

И в самом шаблоне должны стоять уже новые условия:

<xsl:template match="udata[@module = 'custom' and @method = 'captchanew'">
...
</xsl:template>