From 8f051f1b474fe8ede0540baca4ad1bc80742f4db Mon Sep 17 00:00:00 2001 From: "Paul S. Owen" Date: Tue, 26 Nov 2002 00:50:16 +0000 Subject: I know the jumpbox layout doesn't always match the real forum structure ... will fix git-svn-id: file:///svn/phpbb/trunk@3099 89ea8834-ac86-4346-8a33-228a782c2dd0 --- phpBB/includes/functions_admin.php | 56 ++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 14 deletions(-) (limited to 'phpBB/includes/functions_admin.php') diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index b6e10303f5..3b95658404 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -20,41 +20,69 @@ ***************************************************************************/ // Simple version of jumpbox, just lists authed forums -function make_forum_select($default_forum = false, $ignore_forum = false) +function make_forum_select($forum_id = false, $ignore_forum = false, $add_select = true) { - global $db, $userdata, $auth, $lang; + global $db, $user, $auth; $sql = "SELECT forum_id, forum_name, left_id, right_id FROM " . FORUMS_TABLE . " ORDER BY left_id ASC"; $result = $db->sql_query($sql); - $right = 0; - $subforum = ''; - $forum_list = ''; - while ( $row = $db->sql_fetchrow($result) ) + $right = $cat_right = 0; + $forum_list = $padding = $holding = ''; + + while ($row = $db->sql_fetchrow($result)) { - if ( $row['left_id'] < $right ) + if (!$auth->acl_gets('f_list', 'm_', 'a_', intval($row['forum_id'])) || $row['forum_id'] == $ignore_forum) + { + // if the user does not have permissions to list this forum skip + continue; + } + + if ($row['left_id'] < $right) { - $subforum .= '   '; + $padding .= '   '; } - else if ( $row['left_id'] > $right + 1 ) + else if ($row['left_id'] > $right + 1) { - $subforum = substr($subforum, 0, -18 * ( $row['left_id'] - $right + 1 )); + $padding = substr($padding, 0, -13 * ($row['left_id'] - $right + 1)); } $right = $row['right_id']; - if ( ( $auth->acl_get('f_list', $forum_id) || $auth->acl_get('a_') ) && $ignore_forum != $row['forum_id'] ) + $selected = ($row['forum_id'] == $forum_id) ? ' selected="selected"' : ''; + + if ($row['left_id'] > $cat_right) { - $selected = ( $row['forum_id'] == $default_forum ) ? ' selected="selected"' : ''; - $forum_list .= ''; + $holding = ''; } + if ($row['right_id'] - $row['left_id'] > 1) + { + $cat_right = max($cat_right, $row['right_id']); + + $holding .= ''; + } + else + { + $forum_list .= $holding . ''; + $holding = ''; + } + } + + if (!$right) + { + $forum_list .= ''; + } + else if ($add_select) + { + $forum_list = '' . $forum_list; } + $db->sql_freeresult($result); - return ( $forum_list == '' ) ? '' : $forum_list; + return $forum_list; } // Synchronise functions for forums/topics -- cgit v1.2.1