FatCat Опубликовано 31 Октября 2009 Жалоба Поделиться Опубликовано 31 Октября 2009 Идея проста, удивляюсь, что никто раньше такого не сделал: сделать замены слов не админом через админцентр, а персонально: каждый пользователь только для себя настроит свой собственный фильтр в своем личном профиле. Буду делать на свои форумы под 1.х. Если кому-то это интересно, коды для "однушек" скину лично или выложу в этом топике. Если кто-то возьмется перевести под более старшие версии - буду благодарен. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kosiak Опубликовано 31 Октября 2009 Жалоба Поделиться Опубликовано 31 Октября 2009 Идея странна, однако...Кому же захочется себя загонять под фильтры? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Ritsuka Опубликовано 31 Октября 2009 Жалоба Поделиться Опубликовано 31 Октября 2009 А фильтр будет применяться ко всем вообще постам, к постам только пользователя или ко всем постам, кроме постов пользователя? Учтите, что вырезая что-то из кода, нужно проверять получаемый результат. Это очень популярная дыра в безопасности. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
WildRAID Опубликовано 31 Октября 2009 Жалоба Поделиться Опубликовано 31 Октября 2009 Если кто-то возьмется перевести под более старшие версии - буду благодарен.Сделать очень просто - дольше всего писать интерфейс. Другое дело, что вряд ли эта штука будет сильно востребована. К тому же, опытные матершинники всё равно каждый раз извращаются по-новому, т.к. привыкли, что везде фильтры стоят. По мне - единственный способ борьбы с этим делом - молчаливое удаление нежелательных постов. Без какой-либо обратной связи по отношению к возмутителям спокойствия. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 31 Октября 2009 Автор Жалоба Поделиться Опубликовано 31 Октября 2009 А фильтр будет применяться ко всем вообще постам, к постам только пользователя или ко всем постам, кроме постов пользователя?Пока не решил. Скорее всего будет применяться ко всем постам. Учтите, что вырезая что-то из кода, нужно проверять получаемый результат. Это очень популярная дыра в безопасности.Фильтр будет не на входе, а на выходе.То есть, если ввели матерное слово, в БД будет лежать матерное слово. Те, кто не хотят видеть мат, зафильтруют, и только им будет отдана страница с заменой, всем прочим будет выдан тот мат, который отправили. Дыры в безопасности тут не будет. Ибо ни один пользователь не сможет изменить отображение страниц других пользователей. Сделать очень просто - дольше всего писать интерфейс.Ага. Именно так.Хотя еще предстоит поиграться с ресурсоемкостью, все же фильтровать придется не один раз на входе, а на выходе... опытные матершинники всё равно каждый раз извращаются по-новому, т.к. привыкли, что везде фильтры стоят.Лично меня не столько напрягает мат, сколько религиозная требуха, и я охотно зафильтрую слово "бог" на русское непечатное трехбуквенное слово, а его семибуквенную фамилию на "бастард" или как там по-русски зовется сын от неустановленного отца... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 3 Ноября 2009 Жалоба Поделиться Опубликовано 3 Ноября 2009 я в рядах тестеров Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 5 Ноября 2009 Автор Жалоба Поделиться Опубликовано 5 Ноября 2009 (изменено) Вроде сделал малой кровью: не так-то много и модифицировалось. 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.phpfunction 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); Изменено 5 Ноября 2009 пользователем FatCat Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
epson950 Опубликовано 10 Ноября 2009 Жалоба Поделиться Опубликовано 10 Ноября 2009 а не проще ли использовать связку Firefox + FoxReplace? преимущество такого подхода в том, что мат-фильтр на основе такой связки будет работать везде в инете, а не только на одном форуме. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 10 Ноября 2009 Автор Жалоба Поделиться Опубликовано 10 Ноября 2009 epson950Мне как администратору форума обязать пользователей пользоваться только файерфоксом и требовать устанвки плагина? При этом фильтроваться будут не только сообщения в режиме просмотра, но и элементы дизайна форума, сообщения в окне редактирования и цитирования... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.