Перейти к контенту

Персонализация фильтра мата


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

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

 

Буду делать на свои форумы под 1.х. Если кому-то это интересно, коды для "однушек" скину лично или выложу в этом топике. Если кто-то возьмется перевести под более старшие версии - буду благодарен.

Ссылка на комментарий
Поделиться на других сайтах

А фильтр будет применяться ко всем вообще постам, к постам только пользователя или ко всем постам, кроме постов пользователя?

 

Учтите, что вырезая что-то из кода, нужно проверять получаемый результат. Это очень популярная дыра в безопасности.

Ссылка на комментарий
Поделиться на других сайтах

Если кто-то возьмется перевести под более старшие версии - буду благодарен.

Сделать очень просто - дольше всего писать интерфейс.

 

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

 

По мне - единственный способ борьбы с этим делом - молчаливое удаление нежелательных постов. Без какой-либо обратной связи по отношению к возмутителям спокойствия.

Ссылка на комментарий
Поделиться на других сайтах

А фильтр будет применяться ко всем вообще постам, к постам только пользователя или ко всем постам, кроме постов пользователя?
Пока не решил. Скорее всего будет применяться ко всем постам.

 

 

Учтите, что вырезая что-то из кода, нужно проверять получаемый результат. Это очень популярная дыра в безопасности.
Фильтр будет не на входе, а на выходе.

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

Дыры в безопасности тут не будет. Ибо ни один пользователь не сможет изменить отображение страниц других пользователей.

 

 

Сделать очень просто - дольше всего писать интерфейс.
Ага. Именно так.

Хотя еще предстоит поиграться с ресурсоемкостью, все же фильтровать придется не один раз на входе, а на выходе...

 

 

опытные матершинники всё равно каждый раз извращаются по-новому, т.к. привыкли, что везде фильтры стоят.
Лично меня не столько напрягает мат, сколько религиозная требуха, и я охотно зафильтрую слово "бог" на русское непечатное трехбуквенное слово, а его семибуквенную фамилию на "бастард" или как там по-русски зовется сын от неустановленного отца... :D
Ссылка на комментарий
Поделиться на других сайтах

Вроде сделал малой кровью: не так-то много и модифицировалось.

 

 

ALTER TABLE `ibf_members` ADD `filters` TEXT NULL ;

 

 

functions.php

Найти:

	function load_member($member_id=0)
{
	global $DB, $std, $ibforums;

Ниже строк на 6 начинается длиннющий sql-запрос, в него нужно добавить поле m.filters

У меня этот запрос модифицирован, не смогу показать как было...

 

 

Topics.php

Дважды (для оски и для обычных постов) код фильтрации:

// +FatCat: Персональные фильтры
 	if(trim($ibforums->member['filters']))
 	{
   $filters = explode("!",trim($ibforums->member['filters']));
   foreach($filters as $filter)
   {
   	$filter = explode(">",$filter);
   	if(count($filter)==2)$row['post'] = str_replace($filter[0],$filter[1],$row['post']);
   }
 	}
// -FatCat: Персональные фильтры

 

 

lang_ucp.php

Добавляются:

'settings_filters' => "Настройки фильтрации слов в форуме",
'filters_in' => "Искать: ",
'filters_out' => "<nobr>Заменить на: </nobr>",
'filters_alert' => "* Вы можете добавить фильтр, введя слова для поиска и замены в нижней строчке. Так же можно отредактировать имеющиеся фильтры. Для удаления имеющегося фильтра просто удалите слово из поля. Для сохранения новых настроек нажмите [Сохранить изменения].",

 

 

skin_ucp.php

function settings_end($data , $filters)

 

И в этой функции после

 <span class='desc'>{$ibforums->lang['need_cookie_yum_yum']}</span>

добавляется

<div class='pformstrip'>{$ibforums->lang['settings_filters']}</div>
<table width="100%" cellpadding="4">
$filters
</table>
 <span class='desc'>{$ibforums->lang['filters_alert']}</span>

 

 

Usercp.php

         $this->output .= $this->html->settings_end( array ( 'IMG'  => $view_img."</select>",
                                                            'SIG'  => $view_sig."</select>",
                                                            'AVA'  => $view_ava."</select>",
                                                            'POP'  => $view_pop."</select>",
                                                            'SESS' => $html_sess."</select>",
                                                            'QR'   => $html_qr."</select>",
                                                            'TPS'  => $topic_select,
                                                            'PPS'  => $post_select,
                                                  )    );

добавляю втору переменную в вызов функции: $filters

 

Выше добавляю:

// +FatCat: фильтры
 $filters = "";
 $i = 0;
 $filters_arr = explode("!",trim($ibforums->member['filters']));
 foreach($filters_arr as $filter)
 {
 	$filter = explode(">",$filter);
 	if(count($filter)==2)
 	{
   $filters .= "<tr><td width='7%'>".$ibforums->lang['filters_in']."</td>";
   $filters .= "<td width='15%'><input type='text' name='filter_in_".$i."' id='filter_in_".$i."' value='".$filter[0]."' size='10'></td>";
   $filters .= PHP_EOL."<td width='10%'>".$ibforums->lang['filters_out']."</td>";
   $filters .= "<td width='15%'><input type='text' name='filter_out_".$i."' id='filter_out_".$i."' value='".$filter[1]."' size='10'></td>";
   $filters .= "<td width='56%'></td></tr>".PHP_EOL;
 	}
 	$i++;
 }
 $filters .= "<tr><td width='7%'>".$ibforums->lang['filters_in']."</td>";
 $filters .= "<td width='15%'><input type='text' name='filter_in_".$i."' id='filter_in_".$i."' value='' size='10'></td>";
 $filters .= PHP_EOL."<td width='10%'>".$ibforums->lang['filters_out']."</td>";
 $filters .= "<td width='15%'><input type='text' name='filter_out_".$i."' id='filter_out_".$i."' value='' size='10'></td>";
 $filters .= "<td width='56%'></td></tr><input type='hidden' name='max_filter' value='".$i."'>".PHP_EOL;
// -FatCat: фильтры

 

 

usercp_functions.php

В массив

  $db_string = $DB->compile_db_update_string(  array (
                'time_offset'  => $ibforums->input['u_timezone'],
                'view_avs'     => $ibforums->input['VIEW_AVS'],
                'view_sigs'    => $ibforums->input['VIEW_SIGS'],
                'view_img'     => $ibforums->input['VIEW_IMG'],
                'view_pop'     => $ibforums->input['DO_POPUP'],
                'dst_in_use'   => $ibforums->input['DST'],
                'view_prefs'   => $ibforums->input['postpage']."&".$ibforums->input['topicpage'],
             )         );

добавил элемент

                'filters'      => $filters,

 

Выше добавил:

  $filters = array();
 for($i=0;$i<=intval($ibforums->input['max_filter']);$i++)
 {
 	if($ibforums->input['filter_in_'.$i] and $ibforums->input['filter_out_'.$i])
   $filters[ $ibforums->input['filter_in_'.$i] ] = $ibforums->input['filter_in_'.$i].">".$ibforums->input['filter_out_'.$i];
 }
 $filters = implode("!",$filters);

Изменено пользователем FatCat
Ссылка на комментарий
Поделиться на других сайтах

а не проще ли использовать связку Firefox + FoxReplace? преимущество такого подхода в том, что мат-фильтр на основе такой связки будет работать везде в инете, а не только на одном форуме.
Ссылка на комментарий
Поделиться на других сайтах

epson950

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

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.