Клиентская интеграция
Комментарии информационных систем
Для подключения антиспам-системы в комментариях информационных систем необходимо:
- В XSL-шаблоне для уведомления о добавлении комментария вносим новую обработку ошибки.
После:<!-- Ошибка. Неверный код подтверждения -->
<xsl:when test="/document/error_captcha = 1">
<div id="error">Ошибка! Вы неверно ввели число подтверждения отправки комментария!</div>
</xsl:when>
Добавляем:<!-- Ошибка. Не прошел антиспам -->
<xsl:when test="/document/error_antispam = 1">
<div id="error">Ошибка! Комментарий не может быть добавлен!</div>
</xsl:when> - Переходим в типовую динамическую страницу информационных систем и настраиваем её на обработку антиспам-системы.
Для этого блок:$oComment->save();
$oComment
->dateFormat($oInformationsystem->format_date)
->dateTimeFormat($oInformationsystem->format_datetime);
$oInformationsystem_Item->add($oComment)->clearCache();
$oXmlCommentTag->addEntity($oInformationsystem);
// Отправка письма администратору
$sText = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl')))
->process();
$aFrom = array_map('trim', explode(',', EMAIL_TO));
$oCore_Mail_Driver = Core_Mail::instance()
->to(EMAIL_TO)
->from($aFrom[0])
->header('Reply-To', Core_Valid::email($oComment->email)
? $oComment->email
: $aFrom[0])
->subject(Core::_('Informationsystem.comment_mail_subject'))
->message(trim($sText))
->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
? 'text/plain'
: 'text/html'
)
->send();
меняем на:// Antispam
if (Core::moduleIsActive('antispam'))
{
$Antispam_Controller = new Antispam_Controller();
$bAntispamAnswer = $Antispam_Controller
->addText($oComment->author)
->addText($oComment->email)
->addText($oComment->phone)
->addText($oComment->subject)
->addText($oComment->text)
->execute();
}
else
{
$bAntispamAnswer = TRUE;
}
if ($bAntispamAnswer)
{
$oComment->save();
$oComment
->dateFormat($oInformationsystem->format_date)
->dateTimeFormat($oInformationsystem->format_datetime);
$oInformationsystem_Item->add($oComment)->clearCache();
$oXmlCommentTag->addEntity($oInformationsystem);
// Отправка письма администратору
$sText = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl')))
->process();
$aFrom = array_map('trim', explode(',', EMAIL_TO));
$oCore_Mail_Driver = Core_Mail::instance()
->to(EMAIL_TO)
->from($aFrom[0])
->header('Reply-To', Core_Valid::email($oComment->email)
? $oComment->email
: $aFrom[0])
->subject(Core::_('Informationsystem.comment_mail_subject'))
->message(trim($sText))
->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
? 'text/plain'
: 'text/html'
)
->send();
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_antispam')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Informationsystem_Controller_Show->addEntity($oComment);
}
Готово. После данных манипуляций всё, что приходит в полях комментария будет проверятся через антиспам-систему и список стоп-слов.
Комментарии интернет-магазина
Для подключения антиспам-системы в комментариях интернет-магазина необходимо:
- В XSL-шаблоне для уведомления о добавлении комментария вносим новую обработку ошибки.
После:<!-- Ошибка. Неверный код подтверждения -->
<xsl:when test="/document/error_captcha = 1">
<div id="error">Ошибка! Вы неверно ввели число подтверждения отправки комментария!</div>
</xsl:when>
Добавляем:<!-- Ошибка. Не прошел антиспам -->
<xsl:when test="/document/error_antispam = 1">
<div id="error">Ошибка! Комментарий не может быть добавлен!</div>
</xsl:when> - Переходим в типовую динамическую страницу интернет-магазина и настраиваем её на обработку антиспам-системы.
Для этого блок:$oComment->save();
$oComment
->dateFormat($oShop->format_date)
->dateTimeFormat($oShop->format_datetime);
$oShop_Item->add($oComment)->clearCache();
$oXmlCommentTag->addEntity($oShop);
// Отправка письма администратору
$sText = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(
Core_Entity::factory('Xsl')
->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl'))
)
->process();
$aFrom = array_map('trim', explode(',', EMAIL_TO));
Core_Mail::instance()
->to(EMAIL_TO)
->from($aFrom[0])
->header('Reply-To', Core_Valid::email($oComment->email)
? $oComment->email
: $aFrom[0]
)
->subject(Core::_('Shop.comment_mail_subject'))
->message(trim($sText))
->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
? 'text/plain'
: 'text/html'
)
->send();
меняем на:// Antispam
if (Core::moduleIsActive('antispam'))
{
$Antispam_Controller = new Antispam_Controller();
$bAntispamAnswer = $Antispam_Controller
->addText($oComment->author)
->addText($oComment->email)
->addText($oComment->phone)
->addText($oComment->subject)
->addText($oComment->text)
->execute();
}
else
{
$bAntispamAnswer = TRUE;
}
if ($bAntispamAnswer)
{
$oComment->save();
$oComment
->dateFormat($oShop->format_date)
->dateTimeFormat($oShop->format_datetime);
$oShop_Item->add($oComment)->clearCache();
$oXmlCommentTag->addEntity($oShop);
// Отправка письма администратору
$sText = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(
Core_Entity::factory('Xsl')
->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl'))
)
->process();
$aFrom = array_map('trim', explode(',', EMAIL_TO));
Core_Mail::instance()
->to(EMAIL_TO)
->from($aFrom[0])
->header('Reply-To', Core_Valid::email($oComment->email)
? $oComment->email
: $aFrom[0]
)
->subject(Core::_('Shop.comment_mail_subject'))
->message(trim($sText))
->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
? 'text/plain'
: 'text/html'
)
->send();
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_antispam')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Shop_Controller_Show->addEntity($oComment);
}
Корзина
Для подключения антиспам-системы в корзине необходимо внести изменения в XSL-шаблон обработки формы адреса доставки.
После тега <form> добавляем вывод ошибки:
<xsl:if test="error != ''"> <div class="alert alert-danger alert-cart" role="alert"> <xsl:value-of disable-output-escaping="yes" select="error" /> </div> </xsl:if>
Далее переходим в код типовой динамической страницы корзины и перед строкой switch (Core_Array::getPost('recount') ? 0 : Core_Array::getPost('step'))
добавляем блок:
// Проверка антиспамом формы с данными if (Core_Array::getPost('step') == 2) { // Antispam if (Core::moduleIsActive('antispam')) { $Antispam_Controller = new Antispam_Controller(); foreach ($_POST as $tmpValue) { if (is_string($tmpValue)) { $Antispam_Controller->addText($tmpValue); } } $bAntispamAnswer = $Antispam_Controller->execute(); // Проверка не пройдена if (!$bAntispamAnswer) { $_POST['step'] = 1; } } }
Далее после строки $Shop_Address_Controller_Show = new Shop_Address_Controller_Show($oShop);
добавляем:
if (isset($bAntispamAnswer) && !$bAntispamAnswer) { $Shop_Address_Controller_Show->addEntity( Core::factory('Core_Xml_Entity') ->name('error') ->value('Ошибка, вам запрещено заполнение формы') ); }
Формы
Для подключения антиспам-системы в модуле форм необходимо внести изменения в XSL-шаблон обработки формы.
После:
<xsl:when test="errorId = 2">
Прошло слишком мало времени с момента последней отправки Вами формы!
</xsl:when>
Добавляем:
<xsl:when test="errorId = 3">
Ошибка! Форма не может быть обработана!
</xsl:when>
Правка типовой динамической страницы форм не требуется, так как вся обработка антиспам-системы вынесена в стандартный контроллер показа форм Form_Controller_Show.
Клиенты
Для подключения антиспам-системы при регистрации пользователей сайта необходимо внести изменения в код типовой динамической страницы регистрации. Блок:
$oSiteuser->save();
if ($bNewUser)
{
// Внесение пользователя в группу по умолчанию
$oSiteuser_Group = $oSiteuser->Site->Siteuser_Groups->getDefault();
if (!is_null($oSiteuser_Group))
{
$oSiteuser_Group->add($oSiteuser);
}
}
// Почтовые рассылки
if (Core::moduleIsActive('maillist'))
{
$aMaillists = $oSiteuser->getAllowedMaillists();
foreach ($aMaillists as $oMaillists)
{
$oMaillist_Siteuser = $oSiteuser->Maillist_Siteusers->getByMaillist($oMaillists->id);
// Пользователь подписан
if (Core_Array::getPost("maillist_{$oMaillists->id}"))
{
// Пользователь не был подписан
is_null($oMaillist_Siteuser) && $oMaillist_Siteuser = Core_Entity::factory('Maillist_Siteuser')->siteuser_id($oSiteuser->id)->maillist_id($oMaillists->id);
$oMaillist_Siteuser->type = Core_Array::getPost("type_{$oMaillists->id}") == 0 ? 0 : 1;
$oMaillist_Siteuser->save();
}
elseif (!is_null($oMaillist_Siteuser))
{
// Отписываем пользователя от рассылки
$oMaillist_Siteuser->delete();
}
}
}
// Дополнительные свойства
$oSiteuser_Property_List = Core_Entity::factory('Siteuser_Property_List', $oSiteuser->site_id);
$aProperties = $oSiteuser_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Поле не скрытое
if ($oProperty->type != 10)
{
$aProperty_Values = $oProperty->getValues($oSiteuser->id);
count($aProperty_Values) == 0 && $aProperty_Values[0] = $oProperty->createNewValue($oSiteuser->id);
// Дополнительные свойства
switch ($oProperty->type)
{
case 0: // Int
case 3: // List
case 5: // Information system
$aProperty_Values[0]->value(intval(Core_Array::getPost("property_{$oProperty->id}")));
$aProperty_Values[0]->save();
break;
case 1: // String
case 4: // Textarea
case 6: // Wysiwyg
$aProperty_Values[0]->value(Core_Str::stripTags(strval(Core_Array::getPost("property_{$oProperty->id}"))));
$aProperty_Values[0]->save();
break;
case 8: // Date
$date = strval(Core_Array::getPost("property_{$oProperty->id}"));
$date = Core_Date::date2sql($date);
$aProperty_Values[0]->value($date);
$aProperty_Values[0]->save();
break;
case 9: // Datetime
$datetime = strval(Core_Array::getPost("property_{$oProperty->id}"));
$datetime = Core_Date::datetime2sql($datetime);
$aProperty_Values[0]->value($datetime);
$aProperty_Values[0]->save();
break;
case 2: // File
$aFileData = Core_Array::getFiles("property_{$oProperty->id}");
if (!is_null($aFileData))
{
$aProperty_Values[0]->setDir(
$oSiteuser_Property_List->getDirPath($oSiteuser)
);
if (Core_File::isValidExtension($aFileData['name'], array('JPG', 'JPEG', 'GIF', 'PNG')))
{
// Удаление файла большого изображения
if ($aProperty_Values[0]->file)
{
$aProperty_Values[0]
->deleteLargeFile()
->deleteSmallFile();
}
$aProperty_Values[0]->save();
$aProperty_Values[0]->file = 'property_' . $aProperty_Values[0]->id . '.' . Core_File::getExtension($aFileData['name']);
$aProperty_Values[0]->file_name = Core_Str::stripTags($aFileData['name']);
try
{
$oSiteuser_Property_List->createPropertyDir($oSiteuser);
// Resize image
Core_Image::instance()->resizeImage($aFileData['tmp_name'], $oSiteuser->Site->max_size_load_image, $oSiteuser->Site->max_size_load_image, $aProperty_Values[0]->getLargeFilePath());
$aProperty_Values[0]->save();
}
catch (Exception $e) {
Core_Message::show($e->getMessage(), 'error');
};
}
}
break;
case 7: // Checkbox
$aProperty_Values[0]->value(is_null(Core_Array::getPost("property_{$oProperty->id}")) ? 0 : 1);
$aProperty_Values[0]->save();
break;
}
}
}
// Регистрация нового пользователя
if ($bNewUser)
{
if ($bQuickRegistration)
{
// Авторизуем зарегистрированного пользователя
$oSiteuser->setCurrent();
// Перенаправляем на страницу, с которой он пришел
!is_null(Core_Array::getPost('location')) && $Siteuser_Controller_Show->go(
strval(Core_Array::getPost('location'))
);
}
// Отправка письма
$oSite_Alias = $oSiteuser->Site->getCurrentAlias();
$Siteuser_Controller_Show
->setEntity($oSiteuser)
->applyAffiliate(Core_Array::get($_COOKIE, 'affiliate_name'))
->subject(
Core::_('Siteuser.confirm_subject', !is_null($oSite_Alias) ? $oSite_Alias->alias_name_without_mask : '')
)
->sendConfirmationMail(Core_Entity::factory('Xsl')->getByName($xsl_letter));
?>
<h1>Спасибо за регистрацию</h1>
<p>Для продолжения работы необходимо подтвердить регистрацию Ваших данных.
В Ваш адрес отправлено письмо, содержащее ссылку для подтверждения регистрации.</p>
<p>Если Ваш браузер поддерживает автоматическое перенаправление через 3 секунды Вы перейдете на страницу <a href="../">авторизации пользователя</a>.</p>
<script type="text/javascript">setTimeout(function(){ location = '../' }, 3000);</script>
<?php
return;
}
else
{
?><h1>Ваши анкетные данные успешно изменены</h1>
<p>Если Ваш браузер поддерживает автоматическое перенаправление через 3 секунды Вы перейдете в <a href="../">кабинет пользователя</a>.</p>
<script type="text/javascript">setTimeout(function(){ location = '../' }, 3000);</script>
<?php
return;
}
Меняется на:
// Antispam
if (Core::moduleIsActive('antispam'))
{
$Antispam_Controller = new Antispam_Controller();
$bAntispamAnswer = $Antispam_Controller
->addText($oSiteuser->login)
->addText($oSiteuser->email)
->addText($oSiteuser->name)
->addText($oSiteuser->patronymic)
->addText($oSiteuser->surname)
->addText($oSiteuser->company)
->addText($oSiteuser->website)
->addText($oSiteuser->country)
->addText($oSiteuser->city)
->addText($oSiteuser->address)
->execute();
}
else
{
$bAntispamAnswer = TRUE;
}
if ($bAntispamAnswer)
{
$oSiteuser->save();
if ($bNewUser)
{
// Внесение пользователя в группу по умолчанию
$oSiteuser_Group = $oSiteuser->Site->Siteuser_Groups->getDefault();
if (!is_null($oSiteuser_Group))
{
$oSiteuser_Group->add($oSiteuser);
}
}
// Почтовые рассылки
if (Core::moduleIsActive('maillist'))
{
$aMaillists = $oSiteuser->getAllowedMaillists();
foreach ($aMaillists as $oMaillists)
{
$oMaillist_Siteuser = $oSiteuser->Maillist_Siteusers->getByMaillist($oMaillists->id);
// Пользователь подписан
if (Core_Array::getPost("maillist_{$oMaillists->id}"))
{
// Пользователь не был подписан
is_null($oMaillist_Siteuser) && $oMaillist_Siteuser = Core_Entity::factory('Maillist_Siteuser')->siteuser_id($oSiteuser->id)->maillist_id($oMaillists->id);
$oMaillist_Siteuser->type = Core_Array::getPost("type_{$oMaillists->id}") == 0 ? 0 : 1;
$oMaillist_Siteuser->save();
}
elseif (!is_null($oMaillist_Siteuser))
{
// Отписываем пользователя от рассылки
$oMaillist_Siteuser->delete();
}
}
}
// Дополнительные свойства
$oSiteuser_Property_List = Core_Entity::factory('Siteuser_Property_List', $oSiteuser->site_id);
$aProperties = $oSiteuser_Property_List->Properties->findAll();
foreach ($aProperties as $oProperty)
{
// Поле не скрытое
if ($oProperty->type != 10)
{
$aProperty_Values = $oProperty->getValues($oSiteuser->id);
count($aProperty_Values) == 0 && $aProperty_Values[0] = $oProperty->createNewValue($oSiteuser->id);
// Дополнительные свойства
switch ($oProperty->type)
{
case 0: // Int
case 3: // List
case 5: // Information system
$aProperty_Values[0]->value(intval(Core_Array::getPost("property_{$oProperty->id}")));
$aProperty_Values[0]->save();
break;
case 1: // String
case 4: // Textarea
case 6: // Wysiwyg
$aProperty_Values[0]->value(Core_Str::stripTags(strval(Core_Array::getPost("property_{$oProperty->id}"))));
$aProperty_Values[0]->save();
break;
case 8: // Date
$date = strval(Core_Array::getPost("property_{$oProperty->id}"));
$date = Core_Date::date2sql($date);
$aProperty_Values[0]->value($date);
$aProperty_Values[0]->save();
break;
case 9: // Datetime
$datetime = strval(Core_Array::getPost("property_{$oProperty->id}"));
$datetime = Core_Date::datetime2sql($datetime);
$aProperty_Values[0]->value($datetime);
$aProperty_Values[0]->save();
break;
case 2: // File
$aFileData = Core_Array::getFiles("property_{$oProperty->id}");
if (!is_null($aFileData))
{
$aProperty_Values[0]->setDir(
$oSiteuser_Property_List->getDirPath($oSiteuser)
);
if (Core_File::isValidExtension($aFileData['name'], array('JPG', 'JPEG', 'GIF', 'PNG')))
{
// Удаление файла большого изображения
if ($aProperty_Values[0]->file)
{
$aProperty_Values[0]
->deleteLargeFile()
->deleteSmallFile();
}
$aProperty_Values[0]->save();
$aProperty_Values[0]->file = 'property_' . $aProperty_Values[0]->id . '.' . Core_File::getExtension($aFileData['name']);
$aProperty_Values[0]->file_name = Core_Str::stripTags($aFileData['name']);
try
{
$oSiteuser_Property_List->createPropertyDir($oSiteuser);
// Resize image
Core_Image::instance()->resizeImage($aFileData['tmp_name'], $oSiteuser->Site->max_size_load_image, $oSiteuser->Site->max_size_load_image, $aProperty_Values[0]->getLargeFilePath());
$aProperty_Values[0]->save();
}
catch (Exception $e) {
Core_Message::show($e->getMessage(), 'error');
};
}
}
break;
case 7: // Checkbox
$aProperty_Values[0]->value(is_null(Core_Array::getPost("property_{$oProperty->id}")) ? 0 : 1);
$aProperty_Values[0]->save();
break;
}
}
}
// Регистрация нового пользователя
if ($bNewUser)
{
if ($bQuickRegistration)
{
// Авторизуем зарегистрированного пользователя
$oSiteuser->setCurrent();
// Перенаправляем на страницу, с которой он пришел
!is_null(Core_Array::getPost('location')) && $Siteuser_Controller_Show->go(
strval(Core_Array::getPost('location'))
);
}
// Отправка письма
$oSite_Alias = $oSiteuser->Site->getCurrentAlias();
$Siteuser_Controller_Show
->setEntity($oSiteuser)
->applyAffiliate(Core_Array::get($_COOKIE, 'affiliate_name'))
->subject(
Core::_('Siteuser.confirm_subject', !is_null($oSite_Alias) ? $oSite_Alias->alias_name_without_mask : '')
)
->sendConfirmationMail(Core_Entity::factory('Xsl')->getByName($xsl_letter));
?>
<h1>Спасибо за регистрацию</h1>
<p>Для продолжения работы необходимо подтвердить регистрацию Ваших данных.
В Ваш адрес отправлено письмо, содержащее ссылку для подтверждения регистрации.</p>
<p>Если Ваш браузер поддерживает автоматическое перенаправление через 3 секунды Вы перейдете на страницу <a href="../">авторизации пользователя</a>.</p>
<script type="text/javascript">setTimeout(function(){ location = '../' }, 3000);</script>
<?php
return;
}
else
{
?><h1>Ваши анкетные данные успешно изменены</h1>
<p>Если Ваш браузер поддерживает автоматическое перенаправление через 3 секунды Вы перейдете в <a href="../">кабинет пользователя</a>.</p>
<script type="text/javascript">setTimeout(function(){ location = '../' }, 3000);</script>
<?php
return;
}
}
else
{
$Siteuser_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('error')->value('Пользователь не может быть зарегистрирован!')
);
}