diff --git a/phpBB/index.php b/phpBB/index.php
index 995cef6838..ffc8e46f00 100644
--- a/phpBB/index.php
+++ b/phpBB/index.php
@@ -33,7 +33,7 @@ init_userprefs($userdata);
// End session management
//
-$viewcat = (!empty($HTTP_GET_VARS[POST_CAT_URL])) ? $HTTP_GET_VARS[POST_CAT_URL] : -1;
+$viewcat = ( !empty($HTTP_GET_VARS[POST_CAT_URL]) ) ? $HTTP_GET_VARS[POST_CAT_URL] : -1;
if( isset($HTTP_GET_VARS['mark']) || isset($HTTP_POST_VARS['mark']) )
{
@@ -51,24 +51,7 @@ if( $mark_read == "forums" )
{
if( $userdata['session_logged_in'] )
{
- $sql = "SELECT MAX(post_time) AS last_post
- FROM " . POSTS_TABLE;
- if(!$result = $db->sql_query($sql))
- {
- message_die(GENERAL_ERROR, "Could not query new topic information", "", __LINE__, __FILE__, $sql);
- }
-
- if( $forum_count = $db->sql_numrows($result) )
- {
- $mark_read_list = $db->sql_fetchrow($result);
-
- $last_post_time = $mark_read_list['last_post'];
-
- if( $last_post_time > $userdata['user_lastvisit'] )
- {
- setcookie($board_config['cookie_name'] . "_f_all", time(), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
- }
- }
+ setcookie($board_config['cookie_name'] . "_f_all", time(), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
}
$template->assign_vars(array(
@@ -84,11 +67,9 @@ if( $mark_read == "forums" )
// End handle marking posts
//
-
$tracking_topics = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_t"]) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_t"]) : "";
$tracking_forums = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_f"]) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_f"]) : "";
-
//
// If you don't use these stats on your index
// you may want to consider removing them since
@@ -132,34 +113,27 @@ else
// Start page proper
//
$sql = "SELECT c.cat_id, c.cat_title, c.cat_order
- FROM " . CATEGORIES_TABLE . " c, " . FORUMS_TABLE . " f
- WHERE f.cat_id = c.cat_id
- GROUP BY c.cat_id, c.cat_title, c.cat_order
+ FROM " . CATEGORIES_TABLE . " c
ORDER BY c.cat_order";
-if(!$q_categories = $db->sql_query($sql))
+if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Could not query categories list", "", __LINE__, __FILE__, $sql);
}
-if($total_categories = $db->sql_numrows($q_categories))
+while( $category_rows[] = $db->sql_fetchrow($result) );
+
+if( ( $total_categories = count($category_rows) ) )
{
- $category_rows = $db->sql_fetchrowset($q_categories);
-
- $limit_forums = "";
-
//
// Define appropriate SQL
//
switch(SQL_LAYER)
{
case 'postgresql':
- $limit_forums = ($viewcat != -1) ? "AND f.cat_id = $viewcat " : "";
-
$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
FROM " . FORUMS_TABLE . " f, " . POSTS_TABLE . " p, " . USERS_TABLE . " u
WHERE p.post_id = f.forum_last_post_id
AND u.user_id = p.poster_id
- $limit_forums
UNION (
SELECT f.*, NULL, NULL, NULL, NULL
FROM " . FORUMS_TABLE . " f
@@ -168,58 +142,59 @@ if($total_categories = $db->sql_numrows($q_categories))
FROM " . POSTS_TABLE . " p
WHERE p.post_id = f.forum_last_post_id
)
- $limit_forums
)
ORDER BY cat_id, forum_order";
break;
case 'oracle':
- $limit_forums = ($viewcat != -1) ? "AND f.cat_id = $viewcat " : "";
-
$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
FROM " . FORUMS_TABLE . " f, " . POSTS_TABLE . " p, " . USERS_TABLE . " u
WHERE p.post_id = f.forum_last_post_id(+)
AND u.user_id = p.poster_id(+)
- $limit_forums
ORDER BY f.cat_id, f.forum_order";
break;
default:
- $limit_forums = ($viewcat != -1) ? "WHERE f.cat_id = $viewcat " : "";
-
$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
FROM (( " . FORUMS_TABLE . " f
LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
- $limit_forums
ORDER BY f.cat_id, f.forum_order";
break;
}
-
- if(!$q_forums = $db->sql_query($sql))
+ if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Could not query forums information", "", __LINE__, __FILE__, $sql);
}
- if( !$total_forums = $db->sql_numrows($q_forums) )
+
+ $forum_data = array();
+ while( $row = $db->sql_fetchrow($result) )
+ {
+ $forum_data[] = $row;
+ }
+
+ if( !($total_forums = count($forum_data)) )
{
message_die(GENERAL_MESSAGE, $lang['No_forums']);
}
- $forum_rows = $db->sql_fetchrowset($q_forums);
+ //
+ // Obtain a list of topic ids which contain
+ // posts made since user last visited
+ //
if( $userdata['session_logged_in'] )
{
- $sql = "SELECT f.forum_id, t.topic_id, p.post_time
- FROM " . FORUMS_TABLE . " f, " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p
- WHERE t.forum_id = f.forum_id
- AND p.post_id = t.topic_last_post_id
+ $sql = "SELECT t.forum_id, t.topic_id, p.post_time
+ FROM " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p
+ WHERE p.post_id = t.topic_last_post_id
AND p.post_time > " . $userdata['user_lastvisit'] . "
- AND t.topic_moved_id = 0";
- if(!$new_topic_ids = $db->sql_query($sql))
+ AND t.topic_moved_id = 0";
+ if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Could not query new topic information", "", __LINE__, __FILE__, $sql);
}
- while( $topic_data = $db->sql_fetchrow($new_topic_ids) )
+ while( $topic_data = $db->sql_fetchrow($result) )
{
$new_topic_data[$topic_data['forum_id']][$topic_data['topic_id']] = $topic_data['post_time'];
}
@@ -227,43 +202,57 @@ if($total_categories = $db->sql_numrows($q_categories))
//
// Obtain list of moderators of each forum
+ // First users, then groups ... broken into two queries
//
- $sql = "SELECT aa.forum_id, g.group_name, g.group_id, g.group_single_user, u.user_id, u.username
+ $sql = "SELECT aa.forum_id, u.user_id, u.username
FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u
- WHERE aa.auth_mod = " . TRUE . "
+ WHERE aa.auth_mod = " . TRUE . "
+ AND g.group_single_user = 1
AND ug.group_id = aa.group_id
AND g.group_id = aa.group_id
AND u.user_id = ug.user_id
- ORDER BY aa.forum_id, g.group_id, u.user_id";
- if(!$q_forum_mods = $db->sql_query($sql))
+ GROUP BY u.user_id, u.username, aa.forum_id
+ ORDER BY aa.forum_id, u.user_id";
+ if(!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, "Could not query forum moderator information", "", __LINE__, __FILE__, $sql);
}
- $forum_mods_list = $db->sql_fetchrowset($q_forum_mods);
- for($i = 0; $i < count($forum_mods_list); $i++)
+ $forum_moderators = array();
+ while( $row = $db->sql_fetchrow($result) )
{
- if($forum_mods_list[$i]['group_single_user'] || !$forum_mods_list[$i]['group_id'])
- {
- $forum_mods_single_user[$forum_mods_list[$i]['forum_id']][] = 1;
+ $forum_moderators[$row['forum_id']][] = '' . $row['username'] . '';
+ }
- $forum_mods_name[$forum_mods_list[$i]['forum_id']][] = $forum_mods_list[$i]['username'];
- $forum_mods_id[$forum_mods_list[$i]['forum_id']][] = $forum_mods_list[$i]['user_id'];
- }
- else
- {
- $forum_mods_single_user[$forum_mods_list[$i]['forum_id']][] = 0;
+ $sql = "SELECT aa.forum_id, g.group_id, g.group_name
+ FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
+ WHERE aa.auth_mod = " . TRUE . "
+ AND g.group_single_user = 0
+ AND ug.group_id = aa.group_id
+ AND g.group_id = aa.group_id
+ GROUP BY g.group_id, g.group_name, aa.forum_id
+ ORDER BY aa.forum_id, g.group_id";
+ if(!$result = $db->sql_query($sql))
+ {
+ message_die(GENERAL_ERROR, "Could not query forum moderator information", "", __LINE__, __FILE__, $sql);
+ }
- $forum_mods_name[$forum_mods_list[$i]['forum_id']][] = $forum_mods_list[$i]['group_name'];
- $forum_mods_id[$forum_mods_list[$i]['forum_id']][] = $forum_mods_list[$i]['group_id'];
- }
+ while( $row = $db->sql_fetchrow($result) )
+ {
+ $forum_moderators[$row['forum_id']][] = '' . $row['group_name'] . '';
}
//
// Find which forums are visible for this user
//
$is_auth_ary = array();
- $is_auth_ary = auth(AUTH_VIEW, AUTH_LIST_ALL, $userdata, $forum_rows);
+ $is_auth_ary = auth(AUTH_VIEW, AUTH_LIST_ALL, $userdata, $forum_data);
+
+ //
+ // Start output of page
+ //
+ $page_title = $lang['Index'];
+ include($phpbb_root_path . 'includes/page_header.'.$phpEx);
$template->set_filenames(array(
"body" => "index_body.tpl")
@@ -272,7 +261,7 @@ if($total_categories = $db->sql_numrows($q_categories))
$template->assign_vars(array(
"TOTAL_POSTS" => sprintf($l_total_post_s, $total_posts),
"TOTAL_USERS" => sprintf($l_total_user_s, $total_users),
- "NEWEST_USER" => sprintf($lang['Newest_user'], "", $newest_user, ""),
+ "NEWEST_USER" => sprintf($lang['Newest_user'], '', $newest_user, ''),
"FORUM_IMG" => $images['forum'],
"FORUM_NEW_IMG" => $images['forum_new'],
@@ -288,170 +277,146 @@ if($total_categories = $db->sql_numrows($q_categories))
//
// Okay, let's build the index
//
- $gen_cat = array();
-
for($i = 0; $i < $total_categories; $i++)
{
$cat_id = $category_rows[$i]['cat_id'];
- $count = 0;
-
+ //
+ // Should we display this category/forum set?
+ //
+ $display_forums = false;
for($j = 0; $j < $total_forums; $j++)
{
- $forum_id = $forum_rows[$j]['forum_id'];
-
- if( $is_auth_ary[$forum_id]['auth_view'] && ( ( $forum_rows[$j]['cat_id'] == $cat_id && $viewcat == -1 ) || $cat_id == $viewcat) )
+ if( $is_auth_ary[$forum_data[$j]['forum_id']]['auth_view'] && $forum_data[$j]['cat_id'] == $cat_id )
{
- if(!$gen_cat[$cat_id])
- {
- $template->assign_block_vars("catrow", array(
- "CAT_ID" => $cat_id,
- "CAT_DESC" => $category_rows[$i]['cat_title'],
- "U_VIEWCAT" => append_sid("index.$phpEx?" . POST_CAT_URL . "=$cat_id"))
- );
- $gen_cat[$cat_id] = 1;
- }
+ $display_forums = true;
+ }
+ }
- if($forum_rows[$j]['forum_status'] == FORUM_LOCKED)
+ //
+ // Yes, we should, so first dump out the category
+ // title, then, if appropriate the forum list
+ //
+ if( $display_forums )
+ {
+ $template->assign_block_vars("catrow", array(
+ "CAT_ID" => $cat_id,
+ "CAT_DESC" => $category_rows[$i]['cat_title'],
+ "U_VIEWCAT" => append_sid("index.$phpEx?" . POST_CAT_URL . "=$cat_id"))
+ );
+
+ if( $viewcat == $cat_id || $viewcat == -1 )
+ {
+ for($j = 0; $j < $total_forums; $j++)
{
- $folder_image = "
";
- }
- else
- {
- $unread_topics = false;
- if( $userdata['session_logged_in'] )
+ if( $forum_data[$j]['cat_id'] == $cat_id )
{
- if( count($new_topic_data[$forum_id]) )
+ $forum_id = $forum_data[$j]['forum_id'];
+
+ if( $is_auth_ary[$forum_id]['auth_view'] )
{
- $forum_last_post_time = 0;
-
- while( list($check_topic_id, $check_post_time) = @each($new_topic_data[$forum_id]) )
+ if( $forum_data[$j]['forum_status'] == FORUM_LOCKED )
{
- if( empty($tracking_topics['' . $check_topic_id . '']) )
+ $folder_image = '
';
+ }
+ else
+ {
+ $unread_topics = false;
+ if( $userdata['session_logged_in'] )
{
- $unread_topics = true;
- $forum_last_post_time = max($check_post_time, $forum_last_post_time);
-
- }
- else
- {
- if( $tracking_topics['' . $check_topic_id . ''] < $check_post_time )
+ if( count($new_topic_data[$forum_id]) )
{
- $unread_topics = true;
- $forum_last_post_time = max($check_post_time, $forum_last_post_time);
+ $forum_last_post_time = 0;
+
+ while( list($check_topic_id, $check_post_time) = @each($new_topic_data[$forum_id]) )
+ {
+ if( empty($tracking_topics['' . $check_topic_id . '']) )
+ {
+ $unread_topics = true;
+ $forum_last_post_time = max($check_post_time, $forum_last_post_time);
+
+ }
+ else
+ {
+ if( $tracking_topics['' . $check_topic_id . ''] < $check_post_time )
+ {
+ $unread_topics = true;
+ $forum_last_post_time = max($check_post_time, $forum_last_post_time);
+ }
+ }
+ }
+
+ if( !empty($tracking_forums['' . $forum_id . '']) )
+ {
+ if( $tracking_forums['' . $forum_id . ''] > $forum_last_post_time )
+ {
+ $unread_topics = false;
+ }
+ }
+
+ if( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all']) )
+ {
+ if( $HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all'] > $forum_last_post_time )
+ {
+ $unread_topics = false;
+ }
+ }
+
}
}
+
+ $folder_image = ( $unread_topics ) ? '
' : '
';
}
- if( !empty($tracking_forums['' . $forum_id . '']) )
+ $posts = $forum_data[$j]['forum_posts'];
+ $topics = $forum_data[$j]['forum_topics'];
+
+ if( $forum_data[$j]['forum_last_post_id'] )
{
- if( $tracking_forums['' . $forum_id . ''] > $forum_last_post_time )
- {
- $unread_topics = false;
- }
- }
+ $last_post_time = create_date($board_config['default_dateformat'], $forum_data[$j]['post_time'], $board_config['board_timezone']);
- if( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_f_all"]) )
+ $last_post = $last_post_time . "
";
+
+ $last_post .= ( $forum_data[$j]['user_id'] == ANONYMOUS ) ? ( ($forum_data[$j]['post_username'] != "" ) ? $forum_data[$j]['post_username'] . " " : $lang['Guest'] . " " ) : '' . $forum_data[$j]['username'] . ' ';
+
+ $last_post .= '
';
+ }
+ else
{
- if( $HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_f_all"] > $forum_last_post_time )
- {
- $unread_topics = false;
- }
+ $last_post = $lang['No_Posts'];
}
+ if( count($forum_moderators[$forum_id]) > 0 )
+ {
+ $l_moderators = ( count($forum_moderators[$forum_id]) == 1 ) ? $lang['Moderator'] : $lang['Moderators'];
+ $moderator_list = implode(", ", $forum_moderators[$forum_id]);
+ }
+ else
+ {
+ $l_moderators = " ";
+ $moderator_list = " ";
+ }
+
+ $row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
+ $row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
+
+ $template->assign_block_vars("catrow.forumrow", array(
+ "ROW_COLOR" => "#" . $row_color,
+ "ROW_CLASS" => $row_class,
+ "FOLDER" => $folder_image,
+ "FORUM_NAME" => $forum_data[$j]['forum_name'],
+ "FORUM_DESC" => $forum_data[$j]['forum_desc'],
+ "POSTS" => $forum_data[$j]['forum_posts'],
+ "TOPICS" => $forum_data[$j]['forum_topics'],
+ "LAST_POST" => $last_post,
+ "MODERATORS" => $moderator_list,
+
+ "L_MODERATOR" => $l_moderators,
+
+ "U_VIEWFORUM" => append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id"))
+ );
}
}
-
- $folder_image = ( $unread_topics ) ? "
" : "
";
- }
-
- $posts = $forum_rows[$j]['forum_posts'];
- $topics = $forum_rows[$j]['forum_topics'];
-
- if( $forum_rows[$j]['username'] != "" && $forum_rows[$j]['post_time'] > 0 )
- {
- $last_post_time = create_date($board_config['default_dateformat'], $forum_rows[$j]['post_time'], $board_config['board_timezone']);
-
- $last_post = $last_post_time . "
";
-
- $last_post .= ( $forum_rows[$j]['user_id'] == ANONYMOUS ) ? ( ($forum_rows[$j]['post_username'] != "" ) ? $forum_rows[$j]['post_username'] . " " : $lang['Guest'] . " " ) : "" . $forum_rows[$j]['username'] . " ";
-
- $last_post .= "
";
- }
- else
- {
- $last_post = $lang['No_Posts'];
- }
-
- $mod_count = 0;
- $moderators_links = "";
- for($mods = 0; $mods < count($forum_mods_name[$forum_id]); $mods++)
- {
- if( !strstr($moderators_links, $forum_mods_name[$forum_id][$mods]) )
- {
- if($mods > 0)
- {
- $moderators_links .= ", ";
- }
-
- if( $forum_mods_single_user[$forum_id][$mods])
- {
- $moderators_links .= "" . $forum_mods_name[$forum_id][$mods] . "";
- }
- else
- {
- $moderators_links .= "" . $forum_mods_name[$forum_id][$mods] . "";
- }
-
- $mod_count++;
- }
- }
-
- if( $moderators_links == "" )
- {
- $moderators_links = " ";
- }
-
- if( $mods > 0 )
- {
- $l_moderators = ( $mods == 1 ) ? $lang['Moderator'] : $lang['Moderators'];
- }
- else
- {
- $l_moderators = " ";
- }
-
- $row_color = ( !($count % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
- $row_class = ( !($count % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
-
- $template->assign_block_vars("catrow.forumrow", array(
- "ROW_COLOR" => "#" . $row_color,
- "ROW_CLASS" => $row_class,
- "FOLDER" => $folder_image,
- "FORUM_NAME" => $forum_rows[$j]['forum_name'],
- "FORUM_DESC" => $forum_rows[$j]['forum_desc'],
- "POSTS" => $forum_rows[$j]['forum_posts'],
- "TOPICS" => $forum_rows[$j]['forum_topics'],
- "LAST_POST" => $last_post,
- "MODERATORS" => $moderators_links,
-
- "L_MODERATOR" => $l_moderators,
-
- "U_VIEWFORUM" => append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id"))
- );
-
- $count++;
- }
- else if($viewcat != -1)
- {
- if(!$gen_cat[$cat_id])
- {
- $template->assign_block_vars("catrow", array(
- "CAT_ID" => $cat_id,
- "CAT_DESC" => $category_rows[$i]['cat_title'],
- "U_VIEWCAT" => append_sid("index.$phpEx?" . POST_CAT_URL . "=$cat_id"))
- );
- $gen_cat[$cat_id] = 1;
}
}
}
@@ -463,14 +428,6 @@ else
message_die(GENERAL_MESSAGE, $lang['No_forums']);
}
-//
-// Output page header and open the index body template
-// we do this here because of the mark topics read cookie
-// code
-//
-$page_title = $lang['Index'];
-include($phpbb_root_path . 'includes/page_header.'.$phpEx);
-
//
// Generate the page
//