acp_forums::delete_forum PHP Method

delete_forum() public method

Remove complete forum
public delete_forum ( $forum_id, $action_posts = 'delete', $action_subforums = 'delete', $posts_to_id, $subforums_to_id )
    function delete_forum($forum_id, $action_posts = 'delete', $action_subforums = 'delete', $posts_to_id = 0, $subforums_to_id = 0)
    {
        global $db, $user, $cache, $phpbb_log;
        $forum_data = $this->get_forum_info($forum_id);
        $errors = array();
        $log_action_posts = $log_action_forums = $posts_to_name = $subforums_to_name = '';
        $forum_ids = array($forum_id);
        if ($action_posts == 'delete') {
            $log_action_posts = 'POSTS';
            $errors = array_merge($errors, $this->delete_forum_content($forum_id));
        } else {
            if ($action_posts == 'move') {
                if (!$posts_to_id) {
                    $errors[] = $user->lang['NO_DESTINATION_FORUM'];
                } else {
                    $log_action_posts = 'MOVE_POSTS';
                    $sql = 'SELECT forum_name
					FROM ' . FORUMS_TABLE . '
					WHERE forum_id = ' . $posts_to_id;
                    $result = $db->sql_query($sql);
                    $row = $db->sql_fetchrow($result);
                    $db->sql_freeresult($result);
                    if (!$row) {
                        $errors[] = $user->lang['NO_FORUM'];
                    } else {
                        $posts_to_name = $row['forum_name'];
                        $errors = array_merge($errors, $this->move_forum_content($forum_id, $posts_to_id));
                    }
                }
            }
        }
        if (sizeof($errors)) {
            return $errors;
        }
        if ($action_subforums == 'delete') {
            $log_action_forums = 'FORUMS';
            $rows = get_forum_branch($forum_id, 'children', 'descending', false);
            foreach ($rows as $row) {
                $forum_ids[] = $row['forum_id'];
                $errors = array_merge($errors, $this->delete_forum_content($row['forum_id']));
            }
            if (sizeof($errors)) {
                return $errors;
            }
            $diff = sizeof($forum_ids) * 2;
            $sql = 'DELETE FROM ' . FORUMS_TABLE . '
				WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
            $db->sql_query($sql);
            $sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . '
				WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
            $db->sql_query($sql);
            $sql = 'DELETE FROM ' . ACL_USERS_TABLE . '
				WHERE ' . $db->sql_in_set('forum_id', $forum_ids);
            $db->sql_query($sql);
        } else {
            if ($action_subforums == 'move') {
                if (!$subforums_to_id) {
                    $errors[] = $user->lang['NO_DESTINATION_FORUM'];
                } else {
                    $log_action_forums = 'MOVE_FORUMS';
                    $sql = 'SELECT forum_name
					FROM ' . FORUMS_TABLE . '
					WHERE forum_id = ' . $subforums_to_id;
                    $result = $db->sql_query($sql);
                    $row = $db->sql_fetchrow($result);
                    $db->sql_freeresult($result);
                    if (!$row) {
                        $errors[] = $user->lang['NO_FORUM'];
                    } else {
                        $subforums_to_name = $row['forum_name'];
                        $sql = 'SELECT forum_id
						FROM ' . FORUMS_TABLE . "\n\t\t\t\t\t\tWHERE parent_id = {$forum_id}";
                        $result = $db->sql_query($sql);
                        while ($row = $db->sql_fetchrow($result)) {
                            $this->move_forum($row['forum_id'], $subforums_to_id);
                        }
                        $db->sql_freeresult($result);
                        // Grab new forum data for correct tree updating later
                        $forum_data = $this->get_forum_info($forum_id);
                        $sql = 'UPDATE ' . FORUMS_TABLE . "\n\t\t\t\t\t\tSET parent_id = {$subforums_to_id}\n\t\t\t\t\t\tWHERE parent_id = {$forum_id}";
                        $db->sql_query($sql);
                        $diff = 2;
                        $sql = 'DELETE FROM ' . FORUMS_TABLE . "\n\t\t\t\t\t\tWHERE forum_id = {$forum_id}";
                        $db->sql_query($sql);
                        $sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . "\n\t\t\t\t\t\tWHERE forum_id = {$forum_id}";
                        $db->sql_query($sql);
                        $sql = 'DELETE FROM ' . ACL_USERS_TABLE . "\n\t\t\t\t\t\tWHERE forum_id = {$forum_id}";
                        $db->sql_query($sql);
                    }
                }
                if (sizeof($errors)) {
                    return $errors;
                }
            } else {
                $diff = 2;
                $sql = 'DELETE FROM ' . FORUMS_TABLE . "\n\t\t\t\tWHERE forum_id = {$forum_id}";
                $db->sql_query($sql);
                $sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . "\n\t\t\t\tWHERE forum_id = {$forum_id}";
                $db->sql_query($sql);
                $sql = 'DELETE FROM ' . ACL_USERS_TABLE . "\n\t\t\t\tWHERE forum_id = {$forum_id}";
                $db->sql_query($sql);
            }
        }
        // Resync tree
        $sql = 'UPDATE ' . FORUMS_TABLE . "\n\t\t\tSET right_id = right_id - {$diff}\n\t\t\tWHERE left_id < {$forum_data['right_id']} AND right_id > {$forum_data['right_id']}";
        $db->sql_query($sql);
        $sql = 'UPDATE ' . FORUMS_TABLE . "\n\t\t\tSET left_id = left_id - {$diff}, right_id = right_id - {$diff}\n\t\t\tWHERE left_id > {$forum_data['right_id']}";
        $db->sql_query($sql);
        // Delete forum ids from extension groups table
        $sql = 'SELECT group_id, allowed_forums
			FROM ' . EXTENSION_GROUPS_TABLE;
        $result = $db->sql_query($sql);
        while ($row = $db->sql_fetchrow($result)) {
            if (!$row['allowed_forums']) {
                continue;
            }
            $allowed_forums = unserialize(trim($row['allowed_forums']));
            $allowed_forums = array_diff($allowed_forums, $forum_ids);
            $sql = 'UPDATE ' . EXTENSION_GROUPS_TABLE . "\n\t\t\t\tSET allowed_forums = '" . (sizeof($allowed_forums) ? serialize($allowed_forums) : '') . "'\n\t\t\t\tWHERE group_id = {$row['group_id']}";
            $db->sql_query($sql);
        }
        $db->sql_freeresult($result);
        $cache->destroy('_extensions');
        $log_action = implode('_', array($log_action_posts, $log_action_forums));
        switch ($log_action) {
            case 'MOVE_POSTS_MOVE_FORUMS':
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_FORUM_DEL_MOVE_POSTS_MOVE_FORUMS', false, array($posts_to_name, $subforums_to_name, $forum_data['forum_name']));
                break;
            case 'MOVE_POSTS_FORUMS':
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_FORUM_DEL_MOVE_POSTS_FORUMS', false, array($posts_to_name, $forum_data['forum_name']));
                break;
            case 'POSTS_MOVE_FORUMS':
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_FORUM_DEL_POSTS_MOVE_FORUMS', false, array($subforums_to_name, $forum_data['forum_name']));
                break;
            case '_MOVE_FORUMS':
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_FORUM_DEL_MOVE_FORUMS', false, array($subforums_to_name, $forum_data['forum_name']));
                break;
            case 'MOVE_POSTS_':
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_FORUM_DEL_MOVE_POSTS', false, array($posts_to_name, $forum_data['forum_name']));
                break;
            case 'POSTS_FORUMS':
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_FORUM_DEL_POSTS_FORUMS', false, array($forum_data['forum_name']));
                break;
            case '_FORUMS':
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_FORUM_DEL_FORUMS', false, array($forum_data['forum_name']));
                break;
            case 'POSTS_':
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_FORUM_DEL_POSTS', false, array($forum_data['forum_name']));
                break;
            default:
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_FORUM_DEL_FORUM', false, array($forum_data['forum_name']));
                break;
        }
        return $errors;
    }

Usage Example

 public function update_forum_names()
 {
     if (!class_exists('acp_forums')) {
         include $this->phpbb_root_path . 'includes/acp/acp_forums.' . $this->php_ext;
     }
     $acp_forum = new \acp_forums();
     $errors = $acp_forum->delete_forum($this->config['sitemaker_parent_forum_id']);
     if (!sizeof($errors) && !empty($this->config['primetime_parent_forum_id'])) {
         $this->db->sql_query('UPDATE ' . FORUMS_TABLE . " SET forum_name='phpBB Sitemaker Extensions' WHERE forum_id = " . (int) $this->config['primetime_parent_forum_id']);
     }
 }
All Usage Examples Of acp_forums::delete_forum