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

Счётчик сообщений пользователя


theIggs

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

вот. смысл объединения постов разных юзеров таков:

 

один чел допустим зарегил себе несколько ников, а потом это выяснилось и было решено сообщения с разных ников подогнать под один.

 

Теперь сделаешь мод?

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

вообщем доделал код

проверил работает

1. работает с корзиной и без

2. работает и с форумами со счетчиками и с форумами без счетчиков

3. переводит в нижнюю группу если настроен переход от кол-ва постов

- если перевод в НЫНЕШЮЮ группу возможен из нескольких то выбирается первая попашаяся - иначе усложнять код - смысла не вижу в этом.

- еще возможен (маловероятно) момент такой что у пользователя удалят такой кол-во постов что его надо перевести на несколько групп ниже - это тоже не сделал - утяжелять код да и опять же редкость...

вообщем вот сами изменения...

 

 

 

изменяемая таблица

ibf_topics

 

изменяемые файлы

sources\moderate.php
sources\lib\modfunctions.php

 

1. изменения в таблице ibf_topics

 

добавляем поле

ALTER TABLE `ibf_topics` ADD `inc_postcount` TINYINT( 1 ) DEFAULT NULL ;

 

2. изменения в файле sources\moderate.php

внутри функции

 function multi_split_topic()

находим

   //----------------------------------------------------
   // Complete a new dummy topic
   //----------------------------------------------------
   
   $DB->do_insert( 'topics',  array(
            'title'            => $ibforums->input['title'],
            'description'      => $ibforums->input['desc'] ,

после добавляем

//my post-1            
            'inc_postcount'	=> $ibforums->input['inc_postcount'] ,
//my post-1        

 

дальше внутри функции

 function multi_delete_post()

находим

   $ibforums->input['desc']    = "From Topic ID: ".$this->topic['tid'];

и после добавляем

//my post-1
   if (!$this->forum['inc_postcount']) $ibforums->input['inc_postcount']=1;
//my post-1

 

дальше внутри функции

 function multi_alter_topics($mod_action="", $sql="")

находим

    $this->modfunc->topic_move($this->tids, $this->forum['id'], $this->trash_forum);

и заменяем на

//my post-1

    $inc_postcount='';
    if (!$this->forum['inc_postcount']) $inc_postcount=1;
   
    $this->modfunc->topic_move($this->tids, $this->forum['id'], $this->trash_forum,'', $inc_postcount);
//my post-1    

 

дальше внутри функции

 function delete_topic()

находим

   $this->modfunc->topic_move($this->topic['tid'], $this->forum['id'], $this->trash_forum);

и заменяем на

//my post-1

   $inc_postcount='';
   if (!$this->forum['inc_postcount']) $inc_postcount=1;
   
   $this->modfunc->topic_move($this->topic['tid'], $this->forum['id'], $this->trash_forum,'', $inc_postcount);
//my post-1

 

внутри функции function delete_post() ищем строчку

   $ibforums->input[ 'post_'.$ibforums->input['p'] ] = 1;

и ПОСЛЕ добавляем

//my post-1
  	if (!$this->forum['inc_postcount']) $ibforums->input['inc_postcount']=1;
//my post-1

 

3. изменения в файле sources\lib\modfunctions.php

 

находим функцию

 function post_delete($id)

и полностью заменяем на

 function post_delete($id)
{
  global $std, $ibforums, $DB;
  
  $posts      = array();
  $attach_tid = array();
  $topics     = array();

//my post-1
$author_id  = array();
//my post-1

  $this->error = "";

  if ( is_array( $id ) )
  {
   if ( count($id) > 0 )
   {
    $pid = " IN(".implode(",",$id).")";
   }
   else
   {
    return FALSE;
   }
  }
  else
  {
   if ( intval($id) )
   {
    $pid   = "=$id";
   }
   else
   {
    return FALSE;
   }
  }
  
  //---------------------------------------
  // Get Stuff
  //---------------------------------------
//my post-1
  $DB->query(" SELECT p.pid, p.topic_id, p.author_id, t.forum_id, t.inc_postcount, m.mgroup, m.posts FROM ibf_topics t, ibf_posts p LEFT JOIN ibf_members m ON (m.id=p.author_id) WHERE p.topic_id=t.tid AND p.pid $pid" );
//my post-1
  $DB->simple_exec();
  
  while ( $r = $DB->fetch_row() )
  {
   $posts[ $r['pid'] ]       = $r['topic_id'];
   $topics[ $r['topic_id'] ] = 1;

//my post-1
  if (($this->forum['inc_postcount'] or $r['forum_id']==$ibforums->vars['forum_trash_can_id']) && $r['inc_postcount']!=1) 
  {
   $author_id[$r['author_id']]['count']=$author_id[$r['author_id']]['count']+1;
   $author_id[$r['author_id']]['mgroup']=$r['mgroup'];
   $author_id[$r['author_id']]['posts']=$r['posts'];
  }
//my post-1
  }
  //---------------------------------------
  // Is there an attachment to this post?
  //---------------------------------------

  $DB->simple_construct( array( 'select' => '*', 'from' => 'attachments', 'where' => "attach_pid".$pid ) );
  $DB->simple_exec();
  
  $attach_ids = array();
  
  while ( $killmeh = $DB->fetch_row( ) )
  {
   if ( $killmeh['attach_location'] )
   {
    @unlink( $ibforums->vars['upload_dir']."/".$killmeh['attach_location'] );
   }
   if ( $killmeh['attach_thumb_location'] )
   {
    @unlink( $ibforums->vars['upload_dir']."/".$killmeh['attach_thumb_location'] );
   }
   
   $attach_ids[] = $killmeh['attach_id'];
   $attach_tid[ $posts[ $killmeh['attach_pid'] ] ] = $posts[ $killmeh['attach_pid'] ];
  }
  
  if ( count($attach_ids) )
  {
   $DB->simple_exec_query( array( 'delete' => 'attachments', 'where' => "attach_id IN(".implode(",",$attach_ids).")" ) );
   
   //---------------------------------------
   // Recount topic upload marker
   //---------------------------------------
   
   require_once( ROOT_PATH.'sources/post.php' );
   
   $postlib = new post();
   
   foreach( $attach_tid as $apid => $tid )
   {
    $postlib->pf_recount_topic_attachments($tid);
   }
  }
  
  //---------------------------------------
  // delete the post
  //---------------------------------------
  
  $DB->simple_exec_query( array( 'delete' => 'posts', 'where' => "pid".$pid ) );
  
  //---------------------------------------
  // Update the stats
  //---------------------------------------
  
  $ibforums->cache['stats']['total_replies'] -= count($posts);
  
  $std->update_cache( array( 'name' => 'stats', 'array' => 1, 'deletefirst' => 0 ) );
  
  //---------------------------------------
  // Update all relevant topics
  //---------------------------------------
  
  foreach( array_keys($topics) as $tid )
  {
   $this->rebuild_topic($tid);
  }

//my post-1
//##################################################
if ( count($author_id) )
{
foreach ($author_id as $member_id => $post_delete) 
{
  $mgroup='';
  $pcount = '';
  
  $DB->query("select g_id, g_promotion from ibf_groups where g_promotion LIKE '{$post_delete['mgroup']}\&\%'" );
  $DB->simple_exec();
  
       if ($r = $DB->fetch_row()) 
  {
   $temp_arr=explode('&',$r['g_promotion']);
   if (($post_delete['posts']-$post_delete['count'])<$temp_arr[1])	$mgroup=" mgroup={$r['g_id']}, ";
  }

  $pcount = '';
  
   $pcount = "posts=posts-{$post_delete['count']}, ";
   
   $r['last_post'] = time();

   
   $DB->simple_construct( array( 'update' => 'members',
            'set'    => $pcount.$mgroup.' last_post='.intval($r['last_post']),
            'where'  => 'id='.$member_id 
         )      );
         
   $DB->simple_exec();

}
}
//##################################################
//my post-1
  
  $this->add_moderate_log("Deleted posts ($pid)", "", "", $pid, "");
}

 

внутри функции

 function topic_delete($id, $nostats=0)

находим

  //------------------------------------
  // Remove polls assigned to this topic
  //------------------------------------
  
  $DB->simple_exec_query( array( 'delete' => 'topics', 'where' => "tid".$tid ) );

и вырезаем из кода

 

чуть ниже находим

  //------------------------------------
  // Remove the posts
  //------------------------------------
  
  $DB->simple_exec_query( array( 'delete' => 'posts', 'where' => "topic_id".$tid ) );

и заменяем на

   //------------------------------------
  // Remove the posts
  //------------------------------------
//my post-1            
  $this->post_delete($posts);	
  
  //------------------------------------
  // Remove this topic
  //------------------------------------
  
  $DB->simple_exec_query( array( 'delete' => 'topics', 'where' => "tid".$tid ) );
//my post-1            

 

затем находим строчку

 function topic_move($topics, $source, $moveto, $leavelink=0)

и заменяем ее на

 function topic_move($topics, $source, $moveto, $leavelink=0, $inc_postcount='')

 

затем чуть ниже находим

  $DB->do_update( 'topics', array( 'forum_id' => $moveto ), "forum_id=$source AND tid".$tid );

и заменяем на

//my post-1 add 'inc_postcount'=>$inc_postcount
  $DB->do_update( 'topics', array( 'forum_id' => $moveto, 'inc_postcount'=>$inc_postcount ), "forum_id=$source AND tid".$tid );
//my post-1

 

всё...

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

winnie

проделал всё в точности как описано в твоём примере и при попытке удалить пост юзера получаю белое окно а пост не удаляется.перепроверил раз пять все свои действия но ошибки не нашол.У меня PF3.

Если возможно то объясни возможную причину

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

:D сори забыл написать про еще одну строчку давно дело было забыл ;)

дополнительные изменения в файле изменения в файле sources\moderate.php

внутри функции function delete_post() ищем строчку

   $ibforums->input[ 'post_'.$ibforums->input['p'] ] = 1;

и ПОСЛЕ добавляем

//my post-1
	 if (!$this->forum['inc_postcount']) $ibforums->input['inc_postcount']=1;
//my post-1

на счет версии ПФ3 ручатся не могу- не пробовал там.. да и не собираюсь пока.. устал переносить с версиии на версию.. ждем-с финала...

НО под ПФ2 работает - это точно.. если еще чего не забыл дописать :)

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

зы :) очень сильно извиняюсь проверил сам свою писанину:) нашел мелкую ошибку..

в файле sources\lib\modfunctions.php

внутри функции function post_delete($id)

в строчке

 if (($post_delete['posts']-$post_delete['count'])<$temp_arr[1]) $mgroup=" mgroup={$r['g_id']}, ";

была пропущена вначале скобка :D

еще раз извиняюсь..

верхний пост исправил теперь там ВСЁ правильно, если не работает, то .. руки.сис ... ;)

=FOCUS= у вас видимо отключен показ ошибок вот и вылезает белый лист.. вместо него там дожно было вылезти сообщение об ошибке в этой строке

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

  • 1 месяц спустя...
Оч полезная штука, пасибо дядям :D
Ссылка на комментарий
Поделиться на других сайтах

люди. большое спасибо за всю вашу работу, но вот беда, так много здесь всего писалось, что совсем запуталась что и где исправлять. где уже конкретно? помогите плиз. :D
Ссылка на комментарий
Поделиться на других сайтах

1. Уменьшение счётчика постов после удаления отдельных постов.

Открыть sources/Moderate.php. Найти:

$DB->query("UPDATE ibf_stats SET TOTAL_REPLIES=TOTAL_REPLIES-1");

Странно, но во 2-ом финале этого я не могу найти :D Значит, это только для 1.3.х, или я не так понял?

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

Странно, но во 2-ом финале этого я не могу найти  Значит, это только для 1.3.х, или я не так понял?

Под финал 2.0 работает вот эта Счётчик сообщений пользователя модификация.

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

Хорошо..с кодом все понятно..

 

Такой вопрос.. как всунуть это в форум который только будит ставиться..

 

А точнее в какой из файлов инсталяции нужно прописать изменения базы ?

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

winnie

 

Как я понимаю после:

$TABLE[] = "CREATE TABLE ibf_topics (

нужно ставить:ALTER TABLE `ibf_topics` ADD `inc_postcount` TINYINT( 1 ) DEFAULT NULL ;

 

Иди как то подругому прописывать надо ?

Так как там все значения имеют такой вид:

tid int(10) NOT NULL auto_increment,

title varchar(250) NOT NULL default '',

description varchar(70) default NULL

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

$TABLE[] = "CREATE TABLE ibf_topics (
  tid int(10) NOT NULL auto_increment,
  title varchar(250) NOT NULL default '',
  description varchar(70) default NULL,
  state varchar(8) default NULL,
  posts int(10) default NULL,
  starter_id mediumint(8) NOT NULL default '0',
  start_date int(10) default NULL,
  last_poster_id mediumint(8) NOT NULL default '0',
  last_post int(10) default NULL,
  icon_id tinyint(2) default NULL,
  starter_name varchar(32) default NULL,
  last_poster_name varchar(32) default NULL,
  poll_state varchar(8) default NULL,
  last_vote int(10) default NULL,
  views int(10) default NULL,
  forum_id smallint(5) NOT NULL default '0',
  approved tinyint(1) default NULL,
  author_mode tinyint(1) default NULL,
  pinned tinyint(1) default NULL,
  moved_to varchar(64) default NULL,
  rating text,
  total_votes int(5) NOT NULL default '0',
  topic_hasattach smallint(5) NOT NULL default '0',
  topic_firstpost int(10) NOT NULL default '0',
  topic_queuedposts int(10) NOT NULL default '0',
  curator_id VARCHAR(255) DEFAULT NULL,
  inc_postcount TINYINT(1) DEFAULT NULL,
  PRIMARY KEY  (tid),
  KEY last_post (last_post),
  KEY forum_id (forum_id,approved,pinned),
  KEY topic_firstpost (topic_firstpost)
)";

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

winnie

 

Сделал все как ты писал а получил

 

Warning!

 

Следующие ошибки должны быть устранены перед продолжением!

Пожалуйста вернитесь назад и повторите попытку!

 

INSERT INTO ibf_topics VALUES (1, 'Welcome', '', 'open', 0, 1, 1069075118, 1, 1069075118, 0, 'IPB Team', 'IPB Team', '0', 0, 1, 2, 1, 0, 0, NULL, NULL, 0, 0, 1, 0);

 

Column count doesn't match value count at row 1

 

 

ЧТо теперь делать ?

Добавлено в [mergetime]1097415629[/mergetime]

Также если закоментировать эту строчку утсановка происходит нармальнео.

Ноне появляеться тестовый топик..

При создании нового топика.. и потом при попытки его удалить появляеться белая страница!!!!!!!!!!!

 

Прошу подсказать что нужно делать чтоб стурнаить ошибку..

 

Форум Версии 2.0+все изменения казанные d1pro в его патчах..+ русские даты

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

WaRLoCK

таблица все же такая... :D

$TABLE[] = "CREATE TABLE ibf_topics (
  tid int(10) NOT NULL auto_increment,
  title varchar(250) NOT NULL default '',
  description varchar(70) default NULL,
  state varchar(8) default NULL,
  posts int(10) default NULL,
  starter_id mediumint(8) NOT NULL default '0',
  start_date int(10) default NULL,
  last_poster_id mediumint(8) NOT NULL default '0',
  last_post int(10) default NULL,
  icon_id tinyint(2) default NULL,
  starter_name varchar(32) default NULL,
  last_poster_name varchar(32) default NULL,
  poll_state varchar(8) default NULL,
  last_vote int(10) default NULL,
  views int(10) default NULL,
  forum_id smallint(5) NOT NULL default '0',
  approved tinyint(1) default NULL,
  author_mode tinyint(1) default NULL,
  pinned tinyint(1) default NULL,
  moved_to varchar(64) default NULL,
  rating text,
  total_votes int(5) NOT NULL default '0',
  topic_hasattach smallint(5) NOT NULL default '0',
  topic_firstpost int(10) NOT NULL default '0',
  topic_queuedposts int(10) NOT NULL default '0',
  inc_postcount TINYINT(1) DEFAULT NULL,
  PRIMARY KEY  (tid),
  KEY last_post (last_post),
  KEY forum_id (forum_id,approved,pinned),
  KEY topic_firstpost (topic_firstpost)
)";

 

это

INSERT INTO ibf_topics VALUES (1, 'Welcome', '', 'open', 0, 1, 1069075118, 1, 1069075118, 0, 'IPB Team', 'IPB Team', '0', 0, 1, 2, 1, 0, 0, NULL, NULL, 0, 0, 1, 0);

заменить на

INSERT INTO ibf_topics VALUES (1, 'Welcome', '', 'open', 0, 1, 1069075118, 1, 1069075118, 0, 'IPB Team', 'IPB Team', '0', 0, 1, 2, 1, 0, 0, NULL, NULL, 0, 0, 1, 0, NULL);

 

d1pro да удалил несколько полей а это забыл;)

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

winnie

 

От ошибки в инсталле избавился..

Но белые старницы при попытки удален7ия.. сообщений или топика осталисб ..

 

Как то избавиться можно от этого ?

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

зайдите в файл index.php и поменяйте там строчку

error_reporting  (E_ERROR | E_WARNING | E_PARSE);

на

error_reporting  (E_ALL);

и посмотрите какие ошибки вылезают при удалении - у самого стоит на финале - все работает

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

Делал под финал, вылезла белая страница:

mySQL query error:  SELECT p.pid, p.topic_id, p.author_id, t.forum_id, t.inc_postcount, m.mgroup, m.posts FROM ******topics t, ******posts p LEFT JOIN ******members m ON (m.id=p.author_id) WHERE p.topic_id=t.tid AND p.pid =453

mySQL error: Unknown column 't.inc_postcount' in 'field list'
mySQL error code: 
Date: Monday 11th of October 2004 08:58:18 PM

где звёздочками скрыт мой пароль.

Делал как написано на 4-ой странице, вчём дело?

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

×
×
  • Создать...

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

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