Предоставляем срочную помощь по DLE, пишем эксклюзивные модули для вашего проекта, парсеры грабберы, исправляем базу данных, удаляем вирусы редиректы, обновляем скрипты, помощь с переездом на другой хостинг, перенос домена, большой опыт работы с высоконагруженными проектами, защита ddos атаки, ботов и спама, оптимизация модулей и серверов дле, более 10 лет работы, тысячи модификаций и доработок, короткие сроки, дорого, качественно. telegram: @histoo

Интеграция фильтра слов из DLE в BE

  1. Онлайн

    Grey

    Администраторы

    Сообщений: 2130

    Интеграция фильтра слов из DLE в BE, позволяет использовать весьма полезный функционал из DLE на вашем форуме.
    Несмотря на то что в админке форума есть права на "игнорировать фильтр слов", эта опция совершенно не работает. fellow
    Наша модификация восстановить полный функционал этой опции.

    Для начала добавим какую-нибудь фразу в наш список стоп-слов:



    Приступим:
    в файле: /engine/bullet_energy/action/site/newpost.php

    Ищем:
    
    $row['post'] = $this->filter->BB_Parse(trim($this->filter->process($row['post'])), false) ;
    

    Добавим ниже:
    
    // запрещенные символы
    if($filter->not_allowed_text AND !parent::$helper->ckeckModulesConfig('be_access_mat_check')) {
          return parent::$helper->getError("Сообщение содержит недопустимый к публикации текст.") ;
    }
    


    Ищем:
    
    $option['message'] = parent::$db->safesql($this->filter->BB_Parse($this->filter->process(trim($_REQUEST['text_msg'])), false)) ;
    

    Добавим ниже:
    
    // запрещенные символы
    if( $this->filter->not_allowed_text AND !parent::$helper->ckeckModulesConfig('be_access_mat_check')) {
          die(parent::$helper->getJson(array('param' => '0', 'data' => "Сообщение содержит недопустимый к публикации текст."))) ;
    }
    


    В файле: /engine/bullet_energy/action/site/newtopic.php

    Находим:
    
    $option['meta'] = parent::$db->safesql(serialize($option['meta'])) ;
    

    Добавим ниже:
    
    // запрещенные символы
    if( $this->filter->not_allowed_text AND !parent::$helper->ckeckModulesConfig('be_access_mat_check')) {
          $this->_param['error'][] = "Сообщение содержит недопустимый к публикации текст.";  
    }
    // 
    


    В файле: /engine/bullet_energy/classes/filter.class.php

    Найдем:
    
    $source = preg_replace($find, $replace, $source) ;
    

    Вставим выше:
    
    if( $this->filter_mode ) $source = $this->word_filter( $source );
    


    Теперь сверьтесь, я не помню изменял ли я эту функцию word_filter должна быть такой:
    
    function word_filter($source, $encode = true) 
    	{
    			
        if($encode) {
    			
          $all_words = @file(ENGINE_DIR . '/data/wordfilter.db.php') ;
          $find = array() ;
          $replace = array() ;
    			
    			if( ! $all_words or ! count( $all_words ) ) return $source;					
    			
          foreach ($all_words as $word_line) {
            $word_arr = explode("|", $word_line) ;
    				
    				if( function_exists( "get_magic_quotes_gpc" ) && get_magic_quotes_gpc() ) {
    					
              $word_arr[1] = addslashes($word_arr[1]) ;
    				
            }
            if($word_arr[4]) {
              $register = "" ;
    
    				} else $register ="i";
    
    				if ( $this->dleConfig['charset'] == "utf-8" ) $register .= "u";
    
            $allow_find = true ;
    
    				if ( $word_arr[5] == 1 AND $this->safe_mode ) $allow_find = false;
    				if ( $word_arr[5] == 2 AND !$this->safe_mode ) $allow_find = false;
    				
            if($allow_find) {
                       
              if($word_arr[3]) {
    						
    						$find_text = "#(^|\b|\s|\<br \/\>)" . preg_quote( $word_arr[1], "#" ) . "(\b|\s|!|\?|\.|,|$)#".$register;
    						
    						if( $word_arr[2] == "" ) $replace_text = "\\1";
    						else $replace_text = "\\1" . $word_arr[1] . "\\2";
    					
              } else {
    						
                $find_text = "#(" . preg_quote($word_arr[1], "#") . ")#" . $register ;
    						
    						if( $word_arr[2] == "" ) $replace_text = "";
    						else $replace_text = "" . $word_arr[1] . "";
    					
              }
              if($word_arr[6]) {
                if(preg_match($find_text, $source)) {
                  $this->not_allowed_text = true ;
                  return $source ;
                }
              } else {
                $find[] = $find_text ;
                $replace[] = $replace_text ;
              }
            }
          }
    
    			if( !count( $find ) ) return $source;
    			
          $source = preg_split('((>)|(<))', $source, -1, PREG_SPLIT_DELIM_CAPTURE) ;
          $count = count($source) ;
    			
          for ($i = 0; $i < $count; $i++) {
            if($source[$i] == "<" or $source[$i] == "[") {
              $i++ ;
              continue ;
            }
    				
    				if( $source[$i] != "" ) $source[$i] = preg_replace( $find, $replace, $source[$i] );
          }
    			
          $source = join("", $source) ;
    		
        } else {
    			
          $source = preg_replace("#(.+?)#", "\\1", $source) ;
    		
        }
    		
        return $source ;
      }
    


    Готово. Теперь фильтрация сообщений будет успешно работать:


    Вложения:

    1. be.word.filter.r2.txt

      Размер файла:
      4,56 Kb
      Скачиваний:
      890
    kppava, mofsy, numen нравится это сообщение.
    Сообщение отредактировал Grey 13 ноября 2013 - 04:53

    сделаю любой модуль dle на заказ, если вам нужны услуги по dle
    скaйп rdn-team.com
    телегрaм @histoo

    13 ноября 2013 - 04:40 / #1
  2. Оффлайн

    Johan

    Посетители

    Сообщений: 89

    На PHP 5.4 не работает, в чем может быть проблема?
    11 января 2016 - 15:11 / #2
  3. Онлайн

    Grey

    Администраторы

    Сообщений: 2130

    Johan,
    а что пишет? может быть работает но выдает пустой ответ, сохранить файл в utf-8

    сделаю любой модуль dle на заказ, если вам нужны услуги по dle
    скaйп rdn-team.com
    телегрaм @histoo

    12 января 2016 - 02:37 / #3
  4. Оффлайн

    Johan

    Посетители

    Сообщений: 89

    Grey,
    Если действие выбранно удалить, то запрещенное слово не добавляется, а удаляется автоматом, как и должно наверное быть. А если действие "отклонить добавление текста" , то ничего не происходит. Запрещенное слово просто добавляется без проблем и все. Не выводит предупеждение, что сообщение содержит недопустимый текст. У меня dle 10.6 utf8 версия и все файлы в utf8. Может причина в функции get_magic_quote в файле filter.class.php? в php 5.4 оно у меня отключено по дефолту
    12 января 2016 - 04:03 / #4
  5. Онлайн

    Grey

    Администраторы

    Сообщений: 2130

    Johan,
    там где добавлял:
    // запрещенные символы
    if( $this->filter->not_allowed_text AND !parent::$helper->ckeckModulesConfig('be_access_mat_check')) {
          $this->_param['error'][] = "Сообщение содержит недопустимый к публикации текст.";  
    }
    //  

    перед этим кодом введи:
    var_dump($this->filter->not_allowed_text);
    var_dump(parent::$helper->ckeckModulesConfig('be_access_mat_check
    ')); die();

    результат ответа сервера отпиши тут.

    сделаю любой модуль dle на заказ, если вам нужны услуги по dle
    скaйп rdn-team.com
    телегрaм @histoo

    12 января 2016 - 06:28 / #5
  6. Оффлайн

    Johan

    Посетители

    Сообщений: 89

    Цитата: Grey
    результат ответа сервера отпиши тут.

    Что именно написать? Результат тот же, не работает
    12 января 2016 - 08:44 / #6
  7. Оффлайн

    Johan

    Посетители

    Сообщений: 89

    Кнопка отправить перестала работать, в логах браузера ошибок нет.
    12 января 2016 - 09:04 / #7
  8. Онлайн

    Grey

    Администраторы

    Сообщений: 2130

    Ответ сервера на вкладке network в инструментах разработчика браузера

    сделаю любой модуль dle на заказ, если вам нужны услуги по dle
    скaйп rdn-team.com
    телегрaм @histoo

    12 января 2016 - 11:00 / #8
  9. Оффлайн

    Johan

    Посетители

    Сообщений: 89

    Grey,
    ответ post это то что ты имел ввиду?
    Сообщение отредактировал Johan 12 января 2016 - 15:20
    12 января 2016 - 15:20 / #9
  10. Онлайн

    Grey

    Администраторы

    Сообщений: 2130

    Johan,
    да, наверное

    сделаю любой модуль dle на заказ, если вам нужны услуги по dle
    скaйп rdn-team.com
    телегрaм @histoo

    13 января 2016 - 03:43 / #10
Модераторы форума: greyPowered by Bullet Energy Forum