Центр пользователя  |  Ваши сообщения  |  FAQ
Форум поддержки phpBB » phpBB 3.0.x » Модификация phpBB 3.0.x » Моды каталога

Cleantalk Spam protect

Обсуждение и поддержка модов, размещённых в каталоге
Пожалуйста, помните, что существуют: Поиск, Правила форума
Возможно, ответ на Ваш вопрос уже имеется: Документация, Статьи, Накопленный опыт
Полезные материалы по этой теме: Инструкция по установке модов

Сообщение 18 июн 2013, 12:21

Должно быть вы пропустили этап обновления базы данных, давайте попробуем еще раз его пройти. Для этого перейдите по ссылке:

Код: выделить все
http://SITE.RU/FORUM/install/index.php


По ссылке должен появиться мастер обновления базы, как показано на скриншоте. Следуйте его указаниям.
Вложения
umil_wizard.png
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 18 июн 2013, 18:08

shagimuratov писал(а):Должно быть вы пропустили этап обновления базы данных, давайте попробуем еще раз его пройти. Для этого перейдите по ссылке:

Код: выделить все
http://SITE.RU/FORUM/install/index.php


По ссылке должен появиться мастер обновления базы, как показано на скриншоте. Следуйте его указаниям.

не переходит выдает вот что: The requested URL /install/index.php was not found on this server.
LIZARD
Пользователь
 
Сообщений: 11
Зарегистрирован:
31 май 2013, 12:38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение 18 июн 2013, 19:07

Хм, скопируйте пожалуйта папки:

Код: выделить все
root/install
root/umil


Из инсталяционного архива модуля, затем еще раз повторите запрос к файлу из броузера.
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 18 июн 2013, 19:39

Копировать надо без папки root, т.е. должно получиться:

Код: выделить все
PHPBB_ROOT/install
PHPBB_ROOT/umil
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 18 июн 2013, 19:52

shagimuratov писал(а):Хм, скопируйте пожалуйта папки:

Код: выделить все
root/install
root/umil


Из инсталяционного архива модуля, затем еще раз повторите запрос к файлу из броузера.

Спасибо, проблему решил, все заработало. Надо было поместить папку в корневой каталог,а я одну папку переместил с заменой по тому пути куда автомод их скидывает
LIZARD
Пользователь
 
Сообщений: 11
Зарегистрирован:
31 май 2013, 12:38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение 18 июн 2013, 20:12

LIZARD писал(а):Спасибо, проблему решил, все заработало. Надо было поместить папку в корневой каталог,а я одну папку переместил с заменой по тому пути куда автомод их скидывает


Отлично!
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 23 сен 2013, 23:24

Уважаемые разработчики мода, поясните, пожалуйста, что у Вас тут происходит и зачем вообще нужен этот код:
Код: выделить все
         $ct_example    = null; // Example text
         $message    = $message_parser->message; // Post message

         if ($topic_id == 0)
         { // First post in topic
            $sql    = 'SELECT p.post_text FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p, ' . FORUMS_TABLE . ' f
                                        WHERE t.forum_id = f.forum_id and
                                        p.forum_id = f.forum_id and p.topic_id = t.topic_id and p.post_id = t.topic_first_post_id and
                                        p.post_approved = 1 and f.forum_id = ' . (int) $forum_id . ' ORDER BY p.post_time desc';
            $result    = $db->sql_query_limit($sql, $config['ct_post_count']);
            while ($row    = $db->sql_fetchrow($result))
            {
               $ct_example['body'] = $row['post_text'];
            }
            $db->sql_freeresult($result);

            $message = $subject . "<br />" . $message;
         }
         else
         {
            $sql             = 'SELECT topic_title, topic_first_post_id FROM ' . TOPICS_TABLE . ' WHERE topic_id = ' . (int) $topic_id;
            $result             = $db->sql_query($sql);
            $sql_result          = $db->sql_fetchrow($result);
            $topic_title       = $sql_result['topic_title'];
            $topic_first_post_id = $sql_result['topic_first_post_id'];
            $db->sql_freeresult($result);

            $sql       = 'SELECT post_text FROM ' . POSTS_TABLE . ' WHERE post_id = ' . (int) $topic_first_post_id;
            $result       = $db->sql_query($sql);
            $sql_result    = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);

            $ct_example['title'] = $topic_title;
            $ct_example['body'] = $sql_result['post_text'];

            $sql    = 'SELECT post_id,post_text FROM ' . POSTS_TABLE . '
                                WHERE topic_id = ' . (int) $topic_id . ' and post_id <> ' . (int) $topic_first_post_id . ' and
                                post_approved = 1 ORDER BY post_time desc';
            $result    = $db->sql_query_limit($sql, $config['ct_post_count']);
            $ct_example['comments'] = '';
            while ($row    = $db->sql_fetchrow($result))
            {
               $ct_example['comments'] .= $row['post_text'] . "\n";
            }
            $db->sql_freeresult($result);
         }
? Особенно в виду того, что
Код: выделить все
$config['ct_post_count']
нигде в админке не настраивается. Это фрагмент инструкции по модификации файла posting.php.
Аватар пользователя
serjan
Разработчик модов
 
Сообщений: 480
Зарегистрирован:
12 янв 2009, 19:18
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.

Сообщение 24 сен 2013, 07:12

Добрый день!

Этот код отвечает за формирования текста одобренных к публикации в теме сообщений, на основании этого текста сервис может оценить релевантность текста нового комментария, в свою очередь оценка релевантности помогает отсеивать спам, в том числе ручной.

Настройки в админке нет (опция ct_post_count настраивается не посредоственно через БД форума), т.к. опция редко изменяется, поэтому нет смысла выносить ее в основные настройки модуля.

Есть какие-то сложности с этим кодом?
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 24 сен 2013, 11:14

shagimuratov писал(а):Есть какие-то сложности с этим кодом?


Да, есть немного.
Код: выделить все
         $ct_example    = null; // Example text
         $message    = $message_parser->message; // Post message

         if ($topic_id == 0)
         { // First post in topic
            $sql    = 'SELECT p.post_text FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p, ' . FORUMS_TABLE . ' f
                                        WHERE t.forum_id = f.forum_id and
                                        p.forum_id = f.forum_id and p.topic_id = t.topic_id and p.post_id = t.topic_first_post_id and
                                        p.post_approved = 1 and f.forum_id = ' . (int) $forum_id . ' ORDER BY p.post_time desc';
            $result    = $db->sql_query_limit($sql, $config['ct_post_count']);
            while ($row    = $db->sql_fetchrow($result))
            {
               $ct_example['body'] = $row['post_text'];
            }
            $db->sql_freeresult($result);

            $message = $subject . "<br />" . $message;
         }
         else

Условия присоединения таблиц весьма путаны, таблица FORUMS_TABLE в запросе вообще не нужна (Вы из нее ничего не выбираете, а ссылка на форум есть и в таблице тем, и в таблице тем). Так что запрос может выглядеть вот так
Код: выделить все
            $sql    = 'SELECT p.post_text
                            FROM ' . TOPICS_TABLE . ' t
                                JOIN ' . POSTS_TABLE . ' p ON (p.post_id = t.topic_first_post_id)
                            WHERE  p.post_approved = 1 and t.forum_id = ' . (int) $forum_id . '
                            ORDER BY p.post_time desc';


Зачем выбирать несколько первых сообщений
Код: выделить все
$result    = $db->sql_query_limit($sql, $config['ct_post_count']);
если в переменной $ct_example['body'] окажется только значение последнего выбранного
Код: выделить все
            while ($row    = $db->sql_fetchrow($result))
            {
               $ct_example['body'] = $row['post_text'];
            }
            $db->sql_freeresult($result);
? :?

Далее
Код: выделить все
         else
         {
            $sql             = 'SELECT topic_title, topic_first_post_id FROM ' . TOPICS_TABLE . ' WHERE topic_id = ' . (int) $topic_id;
            $result             = $db->sql_query($sql);
            $sql_result          = $db->sql_fetchrow($result);
            $topic_title       = $sql_result['topic_title'];
            $topic_first_post_id = $sql_result['topic_first_post_id'];
            $db->sql_freeresult($result);

            $sql       = 'SELECT post_text FROM ' . POSTS_TABLE . ' WHERE post_id = ' . (int) $topic_first_post_id;
            $result       = $db->sql_query($sql);
            $sql_result    = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);

            $ct_example['title'] = $topic_title;
            $ct_example['body'] = $sql_result['post_text'];

            $sql    = 'SELECT post_id,post_text FROM ' . POSTS_TABLE . '
                                WHERE topic_id = ' . (int) $topic_id . ' and post_id <> ' . (int) $topic_first_post_id . ' and
                                post_approved = 1 ORDER BY post_time desc';
            $result    = $db->sql_query_limit($sql, $config['ct_post_count']);
            $ct_example['comments'] = '';
            while ($row    = $db->sql_fetchrow($result))
            {
               $ct_example['comments'] .= $row['post_text'] . "\n";
            }
            $db->sql_freeresult($result);
         }

Тут вместо 3 запросов должно быть 2. Вот так
Код: выделить все
         else
         {
            $sql = 'SELECT t.topic_title, t.topic_first_post_id, p.post_text
                        FROM ' . TOPICS_TABLE . ' t
                            JOIN ' . POSTS_TABLE . ' p ON (p.post_id = t.topic_first_post_id)
                        WHERE t.topic_id = ' . (int) $topic_id;
            $result             = $db->sql_query($sql);
            $topic_info          = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);

                $ct_example = array(
                    'title'     => $topic_info['topic_title'],
                    'body'      => $topic_info['post_text'],
                    'comments'  => ''
                );

            $sql = 'SELECT post_text
                        FROM ' . POSTS_TABLE . '
                        WHERE topic_id = ' . (int) $topic_id . ' AND post_approved = 1
                            AND post_id <> ' . (int) $topic_info['topic_first_post_id'] . '
                        ORDER BY post_time DESC';
            $result    = $db->sql_query_limit($sql, $config['ct_post_count']);

            while ($row   = $db->sql_fetchrow($result))
            {
               $ct_example['comments'] .= $row['post_text'] . "\n";
            }
            $db->sql_freeresult($result);
         }
.

Проверки
Код: выделить все
         if (function_exists('get_ct_checkjs'))
         {
            $ct_checkjs = get_ct_checkjs();
         }
         else
         {
            $ct_checkjs = null;
         }
и
Код: выделить все
            if (function_exists('get_sender_info'))
            {
               $sender_info = get_sender_info();
            }
            else
            {
               $sender_info = null;
            }
излишни, так как функции get_sender_info и get_ct_checkjs определенны в /includes/cleantalk.php, который подключается посредсвом инструкции require. Т.е если фунции есть в /includes/cleantalk.php, они гарантировано будут и в текущем скрипте. А проверять их наличие там, Ваша прямая объязанность во время создания дистрибутива.

Код: выделить все
            $sql       = 'SELECT max(post_id) as last_post_id FROM ' . POSTS_TABLE;
            $result       = $db->sql_query($sql);
            $ct_row = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);

            $ct_post_id = 1;
            if (isset($ct_row['last_post_id']) && $ct_row['last_post_id'] !== NULL)
               $ct_post_id = (int) $ct_row['last_post_id'] + 1;
зачем такие сложности ?
Код: выделить все
            $sql       = 'SELECT max(post_id) as last_post_id
                                FROM ' . POSTS_TABLE;
            $result       = $db->sql_query($sql);
            $ct_post_id = (int) $db->sql_fetchfield('last_post_id') + 1;
            $db->sql_freeresult($result);
эффект тот же, но понятнее и более аккуратно.

Вместо
Код: выделить все
            foreach ( explode(':', $ct_result->stop_words) as $word )
            {
               $message_parser->message = preg_replace("/($word)/ui", '[color=#FF1000]' . "$1" . '[/color]', $message_parser->message);
            }
рекомендую
Код: выделить все
                $words = str_replace(':', '|', $ct_result->stop_words);
                $message_parser->message = preg_replace("/({$words})/ui", "[color=#FF1000]$1[/color]", $message_parser->message);
зачем в цикле крутить то, что можно сделать без него. Особенно учитывая, что функции для работы с регулярными выражениями весьма ресурсоемки.

Этот фрагмент
Код: выделить все
      $sql = 'SELECT g.group_name FROM ' . GROUPS_TABLE . ' g, ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . ' ug where
         ug.user_id=u.user_id and ug.group_id=g.group_id and g.group_type = ' . GROUP_SPECIAL . ' and u.user_id = ' . (int) $user->data['user_id'];

      $result    = $db->sql_query($sql);
      while ($row    = $db->sql_fetchrow($result))
      {
         if ($row['group_name'] === 'GLOBAL_MODERATORS')
         {
            $ct_gmoderator = 1;
         }
         if ($row['group_name'] === 'ADMINISTRATORS')
         {
            $ct_admin = 1;
         }
         if ($moderate)
         {
            continue; // Skip loop if $moderate is on
         }
         if (($row['group_name'] === 'GUESTS' && $config['ct_moderate_guests']) || ($row['group_name'] === 'NEWLY_REGISTERED' && $config['ct_moderate_newly_registered']) || ($row['group_name'] === 'REGISTERED' && $ct_forum['ct_moderate_registered']))
         {
            $moderate = 1;
         }
      }
      // Disable moderation if message from administration
      if ($moderate && ($ct_admin || $ct_gmoderator))
      {
         $moderate = 0;
      }
      $db->sql_freeresult($result);
предлагаю заменить на
Код: выделить все
        $sql_where = array();
        if($config['ct_moderate_guests'])
        {
            $sql_where[] = 'GUESTS';
        }

        if ($config['ct_moderate_newly_registered'])
        {
            $sql_where[] = 'NEWLY_REGISTERED';
        }

        if ($ct_forum['ct_moderate_registered'])
        {
            $sql_where[] = 'REGISTERED';
        }

        if (!empty($sql_where))
        {
            $sql = 'SELECT
                    IF(EXISTS(
                            SELECT g.group_name
                            FROM ' . USER_GROUP_TABLE . ' ug
                                JOIN ' . GROUPS_TABLE . ' g ON (ug.group_id = g.group_id)
                            WHERE ug.user_id = ' . (int) $user->data['user_id'] . " AND g.group_name in ('GLOBAL_MODERATORS' , 'ADMINISTRATORS')),
                        0,
                        IF(EXISTS(
                                SELECT g.group_name
                                FROM " . USER_GROUP_TABLE . ' ug
                                    JOIN ' . GROUPS_TABLE . ' g ON (ug.group_id = g.group_id)
                                WHERE ug.user_id = ' . (int) $user->data['user_id'] . ' AND ' . $db->sql_in_set('g.group_name', $sql_where). '
                            ),
                            1,
                            0)) AS moderate';
            $result    = $db->sql_query($sql);
            $moderate = $db->sql_fetchfield('moderate');
            $db->sql_freeresult($result);
        }
        else
        {
            // empty array $sql_where --> nothing to moderate
            $moderate = 0;
        }
. Тут сначала происходит проверка включена ли модерация гостей, новых зарегистрированных пользователей, зарегистрированных пользователей в конкретном форуме. Если ничего из выше перечисленного не включено, то и запрос выполнять не нужно, иначе смотрим в каких из интересующих нас групп состоит пользователь и не состоит ли при этом он в группе Администраторы или Главные модераторы.

Код: выделить все
      $forum_id    = request_var('f', 0);
      $topic_id    = request_var('t', 0);
      $subject    = utf8_normalize_nfc(request_var('subject', '', true));
тоже лишний, переменные $forum_id и $topic_id гарантированно определенны выше, а вместо $subject можно использовать $post_data['post_subject'] она определенна в районе 630 строки. Вместо
Код: выделить все
      $username    = utf8_normalize_nfc(request_var('username', '', true));

      // Use name from session only if user is registered. Cause 'Anonymous' name often blacklisted.
      if ($username === '' && $user->data['is_registered'])
      {
         $username = $user->data['username'];
      }
будет лучше использовать
Код: выделить все
            $username    = utf8_normalize_nfc(request_var('username', ($user->data['is_registered']) ? $user->data['username'] : '', true));
.

Вместо
Код: выделить все
         $ct_cleantalk_id = null;
         if (isset($ct_result->id))
            $ct_cleantalk_id = $ct_result->id;
и
Код: выделить все
         // Begin : cleantalk.ru moderation
         if (!empty($ct_cleantalk_id))
         {
            $sql = 'UPDATE ' . POSTS_TABLE . ' SET ct_request_id="' . (int) $ct_cleantalk_id . '" WHERE post_id="' . (int) $data['post_id'] . '"';
            $db->sql_query($sql);
            $db->sql_freeresult($result);
         }
         // End: cleantalk.ru moderation
целесообразней использовать
Код: выделить все
         // Begin : cleantalk.ru moderation
         if (isset($ct_result->id))
         {
            $sql = 'UPDATE ' . POSTS_TABLE . '
                        SET ct_request_id="' . (int) $ct_result->id . '"
                        WHERE post_id=' . (int) $data['post_id'];
            $db->sql_query($sql);
         }
         // End: cleantalk.ru moderation
.

Учитывая все выше сказанное код должен выглядеть как-то вот так
Код: выделить все
   // Begin: cleantalk.ru moderation
   if ($config['ct_enable'] && in_array($mode, array('reply', 'quote', 'post')) && !$preview && !sizeof($error))
   {
      $sql = 'SELECT enable_stoplist_check, ct_moderate_registered, ct_allow_links
            FROM ' . FORUMS_TABLE . '
            WHERE forum_id = ' . (int) $forum_id;

      $result       = $db->sql_query($sql);
      $ct_forum    = $db->sql_fetchrow($result);
      $db->sql_freeresult($result);

      $sql_where = array();
      if($config['ct_moderate_guests'])
      {
         $sql_where[] = 'GUESTS';
      }

      if ($config['ct_moderate_newly_registered'])
      {
         $sql_where[] = 'NEWLY_REGISTERED';
      }

      if ($ct_forum['ct_moderate_registered'])
      {
         $sql_where[] = 'REGISTERED';
      }

      if (!empty($sql_where))
      {
         $sql = 'SELECT
               IF(EXISTS(
                     SELECT g.group_name
                     FROM ' . USER_GROUP_TABLE . ' ug
                        JOIN ' . GROUPS_TABLE . ' g ON (ug.group_id = g.group_id)
                     WHERE ug.user_id = ' . (int) $user->data['user_id'] . " AND g.group_name in ('GLOBAL_MODERATORS' , 'ADMINISTRATORS')),
                  0,
                  IF(EXISTS(
                        SELECT g.group_name
                        FROM " . USER_GROUP_TABLE . ' ug
                           JOIN ' . GROUPS_TABLE . ' g ON (ug.group_id = g.group_id)
                        WHERE ug.user_id = ' . (int) $user->data['user_id'] . ' AND ' . $db->sql_in_set('g.group_name', $sql_where). '
                     ),
                     1,
                     0)) AS moderate';
         $result    = $db->sql_query($sql);
         $moderate = $db->sql_fetchfield('moderate');
         $db->sql_freeresult($result);
      }
      else
      {
         // empty array $sql_where --> nothing to moderate
         $moderate = 0;
      }

      if ($moderate)
      {
         $username    = utf8_normalize_nfc(request_var('username', ($user->data['is_registered']) ? $user->data['username'] : '', true));

         $ct_example    = null; // Example text
         $message    = $message_parser->message; // Post message

         if (empty($topic_id))
         {
            // First post in topic
            $sql = 'SELECT p.post_text
                  FROM ' . TOPICS_TABLE . ' t
                     JOIN ' . POSTS_TABLE . ' p ON (p.post_id = t.topic_first_post_id)
                  WHERE  p.post_approved = 1 and t.forum_id = ' . (int) $forum_id . '
                  ORDER BY p.post_time desc';
            $result    = $db->sql_query_limit($sql, $config['ct_post_count']);

            while ($row = $db->sql_fetchrow($result))
            {
               $ct_example['body'] = $row['post_text'];
            }
            $db->sql_freeresult($result);

            $message = $post_data['post_subject'] . "<br />" . $message;
         }
         else
         {
            $sql = 'SELECT t.topic_title, t.topic_first_post_id, p.post_text
                  FROM ' . TOPICS_TABLE . ' t
                     JOIN ' . POSTS_TABLE . ' p ON (p.post_id = t.topic_first_post_id)
                  WHERE t.topic_id = ' . (int) $topic_id;
            $result     = $db->sql_query($sql);
            $topic_info = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);

            $ct_example = array(
               'title'     => $topic_info['topic_title'],
               'body'      => $topic_info['post_text'],
               'comments'  => ''
            );

            $sql = 'SELECT post_text
                  FROM ' . POSTS_TABLE . '
                  WHERE topic_id = ' . (int) $topic_id . ' AND post_approved = 1
                     AND post_id <> ' . (int) $topic_info['topic_first_post_id'] . '
                  ORDER BY post_time DESC';
            $result    = $db->sql_query_limit($sql, $config['ct_post_count']);

            while ($row   = $db->sql_fetchrow($result))
            {
               $ct_example['comments'] .= $row['post_text'] . "\n";
            }
            $db->sql_freeresult($result);
         }

         $submit_time = null;
         if (isset($user->data['ct_submit_time']) && preg_match("/^\d+$/", $user->data['ct_submit_time']))
         {
            $submit_time = time() - $user->data['ct_submit_time'];
         }

         if (!class_exists('Cleantalk'))
         {
            require $phpbb_root_path . 'includes/cleantalk.' . $phpEx;
            require $phpbb_root_path . 'includes/cleantalk.class.' . $phpEx;
         }

         // JSON array with additional senders params
         $sender_info = null;
         $post_info = null;
         if (function_exists('json_encode'))
         {
            $sender_info = get_sender_info();

            $sql       = 'SELECT max(post_id) as last_post_id
                        FROM ' . POSTS_TABLE;
            $result       = $db->sql_query($sql);
            $ct_post_id = (int) $db->sql_fetchfield('last_post_id') + 1;
            $db->sql_freeresult($result);

            $post_info['post_url'] = generate_board_url() . "/viewtopic.{$phpEx}?p={$ct_post_id}#p{$ct_post_id}";
            $post_info = json_encode($post_info);

            $ct_example = json_encode($ct_example);
         }
         else
         {
            $ct_example = implode("\n", $ct_example);
         }

         $ct_request = new CleantalkRequest();

         $ct_request->auth_key       = $config['ct_auth_key'];
         $ct_request->message       = $message;
         $ct_request->sender_email    = $user->data['user_email'];
         $ct_request->sender_nickname = $username;
         $ct_request->example       = $ct_example;
         $ct_request->agent          = 'ct-phpbb-' . preg_replace("/(\d)\.(\d)\.(\d)/", "$1$2$3", $config['ct_version']);
         $ct_request->sender_info    = $sender_info;
         $ct_request->sender_ip       = ct_session_ip($user->data['session_ip']);
         $ct_request->stoplist_check    = $ct_forum['enable_stoplist_check'];
         $ct_request->response_lang    = $config['ct_response_lang'];
         $ct_request->allow_links    = $ct_forum['ct_allow_links'];
         $ct_request->submit_time    = $submit_time;
         $ct_request->js_on          = get_ct_checkjs();
         $ct_request->post_info        = $post_info;

         $ct                = new Cleantalk();
         $ct->work_url       = $config['ct_work_url'];
         $ct->server_url       = $config['ct_server_url'];
         $ct->server_ttl       = $config['ct_server_ttl'];
         $ct->server_changed    = $config['ct_server_changed'];

         $ct_result = $ct->isAllowMessage($ct_request);

         if ($ct->server_change)
         {
            set_config('ct_work_url', $ct->work_url);
            set_config('ct_server_ttl', $ct->server_ttl);
            set_config('ct_server_changed', time());
         }

         if ($ct_result->errno > 0)
         {
            ct_error_mail($ct_result->errstr);
         }

         if (!empty($ct_result->stop_words) && $post_data['enable_bbcode'])
         {
            $words = str_replace(':', '|', $ct_result->stop_words);
            $message_parser->message = preg_replace("/({$words})/ui", "[color=#FF1000]$1[/color]", $message_parser->message);
            $message_parser->parse($post_data['enable_bbcode'], ($config['allow_post_links']) ? $post_data['enable_urls'] : false, $post_data['enable_smilies'], $img_status, $flash_status, $quote_status, $config['allow_post_links']);
         }

         if ($ct_result->allow == 0)
         {
            if(isset($ct_result->stop_queue) && $ct_result->stop_queue == 1)
            {
               add_log('user', null, $ct_result->comment);
               $error[] = $ct_result->comment;
            }
            if (isset($ct_result->comment))
            {
               $message_parser->message = $message_parser->message . "<br /><br />" . $ct_result->comment;
            }
         }
      }
   }
   // End: cleantalk.ru moderation
только тут нужно поправить обработку запроса для ситуации
Код: выделить все
// First post in topic
, а то я так и не смог прийти к однозначному решению, что там должно быть.

Еще один забавный момент из файла /includes/cleantalk.php
Код: выделить все
function ct_session_ip( $data_ip )
{
   if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
   {
      $forwarded_for = (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) ? htmlentities($_SERVER['HTTP_X_FORWARDED_FOR']) : '';
   }

   // 127.0.0.1 usually used at reverse proxy
   $session_ip = ($data_ip == '127.0.0.1' && !empty($forwarded_for)) ? $forwarded_for : $data_ip;

   return $session_ip;
}
. Двойная проверка одной и тойже переменной на isset это чтобы наверняка :?: :?
Может лучше так:
Код: выделить все
function ct_session_ip($data_ip)
{
   // 127.0.0.1 usually used at reverse proxy
    if ('127.0.0.1' == $data_ip && !empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    {
        $data_ip = htmlentities($_SERVER['HTTP_X_FORWARDED_FOR']);
    }

   return $data_ip;
}
Аватар пользователя
serjan
Разработчик модов
 
Сообщений: 480
Зарегистрирован:
12 янв 2009, 19:18
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.

Сообщение 24 сен 2013, 20:06

Спасибо, учтем эти правки в следующем релизе.
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.


Вернуться в Моды каталога

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Форум поддержки phpBB
2008 - 2017 © BB3x.ru - русская поддержка форума phpBB3
Создано на основе phpBB® Forum Software © phpBB Group
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама