]> git.vanrenterghem.biz Git - www.vanrenterghem.biz.git/blob - phpBB2/admin/admin_forums.php
Baseline
[www.vanrenterghem.biz.git] / phpBB2 / admin / admin_forums.php
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  ***************************************************************************/
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  ***************************************************************************/
22 define('IN_PHPBB', 1);
24 if( !empty($setmodules) )
25 {
26         $file = basename(__FILE__);
27         $module['Forums']['Manage'] = $file;
28         return;
29 }
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);
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 );
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 }
65 // ------------------
66 // Begin function block
67 //
68 function get_info($mode, $id)
69 {
70         global $db;
72         switch($mode)
73         {
74                 case 'category':
75                         $table = CATEGORIES_TABLE;
76                         $idfield = 'cat_id';
77                         $namefield = 'cat_title';
78                         break;
80                 case 'forum':
81                         $table = FORUMS_TABLE;
82                         $idfield = 'forum_id';
83                         $namefield = 'forum_name';
84                         break;
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'];
99         $sql = "SELECT *
100                 FROM $table
101                 WHERE $idfield = $id"; 
103         if( !$result = $db->sql_query($sql) )
104         {
105                 message_die(GENERAL_ERROR, "Couldn't get Forum/Category information", "", __LINE__, __FILE__, $sql);
106         }
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         }
113         $return = $db->sql_fetchrow($result);
114         $return['number'] = $count;
115         return $return;
118 function get_list($mode, $id, $select)
120         global $db;
122         switch($mode)
123         {
124                 case 'category':
125                         $table = CATEGORIES_TABLE;
126                         $idfield = 'cat_id';
127                         $namefield = 'cat_title';
128                         break;
130                 case 'forum':
131                         $table = FORUMS_TABLE;
132                         $idfield = 'forum_id';
133                         $namefield = 'forum_name';
134                         break;
136                 default:
137                         message_die(GENERAL_ERROR, "Wrong mode for generating select list", "", __LINE__, __FILE__);
138                         break;
139         }
141         $sql = "SELECT *
142                 FROM $table";
143         if( $select == 0 )
144         {
145                 $sql .= " WHERE $idfield <> $id";
146         }
148         if( !$result = $db->sql_query($sql) )
149         {
150                 message_die(GENERAL_ERROR, "Couldn't get list of Categories/Forums", "", __LINE__, __FILE__, $sql);
151         }
153         $cat_list = "";
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         }
165         return($catlist);
168 function renumber_order($mode, $cat = 0)
170         global $db;
172         switch($mode)
173         {
174                 case 'category':
175                         $table = CATEGORIES_TABLE;
176                         $idfield = 'cat_id';
177                         $orderfield = 'cat_order';
178                         $cat = 0;
179                         break;
181                 case 'forum':
182                         $table = FORUMS_TABLE;
183                         $idfield = 'forum_id';
184                         $orderfield = 'forum_order';
185                         $catfield = 'cat_id';
186                         break;
188                 default:
189                         message_die(GENERAL_ERROR, "Wrong mode for generating select list", "", __LINE__, __FILE__);
190                         break;
191         }
193         $sql = "SELECT * FROM $table";
194         if( $cat != 0)
195         {
196                 $sql .= " WHERE $catfield = $cat";
197         }
198         $sql .= " ORDER BY $orderfield ASC";
201         if( !$result = $db->sql_query($sql) )
202         {
203                 message_die(GENERAL_ERROR, "Couldn't get list of Categories", "", __LINE__, __FILE__, $sql);
204         }
206         $i = 10;
207         $inc = 10;
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         }
222 //
223 // End function block
224 // ------------------
226 //
227 // Begin program proper
228 //
229 if( isset($HTTP_POST_VARS['addforum']) || isset($HTTP_POST_VARS['addcategory']) )
231         $mode = ( isset($HTTP_POST_VARS['addforum']) ) ? "addforum" : "addcat";
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         }
244 if( !empty($mode) ) 
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?
257                                 $l_title = $lang['Edit_forum'];
258                                 $newmode = 'modforum';
259                                 $buttonvalue = $lang['Update'];
261                                 $forum_id = intval($HTTP_GET_VARS[POST_FORUM_URL]);
263                                 $row = get_info('forum', $forum_id);
265                                 $cat_id = $row['cat_id'];
266                                 $forumname = $row['forum_name'];
267                                 $forumdesc = $row['forum_desc'];
268                                 $forumstatus = $row['forum_status'];
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                                 }
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'];
297                                 $forumdesc = '';
298                                 $forumstatus = FORUM_UNLOCKED;
299                                 $forum_id = ''; 
300                                 $prune_enabled = '';
301                         }
303                         $catlist = get_list('category', $cat_id, TRUE);
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"; 
315                         $template->set_filenames(array(
316                                 "body" => "admin/forum_edit_body.tpl")
317                         );
319                         $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode .'" /><input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" />';
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,
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'],
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;
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                         }
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);
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);
379                         $max_id = $row['max_id'];
380                         $next_id = $max_id + 1;
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";
392                         }
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                         }
402                         if( $HTTP_POST_VARS['prune_enable'] )
403                         {
405                                 if( $HTTP_POST_VARS['prune_days'] == "" || $HTTP_POST_VARS['prune_freq'] == "")
406                                 {
407                                         message_die(GENERAL_MESSAGE, $lang['Set_prune_data']);
408                                 }
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                         }
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>");
420                         message_die(GENERAL_MESSAGE, $message);
422                         break;
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                         }
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                         }
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                                 }
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                                 }
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                                 }
469                                 if( !$result = $db->sql_query($sql) )
470                                 {
471                                         message_die(GENERAL_ERROR, "Couldn't Update Forum Prune Information","",__LINE__, __FILE__, $sql);
472                                 }
473                         }
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>");
477                         message_die(GENERAL_MESSAGE, $message);
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                         }
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);
496                         $max_order = $row['max_order'];
497                         $next_order = $max_order + 10;
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                         }
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>");
511                         message_die(GENERAL_MESSAGE, $message);
513                         break;
514                         
515                 case 'editcat':
516                         //
517                         // Show form to edit a category
518                         //
519                         $newmode = 'modcat';
520                         $buttonvalue = $lang['Update'];
522                         $cat_id = intval($HTTP_GET_VARS[POST_CAT_URL]);
524                         $row = get_info('category', $cat_id);
525                         $cat_title = $row['cat_title'];
527                         $template->set_filenames(array(
528                                 "body" => "admin/category_edit_body.tpl")
529                         );
531                         $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode . '" /><input type="hidden" name="' . POST_CAT_URL . '" value="' . $cat_id . '" />';
533                         $template->assign_vars(array(
534                                 'CAT_TITLE' => $cat_title,
536                                 'L_EDIT_CATEGORY' => $lang['Edit_Category'], 
537                                 'L_EDIT_CATEGORY_EXPLAIN' => $lang['Edit_Category_explain'], 
538                                 'L_CATEGORY' => $lang['Category'], 
540                                 'S_HIDDEN_FIELDS' => $s_hidden_fields, 
541                                 'S_SUBMIT_VALUE' => $buttonvalue, 
542                                 'S_FORUM_ACTION' => append_sid("admin_forums.$phpEx"))
543                         );
545                         $template->pparse("body");
546                         break;
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                         }
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>");
560                         message_die(GENERAL_MESSAGE, $message);
562                         break;
563                         
564                 case 'deleteforum':
565                         // Show form to delete a forum
566                         $forum_id = intval($HTTP_GET_VARS[POST_FORUM_URL]);
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>';
573                         $buttonvalue = $lang['Move_and_Delete'];
575                         $newmode = 'movedelforum';
577                         $foruminfo = get_info('forum', $forum_id);
578                         $name = $foruminfo['forum_name'];
580                         $template->set_filenames(array(
581                                 "body" => "admin/forum_delete_body.tpl")
582                         );
584                         $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode . '" /><input type="hidden" name="from_id" value="' . $forum_id . '" />';
586                         $template->assign_vars(array(
587                                 'NAME' => $name, 
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'], 
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                         );
600                         $template->pparse("body");
601                         break;
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']);
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                                 }
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));
633                                         $sql = "DELETE FROM " . VOTE_DESC_TABLE . " 
634                                                 WHERE vote_id IN ($vote_ids)";
635                                         $db->sql_query($sql);
637                                         $sql = "DELETE FROM " . VOTE_RESULTS_TABLE . " 
638                                                 WHERE vote_id IN ($vote_ids)";
639                                         $db->sql_query($sql);
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                                 }
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                         }
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                         }
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));
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));
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);
729                         }
730                         $db->sql_freeresult($result2);
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                         }
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>");
755                         message_die(GENERAL_MESSAGE, $message);
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]);
765                         $buttonvalue = $lang['Move_and_Delete'];
766                         $newmode = 'movedelcat';
767                         $catinfo = get_info('category', $cat_id);
768                         $name = $catinfo['cat_title'];
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'];
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                         }
797                         $template->set_filenames(array(
798                                 "body" => "admin/forum_delete_body.tpl")
799                         );
801                         $s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode . '" /><input type="hidden" name="from_id" value="' . $cat_id . '" />';
803                         $template->assign_vars(array(
804                                 'NAME' => $name, 
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                         );
817                         $template->pparse("body");
818                         break;
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']);
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                                 }
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                         }
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                         }
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>");
860                         message_die(GENERAL_MESSAGE, $message);
862                         break;
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]);
871                         $forum_info = get_info('forum', $forum_id);
873                         $cat_id = $forum_info['cat_id'];
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                         }
883                         renumber_order('forum', $forum_info['cat_id']);
884                         $show_index = TRUE;
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]);
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                         }
903                         renumber_order('category');
904                         $show_index = TRUE;
906                         break;
908                 case 'forum_sync':
909                         sync('forum', intval($HTTP_GET_VARS[POST_FORUM_URL]));
910                         $show_index = TRUE;
912                         break;
914                 default:
915                         message_die(GENERAL_MESSAGE, $lang['No_mode']);
916                         break;
917         }
919         if ($show_index != TRUE)
920         {
921                 include('./page_footer_admin.'.$phpEx);
922                 exit;
923         }
926 //
927 // Start page proper
928 //
929 $template->set_filenames(array(
930         "body" => "admin/forum_admin_body.tpl")
931 );
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 );
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) )
951         message_die(GENERAL_ERROR, "Could not query categories list", "", __LINE__, __FILE__, $sql);
954 if( $total_categories = $db->sql_numrows($q_categories) )
956         $category_rows = $db->sql_fetchrowset($q_categories);
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         }
966         if( $total_forums = $db->sql_numrows($q_forums) )
967         {
968                 $forum_rows = $db->sql_fetchrowset($q_forums);
969         }
971         //
972         // Okay, let's build the index
973         //
974         $gen_cat = array();
976         for($i = 0; $i < $total_categories; $i++)
977         {
978                 $cat_id = $category_rows[$i]['cat_id'];
980                 $template->assign_block_vars("catrow", array( 
981                         'S_ADD_FORUM_SUBMIT' => "addforum[$cat_id]", 
982                         'S_ADD_FORUM_NAME' => "forumname[$cat_id]", 
984                         'CAT_ID' => $cat_id,
985                         'CAT_DESC' => $category_rows[$i]['cat_title'],
987                         'U_CAT_EDIT' => append_sid("admin_forums.$phpEx?mode=editcat&amp;" . POST_CAT_URL . "=$cat_id"),
988                         'U_CAT_DELETE' => append_sid("admin_forums.$phpEx?mode=deletecat&amp;" . POST_CAT_URL . "=$cat_id"),
989                         'U_CAT_MOVE_UP' => append_sid("admin_forums.$phpEx?mode=cat_order&amp;move=-15&amp;" . POST_CAT_URL . "=$cat_id"),
990                         'U_CAT_MOVE_DOWN' => append_sid("admin_forums.$phpEx?mode=cat_order&amp;move=15&amp;" . POST_CAT_URL . "=$cat_id"),
991                         'U_VIEWCAT' => append_sid($phpbb_root_path."index.$phpEx?" . POST_CAT_URL . "=$cat_id"))
992                 );
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                         {
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'],
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&amp;" . POST_FORUM_URL . "=$forum_id"),
1010                                         'U_FORUM_DELETE' => append_sid("admin_forums.$phpEx?mode=deleteforum&amp;" . POST_FORUM_URL . "=$forum_id"),
1011                                         'U_FORUM_MOVE_UP' => append_sid("admin_forums.$phpEx?mode=forum_order&amp;move=-15&amp;" . POST_FORUM_URL . "=$forum_id"),
1012                                         'U_FORUM_MOVE_DOWN' => append_sid("admin_forums.$phpEx?mode=forum_order&amp;move=15&amp;" . POST_FORUM_URL . "=$forum_id"),
1013                                         'U_FORUM_RESYNC' => append_sid("admin_forums.$phpEx?mode=forum_sync&amp;" . POST_FORUM_URL . "=$forum_id"))
1014                                 );
1016                         }// if ... forumid == catid
1017                         
1018                 } // for ... forums
1020         } // for ... categories
1022 }// if ... total_categories
1024 $template->pparse("body");
1026 include('./page_footer_admin.'.$phpEx);
1028 ?>