Aleks Опубликовано 16 Августа 2004 Жалоба Поделиться Опубликовано 16 Августа 2004 вот. смысл объединения постов разных юзеров таков: один чел допустим зарегил себе несколько ников, а потом это выяснилось и было решено сообщения с разных ников подогнать под один. Теперь сделаешь мод? Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 18 Августа 2004 Жалоба Поделиться Опубликовано 18 Августа 2004 вообщем доделал кодпроверил работает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 всё... Ссылка на комментарий Поделиться на других сайтах Прочее
=FOCUS= Опубликовано 24 Августа 2004 Жалоба Поделиться Опубликовано 24 Августа 2004 winnie проделал всё в точности как описано в твоём примере и при попытке удалить пост юзера получаю белое окно а пост не удаляется.перепроверил раз пять все свои действия но ошибки не нашол.У меня PF3.Если возможно то объясни возможную причину Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 24 Августа 2004 Жалоба Поделиться Опубликовано 24 Августа 2004 сори забыл написать про еще одну строчку давно дело было забыл дополнительные изменения в файле изменения в файле 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 работает - это точно.. если еще чего не забыл дописать Ссылка на комментарий Поделиться на других сайтах Прочее
=FOCUS= Опубликовано 24 Августа 2004 Жалоба Поделиться Опубликовано 24 Августа 2004 обидно,но увы не работает спасибо за ответ Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 25 Августа 2004 Жалоба Поделиться Опубликовано 25 Августа 2004 зы очень сильно извиняюсь проверил сам свою писанину нашел мелкую ошибку..в файле sources\lib\modfunctions.phpвнутри функции function post_delete($id)в строчке if (($post_delete['posts']-$post_delete['count'])<$temp_arr[1]) $mgroup=" mgroup={$r['g_id']}, ";была пропущена вначале скобка еще раз извиняюсь..верхний пост исправил теперь там ВСЁ правильно, если не работает, то .. руки.сис ... =FOCUS= у вас видимо отключен показ ошибок вот и вылезает белый лист.. вместо него там дожно было вылезти сообщение об ошибке в этой строке Ссылка на комментарий Поделиться на других сайтах Прочее
=FOCUS= Опубликовано 25 Августа 2004 Жалоба Поделиться Опубликовано 25 Августа 2004 winnie Огромное спасибо!!!! Теперь всё работает Ссылка на комментарий Поделиться на других сайтах Прочее
Shaggoth Опубликовано 27 Сентября 2004 Жалоба Поделиться Опубликовано 27 Сентября 2004 Оч полезная штука, пасибо дядям Ссылка на комментарий Поделиться на других сайтах Прочее
Наташенька610 Опубликовано 1 Октября 2004 Жалоба Поделиться Опубликовано 1 Октября 2004 люди. большое спасибо за всю вашу работу, но вот беда, так много здесь всего писалось, что совсем запуталась что и где исправлять. где уже конкретно? помогите плиз. Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 2 Октября 2004 Жалоба Поделиться Опубликовано 2 Октября 2004 вот все что здесь ( Счётчик сообщений пользователя ) описано - все верно и исправлено- работает Ссылка на комментарий Поделиться на других сайтах Прочее
WaRLoCK Опубликовано 9 Октября 2004 Жалоба Поделиться Опубликовано 9 Октября 2004 winnie А под ФИналом Работает ? Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 9 Октября 2004 Жалоба Поделиться Опубликовано 9 Октября 2004 да Ссылка на комментарий Поделиться на других сайтах Прочее
zero_vlz Опубликовано 9 Октября 2004 Жалоба Поделиться Опубликовано 9 Октября 2004 1. Уменьшение счётчика постов после удаления отдельных постов.Открыть sources/Moderate.php. Найти:$DB->query("UPDATE ibf_stats SET TOTAL_REPLIES=TOTAL_REPLIES-1");Странно, но во 2-ом финале этого я не могу найти Значит, это только для 1.3.х, или я не так понял? Ссылка на комментарий Поделиться на других сайтах Прочее
Iris Опубликовано 9 Октября 2004 Жалоба Поделиться Опубликовано 9 Октября 2004 Странно, но во 2-ом финале этого я не могу найти Значит, это только для 1.3.х, или я не так понял?Под финал 2.0 работает вот эта Счётчик сообщений пользователя модификация. Ссылка на комментарий Поделиться на других сайтах Прочее
WaRLoCK Опубликовано 9 Октября 2004 Жалоба Поделиться Опубликовано 9 Октября 2004 Хорошо..с кодом все понятно.. Такой вопрос.. как всунуть это в форум который только будит ставиться.. А точнее в какой из файлов инсталяции нужно прописать изменения базы ? Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 9 Октября 2004 Жалоба Поделиться Опубликовано 9 Октября 2004 mysql_tables.php Ссылка на комментарий Поделиться на других сайтах Прочее
WaRLoCK Опубликовано 10 Октября 2004 Жалоба Поделиться Опубликовано 10 Октября 2004 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 Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 10 Октября 2004 Жалоба Поделиться Опубликовано 10 Октября 2004 $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) )"; Ссылка на комментарий Поделиться на других сайтах Прочее
WaRLoCK Опубликовано 10 Октября 2004 Жалоба Поделиться Опубликовано 10 Октября 2004 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 в его патчах..+ русские даты Ссылка на комментарий Поделиться на других сайтах Прочее
d1pro Опубликовано 10 Октября 2004 Жалоба Поделиться Опубликовано 10 Октября 2004 winnie А ты не лишка полей указал? Куратора темы еще подключил и т.п. Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 10 Октября 2004 Жалоба Поделиться Опубликовано 10 Октября 2004 WaRLoCK таблица все же такая... $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 да удалил несколько полей а это забыл Ссылка на комментарий Поделиться на других сайтах Прочее
WaRLoCK Опубликовано 10 Октября 2004 Жалоба Поделиться Опубликовано 10 Октября 2004 winnie От ошибки в инсталле избавился..Но белые старницы при попытки удален7ия.. сообщений или топика осталисб .. Как то избавиться можно от этого ? Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 10 Октября 2004 Жалоба Поделиться Опубликовано 10 Октября 2004 зайдите в файл index.php и поменяйте там строчку error_reporting (E_ERROR | E_WARNING | E_PARSE);на error_reporting (E_ALL);и посмотрите какие ошибки вылезают при удалении - у самого стоит на финале - все работает Ссылка на комментарий Поделиться на других сайтах Прочее
WaRLoCK Опубликовано 11 Октября 2004 Жалоба Поделиться Опубликовано 11 Октября 2004 winnie Поменял..все равно просто белая страница.. Ладно дофиксю остальбное потом буду пробывать... Ссылка на комментарий Поделиться на других сайтах Прочее
zero_vlz Опубликовано 13 Октября 2004 Жалоба Поделиться Опубликовано 13 Октября 2004 Делал под финал, вылезла белая страница: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-ой странице, вчём дело? Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения