Файл: admin/forum_forums.php
Строк: 696
<?php
/***************************************************************************
 *                             admin_forums.php
 *                            -------------------
 *      ����������: phpBB Group.
 *      ����������� ��� WAP: ������ ����� ( ��� ).
 *          2008 ���
 ***************************************************************************/
define('IN_PHPBB', 1);
if( !empty($setmodules) )
{
    $file = basename(__FILE__);
    $module['Forums']['Manage'] = $file;
    return;
}
$phpbb_root_path = "./../";
require($phpbb_root_path . 'extension.inc');
require('./pagestart.' . $phpEx);
include($phpbb_root_path . 'includes/functions_admin.'.$phpEx);
$forum_auth_ary = array(
    "auth_view" => AUTH_ALL, 
    "auth_read" => AUTH_ALL, 
    "auth_post" => AUTH_REG, 
    "auth_reply" => AUTH_REG, 
    "auth_edit" => AUTH_REG, 
    "auth_delete" => AUTH_REG, 
    "auth_sticky" => AUTH_MOD, 
    "auth_announce" => AUTH_MOD, 
    "auth_vote" => AUTH_REG, 
    "auth_pollcreate" => AUTH_REG
);
$forum_auth_ary['auth_attachments'] = AUTH_REG;
$forum_auth_ary['auth_download'] = AUTH_REG;
if( isset($HTTP_POST_VARS['mode']) || isset($HTTP_GET_VARS['mode']) )
{
    $mode = ( isset($HTTP_POST_VARS['mode']) ) ? $HTTP_POST_VARS['mode'] : $HTTP_GET_VARS['mode'];
    $mode = htmlspecialchars($mode);
}
else
{
    $mode = "";
}
function get_info($mode, $id)
{
    global $db;
    switch($mode)
    {
        case 'category':
            $table = CATEGORIES_TABLE;
            $idfield = 'cat_id';
            $namefield = 'cat_title';
            break;
        case 'forum':
            $table = FORUMS_TABLE;
            $idfield = 'forum_id';
            $namefield = 'forum_name';
            break;
        default:
            message_die(GENERAL_ERROR, "Wrong mode for generating select list", "", __LINE__, __FILE__);
            break;
    }
    $sql = "SELECT count(*) as total
        FROM $table";
    if( !$result = $db->sql_query($sql) )
    {
        message_die(GENERAL_ERROR, "Couldn't get Forum/Category information", "", __LINE__, __FILE__, $sql);
    }
    $count = $db->sql_fetchrow($result);
    $count = $count['total'];
    $sql = "SELECT *
        FROM $table
        WHERE $idfield = $id"; 
    if( !$result = $db->sql_query($sql) )
    {
        message_die(GENERAL_ERROR, "Couldn't get Forum/Category information", "", __LINE__, __FILE__, $sql);
    }
    if( $db->sql_numrows($result) != 1 )
    {
        message_die(GENERAL_ERROR, "Forum/Category doesn't exist or multiple forums/categories with ID $id", "", __LINE__, __FILE__);
    }
    $return = $db->sql_fetchrow($result);
    $return['number'] = $count;
    return $return;
}
function get_list($mode, $id, $select)
{
    global $db;
    switch($mode)
    {
        case 'category':
            $table = CATEGORIES_TABLE;
            $idfield = 'cat_id';
            $namefield = 'cat_title';
            break;
        case 'forum':
            $table = FORUMS_TABLE;
            $idfield = 'forum_id';
            $namefield = 'forum_name';
            break;
        default:
            message_die(GENERAL_ERROR, "Wrong mode for generating select list", "", __LINE__, __FILE__);
            break;
    }
    $sql = "SELECT *
        FROM $table";
    if( $select == 0 )
    {
        $sql .= " WHERE $idfield <> $id";
    }
    if( !$result = $db->sql_query($sql) )
    {
        message_die(GENERAL_ERROR, "Couldn't get list of Categories/Forums", "", __LINE__, __FILE__, $sql);
    }
    $cat_list = "";
    while( $row = $db->sql_fetchrow($result) )
    {
        $s = "";
        if ($row[$idfield] == $id)
        {
            $s = " selected="selected"";
        }
        $catlist .= "<option value="$row[$idfield]"$s>" . $row[$namefield] . "</option>n";
    }
    return($catlist);
}
function renumber_order($mode, $cat = 0)
{
    global $db;
    switch($mode)
    {
        case 'category':
            $table = CATEGORIES_TABLE;
            $idfield = 'cat_id';
            $orderfield = 'cat_order';
            $cat = 0;
            break;
        case 'forum':
            $table = FORUMS_TABLE;
            $idfield = 'forum_id';
            $orderfield = 'forum_order';
            $catfield = 'cat_id';
            break;
        default:
            message_die(GENERAL_ERROR, "Wrong mode for generating select list", "", __LINE__, __FILE__);
            break;
    }
    $sql = "SELECT * FROM $table";
    if( $cat != 0)
    {
        $sql .= " WHERE $catfield = $cat";
    }
    $sql .= " ORDER BY $orderfield ASC";
    if( !$result = $db->sql_query($sql) )
    {
        message_die(GENERAL_ERROR, "Couldn't get list of Categories", "", __LINE__, __FILE__, $sql);
    }
    $i = 10;
    $inc = 10;
    while( $row = $db->sql_fetchrow($result) )
    {
        $sql = "UPDATE $table
            SET $orderfield = $i
            WHERE $idfield = " . $row[$idfield];
        if( !$db->sql_query($sql) )
        {
            message_die(GENERAL_ERROR, "Couldn't update order fields", "", __LINE__, __FILE__, $sql);
        }
        $i += 10;
    }
}
if( isset($HTTP_POST_VARS['addforum']) || isset($HTTP_POST_VARS['addcategory']) )
{
    $mode = ( isset($HTTP_POST_VARS['addforum']) ) ? "addforum" : "addcat";
    if( $mode == "addforum" )
    {
        list($cat_id) = each($HTTP_POST_VARS['addforum']);
        $cat_id = intval($cat_id);
        $forumname = stripslashes($HTTP_POST_VARS['forumname'][$cat_id]);
    }
}
if( !empty($mode) ) 
{
    switch($mode)
    {
        case 'addforum':
        case 'editforum':
            if ($mode == 'editforum')
            {
                $l_title = $lang['Edit_forum'];
                $newmode = 'modforum';
                $buttonvalue = $lang['Update'];
                $forum_id = intval($HTTP_GET_VARS[POST_FORUM_URL]);
                $row = get_info('forum', $forum_id);
                $cat_id = $row['cat_id'];
                $forumname = $row['forum_name'];
                $forumdesc = $row['forum_desc'];
                $forumstatus = $row['forum_status'];
                                $forumthank = $row['forum_thank'];
                                $forum_attached_id = $row['attached_forum_id'];
                                
                $sql = "SELECT * from ". FORUMS_TABLE. " WHERE attached_forum_id = $forum_id";
                if( !$r = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't get list of children Forums", "", __LINE__, __FILE__, $sql);
                }
                if( $db->sql_numrows($r) > 0 )
                {
                    $not_attachable=1;
                    $has_subforums=1;
                    $template->assign_block_vars('switch_attached_no', array());
                    if (intval($HTTP_POST_VARS['detach_enabled'])) $detach_enabled = "checked="checked"";
                }
                else
                {
                    $sql = "SELECT * FROM ". FORUMS_TABLE. " WHERE attached_forum_id=-1 and cat_id= $cat_id and forum_id<>$forum_id ORDER BY forum_order";
                    if( !$result1 = $db->sql_query($sql) )
                    {
                        message_die(GENERAL_ERROR, "Couldn't get list of attachable Forums", "", __LINE__, __FILE__, $sql);
                    }
                    if( $db->sql_numrows($result1) > 0 )
                    {
                        $attachable_forums = '<option value = "-1"'.($forum_attached_id==-1?' selected':'').'> NOT ATTACHED TO ANY FORUM </a>';
                        while( $row1 = $db->sql_fetchrow($result1) )
                        {
                            $s='';
                            if ($forum_attached_id == $row1['forum_id'])
                            {
                                $s = " selected="selected"";
                            }
                            $attachable_forums .= '<option value="'.$row1[forum_id].$s.'">' . $row1[forum_name] . '</option>n';
                        }
                    }
                    else
                    {
                        $no_attachable_forums=1;
                    }
                }
                if( $row['prune_enable'] )
                {
                    $prune_enabled = "checked="checked"";
                    $sql = "SELECT *
                           FROM " . PRUNE_TABLE . "
                           WHERE forum_id = $forum_id";
                    if(!$pr_result = $db->sql_query($sql))
                    {
                         message_die(GENERAL_ERROR, "Auto-Prune: Couldn't read auto_prune table.", __LINE__, __FILE__);
                    }
                    $pr_row = $db->sql_fetchrow($pr_result);
                }
                else
                {
                    $prune_enabled = '';
                }
            }
            else
            {
                $l_title = $lang['Create_forum'];
                $newmode = 'createforum';
                $buttonvalue = $lang['Create_forum'];
                $forumdesc = '';
                $forumstatus = FORUM_UNLOCKED;
                $forumthank = FORUM_UNTHANKABLE;
                $forum_id = ''; 
                $prune_enabled = '';
                $sql = "SELECT * FROM ". FORUMS_TABLE. " WHERE attached_forum_id=-1 and cat_id= $cat_id ORDER BY forum_order";
                    if( !$result1 = $db->sql_query($sql) )
                    {
                        message_die(GENERAL_ERROR, "Couldn't get list of Categories/Forums", "", __LINE__, __FILE__, $sql);
                    }
                if( $db->sql_numrows($result1) > 0 )
                {
                    $attachable_forums = '<option value = "-1"'.(($forum_attached_id==-1 || !$forum_attached_id)?' selected':'').'> NOT ATTACHED TO ANY FORUM </a>';
                    while( $row1 = $db->sql_fetchrow($result1) )
                    {
                        if ($forum_attached_id == $row1['forum_id'])
                        {
                            $s = " selected="selected"";
                        }
                        $attachable_forums .= '<option value="'.$row1[forum_id].$s.'">' . $row1[forum_name] . '</option>n';
                    }
                }
                else
                {
                    $no_attachable_forums=1;
                }
            }
                        
                        $forum_attached_id = $attachable_forums;
            $catlist = get_list('category', $cat_id, TRUE);
            $forumstatus == ( FORUM_LOCKED ) ? $forumlocked = "selected="selected"" : $forumunlocked = "selected="selected"";
            $lang['Status_unlocked'] = isset($lang['Status_unlocked']) ? $lang['Status_unlocked'] : 'Unlocked';
            $lang['Status_locked'] = isset($lang['Status_locked']) ? $lang['Status_locked'] : 'Locked';
            
            $statuslist = "<option value="" . FORUM_UNLOCKED . "" $forumunlocked>" . $lang['Status_unlocked'] . "</option>n";
            $statuslist .= "<option value="" . FORUM_LOCKED . "" $forumlocked>" . $lang['Status_locked'] . "</option>n"; 
            $thank_yes = ($forumthank) ? 'checked="checked"' : '';
            $thank_no = (!$forumthank) ? 'checked="checked"' : '';
            
            if ($row['points_disabled'])
            {
                $yes = 'selected="selected"';
            }
            else
            {
                $no = 'selected="selected"';
            }
            $pointslist = '<option value="' . TRUE . '" ' . $yes . '>' . $lang['Yes'] . '</option>';
            $pointslist .= '<option value="' . FALSE . '" ' . $no . '>' . $lang['No'] . '</option>';
            $template->set_filenames(array(
                "body" => "admin/forum_edit_body.tpl")
            );
            $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode .'" /><input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" />';
                        
                        if ($not_attachable or $no_attachable_forums)
            {
                if ($has_subforums)
                {
                    $lang['Attached_Description'] = $lang['Has_attachments'].'<br>'. $lang['Attached_Description'];
                    $s_hidden_fields .='<input type="hidden" name="has_subforums" value="1" />';
                }
                if ($no_attachable_forums) $lang['Attached_Description'] = $lang['No_attach_forums'].'<br>'. $lang['Attached_Description'];
                $s_hidden_fields .='<input type="hidden" name="attached_forum_id" value="-1" />';
            }
            else
            {
                $template->assign_block_vars('switch_attached_yes', array());
            }
                $s_hidden_fields .='<input type="hidden" name="old_cat_id" value="'.$cat_id.'" />';
                
            $template->assign_vars(array(
                'S_FORUM_ACTION' => append_sid("forum_forums.$phpEx"),
                'S_HIDDEN_FIELDS' => $s_hidden_fields,
                'S_SUBMIT_VALUE' => $buttonvalue, 
                'S_CAT_LIST' => $catlist,
                'S_STATUS_LIST' => $statuslist,
                "THANK_ENABLE" => $thank_yes,
                "THANK_DISABLE" => $thank_no,
                'S_PRUNE_ENABLED' => $prune_enabled,
                'S_ATTACHED_FORUM_ID' => $forum_attached_id,
                                'S_DETACH_ENABLED'=> $detach_enabled,                                
                'S_POINTS_LIST' => $pointslist,
                'S_FORUM_POSTCOUNT' => ( isset($row) && isset($row['forum_postcount']) && ($row['forum_postcount'] == 0) ) ? '' : 'checked="checked"',
                                'L_ATTACHED_FORUM' => $lang['Attached_Field_Title'] ,
                                'L_ATTACHED_DESC' => $lang['Attached_Description'],
                                'L_DETACH_DESC'    => $lang['Detach_Description'],
                'L_FORUM_TITLE' => $l_title, 
                'L_FORUM_EXPLAIN' => $lang['Forum_edit_delete_explain'], 
                'L_FORUM_SETTINGS' => $lang['Forum_settings'], 
                'L_FORUM_NAME' => $lang['Forum_name'], 
                'L_CATEGORY' => $lang['Category'], 
                'L_FORUM_DESCRIPTION' => $lang['Forum_desc'],
                'L_FORUM_STATUS' => $lang['Forum_status'],
                'L_FORUM_THANK' => $lang['use_thank'],
                'L_YES' => $lang['Yes'],
                'L_NO' => $lang['No'],
                'L_AUTO_PRUNE' => $lang['Forum_pruning'],
                'L_ENABLED' => $lang['Enabled'],
                'L_PRUNE_DAYS' => $lang['prune_days'],
                'L_PRUNE_FREQ' => $lang['prune_freq'],
                'L_DAYS' => $lang['Days'],
                'L_POINTS_DISABLED' => sprintf($lang['Points_disabled'], $board_config['points_name']),
                'L_POSTCOUNT' => $lang['Forum_postcount'],
                'PRUNE_DAYS' => ( isset($pr_row['prune_days']) ) ? $pr_row['prune_days'] : 7,
                'PRUNE_FREQ' => ( isset($pr_row['prune_freq']) ) ? $pr_row['prune_freq'] : 1,
                'FORUM_NAME' => $forumname,
                'DESCRIPTION' => $forumdesc)
            );
            $template->pparse("body");
            break;
        case 'createforum':
            if( trim($HTTP_POST_VARS['forumname']) == "" )
            {
                message_die(GENERAL_ERROR, "Can't create a forum without a name");
            }
            $sql = "SELECT MAX(forum_order) AS max_order
                FROM " . FORUMS_TABLE . "
                WHERE cat_id = " . intval($HTTP_POST_VARS[POST_CAT_URL]);
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't get order number from forums table", "", __LINE__, __FILE__, $sql);
            }
            $row = $db->sql_fetchrow($result);
            $max_order = $row['max_order'];
            $next_order = $max_order + 10;
            
            $sql = "SELECT MAX(forum_id) AS max_id
                FROM " . FORUMS_TABLE;
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't get order number from forums table", "", __LINE__, __FILE__, $sql);
            }
            $row = $db->sql_fetchrow($result);
            $max_id = $row['max_id'];
            $next_id = $max_id + 1;
            $field_sql = "";
            $value_sql = "";
            while( list($field, $value) = each($forum_auth_ary) )
            {
                $field_sql .= ", $field";
                $value_sql .= ", $value";
            }
                                    
                        if (intval($HTTP_POST_VARS['old_cat_id']) != intval($HTTP_POST_VARS[POST_CAT_URL]))
            {
                   $HTTP_POST_VARS['attached_forum_id']=-1;
               }
               
            $sql = "INSERT INTO " . FORUMS_TABLE . " (forum_id, forum_name, cat_id, attached_forum_id, forum_desc, forum_order, forum_status, prune_enable, points_disabled, forum_postcount" . $field_sql . ", forum_thank)
                VALUES ('" . $next_id . "', '" . str_replace("'", "''", $HTTP_POST_VARS['forumname']) . "', " . intval($HTTP_POST_VARS['attached_forum_id']) . ", " . intval($HTTP_POST_VARS[POST_CAT_URL]) . ", '" . str_replace("'", "''", $HTTP_POST_VARS['forumdesc']) . "', $next_order, " . intval($HTTP_POST_VARS['forumstatus']) . ", " . intval($HTTP_POST_VARS['prune_enable']). ", " .  intval($HTTP_POST_VARS['points_disabled']) . ", " . intval($HTTP_POST_VARS['forum_postcount']) . $value_sql . ", " . intval($HTTP_POST_VARS['forumthank']) . ")";
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't insert row in forums table", "", __LINE__, __FILE__, $sql);
            }
            if( $HTTP_POST_VARS['prune_enable'] )
            {
                if( $HTTP_POST_VARS['prune_days'] == "" || $HTTP_POST_VARS['prune_freq'] == "")
                {
                    message_die(GENERAL_MESSAGE, $lang['Set_prune_data']);
                }
                $sql = "INSERT INTO " . PRUNE_TABLE . " (forum_id, prune_days, prune_freq)
                    VALUES('" . $next_id . "', " . intval($HTTP_POST_VARS['prune_days']) . ", " . intval($HTTP_POST_VARS['prune_freq']) . ")";
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't insert row in prune table", "", __LINE__, __FILE__, $sql);
                }
            }
            $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href="" . append_sid("forum_forums.$phpEx") . "">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href="" . append_sid("index.$phpEx?pane=forum") . "">", "</a>");
            message_die(GENERAL_MESSAGE, $message);
            break;
        case 'modforum':
            if( isset($HTTP_POST_VARS['prune_enable']))
            {
                if( $HTTP_POST_VARS['prune_enable'] != 1 )
                {
                    $HTTP_POST_VARS['prune_enable'] = 0;
                }
            }
                        if (isset($HTTP_POST_VARS['detach_enabled']) && isset($HTTP_POST_VARS['has_subforums']))
            {
                $sql = "UPDATE ". FORUMS_TABLE. " SET attached_forum_id=-1 WHERE attached_forum_id=" . intval($HTTP_POST_VARS[POST_FORUM_URL]);
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't detach subforums", "", __LINE__, __FILE__, $sql);
                }
            }
             if (intval($HTTP_POST_VARS['old_cat_id']) != intval($HTTP_POST_VARS[POST_CAT_URL]))
               {
                $HTTP_POST_VARS['attached_forum_id']=-1;
                if (isset($HTTP_POST_VARS['has_subforums']) && !isset($HTTP_POST_VARS['detach_enabled']))
                {
                    $sql = "UPDATE ". FORUMS_TABLE ." SET cat_id=". intval($HTTP_POST_VARS[POST_CAT_URL]) ." WHERE attached_forum_id=" . intval($HTTP_POST_VARS[POST_FORUM_URL]);
                    if( !$result = $db->sql_query($sql) )
                    {
                        message_die(GENERAL_ERROR, "Couldn't update subforums to new category", "", __LINE__, __FILE__, $sql);
                    }
                }
            }
            $sql = "UPDATE " . FORUMS_TABLE . "
                SET forum_name = '" . str_replace("'", "''", $HTTP_POST_VARS['forumname']) . "', attached_forum_id = " . intval($HTTP_POST_VARS['attached_forum_id']) . ", cat_id = " . intval($HTTP_POST_VARS[POST_CAT_URL]) . ", forum_desc = '" . str_replace("'", "''", $HTTP_POST_VARS['forumdesc']) . "', forum_status = " . intval($HTTP_POST_VARS['forumstatus']) . ", prune_enable = " . intval($HTTP_POST_VARS['prune_enable']) . ", forum_thank = " . intval($HTTP_POST_VARS['forumthank']) . ", points_disabled = " . intval($HTTP_POST_VARS['points_disabled']) . ", forum_postcount = " . intval($HTTP_POST_VARS['forum_postcount']) . "
                WHERE forum_id = " . intval($HTTP_POST_VARS[POST_FORUM_URL]);
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't update forum information", "", __LINE__, __FILE__, $sql);
            }
            if( $HTTP_POST_VARS['prune_enable'] == 1 )
            {
                if( $HTTP_POST_VARS['prune_days'] == "" || $HTTP_POST_VARS['prune_freq'] == "" )
                {
                    message_die(GENERAL_MESSAGE, $lang['Set_prune_data']);
                }
                $sql = "SELECT *
                    FROM " . PRUNE_TABLE . "
                    WHERE forum_id = " . intval($HTTP_POST_VARS[POST_FORUM_URL]);
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't get forum Prune Information","",__LINE__, __FILE__, $sql);
                }
                if( $db->sql_numrows($result) > 0 )
                {
                    $sql = "UPDATE " . PRUNE_TABLE . "
                        SET prune_days = " . intval($HTTP_POST_VARS['prune_days']) . ", prune_freq = " . intval($HTTP_POST_VARS['prune_freq']) . "
                         WHERE forum_id = " . intval($HTTP_POST_VARS[POST_FORUM_URL]);
                }
                else
                {
                    $sql = "INSERT INTO " . PRUNE_TABLE . " (sf_id, forum_id, prune_days, prune_freq)
                        VALUES(" . intval($HTTP_POST_VARS[POST_FORUM_URL]) . ", " . intval($HTTP_POST_VARS['prune_days']) . ", " . intval($HTTP_POST_VARS['prune_freq']) . ")";
                }
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't Update Forum Prune Information","",__LINE__, __FILE__, $sql);
                }
            }
            $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href="" . append_sid("forum_forums.$phpEx") . "">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href="" . append_sid("index.$phpEx?pane=forum") . "">", "</a>");
            message_die(GENERAL_MESSAGE, $message);
            break;
            
        case 'addcat':
            if( trim($HTTP_POST_VARS['categoryname']) == '')
            {
                message_die(GENERAL_ERROR, "Can't create a category without a name");
            }
            $sql = "SELECT MAX(cat_order) AS max_order
                FROM " . CATEGORIES_TABLE;
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't get order number from categories table", "", __LINE__, __FILE__, $sql);
            }
            $row = $db->sql_fetchrow($result);
            $max_order = $row['max_order'];
            $next_order = $max_order + 10;
            $sql = "INSERT INTO " . CATEGORIES_TABLE . " (cat_title, cat_order)
                VALUES ('" . str_replace("'", "''", $HTTP_POST_VARS['categoryname']) . "', $next_order)";
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't insert row in categories table", "", __LINE__, __FILE__, $sql);
            }
            $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href="" . append_sid("forum_forums.$phpEx") . "">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href="" . append_sid("index.$phpEx?pane=forum") . "">", "</a>");
            message_die(GENERAL_MESSAGE, $message);
            break;
            
        case 'editcat':
            $newmode = 'modcat';
            $buttonvalue = $lang['Update'];
            $cat_id = intval($HTTP_GET_VARS[POST_CAT_URL]);
            $row = get_info('category', $cat_id);
            $cat_title = $row['cat_title'];
            $template->set_filenames(array(
                "body" => "admin/category_edit_body.tpl")
            );
            $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode . '" /><input type="hidden" name="' . POST_CAT_URL . '" value="' . $cat_id . '" />';
            $template->assign_vars(array(
                'CAT_TITLE' => $cat_title,
                'L_EDIT_CATEGORY' => $lang['Edit_Category'], 
                'L_EDIT_CATEGORY_EXPLAIN' => $lang['Edit_Category_explain'], 
                'L_CATEGORY' => $lang['Category'], 
                'S_HIDDEN_FIELDS' => $s_hidden_fields, 
                'S_SUBMIT_VALUE' => $buttonvalue, 
                'S_FORUM_ACTION' => append_sid("forum_forums.$phpEx"))
            );
            $template->pparse("body");
            break;
        case 'modcat':
            $sql = "UPDATE " . CATEGORIES_TABLE . "
                SET cat_title = '" . str_replace("'", "''", $HTTP_POST_VARS['cat_title']) . "'
                WHERE cat_id = " . intval($HTTP_POST_VARS[POST_CAT_URL]);
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't update forum information", "", __LINE__, __FILE__, $sql);
            }
            $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href="" . append_sid("forum_forums.$phpEx") . "">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href="" . append_sid("index.$phpEx?pane=forum") . "">", "</a>");
            message_die(GENERAL_MESSAGE, $message);
            break;
            
        case 'deleteforum':
            $forum_id = intval($HTTP_GET_VARS[POST_FORUM_URL]);
            $select_to = '<select name="to_id">';
            $select_to .= "<option value="-1"$s>" . $lang['Delete_all_posts'] . "</option>n";
            $select_to .= get_list('forum', $forum_id, 0);
            $select_to .= '</select>';
            $buttonvalue = $lang['Move_and_Delete'];
            $newmode = 'movedelforum';
            $foruminfo = get_info('forum', $forum_id);
            $name = $foruminfo['forum_name'];
            $template->set_filenames(array(
                "body" => "admin/forum_delete_body.tpl")
            );
            $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode . '" /><input type="hidden" name="from_id" value="' . $forum_id . '" />';
            $template->assign_vars(array(
                'NAME' => $name, 
                'L_FORUM_DELETE' => $lang['Forum_delete'], 
                'L_FORUM_DELETE_EXPLAIN' => $lang['Forum_delete_explain'], 
                'L_MOVE_CONTENTS' => $lang['Move_contents'], 
                'L_FORUM_NAME' => $lang['Forum_name'], 
                "S_HIDDEN_FIELDS" => $s_hidden_fields,
                'S_FORUM_ACTION' => append_sid("forum_forums.$phpEx"), 
                'S_SELECT_TO' => $select_to,
                'S_SUBMIT_VALUE' => $buttonvalue)
            );
            $template->pparse("body");
            break;
        case 'movedelforum':
            $from_id = intval($HTTP_POST_VARS['from_id']);
            $to_id = intval($HTTP_POST_VARS['to_id']);
            $delete_old = intval($HTTP_POST_VARS['delete_old']);
            if($to_id == -1)
            {
                $sql = "SELECT v.vote_id 
                    FROM " . VOTE_DESC_TABLE . " v, " . TOPICS_TABLE . " t 
                    WHERE t.forum_id = $from_id 
                        AND v.topic_id = t.topic_id";
                if (!($result = $db->sql_query($sql)))
                {
                    message_die(GENERAL_ERROR, "Couldn't obtain list of vote ids", "", __LINE__, __FILE__, $sql);
                }
                if ($row = $db->sql_fetchrow($result))
                {
                    $vote_ids = '';
                    do
                    {
                        $vote_ids .= (($vote_ids != '') ? ', ' : '') . $row['vote_id'];
                    }
                    while ($row = $db->sql_fetchrow($result));
                    $sql = "DELETE FROM " . VOTE_DESC_TABLE . " 
                        WHERE vote_id IN ($vote_ids)";
                    $db->sql_query($sql);
                    $sql = "DELETE FROM " . VOTE_RESULTS_TABLE . " 
                        WHERE vote_id IN ($vote_ids)";
                    $db->sql_query($sql);
                    $sql = "DELETE FROM " . VOTE_USERS_TABLE . " 
                        WHERE vote_id IN ($vote_ids)";
                    $db->sql_query($sql);
                }
                $db->sql_freeresult($result);
                
                include($phpbb_root_path . "includes/prune.$phpEx");
                prune($from_id, 0, true); 
            }
            else
            {
                $sql = "SELECT *
                    FROM " . FORUMS_TABLE . "
                    WHERE forum_id IN ($from_id, $to_id)";
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't verify existence of forums", "", __LINE__, __FILE__, $sql);
                }
                if($db->sql_numrows($result) != 2)
                {
                    message_die(GENERAL_ERROR, "Ambiguous forum ID's", "", __LINE__, __FILE__);
                }
                $sql = "UPDATE " . TOPICS_TABLE . "
                    SET forum_id = $to_id
                    WHERE forum_id = $from_id";
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't move topics to other forum", "", __LINE__, __FILE__, $sql);
                }
                $sql = "UPDATE " . POSTS_TABLE . "
                    SET    forum_id = $to_id
                    WHERE forum_id = $from_id";
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't move posts to other forum", "", __LINE__, __FILE__, $sql);
                }
                sync('forum', $to_id);
            }
            $sql = "SELECT ug.user_id 
                FROM " . AUTH_ACCESS_TABLE . " a, " . USER_GROUP_TABLE . " ug 
                WHERE a.forum_id <> $from_id 
                    AND a.auth_mod = 1
                    AND ug.group_id = a.group_id";
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't obtain moderator list", "", __LINE__, __FILE__, $sql);
            }
            if ($row = $db->sql_fetchrow($result))
            {
                $user_ids = '';
                do
                {
                    $user_ids .= (($user_ids != '') ? ', ' : '' ) . $row['user_id'];
                }
                while ($row = $db->sql_fetchrow($result));
                $sql = "SELECT ug.user_id 
                    FROM " . AUTH_ACCESS_TABLE . " a, " . USER_GROUP_TABLE . " ug 
                    WHERE a.forum_id = $from_id 
                        AND a.auth_mod = 1 
                        AND ug.group_id = a.group_id
                        AND ug.user_id NOT IN ($user_ids)";
                if( !$result2 = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't obtain moderator list", "", __LINE__, __FILE__, $sql);
                }
                    
                if ($row = $db->sql_fetchrow($result2))
                {
                    $user_ids = '';
                    do
                    {
                        $user_ids .= (($user_ids != '') ? ', ' : '' ) . $row['user_id'];
                    }
                    while ($row = $db->sql_fetchrow($result2));
                    $sql = "UPDATE " . USERS_TABLE . " 
                        SET user_level = " . USER . " 
                        WHERE user_id IN ($user_ids) 
                            AND user_level <> " . ADMIN;
                    $db->sql_query($sql);
                }
                $db->sql_freeresult($result);
            }
            $db->sql_freeresult($result2);
            $sql = "DELETE FROM " . FORUMS_TABLE . "
                WHERE forum_id = $from_id";
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't delete forum", "", __LINE__, __FILE__, $sql);
            }
            
            $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . "
                WHERE forum_id = $from_id";
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't delete forum", "", __LINE__, __FILE__, $sql);
            }
            
            $sql = "DELETE FROM " . PRUNE_TABLE . "
                WHERE forum_id = $from_id";
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't delete forum prune information!", "", __LINE__, __FILE__, $sql);
            }
            $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href="" . append_sid("forum_forums.$phpEx") . "">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href="" . append_sid("index.$phpEx?pane=forum") . "">", "</a>");
            message_die(GENERAL_MESSAGE, $message);
            break;
            
        case 'deletecat':
            $cat_id = intval($HTTP_GET_VARS[POST_CAT_URL]);
            $buttonvalue = $lang['Move_and_Delete'];
            $newmode = 'movedelcat';
            $catinfo = get_info('category', $cat_id);
            $name = $catinfo['cat_title'];
            if ($catinfo['number'] == 1)
            {
                $sql = "SELECT count(*) as total
                    FROM ". FORUMS_TABLE;
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't get Forum count", "", __LINE__, __FILE__, $sql);
                }
                $count = $db->sql_fetchrow($result);
                $count = $count['total'];
                if ($count > 0)
                {
                    message_die(GENERAL_ERROR, $lang['Must_delete_forums']);
                }
                else
                {
                    $select_to = $lang['Nowhere_to_move'];
                }
            }
            else
            {
                $select_to = '<select name="to_id">';
                $select_to .= get_list('category', $cat_id, 0);
                $select_to .= '</select>';
            }
            $template->set_filenames(array(
                "body" => "admin/forum_delete_body.tpl")
            );
            $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode . '" /><input type="hidden" name="from_id" value="' . $cat_id . '" />';
            $template->assign_vars(array(
                'NAME' => $name, 
                'L_FORUM_DELETE' => $lang['Forum_delete'], 
                'L_FORUM_DELETE_EXPLAIN' => $lang['Forum_delete_explain'], 
                'L_MOVE_CONTENTS' => $lang['Move_contents'], 
                'L_FORUM_NAME' => $lang['Forum_name'], 
                
                'S_HIDDEN_FIELDS' => $s_hidden_fields,
                'S_FORUM_ACTION' => append_sid("forum_forums.$phpEx"), 
                'S_SELECT_TO' => $select_to,
                'S_SUBMIT_VALUE' => $buttonvalue)
            );
            $template->pparse("body");
            break;
        case 'movedelcat':
            $from_id = intval($HTTP_POST_VARS['from_id']);
            $to_id = intval($HTTP_POST_VARS['to_id']);
            if (!empty($to_id))
            {
                $sql = "SELECT *
                    FROM " . CATEGORIES_TABLE . "
                    WHERE cat_id IN ($from_id, $to_id)";
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't verify existence of categories", "", __LINE__, __FILE__, $sql);
                }
                if($db->sql_numrows($result) != 2)
                {
                    message_die(GENERAL_ERROR, "Ambiguous category ID's", "", __LINE__, __FILE__);
                }
                $sql = "UPDATE " . FORUMS_TABLE . "
                    SET cat_id = $to_id
                    WHERE cat_id = $from_id";
                if( !$result = $db->sql_query($sql) )
                {
                    message_die(GENERAL_ERROR, "Couldn't move forums to other category", "", __LINE__, __FILE__, $sql);
                }
            }
            $sql = "DELETE FROM " . CATEGORIES_TABLE ."
                WHERE cat_id = $from_id";
                
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't delete category", "", __LINE__, __FILE__, $sql);
            }
            $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href="" . append_sid("forum_forums.$phpEx") . "">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href="" . append_sid("index.$phpEx?pane=forum") . "">", "</a>");
            message_die(GENERAL_MESSAGE, $message);
            break;
        case 'forum_order':
            $move = intval($HTTP_GET_VARS['move']);
            $forum_id = intval($HTTP_GET_VARS[POST_FORUM_URL]);
            $forum_info = get_info('forum', $forum_id);
            $cat_id = $forum_info['cat_id'];
            $sql = "UPDATE " . FORUMS_TABLE . "
                SET forum_order = forum_order + $move
                WHERE forum_id = $forum_id";
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't change category order", "", __LINE__, __FILE__, $sql);
            }
            renumber_order('forum', $forum_info['cat_id']);
            $show_index = TRUE;
            break;
            
        case 'cat_order':
            $move = intval($HTTP_GET_VARS['move']);
            $cat_id = intval($HTTP_GET_VARS[POST_CAT_URL]);
            $sql = "UPDATE " . CATEGORIES_TABLE . "
                SET cat_order = cat_order + $move
                WHERE cat_id = $cat_id";
            if( !$result = $db->sql_query($sql) )
            {
                message_die(GENERAL_ERROR, "Couldn't change category order", "", __LINE__, __FILE__, $sql);
            }
            renumber_order('category');
            $show_index = TRUE;
            break;
        case 'forum_sync':
            sync('forum', intval($HTTP_GET_VARS[POST_FORUM_URL]));
            $show_index = TRUE;
            break;
        default:
            message_die(GENERAL_MESSAGE, $lang['No_mode']);
            break;
    }
    if ($show_index != TRUE)
    {
        include('./page_footer_admin.'.$phpEx);
        exit;
    }
}
$template->set_filenames(array(
    "body" => "admin/forum_admin_body.tpl")
);
$template->assign_vars(array(
    'S_FORUM_ACTION' => append_sid("forum_forums.$phpEx"),
    'L_FORUM_TITLE' => $lang['Forum_admin'], 
    'L_FORUM_EXPLAIN' => $lang['Forum_admin_explain'], 
    'L_CREATE_FORUM' => $lang['Create_forum'], 
    'L_CREATE_CATEGORY' => $lang['Create_category'], 
    'L_EDIT' => $lang['Edit'], 
    'L_DELETE' => $lang['Delete'], 
    'L_MOVE_UP' => $lang['Move_up'], 
    'L_MOVE_DOWN' => $lang['Move_down'], 
    'L_RESYNC' => $lang['Resync'])
);
$sql = "SELECT cat_id, cat_title, cat_order
    FROM " . CATEGORIES_TABLE . " 
    ORDER BY cat_order";
if( !$q_categories = $db->sql_query($sql) )
{
    message_die(GENERAL_ERROR, "Could not query categories list", "", __LINE__, __FILE__, $sql);
}
if( $total_categories = $db->sql_numrows($q_categories) )
{
    $category_rows = $db->sql_fetchrowset($q_categories);
    $sql = "SELECT *
        FROM " . FORUMS_TABLE . "
        ORDER BY cat_id, forum_order";
    if(!$q_forums = $db->sql_query($sql))
    {
        message_die(GENERAL_ERROR, "Could not query forums information", "", __LINE__, __FILE__, $sql);
    }
    if( $total_forums = $db->sql_numrows($q_forums) )
    {
        $forum_rows = $db->sql_fetchrowset($q_forums);
    }
    
        $subforum_rows=$forum_rows;
    $gen_cat = array();
    for($i = 0; $i < $total_categories; $i++)
    {
        $cat_id = $category_rows[$i]['cat_id'];
        $template->assign_block_vars("catrow", array( 
            'S_ADD_FORUM_SUBMIT' => "addforum[$cat_id]", 
            'S_ADD_FORUM_NAME' => "forumname[$cat_id]", 
            'CAT_ID' => $cat_id,
            'CAT_DESC' => $category_rows[$i]['cat_title'],
            'U_CAT_EDIT' => append_sid("forum_forums.$phpEx?mode=editcat&" . POST_CAT_URL . "=$cat_id"),
            'U_CAT_DELETE' => append_sid("forum_forums.$phpEx?mode=deletecat&" . POST_CAT_URL . "=$cat_id"),
            'U_CAT_MOVE_UP' => append_sid("forum_forums.$phpEx?mode=cat_order&move=-15&" . POST_CAT_URL . "=$cat_id"),
            'U_CAT_MOVE_DOWN' => append_sid("forum_forums.$phpEx?mode=cat_order&move=15&" . POST_CAT_URL . "=$cat_id"),
            'U_VIEWCAT' => append_sid($phpbb_root_path."forum.$phpEx?" . POST_CAT_URL . "=$cat_id"))
        );
        for($j = 0; $j < $total_forums; $j++)
        {
            $forum_id = $forum_rows[$j]['forum_id'];
            
            if ($forum_rows[$j]['cat_id'] == $cat_id)
            {
                                $sub_error=false;
                $do_template=false;
                if ($forum_rows[$j]['attached_forum_id'] !=-1)
                {
                $ok='';
                    for($k = 0; $k < $total_forums; $k++)
                    {
                        $subforum_id = $subforum_rows[$k]['forum_id'];
                        if ($subforum_id == $forum_rows[$j]['attached_forum_id'] && $forum_rows[$k]['attached_forum_id']==-1)
                        {
                            $ok=TRUE;//normal parent found
                        }
                    }
                    if ($forum_rows[$j]['attached_forum_id']==$forum_id) $ok=FALSE; //attached to itself
                    if ($forum_rows[$j]['attached_forum_id']==0) $ok=FALSE; //invalid parent
                    if (!$ok)
                    {
                        $do_template=TRUE;
                        $sub_error=true;
                    }
                }
                else
                {
                    $do_template=true;
                }//attached_forum_id'] ==-1
                if ($do_template)
                {
                $template->assign_block_vars("catrow.forumrow",    array(
                    'FORUM_NAME' => $forum_rows[$j]['forum_name'],
                    'FORUM_DESC' => $forum_rows[$j]['forum_desc'],
                    'ROW_COLOR' => $row_color,
                    'NUM_TOPICS' => $forum_rows[$j]['forum_topics'],
                    'NUM_POSTS' => $forum_rows[$j]['forum_posts'],
                    'U_VIEWFORUM' => append_sid($phpbb_root_path."viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id"),
                    'U_FORUM_EDIT' => append_sid("forum_forums.$phpEx?mode=editforum&" . POST_FORUM_URL . "=$forum_id"),
                    'U_FORUM_DELETE' => append_sid("forum_forums.$phpEx?mode=deleteforum&" . POST_FORUM_URL . "=$forum_id"),
                    'U_FORUM_MOVE_UP' => append_sid("forum_forums.$phpEx?mode=forum_order&move=-15&" . POST_FORUM_URL . "=$forum_id"),
                    'U_FORUM_MOVE_DOWN' => append_sid("forum_forums.$phpEx?mode=forum_order&move=15&" . POST_FORUM_URL . "=$forum_id"),
                    'U_FORUM_RESYNC' => append_sid("forum_forums.$phpEx?mode=forum_sync&" . POST_FORUM_URL . "=$forum_id"))
                );
                                        if ($sub_error)
                    {
                        $template->assign_block_vars ('catrow.forumrow.switch_error',array());
                    }
                    for($k = 0; $k < $total_forums; $k++)
                    {
                        $subforum_id = $subforum_rows[$k]['forum_id'];
                        if ($subforum_rows[$k]['attached_forum_id'] == $forum_id)
                        {
                            $template->assign_block_vars("catrow.forumrow",    array(
                                'FORUM_NAME' => $subforum_rows[$k]['forum_name'],
                                'FORUM_DESC' => $subforum_rows[$k]['forum_desc'],
                                'ROW_COLOR' => $row_color,
                                'NUM_TOPICS' => $subforum_rows[$k]['forum_topics'],
                                'NUM_POSTS' => $subforum_rows[$k]['forum_posts'],
                                'U_VIEWFORUM' => append_sid($phpbb_root_path."viewforum.$phpEx?" . POST_FORUM_URL . "=$subforum_id"),
                                'U_FORUM_EDIT' => append_sid("forum_forums.$phpEx?mode=editforum&" . POST_FORUM_URL . "=$subforum_id"),
                                'U_FORUM_DELETE' => append_sid("forum_forums.$phpEx?mode=deleteforum&" . POST_FORUM_URL . "=$subforum_id"),
                                'U_FORUM_MOVE_UP' => append_sid("forum_forums.$phpEx?mode=forum_order&move=-15&" . POST_FORUM_URL . "=$subforum_id"),
                                'U_FORUM_MOVE_DOWN' => append_sid("forum_forums.$phpEx?mode=forum_order&move=15&" . POST_FORUM_URL . "=$subforum_id"),
                                'U_FORUM_RESYNC' => append_sid("forum_forums.$phpEx?mode=forum_sync&" . POST_FORUM_URL . "=$subforum_id"))
                            );
                            $template->assign_block_vars ('catrow.forumrow.switch_attached_forum',array());
                        }
                    }
                }
            }
            
        } 
    } 
}
$template->pparse("body");
include('./page_footer_admin.'.$phpEx);
?>