<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* MaxSite CMS
* (c) http://max-3000.com/
*/
# функция автоподключения плагина
function antispam_autoload($args = array())
{
mso_hook_add( 'admin_init', 'antispam_admin_init'); # хук на админку
mso_hook_add( 'new_comments_check_spam', 'antispam_check_spam'); # хук новый комментарий
mso_hook_add( 'new_comments_check_spam_comusers', 'antispam_check_spam_comusers'); # хук новый комментарий для комюзера
}
# функция выполняется при активации (вкл) плагина
function antispam_activate($args = array())
{
mso_create_allow('antispam_edit', t('Админ-доступ к antispam'));
return $args;
}
# функция выполняется при деактивации (выкл) плагина
function antispam_deactivate($args = array())
{
mso_delete_option('plugin_antispam', 'plugins' ); // удалим созданные опции
return $args;
}
# функция выполняется при указаном хуке admin_init
function antispam_admin_init($args = array())
{
if ( !mso_check_allow('antispam_admin_page') )
{
return $args;
}
$this_plugin_url = 'plugin_antispam'; // url и hook
# добавляем свой пункт в меню админки
# первый параметр - группа в меню
# второй - это действие/адрес в url - http://сайт/admin/demo
# можно использовать добавочный, например demo/edit = http://сайт/admin/demo/edit
# Третий - название ссылки
mso_admin_menu_add('plugins', $this_plugin_url, t('Антиспам'));
# прописываем для указаного admin_url_ + $this_plugin_url - (он будет в url)
# связанную функцию именно она будет вызываться, когда
# будет идти обращение по адресу http://сайт/admin/_null
mso_admin_url_hook ($this_plugin_url, 'antispam_admin_page');
return $args;
}
# функция вызываемая при хуке, указанном в mso_admin_url_hook
function antispam_admin_page($args = array())
{
# выносим админские функции отдельно в файл
if ( !mso_check_allow('antispam_admin_page') )
{
echo t('Доступ запрещен');
return $args;
}
mso_hook_add_dinamic( 'mso_admin_header', ' return $args . "' . t('Антиспам') . ' "; ' );
mso_hook_add_dinamic( 'admin_title', ' return "' . t('Антиспам') . ' - " . $args; ' );
require(getinfo('plugins_dir') . 'antispam/admin.php');
}
# функция логгинга - сохраняем в файл все спамовские входы
function antispam_log($file = '', $msg = '')
{
if ($file)
{
$fn = getinfo('uploads_dir') . $file;
$fp = fopen( $fn, "a+");
fwrite($fp, '====================' . "\n" . $msg . "\n\n");
fclose($fp);
}
}
# функция проверки
function antispam_check_spam($arg = array())
{
$options_key = 'plugin_antispam';
$options = mso_get_option($options_key, 'plugins', array()); // все опции
if ( !isset($options['antispam_on']) ) $options['antispam_on'] = false; // включен ли антиспам
if (!$options['antispam_on']) return;
if ( !isset($options['logging']) ) $options['logging'] = false; // разрешено ли логирование?
if ( !isset($options['moderation_links']) ) $options['moderation_links'] = true; // модерировать все ссылки
if ( !isset($options['logging_file']) ) $options['logging_file'] = ''; // разрешено ли логирование?
if ( !isset($options['black_ip']) ) $options['black_ip'] = ''; // черный список IP
if ( !isset($options['black_words']) ) $options['black_words'] = ''; // черный список слов
if ( !isset($options['moderation_words']) ) $options['moderation_words'] = ''; // список слов модерации
$black_ip = explode("\n", trim($options['black_ip']));
if (in_array($arg['comments_author_ip'], $black_ip))
{
if ($options['logging']) antispam_log($options['logging_file'],
'BLACK_IP: ' . $arg['comments_author_ip'] . NR
. 'PAGE_ID: ' . $arg['comments_page_id'] . NR
. 'DATE: ' . $arg['comments_date'] . NR
. 'CONTENT: ' . NR . $arg['comments_content']
);
return array('check_spam'=>true, 'message'=>t('Для вашего IP комментирование запрещено!'));
}
$black_words = explode("\n", trim($options['black_words']));
foreach ($black_words as $word)
{
if (
($word and mb_stristr($arg['comments_content'], $word, false, 'UTF-8'))
or
($word and $arg['comments_author'] and mb_stristr($arg['comments_author'], $word, false, 'UTF-8'))
) // есть какое-то вхождение
{
if ($options['logging']) antispam_log($options['logging_file'],
'BLACK WORD: ' . $word . NR
. 'IP: ' . $arg['comments_author_ip'] . NR
. 'PAGE_ID: ' . $arg['comments_page_id'] . NR
. 'DATE: ' . $arg['comments_date'] . NR
. 'CONTENT: ' . NR . $arg['comments_content']
);
return array('check_spam'=>true, 'message'=>t('Вы используете запрещенные слова!'));
}
}
if ($options['moderation_links'])
{
// Если в комментарии хоть одна ссылка - сразу на модерацию
$check_a = (strpos( $arg['comments_content'], '<a') === false ) ? false : true;
if ($check_a) return array('moderation'=>1); // отправим на модерацию
}
$moderation_words = explode("\n", trim($options['moderation_words']));
foreach ($moderation_words as $word)
{
if ($word and mb_stristr($arg['comments_content'], $word, false, 'UTF-8')) // есть какое-то вхождение
{
return array('moderation'=>1);
}
}
}
# модерирование комюзеров
function antispam_check_spam_comusers($arg = array())
{
# входящий параметр
# array( 'comments_page_id' => $comments_page_id, 'comments_comusers_id' => $comusers_id,
# 'comments_com_approved' => $comments_com_approved
# выход: 1 разрешить 0 - модерация
// смотрим есть ли id в списке модерируемом. если есть, то возвращаем на модерацию = 0
$options_key = 'plugin_antispam';
$options = mso_get_option($options_key, 'plugins', array()); // все опции
if ( !isset($options['antispam_on']) ) return $arg['comments_com_approved']; // включен ли антиспам
if ( !isset($options['moderation_comusers']) ) return $arg['comments_com_approved']; // нет списка
$nums = explode("\n", trim($options['moderation_comusers'])); // список комюзеров
foreach ($nums as $num)
{
if ( ( (int) trim($num)) == $arg['comments_comusers_id']) return 0;
}
return 1;
}
# end file