punbb/admin_forums.php
changeset 0 f9ffdbd96607
child 2 a8a21e1c7afa
equal deleted inserted replaced
-1:000000000000 0:f9ffdbd96607
       
     1 <?php
       
     2 /***********************************************************************
       
     3 
       
     4   Copyright (C) 2002-2005  Rickard Andersson (rickard@punbb.org)
       
     5 
       
     6   This file is part of PunBB.
       
     7 
       
     8   PunBB is free software; you can redistribute it and/or modify it
       
     9   under the terms of the GNU General Public License as published
       
    10   by the Free Software Foundation; either version 2 of the License,
       
    11   or (at your option) any later version.
       
    12 
       
    13   PunBB is distributed in the hope that it will be useful, but
       
    14   WITHOUT ANY WARRANTY; without even the implied warranty of
       
    15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       
    16   GNU General Public License for more details.
       
    17 
       
    18   You should have received a copy of the GNU General Public License
       
    19   along with this program; if not, write to the Free Software
       
    20   Foundation, Inc., 59 Temple Place, Suite 330, Boston,
       
    21   MA  02111-1307  USA
       
    22 
       
    23 ************************************************************************/
       
    24 
       
    25 
       
    26 // Tell header.php to use the admin template
       
    27 define('PUN_ADMIN_CONSOLE', 1);
       
    28 
       
    29 define('PUN_ROOT', './');
       
    30 require PUN_ROOT.'include/common.php';
       
    31 require PUN_ROOT.'include/common_admin.php';
       
    32 
       
    33 
       
    34 if ($pun_user['g_id'] > PUN_ADMIN)
       
    35 	message($lang_common['No permission']);
       
    36 
       
    37 
       
    38 // Add a "default" forum
       
    39 if (isset($_POST['add_forum']))
       
    40 {
       
    41 	confirm_referrer('admin_forums.php');
       
    42 
       
    43 	$add_to_cat = intval($_POST['add_to_cat']);
       
    44 	if ($add_to_cat < 1)
       
    45 		message($lang_common['Bad request']);
       
    46 
       
    47 	$db->query('INSERT INTO '.$db->prefix.'forums (cat_id) VALUES('.$add_to_cat.')') or error('Unable to create forum', __FILE__, __LINE__, $db->error());
       
    48 
       
    49 	// Regenerate the quickjump cache
       
    50 	require_once PUN_ROOT.'include/cache.php';
       
    51 	generate_quickjump_cache();
       
    52 
       
    53 	redirect('admin_forums.php', 'Forum added. Redirecting &hellip;');
       
    54 }
       
    55 
       
    56 
       
    57 // Delete a forum
       
    58 else if (isset($_GET['del_forum']))
       
    59 {
       
    60 	confirm_referrer('admin_forums.php');
       
    61 
       
    62 	$forum_id = intval($_GET['del_forum']);
       
    63 	if ($forum_id < 1)
       
    64 		message($lang_common['Bad request']);
       
    65 
       
    66 	if (isset($_POST['del_forum_comply']))	// Delete a forum with all posts
       
    67 	{
       
    68 		@set_time_limit(0);
       
    69 
       
    70 		// Prune all posts and topics
       
    71 		prune($forum_id, 1, -1);
       
    72 
       
    73 		// Locate any "orphaned redirect topics" and delete them
       
    74 		$result = $db->query('SELECT t1.id FROM '.$db->prefix.'topics AS t1 LEFT JOIN '.$db->prefix.'topics AS t2 ON t1.moved_to=t2.id WHERE t2.id IS NULL AND t1.moved_to IS NOT NULL') or error('Unable to fetch redirect topics', __FILE__, __LINE__, $db->error());
       
    75 		$num_orphans = $db->num_rows($result);
       
    76 
       
    77 		if ($num_orphans)
       
    78 		{
       
    79 			for ($i = 0; $i < $num_orphans; ++$i)
       
    80 				$orphans[] = $db->result($result, $i);
       
    81 
       
    82 			$db->query('DELETE FROM '.$db->prefix.'topics WHERE id IN('.implode(',', $orphans).')') or error('Unable to delete redirect topics', __FILE__, __LINE__, $db->error());
       
    83 		}
       
    84 
       
    85 		// Delete the forum and any forum specific group permissions
       
    86 		$db->query('DELETE FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to delete forum', __FILE__, __LINE__, $db->error());
       
    87 		$db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE forum_id='.$forum_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error());
       
    88 
       
    89 		// Regenerate the quickjump cache
       
    90 		require_once PUN_ROOT.'include/cache.php';
       
    91 		generate_quickjump_cache();
       
    92 
       
    93 		redirect('admin_forums.php', 'Forum deleted. Redirecting &hellip;');
       
    94 	}
       
    95 	else	// If the user hasn't confirmed the delete
       
    96 	{
       
    97 		$result = $db->query('SELECT forum_name FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
       
    98 		$forum_name = pun_htmlspecialchars($db->result($result));
       
    99 
       
   100 
       
   101 		$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Forums';
       
   102 		require PUN_ROOT.'header.php';
       
   103 
       
   104 		generate_admin_menu('forums');
       
   105 
       
   106 ?>
       
   107 	<div class="blockform">
       
   108 		<h2><span>Confirm delete forum</span></h2>
       
   109 		<div class="box">
       
   110 			<form method="post" action="admin_forums.php?del_forum=<?php echo $forum_id ?>">
       
   111 				<div class="inform">
       
   112 					<fieldset>
       
   113 						<legend>Important! Read before deleting</legend>
       
   114 						<div class="infldset">
       
   115 							<p>Are you sure that you want to delete the forum "<?php echo $forum_name ?>"?</p>
       
   116 							<p>WARNING! Deleting a forum will delete all posts (if any) in that forum!</p>
       
   117 						</div>
       
   118 					</fieldset>
       
   119 				</div>
       
   120 				<p><input type="submit" name="del_forum_comply" value="Delete" /><a href="javascript:history.go(-1)">Go back</a></p>
       
   121 			</form>
       
   122 		</div>
       
   123 	</div>
       
   124 	<div class="clearer"></div>
       
   125 </div>
       
   126 <?php
       
   127 
       
   128 		require PUN_ROOT.'footer.php';
       
   129 	}
       
   130 }
       
   131 
       
   132 
       
   133 // Update forum positions
       
   134 else if (isset($_POST['update_positions']))
       
   135 {
       
   136 	confirm_referrer('admin_forums.php');
       
   137 
       
   138 	while (list($forum_id, $disp_position) = @each($_POST['position']))
       
   139 	{
       
   140 		if (!@preg_match('#^\d+$#', $disp_position))
       
   141 			message('Position must be a positive integer value.');
       
   142 
       
   143 		$db->query('UPDATE '.$db->prefix.'forums SET disp_position='.$disp_position.' WHERE id='.intval($forum_id)) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
       
   144 	}
       
   145 
       
   146 	// Regenerate the quickjump cache
       
   147 	require_once PUN_ROOT.'include/cache.php';
       
   148 	generate_quickjump_cache();
       
   149 
       
   150 	redirect('admin_forums.php', 'Forums updated. Redirecting &hellip;');
       
   151 }
       
   152 
       
   153 
       
   154 else if (isset($_GET['edit_forum']))
       
   155 {
       
   156 	$forum_id = intval($_GET['edit_forum']);
       
   157 	if ($forum_id < 1)
       
   158 		message($lang_common['Bad request']);
       
   159 
       
   160 	// Update group permissions for $forum_id
       
   161 	if (isset($_POST['save']))
       
   162 	{
       
   163 		confirm_referrer('admin_forums.php');
       
   164 
       
   165 		// Start with the forum details
       
   166 		$forum_name = trim($_POST['forum_name']);
       
   167 		$forum_desc = pun_linebreaks(trim($_POST['forum_desc']));
       
   168 		$cat_id = intval($_POST['cat_id']);
       
   169 		$sort_by = intval($_POST['sort_by']);
       
   170 		$redirect_url = isset($_POST['redirect_url']) ? trim($_POST['redirect_url']) : null;
       
   171 
       
   172 		if ($forum_name == '')
       
   173 			message('You must enter a forum name.');
       
   174 
       
   175 		if ($cat_id < 1)
       
   176 			message($lang_common['Bad request']);
       
   177 
       
   178 		$forum_desc = ($forum_desc != '') ? '\''.$db->escape($forum_desc).'\'' : 'NULL';
       
   179 		$redirect_url = ($redirect_url != '') ? '\''.$db->escape($redirect_url).'\'' : 'NULL';
       
   180 
       
   181 		$db->query('UPDATE '.$db->prefix.'forums SET forum_name=\''.$db->escape($forum_name).'\', forum_desc='.$forum_desc.', redirect_url='.$redirect_url.', sort_by='.$sort_by.', cat_id='.$cat_id.' WHERE id='.$forum_id) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
       
   182 
       
   183 		// Now let's deal with the permissions
       
   184 		if (isset($_POST['read_forum_old']))
       
   185 		{
       
   186 			$result = $db->query('SELECT g_id, g_read_board, g_post_replies, g_post_topics FROM '.$db->prefix.'groups WHERE g_id!='.PUN_ADMIN) or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error());
       
   187 			while ($cur_group = $db->fetch_assoc($result))
       
   188 			{
       
   189 				$read_forum_new = ($cur_group['g_read_board'] == '1') ? isset($_POST['read_forum_new'][$cur_group['g_id']]) ? '1' : '0' : intval($_POST['read_forum_old'][$cur_group['g_id']]);
       
   190 				$post_replies_new = isset($_POST['post_replies_new'][$cur_group['g_id']]) ? '1' : '0';
       
   191 				$post_topics_new = isset($_POST['post_topics_new'][$cur_group['g_id']]) ? '1' : '0';
       
   192 
       
   193 				// Check if the new settings differ from the old
       
   194 				if ($read_forum_new != $_POST['read_forum_old'][$cur_group['g_id']] || $post_replies_new != $_POST['post_replies_old'][$cur_group['g_id']] || $post_topics_new != $_POST['post_topics_old'][$cur_group['g_id']])
       
   195 				{
       
   196 					// If the new settings are identical to the default settings for this group, delete it's row in forum_perms
       
   197 					if ($read_forum_new == '1' && $post_replies_new == $cur_group['g_post_replies'] && $post_topics_new == $cur_group['g_post_topics'])
       
   198 						$db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE group_id='.$cur_group['g_id'].' AND forum_id='.$forum_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error());
       
   199 					else
       
   200 					{
       
   201 						// Run an UPDATE and see if it affected a row, if not, INSERT
       
   202 						$db->query('UPDATE '.$db->prefix.'forum_perms SET read_forum='.$read_forum_new.', post_replies='.$post_replies_new.', post_topics='.$post_topics_new.' WHERE group_id='.$cur_group['g_id'].' AND forum_id='.$forum_id) or error('Unable to insert group forum permissions', __FILE__, __LINE__, $db->error());
       
   203 						if (!$db->affected_rows())
       
   204 							$db->query('INSERT INTO '.$db->prefix.'forum_perms (group_id, forum_id, read_forum, post_replies, post_topics) VALUES('.$cur_group['g_id'].', '.$forum_id.', '.$read_forum_new.', '.$post_replies_new.', '.$post_topics_new.')') or error('Unable to insert group forum permissions', __FILE__, __LINE__, $db->error());
       
   205 					}
       
   206 				}
       
   207 			}
       
   208 		}
       
   209 
       
   210 		// Regenerate the quickjump cache
       
   211 		require_once PUN_ROOT.'include/cache.php';
       
   212 		generate_quickjump_cache();
       
   213 
       
   214 		redirect('admin_forums.php', 'Forum updated. Redirecting &hellip;');
       
   215 	}
       
   216 	else if (isset($_POST['revert_perms']))
       
   217 	{
       
   218 		confirm_referrer('admin_forums.php');
       
   219 
       
   220 		$db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE forum_id='.$forum_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error());
       
   221 
       
   222 		// Regenerate the quickjump cache
       
   223 		require_once PUN_ROOT.'include/cache.php';
       
   224 		generate_quickjump_cache();
       
   225 
       
   226 		redirect('admin_forums.php?edit_forum='.$forum_id, 'Permissions reverted to defaults. Redirecting &hellip;');
       
   227 	}
       
   228 
       
   229 
       
   230 	// Fetch forum info
       
   231 	$result = $db->query('SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by, cat_id FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
       
   232 	if (!$db->num_rows($result))
       
   233 		message($lang_common['Bad request']);
       
   234 
       
   235 	$cur_forum = $db->fetch_assoc($result);
       
   236 
       
   237 
       
   238 	$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Forums';
       
   239 	require PUN_ROOT.'header.php';
       
   240 
       
   241 	generate_admin_menu('forums');
       
   242 
       
   243 ?>
       
   244 	<div class="blockform">
       
   245 		<h2><span>Edit forum</span></h2>
       
   246 		<div class="box">
       
   247 			<form id="edit_forum" method="post" action="admin_forums.php?edit_forum=<?php echo $forum_id ?>">
       
   248 				<p class="submittop"><input type="submit" name="save" value="Save changes" tabindex="6" /></p>
       
   249 				<div class="inform">
       
   250 					<fieldset>
       
   251 						<legend>Edit forum details</legend>
       
   252 						<div class="infldset">
       
   253 							<table class="aligntop" cellspacing="0">
       
   254 								<tr>
       
   255 									<th scope="row">Forum name</th>
       
   256 									<td><input type="text" name="forum_name" size="35" maxlength="80" value="<?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?>" tabindex="1" /></td>
       
   257 								</tr>
       
   258 								<tr>
       
   259 									<th scope="row">Description (HTML)</th>
       
   260 									<td><textarea name="forum_desc" rows="3" cols="50" tabindex="2"><?php echo pun_htmlspecialchars($cur_forum['forum_desc']) ?></textarea></td>
       
   261 								</tr>
       
   262 								<tr>
       
   263 									<th scope="row">Category</th>
       
   264 									<td>
       
   265 										<select name="cat_id" tabindex="3">
       
   266 <?php
       
   267 
       
   268 	$result = $db->query('SELECT id, cat_name FROM '.$db->prefix.'categories ORDER BY disp_position') or error('Unable to fetch category list', __FILE__, __LINE__, $db->error());
       
   269 	while ($cur_cat = $db->fetch_assoc($result))
       
   270 	{
       
   271 		$selected = ($cur_cat['id'] == $cur_forum['cat_id']) ? ' selected="selected"' : '';
       
   272 		echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$cur_cat['id'].'"'.$selected.'>'.pun_htmlspecialchars($cur_cat['cat_name']).'</option>'."\n";
       
   273 	}
       
   274 
       
   275 ?>
       
   276 										</select>
       
   277 									</td>
       
   278 								</tr>
       
   279 								<tr>
       
   280 									<th scope="row">Sort topics by</th>
       
   281 									<td>
       
   282 										<select name="sort_by" tabindex="4">
       
   283 											<option value="0"<?php if ($cur_forum['sort_by'] == '0') echo ' selected="selected"' ?>>Last post</option>
       
   284 											<option value="1"<?php if ($cur_forum['sort_by'] == '1') echo ' selected="selected"' ?>>Topic start</option>
       
   285 										</select>
       
   286 									</td>
       
   287 								</tr>
       
   288 								<tr>
       
   289 									<th scope="row">Redirect URL</th>
       
   290 									<td><?php echo ($cur_forum['num_topics']) ? 'Only available in empty forums' : '<input type="text" name="redirect_url" size="45" maxlength="100" value="'.pun_htmlspecialchars($cur_forum['redirect_url']).'" tabindex="5" />'; ?></td>
       
   291 								</tr>
       
   292 							</table>
       
   293 						</div>
       
   294 					</fieldset>
       
   295 				</div>
       
   296 				<div class="inform">
       
   297 					<fieldset>
       
   298 						<legend>Edit group permissions for this forum</legend>
       
   299 						<div class="infldset">
       
   300 							<p>In this form, you can set the forum specific permissions for the different user groups. If you haven't made any changes to this forums group permissions, what you see below is the default based on settings in <a href="admin_groups.php">User groups</a>. Administrators always have full permissions and are thus excluded. Permission settings that differ from the default permissions for the user group are marked red. The "Read forum" permission checkbox will be disabled if the group in question lacks the "Read board" permission. For redirect forums, only the "Read forum" permission is editable.</p>
       
   301 							<table id="forumperms" cellspacing="0">
       
   302 							<thead>
       
   303 								<tr>
       
   304 									<th class="atcl">&nbsp;</th>
       
   305 									<th>Read forum</th>
       
   306 									<th>Post replies</th>
       
   307 									<th>Post topics</th>
       
   308 								</tr>
       
   309 							</thead>
       
   310 							<tbody>
       
   311 <?php
       
   312 
       
   313 	$result = $db->query('SELECT g.g_id, g.g_title, g.g_read_board, g.g_post_replies, g.g_post_topics, fp.read_forum, fp.post_replies, fp.post_topics FROM '.$db->prefix.'groups AS g LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (g.g_id=fp.group_id AND fp.forum_id='.$forum_id.') WHERE g.g_id!='.PUN_ADMIN.' ORDER BY g.g_id') or error('Unable to fetch group forum permission list', __FILE__, __LINE__, $db->error());
       
   314 
       
   315 	while ($cur_perm = $db->fetch_assoc($result))
       
   316 	{
       
   317 		$read_forum = ($cur_perm['read_forum'] != '0') ? true : false;
       
   318 		$post_replies = (($cur_perm['g_post_replies'] == '0' && $cur_perm['post_replies'] == '1') || ($cur_perm['g_post_replies'] == '1' && $cur_perm['post_replies'] != '0')) ? true : false;
       
   319 		$post_topics = (($cur_perm['g_post_topics'] == '0' && $cur_perm['post_topics'] == '1') || ($cur_perm['g_post_topics'] == '1' && $cur_perm['post_topics'] != '0')) ? true : false;
       
   320 
       
   321 		// Determine if the current sittings differ from the default or not
       
   322 		$read_forum_def = ($cur_perm['read_forum'] == '0') ? false : true;
       
   323 		$post_replies_def = (($post_replies && $cur_perm['g_post_replies'] == '0') || (!$post_replies && ($cur_perm['g_post_replies'] == '' || $cur_perm['g_post_replies'] == '1'))) ? false : true;
       
   324 		$post_topics_def = (($post_topics && $cur_perm['g_post_topics'] == '0') || (!$post_topics && ($cur_perm['g_post_topics'] == '' || $cur_perm['g_post_topics'] == '1'))) ? false : true;
       
   325 
       
   326 ?>
       
   327 								<tr>
       
   328 									<th class="atcl"><?php echo pun_htmlspecialchars($cur_perm['g_title']) ?></th>
       
   329 									<td<?php if (!$read_forum_def) echo ' class="nodefault"'; ?>>
       
   330 										<input type="hidden" name="read_forum_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($read_forum) ? '1' : '0'; ?>" />
       
   331 										<input type="checkbox" name="read_forum_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($read_forum) ? ' checked="checked"' : ''; ?><?php echo ($cur_perm['g_read_board'] == '0') ? ' disabled="disabled"' : ''; ?> />
       
   332 									</td>
       
   333 									<td<?php if (!$post_replies_def && $cur_forum['redirect_url'] == '') echo ' class="nodefault"'; ?>>
       
   334 										<input type="hidden" name="post_replies_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($post_replies) ? '1' : '0'; ?>" />
       
   335 										<input type="checkbox" name="post_replies_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($post_replies) ? ' checked="checked"' : ''; ?><?php echo ($cur_forum['redirect_url'] != '') ? ' disabled="disabled"' : ''; ?> />
       
   336 									</td>
       
   337 									<td<?php if (!$post_topics_def && $cur_forum['redirect_url'] == '') echo ' class="nodefault"'; ?>>
       
   338 										<input type="hidden" name="post_topics_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($post_topics) ? '1' : '0'; ?>" />
       
   339 										<input type="checkbox" name="post_topics_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($post_topics) ? ' checked="checked"' : ''; ?><?php echo ($cur_forum['redirect_url'] != '') ? ' disabled="disabled"' : ''; ?> />
       
   340 									</td>
       
   341 								</tr>
       
   342 <?php
       
   343 
       
   344 	}
       
   345 
       
   346 ?>
       
   347 							</tbody>
       
   348 							</table>
       
   349 							<div class="fsetsubmit"><input type="submit" name="revert_perms" value="Revert to default" /></div>
       
   350 						</div>
       
   351 					</fieldset>
       
   352 				</div>
       
   353 				<p class="submitend"><input type="submit" name="save" value="Save changes" /></p>
       
   354 			</form>
       
   355 		</div>
       
   356 	</div>
       
   357 	<div class="clearer"></div>
       
   358 </div>
       
   359 
       
   360 <?php
       
   361 
       
   362 	require PUN_ROOT.'footer.php';
       
   363 }
       
   364 
       
   365 
       
   366 $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Forums';
       
   367 require PUN_ROOT.'header.php';
       
   368 
       
   369 generate_admin_menu('forums');
       
   370 
       
   371 ?>
       
   372 	<div class="blockform">
       
   373 		<h2><span>Add forum</span></h2>
       
   374 		<div class="box">
       
   375 			<form method="post" action="admin_forums.php?action=adddel">
       
   376 				<div class="inform">
       
   377 					<fieldset>
       
   378 						<legend>Create a new forum</legend>
       
   379 						<div class="infldset">
       
   380 							<table class="aligntop" cellspacing="0">
       
   381 								<tr>
       
   382 									<th scope="row">Add forum to category<div><input type="submit" name="add_forum" value=" Add " tabindex="2" /></div></th>
       
   383 									<td>
       
   384 										<select name="add_to_cat" tabindex="1">
       
   385 <?php
       
   386 
       
   387 	$result = $db->query('SELECT id, cat_name FROM '.$db->prefix.'categories ORDER BY disp_position') or error('Unable to fetch category list', __FILE__, __LINE__, $db->error());
       
   388 	while ($cur_cat = $db->fetch_assoc($result))
       
   389 		echo "\t\t\t\t\t\t\t\t\t".'<option value="'.$cur_cat['id'].'">'.pun_htmlspecialchars($cur_cat['cat_name']).'</option>'."\n";
       
   390 
       
   391 ?>
       
   392 										</select>
       
   393 										<span>Select the category to which you wish to add a new forum.</span>
       
   394 									</td>
       
   395 								</tr>
       
   396 							</table>
       
   397 						</div>
       
   398 					</fieldset>
       
   399 				</div>
       
   400 			</form>
       
   401 		</div>
       
   402 
       
   403 		<h2 class="block2"><span>Edit forums</span></h2>
       
   404 		<div class="box">
       
   405 			<form id="edforum" method="post" action="admin_forums.php?action=edit">
       
   406 				<p class="submittop"><input type="submit" name="update_positions" value="Update positions" tabindex="3" /></p>
       
   407 <?php
       
   408 
       
   409 $tabindex_count = 4;
       
   410 
       
   411 // Display all the categories and forums
       
   412 $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.disp_position FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id ORDER BY c.disp_position, c.id, f.disp_position') or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());
       
   413 
       
   414 $cur_category = 0;
       
   415 while ($cur_forum = $db->fetch_assoc($result))
       
   416 {
       
   417 	if ($cur_forum['cid'] != $cur_category)	// A new category since last iteration?
       
   418 	{
       
   419 		if ($cur_category != 0)
       
   420 			echo "\t\t\t\t\t\t\t".'</table>'."\n\t\t\t\t\t\t".'</div>'."\n\t\t\t\t\t".'</fieldset>'."\n\t\t\t\t".'</div>'."\n";
       
   421 
       
   422 ?>
       
   423 				<div class="inform">
       
   424 					<fieldset>
       
   425 						<legend>Category: <?php echo pun_htmlspecialchars($cur_forum['cat_name']) ?></legend>
       
   426 						<div class="infldset">
       
   427 							<table cellspacing="0">
       
   428 <?php
       
   429 
       
   430 		$cur_category = $cur_forum['cid'];
       
   431 	}
       
   432 
       
   433 ?>
       
   434 								<tr>
       
   435 									<th><a href="admin_forums.php?edit_forum=<?php echo $cur_forum['fid'] ?>">Edit</a> - <a href="admin_forums.php?del_forum=<?php echo $cur_forum['fid'] ?>">Delete</a></th>
       
   436 									<td>Position&nbsp;&nbsp;<input type="text" name="position[<?php echo $cur_forum['fid'] ?>]" size="3" maxlength="3" value="<?php echo $cur_forum['disp_position'] ?>" tabindex="<?php echo $tabindex_count ?>" />
       
   437 									&nbsp;&nbsp;<strong><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></strong></td>
       
   438 								</tr>
       
   439 <?php
       
   440 
       
   441 	$tabindex_count += 2;
       
   442 }
       
   443 
       
   444 ?>
       
   445 							</table>
       
   446 						</div>
       
   447 					</fieldset>
       
   448 				</div>
       
   449 				<p class="submitend"><input type="submit" name="update_positions" value="Update positions" tabindex="<?php echo $tabindex_count ?>" /></p>
       
   450 			</form>
       
   451 		</div>
       
   452 	</div>
       
   453 	<div class="clearer"></div>
       
   454 </div>
       
   455 <?php
       
   456 
       
   457 require PUN_ROOT.'footer.php';