Skip to content

Instantly share code, notes, and snippets.

@4e6ka
Last active March 12, 2024 10:07
Show Gist options
  • Save 4e6ka/7fcf59b32eca8244a3d80e15476353fe to your computer and use it in GitHub Desktop.
Save 4e6ka/7fcf59b32eca8244a3d80e15476353fe to your computer and use it in GitHub Desktop.
Антиспам для Formit, фильтрует ссылки, емейлы
[[!AjaxForm?
&snippet=`FormIt`
&hooks=`recaptchav2,email,spam,FormItSaveForm`
&form=`tpl.AjaxForm`
&customValidators=`antispam`
&submitVar=`zayavkamodal`
&emailTpl=`MyEmailChunk`
&emailTo=`[[++managers_mail]]`
&emailFrom=`[[++mail]]`
&emailSubject=`From page | [[*pagetitle]] | [[!+nowdate:default=`now`:strtotime:date=`%d.%m.%Y`]]`
&validate=`name:required:regexp=^/[^А-я]/^,phone:required:minLength=^7^,mess:antispam,g-recaptcha-response:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено`
]]
<?php
/*Сниппет, проверяющий содержание формы на признаки спама*/
//Определяем значения служебных переменных по умолчанию
$success=true;
$haserror=false;
//Массив запрещенных фрагментов строк
//Если в каком либо поле формы встретится один из ниже перечисленных фрагментов, то далее обрабатывать сообщение не будем
$forb=array(
'@',
'http',
'://',
'www'
);
//Пробегаем по массиву запрещенных фрагментов
foreach ($forb as $f){
if($haserror==false){ //Если еще не встретился запрещенный фрагмент
$haserror=strpos($value,$f); //Проверяем его в значении текущего проверяемого поля ввода
}
}
//Если была обнаружена ошибка
if ($haserror!=false) {
$validator->addError($key,'Недопустимое значение!');
$modx->log(xPDO::LOG_LEVEL_ERROR,'Антиспам: IP='.$_SERVER['REMOTE_ADDR'].' СОДЕРЖАНИЕ '.$key.': '.$value);
return false;
}
//Возвращаем результат работы валидатора
return $success;
<form action="[[~[[*id]]]]" role="form" id="ajaxform3" class="mainForm-form">
<input type="hidden" name="succes_id" value="[[+succes_id_block]]">
<input type="hidden" name="close_success" value="[[+close_success]]">
<div class="form-group mb-3">
<input type="text" class="form-control" placeholder="Имя" id="name" name="name" value="[[+fi.name]]">
</div>
<div class="form-group mb-3">
<input type="phone" class="form-control" placeholder="Телефон" id="phone" name="phone" value="[[+fi.phone]]">
<span class="error_phone">[[+fi.error.phone]]</span>
</div>
<div class="form-group mb-3">
<textarea class="form-control" id="mess" name="mess" placeholder="Ваш вопрос" rows="3" value="[[+fi.mess]]"></textarea>
<span class="error_mess">[[+fi.error.mess]]</span>
</div>
[[!recaptchav2_render]]
[[!+fi.error.recaptchav2_error]]
<span class="error_g-recaptcha-response error error_personal"></span>
<div class="form-group"><button type="submit" class="btn btn-primary w-100 mt-3" name="zayavkamodal" value="zayavkamodal">Отправить</button></div>
[[+fi.success:is=`1`:then=`
<div class="alert alert-success">[[+fi.successMessage]]</div>
`]]
[[+fi.validation_error:is=`1`:then=`
<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
<script>
window.location.href = "ok.html";
</script>
`]]
</form>
@4e6ka
Copy link
Author

4e6ka commented Jun 23, 2020

Добавляем к Formit или AjaxForm

&customValidators=`antispam`
&validate=`phone:required, problem:antispam`

@4e6ka
Copy link
Author

4e6ka commented Jul 23, 2020

Пример вызова

[[!AjaxForm?
&snippet=FormIt
&hooks=recaptchav2,email,spam,FormItSaveForm
&form=bigform_bs4
&customValidators=antispam
&submitVar=bigform
&emailTpl=MyEmailChunk_express
&emailTo=[[++managermails]]
&emailFrom=``
&emailSubject=[[*pagetitle]], заявка с проблемой, [[!time:date=%b %d %Y %R`]]`
&validate=`name:required:regexp=^/[^А-я]/^,phone:required:minLength=^7^, message:antispam, g-recaptcha-response:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено`
]]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment