home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April (DVD) / PCWorld_2008-04_DVD.iso / temadvd / phpbb / phpBB-2.0.22.exe / phpBB2 / admin / admin_forums.php < prev    next >
Encoding:
PHP Script  |  2006-12-19  |  30.2 KB  |  1,028 lines

  1. <?php
  2. /***************************************************************************
  3.  *                             admin_forums.php
  4.  *                            -------------------
  5.  *   begin                : Thursday, Jul 12, 2001
  6.  *   copyright            : (C) 2001 The phpBB Group
  7.  *   email                : support@phpbb.com
  8.  *
  9.  *   $Id: admin_forums.php,v 1.40.2.13 2006/03/09 21:55:09 grahamje Exp $
  10.  *
  11.  ***************************************************************************/
  12.  
  13. /***************************************************************************
  14.  *
  15.  *   This program is free software; you can redistribute it and/or modify
  16.  *   it under the terms of the GNU General Public License as published by
  17.  *   the Free Software Foundation; either version 2 of the License, or
  18.  *   (at your option) any later version.
  19.  *
  20.  ***************************************************************************/
  21.  
  22. define('IN_PHPBB', 1);
  23.  
  24. if( !empty($setmodules) )
  25. {
  26.     $file = basename(__FILE__);
  27.     $module['Forums']['Manage'] = $file;
  28.     return;
  29. }
  30.  
  31. //
  32. // Load default header
  33. //
  34. $phpbb_root_path = "./../";
  35. require($phpbb_root_path . 'extension.inc');
  36. require('./pagestart.' . $phpEx);
  37. include($phpbb_root_path . 'includes/functions_admin.'.$phpEx);
  38.  
  39. $forum_auth_ary = array(
  40.     "auth_view" => AUTH_ALL, 
  41.     "auth_read" => AUTH_ALL, 
  42.     "auth_post" => AUTH_REG, 
  43.     "auth_reply" => AUTH_REG, 
  44.     "auth_edit" => AUTH_REG, 
  45.     "auth_delete" => AUTH_REG, 
  46.     "auth_sticky" => AUTH_MOD, 
  47.     "auth_announce" => AUTH_MOD, 
  48.     "auth_vote" => AUTH_REG, 
  49.     "auth_pollcreate" => AUTH_REG
  50. );
  51.  
  52. //
  53. // Mode setting
  54. //
  55. if( isset($HTTP_POST_VARS['mode']) || isset($HTTP_GET_VARS['mode']) )
  56. {
  57.     $mode = ( isset($HTTP_POST_VARS['mode']) ) ? $HTTP_POST_VARS['mode'] : $HTTP_GET_VARS['mode'];
  58.     $mode = htmlspecialchars($mode);
  59. }
  60. else
  61. {
  62.     $mode = "";
  63. }
  64.  
  65. // ------------------
  66. // Begin function block
  67. //
  68. function get_info($mode, $id)
  69. {
  70.     global $db;
  71.  
  72.     switch($mode)
  73.     {
  74.         case 'category':
  75.             $table = CATEGORIES_TABLE;
  76.             $idfield = 'cat_id';
  77.             $namefield = 'cat_title';
  78.             break;
  79.  
  80.         case 'forum':
  81.             $table = FORUMS_TABLE;
  82.             $idfield = 'forum_id';
  83.             $namefield = 'forum_name';
  84.             break;
  85.  
  86.         default:
  87.             message_die(GENERAL_ERROR, "Wrong mode for generating select list", "", __LINE__, __FILE__);
  88.             break;
  89.     }
  90.     $sql = "SELECT count(*) as total
  91.         FROM $table";
  92.     if( !$result = $db->sql_query($sql) )
  93.     {
  94.         message_die(GENERAL_ERROR, "Couldn't get Forum/Category information", "", __LINE__, __FILE__, $sql);
  95.     }
  96.     $count = $db->sql_fetchrow($result);
  97.     $count = $count['total'];
  98.  
  99.     $sql = "SELECT *
  100.         FROM $table
  101.         WHERE $idfield = $id"; 
  102.  
  103.     if( !$result = $db->sql_query($sql) )
  104.     {
  105.         message_die(GENERAL_ERROR, "Couldn't get Forum/Category information", "", __LINE__, __FILE__, $sql);
  106.     }
  107.  
  108.     if( $db->sql_numrows($result) != 1 )
  109.     {
  110.         message_die(GENERAL_ERROR, "Forum/Category doesn't exist or multiple forums/categories with ID $id", "", __LINE__, __FILE__);
  111.     }
  112.  
  113.     $return = $db->sql_fetchrow($result);
  114.     $return['number'] = $count;
  115.     return $return;
  116. }
  117.  
  118. function get_list($mode, $id, $select)
  119. {
  120.     global $db;
  121.  
  122.     switch($mode)
  123.     {
  124.         case 'category':
  125.             $table = CATEGORIES_TABLE;
  126.             $idfield = 'cat_id';
  127.             $namefield = 'cat_title';
  128.             break;
  129.  
  130.         case 'forum':
  131.             $table = FORUMS_TABLE;
  132.             $idfield = 'forum_id';
  133.             $namefield = 'forum_name';
  134.             break;
  135.  
  136.         default:
  137.             message_die(GENERAL_ERROR, "Wrong mode for generating select list", "", __LINE__, __FILE__);
  138.             break;
  139.     }
  140.  
  141.     $sql = "SELECT *
  142.         FROM $table";
  143.     if( $select == 0 )
  144.     {
  145.         $sql .= " WHERE $idfield <> $id";
  146.     }
  147.  
  148.     if( !$result = $db->sql_query($sql) )
  149.     {
  150.         message_die(GENERAL_ERROR, "Couldn't get list of Categories/Forums", "", __LINE__, __FILE__, $sql);
  151.     }
  152.  
  153.     $cat_list = "";
  154.  
  155.     while( $row = $db->sql_fetchrow($result) )
  156.     {
  157.         $s = "";
  158.         if ($row[$idfield] == $id)
  159.         {
  160.             $s = " selected=\"selected\"";
  161.         }
  162.         $catlist .= "<option value=\"$row[$idfield]\"$s>" . $row[$namefield] . "</option>\n";
  163.     }
  164.  
  165.     return($catlist);
  166. }
  167.  
  168. function renumber_order($mode, $cat = 0)
  169. {
  170.     global $db;
  171.  
  172.     switch($mode)
  173.     {
  174.         case 'category':
  175.             $table = CATEGORIES_TABLE;
  176.             $idfield = 'cat_id';
  177.             $orderfield = 'cat_order';
  178.             $cat = 0;
  179.             break;
  180.  
  181.         case 'forum':
  182.             $table = FORUMS_TABLE;
  183.             $idfield = 'forum_id';
  184.             $orderfield = 'forum_order';
  185.             $catfield = 'cat_id';
  186.             break;
  187.  
  188.         default:
  189.             message_die(GENERAL_ERROR, "Wrong mode for generating select list", "", __LINE__, __FILE__);
  190.             break;
  191.     }
  192.  
  193.     $sql = "SELECT * FROM $table";
  194.     if( $cat != 0)
  195.     {
  196.         $sql .= " WHERE $catfield = $cat";
  197.     }
  198.     $sql .= " ORDER BY $orderfield ASC";
  199.  
  200.  
  201.     if( !$result = $db->sql_query($sql) )
  202.     {
  203.         message_die(GENERAL_ERROR, "Couldn't get list of Categories", "", __LINE__, __FILE__, $sql);
  204.     }
  205.  
  206.     $i = 10;
  207.     $inc = 10;
  208.  
  209.     while( $row = $db->sql_fetchrow($result) )
  210.     {
  211.         $sql = "UPDATE $table
  212.             SET $orderfield = $i
  213.             WHERE $idfield = " . $row[$idfield];
  214.         if( !$db->sql_query($sql) )
  215.         {
  216.             message_die(GENERAL_ERROR, "Couldn't update order fields", "", __LINE__, __FILE__, $sql);
  217.         }
  218.         $i += 10;
  219.     }
  220.  
  221. }
  222. //
  223. // End function block
  224. // ------------------
  225.  
  226. //
  227. // Begin program proper
  228. //
  229. if( isset($HTTP_POST_VARS['addforum']) || isset($HTTP_POST_VARS['addcategory']) )
  230. {
  231.     $mode = ( isset($HTTP_POST_VARS['addforum']) ) ? "addforum" : "addcat";
  232.  
  233.     if( $mode == "addforum" )
  234.     {
  235.         list($cat_id) = each($HTTP_POST_VARS['addforum']);
  236.         $cat_id = intval($cat_id);
  237.         // 
  238.         // stripslashes needs to be run on this because slashes are added when the forum name is posted
  239.         //
  240.         $forumname = stripslashes($HTTP_POST_VARS['forumname'][$cat_id]);
  241.     }
  242. }
  243.  
  244. if( !empty($mode) ) 
  245. {
  246.     switch($mode)
  247.     {
  248.         case 'addforum':
  249.         case 'editforum':
  250.             //
  251.             // Show form to create/modify a forum
  252.             //
  253.             if ($mode == 'editforum')
  254.             {
  255.                 // $newmode determines if we are going to INSERT or UPDATE after posting?
  256.  
  257.                 $l_title = $lang['Edit_forum'];
  258.                 $newmode = 'modforum';
  259.                 $buttonvalue = $lang['Update'];
  260.  
  261.                 $forum_id = intval($HTTP_GET_VARS[POST_FORUM_URL]);
  262.  
  263.                 $row = get_info('forum', $forum_id);
  264.  
  265.                 $cat_id = $row['cat_id'];
  266.                 $forumname = $row['forum_name'];
  267.                 $forumdesc = $row['forum_desc'];
  268.                 $forumstatus = $row['forum_status'];
  269.  
  270.                 //
  271.                 // start forum prune stuff.
  272.                 //
  273.                 if( $row['prune_enable'] )
  274.                 {
  275.                     $prune_enabled = "checked=\"checked\"";
  276.                     $sql = "SELECT *
  277.                            FROM " . PRUNE_TABLE . "
  278.                            WHERE forum_id = $forum_id";
  279.                     if(!$pr_result = $db->sql_query($sql))
  280.                     {
  281.                          message_die(GENERAL_ERROR, "Auto-Prune: Couldn't read auto_prune table.", __LINE__, __FILE__);
  282.                     }
  283.  
  284.                     $pr_row = $db->sql_fetchrow($pr_result);
  285.                 }
  286.                 else
  287.                 {
  288.                     $prune_enabled = '';
  289.                 }
  290.             }
  291.             else
  292.             {
  293.                 $l_title = $lang['Create_forum'];
  294.                 $newmode = 'createforum';
  295.                 $buttonvalue = $lang['Create_forum'];
  296.  
  297.                 $forumdesc = '';
  298.                 $forumstatus = FORUM_UNLOCKED;
  299.                 $forum_id = ''; 
  300.                 $prune_enabled = '';
  301.             }
  302.  
  303.             $catlist = get_list('category', $cat_id, TRUE);
  304.  
  305.             $forumstatus == ( FORUM_LOCKED ) ? $forumlocked = "selected=\"selected\"" : $forumunlocked = "selected=\"selected\"";
  306.             
  307.             // These two options ($lang['Status_unlocked'] and $lang['Status_locked']) seem to be missing from
  308.             // the language files.
  309.             $lang['Status_unlocked'] = isset($lang['Status_unlocked']) ? $lang['Status_unlocked'] : 'Unlocked';
  310.             $lang['Status_locked'] = isset($lang['Status_locked']) ? $lang['Status_locked'] : 'Locked';
  311.             
  312.             $statuslist = "<option value=\"" . FORUM_UNLOCKED . "\" $forumunlocked>" . $lang['Status_unlocked'] . "</option>\n";
  313.             $statuslist .= "<option value=\"" . FORUM_LOCKED . "\" $forumlocked>" . $lang['Status_locked'] . "</option>\n"; 
  314.  
  315.             $template->set_filenames(array(
  316.                 "body" => "admin/forum_edit_body.tpl")
  317.             );
  318.  
  319.             $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode .'" /><input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" />';
  320.  
  321.             $template->assign_vars(array(
  322.                 'S_FORUM_ACTION' => append_sid("admin_forums.$phpEx"),
  323.                 'S_HIDDEN_FIELDS' => $s_hidden_fields,
  324.                 'S_SUBMIT_VALUE' => $buttonvalue, 
  325.                 'S_CAT_LIST' => $catlist,
  326.                 'S_STATUS_LIST' => $statuslist,
  327.                 'S_PRUNE_ENABLED' => $prune_enabled,
  328.  
  329.                 'L_FORUM_TITLE' => $l_title, 
  330.                 'L_FORUM_EXPLAIN' => $lang['Forum_edit_delete_explain'], 
  331.                 'L_FORUM_SETTINGS' => $lang['Forum_settings'], 
  332.                 'L_FORUM_NAME' => $lang['Forum_name'], 
  333.                 'L_CATEGORY' => $lang['Category'], 
  334.                 'L_FORUM_DESCRIPTION' => $lang['Forum_desc'],
  335.                 'L_FORUM_STATUS' => $lang['Forum_status'],
  336.                 'L_AUTO_PRUNE' => $lang['Forum_pruning'],
  337.                 'L_ENABLED' => $lang['Enabled'],
  338.                 'L_PRUNE_DAYS' => $lang['prune_days'],
  339.                 'L_PRUNE_FREQ' => $lang['prune_freq'],
  340.                 'L_DAYS' => $lang['Days'],
  341.  
  342.                 'PRUNE_DAYS' => ( isset($pr_row['prune_days']) ) ? $pr_row['prune_days'] : 7,
  343.                 'PRUNE_FREQ' => ( isset($pr_row['prune_freq']) ) ? $pr_row['prune_freq'] : 1,
  344.                 'FORUM_NAME' => $forumname,
  345.                 'DESCRIPTION' => $forumdesc)
  346.             );
  347.             $template->pparse("body");
  348.             break;
  349.  
  350.         case 'createforum':
  351.             //
  352.             // Create a forum in the DB
  353.             //
  354.             if( trim($HTTP_POST_VARS['forumname']) == "" )
  355.             {
  356.                 message_die(GENERAL_ERROR, "Can't create a forum without a name");
  357.             }
  358.  
  359.             $sql = "SELECT MAX(forum_order) AS max_order
  360.                 FROM " . FORUMS_TABLE . "
  361.                 WHERE cat_id = " . intval($HTTP_POST_VARS[POST_CAT_URL]);
  362.             if( !$result = $db->sql_query($sql) )
  363.             {
  364.                 message_die(GENERAL_ERROR, "Couldn't get order number from forums table", "", __LINE__, __FILE__, $sql);
  365.             }
  366.             $row = $db->sql_fetchrow($result);
  367.  
  368.             $max_order = $row['max_order'];
  369.             $next_order = $max_order + 10;
  370.             
  371.             $sql = "SELECT MAX(forum_id) AS max_id
  372.                 FROM " . FORUMS_TABLE;
  373.             if( !$result = $db->sql_query($sql) )
  374.             {
  375.                 message_die(GENERAL_ERROR, "Couldn't get order number from forums table", "", __LINE__, __FILE__, $sql);
  376.             }
  377.             $row = $db->sql_fetchrow($result);
  378.  
  379.             $max_id = $row['max_id'];
  380.             $next_id = $max_id + 1;
  381.  
  382.             //
  383.             // Default permissions of public :: 
  384.             //
  385.             $field_sql = "";
  386.             $value_sql = "";
  387.             while( list($field, $value) = each($forum_auth_ary) )
  388.             {
  389.                 $field_sql .= ", $field";
  390.                 $value_sql .= ", $value";
  391.  
  392.             }
  393.  
  394.             // There is no problem having duplicate forum names so we won't check for it.
  395.             $sql = "INSERT INTO " . FORUMS_TABLE . " (forum_id, forum_name, cat_id, forum_desc, forum_order, forum_status, prune_enable" . $field_sql . ")
  396.                 VALUES ('" . $next_id . "', '" . str_replace("\'", "''", $HTTP_POST_VARS['forumname']) . "', " . 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']) . $value_sql . ")";
  397.             if( !$result = $db->sql_query($sql) )
  398.             {
  399.                 message_die(GENERAL_ERROR, "Couldn't insert row in forums table", "", __LINE__, __FILE__, $sql);
  400.             }
  401.  
  402.             if( $HTTP_POST_VARS['prune_enable'] )
  403.             {
  404.  
  405.                 if( $HTTP_POST_VARS['prune_days'] == "" || $HTTP_POST_VARS['prune_freq'] == "")
  406.                 {
  407.                     message_die(GENERAL_MESSAGE, $lang['Set_prune_data']);
  408.                 }
  409.  
  410.                 $sql = "INSERT INTO " . PRUNE_TABLE . " (forum_id, prune_days, prune_freq)
  411.                     VALUES('" . $next_id . "', " . intval($HTTP_POST_VARS['prune_days']) . ", " . intval($HTTP_POST_VARS['prune_freq']) . ")";
  412.                 if( !$result = $db->sql_query($sql) )
  413.                 {
  414.                     message_die(GENERAL_ERROR, "Couldn't insert row in prune table", "", __LINE__, __FILE__, $sql);
  415.                 }
  416.             }
  417.  
  418.             $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href=\"" . append_sid("admin_forums.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
  419.  
  420.             message_die(GENERAL_MESSAGE, $message);
  421.  
  422.             break;
  423.  
  424.         case 'modforum':
  425.             // Modify a forum in the DB
  426.             if( isset($HTTP_POST_VARS['prune_enable']))
  427.             {
  428.                 if( $HTTP_POST_VARS['prune_enable'] != 1 )
  429.                 {
  430.                     $HTTP_POST_VARS['prune_enable'] = 0;
  431.                 }
  432.             }
  433.  
  434.             $sql = "UPDATE " . FORUMS_TABLE . "
  435.                 SET forum_name = '" . str_replace("\'", "''", $HTTP_POST_VARS['forumname']) . "', 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']) . "
  436.                 WHERE forum_id = " . intval($HTTP_POST_VARS[POST_FORUM_URL]);
  437.             if( !$result = $db->sql_query($sql) )
  438.             {
  439.                 message_die(GENERAL_ERROR, "Couldn't update forum information", "", __LINE__, __FILE__, $sql);
  440.             }
  441.  
  442.             if( $HTTP_POST_VARS['prune_enable'] == 1 )
  443.             {
  444.                 if( $HTTP_POST_VARS['prune_days'] == "" || $HTTP_POST_VARS['prune_freq'] == "" )
  445.                 {
  446.                     message_die(GENERAL_MESSAGE, $lang['Set_prune_data']);
  447.                 }
  448.  
  449.                 $sql = "SELECT *
  450.                     FROM " . PRUNE_TABLE . "
  451.                     WHERE forum_id = " . intval($HTTP_POST_VARS[POST_FORUM_URL]);
  452.                 if( !$result = $db->sql_query($sql) )
  453.                 {
  454.                     message_die(GENERAL_ERROR, "Couldn't get forum Prune Information","",__LINE__, __FILE__, $sql);
  455.                 }
  456.  
  457.                 if( $db->sql_numrows($result) > 0 )
  458.                 {
  459.                     $sql = "UPDATE " . PRUNE_TABLE . "
  460.                         SET    prune_days = " . intval($HTTP_POST_VARS['prune_days']) . ",    prune_freq = " . intval($HTTP_POST_VARS['prune_freq']) . "
  461.                          WHERE forum_id = " . intval($HTTP_POST_VARS[POST_FORUM_URL]);
  462.                 }
  463.                 else
  464.                 {
  465.                     $sql = "INSERT INTO " . PRUNE_TABLE . " (forum_id, prune_days, prune_freq)
  466.                         VALUES(" . intval($HTTP_POST_VARS[POST_FORUM_URL]) . ", " . intval($HTTP_POST_VARS['prune_days']) . ", " . intval($HTTP_POST_VARS['prune_freq']) . ")";
  467.                 }
  468.  
  469.                 if( !$result = $db->sql_query($sql) )
  470.                 {
  471.                     message_die(GENERAL_ERROR, "Couldn't Update Forum Prune Information","",__LINE__, __FILE__, $sql);
  472.                 }
  473.             }
  474.  
  475.             $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href=\"" . append_sid("admin_forums.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
  476.  
  477.             message_die(GENERAL_MESSAGE, $message);
  478.  
  479.             break;
  480.             
  481.         case 'addcat':
  482.             // Create a category in the DB
  483.             if( trim($HTTP_POST_VARS['categoryname']) == '')
  484.             {
  485.                 message_die(GENERAL_ERROR, "Can't create a category without a name");
  486.             }
  487.  
  488.             $sql = "SELECT MAX(cat_order) AS max_order
  489.                 FROM " . CATEGORIES_TABLE;
  490.             if( !$result = $db->sql_query($sql) )
  491.             {
  492.                 message_die(GENERAL_ERROR, "Couldn't get order number from categories table", "", __LINE__, __FILE__, $sql);
  493.             }
  494.             $row = $db->sql_fetchrow($result);
  495.  
  496.             $max_order = $row['max_order'];
  497.             $next_order = $max_order + 10;
  498.  
  499.             //
  500.             // There is no problem having duplicate forum names so we won't check for it.
  501.             //
  502.             $sql = "INSERT INTO " . CATEGORIES_TABLE . " (cat_title, cat_order)
  503.                 VALUES ('" . str_replace("\'", "''", $HTTP_POST_VARS['categoryname']) . "', $next_order)";
  504.             if( !$result = $db->sql_query($sql) )
  505.             {
  506.                 message_die(GENERAL_ERROR, "Couldn't insert row in categories table", "", __LINE__, __FILE__, $sql);
  507.             }
  508.  
  509.             $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href=\"" . append_sid("admin_forums.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
  510.  
  511.             message_die(GENERAL_MESSAGE, $message);
  512.  
  513.             break;
  514.             
  515.         case 'editcat':
  516.             //
  517.             // Show form to edit a category
  518.             //
  519.             $newmode = 'modcat';
  520.             $buttonvalue = $lang['Update'];
  521.  
  522.             $cat_id = intval($HTTP_GET_VARS[POST_CAT_URL]);
  523.  
  524.             $row = get_info('category', $cat_id);
  525.             $cat_title = $row['cat_title'];
  526.  
  527.             $template->set_filenames(array(
  528.                 "body" => "admin/category_edit_body.tpl")
  529.             );
  530.  
  531.             $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode . '" /><input type="hidden" name="' . POST_CAT_URL . '" value="' . $cat_id . '" />';
  532.  
  533.             $template->assign_vars(array(
  534.                 'CAT_TITLE' => $cat_title,
  535.  
  536.                 'L_EDIT_CATEGORY' => $lang['Edit_Category'], 
  537.                 'L_EDIT_CATEGORY_EXPLAIN' => $lang['Edit_Category_explain'], 
  538.                 'L_CATEGORY' => $lang['Category'], 
  539.  
  540.                 'S_HIDDEN_FIELDS' => $s_hidden_fields, 
  541.                 'S_SUBMIT_VALUE' => $buttonvalue, 
  542.                 'S_FORUM_ACTION' => append_sid("admin_forums.$phpEx"))
  543.             );
  544.  
  545.             $template->pparse("body");
  546.             break;
  547.  
  548.         case 'modcat':
  549.             // Modify a category in the DB
  550.             $sql = "UPDATE " . CATEGORIES_TABLE . "
  551.                 SET cat_title = '" . str_replace("\'", "''", $HTTP_POST_VARS['cat_title']) . "'
  552.                 WHERE cat_id = " . intval($HTTP_POST_VARS[POST_CAT_URL]);
  553.             if( !$result = $db->sql_query($sql) )
  554.             {
  555.                 message_die(GENERAL_ERROR, "Couldn't update forum information", "", __LINE__, __FILE__, $sql);
  556.             }
  557.  
  558.             $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href=\"" . append_sid("admin_forums.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
  559.  
  560.             message_die(GENERAL_MESSAGE, $message);
  561.  
  562.             break;
  563.             
  564.         case 'deleteforum':
  565.             // Show form to delete a forum
  566.             $forum_id = intval($HTTP_GET_VARS[POST_FORUM_URL]);
  567.  
  568.             $select_to = '<select name="to_id">';
  569.             $select_to .= "<option value=\"-1\"$s>" . $lang['Delete_all_posts'] . "</option>\n";
  570.             $select_to .= get_list('forum', $forum_id, 0);
  571.             $select_to .= '</select>';
  572.  
  573.             $buttonvalue = $lang['Move_and_Delete'];
  574.  
  575.             $newmode = 'movedelforum';
  576.  
  577.             $foruminfo = get_info('forum', $forum_id);
  578.             $name = $foruminfo['forum_name'];
  579.  
  580.             $template->set_filenames(array(
  581.                 "body" => "admin/forum_delete_body.tpl")
  582.             );
  583.  
  584.             $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode . '" /><input type="hidden" name="from_id" value="' . $forum_id . '" />';
  585.  
  586.             $template->assign_vars(array(
  587.                 'NAME' => $name, 
  588.  
  589.                 'L_FORUM_DELETE' => $lang['Forum_delete'], 
  590.                 'L_FORUM_DELETE_EXPLAIN' => $lang['Forum_delete_explain'], 
  591.                 'L_MOVE_CONTENTS' => $lang['Move_contents'], 
  592.                 'L_FORUM_NAME' => $lang['Forum_name'], 
  593.  
  594.                 "S_HIDDEN_FIELDS" => $s_hidden_fields,
  595.                 'S_FORUM_ACTION' => append_sid("admin_forums.$phpEx"), 
  596.                 'S_SELECT_TO' => $select_to,
  597.                 'S_SUBMIT_VALUE' => $buttonvalue)
  598.             );
  599.  
  600.             $template->pparse("body");
  601.             break;
  602.  
  603.         case 'movedelforum':
  604.             //
  605.             // Move or delete a forum in the DB
  606.             //
  607.             $from_id = intval($HTTP_POST_VARS['from_id']);
  608.             $to_id = intval($HTTP_POST_VARS['to_id']);
  609.             $delete_old = intval($HTTP_POST_VARS['delete_old']);
  610.  
  611.             // Either delete or move all posts in a forum
  612.             if($to_id == -1)
  613.             {
  614.                 // Delete polls in this forum
  615.                 $sql = "SELECT v.vote_id 
  616.                     FROM " . VOTE_DESC_TABLE . " v, " . TOPICS_TABLE . " t 
  617.                     WHERE t.forum_id = $from_id 
  618.                         AND v.topic_id = t.topic_id";
  619.                 if (!($result = $db->sql_query($sql)))
  620.                 {
  621.                     message_die(GENERAL_ERROR, "Couldn't obtain list of vote ids", "", __LINE__, __FILE__, $sql);
  622.                 }
  623.  
  624.                 if ($row = $db->sql_fetchrow($result))
  625.                 {
  626.                     $vote_ids = '';
  627.                     do
  628.                     {
  629.                         $vote_ids = (($vote_ids != '') ? ', ' : '') . $row['vote_id'];
  630.                     }
  631.                     while ($row = $db->sql_fetchrow($result));
  632.  
  633.                     $sql = "DELETE FROM " . VOTE_DESC_TABLE . " 
  634.                         WHERE vote_id IN ($vote_ids)";
  635.                     $db->sql_query($sql);
  636.  
  637.                     $sql = "DELETE FROM " . VOTE_RESULTS_TABLE . " 
  638.                         WHERE vote_id IN ($vote_ids)";
  639.                     $db->sql_query($sql);
  640.  
  641.                     $sql = "DELETE FROM " . VOTE_USERS_TABLE . " 
  642.                         WHERE vote_id IN ($vote_ids)";
  643.                     $db->sql_query($sql);
  644.                 }
  645.                 $db->sql_freeresult($result);
  646.                 
  647.                 include($phpbb_root_path . "includes/prune.$phpEx");
  648.                 prune($from_id, 0, true); // Delete everything from forum
  649.             }
  650.             else
  651.             {
  652.                 $sql = "SELECT *
  653.                     FROM " . FORUMS_TABLE . "
  654.                     WHERE forum_id IN ($from_id, $to_id)";
  655.                 if( !$result = $db->sql_query($sql) )
  656.                 {
  657.                     message_die(GENERAL_ERROR, "Couldn't verify existence of forums", "", __LINE__, __FILE__, $sql);
  658.                 }
  659.  
  660.                 if($db->sql_numrows($result) != 2)
  661.                 {
  662.                     message_die(GENERAL_ERROR, "Ambiguous forum ID's", "", __LINE__, __FILE__);
  663.                 }
  664.                 $sql = "UPDATE " . TOPICS_TABLE . "
  665.                     SET forum_id = $to_id
  666.                     WHERE forum_id = $from_id";
  667.                 if( !$result = $db->sql_query($sql) )
  668.                 {
  669.                     message_die(GENERAL_ERROR, "Couldn't move topics to other forum", "", __LINE__, __FILE__, $sql);
  670.                 }
  671.                 $sql = "UPDATE " . POSTS_TABLE . "
  672.                     SET    forum_id = $to_id
  673.                     WHERE forum_id = $from_id";
  674.                 if( !$result = $db->sql_query($sql) )
  675.                 {
  676.                     message_die(GENERAL_ERROR, "Couldn't move posts to other forum", "", __LINE__, __FILE__, $sql);
  677.                 }
  678.                 sync('forum', $to_id);
  679.             }
  680.  
  681.             // Alter Mod level if appropriate - 2.0.4
  682.             $sql = "SELECT ug.user_id 
  683.                 FROM " . AUTH_ACCESS_TABLE . " a, " . USER_GROUP_TABLE . " ug 
  684.                 WHERE a.forum_id <> $from_id 
  685.                     AND a.auth_mod = 1
  686.                     AND ug.group_id = a.group_id";
  687.             if( !$result = $db->sql_query($sql) )
  688.             {
  689.                 message_die(GENERAL_ERROR, "Couldn't obtain moderator list", "", __LINE__, __FILE__, $sql);
  690.             }
  691.  
  692.             if ($row = $db->sql_fetchrow($result))
  693.             {
  694.                 $user_ids = '';
  695.                 do
  696.                 {
  697.                     $user_ids .= (($user_ids != '') ? ', ' : '' ) . $row['user_id'];
  698.                 }
  699.                 while ($row = $db->sql_fetchrow($result));
  700.  
  701.                 $sql = "SELECT ug.user_id 
  702.                     FROM " . AUTH_ACCESS_TABLE . " a, " . USER_GROUP_TABLE . " ug 
  703.                     WHERE a.forum_id = $from_id 
  704.                         AND a.auth_mod = 1 
  705.                         AND ug.group_id = a.group_id
  706.                         AND ug.user_id NOT IN ($user_ids)";
  707.                 if( !$result2 = $db->sql_query($sql) )
  708.                 {
  709.                     message_die(GENERAL_ERROR, "Couldn't obtain moderator list", "", __LINE__, __FILE__, $sql);
  710.                 }
  711.                     
  712.                 if ($row = $db->sql_fetchrow($result2))
  713.                 {
  714.                     $user_ids = '';
  715.                     do
  716.                     {
  717.                         $user_ids .= (($user_ids != '') ? ', ' : '' ) . $row['user_id'];
  718.                     }
  719.                     while ($row = $db->sql_fetchrow($result2));
  720.  
  721.                     $sql = "UPDATE " . USERS_TABLE . " 
  722.                         SET user_level = " . USER . " 
  723.                         WHERE user_id IN ($user_ids) 
  724.                             AND user_level <> " . ADMIN;
  725.                     $db->sql_query($sql);
  726.                 }
  727.                 $db->sql_freeresult($result);
  728.  
  729.             }
  730.             $db->sql_freeresult($result2);
  731.  
  732.             $sql = "DELETE FROM " . FORUMS_TABLE . "
  733.                 WHERE forum_id = $from_id";
  734.             if( !$result = $db->sql_query($sql) )
  735.             {
  736.                 message_die(GENERAL_ERROR, "Couldn't delete forum", "", __LINE__, __FILE__, $sql);
  737.             }
  738.             
  739.             $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . "
  740.                 WHERE forum_id = $from_id";
  741.             if( !$result = $db->sql_query($sql) )
  742.             {
  743.                 message_die(GENERAL_ERROR, "Couldn't delete forum", "", __LINE__, __FILE__, $sql);
  744.             }
  745.             
  746.             $sql = "DELETE FROM " . PRUNE_TABLE . "
  747.                 WHERE forum_id = $from_id";
  748.             if( !$result = $db->sql_query($sql) )
  749.             {
  750.                 message_die(GENERAL_ERROR, "Couldn't delete forum prune information!", "", __LINE__, __FILE__, $sql);
  751.             }
  752.  
  753.             $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href=\"" . append_sid("admin_forums.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
  754.  
  755.             message_die(GENERAL_MESSAGE, $message);
  756.  
  757.             break;
  758.             
  759.         case 'deletecat':
  760.             //
  761.             // Show form to delete a category
  762.             //
  763.             $cat_id = intval($HTTP_GET_VARS[POST_CAT_URL]);
  764.  
  765.             $buttonvalue = $lang['Move_and_Delete'];
  766.             $newmode = 'movedelcat';
  767.             $catinfo = get_info('category', $cat_id);
  768.             $name = $catinfo['cat_title'];
  769.  
  770.             if ($catinfo['number'] == 1)
  771.             {
  772.                 $sql = "SELECT count(*) as total
  773.                     FROM ". FORUMS_TABLE;
  774.                 if( !$result = $db->sql_query($sql) )
  775.                 {
  776.                     message_die(GENERAL_ERROR, "Couldn't get Forum count", "", __LINE__, __FILE__, $sql);
  777.                 }
  778.                 $count = $db->sql_fetchrow($result);
  779.                 $count = $count['total'];
  780.  
  781.                 if ($count > 0)
  782.                 {
  783.                     message_die(GENERAL_ERROR, $lang['Must_delete_forums']);
  784.                 }
  785.                 else
  786.                 {
  787.                     $select_to = $lang['Nowhere_to_move'];
  788.                 }
  789.             }
  790.             else
  791.             {
  792.                 $select_to = '<select name="to_id">';
  793.                 $select_to .= get_list('category', $cat_id, 0);
  794.                 $select_to .= '</select>';
  795.             }
  796.  
  797.             $template->set_filenames(array(
  798.                 "body" => "admin/forum_delete_body.tpl")
  799.             );
  800.  
  801.             $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode . '" /><input type="hidden" name="from_id" value="' . $cat_id . '" />';
  802.  
  803.             $template->assign_vars(array(
  804.                 'NAME' => $name, 
  805.  
  806.                 'L_FORUM_DELETE' => $lang['Forum_delete'], 
  807.                 'L_FORUM_DELETE_EXPLAIN' => $lang['Forum_delete_explain'], 
  808.                 'L_MOVE_CONTENTS' => $lang['Move_contents'], 
  809.                 'L_FORUM_NAME' => $lang['Forum_name'], 
  810.                 
  811.                 'S_HIDDEN_FIELDS' => $s_hidden_fields,
  812.                 'S_FORUM_ACTION' => append_sid("admin_forums.$phpEx"), 
  813.                 'S_SELECT_TO' => $select_to,
  814.                 'S_SUBMIT_VALUE' => $buttonvalue)
  815.             );
  816.  
  817.             $template->pparse("body");
  818.             break;
  819.  
  820.         case 'movedelcat':
  821.             //
  822.             // Move or delete a category in the DB
  823.             //
  824.             $from_id = intval($HTTP_POST_VARS['from_id']);
  825.             $to_id = intval($HTTP_POST_VARS['to_id']);
  826.  
  827.             if (!empty($to_id))
  828.             {
  829.                 $sql = "SELECT *
  830.                     FROM " . CATEGORIES_TABLE . "
  831.                     WHERE cat_id IN ($from_id, $to_id)";
  832.                 if( !$result = $db->sql_query($sql) )
  833.                 {
  834.                     message_die(GENERAL_ERROR, "Couldn't verify existence of categories", "", __LINE__, __FILE__, $sql);
  835.                 }
  836.                 if($db->sql_numrows($result) != 2)
  837.                 {
  838.                     message_die(GENERAL_ERROR, "Ambiguous category ID's", "", __LINE__, __FILE__);
  839.                 }
  840.  
  841.                 $sql = "UPDATE " . FORUMS_TABLE . "
  842.                     SET cat_id = $to_id
  843.                     WHERE cat_id = $from_id";
  844.                 if( !$result = $db->sql_query($sql) )
  845.                 {
  846.                     message_die(GENERAL_ERROR, "Couldn't move forums to other category", "", __LINE__, __FILE__, $sql);
  847.                 }
  848.             }
  849.  
  850.             $sql = "DELETE FROM " . CATEGORIES_TABLE ."
  851.                 WHERE cat_id = $from_id";
  852.                 
  853.             if( !$result = $db->sql_query($sql) )
  854.             {
  855.                 message_die(GENERAL_ERROR, "Couldn't delete category", "", __LINE__, __FILE__, $sql);
  856.             }
  857.  
  858.             $message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href=\"" . append_sid("admin_forums.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
  859.  
  860.             message_die(GENERAL_MESSAGE, $message);
  861.  
  862.             break;
  863.  
  864.         case 'forum_order':
  865.             //
  866.             // Change order of forums in the DB
  867.             //
  868.             $move = intval($HTTP_GET_VARS['move']);
  869.             $forum_id = intval($HTTP_GET_VARS[POST_FORUM_URL]);
  870.  
  871.             $forum_info = get_info('forum', $forum_id);
  872.  
  873.             $cat_id = $forum_info['cat_id'];
  874.  
  875.             $sql = "UPDATE " . FORUMS_TABLE . "
  876.                 SET forum_order = forum_order + $move
  877.                 WHERE forum_id = $forum_id";
  878.             if( !$result = $db->sql_query($sql) )
  879.             {
  880.                 message_die(GENERAL_ERROR, "Couldn't change category order", "", __LINE__, __FILE__, $sql);
  881.             }
  882.  
  883.             renumber_order('forum', $forum_info['cat_id']);
  884.             $show_index = TRUE;
  885.  
  886.             break;
  887.             
  888.         case 'cat_order':
  889.             //
  890.             // Change order of categories in the DB
  891.             //
  892.             $move = intval($HTTP_GET_VARS['move']);
  893.             $cat_id = intval($HTTP_GET_VARS[POST_CAT_URL]);
  894.  
  895.             $sql = "UPDATE " . CATEGORIES_TABLE . "
  896.                 SET cat_order = cat_order + $move
  897.                 WHERE cat_id = $cat_id";
  898.             if( !$result = $db->sql_query($sql) )
  899.             {
  900.                 message_die(GENERAL_ERROR, "Couldn't change category order", "", __LINE__, __FILE__, $sql);
  901.             }
  902.  
  903.             renumber_order('category');
  904.             $show_index = TRUE;
  905.  
  906.             break;
  907.  
  908.         case 'forum_sync':
  909.             sync('forum', intval($HTTP_GET_VARS[POST_FORUM_URL]));
  910.             $show_index = TRUE;
  911.  
  912.             break;
  913.  
  914.         default:
  915.             message_die(GENERAL_MESSAGE, $lang['No_mode']);
  916.             break;
  917.     }
  918.  
  919.     if ($show_index != TRUE)
  920.     {
  921.         include('./page_footer_admin.'.$phpEx);
  922.         exit;
  923.     }
  924. }
  925.  
  926. //
  927. // Start page proper
  928. //
  929. $template->set_filenames(array(
  930.     "body" => "admin/forum_admin_body.tpl")
  931. );
  932.  
  933. $template->assign_vars(array(
  934.     'S_FORUM_ACTION' => append_sid("admin_forums.$phpEx"),
  935.     'L_FORUM_TITLE' => $lang['Forum_admin'], 
  936.     'L_FORUM_EXPLAIN' => $lang['Forum_admin_explain'], 
  937.     'L_CREATE_FORUM' => $lang['Create_forum'], 
  938.     'L_CREATE_CATEGORY' => $lang['Create_category'], 
  939.     'L_EDIT' => $lang['Edit'], 
  940.     'L_DELETE' => $lang['Delete'], 
  941.     'L_MOVE_UP' => $lang['Move_up'], 
  942.     'L_MOVE_DOWN' => $lang['Move_down'], 
  943.     'L_RESYNC' => $lang['Resync'])
  944. );
  945.  
  946. $sql = "SELECT cat_id, cat_title, cat_order
  947.     FROM " . CATEGORIES_TABLE . "
  948.     ORDER BY cat_order";
  949. if( !$q_categories = $db->sql_query($sql) )
  950. {
  951.     message_die(GENERAL_ERROR, "Could not query categories list", "", __LINE__, __FILE__, $sql);
  952. }
  953.  
  954. if( $total_categories = $db->sql_numrows($q_categories) )
  955. {
  956.     $category_rows = $db->sql_fetchrowset($q_categories);
  957.  
  958.     $sql = "SELECT *
  959.         FROM " . FORUMS_TABLE . "
  960.         ORDER BY cat_id, forum_order";
  961.     if(!$q_forums = $db->sql_query($sql))
  962.     {
  963.         message_die(GENERAL_ERROR, "Could not query forums information", "", __LINE__, __FILE__, $sql);
  964.     }
  965.  
  966.     if( $total_forums = $db->sql_numrows($q_forums) )
  967.     {
  968.         $forum_rows = $db->sql_fetchrowset($q_forums);
  969.     }
  970.  
  971.     //
  972.     // Okay, let's build the index
  973.     //
  974.     $gen_cat = array();
  975.  
  976.     for($i = 0; $i < $total_categories; $i++)
  977.     {
  978.         $cat_id = $category_rows[$i]['cat_id'];
  979.  
  980.         $template->assign_block_vars("catrow", array( 
  981.             'S_ADD_FORUM_SUBMIT' => "addforum[$cat_id]", 
  982.             'S_ADD_FORUM_NAME' => "forumname[$cat_id]", 
  983.  
  984.             'CAT_ID' => $cat_id,
  985.             'CAT_DESC' => $category_rows[$i]['cat_title'],
  986.  
  987.             'U_CAT_EDIT' => append_sid("admin_forums.$phpEx?mode=editcat&" . POST_CAT_URL . "=$cat_id"),
  988.             'U_CAT_DELETE' => append_sid("admin_forums.$phpEx?mode=deletecat&" . POST_CAT_URL . "=$cat_id"),
  989.             'U_CAT_MOVE_UP' => append_sid("admin_forums.$phpEx?mode=cat_order&move=-15&" . POST_CAT_URL . "=$cat_id"),
  990.             'U_CAT_MOVE_DOWN' => append_sid("admin_forums.$phpEx?mode=cat_order&move=15&" . POST_CAT_URL . "=$cat_id"),
  991.             'U_VIEWCAT' => append_sid($phpbb_root_path."index.$phpEx?" . POST_CAT_URL . "=$cat_id"))
  992.         );
  993.  
  994.         for($j = 0; $j < $total_forums; $j++)
  995.         {
  996.             $forum_id = $forum_rows[$j]['forum_id'];
  997.             
  998.             if ($forum_rows[$j]['cat_id'] == $cat_id)
  999.             {
  1000.  
  1001.                 $template->assign_block_vars("catrow.forumrow",    array(
  1002.                     'FORUM_NAME' => $forum_rows[$j]['forum_name'],
  1003.                     'FORUM_DESC' => $forum_rows[$j]['forum_desc'],
  1004.                     'ROW_COLOR' => $row_color,
  1005.                     'NUM_TOPICS' => $forum_rows[$j]['forum_topics'],
  1006.                     'NUM_POSTS' => $forum_rows[$j]['forum_posts'],
  1007.  
  1008.                     'U_VIEWFORUM' => append_sid($phpbb_root_path."viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id"),
  1009.                     'U_FORUM_EDIT' => append_sid("admin_forums.$phpEx?mode=editforum&" . POST_FORUM_URL . "=$forum_id"),
  1010.                     'U_FORUM_DELETE' => append_sid("admin_forums.$phpEx?mode=deleteforum&" . POST_FORUM_URL . "=$forum_id"),
  1011.                     'U_FORUM_MOVE_UP' => append_sid("admin_forums.$phpEx?mode=forum_order&move=-15&" . POST_FORUM_URL . "=$forum_id"),
  1012.                     'U_FORUM_MOVE_DOWN' => append_sid("admin_forums.$phpEx?mode=forum_order&move=15&" . POST_FORUM_URL . "=$forum_id"),
  1013.                     'U_FORUM_RESYNC' => append_sid("admin_forums.$phpEx?mode=forum_sync&" . POST_FORUM_URL . "=$forum_id"))
  1014.                 );
  1015.  
  1016.             }// if ... forumid == catid
  1017.             
  1018.         } // for ... forums
  1019.  
  1020.     } // for ... categories
  1021.  
  1022. }// if ... total_categories
  1023.  
  1024. $template->pparse("body");
  1025.  
  1026. include('./page_footer_admin.'.$phpEx);
  1027.  
  1028. ?>