function IndexForumDeletePost() { global $forum_lang; if (!System::user()->isAdmin() || !CheckGet('topic', 'post', 'ok')) { HackOff(); return; } if (isset($_GET['page']) && $_GET['page'] > 1) { $page = '&page=' . SafeDB($_GET['page'], 11, int); $page_ufu = '-{page}'; } else { $page = ''; $page_ufu = ''; } // Подтверждение на удаление if (!isset($_GET['ok']) || !isset($_POST['text']) && System::config('forum/basket') || $_GET['ok'] == '0') { $text = '<br>' . $forum_lang['delete_post'] . '?'; System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $text . '</p>'); System::site()->AddTemplatedBox('', 'module/forum_delete_post.html'); System::site()->AddBlock('delete_form', true, false, 'form'); $vars = array(); $vars['basket'] = System::config('forum/basket'); $vars['url'] = 'index.php?name=forum&op=deletepost&topic=' . SafeDB($_GET['topic'], 11, int) . '&post=' . SafeDB($_GET['post'], 11, int) . $page . '&ok=1'; // Без UFU System::site()->Blocks['delete_form']['vars'] = $vars; return; } // Сообщение $post_id = SafeEnv($_GET['post'], 11, int); System::database()->Select('forum_posts', "`id`='{$post_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_post']); return; } $post = System::database()->FetchRow(); if ($post['delete'] == '1') { // На удалении System::site()->AddTextBox($forum_lang['error'], $forum_lang['post_basket']); return; } // Тема $topic_id = SafeEnv($_GET['topic'], 11, int); System::database()->Select('forum_topics', "`id`='{$topic_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_topic']); return; } $topic = System::database()->FetchRow(); if ($topic['delete'] == '1') { // Тема на удалении System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_basket']); return; } // Форум $forum_id = SafeEnv($topic['forum_id'], 11, int); System::database()->Select('forums', "`id`='{$forum_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_forum']); return; } $forum = System::database()->FetchRow(); // Удаление поста if (System::config('forum/basket')) { // Удаляем сообщение в корзину $reason = ''; if (isset($_POST['text'])) { $reason = SafeEnv($_POST['text'], 255, str); } Moderation_Do_Basket_Post($post_id, $reason); } else { ForumAdminDeletePost($post_id); } // Обновляем тему $topic_posts = (int) $topic['posts'] - 1; if ($topic_posts < 0) { $topic_posts = 0; } $topic_set = "`posts`='{$topic_posts}'"; $topic_extra_set = false; // Удаляется последний пост в теме (нужно ли обновлять последний пост в форуме) if ($topic['last_post'] == $post['public'] && $topic['last_poster_id'] == $post['user_id']) { $topic_extra_set = true; $topic_set = ForumSetLastPost($topic_id, $topic_set, true); } System::database()->Update('forum_topics', $topic_set, "`id`='{$topic_id}'"); // Обновляем форум $forum_posts = (int) $forum['posts'] - 1; if ($forum_posts < 0) { $forum_posts = 0; } $forum_set = "`posts`='{$forum_posts}'"; if ($topic_extra_set) { // Только если удален последний пост в теме $forum_set = ForumSetLastTopic($forum_id, $forum_set, true); } System::database()->Update('forums', $forum_set, "`id`= '{$forum_id}'"); // Очищаем кэш форума ForumCacheClear(); GO(Ufu('index.php?name=forum&op=showtopic&topic=' . $topic_id . $page, 'forum/topic{topic}' . $page_ufu . '.html')); }
function ForumModerationDeletePosts($posts, $begin) { global $forum_lang; if (!$begin) { return $forum_lang['delete_posts']; } $posts = System::database()->Select('forum_posts', '`id`=\'' . implode('\' or `id`=\'', $posts) . '\''); $deleted_posts = 0; $topic_id = null; $forum_id = null; $topic = null; $forum = null; foreach ($posts as $post) { $post_id = SafeEnv($post['id'], 11, int); if ($post['delete'] == '1') { // На удалении continue; } if (!isset($topic)) { // Тема $topic_id = SafeEnv($post['object'], 11, int); System::database()->Select('forum_topics', "`id`='{$topic_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_topic']); return false; } $topic = System::database()->FetchRow(); if ($topic['delete'] == '1') { // Тема на удалении System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_basket']); return false; } // Форум $forum_id = SafeEnv($topic['forum_id'], 11, int); System::database()->Select('forums', "`id`='{$forum_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_forum']); return false; } $forum = System::database()->FetchRow(); } $deleted_posts++; // Удаление поста if (System::config('forum/basket')) { // Удаляем сообщение в корзину $reason = ''; if (isset($_POST['text'])) { $reason = SafeEnv($_POST['text'], 255, str); } Moderation_Do_Basket_Post($post_id, $reason); } else { ForumAdminDeletePost($post_id); } } if ($deleted_posts > 0) { // Обновляем тему $topic_posts = (int) $topic['posts'] - $deleted_posts; if ($topic_posts < 0) { $topic_posts = 0; } $topic_set = "`posts`='{$topic_posts}'"; ForumSetLastPost($topic_id, $topic_set); // Обновляем форум $forum_posts = (int) $forum['posts'] - $deleted_posts; if ($forum_posts < 0) { $forum_posts = 0; } $forum_set = "`posts`='{$forum_posts}'"; ForumSetLastTopic($forum_id, $forum_set); } ForumCacheClear(); return true; }