kempston Опубликовано 14 Августа 2005 Жалоба Поделиться Опубликовано 14 Августа 2005 Мод лишает новых пользователей возможности спамить.Подробности (с чего все началось) тут Ну вот я короче тут слабал небольшой патч, если кому надо. Собственно, что делает патч:1. Отключает увеличение количества сообщений пользователя при создании неодобренного топика или поста.2. Увеличивает количество сообщений пользователя, при одобрении модератором его топика или поста, используя при этом модифицированную копию процедуры pf_increment_user_post_count стыренную из post.php. Данная процедура осуществляет ряд необходимых проверок, в частности, если надо - переводит пользователя из одной группы в другую. Что патч не делает:1. Не уменьшает количество количество сообщений пользователя при неодобрении (Set Invisible) модератором его топика или поста. А зачем собственно?2. Если пользователь уже имеет нужное количество сообщений, а на форум вешают премодерацию и на группу автопереход, то следующее сообщение этого пользователя будет заблокировано, но переход в группу все равно будет осуществлен. Дальше, в новой группе, он уже будет писать нормально, если конечно у нее есть права. Подобное поведение форума не очень логично, но этим мне заниматься влом, может кто захочет довести до ума - флаг ему в руки.3. В функции pf_increment_user_post_count присутствует запуск модулей обрабатывающих событие on_group_change. Я так прикинул, что без инициализации $this->modules эта хрень работать не будет и подкинул ей$this->modules = new ipb_member_sync();Тока последствия этих махинаций мне неведомы, посему обе части я от греха подальше закомментировал - оригинальную часть кода двумя слешами а свою четырьмя.4. Содержимое данного пункта мне неведомо, но допускаю что найдутся кадры, которые его нароют. Патч создан линуксовой утилитой diff и может быть автоматически применен запуском команды patch < forum.patch в каталоге sources. Для этого ес-сно надо туда положить файл forum.patch содержащий патч. P.S. Учитывая тот факт, что форум заменил все табы на пробелы, автоматически применить не выйдет, жаль аттачить файлы нельзя. Собственно патч:diff -ur ../../../6/upload/sources/moderate.php ./moderate.php --- ../../../6/upload/sources/moderate.php 2005-05-06 00:00:00.000000000 +0300 +++ ./moderate.php 2005-08-14 19:54:39.000000000 +0300 @@ -927,6 +927,18 @@ } } + if ( $approve ) + foreach( $this->pids as $t ) + { + // Get this post id. + $DB->simple_construct( array( 'select' => 'pid, author_id, post_date, new_topic', 'from' => 'posts', 'where' => "topic_id={$this->topic['tid']} and pid={intval($t)}" ) ); + $DB->simple_exec(); + if ( ! $post = $DB->fetch_row() ) + { + $this->moderate_error(); + } + $this->increment_user_post_count($post['author_id']); + } if ( count($this->pids) ) { $DB->do_update( 'posts', array( 'queued' => $queued_post ), 'pid IN ('. implode(",", $this->pids) .')' ); @@ -1572,6 +1584,78 @@ } /*-------------------------------------------------------------------------*/ + // Increment user's post + // ------------------ + // if +1 post, +1 member's cumulative + /*-------------------------------------------------------------------------*/ + + function increment_user_post_count($mid) + { + global $ibforums, $DB, $std; + + $pcount = ""; + $mgroup = ""; + + $mid = intval($mid); + if ($mid) + { + //----------------------------------------- + // Get member + //----------------------------------------- + + $DB->cache_add_query( 'profile_get_all' , array( 'mid' => $mid ) ); + $DB->cache_exec_query(); + $member = $DB->fetch_row(); + $group = $DB->simple_exec_query( array( 'select' => 'g_promotion','from' => 'groups','where' => "g_id=".$member['mgroup'])); + $member['g_promotion']=$group['g_promotion']; + + if ($this->forum['inc_postcount']) + { + // Increment the users post count + + $pcount = "posts=posts+1, "; + } + + // Are we checking for auto promotion? + + if ($member['g_promotion'] != '-1&-1') + { + list($gid, $gposts) = explode( '&', $member['g_promotion'] ); + + if ( $gid > 0 and $gposts > 0 ) + { + if ( $member['posts'] + 1 >= $gposts ) + { + $mgroup = "mgroup='$gid', "; + +//// if ( USE_MODULES == 1 ) +//// { +//// require ROOT_PATH."modules/ipb_member_sync.php"; +//// +//// $this->modules = new ipb_member_sync(); +//// } + +// if ( USE_MODULES == 1 ) +// { +// $this->modules->register_class(&$this); +// $this->modules->on_group_change($mid, $gid); +// } + } + } + } + + $member['last_post'] = time(); + + $DB->simple_construct( array( 'update' => 'members', + 'set' => $pcount.$mgroup." last_post=".intval($member['last_post']), + 'where' => 'id='.$mid + ) ); + + $DB->simple_exec(); + } + } + + /*-------------------------------------------------------------------------*/ // Prune move /*-------------------------------------------------------------------------*/ diff -ur ../../../6/upload/sources/post.php ./post.php --- ../../../6/upload/sources/post.php 2005-05-06 00:00:00.000000000 +0300 +++ ./post.php 2005-08-14 18:52:26.000000000 +0300 @@ -1648,7 +1648,7 @@ if ($ibforums->member['id']) { - if ($this->forum['inc_postcount']) + if ($this->forum['inc_postcount']&&!$this->obj['moderate']) { // Increment the users post count Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.