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;
}
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'));
}
/**
 * Автоочистка корзины.
 * @global int $config
 */
function ForumBasketAutoclear()
{
    global $config;
    if ($config['forum']['basket']) {
        if ($config['forum']['clear_basket_day'] < 1) {
            $config['forum']['clear_basket_day'] = 1;
        }
        if ($config['forum']['del_auto_time'] < time()) {
            $clear_cache = false;
            System::database()->Select('config_groups', "`name`='forum'");
            $group = System::database()->FetchRow();
            $m_time = time() + Day2Sec;
            $m_group = SafeEnv($group['id'], 11, int);
            $delete_date = time() - Day2Sec * $config['forum']['clear_basket_day'];
            System::database()->Update('config', "`value`='{$m_time}'", "`name`='del_auto_time' and `group_id`='{$m_group}'");
            $mdb = System::database()->Select('forum_basket_topics', "`date`<'{$delete_date}'");
            if (count($mdb) > 0) {
                $clear_cache = true;
                foreach ($mdb as $d_topic) {
                    ForumAdminDeleteTopic(SafeDb($d_topic['obj_id'], 11, int));
                }
            }
            System::database()->Delete('forum_basket_topics', "`date`<'{$delete_date}'");
            $mdb = System::database()->Select('forum_basket_post', "`date`<'{$delete_date}'");
            if (count($mdb) > 0) {
                $clear_cache = true;
                foreach ($mdb as $d_post) {
                    ForumAdminDeletePost(SafeDb($d_post['obj_id'], 11, int));
                }
            }
            System::database()->Delete('forum_basket_post', "`date`<'{$delete_date}'");
            if ($clear_cache) {
                ForumCacheClear();
            }
        }
    }
}