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

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


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

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

 

Буду делать на свои форумы под 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

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

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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