—————————————————
Название: Отключение счетчика сообщений в разделе v.2
Автор: Xore <xore@azuriah.com> (Robert Hetzler)
Адаптировал под R775: Demetri (Dmitriy Y. Mayer)
Адаптировал под TPII: Gemini_13 <gemini_13@torba.su>
Описание: Мод добавляет возможность отключать счетчик сообщений в разделе, в результате чего сообщения и темы созданные в этом разделе не засчитаются пользователям в статистику.
Сложность установки: Легкая
Время установки: ~ 10 минут
Адаптирован под версию TPII: R550
Файлы к редактированию:
— admin/admin_forums.php
— includes/functions_admin.php
— includes/functions_post.php
— language/lang_russian/lang_admin.php
— templates/admin/admin_forums.tpl
Изменения v.2:
— исправлен баг изменения «флага» у постов при переносе темы в другой раздел
— исправлен баг изменения «флага» у постов при включении/отключении счетчика в разделе через админку
Addon:
— Вычисление отключенных сообщений с общей статистики (Addon)
—————————————————
Копирование и выкладывание модификаций на сторонних ресурсах без указания ссылки запрещено.
# ---- [ SQL ] ------------------- ALTER TABLE bb_forums ADD forum_postcount TINYINT(1) DEFAULT '1' NOT NULL; ALTER TABLE bb_posts ADD posts_count TINYINT(1) DEFAULT '1' NOT NULL; # ---- [ Открыть ] ------------------- admin/admin_forums.php # ---- [ Найти ] ------------------- 'S_STATUS_LIST' => $statuslist, # ---- [ Вставить после ] ------------------- 'S_FORUM_POSTCOUNT' => ( isset($row) && isset($row['forum_postcount']) && ($row['forum_postcount'] == 0) ) ? '' : 'checked="checked"', # ---- [ Найти ] ------------------- $columns = ' # ---- [ Вставить до ] ------------------- $forum_postcount = isset($_POST['forum_postcount']) ? intval($_POST['forum_postcount']) : 0; # ---- [ Найти ] ------------------- $columns = ' # ---- [ В строке найти ] ------------------- , forum_display_order # ---- [ В строке добавить после ] ------------------- , forum_postcount # ---- [ Найти ] ------------------- $values = " # ---- [ В строке найти ] ------------------- , $forum_display_order # ---- [ В строке добавить после ] ------------------- , $forum_postcount # ---- [ Найти ] ------------------- $prune_days = $row['prune_days']; # ---- [ Вставить после ] ------------------- $forum_postcount = ($row['forum_postcount']) ? HTML_CHECKED : ''; # ---- [ Найти ] ------------------- $prune_days = 0; # ---- [ Вставить после ] ------------------- $forum_postcount = ''; # ---- [ Найти ] ------------------- $forum_data = get_forum_data($forum_id); $old_cat_id = $forum_data['cat_id']; $forum_order = $forum_data['forum_order']; # ---- [ Вставить после ] ------------------- $forum_postcount = ''; # ---- [ Найти ] ------------------- DB()->query(" UPDATE ". BB_FORUMS ." SET forum_name = '$forum_name', cat_id = $cat_id, # ---- [ Вставить до ] ------------------- $forum_postcount = isset($_POST['forum_postcount']) ? intval($_POST['forum_postcount']) : 0; $forum_postcount_old = DB()->query(" SELECT forum_postcount FROM bb_forums WHERE forum_id = $forum_id "); // Update posts count options if changed forum_postcount if ($forum_postcount != $forum_postcount_old) { DB()->query(" UPDATE ". BB_POSTS ." SET posts_count = $forum_postcount WHERE forum_id = $forum_id "); } # ---- [ Найти ] ------------------- DB()->query(" UPDATE ". BB_FORUMS ." SET forum_name = '$forum_name', cat_id = $cat_id, # ---- [ В строке найти ] ------------------- prune_days = $prune_days, # ---- [ В строке добавить после ] ------------------- forum_postcount = $forum_postcount, # ---- [ Найти ] ------------------- // Update topics DB()->query(" UPDATE ". BB_TOPICS ." SET forum_id = $to_id WHERE forum_id = $from_id "); # ---- [ Вставить после ] ------------------- // Update posts count options DB()->query(" UPDATE ". BB_POSTS ." p SET p.posts_count = ( SELECT f.forum_postcount FROM ". BB_FORUMS ." f WHERE f.forum_id = $to_id ) WHERE p.forum_id = $from_id "); # ---- [ Открыть ] ------------------- includes/functions_admin.php # ---- [ Найти ] ------------------- DB()->query(" REPLACE INTO $tmp_user_posts SELECT user_id, 0 FROM ". BB_USERS ." WHERE user_id != ". GUEST_UID ." $where_user_sql UNION SELECT poster_id, COUNT(*) FROM ". BB_POSTS ." WHERE poster_id != ". GUEST_UID ." # ---- [ Вставить после ] ------------------- AND posts_count != 0 # ---- [ Найти ] ------------------- DB()->query(" INSERT INTO $tmp_user_posts # ---- [ В строке найти ] ------------------- AND p.poster_id != ". GUEST_UID ." # ---- [ В строке добавить после ] ------------------- AND p.posts_count != 0 # ---- [ Найти ] ------------------- // Update torrents DB()->query(" UPDATE ". BB_BT_TORRENTS ." SET forum_id = $to_forum_id WHERE topic_id IN($topic_csv) "); # ---- [ Вставить после ] ------------------- // Update posts count options DB()->query(" UPDATE ". BB_POSTS ." p SET p.posts_count = ( SELECT f.forum_postcount FROM ". BB_FORUMS ." f WHERE f.forum_id = $to_forum_id ) WHERE p.topic_id IN ($topic_csv) "); # ---- [ Открыть ] ------------------- includes/functions_post.php # ---- [ Найти ] ------------------- // Flood control $row = null; $where_sql = (IS_GUEST) ? "p.poster_ip = '". USER_IP ."'" : "p.poster_id = {$userdata['user_id']}"; # ---- [ Вставить до ] ------------------- // Check post count option $sql = "SELECT forum_postcount AS forum_post_count FROM ". BB_FORUMS ." WHERE forum_id = '" . $forum_id . "'"; if (!$forum_posts_count = DB()->fetch_row($sql)) { message_die(GENERAL_ERROR, $forum_posts_count['forum_post_count']); } $posts_count = (intval($forum_posts_count['forum_post_count'])) ? intval($forum_posts_count['forum_post_count']) : 0; # ---- [ Найти ] ------------------- $sql = ($mode != "editpost") ? "INSERT INTO " . BB_POSTS # ---- [ В строке найти ] ------------------- post_time, poster_ip # ---- [ В строке добавить после ] ------------------- , posts_count # ---- [ В строке найти ] ------------------- , $current_time, '". USER_IP ."' # ---- [ В строке добавить после ] ------------------- , $posts_count # ---- [ Найти ] ------------------- $sql = "UPDATE " . BB_USERS . " # ---- [ Вставить до ] ------------------- $sql = "SELECT forum_postcount FROM " . BB_FORUMS . " WHERE forum_id = $forum_id AND forum_postcount = 0"; if (!$result = DB()->sql_query($sql)) { message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql); } if ($row = DB()->sql_fetchrow($result)) { return; } # ---- [ Открыть ] ------------------- language/lang_russian/lang_admin.php # ---- [ Найти ] ------------------- $lang['PRUNE_DAYS'] # ---- [ Вставить до ] ------------------- $lang['FORUM_POSTCOUNT'] = 'Считать сообщения пользователей'; # ---- [ Открыть ] ------------------- templates/admin/admin_forums.tpl # ---- [ Найти ] ------------------- <tr> <td class="catBottom" colspan="2"> <input type="submit" name="submit" value="{S_SUBMIT_VALUE}" class="mainoption" /> </td> </tr> # ---- [ Вставить до ] ------------------- <tr> <td class="row1">{L_FORUM_POSTCOUNT}</td> <td class="row2">{L_ENABLED}<input type="checkbox" name="forum_postcount" value="1" {S_FORUM_POSTCOUNT} /></td> </tr> # ---- [ Конец ] -------------------