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 = '' . $lang['Forum_locked'] . ''; + } + 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 ) ? '' . $lang['New_posts'] . '' : '' . $lang['No_new_posts'] . ''; } - 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 .= '' . $lang['View_latest_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 //