From: Ruslan U. <rx...@ph...> - 2009-07-26 10:17:11
|
Author: rxu Date: Sun Jul 26 11:16:52 2009 New Revision: 9855 Log: Fix r9755 for #46765 Authorised by: ToonArmy Modified: branches/phpBB-3_0_0/phpBB/includes/functions.php branches/phpBB-3_0_0/phpBB/search.php Modified: branches/phpBB-3_0_0/phpBB/includes/functions.php ============================================================================== *** branches/phpBB-3_0_0/phpBB/includes/functions.php (original) --- branches/phpBB-3_0_0/phpBB/includes/functions.php Sun Jul 26 11:16:52 2009 *************** *** 4138,4144 **** { global $config, $db, $user; ! if($user_id === false) { $user_id = $user->data['user_id']; } --- 4138,4144 ---- { global $config, $db, $user; ! if ($user_id === false) { $user_id = $user->data['user_id']; } *************** *** 4150,4174 **** { // List of the tracked forums (not ideal, hope the better way will be found) // This list is to fetch later the forums user never read (fully) before ! $sql = 'SELECT forum_id FROM ' . FORUMS_TRACK_TABLE . " WHERE user_id = {$user_id}"; $result = $db->sql_query($sql); ! while($row = $db->sql_fetchrow($result)) { $tracked_forums_list[] = $row['forum_id']; } $db->sql_freeresult($result); ! // Get list of the unread topics - on topics tracking as the first step ! $sql = 'SELECT t.topic_id, t.topic_last_post_time, tt.mark_time FROM ' . TOPICS_TABLE . ' t, ' . TOPICS_TRACK_TABLE . " tt WHERE t.topic_id = tt.topic_id AND t.topic_last_post_time >= tt.mark_time AND tt.user_id = {$user_id} ! $sql_extra"; $result = $db->sql_query($sql); ! while($row = $db->sql_fetchrow($result)) { ! if($row['topic_last_post_time'] == $row['mark_time']) { // Check if there're read topics for the forums having unread ones $read_topics_list[$row['topic_id']] = $row['mark_time']; --- 4150,4177 ---- { // List of the tracked forums (not ideal, hope the better way will be found) // This list is to fetch later the forums user never read (fully) before ! $sql = 'SELECT forum_id ! FROM ' . FORUMS_TRACK_TABLE . " WHERE user_id = {$user_id}"; $result = $db->sql_query($sql); ! while ($row = $db->sql_fetchrow($result)) { $tracked_forums_list[] = $row['forum_id']; } $db->sql_freeresult($result); ! // Get list of the unread topics - on topics tracking as the first step ! $sql = 'SELECT t.topic_id, t.topic_last_post_time, tt.mark_time ! FROM ' . TOPICS_TABLE . ' t, ' . TOPICS_TRACK_TABLE . " tt WHERE t.topic_id = tt.topic_id AND t.topic_last_post_time >= tt.mark_time AND tt.user_id = {$user_id} ! $sql_extra ! ORDER BY t.topic_last_post_time DESC"; $result = $db->sql_query($sql); ! while ($row = $db->sql_fetchrow($result)) { ! if ($row['topic_last_post_time'] == $row['mark_time']) { // Check if there're read topics for the forums having unread ones $read_topics_list[$row['topic_id']] = $row['mark_time']; *************** *** 4179,4211 **** } } $db->sql_freeresult($result); ! // Get the full list of the tracked topics $tracked_topics_list = array_merge(array_keys($unread_topics_list), array_keys($read_topics_list)); // Get list of the unread topics - on forums tracking as the second step // We don't take in account topics tracked before ! $sql = 'SELECT t.topic_id, ft.mark_time FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TRACK_TABLE . ' ft WHERE t.forum_id = ft.forum_id AND t.topic_last_post_time > ft.mark_time AND ' . $db->sql_in_set('t.topic_id', $tracked_topics_list, true, true) . " AND ft.user_id = {$user_id} ! $sql_extra"; $result = $db->sql_query($sql); ! while($row = $db->sql_fetchrow($result)) { $unread_topics_list[$row['topic_id']] = $row['mark_time']; } $db->sql_freeresult($result); ! // And the last step - find unread topics were not found before (that can mean a user has never read some forums) ! $sql = 'SELECT topic_id FROM ' . TOPICS_TABLE . " WHERE topic_last_post_time > {$user->data['user_lastmark']} AND " . $db->sql_in_set('topic_id', array_keys($unread_topics_list), true, true) . ' AND ' . $db->sql_in_set('forum_id', $tracked_forums_list, true, true) . " ! $sql_extra"; $result = $db->sql_query_limit($sql, 1000); ! while($row = $db->sql_fetchrow($result)) { $unread_topics_list[$row['topic_id']] = $user->data['user_lastmark']; } --- 4182,4222 ---- } } $db->sql_freeresult($result); ! // Get the full list of the tracked topics $tracked_topics_list = array_merge(array_keys($unread_topics_list), array_keys($read_topics_list)); // Get list of the unread topics - on forums tracking as the second step // We don't take in account topics tracked before ! $sql = 'SELECT t.topic_id, ft.mark_time ! FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TRACK_TABLE . ' ft WHERE t.forum_id = ft.forum_id AND t.topic_last_post_time > ft.mark_time AND ' . $db->sql_in_set('t.topic_id', $tracked_topics_list, true, true) . " AND ft.user_id = {$user_id} ! $sql_extra ! ORDER BY t.topic_last_post_time DESC"; $result = $db->sql_query($sql); ! while ($row = $db->sql_fetchrow($result)) { $unread_topics_list[$row['topic_id']] = $row['mark_time']; } $db->sql_freeresult($result); ! ! // Refresh the full list of the tracked topics ! unset($tracked_topics_list); ! $tracked_topics_list = array_merge(array_keys($unread_topics_list), array_keys($read_topics_list)); ! // And the last step - find unread topics were not found before (that can mean a user has never read some forums) ! $sql = 'SELECT topic_id ! FROM ' . TOPICS_TABLE . " WHERE topic_last_post_time > {$user->data['user_lastmark']} AND " . $db->sql_in_set('topic_id', array_keys($unread_topics_list), true, true) . ' AND ' . $db->sql_in_set('forum_id', $tracked_forums_list, true, true) . " ! $sql_extra ! ORDER BY topic_last_post_time DESC"; $result = $db->sql_query_limit($sql, 1000); ! while ($row = $db->sql_fetchrow($result)) { $unread_topics_list[$row['topic_id']] = $user->data['user_lastmark']; } Modified: branches/phpBB-3_0_0/phpBB/search.php ============================================================================== *** branches/phpBB-3_0_0/phpBB/search.php (original) --- branches/phpBB-3_0_0/phpBB/search.php Sun Jul 26 11:16:52 2009 *************** *** 381,387 **** $unread_list = array(); $unread_list = get_unread_topics_list(); ! if(!empty($unread_list)) { $sql = 'SELECT t.topic_id FROM ' . TOPICS_TABLE . ' t --- 381,387 ---- $unread_list = array(); $unread_list = get_unread_topics_list(); ! if (!empty($unread_list)) { $sql = 'SELECT t.topic_id FROM ' . TOPICS_TABLE . ' t |