Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Фильтр badwords

Проблема в следующем, IPB 2.0.3. фильтр запрещённых слов работает не совсем корректно именно в приватных сообщениях, то есть спамер зашедший на форум может попытаться отправить спам остальным участникам через приват, даже если его слово занесено в список badwords в заголовке сообщения приватного письма оно не фильтруется. Собственно сабж, что надо поправить что бы и в приватных сообщениях заголовок письма подпадал под фильтр. Насколько я понял код отвечающий за это находится тут post_parser.php

 

    //-----------------------------------------
   // Badwords:
   // Swops naughty, naugty words and stuff
   //-----------------------------------------

   function bad_words($text = "")
   {
       global $DB, $ibforums;

       if ($text == "")
       {
           return "";
       }

       if ( $this->bypass_badwords == 1 )
       {
           return $text;
       }

       //-----------------------------------------

       if ( is_array( $ibforums->cache['badwords'] ) )
       {
           usort( $ibforums->cache['badwords'] , array( 'post_parser', 'word_length_sort' ) );

           if ( count($ibforums->cache['badwords']) > 0 )
           {
               foreach($ibforums->cache['badwords'] as $idx => $r)
               {

                   if ($r['swop'] == "")
                   {
                       $replace = '######';
                   }
                   else
                   {
                       $replace = $r['swop'];
                   }

                   //-----------------------------------------

                   $r['type'] = preg_quote($r['type'], "/");

                   //-----------------------------------------

                   if ($r['m_exact'] == 1)
                   {
                       $text = preg_replace( "/(^|\B)".$r['type']."(\b|!|\?|\.|,|$)/i", "$replace", $text );
                   }
                   else
                   {
                       $text = preg_replace( "/".$r['type']."/i", "$replace", $text );
                   }
               }
           }
       }

       return $text;

   }

 

 

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

Рекомендованные сообщения

./sources/action_public/messenger.php

найти что-то типа

$info['msg_title']   = $r['mt_title'];

 

вставить выше

$r['mt_title']   = $this->msglib->postlib->parser->bad_words( $r['mt_title'] );

 

Это под 2.3 пишу, в 2.0 вызов метода может отличаться

  • Автор

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

 

         if ( $DB->get_num_rows() )
        {
            while ( $r = $DB->fetch_row() )
            {
                $info = array();

                $msg_ids[] = $r['mt_id'];

                $info['msg_date']    = $std->get_date( $r['mt_date'], 'LONG' );
                $info['msg_title']   = $r['mt_title'];
                $info['msg_sender']  = $r['name'];
                $info['msg_content'] = $this->parser->convert( array( 'TEXT'    => $r['msg_post'],
                                                                     'SMILIES' => 0,
                                                                     'CODE'    => $ibforums->vars['msg_allow_code'],
                                                                     'HTML'    => $ibforums->vars['msg_allow_html']
                                                                   )
                                                            );

                if ($type == 'xls')
                {
                    $output .= '"'.$this->strip_quotes($info['msg_title']).'","'.$this->strip_quotes($info['msg_date']).'","'.$this->strip_quotes($info['msg_sender']).'","'.$this->strip_quotes($info['msg_content']).'"'."\r";
                }
                else
                {
                    if ( $r['vid'] == 'sent' )
                    {
                        $info['msg_sender']  = $r['rec_name'];
                        $output .= $this->html->archive_html_entry_sent($info);
                    }
                    else
                    {
                        $output .= $this->html->archive_html_entry($info);
                    }
                }
            }

            if ($type == 'html')
           {
               $output .= $this->html->archive_html_footer();
           }

           $num_msg = count( $msg_ids );

Изменено пользователем fatal1ty100

У парсера тут другая переменная

 

выше вставить

$r['mt_title']   = $this->parser->bad_words( $r['mt_title'] );

  • Автор

info?

Изменено пользователем fatal1ty100

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.