Register
phpBB.com Wiki · Home Projects Help

root / trunk / phpBB / viewforum.php

1 2 thefinn
<?php
2 8146 acydburn
/**
3 5114 acydburn
*
4 5114 acydburn
* @package phpBB3
5 5114 acydburn
* @version $Id$
6 8146 acydburn
* @copyright (c) 2005 phpBB Group
7 8146 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5114 acydburn
*
9 5114 acydburn
*/
10 2 thefinn
11 5114 acydburn
/**
12 5883 acydburn
* @ignore
13 5114 acydburn
*/
14 2305 psotfx
define('IN_PHPBB', true);
15 8572 acydburn
if (!defined('PHPBB_ROOT_PATH')) define('PHPBB_ROOT_PATH', './');
16 8572 acydburn
if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
17 8572 acydburn
include(PHPBB_ROOT_PATH . 'common.' . PHP_EXT);
18 8572 acydburn
include(PHPBB_ROOT_PATH . 'includes/functions_display.' . PHP_EXT);
19 2 thefinn
20 2958 psotfx
// Start session
21 5247 acydburn
$user->session_begin();
22 3953 psotfx
$auth->acl($user->data);
23 2853 psotfx
24 4051 psotfx
// Start initial var setup
25 4704 psotfx
$forum_id	= request_var('f', 0);
26 4704 psotfx
$mark_read	= request_var('mark', '');
27 4704 psotfx
$start		= request_var('start', 0);
28 4051 psotfx
29 8771 Kellanved
$default_sort_days	= (!empty($user->data['user_topic_show_days'])) ? $user->data['user_topic_show_days'] : 0;
30 8771 Kellanved
$default_sort_key	= (!empty($user->data['user_topic_sortby_type'])) ? $user->data['user_topic_sortby_type'] : 't';
31 8771 Kellanved
$default_sort_dir	= (!empty($user->data['user_topic_sortby_dir'])) ? $user->data['user_topic_sortby_dir'] : 'd';
32 4025 psotfx
33 8753 Kellanved
$sort_days	= request_var('st', $default_sort_days);
34 8753 Kellanved
$sort_key	= request_var('sk', $default_sort_key);
35 8753 Kellanved
$sort_dir	= request_var('sd', $default_sort_dir);
36 8753 Kellanved
37 237 psotfx
// Check if the user has actually sent a forum ID with his/her request
38 237 psotfx
// If not give them a nice error page.
39 3007 ludovic_arnaud
if (!$forum_id)
40 34 thefinn
{
41 3531 psotfx
	trigger_error('NO_FORUM');
42 34 thefinn
}
43 525 psotfx
44 5313 acydburn
$sql_from = FORUMS_TABLE . ' f';
45 6256 acydburn
$lastread_select = '';
46 5313 acydburn
47 3531 psotfx
// Grab appropriate forum data
48 5272 acydburn
if ($config['load_db_lastread'] && $user->data['is_registered'])
49 237 psotfx
{
50 5313 acydburn
	$sql_from .= ' LEFT JOIN ' . FORUMS_TRACK_TABLE . ' ft ON (ft.user_id = ' . $user->data['user_id'] . '
51 5272 acydburn
		AND ft.forum_id = f.forum_id)';
52 6256 acydburn
	$lastread_select .= ', ft.mark_time';
53 3007 ludovic_arnaud
}
54 3007 ludovic_arnaud
55 5272 acydburn
if ($user->data['is_registered'])
56 5272 acydburn
{
57 5313 acydburn
	$sql_from .= ' LEFT JOIN ' . FORUMS_WATCH_TABLE . ' fw ON (fw.forum_id = f.forum_id AND fw.user_id = ' . $user->data['user_id'] . ')';
58 5272 acydburn
	$lastread_select .= ', fw.notify_status';
59 5272 acydburn
}
60 3953 psotfx
61 5272 acydburn
$sql = "SELECT f.* $lastread_select
62 5272 acydburn
	FROM $sql_from
63 5272 acydburn
	WHERE f.forum_id = $forum_id";
64 3007 ludovic_arnaud
$result = $db->sql_query($sql);
65 6015 acydburn
$forum_data = $db->sql_fetchrow($result);
66 6015 acydburn
$db->sql_freeresult($result);
67 3953 psotfx
68 6015 acydburn
if (!$forum_data)
69 3007 ludovic_arnaud
{
70 3531 psotfx
	trigger_error('NO_FORUM');
71 237 psotfx
}
72 281 psotfx
73 6015 acydburn
74 5558 acydburn
// Configure style, language, etc.
75 5558 acydburn
$user->setup('viewforum', $forum_data['forum_style']);
76 5558 acydburn
77 5394 davidmj
// Redirect to login upon emailed notification links
78 5394 davidmj
if (isset($_GET['e']) && !$user->data['is_registered'])
79 5394 davidmj
{
80 5394 davidmj
	login_box('', $user->lang['LOGIN_NOTIFY_FORUM']);
81 5394 davidmj
}
82 5394 davidmj
83 5394 davidmj
// Permissions check
84 7895 acydburn
if (!$auth->acl_gets('f_list', 'f_read', $forum_id) || ($forum_data['forum_type'] == FORUM_LINK && $forum_data['forum_link'] && !$auth->acl_get('f_read', $forum_id)))
85 5394 davidmj
{
86 5394 davidmj
	if ($user->data['user_id'] != ANONYMOUS)
87 5394 davidmj
	{
88 7919 kellanved
		trigger_error('SORRY_AUTH_READ');
89 5394 davidmj
	}
90 5394 davidmj
91 5394 davidmj
	login_box('', $user->lang['LOGIN_VIEWFORUM']);
92 5394 davidmj
}
93 5394 davidmj
94 7866 acydburn
// Forum is passworded ... check whether access has been granted to this
95 7866 acydburn
// user this session, if not show login box
96 7866 acydburn
if ($forum_data['forum_password'])
97 7866 acydburn
{
98 7866 acydburn
	login_forum_box($forum_data);
99 7866 acydburn
}
100 7866 acydburn
101 4972 psotfx
// Is this forum a link? ... User got here either because the
102 3961 psotfx
// number of clicks is being tracked or they guessed the id
103 6364 acydburn
if ($forum_data['forum_type'] == FORUM_LINK && $forum_data['forum_link'])
104 3961 psotfx
{
105 3961 psotfx
	// Does it have click tracking enabled?
106 6364 acydburn
	if ($forum_data['forum_flags'] & FORUM_FLAG_LINK_TRACK)
107 3961 psotfx
	{
108 3961 psotfx
		$sql = 'UPDATE ' . FORUMS_TABLE . '
109 4972 psotfx
			SET forum_posts = forum_posts + 1
110 3974 psotfx
			WHERE forum_id = ' . $forum_id;
111 3961 psotfx
		$db->sql_query($sql);
112 3961 psotfx
	}
113 3961 psotfx
114 8684 acydburn
	// We redirect to the url. The third parameter indicates that external redirects are allowed.
115 8684 acydburn
	redirect($forum_data['forum_link'], false, true);
116 8961 acydburn
	return;
117 3961 psotfx
}
118 3961 psotfx
119 3007 ludovic_arnaud
// Build navigation links
120 3359 ludovic_arnaud
generate_forum_nav($forum_data);
121 3007 ludovic_arnaud
122 4903 acydburn
// Forum Rules
123 6414 acydburn
if ($auth->acl_get('f_read', $forum_id))
124 6414 acydburn
{
125 6414 acydburn
	generate_forum_rules($forum_data);
126 6414 acydburn
}
127 4903 acydburn
128 3437 ludovic_arnaud
// Do we have subforums?
129 4802 psotfx
$active_forum_ary = $moderators = array();
130 3531 psotfx
131 3061 psotfx
if ($forum_data['left_id'] != $forum_data['right_id'] - 1)
132 3061 psotfx
{
133 5272 acydburn
	list($active_forum_ary, $moderators) = display_forums($forum_data, $config['load_moderators'], $config['load_moderators']);
134 3061 psotfx
}
135 3061 psotfx
else
136 3061 psotfx
{
137 4995 acydburn
	$template->assign_var('S_HAS_SUBFORUM', false);
138 5272 acydburn
	get_moderators($moderators, $forum_id);
139 3061 psotfx
}
140 3061 psotfx
141 5940 acydburn
// Dump out the page header and load viewforum template
142 5940 acydburn
page_header($user->lang['VIEW_FORUM'] . ' - ' . $forum_data['forum_name']);
143 5940 acydburn
144 5940 acydburn
$template->set_filenames(array(
145 5940 acydburn
	'body' => 'viewforum_body.html')
146 5940 acydburn
);
147 5940 acydburn
148 8572 acydburn
make_jumpbox(append_sid('viewforum'), $forum_id);
149 5940 acydburn
150 7220 acydburn
$template->assign_vars(array(
151 8572 acydburn
	'U_VIEW_FORUM'			=> append_sid('viewforum', "f=$forum_id&amp;start=$start"),
152 7220 acydburn
));
153 7220 acydburn
154 5940 acydburn
// Not postable forum or showing active topics?
155 6364 acydburn
if (!($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & FORUM_FLAG_ACTIVE_TOPICS) && $forum_data['forum_type'] == FORUM_CAT)))
156 3007 ludovic_arnaud
{
157 5940 acydburn
	page_footer();
158 5940 acydburn
}
159 3007 ludovic_arnaud
160 6609 acydburn
// Ok, if someone has only list-access, we only display the forum list.
161 6609 acydburn
// We also make this circumstance available to the template in case we want to display a notice. ;)
162 6414 acydburn
if (!$auth->acl_get('f_read', $forum_id))
163 6414 acydburn
{
164 6609 acydburn
	$template->assign_vars(array(
165 6609 acydburn
		'S_NO_READ_ACCESS'		=> true,
166 6609 acydburn
		'S_AUTOLOGIN_ENABLED'	=> ($config['allow_autologin']) ? true : false,
167 8572 acydburn
		'S_LOGIN_ACTION'		=> append_sid('ucp', 'mode=login') . '&amp;redirect=' . urlencode(str_replace('&amp;', '&', build_url(array('_f_')))),
168 6609 acydburn
	));
169 6609 acydburn
170 6414 acydburn
	page_footer();
171 6414 acydburn
}
172 6414 acydburn
173 5940 acydburn
// Handle marking posts
174 5940 acydburn
if ($mark_read == 'topics')
175 5940 acydburn
{
176 8905 Kellanved
	$token = request_var('hash', '');
177 8905 Kellanved
	if (check_link_hash($token, 'global'))
178 8905 Kellanved
	{
179 8905 Kellanved
		markread('topics', $forum_id);
180 8905 Kellanved
	}
181 8572 acydburn
	$redirect_url = append_sid('viewforum', 'f=' . $forum_id);
182 5940 acydburn
	meta_refresh(3, $redirect_url);
183 2913 ludovic_arnaud
184 5940 acydburn
	trigger_error($user->lang['TOPICS_MARKED'] . '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . $redirect_url . '">', '</a>'));
185 5940 acydburn
}
186 3989 psotfx
187 5940 acydburn
// Is a forum specific topic count required?
188 5940 acydburn
if ($forum_data['forum_topics_per_page'])
189 5940 acydburn
{
190 5940 acydburn
	$config['topics_per_page'] = $forum_data['forum_topics_per_page'];
191 5940 acydburn
}
192 1093 psotfx
193 5940 acydburn
// Do the forum Prune thang - cron type job ...
194 5940 acydburn
if ($forum_data['prune_next'] < time() && $forum_data['enable_prune'])
195 5940 acydburn
{
196 8572 acydburn
	$template->assign_var('RUN_CRON_TASK', '<img src="' . append_sid('cron', 'cron_type=prune_forum&amp;f=' . $forum_id) . '" alt="cron" width="1" height="1" />');
197 5940 acydburn
}
198 4080 psotfx
199 5940 acydburn
// Forum rules and subscription info
200 8351 acydburn
$s_watching_forum = array(
201 8351 acydburn
	'link'			=> '',
202 8351 acydburn
	'title'			=> '',
203 8351 acydburn
	'is_watching'	=> false,
204 8351 acydburn
);
205 7736 acydburn
206 8996 toonarmy
if (($config['email_enable'] || $config['jab_enable']) && $config['allow_forum_notify'] && $forum_data['forum_type'] == FORUM_POST && $auth->acl_get('f_subscribe', $forum_id))
207 5940 acydburn
{
208 5940 acydburn
	$notify_status = (isset($forum_data['notify_status'])) ? $forum_data['notify_status'] : NULL;
209 8351 acydburn
	watch_topic_forum('forum', $s_watching_forum, $user->data['user_id'], $forum_id, 0, $notify_status);
210 5940 acydburn
}
211 516 the_systech
212 5940 acydburn
$s_forum_rules = '';
213 5940 acydburn
gen_forum_auth_level('forum', $forum_id, $forum_data['forum_status']);
214 3531 psotfx
215 5940 acydburn
// Topic ordering options
216 5940 acydburn
$limit_days = array(0 => $user->lang['ALL_TOPICS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
217 3792 ludovic_arnaud
218 5940 acydburn
$sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 'r' => $user->lang['REPLIES'], 's' => $user->lang['SUBJECT'], 'v' => $user->lang['VIEWS']);
219 5940 acydburn
$sort_by_sql = array('a' => 't.topic_first_poster_name', 't' => 't.topic_last_post_time', 'r' => 't.topic_replies', 's' => 't.topic_title', 'v' => 't.topic_views');
220 5068 acydburn
221 5940 acydburn
$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
222 8753 Kellanved
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param, $default_sort_days, $default_sort_key, $default_sort_dir);
223 3922 psotfx
224 5940 acydburn
// Limit topics to certain time frame, obtain correct topic count
225 8212 naderman
// global announcements must not be counted, normal announcements have to
226 8212 naderman
// be counted, as forum_topics(_real) includes them
227 5940 acydburn
if ($sort_days)
228 5940 acydburn
{
229 5940 acydburn
	$min_post_time = time() - ($sort_days * 86400);
230 3922 psotfx
231 5940 acydburn
	$sql = 'SELECT COUNT(topic_id) AS num_topics
232 5940 acydburn
		FROM ' . TOPICS_TABLE . "
233 5940 acydburn
		WHERE forum_id = $forum_id
234 8212 naderman
			AND ((topic_type <> " . POST_GLOBAL . " AND topic_last_post_time >= $min_post_time)
235 8212 naderman
				OR topic_type = " . POST_ANNOUNCE . ")
236 5940 acydburn
		" . (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND topic_approved = 1');
237 5940 acydburn
	$result = $db->sql_query($sql);
238 5940 acydburn
	$topics_count = (int) $db->sql_fetchfield('num_topics');
239 5940 acydburn
	$db->sql_freeresult($result);
240 5940 acydburn
241 5940 acydburn
	if (isset($_POST['sort']))
242 5940 acydburn
	{
243 5940 acydburn
		$start = 0;
244 330 psotfx
	}
245 5940 acydburn
	$sql_limit_time = "AND t.topic_last_post_time >= $min_post_time";
246 6320 acydburn
247 6320 acydburn
	// Make sure we have information about day selection ready
248 6320 acydburn
	$template->assign_var('S_SORT_DAYS', true);
249 5940 acydburn
}
250 5940 acydburn
else
251 5940 acydburn
{
252 6538 acydburn
	$topics_count = ($auth->acl_get('m_approve', $forum_id)) ? $forum_data['forum_topics_real'] : $forum_data['forum_topics'];
253 5940 acydburn
	$sql_limit_time = '';
254 5940 acydburn
}
255 3531 psotfx
256 7456 acydburn
// Make sure $start is set to the last page if it exceeds the amount
257 7456 acydburn
if ($start < 0 || $start > $topics_count)
258 7456 acydburn
{
259 7456 acydburn
	$start = ($start < 0) ? 0 : floor(($topics_count - 1) / $config['topics_per_page']) * $config['topics_per_page'];
260 7456 acydburn
}
261 7456 acydburn
262 5940 acydburn
// Basic pagewide vars
263 5940 acydburn
$post_alt = ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->lang['FORUM_LOCKED'] : $user->lang['POST_NEW_TOPIC'];
264 2036 psotfx
265 5940 acydburn
// Display active topics?
266 6364 acydburn
$s_display_active = ($forum_data['forum_type'] == FORUM_CAT && ($forum_data['forum_flags'] & FORUM_FLAG_ACTIVE_TOPICS)) ? true : false;
267 822 psotfx
268 5940 acydburn
$template->assign_vars(array(
269 5940 acydburn
	'MODERATORS'	=> (!empty($moderators[$forum_id])) ? implode(', ', $moderators[$forum_id]) : '',
270 3640 ludovic_arnaud
271 6237 acydburn
	'POST_IMG'					=> ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->img('button_topic_locked', $post_alt) : $user->img('button_topic_new', $post_alt),
272 6237 acydburn
	'NEWEST_POST_IMG'			=> $user->img('icon_topic_newest', 'VIEW_NEWEST_POST'),
273 6237 acydburn
	'LAST_POST_IMG'				=> $user->img('icon_topic_latest', 'VIEW_LATEST_POST'),
274 6237 acydburn
	'FOLDER_IMG'				=> $user->img('topic_read', 'NO_NEW_POSTS'),
275 6237 acydburn
	'FOLDER_NEW_IMG'			=> $user->img('topic_unread', 'NEW_POSTS'),
276 6237 acydburn
	'FOLDER_HOT_IMG'			=> $user->img('topic_read_hot', 'NO_NEW_POSTS_HOT'),
277 6237 acydburn
	'FOLDER_HOT_NEW_IMG'		=> $user->img('topic_unread_hot', 'NEW_POSTS_HOT'),
278 6237 acydburn
	'FOLDER_LOCKED_IMG'			=> $user->img('topic_read_locked', 'NO_NEW_POSTS_LOCKED'),
279 6237 acydburn
	'FOLDER_LOCKED_NEW_IMG'		=> $user->img('topic_unread_locked', 'NEW_POSTS_LOCKED'),
280 6237 acydburn
	'FOLDER_STICKY_IMG'			=> $user->img('sticky_read', 'POST_STICKY'),
281 6237 acydburn
	'FOLDER_STICKY_NEW_IMG'		=> $user->img('sticky_unread', 'POST_STICKY'),
282 6237 acydburn
	'FOLDER_ANNOUNCE_IMG'		=> $user->img('announce_read', 'POST_ANNOUNCEMENT'),
283 6237 acydburn
	'FOLDER_ANNOUNCE_NEW_IMG'	=> $user->img('announce_unread', 'POST_ANNOUNCEMENT'),
284 6237 acydburn
	'FOLDER_MOVED_IMG'			=> $user->img('topic_moved', 'TOPIC_MOVED'),
285 6237 acydburn
	'REPORTED_IMG'				=> $user->img('icon_topic_reported', 'TOPIC_REPORTED'),
286 6237 acydburn
	'UNAPPROVED_IMG'			=> $user->img('icon_topic_unapproved', 'TOPIC_UNAPPROVED'),
287 6237 acydburn
	'GOTO_PAGE_IMG'				=> $user->img('icon_post_target', 'GOTO_PAGE'),
288 4984 acydburn
289 5940 acydburn
	'L_NO_TOPICS' 			=> ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->lang['POST_FORUM_LOCKED'] : $user->lang['NO_TOPICS'],
290 2036 psotfx
291 7884 acydburn
	'S_DISPLAY_POST_INFO'	=> ($forum_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false,
292 7884 acydburn
293 7884 acydburn
	'S_IS_POSTABLE'			=> ($forum_data['forum_type'] == FORUM_POST) ? true : false,
294 7884 acydburn
	'S_USER_CAN_POST'		=> ($auth->acl_get('f_post', $forum_id)) ? true : false,
295 5940 acydburn
	'S_DISPLAY_ACTIVE'		=> $s_display_active,
296 5940 acydburn
	'S_SELECT_SORT_DIR'		=> $s_sort_dir,
297 5940 acydburn
	'S_SELECT_SORT_KEY'		=> $s_sort_key,
298 5940 acydburn
	'S_SELECT_SORT_DAYS'	=> $s_limit_days,
299 5940 acydburn
	'S_TOPIC_ICONS'			=> ($s_display_active && sizeof($active_forum_ary)) ? max($active_forum_ary['enable_icons']) : (($forum_data['enable_icons']) ? true : false),
300 5940 acydburn
	'S_WATCH_FORUM_LINK'	=> $s_watching_forum['link'],
301 5940 acydburn
	'S_WATCH_FORUM_TITLE'	=> $s_watching_forum['title'],
302 7736 acydburn
	'S_WATCHING_FORUM'		=> $s_watching_forum['is_watching'],
303 8572 acydburn
	'S_FORUM_ACTION'		=> append_sid('viewforum', "f=$forum_id&amp;start=$start"),
304 7361 naderman
	'S_DISPLAY_SEARCHBOX'	=> ($auth->acl_get('u_search') && $auth->acl_get('f_search', $forum_id) && $config['load_search']) ? true : false,
305 8572 acydburn
	'S_SEARCHBOX_ACTION'	=> append_sid('search', 'fid[]=' . $forum_id),
306 6019 acydburn
	'S_SINGLE_MODERATOR'	=> (!empty($moderators[$forum_id]) && sizeof($moderators[$forum_id]) > 1) ? false : true,
307 8025 acydburn
	'S_IS_LOCKED'			=> ($forum_data['forum_status'] == ITEM_LOCKED) ? true : false,
308 8205 acydburn
	'S_VIEWFORUM'			=> true,
309 8905 Kellanved
310 8572 acydburn
	'U_MCP'				=> ($auth->acl_get('m_', $forum_id)) ? append_sid('mcp', "f=$forum_id&amp;i=main&amp;mode=forum_view", true, $user->session_id) : '',
311 8572 acydburn
	'U_POST_NEW_TOPIC'	=> ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS) ? append_sid('posting', 'mode=post&amp;f=' . $forum_id) : '',
312 8753 Kellanved
	'U_VIEW_FORUM'		=> append_sid('viewforum', "f=$forum_id" . ((strlen($u_sort_param)) ? "&amp;$u_sort_param" : '') . "&amp;start=$start"),
313 8905 Kellanved
	'U_MARK_TOPICS'		=> ($user->data['is_registered'] || $config['load_anon_lastread']) ? append_sid('viewforum', 'hash=' . generate_link_hash('global') . "&amp;f=$forum_id&amp;mark=topics") : '',
314 7749 acydburn
));
315 916 psotfx
316 5940 acydburn
// Grab icons
317 8295 davidmj
$icons = cache::obtain_icons();
318 887 psotfx
319 5940 acydburn
// Grab all topic data
320 5940 acydburn
$rowset = $announcement_list = $topic_list = $global_announce_list = array();
321 2972 psotfx
322 5940 acydburn
$sql_array = array(
323 5940 acydburn
	'SELECT'	=> 't.*',
324 5940 acydburn
	'FROM'		=> array(
325 5940 acydburn
		TOPICS_TABLE		=> 't'
326 5940 acydburn
	),
327 5940 acydburn
	'LEFT_JOIN'	=> array(),
328 5940 acydburn
);
329 3922 psotfx
330 5940 acydburn
$sql_approved = ($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND t.topic_approved = 1';
331 5940 acydburn
332 5940 acydburn
if ($user->data['is_registered'])
333 5940 acydburn
{
334 5940 acydburn
	if ($config['load_db_track'])
335 5272 acydburn
	{
336 5940 acydburn
		$sql_array['LEFT_JOIN'][] = array('FROM' => array(TOPICS_POSTED_TABLE => 'tp'), 'ON' => 'tp.topic_id = t.topic_id AND tp.user_id = ' . $user->data['user_id']);
337 5940 acydburn
		$sql_array['SELECT'] .= ', tp.topic_posted';
338 5272 acydburn
	}
339 5272 acydburn
340 5940 acydburn
	if ($config['load_db_lastread'])
341 4802 psotfx
	{
342 5940 acydburn
		$sql_array['LEFT_JOIN'][] = array('FROM' => array(TOPICS_TRACK_TABLE => 'tt'), 'ON' => 'tt.topic_id = t.topic_id AND tt.user_id = ' . $user->data['user_id']);
343 5940 acydburn
		$sql_array['SELECT'] .= ', tt.mark_time';
344 4509 ludovic_arnaud
345 5940 acydburn
		if ($s_display_active && sizeof($active_forum_ary))
346 4802 psotfx
		{
347 5940 acydburn
			$sql_array['LEFT_JOIN'][] = array('FROM' => array(FORUMS_TRACK_TABLE => 'ft'), 'ON' => 'ft.forum_id = t.forum_id AND ft.user_id = ' . $user->data['user_id']);
348 5940 acydburn
			$sql_array['SELECT'] .= ', ft.mark_time AS forum_mark_time';
349 4802 psotfx
		}
350 4509 ludovic_arnaud
	}
351 5940 acydburn
}
352 4509 ludovic_arnaud
353 5940 acydburn
if ($forum_data['forum_type'] == FORUM_POST)
354 5940 acydburn
{
355 5940 acydburn
	// Obtain announcements ... removed sort ordering, sort by time in all cases
356 5940 acydburn
	$sql = $db->sql_build_query('SELECT', array(
357 5940 acydburn
		'SELECT'	=> $sql_array['SELECT'],
358 5940 acydburn
		'FROM'		=> $sql_array['FROM'],
359 5940 acydburn
		'LEFT_JOIN'	=> $sql_array['LEFT_JOIN'],
360 8351 acydburn
361 5940 acydburn
		'WHERE'		=> 't.forum_id IN (' . $forum_id . ', 0)
362 5940 acydburn
			AND t.topic_type IN (' . POST_ANNOUNCE . ', ' . POST_GLOBAL . ')',
363 5940 acydburn
364 5940 acydburn
		'ORDER_BY'	=> 't.topic_time DESC',
365 5940 acydburn
	));
366 5940 acydburn
	$result = $db->sql_query($sql);
367 5940 acydburn
368 5940 acydburn
	while ($row = $db->sql_fetchrow($result))
369 4472 ludovic_arnaud
	{
370 5940 acydburn
		$rowset[$row['topic_id']] = $row;
371 5940 acydburn
		$announcement_list[] = $row['topic_id'];
372 4472 ludovic_arnaud
373 5940 acydburn
		if ($row['topic_type'] == POST_GLOBAL)
374 4472 ludovic_arnaud
		{
375 5940 acydburn
			$global_announce_list[$row['topic_id']] = true;
376 4472 ludovic_arnaud
		}
377 7384 acydburn
		else
378 7384 acydburn
		{
379 7384 acydburn
			$topics_count--;
380 7384 acydburn
		}
381 5940 acydburn
	}
382 5940 acydburn
	$db->sql_freeresult($result);
383 5940 acydburn
}
384 4472 ludovic_arnaud
385 5940 acydburn
// If the user is trying to reach late pages, start searching from the end
386 5940 acydburn
$store_reverse = false;
387 5940 acydburn
$sql_limit = $config['topics_per_page'];
388 5940 acydburn
if ($start > $topics_count / 2)
389 5940 acydburn
{
390 5940 acydburn
	$store_reverse = true;
391 5940 acydburn
392 5940 acydburn
	if ($start + $config['topics_per_page'] > $topics_count)
393 2536 psotfx
	{
394 5940 acydburn
		$sql_limit = min($config['topics_per_page'], max(1, $topics_count - $start));
395 2536 psotfx
	}
396 2536 psotfx
397 5940 acydburn
	// Select the sort order
398 5940 acydburn
	$sql_sort_order = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'ASC' : 'DESC');
399 5940 acydburn
	$sql_start = max(0, $topics_count - $sql_limit - $start);
400 5940 acydburn
}
401 5940 acydburn
else
402 5940 acydburn
{
403 5940 acydburn
	// Select the sort order
404 5940 acydburn
	$sql_sort_order = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'ASC');
405 5940 acydburn
	$sql_start = $start;
406 5940 acydburn
}
407 5140 acydburn
408 7106 acydburn
if ($forum_data['forum_type'] == FORUM_POST || !sizeof($active_forum_ary))
409 7106 acydburn
{
410 7106 acydburn
	$sql_where = 't.forum_id = ' . $forum_id;
411 7106 acydburn
}
412 7106 acydburn
else if (empty($active_forum_ary['exclude_forum_id']))
413 7106 acydburn
{
414 7106 acydburn
	$sql_where = $db->sql_in_set('t.forum_id', $active_forum_ary['forum_id']);
415 7106 acydburn
}
416 7106 acydburn
else
417 7106 acydburn
{
418 7106 acydburn
	$get_forum_ids = array_diff($active_forum_ary['forum_id'], $active_forum_ary['exclude_forum_id']);
419 8304 acydburn
	$sql_where = (sizeof($get_forum_ids)) ? $db->sql_in_set('t.forum_id', $get_forum_ids) : 't.forum_id = ' . $forum_id;
420 7106 acydburn
}
421 7106 acydburn
422 8301 davidmj
// Grab just the sorted topic ids
423 8301 davidmj
$sql = 'SELECT t.topic_id
424 8301 davidmj
	FROM ' . TOPICS_TABLE . " t
425