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

Антифлуд , склейка сообщений


pritorian

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

Поставил всё как сказано в антифлуд моде.. а он не работает..

заменил коды в файлах, добавиол настройки, настройки появились а сам мод не срабатывает в админке поставил

 

Enable antiflood?

Merge new post with old one if last post was by same author and was posted little time ago.

 

ДА

 

что это может быть ?

инструкция мода ниже...

она хоть рабочая ?

 

+--------------------------------------------------------------------------
|   Антифлуд - склейка сообщений
|   ========================================
|   сотворено d1 для своего форума :)
|   Проверялось IPB2 Final 
|   Дата: Wed, 15 Oct 2004
|   Демо: http://rhh4room.ovl.ru
+---------------------------------------------------------------------------
|
|   Этот мод добавляет текст нового сообщения к предыдущему, если оно было
|   тем же автором некоторое время назад. Таким образом предотвращается 
|   создание двойных сообщений в случае "глюка" браузера. Да и просто
|   позволяет не редактировать последнее сообщение с целью того, чтобы
|   дописать что-то, что забыл сказать.
|   Так же корректно цепляет аттачи. Время и разделитель настраиваются
|   админку.
|   Благодарности Vanish'у за оригинальную идею и первые реализации
|   для предыдущих версий форума :)
|
+--------------------------------------------------------------------------

Итак, приступим :).

Стадия 1 (Редактирование файлов):

Откройте и отредактируйте следующим образом файл /source/lib/post_reply_post.php

Найдите:
                //-----------------------------------------
                // Add post to DB
                //-----------------------------------------

                $this->post['post_key']    = $this->post_key;
                $this->post['post_parent'] = intval($ibforums->input['parent_id']);

                //-----------------------------------------
                // Typecast
                //-----------------------------------------

                $DB->force_data_type = array( 'pid'  => 'int',
                                                                          'post' => 'string' );

                $DB->do_insert( 'posts', $this->post );

                $this->post['pid'] = $DB->get_insert_id();

                //-----------------------------------------
                // If we are still here, lets update the
                // board/forum/topic stats
                //-----------------------------------------

                $this->class->pf_update_forum_and_stats($this->topic['tid'], $this->topic['title'], 'reply');

Замените на:

                //-------------------------------------------------
                // Add post to DB
                //-------------------------------------------------

                //merge posts
                //-------------------------------------------------
                // Unset append flag
                //-------------------------------------------------

                $append_post = false;

                //-------------------------------------------------
                // Are we merging or what?
                //-------------------------------------------------

                if (($this->topic['last_poster_id'] == $this->post['author_id']) and ($this->post['author_id']) and ((time() - $this->last_post) < $ibforums->vars['flood_time']) and ( $ibforums->vars['flood_enabled'] ) )
                {
                       $DB->simple_construct( array( 'select' => 'pid, post', 'from' => 'posts', 'where' => "topic_id=".$this->topic['tid']." AND author_id=".$this->post['author_id'] , 'order' => 'post_date DESC', 'limit' => array('0','1') ) );
                       $DB->simple_exec();

                       $this->lastpost = $DB->fetch_row();

                       $flood_separator = preg_replace ( array("/\[author\]/is", "/\[mergetime\]/is"),
                                                         array($ibforums->member['name'], "[mergetime]".time()."[/mergetime]" ),
                                                         $ibforums->vars['flood_separator'] );

                       $flood_separator = $this->class->parser->convert( array(
                                                            'TEXT'    => $flood_separator,
                                                            'CODE'    => $this->class->forum['use_ibc'],
                                                            'SMILIES' => $ibforums->input['enableemo'],
                                                            'HTML'    => 1
                                                      )      );

                       if ( strlen ($this->lastpost['post'].$flood_separator.$this->post['post']) <= ($ibforums->vars['max_post_length'] * 1024) )
                       {
                            //-------------------------------------------------
                            // Set append flag
                            //-------------------------------------------------

                            $append_post = true;

                            $this->post['post_key']    = $this->post_key;
                            $this->post['post']        = $this->lastpost['post'].$flood_separator.$this->post['post'];

                            //-------------------------------------------------
                            // Update attachments or we'll lose them
                            //-------------------------------------------------

                            $DB->do_update( 'attachments', array( 'attach_post_key' => $this->post_key ), 'attach_pid='.$this->lastpost['pid'] );

                            //-------------------------------------------------
                            // Update last post
                            //-------------------------------------------------

                            $DB->force_data_type = array( 'pid'  => 'int',
                                                          'post' => 'string' );

                            $DB->do_update( 'posts', $this->post, "pid=".$this->lastpost['pid'] );
                            $this->post['pid'] = $this->lastpost['pid'];

                            $dbs = array( 'last_title'       => $this->topic['title'],
                                          'last_id'          => $this->topic['tid'],
                                          'last_post'        => time(),
                                          'last_poster_name' => $ibforums->member['id'] ?  $ibforums->member['name'] : $ibforums->input['UserName'],
                                          'last_poster_id'   => $ibforums->member['id'],
                                        );


                            $DB->do_update( 'forums', $dbs, "id=".intval($this->class->forum['id']) );

                            //----------------------------------------
                            // Update forum cache
                            //----------------------------------------

                            $std->update_forum_cache();

                            $std->update_cache( array( 'name' => 'stats'      , 'array' => 1, 'deletefirst' => 0, 'donow' => 1 ) );
                        }
                }

                //-------------------------------------------------
                // If append flag is not set, then just add a new post
                //-------------------------------------------------

                if ( ! $append_post )
                {
                        $this->post['post_key']    = $this->post_key;
                        $this->post['post_parent'] = intval($ibforums->input['parent_id']);

                        //-------------------------------------------------
                        // Typecast
                        //-------------------------------------------------

                        $DB->force_data_type = array( 'pid'  => 'int',
                                                      'post' => 'string' );

                        $DB->do_insert( 'posts', $this->post );

                        $this->post['pid'] = $DB->get_insert_id();


                        //-------------------------------------------------
                        // If we are still here, lets update the
                        // board/forum/topic stats
                        //-------------------------------------------------

                        $this->class->pf_update_forum_and_stats($this->topic['tid'], $this->topic['title'], 'reply');
                }
                //merge posts

Найдите:

 //-------------------------------------------------
 // If we are a member, lets update thier last post
 // date and increment their post count.
 //-------------------------------------------------

 $this->class->pf_increment_user_post_count();

Замените на:

 //-------------------------------------------------
 // If we are a member, lets update thier last post
 // date and increment their post count.
 //-------------------------------------------------
 //merge posts
 if ( ! $append_post )
 {
	 $this->class->pf_increment_user_post_count();
 }
 //merge posts

Откройте и отредактируйте следующим образом файл /source/topics.php

Найдите:

                $row['edit_button']   = $this->edit_button($row['pid'], $poster, $row['post_date']);

Добавьте ниже:

                $row['post']          = preg_replace ("#\[mergetime\](\S+?)\[/mergetime\]#ie", "\$std->get_time('\\1', \$ibforums->vars['flood_merge'] )", $row['post']);


Стадия 2 (импорт настроек для мода):

Идите в ACP -> View All General Settings -> Import an XML settings file
Укажите здесь xml файл из архива (antiflood_settings.xml).

Теперь идите в Topics, Posts and Polls и настройте мод.

Для разделителя постов можно использовать BBCodes, смайлы, html. Так же можно использовать [author] и 
[mergetime] для получения имени пользователя и времени добавления.

Все готово!

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

Ну, ребят.

Даже я поставила- все работает

Там важно делать все по инструкции. сказано удалить сразу использованный файл - удаляем, не откладывая в дальний ящик

 

у меня другая проблема- не всегда и не во всех форумах это нужно, а отключается только глобально ((

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

переставил, всёравно не склеивает... мда

вот настройки

как написано всё в файлах поменял переставил..

ничего же сложного..

 

 

 

Enable antiflood?

Merge new post with old one if last post was by same author and was posted little time ago.

 

да

 

Anti-flood effect cut-off time

Merge new post with old one if last post was *this* seconds ago. (300 sec = 5 min)

 

5

 

Post separator

Raw html. This code will appear between new post and old one when merging.

 

<br /><br />

 

Merge time format

Same configuration as PHP Date

 

M j Y, h:i A

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

Deva где там сказано удалять какой то использованный файл ? нет там такого

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

на что?? это же флуд контроль...

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

блииииинннн ! помоему врубил...

это втечении какого времени он будет склеивать.. точнее если в течении например 30 секунд напишет один автор то склеит если стоит 30 сек если больше, то не склеит...

мда..

вот я гоню

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

это не мне пасиб а d1pro, я бы еще долго разбирался в чём проблемма, я ту настройку не так понял, думал это просто флуд контроль а не рамки времени в которых срабатывает модуль
Ссылка на комментарий
Поделиться на других сайтах

  • 3 месяца спустя...

Такая проблема: все работает, сообщения склеиваются и т.п., НО! при отправке сообщения (например, через быстрый ответ), если происходит склейка, то окно не рефрешится. Т.е. запрос уходит и на этом все останавливается (Запрос завершен в строке состояния).

Такое происходит ТОЛЬКО при склейке сообщений, если склейки нет, то все проходит нормально, страница обновляется.

 

Где рыть?

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

... при отправке сообщения (например, через быстрый ответ), если происходит склейка, то окно не рефрешится...

Ага, тоже самое... :D

Как быть ???

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

Решил так:

в файле post_reply_post.php перед

                }

               //-------------------------------------------------
               // If append flag is not set, then just add a new post
               //-------------------------------------------------

вставил вот это:

$std->boink_it($ibforums->base_url."act=ST&f=".$this->class->forum['id']."&t=".$this->topic['tid']."&view=getlastpost");

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

Ну подскажите как же это сделать!

Если навскидку, то регекспом выдирать во время отправки из сообщения все, что между [mergetime][/mergetime], отнимать от времени, записанного в конец сообщения между какими-нибудь своими тегами (например, [sendtime]), обрабатывать, вставлять вместо [mergetime]время отправки[/mergetime].

Соответственно, [sendtime] не выводить.

 

При посылке сообщения [sendtime] менять на текущее время.

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

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

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

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

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

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

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

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

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

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

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

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