diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php index cab3c0ea1e..b79c159231 100644 --- a/phpBB/viewforum.php +++ b/phpBB/viewforum.php @@ -28,18 +28,21 @@ $pagetype = "viewforum"; $page_title = "View Forum - $forum_name"; // -// Obtain which forum id is required +// Start initial var setup // -if(!isset($HTTP_GET_VARS['forum']) && !isset($HTTP_POST_VARS['forum'])) // For backward compatibility +if( isset($HTTP_GET_VARS[POST_FORUM_URL]) || isset($HTTP_POST_VARS[POST_FORUM_URL]) ) { - $forum_id = ($HTTP_GET_VARS[POST_FORUM_URL]) ? $HTTP_GET_VARS[POST_FORUM_URL] : $HTTP_POST_VARS[POST_FORUM_URL]; + $forum_id = (isset($HTTP_GET_VARS[POST_FORUM_URL])) ? $HTTP_GET_VARS[POST_FORUM_URL] : $HTTP_POST_VARS[POST_FORUM_URL]; } else { - $forum_id = ($HTTP_GET_VARS['forum']) ? $HTTP_GET_VARS['forum'] : $HTTP_POST_VARS['forum']; + $forum_id = ""; } $start = (isset($HTTP_GET_VARS['start'])) ? $HTTP_GET_VARS['start'] : 0; +// +// End initial var setup +// // // Start session management @@ -66,19 +69,21 @@ if(isset($forum_id)) } else { - message_die(GENERAL_MESSAGE, "You have reached this page in error, please go back and try again"); + message_die(GENERAL_MESSAGE, $lang['Reached_on_error']); } // -// If the query doesn't return any rows this -// isn't a valid forum. Inform the user. +// If the query doesn't return any rows this isn't a valid forum. Inform +// the user. // if(!$total_rows = $db->sql_numrows($result)) { - message_die(GENERAL_MESSAGE, "The forum you selected does not exist, please go back and try again."); + message_die(GENERAL_MESSAGE, $lang['Forum_not_exist']); } $forum_row = $db->sql_fetchrow($result); +$forum_name = stripslashes($forum_row['forum_name']); + // // Start auth check // @@ -112,12 +117,6 @@ if( ( $is_auth['auth_mod'] || $is_auth['auth_admin'] ) && $board_config['prune_e // End of forum prune // -$forum_name = stripslashes($forum_row['forum_name']); -if(empty($HTTP_POST_VARS['postdays'])) -{ - $topics_count = $forum_row['forum_topics']; -} - // // Obtain list of moderators of this forum // @@ -131,15 +130,17 @@ if(!$result_mods = $db->sql_query($sql)) { message_die(GENERAL_ERROR, "Couldn't obtain forums information.", "", __LINE__, __FILE__, $sql); } -$total_mods = $db->sql_numrows($result_mods); -if($total_mods) + +if( $total_mods = $db->sql_numrows($result_mods) ) { $mods_rowset = $db->sql_fetchrowset($result_mods); for($i = 0; $i < $total_mods; $i++) { if($i > 0) + { $forum_moderators .= ", "; + } $forum_moderators .= "" . $mods_rowset[$i]['username'] . ""; } @@ -159,15 +160,15 @@ $previous_days_text = array($lang['All_Topics'], "1 " . $lang['Day'], "7 " . $la if(!empty($HTTP_POST_VARS['postdays']) || !empty($HTTP_GET_VARS['postdays'])) { - $post_days = (!empty($HTTP_POST_VARS['postdays'])) ? $HTTP_POST_VARS['postdays'] : $HTTP_GET_VARS['postdays']; $min_post_time = time() - ($post_days * 86400); - $sql = "SELECT COUNT(*) AS forum_topics - FROM " . TOPICS_TABLE . " - WHERE forum_id = $forum_id - AND topic_time > $min_post_time - OR topic_type = " . POST_ANNOUNCE; + $sql = "SELECT COUNT(t.topic_id) AS forum_topics + FROM " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p + WHERE t.forum_id = $forum_id + AND p.post_id = t.topic_last_post_id + AND p.post_time > $min_post_time + OR t.topic_type = " . POST_ANNOUNCE; if(!$result = $db->sql_query($sql)) { @@ -175,7 +176,7 @@ if(!empty($HTTP_POST_VARS['postdays']) || !empty($HTTP_GET_VARS['postdays'])) } $topics_count = $db->sql_fetchfield("forum_topics", -1, $result); - $limit_posts_time = "AND ( t.topic_time > $min_post_time OR t.topic_type = " . POST_ANNOUNCE . " ) "; + $limit_posts_time = "AND ( p.post_time > $min_post_time OR t.topic_type = " . POST_ANNOUNCE . " ) "; if(!empty($HTTP_POST_VARS['postdays'])) { @@ -184,6 +185,8 @@ if(!empty($HTTP_POST_VARS['postdays']) || !empty($HTTP_GET_VARS['postdays'])) } else { + $topics_count = $forum_row['forum_topics']; + $limit_posts_time = ""; $post_days = 0; } @@ -197,8 +200,8 @@ for($i = 0; $i < count($previous_days); $i++) $select_post_days .= ""; // -// Grab all the basic data for -// this forum +// Grab all the basic data (all topics except global announcements) +// for this forum // $sql = "SELECT t.*, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_time, p.post_username FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . USERS_TABLE . " u2 @@ -218,10 +221,10 @@ if(!$t_result = $db->sql_query($sql)) $total_topics = $db->sql_numrows($t_result); // -// Post URL generation for -// templating vars +// Post URL generation for templating vars // $post_new_topic_url = append_sid("posting.$phpEx?mode=newtopic&" . POST_FORUM_URL . "=$forum_id"); + $template->assign_vars(array( "L_DISPLAY_TOPICS" => $lang['Display_topics'], "U_POST_NEW_TOPIC" => $post_new_topic_url, @@ -230,8 +233,7 @@ $template->assign_vars(array( ); // -// Dump out the page header and -// load viewforum template +// Dump out the page header and load viewforum template // include('includes/page_header.'.$phpEx); @@ -263,50 +265,12 @@ $template->assign_vars(array( if($total_topics) { $topic_rowset = $db->sql_fetchrowset($t_result); -/* - // - // This code allows for individual topic - // read tracking, on small, low volume sites - // it'll probably work very well. However, for - // busy sites the use of a text field in the DB - // combined with the additional UPDATE's required - // in viewtopic may be unacceptable. So, by default - // this code is off, however you may want to play - // ... - // - // psoTFX - // - if($userdata['user_id'] != ANONYMOUS) + + for($i = 0; $i < $total_topics; $i++) { - $unread_topic_list = unserialize($userdata['user_topics_unvisited']); + $topic_title = stripslashes($topic_rowset[$i]['topic_title']); - $last_update_time = (isset($unread_topic_list['lastupdate'])) ? $unread_topic_list['lastupdate'] : $userdata['session_last_visit']; - - for($x = 0; $x < $total_topics; $x++) - { - if($topic_rowset[$x]['topic_time'] > $last_update_time) - { - $unread_topic_list[$forum_id][$topic_rowset[$x]['topic_id']] = 1; - } - } - - $unread_topic_list['lastupdate'] = time(); - - $sql = "UPDATE " . USERS_TABLE . " - SET user_topics_unvisited = '" . serialize($unread_topic_list) . "' - WHERE user_id = " . $userdata['user_id']; - if(!$s_topic_times = $db->sql_query($sql)) - { - error_die(SQL_QUERY, "Could not update user topics list.", __LINE__, __FILE__); - } - } -*/ - - for($x = 0; $x < $total_topics; $x++) - { - $topic_title = stripslashes($topic_rowset[$x]['topic_title']); - - $topic_type = $topic_rowset[$x]['topic_type']; + $topic_type = $topic_rowset[$i]['topic_type']; if($topic_type == POST_ANNOUNCE) { @@ -321,21 +285,22 @@ if($total_topics) $topic_type = ""; } - $topic_id = $topic_rowset[$x]['topic_id']; + $topic_id = $topic_rowset[$i]['topic_id']; + + $replies = $topic_rowset[$i]['topic_replies']; - $replies = $topic_rowset[$x]['topic_replies']; if($replies > $board_config['posts_per_page']) { $goto_page = "   (" . $lang['Goto_page'] . ": "; $times = 1; - for($i = 0; $i < ($replies + 1); $i += $board_config['posts_per_page']) + for($j = 0; $j < $replies + 1; $j += $board_config['posts_per_page']) { if($times > 4) { - if(($i + $board_config['posts_per_page']) >= ($replies + 1)) + if( $j + $board_config['posts_per_page'] >= $replies + 1 ) { - $goto_page .=" ... $times"; + $goto_page .= " ... $times"; } } else @@ -344,7 +309,7 @@ if($total_topics) { $goto_page .= ", "; } - $goto_page.= "$times"; + $goto_page .= "$times"; } $times++; } @@ -355,51 +320,43 @@ if($total_topics) $goto_page = ""; } -// if($userdata['user_id'] != ANONYMOUS) -// { -// $folder_image = (isset($unread_topic_list[$forum_id][$topic_id])) ? "" : ""; -// } -// else -// { - if($topic_rowset[$x]['topic_status'] == TOPIC_LOCKED) - { - $folder_image = "\"Topic"; - } - else - { - if($userdata['session_start'] == $userdata['session_time']) - { - $folder_image = ($topic_rowset[$x]['post_time'] > $userdata['session_last_visit']) ? "" : ""; - } - else - { - $folder_image = ($topic_rowset[$x]['post_time'] > $userdata['session_time'] - 300) ? "" : ""; - } - } - -// } - - $view_topic_url = append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=" . $topic_id . "&" . $replies); - - $topic_poster = stripslashes($topic_rowset[$x]['username']); - $topic_poster_profile_url = append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL."=" . $topic_rowset[$x]['user_id']); - - $last_post_time = create_date($board_config['default_dateformat'], $topic_rowset[$x]['post_time'], $board_config['default_timezone']); - - if($topic_rowset[$x]['id2'] == ANONYMOUS && $topic_rowset[$x]['post_username'] != '') - { - $last_post_user = $topic_rowset[$x]['post_username']; + if($topic_rowset[$i]['topic_status'] == TOPIC_LOCKED) + { + $folder_image = "\"Topic"; } else { - $last_post_user = $topic_rowset[$x]['user2']; + if($userdata['session_start'] >= $userdata['session_time'] - 300) + { + $folder_image = ($topic_rowset[$i]['post_time'] > $userdata['session_last_visit']) ? "" : ""; + } + else + { + $folder_image = ($topic_rowset[$i]['post_time'] > $userdata['session_time'] - 300) ? "" : ""; + } + } + + $view_topic_url = append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=" . $topic_id . "&" . $replies); + + $topic_poster = stripslashes($topic_rowset[$i]['username']); + $topic_poster_profile_url = append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $topic_rowset[$i]['user_id']); + + $last_post_time = create_date($board_config['default_dateformat'], $topic_rowset[$i]['post_time'], $board_config['default_timezone']); + + if($topic_rowset[$i]['id2'] == ANONYMOUS && $topic_rowset[$i]['post_username'] != '') + { + $last_post_user = $topic_rowset[$i]['post_username']; + } + else + { + $last_post_user = $topic_rowset[$i]['user2']; } $last_post = $last_post_time . "
by "; - $last_post .= "" . $last_post_user . " "; - $last_post .= "\"View"; + $last_post .= "" . $last_post_user . " "; + $last_post .= "\"View"; - $views = $topic_rowset[$x]['topic_views']; + $views = $topic_rowset[$i]['topic_views']; $template->assign_block_vars("topicrow", array( "FORUM_ID" => $forum_id, @@ -418,14 +375,18 @@ if($total_topics) ); } - $s_auth_can = "You " . (($is_auth['auth_read']) ? "can" : "cannot" ) . " read posts in this forum
"; - $s_auth_can .= "You " . (($is_auth['auth_post']) ? "can" : "cannot") . " add new topics to this forum
"; - $s_auth_can .= "You " . (($is_auth['auth_reply']) ? "can" : "cannot") . " reply to posts in this forum
"; - $s_auth_can .= "You " . (($is_auth['auth_edit']) ? "can" : "cannot") . " edit your posts in this forum
"; - $s_auth_can .= "You " . (($is_auth['auth_delete']) ? "can" : "cannot") . " delete your posts in this forum
"; + // + // User authorisation levels output + // + $s_auth_can = $lang['You'] . " " . ( ($is_auth['auth_read']) ? $lang['can'] : $lang['cannot'] ) . " " . $lang['read_posts'] . "
"; + $s_auth_can .= $lang['You'] . " " . ( ($is_auth['auth_post']) ? $lang['can'] : $lang['cannot'] ) . " " . $lang['post_topics'] . "
"; + $s_auth_can .= $lang['You'] . " " . ( ($is_auth['auth_reply']) ? $lang['can'] : $lang['cannot'] ) . " " . $lang['reply_posts'] . "
"; + $s_auth_can .= $lang['You'] . " " . ( ($is_auth['auth_edit']) ? $lang['can'] : $lang['cannot'] ) . " " . $lang['edit_posts'] . "
"; + $s_auth_can .= $lang['You'] . " " . ( ($is_auth['auth_delete']) ? $lang['can'] : $lang['cannot'] ) . " " . $lang['delete_posts'] . "
"; + if($is_auth['auth_mod'] || $userdata['user_level'] == ADMIN) { - $s_auth_can .= "You can moderate this forum
"; + $s_auth_can .= $lang['You'] . " " . $lang['can'] . " " . $lang['moderate_forum'] . "
"; } $template->assign_vars(array( @@ -434,6 +395,7 @@ if($total_topics) "TOTAL_PAGES" => ceil( $topics_count / $board_config['topics_per_page'] ), "S_AUTH_LIST" => $s_auth_can, + "S_NO_TOPICS" => FALSE, "L_OF" => $lang['of'], "L_PAGE" => $lang['Page'], @@ -444,9 +406,18 @@ if($total_topics) } else { +/* + $template->assign_vars(array( + "L_NO_TOPICS" => $lang['No_topics_post_one'], + + "S_AUTH_LIST" => $s_auth_can, + "S_NO_TOPICS" => TRUE) + ); + + $template->pparse("body"); +*/ // - // This will be present in the templates - // at some future point when if...else + // This will be present in the templates at some future point when if...else // constructs are available // message_die(GENERAL_MESSAGE, $lang['No_topics_post_one']);