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

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

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

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

 

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

 

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

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
   

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

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

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

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

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

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

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

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

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

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

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

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