diff options
author | Joas Schilling <nickvergessen@gmx.de> | 2010-03-11 23:53:40 +0100 |
---|---|---|
committer | Joas Schilling <nickvergessen@gmx.de> | 2011-04-07 13:47:08 +0200 |
commit | 712a51caeadef42eff9131ed2e97ee2ab5291888 (patch) | |
tree | 8f9a32146f86156bcc1cd694143e164bc0832631 /phpBB/viewforum.php | |
parent | 9265ffbcd5c4cff9c9e4e775d7d8d4877b86fbb8 (diff) | |
download | forums-712a51caeadef42eff9131ed2e97ee2ab5291888.tar forums-712a51caeadef42eff9131ed2e97ee2ab5291888.tar.gz forums-712a51caeadef42eff9131ed2e97ee2ab5291888.tar.bz2 forums-712a51caeadef42eff9131ed2e97ee2ab5291888.tar.xz forums-712a51caeadef42eff9131ed2e97ee2ab5291888.zip |
[ticket/9684] Fix Forum/Topic-Tracking for global announcements
Should be ready for intensive testing now.
PHPBB3-9684
Diffstat (limited to 'phpBB/viewforum.php')
-rw-r--r-- | phpBB/viewforum.php | 75 |
1 files changed, 48 insertions, 27 deletions
diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php index fbc4d63405..0c673f1b74 100644 --- a/phpBB/viewforum.php +++ b/phpBB/viewforum.php @@ -324,7 +324,7 @@ $template->assign_vars(array( $icons = $cache->obtain_icons(); // Grab all topic data -$rowset = $announcement_list = $topic_list = $global_announce_list = array(); +$rowset = $announcement_list = $topic_list = $global_announce_forums = array(); $sql_array = array( 'SELECT' => 't.*', @@ -383,18 +383,40 @@ if ($forum_data['forum_type'] == FORUM_POST) $rowset[$row['topic_id']] = $row; $announcement_list[] = $row['topic_id']; - if ($row['topic_type'] == POST_GLOBAL) + if ($forum_id == $row['forum_id']) { - $global_announce_list[$row['topic_id']] = true; + $topics_count--; } else { - $topics_count--; + $global_announce_forums[] = $row['forum_id']; } } $db->sql_freeresult($result); } +$forum_tracking_info = array(); + +if ($user->data['is_registered']) +{ + $forum_tracking_info[$forum_id] = $forum_data['mark_time']; + + if (!empty($global_announce_forums) && $config['load_db_lastread']) + { + $sql = 'SELECT forum_id, mark_time + FROM ' . FORUMS_TRACK_TABLE . ' + WHERE ' . $db->sql_in_set('forum_id', $global_announce_forums) . ' + AND user_id = ' . $user->data['user_id']; + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + $forum_tracking_info[$row['forum_id']] = $row['mark_time']; + } + $db->sql_freeresult($result); + } +} + // If the user is trying to reach late pages, start searching from the end $store_reverse = false; $sql_limit = $config['topics_per_page']; @@ -552,45 +574,44 @@ if (sizeof($topic_list)) $mark_forum_read = true; $mark_time_forum = 0; - // Active topics? - if ($s_display_active && sizeof($active_forum_ary)) + // Generate topic forum list... + $topic_forum_list = array(); + foreach ($rowset as $t_id => $row) { - // Generate topic forum list... - $topic_forum_list = array(); - foreach ($rowset as $t_id => $row) + if (isset($forum_tracking_info[$row['forum_id']])) { - $topic_forum_list[$row['forum_id']]['forum_mark_time'] = ($config['load_db_lastread'] && $user->data['is_registered'] && isset($row['forum_mark_time'])) ? $row['forum_mark_time'] : 0; - $topic_forum_list[$row['forum_id']]['topics'][] = $t_id; + $row['forum_mark_time'] = $forum_tracking_info[$row['forum_id']]; } - if ($config['load_db_lastread'] && $user->data['is_registered']) + $topic_forum_list[$row['forum_id']]['forum_mark_time'] = ($config['load_db_lastread'] && $user->data['is_registered'] && isset($row['forum_mark_time'])) ? $row['forum_mark_time'] : 0; + $topic_forum_list[$row['forum_id']]['topics'][] = (int) $t_id; + } + + if ($config['load_db_lastread'] && $user->data['is_registered']) + { + foreach ($topic_forum_list as $f_id => $topic_row) { - foreach ($topic_forum_list as $f_id => $topic_row) - { - $topic_tracking_info += get_topic_tracking($f_id, $topic_row['topics'], $rowset, array($f_id => $topic_row['forum_mark_time']), false); - } + $topic_tracking_info += get_topic_tracking($f_id, $topic_row['topics'], $rowset, array($f_id => $topic_row['forum_mark_time'])); } - else if ($config['load_anon_lastread'] || $user->data['is_registered']) + } + else if ($config['load_anon_lastread'] || $user->data['is_registered']) + { + foreach ($topic_forum_list as $f_id => $topic_row) { - foreach ($topic_forum_list as $f_id => $topic_row) - { - $topic_tracking_info += get_complete_topic_tracking($f_id, $topic_row['topics'], false); - } + $topic_tracking_info += get_complete_topic_tracking($f_id, $topic_row['topics']); } - - unset($topic_forum_list); } - else + + unset($topic_forum_list); + + if (!$s_display_active) { if ($config['load_db_lastread'] && $user->data['is_registered']) { - $topic_tracking_info = get_topic_tracking($forum_id, $topic_list, $rowset, array($forum_id => $forum_data['mark_time']), $global_announce_list); $mark_time_forum = (!empty($forum_data['mark_time'])) ? $forum_data['mark_time'] : $user->data['user_lastmark']; } else if ($config['load_anon_lastread'] || $user->data['is_registered']) { - $topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_list, $global_announce_list); - if (!$user->data['is_registered']) { $user->data['user_lastmark'] = (isset($tracking_topics['l'])) ? (int) (base_convert($tracking_topics['l'], 36, 10) + $config['board_startdate']) : 0; |