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

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

Мод лишает новых пользователей возможности спамить.

Подробности (с чего все началось) тут

 

Ну вот я короче тут слабал небольшой патч, если кому надо.

 

Собственно, что делает патч:

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
   

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

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

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

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

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

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

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

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

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

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

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

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