—————————————————
Название: Отключение счетчика сообщений в разделе 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>
# ---- [ Конец ] -------------------


