443
by dcoles
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0 |
1 |
<?php
|
2 |
/**
|
|
3 |
*
|
|
4 |
* @package phpBB3
|
|
5 |
* @version $Id: viewtopic.php,v 1.513 2007/11/06 00:05:53 kellanved Exp $
|
|
6 |
* @copyright (c) 2005 phpBB Group
|
|
7 |
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
|
8 |
*
|
|
9 |
*/
|
|
10 |
||
11 |
/**
|
|
12 |
* @ignore
|
|
13 |
*/
|
|
14 |
define('IN_PHPBB', true); |
|
15 |
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './'; |
|
16 |
$phpEx = substr(strrchr(__FILE__, '.'), 1); |
|
17 |
include($phpbb_root_path . 'common.' . $phpEx); |
|
18 |
include($phpbb_root_path . 'includes/functions_display.' . $phpEx); |
|
19 |
include($phpbb_root_path . 'includes/bbcode.' . $phpEx); |
|
20 |
||
21 |
// Start session management
|
|
22 |
$user->session_begin(); |
|
23 |
$auth->acl($user->data); |
|
24 |
||
25 |
// Initial var setup
|
|
26 |
$forum_id = request_var('f', 0); |
|
27 |
$topic_id = request_var('t', 0); |
|
28 |
$post_id = request_var('p', 0); |
|
29 |
$voted_id = request_var('vote_id', array('' => 0)); |
|
30 |
||
31 |
$start = request_var('start', 0); |
|
32 |
$view = request_var('view', ''); |
|
33 |
||
34 |
$sort_days = request_var('st', ((!empty($user->data['user_post_show_days'])) ? $user->data['user_post_show_days'] : 0)); |
|
35 |
$sort_key = request_var('sk', ((!empty($user->data['user_post_sortby_type'])) ? $user->data['user_post_sortby_type'] : 't')); |
|
36 |
$sort_dir = request_var('sd', ((!empty($user->data['user_post_sortby_dir'])) ? $user->data['user_post_sortby_dir'] : 'a')); |
|
37 |
||
38 |
$update = request_var('update', false); |
|
39 |
||
40 |
/**
|
|
41 |
* @todo normalize?
|
|
42 |
*/
|
|
43 |
$hilit_words = request_var('hilit', '', true); |
|
44 |
||
45 |
// Do we have a topic or post id?
|
|
46 |
if (!$topic_id && !$post_id) |
|
47 |
{
|
|
48 |
trigger_error('NO_TOPIC'); |
|
49 |
}
|
|
50 |
||
51 |
// Find topic id if user requested a newer or older topic
|
|
52 |
if ($view && !$post_id) |
|
53 |
{
|
|
54 |
if (!$forum_id) |
|
55 |
{
|
|
56 |
$sql = 'SELECT forum_id |
|
57 |
FROM ' . TOPICS_TABLE . " |
|
58 |
WHERE topic_id = $topic_id"; |
|
59 |
$result = $db->sql_query($sql); |
|
60 |
$forum_id = (int) $db->sql_fetchfield('forum_id'); |
|
61 |
$db->sql_freeresult($result); |
|
62 |
||
63 |
if (!$forum_id) |
|
64 |
{
|
|
65 |
trigger_error('NO_TOPIC'); |
|
66 |
}
|
|
67 |
}
|
|
68 |
||
69 |
if ($view == 'unread') |
|
70 |
{
|
|
71 |
// Get topic tracking info
|
|
72 |
$topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id); |
|
73 |
||
74 |
$topic_last_read = (isset($topic_tracking_info[$topic_id])) ? $topic_tracking_info[$topic_id] : 0; |
|
75 |
||
76 |
$sql = 'SELECT post_id, topic_id, forum_id |
|
77 |
FROM ' . POSTS_TABLE . " |
|
78 |
WHERE topic_id = $topic_id |
|
79 |
" . (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND post_approved = 1') . " |
|
80 |
AND post_time > $topic_last_read |
|
81 |
ORDER BY post_time ASC"; |
|
82 |
$result = $db->sql_query_limit($sql, 1); |
|
83 |
$row = $db->sql_fetchrow($result); |
|
84 |
$db->sql_freeresult($result); |
|
85 |
||
86 |
if (!$row) |
|
87 |
{
|
|
88 |
$sql = 'SELECT topic_last_post_id as post_id, topic_id, forum_id |
|
89 |
FROM ' . TOPICS_TABLE . ' |
|
90 |
WHERE topic_id = ' . $topic_id; |
|
91 |
$result = $db->sql_query($sql); |
|
92 |
$row = $db->sql_fetchrow($result); |
|
93 |
$db->sql_freeresult($result); |
|
94 |
}
|
|
95 |
||
96 |
if (!$row) |
|
97 |
{
|
|
98 |
// Setup user environment so we can process lang string
|
|
99 |
$user->setup('viewtopic'); |
|
100 |
||
101 |
trigger_error('NO_TOPIC'); |
|
102 |
}
|
|
103 |
||
104 |
$post_id = $row['post_id']; |
|
105 |
$topic_id = $row['topic_id']; |
|
106 |
}
|
|
107 |
else if ($view == 'next' || $view == 'previous') |
|
108 |
{
|
|
109 |
$sql_condition = ($view == 'next') ? '>' : '<'; |
|
110 |
$sql_ordering = ($view == 'next') ? 'ASC' : 'DESC'; |
|
111 |
||
112 |
$sql = 'SELECT forum_id, topic_last_post_time |
|
113 |
FROM ' . TOPICS_TABLE . ' |
|
114 |
WHERE topic_id = ' . $topic_id; |
|
115 |
$result = $db->sql_query($sql); |
|
116 |
$row = $db->sql_fetchrow($result); |
|
117 |
$db->sql_freeresult($result); |
|
118 |
||
119 |
if (!$row) |
|
120 |
{
|
|
121 |
$user->setup('viewtopic'); |
|
122 |
// OK, the topic doesn't exist. This error message is not helpful, but technically correct.
|
|
123 |
trigger_error(($view == 'next') ? 'NO_NEWER_TOPICS' : 'NO_OLDER_TOPICS'); |
|
124 |
}
|
|
125 |
else
|
|
126 |
{
|
|
127 |
$sql = 'SELECT topic_id, forum_id |
|
128 |
FROM ' . TOPICS_TABLE . ' |
|
129 |
WHERE forum_id = ' . $row['forum_id'] . " |
|
130 |
AND topic_moved_id = 0
|
|
131 |
AND topic_last_post_time $sql_condition {$row['topic_last_post_time']} |
|
132 |
" . (($auth->acl_get('m_approve', $row['forum_id'])) ? '' : 'AND topic_approved = 1') . " |
|
133 |
ORDER BY topic_last_post_time $sql_ordering"; |
|
134 |
$result = $db->sql_query_limit($sql, 1); |
|
135 |
$row = $db->sql_fetchrow($result); |
|
136 |
$db->sql_freeresult($result); |
|
137 |
||
138 |
if (!$row) |
|
139 |
{
|
|
140 |
$user->setup('viewtopic'); |
|
141 |
trigger_error(($view == 'next') ? 'NO_NEWER_TOPICS' : 'NO_OLDER_TOPICS'); |
|
142 |
}
|
|
143 |
else
|
|
144 |
{
|
|
145 |
$topic_id = $row['topic_id']; |
|
146 |
||
147 |
// Check for global announcement correctness?
|
|
148 |
if (!$row['forum_id'] && !$forum_id) |
|
149 |
{
|
|
150 |
trigger_error('NO_TOPIC'); |
|
151 |
}
|
|
152 |
else if ($row['forum_id']) |
|
153 |
{
|
|
154 |
$forum_id = $row['forum_id']; |
|
155 |
}
|
|
156 |
}
|
|
157 |
}
|
|
158 |
}
|
|
159 |
||
160 |
// Check for global announcement correctness?
|
|
161 |
if ((!isset($row) || !$row['forum_id']) && !$forum_id) |
|
162 |
{
|
|
163 |
trigger_error('NO_TOPIC'); |
|
164 |
}
|
|
165 |
else if (isset($row) && $row['forum_id']) |
|
166 |
{
|
|
167 |
$forum_id = $row['forum_id']; |
|
168 |
}
|
|
169 |
}
|
|
170 |
||
171 |
// This rather complex gaggle of code handles querying for topics but
|
|
172 |
// also allows for direct linking to a post (and the calculation of which
|
|
173 |
// page the post is on and the correct display of viewtopic)
|
|
174 |
$sql_array = array( |
|
175 |
'SELECT' => 't.*, f.*', |
|
176 |
||
177 |
'FROM' => array( |
|
178 |
FORUMS_TABLE => 'f', |
|
179 |
)
|
|
180 |
);
|
|
181 |
||
182 |
if ($user->data['is_registered']) |
|
183 |
{
|
|
184 |
$sql_array['SELECT'] .= ', tw.notify_status'; |
|
185 |
$sql_array['LEFT_JOIN'] = array(); |
|
186 |
||
187 |
$sql_array['LEFT_JOIN'][] = array( |
|
188 |
'FROM' => array(TOPICS_WATCH_TABLE => 'tw'), |
|
189 |
'ON' => 'tw.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tw.topic_id' |
|
190 |
);
|
|
191 |
||
192 |
if ($config['allow_bookmarks']) |
|
193 |
{
|
|
194 |
$sql_array['SELECT'] .= ', bm.topic_id as bookmarked'; |
|
195 |
$sql_array['LEFT_JOIN'][] = array( |
|
196 |
'FROM' => array(BOOKMARKS_TABLE => 'bm'), |
|
197 |
'ON' => 'bm.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = bm.topic_id' |
|
198 |
);
|
|
199 |
}
|
|
200 |
||
201 |
if ($config['load_db_lastread']) |
|
202 |
{
|
|
203 |
$sql_array['SELECT'] .= ', tt.mark_time, ft.mark_time as forum_mark_time'; |
|
204 |
||
205 |
$sql_array['LEFT_JOIN'][] = array( |
|
206 |
'FROM' => array(TOPICS_TRACK_TABLE => 'tt'), |
|
207 |
'ON' => 'tt.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tt.topic_id' |
|
208 |
);
|
|
209 |
||
210 |
$sql_array['LEFT_JOIN'][] = array( |
|
211 |
'FROM' => array(FORUMS_TRACK_TABLE => 'ft'), |
|
212 |
'ON' => 'ft.user_id = ' . $user->data['user_id'] . ' AND t.forum_id = ft.forum_id' |
|
213 |
);
|
|
214 |
}
|
|
215 |
}
|
|
216 |
||
217 |
if (!$post_id) |
|
218 |
{
|
|
219 |
$sql_array['WHERE'] = "t.topic_id = $topic_id"; |
|
220 |
}
|
|
221 |
else
|
|
222 |
{
|
|
223 |
$sql_array['WHERE'] = "p.post_id = $post_id AND t.topic_id = p.topic_id" . ((!$auth->acl_get('m_approve', $forum_id)) ? ' AND p.post_approved = 1' : ''); |
|
224 |
$sql_array['FROM'][POSTS_TABLE] = 'p'; |
|
225 |
}
|
|
226 |
||
227 |
$sql_array['WHERE'] .= ' AND (f.forum_id = t.forum_id'; |
|
228 |
||
229 |
if (!$forum_id) |
|
230 |
{
|
|
231 |
// If it is a global announcement make sure to set the forum id to a postable forum
|
|
232 |
$sql_array['WHERE'] .= ' OR (t.topic_type = ' . POST_GLOBAL . ' |
|
233 |
AND f.forum_type = ' . FORUM_POST . ')'; |
|
234 |
}
|
|
235 |
else
|
|
236 |
{
|
|
237 |
$sql_array['WHERE'] .= ' OR (t.topic_type = ' . POST_GLOBAL . " |
|
238 |
AND f.forum_id = $forum_id)"; |
|
239 |
}
|
|
240 |
||
241 |
$sql_array['WHERE'] .= ')'; |
|
242 |
$sql_array['FROM'][TOPICS_TABLE] = 't'; |
|
243 |
||
244 |
// Join to forum table on topic forum_id unless topic forum_id is zero
|
|
245 |
// whereupon we join on the forum_id passed as a parameter ... this
|
|
246 |
// is done so navigation, forum name, etc. remain consistent with where
|
|
247 |
// user clicked to view a global topic
|
|
248 |
$sql = $db->sql_build_query('SELECT', $sql_array); |
|
249 |
$result = $db->sql_query($sql); |
|
250 |
$topic_data = $db->sql_fetchrow($result); |
|
251 |
$db->sql_freeresult($result); |
|
252 |
||
253 |
if (!$topic_data) |
|
254 |
{
|
|
255 |
// If post_id was submitted, we try at least to display the topic as a last resort...
|
|
256 |
if ($post_id && $forum_id && $topic_id) |
|
257 |
{
|
|
258 |
redirect(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id")); |
|
259 |
}
|
|
260 |
||
261 |
trigger_error('NO_TOPIC'); |
|
262 |
}
|
|
263 |
||
264 |
// This is for determining where we are (page)
|
|
265 |
if ($post_id) |
|
266 |
{
|
|
267 |
if ($post_id == $topic_data['topic_first_post_id'] || $post_id == $topic_data['topic_last_post_id']) |
|
268 |
{
|
|
269 |
$check_sort = ($post_id == $topic_data['topic_first_post_id']) ? 'd' : 'a'; |
|
270 |
||
271 |
if ($sort_dir == $check_sort) |
|
272 |
{
|
|
273 |
$topic_data['prev_posts'] = ($auth->acl_get('m_approve', $forum_id)) ? $topic_data['topic_replies_real'] : $topic_data['topic_replies']; |
|
274 |
}
|
|
275 |
else
|
|
276 |
{
|
|
277 |
$topic_data['prev_posts'] = 0; |
|
278 |
}
|
|
279 |
}
|
|
280 |
else
|
|
281 |
{
|
|
282 |
$sql = 'SELECT COUNT(p1.post_id) AS prev_posts |
|
283 |
FROM ' . POSTS_TABLE . ' p1, ' . POSTS_TABLE . " p2 |
|
284 |
WHERE p1.topic_id = {$topic_data['topic_id']} |
|
285 |
AND p2.post_id = {$post_id} |
|
286 |
" . ((!$auth->acl_get('m_approve', $forum_id)) ? 'AND p1.post_approved = 1' : '') . ' |
|
287 |
AND ' . (($sort_dir == 'd') ? 'p1.post_time >= p2.post_time' : 'p1.post_time <= p2.post_time'); |
|
288 |
||
289 |
$result = $db->sql_query($sql); |
|
290 |
$row = $db->sql_fetchrow($result); |
|
291 |
$db->sql_freeresult($result); |
|
292 |
||
293 |
$topic_data['prev_posts'] = $row['prev_posts'] - 1; |
|
294 |
}
|
|
295 |
}
|
|
296 |
||
297 |
$forum_id = (int) $topic_data['forum_id']; |
|
298 |
$topic_id = (int) $topic_data['topic_id']; |
|
299 |
||
300 |
//
|
|
301 |
$topic_replies = ($auth->acl_get('m_approve', $forum_id)) ? $topic_data['topic_replies_real'] : $topic_data['topic_replies']; |
|
302 |
||
303 |
// Check sticky/announcement time limit
|
|
304 |
if (($topic_data['topic_type'] == POST_STICKY || $topic_data['topic_type'] == POST_ANNOUNCE) && $topic_data['topic_time_limit'] && ($topic_data['topic_time'] + $topic_data['topic_time_limit']) < time()) |
|
305 |
{
|
|
306 |
$sql = 'UPDATE ' . TOPICS_TABLE . ' |
|
307 |
SET topic_type = ' . POST_NORMAL . ', topic_time_limit = 0 |
|
308 |
WHERE topic_id = ' . $topic_id; |
|
309 |
$db->sql_query($sql); |
|
310 |
||
311 |
$topic_data['topic_type'] = POST_NORMAL; |
|
312 |
$topic_data['topic_time_limit'] = 0; |
|
313 |
}
|
|
314 |
||
315 |
// Setup look and feel
|
|
316 |
$user->setup('viewtopic', $topic_data['forum_style']); |
|
317 |
||
318 |
if (!$topic_data['topic_approved'] && !$auth->acl_get('m_approve', $forum_id)) |
|
319 |
{
|
|
320 |
trigger_error('NO_TOPIC'); |
|
321 |
}
|
|
322 |
||
323 |
// Start auth check
|
|
324 |
if (!$auth->acl_get('f_read', $forum_id)) |
|
325 |
{
|
|
326 |
if ($user->data['user_id'] != ANONYMOUS) |
|
327 |
{
|
|
328 |
trigger_error('SORRY_AUTH_READ'); |
|
329 |
}
|
|
330 |
||
331 |
login_box('', $user->lang['LOGIN_VIEWFORUM']); |
|
332 |
}
|
|
333 |
||
334 |
// Forum is passworded ... check whether access has been granted to this
|
|
335 |
// user this session, if not show login box
|
|
336 |
if ($topic_data['forum_password']) |
|
337 |
{
|
|
338 |
login_forum_box($topic_data); |
|
339 |
}
|
|
340 |
||
341 |
// Redirect to login or to the correct post upon emailed notification links
|
|
342 |
if (isset($_GET['e'])) |
|
343 |
{
|
|
344 |
$jump_to = request_var('e', 0); |
|
345 |
||
346 |
$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id"); |
|
347 |
||
348 |
if ($user->data['user_id'] == ANONYMOUS) |
|
349 |
{
|
|
350 |
login_box($redirect_url . "&p=$post_id&e=$jump_to", $user->lang['LOGIN_NOTIFY_TOPIC']); |
|
351 |
}
|
|
352 |
||
353 |
if ($jump_to > 0) |
|
354 |
{
|
|
355 |
// We direct the already logged in user to the correct post...
|
|
356 |
redirect($redirect_url . ((!$post_id) ? "&p=$jump_to" : "&p=$post_id") . "#p$jump_to"); |
|
357 |
}
|
|
358 |
}
|
|
359 |
||
360 |
// What is start equal to?
|
|
361 |
if ($post_id) |
|
362 |
{
|
|
363 |
$start = floor(($topic_data['prev_posts']) / $config['posts_per_page']) * $config['posts_per_page']; |
|
364 |
}
|
|
365 |
||
366 |
// Get topic tracking info
|
|
367 |
if (!isset($topic_tracking_info)) |
|
368 |
{
|
|
369 |
$topic_tracking_info = array(); |
|
370 |
||
371 |
// Get topic tracking info
|
|
372 |
if ($config['load_db_lastread'] && $user->data['is_registered']) |
|
373 |
{
|
|
374 |
$tmp_topic_data = array($topic_id => $topic_data); |
|
375 |
$topic_tracking_info = get_topic_tracking($forum_id, $topic_id, $tmp_topic_data, array($forum_id => $topic_data['forum_mark_time'])); |
|
376 |
unset($tmp_topic_data); |
|
377 |
}
|
|
378 |
else if ($config['load_anon_lastread'] || $user->data['is_registered']) |
|
379 |
{
|
|
380 |
$topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id); |
|
381 |
}
|
|
382 |
}
|
|
383 |
||
384 |
// Post ordering options
|
|
385 |
$limit_days = array(0 => $user->lang['ALL_POSTS'], 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']); |
|
386 |
||
387 |
$sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 's' => $user->lang['SUBJECT']); |
|
388 |
$sort_by_sql = array('a' => 'u.username_clean', 't' => 'p.post_time', 's' => 'p.post_subject'); |
|
389 |
||
390 |
$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = ''; |
|
391 |
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); |
|
392 |
||
393 |
// Obtain correct post count and ordering SQL if user has
|
|
394 |
// requested anything different
|
|
395 |
if ($sort_days) |
|
396 |
{
|
|
397 |
$min_post_time = time() - ($sort_days * 86400); |
|
398 |
||
399 |
$sql = 'SELECT COUNT(post_id) AS num_posts |
|
400 |
FROM ' . POSTS_TABLE . " |
|
401 |
WHERE topic_id = $topic_id |
|
402 |
AND post_time >= $min_post_time |
|
403 |
" . (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND post_approved = 1'); |
|
404 |
$result = $db->sql_query($sql); |
|
405 |
$total_posts = (int) $db->sql_fetchfield('num_posts'); |
|
406 |
$db->sql_freeresult($result); |
|
407 |
||
408 |
$limit_posts_time = "AND p.post_time >= $min_post_time "; |
|
409 |
||
410 |
if (isset($_POST['sort'])) |
|
411 |
{
|
|
412 |
$start = 0; |
|
413 |
}
|
|
414 |
}
|
|
415 |
else
|
|
416 |
{
|
|
417 |
$total_posts = $topic_replies + 1; |
|
418 |
$limit_posts_time = ''; |
|
419 |
}
|
|
420 |
||
421 |
// Was a highlight request part of the URI?
|
|
422 |
$highlight_match = $highlight = ''; |
|
423 |
if ($hilit_words) |
|
424 |
{
|
|
425 |
foreach (explode(' ', trim($hilit_words)) as $word) |
|
426 |
{
|
|
427 |
if (trim($word)) |
|
428 |
{
|
|
429 |
$word = str_replace('\*', '\w+?', preg_quote($word, '#')); |
|
430 |
$word = preg_replace('#(^|\s)\\\\w\*\?(\s|$)#', '$1\w+?$2', $word); |
|
431 |
$highlight_match .= (($highlight_match != '') ? '|' : '') . $word; |
|
432 |
}
|
|
433 |
}
|
|
434 |
||
435 |
$highlight = urlencode($hilit_words); |
|
436 |
}
|
|
437 |
||
438 |
// Make sure $start is set to the last page if it exceeds the amount
|
|
439 |
if ($start < 0 || $start > $total_posts) |
|
440 |
{
|
|
441 |
$start = ($start < 0) ? 0 : floor(($total_posts - 1) / $config['posts_per_page']) * $config['posts_per_page']; |
|
442 |
}
|
|
443 |
||
444 |
// General Viewtopic URL for return links
|
|
445 |
$viewtopic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&start=$start&$u_sort_param" . (($highlight_match) ? "&hilit=$highlight" : '')); |
|
446 |
||
447 |
// Are we watching this topic?
|
|
448 |
$s_watching_topic = $s_watching_topic_img = array(); |
|
449 |
$s_watching_topic['link'] = $s_watching_topic['title'] = ''; |
|
450 |
$s_watching_topic['is_watching'] = false; |
|
451 |
||
452 |
if ($config['email_enable'] && $config['allow_topic_notify'] && $user->data['is_registered']) |
|
453 |
{
|
|
454 |
watch_topic_forum('topic', $s_watching_topic, $s_watching_topic_img, $user->data['user_id'], $forum_id, $topic_id, $topic_data['notify_status'], $start); |
|
455 |
}
|
|
456 |
||
457 |
// Bookmarks
|
|
458 |
if ($config['allow_bookmarks'] && $user->data['is_registered'] && request_var('bookmark', 0)) |
|
459 |
{
|
|
460 |
if (!$topic_data['bookmarked']) |
|
461 |
{
|
|
462 |
$sql = 'INSERT INTO ' . BOOKMARKS_TABLE . ' ' . $db->sql_build_array('INSERT', array( |
|
463 |
'user_id' => $user->data['user_id'], |
|
464 |
'topic_id' => $topic_id, |
|
465 |
));
|
|
466 |
$db->sql_query($sql); |
|
467 |
}
|
|
468 |
else
|
|
469 |
{
|
|
470 |
$sql = 'DELETE FROM ' . BOOKMARKS_TABLE . " |
|
471 |
WHERE user_id = {$user->data['user_id']} |
|
472 |
AND topic_id = $topic_id"; |
|
473 |
$db->sql_query($sql); |
|
474 |
}
|
|
475 |
||
476 |
meta_refresh(3, $viewtopic_url); |
|
477 |
||
478 |
$message = (($topic_data['bookmarked']) ? $user->lang['BOOKMARK_REMOVED'] : $user->lang['BOOKMARK_ADDED']) . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $viewtopic_url . '">', '</a>'); |
|
479 |
trigger_error($message); |
|
480 |
}
|
|
481 |
||
482 |
// Grab ranks
|
|
483 |
$ranks = $cache->obtain_ranks(); |
|
484 |
||
485 |
// Grab icons
|
|
486 |
$icons = $cache->obtain_icons(); |
|
487 |
||
488 |
// Grab extensions
|
|
489 |
$extensions = array(); |
|
490 |
if ($topic_data['topic_attachment']) |
|
491 |
{
|
|
492 |
$extensions = $cache->obtain_attach_extensions($forum_id); |
|
493 |
}
|
|
494 |
||
495 |
// Forum rules listing
|
|
496 |
$s_forum_rules = ''; |
|
497 |
gen_forum_auth_level('topic', $forum_id, $topic_data['forum_status']); |
|
498 |
||
499 |
// Quick mod tools
|
|
500 |
$allow_change_type = ($auth->acl_get('m_', $forum_id) || ($user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'])) ? true : false; |
|
501 |
||
502 |
$topic_mod = ''; |
|
503 |
$topic_mod .= ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'] && $topic_data['topic_status'] == ITEM_UNLOCKED)) ? (($topic_data['topic_status'] == ITEM_UNLOCKED) ? '<option value="lock">' . $user->lang['LOCK_TOPIC'] . '</option>' : '<option value="unlock">' . $user->lang['UNLOCK_TOPIC'] . '</option>') : ''; |
|
504 |
$topic_mod .= ($auth->acl_get('m_delete', $forum_id)) ? '<option value="delete_topic">' . $user->lang['DELETE_TOPIC'] . '</option>' : ''; |
|
505 |
$topic_mod .= ($auth->acl_get('m_move', $forum_id) && $topic_data['topic_status'] != ITEM_MOVED) ? '<option value="move">' . $user->lang['MOVE_TOPIC'] . '</option>' : ''; |
|
506 |
$topic_mod .= ($auth->acl_get('m_split', $forum_id)) ? '<option value="split">' . $user->lang['SPLIT_TOPIC'] . '</option>' : ''; |
|
507 |
$topic_mod .= ($auth->acl_get('m_merge', $forum_id)) ? '<option value="merge">' . $user->lang['MERGE_POSTS'] . '</option>' : ''; |
|
508 |
$topic_mod .= ($auth->acl_get('m_merge', $forum_id)) ? '<option value="merge_topic">' . $user->lang['MERGE_TOPIC'] . '</option>' : ''; |
|
509 |
$topic_mod .= ($auth->acl_get('m_move', $forum_id)) ? '<option value="fork">' . $user->lang['FORK_TOPIC'] . '</option>' : ''; |
|
510 |
$topic_mod .= ($allow_change_type && $auth->acl_gets('f_sticky', 'f_announce', $forum_id) && $topic_data['topic_type'] != POST_NORMAL) ? '<option value="make_normal">' . $user->lang['MAKE_NORMAL'] . '</option>' : ''; |
|
511 |
$topic_mod .= ($allow_change_type && $auth->acl_get('f_sticky', $forum_id) && $topic_data['topic_type'] != POST_STICKY) ? '<option value="make_sticky">' . $user->lang['MAKE_STICKY'] . '</option>' : ''; |
|
512 |
$topic_mod .= ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_ANNOUNCE) ? '<option value="make_announce">' . $user->lang['MAKE_ANNOUNCE'] . '</option>' : ''; |
|
513 |
$topic_mod .= ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_GLOBAL) ? '<option value="make_global">' . $user->lang['MAKE_GLOBAL'] . '</option>' : ''; |
|
514 |
$topic_mod .= ($auth->acl_get('m_', $forum_id)) ? '<option value="topic_logs">' . $user->lang['VIEW_TOPIC_LOGS'] . '</option>' : ''; |
|
515 |
||
516 |
// If we've got a hightlight set pass it on to pagination.
|
|
517 |
$pagination = generate_pagination(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&$u_sort_param" . (($highlight_match) ? "&hilit=$highlight" : '')), $total_posts, $config['posts_per_page'], $start); |
|
518 |
||
519 |
// Navigation links
|
|
520 |
generate_forum_nav($topic_data); |
|
521 |
||
522 |
// Forum Rules
|
|
523 |
generate_forum_rules($topic_data); |
|
524 |
||
525 |
// Moderators
|
|
526 |
$forum_moderators = array(); |
|
527 |
get_moderators($forum_moderators, $forum_id); |
|
528 |
||
529 |
// This is only used for print view so ...
|
|
530 |
$server_path = (!$view) ? $phpbb_root_path : generate_board_url() . '/'; |
|
531 |
||
532 |
// Replace naughty words in title
|
|
533 |
$topic_data['topic_title'] = censor_text($topic_data['topic_title']); |
|
534 |
||
535 |
// Send vars to template
|
|
536 |
$template->assign_vars(array( |
|
537 |
'FORUM_ID' => $forum_id, |
|
538 |
'FORUM_NAME' => $topic_data['forum_name'], |
|
539 |
'FORUM_DESC' => generate_text_for_display($topic_data['forum_desc'], $topic_data['forum_desc_uid'], $topic_data['forum_desc_bitfield'], $topic_data['forum_desc_options']), |
|
540 |
'TOPIC_ID' => $topic_id, |
|
541 |
'TOPIC_TITLE' => $topic_data['topic_title'], |
|
542 |
'TOPIC_POSTER' => $topic_data['topic_poster'], |
|
543 |
||
544 |
'TOPIC_AUTHOR_FULL' => get_username_string('full', $topic_data['topic_poster'], $topic_data['topic_first_poster_name'], $topic_data['topic_first_poster_colour']), |
|
545 |
'TOPIC_AUTHOR_COLOUR' => get_username_string('colour', $topic_data['topic_poster'], $topic_data['topic_first_poster_name'], $topic_data['topic_first_poster_colour']), |
|
546 |
'TOPIC_AUTHOR' => get_username_string('username', $topic_data['topic_poster'], $topic_data['topic_first_poster_name'], $topic_data['topic_first_poster_colour']), |
|
547 |
||
548 |
'PAGINATION' => $pagination, |
|
549 |
'PAGE_NUMBER' => on_page($total_posts, $config['posts_per_page'], $start), |
|
550 |
'TOTAL_POSTS' => ($total_posts == 1) ? $user->lang['VIEW_TOPIC_POST'] : sprintf($user->lang['VIEW_TOPIC_POSTS'], $total_posts), |
|
551 |
'U_MCP' => ($auth->acl_get('m_', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=main&mode=topic_view&f=$forum_id&t=$topic_id&start=$start&$u_sort_param", true, $user->session_id) : '', |
|
552 |
'MODERATORS' => (isset($forum_moderators[$forum_id]) && sizeof($forum_moderators[$forum_id])) ? implode(', ', $forum_moderators[$forum_id]) : '', |
|
553 |
||
554 |
'POST_IMG' => ($topic_data['forum_status'] == ITEM_LOCKED) ? $user->img('button_topic_locked', 'FORUM_LOCKED') : $user->img('button_topic_new', 'POST_NEW_TOPIC'), |
|
555 |
'QUOTE_IMG' => $user->img('icon_post_quote', 'REPLY_WITH_QUOTE'), |
|
556 |
'REPLY_IMG' => ($topic_data['forum_status'] == ITEM_LOCKED || $topic_data['topic_status'] == ITEM_LOCKED) ? $user->img('button_topic_locked', 'TOPIC_LOCKED') : $user->img('button_topic_reply', 'REPLY_TO_TOPIC'), |
|
557 |
'EDIT_IMG' => $user->img('icon_post_edit', 'EDIT_POST'), |
|
558 |
'DELETE_IMG' => $user->img('icon_post_delete', 'DELETE_POST'), |
|
559 |
'INFO_IMG' => $user->img('icon_post_info', 'VIEW_INFO'), |
|
560 |
'PROFILE_IMG' => $user->img('icon_user_profile', 'READ_PROFILE'), |
|
561 |
'SEARCH_IMG' => $user->img('icon_user_search', 'SEARCH_USER_POSTS'), |
|
562 |
'PM_IMG' => $user->img('icon_contact_pm', 'SEND_PRIVATE_MESSAGE'), |
|
563 |
'EMAIL_IMG' => $user->img('icon_contact_email', 'SEND_EMAIL'), |
|
564 |
'WWW_IMG' => $user->img('icon_contact_www', 'VISIT_WEBSITE'), |
|
565 |
'ICQ_IMG' => $user->img('icon_contact_icq', 'ICQ'), |
|
566 |
'AIM_IMG' => $user->img('icon_contact_aim', 'AIM'), |
|
567 |
'MSN_IMG' => $user->img('icon_contact_msnm', 'MSNM'), |
|
568 |
'YIM_IMG' => $user->img('icon_contact_yahoo', 'YIM'), |
|
569 |
'JABBER_IMG' => $user->img('icon_contact_jabber', 'JABBER') , |
|
570 |
'REPORT_IMG' => $user->img('icon_post_report', 'REPORT_POST'), |
|
571 |
'REPORTED_IMG' => $user->img('icon_topic_reported', 'POST_REPORTED'), |
|
572 |
'UNAPPROVED_IMG' => $user->img('icon_topic_unapproved', 'POST_UNAPPROVED'), |
|
573 |
'WARN_IMG' => $user->img('icon_user_warn', 'WARN_USER'), |
|
574 |
||
575 |
'S_IS_LOCKED' =>($topic_data['topic_status'] == ITEM_UNLOCKED) ? false : true, |
|
576 |
'S_SELECT_SORT_DIR' => $s_sort_dir, |
|
577 |
'S_SELECT_SORT_KEY' => $s_sort_key, |
|
578 |
'S_SELECT_SORT_DAYS' => $s_limit_days, |
|
579 |
'S_SINGLE_MODERATOR' => (!empty($forum_moderators[$forum_id]) && sizeof($forum_moderators[$forum_id]) > 1) ? false : true, |
|
580 |
'S_TOPIC_ACTION' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&start=$start"), |
|
581 |
'S_TOPIC_MOD' => ($topic_mod != '') ? '<select name="action">' . $topic_mod . '</select>' : '', |
|
582 |
'S_MOD_ACTION' => append_sid("{$phpbb_root_path}mcp.$phpEx", "f=$forum_id&t=$topic_id&quickmod=1&redirect=" . urlencode(str_replace('&', '&', $viewtopic_url)), true, $user->session_id), |
|
583 |
||
584 |
'S_VIEWTOPIC' => true, |
|
585 |
'S_DISPLAY_SEARCHBOX' => ($auth->acl_get('u_search') && $auth->acl_get('f_search', $forum_id) && $config['load_search']) ? true : false, |
|
586 |
'S_SEARCHBOX_ACTION' => append_sid("{$phpbb_root_path}search.$phpEx", 't=' . $topic_id), |
|
587 |
||
588 |
'S_DISPLAY_POST_INFO' => ($topic_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false, |
|
589 |
'S_DISPLAY_REPLY_INFO' => ($topic_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_reply', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false, |
|
590 |
||
591 |
'U_TOPIC' => "{$server_path}viewtopic.$phpEx?f=$forum_id&t=$topic_id", |
|
592 |
'U_FORUM' => $server_path, |
|
593 |
'U_VIEW_TOPIC' => $viewtopic_url, |
|
594 |
'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id), |
|
595 |
'U_VIEW_OLDER_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=previous"), |
|
596 |
'U_VIEW_NEWER_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=next"), |
|
597 |
'U_PRINT_TOPIC' => ($auth->acl_get('f_print', $forum_id)) ? $viewtopic_url . '&view=print' : '', |
|
598 |
'U_EMAIL_TOPIC' => ($auth->acl_get('f_email', $forum_id) && $config['email_enable']) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=email&t=$topic_id") : '', |
|
599 |
||
600 |
'U_WATCH_TOPIC' => $s_watching_topic['link'], |
|
601 |
'L_WATCH_TOPIC' => $s_watching_topic['title'], |
|
602 |
'S_WATCHING_TOPIC' => $s_watching_topic['is_watching'], |
|
603 |
||
604 |
'U_BOOKMARK_TOPIC' => ($user->data['is_registered'] && $config['allow_bookmarks']) ? $viewtopic_url . '&bookmark=1' : '', |
|
605 |
'L_BOOKMARK_TOPIC' => ($user->data['is_registered'] && $config['allow_bookmarks'] && $topic_data['bookmarked']) ? $user->lang['BOOKMARK_TOPIC_REMOVE'] : $user->lang['BOOKMARK_TOPIC'], |
|
606 |
||
607 |
'U_POST_NEW_TOPIC' => ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=post&f=$forum_id") : '', |
|
608 |
'U_POST_REPLY_TOPIC' => ($auth->acl_get('f_reply', $forum_id) || $user->data['user_id'] == ANONYMOUS) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=reply&f=$forum_id&t=$topic_id") : '', |
|
609 |
'U_BUMP_TOPIC' => (bump_topic_allowed($forum_id, $topic_data['topic_bumped'], $topic_data['topic_last_post_time'], $topic_data['topic_poster'], $topic_data['topic_last_poster_id'])) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=bump&f=$forum_id&t=$topic_id") : '') |
|
610 |
);
|
|
611 |
||
612 |
// Does this topic contain a poll?
|
|
613 |
if (!empty($topic_data['poll_start'])) |
|
614 |
{
|
|
615 |
$sql = 'SELECT o.*, p.bbcode_bitfield, p.bbcode_uid |
|
616 |
FROM ' . POLL_OPTIONS_TABLE . ' o, ' . POSTS_TABLE . " p |
|
617 |
WHERE o.topic_id = $topic_id |
|
618 |
AND p.post_id = {$topic_data['topic_first_post_id']} |
|
619 |
AND p.topic_id = o.topic_id
|
|
620 |
ORDER BY o.poll_option_id"; |
|
621 |
$result = $db->sql_query($sql); |
|
622 |
||
623 |
$poll_info = array(); |
|
624 |
while ($row = $db->sql_fetchrow($result)) |
|
625 |
{
|
|
626 |
$poll_info[] = $row; |
|
627 |
}
|
|
628 |
$db->sql_freeresult($result); |
|
629 |
||
630 |
$cur_voted_id = array(); |
|
631 |
if ($user->data['is_registered']) |
|
632 |
{
|
|
633 |
$sql = 'SELECT poll_option_id |
|
634 |
FROM ' . POLL_VOTES_TABLE . ' |
|
635 |
WHERE topic_id = ' . $topic_id . ' |
|
636 |
AND vote_user_id = ' . $user->data['user_id']; |
|
637 |
$result = $db->sql_query($sql); |
|
638 |
||
639 |
while ($row = $db->sql_fetchrow($result)) |
|
640 |
{
|
|
641 |
$cur_voted_id[] = $row['poll_option_id']; |
|
642 |
}
|
|
643 |
$db->sql_freeresult($result); |
|
644 |
}
|
|
645 |
else
|
|
646 |
{
|
|
647 |
// Cookie based guest tracking ... I don't like this but hum ho
|
|
648 |
// it's oft requested. This relies on "nice" users who don't feel
|
|
649 |
// the need to delete cookies to mess with results.
|
|
650 |
if (isset($_COOKIE[$config['cookie_name'] . '_poll_' . $topic_id])) |
|
651 |
{
|
|
652 |
$cur_voted_id = explode(',', $_COOKIE[$config['cookie_name'] . '_poll_' . $topic_id]); |
|
653 |
$cur_voted_id = array_map('intval', $cur_voted_id); |
|
654 |
}
|
|
655 |
}
|
|
656 |
||
657 |
$s_can_vote = (((!sizeof($cur_voted_id) && $auth->acl_get('f_vote', $forum_id)) || |
|
658 |
($auth->acl_get('f_votechg', $forum_id) && $topic_data['poll_vote_change'])) && |
|
659 |
(($topic_data['poll_length'] != 0 && $topic_data['poll_start'] + $topic_data['poll_length'] > time()) || $topic_data['poll_length'] == 0) && |
|
660 |
$topic_data['topic_status'] != ITEM_LOCKED && |
|
661 |
$topic_data['forum_status'] != ITEM_LOCKED) ? true : false; |
|
662 |
$s_display_results = (!$s_can_vote || ($s_can_vote && sizeof($cur_voted_id)) || $view == 'viewpoll') ? true : false; |
|
663 |
||
664 |
if ($update && $s_can_vote) |
|
665 |
{
|
|
666 |
||
667 |
if (!sizeof($voted_id) || sizeof($voted_id) > $topic_data['poll_max_options'] || in_array(VOTE_CONVERTED, $cur_voted_id)) |
|
668 |
{
|
|
669 |
$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&start=$start"); |
|
670 |
||
671 |
meta_refresh(5, $redirect_url); |
|
672 |
if (!sizeof($voted_id)) |
|
673 |
{
|
|
674 |
$message = 'NO_VOTE_OPTION'; |
|
675 |
}
|
|
676 |
else if (sizeof($voted_id) > $topic_data['poll_max_options']) |
|
677 |
{
|
|
678 |
$message = 'TOO_MANY_VOTE_OPTIONS'; |
|
679 |
}
|
|
680 |
else
|
|
681 |
{
|
|
682 |
$message = 'VOTE_CONVERTED'; |
|
683 |
}
|
|
684 |
||
685 |
$message = $user->lang[$message] . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $redirect_url . '">', '</a>'); |
|
686 |
trigger_error($message); |
|
687 |
}
|
|
688 |
||
689 |
foreach ($voted_id as $option) |
|
690 |
{
|
|
691 |
if (in_array($option, $cur_voted_id)) |
|
692 |
{
|
|
693 |
continue; |
|
694 |
}
|
|
695 |
||
696 |
$sql = 'UPDATE ' . POLL_OPTIONS_TABLE . ' |
|
697 |
SET poll_option_total = poll_option_total + 1
|
|
698 |
WHERE poll_option_id = ' . (int) $option . ' |
|
699 |
AND topic_id = ' . (int) $topic_id; |
|
700 |
$db->sql_query($sql); |
|
701 |
||
702 |
if ($user->data['is_registered']) |
|
703 |
{
|
|
704 |
$sql_ary = array( |
|
705 |
'topic_id' => (int) $topic_id, |
|
706 |
'poll_option_id' => (int) $option, |
|
707 |
'vote_user_id' => (int) $user->data['user_id'], |
|
708 |
'vote_user_ip' => (string) $user->ip, |
|
709 |
);
|
|
710 |
||
711 |
$sql = 'INSERT INTO ' . POLL_VOTES_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary); |
|
712 |
$db->sql_query($sql); |
|
713 |
}
|
|
714 |
}
|
|
715 |
||
716 |
foreach ($cur_voted_id as $option) |
|
717 |
{
|
|
718 |
if (!in_array($option, $voted_id)) |
|
719 |
{
|
|
720 |
$sql = 'UPDATE ' . POLL_OPTIONS_TABLE . ' |
|
721 |
SET poll_option_total = poll_option_total - 1
|
|
722 |
WHERE poll_option_id = ' . (int) $option . ' |
|
723 |
AND topic_id = ' . (int) $topic_id; |
|
724 |
$db->sql_query($sql); |
|
725 |
||
726 |
if ($user->data['is_registered']) |
|
727 |
{
|
|
728 |
$sql = 'DELETE FROM ' . POLL_VOTES_TABLE . ' |
|
729 |
WHERE topic_id = ' . (int) $topic_id . ' |
|
730 |
AND poll_option_id = ' . (int) $option . ' |
|
731 |
AND vote_user_id = ' . (int) $user->data['user_id']; |
|
732 |
$db->sql_query($sql); |
|
733 |
}
|
|
734 |
}
|
|
735 |
}
|
|
736 |
||
737 |
if ($user->data['user_id'] == ANONYMOUS && !$user->data['is_bot']) |
|
738 |
{
|
|
739 |
$user->set_cookie('poll_' . $topic_id, implode(',', $voted_id), time() + 31536000); |
|
740 |
}
|
|
741 |
||
742 |
$sql = 'UPDATE ' . TOPICS_TABLE . ' |
|
743 |
SET poll_last_vote = ' . time() . " |
|
744 |
WHERE topic_id = $topic_id"; |
|
745 |
//, topic_last_post_time = ' . time() . " -- for bumping topics with new votes, ignore for now
|
|
746 |
$db->sql_query($sql); |
|
747 |
||
748 |
$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&start=$start"); |
|
749 |
||
750 |
meta_refresh(5, $redirect_url); |
|
751 |
trigger_error($user->lang['VOTE_SUBMITTED'] . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $redirect_url . '">', '</a>')); |
|
752 |
}
|
|
753 |
||
754 |
$poll_total = 0; |
|
755 |
foreach ($poll_info as $poll_option) |
|
756 |
{
|
|
757 |
$poll_total += $poll_option['poll_option_total']; |
|
758 |
}
|
|
759 |
||
760 |
if ($poll_info[0]['bbcode_bitfield']) |
|
761 |
{
|
|
762 |
$poll_bbcode = new bbcode(); |
|
763 |
}
|
|
764 |
else
|
|
765 |
{
|
|
766 |
$poll_bbcode = false; |
|
767 |
}
|
|
768 |
||
769 |
for ($i = 0, $size = sizeof($poll_info); $i < $size; $i++) |
|
770 |
{
|
|
771 |
$poll_info[$i]['poll_option_text'] = censor_text($poll_info[$i]['poll_option_text']); |
|
772 |
||
773 |
if ($poll_bbcode !== false) |
|
774 |
{
|
|
775 |
$poll_bbcode->bbcode_second_pass($poll_info[$i]['poll_option_text'], $poll_info[$i]['bbcode_uid'], $poll_option['bbcode_bitfield']); |
|
776 |
}
|
|
777 |
||
778 |
$poll_info[$i]['poll_option_text'] = bbcode_nl2br($poll_info[$i]['poll_option_text']); |
|
779 |
$poll_info[$i]['poll_option_text'] = smiley_text($poll_info[$i]['poll_option_text']); |
|
780 |
}
|
|
781 |
||
782 |
$topic_data['poll_title'] = censor_text($topic_data['poll_title']); |
|
783 |
||
784 |
if ($poll_bbcode !== false) |
|
785 |
{
|
|
786 |
$poll_bbcode->bbcode_second_pass($topic_data['poll_title'], $poll_info[0]['bbcode_uid'], $poll_info[0]['bbcode_bitfield']); |
|
787 |
}
|
|
788 |
||
789 |
$topic_data['poll_title'] = bbcode_nl2br($topic_data['poll_title']); |
|
790 |
$topic_data['poll_title'] = smiley_text($topic_data['poll_title']); |
|
791 |
||
792 |
unset($poll_bbcode); |
|
793 |
||
794 |
foreach ($poll_info as $poll_option) |
|
795 |
{
|
|
796 |
$option_pct = ($poll_total > 0) ? $poll_option['poll_option_total'] / $poll_total : 0; |
|
797 |
$option_pct_txt = sprintf("%.1d%%", ($option_pct * 100)); |
|
798 |
||
799 |
$template->assign_block_vars('poll_option', array( |
|
800 |
'POLL_OPTION_ID' => $poll_option['poll_option_id'], |
|
801 |
'POLL_OPTION_CAPTION' => $poll_option['poll_option_text'], |
|
802 |
'POLL_OPTION_RESULT' => $poll_option['poll_option_total'], |
|
803 |
'POLL_OPTION_PERCENT' => $option_pct_txt, |
|
804 |
'POLL_OPTION_PCT' => round($option_pct * 100), |
|
805 |
'POLL_OPTION_IMG' => $user->img('poll_center', $option_pct_txt, round($option_pct * 250)), |
|
806 |
'POLL_OPTION_VOTED' => (in_array($poll_option['poll_option_id'], $cur_voted_id)) ? true : false) |
|
807 |
);
|
|
808 |
}
|
|
809 |
||
810 |
$poll_end = $topic_data['poll_length'] + $topic_data['poll_start']; |
|
811 |
||
812 |
$template->assign_vars(array( |
|
813 |
'POLL_QUESTION' => $topic_data['poll_title'], |
|
814 |
'TOTAL_VOTES' => $poll_total, |
|
815 |
'POLL_LEFT_CAP_IMG' => $user->img('poll_left'), |
|
816 |
'POLL_RIGHT_CAP_IMG'=> $user->img('poll_right'), |
|
817 |
||
818 |
'L_MAX_VOTES' => ($topic_data['poll_max_options'] == 1) ? $user->lang['MAX_OPTION_SELECT'] : sprintf($user->lang['MAX_OPTIONS_SELECT'], $topic_data['poll_max_options']), |
|
819 |
'L_POLL_LENGTH' => ($topic_data['poll_length']) ? sprintf($user->lang[($poll_end > time()) ? 'POLL_RUN_TILL' : 'POLL_ENDED_AT'], $user->format_date($poll_end)) : '', |
|
820 |
||
821 |
'S_HAS_POLL' => true, |
|
822 |
'S_CAN_VOTE' => $s_can_vote, |
|
823 |
'S_DISPLAY_RESULTS' => $s_display_results, |
|
824 |
'S_IS_MULTI_CHOICE' => ($topic_data['poll_max_options'] > 1) ? true : false, |
|
825 |
'S_POLL_ACTION' => $viewtopic_url, |
|
826 |
||
827 |
'U_VIEW_RESULTS' => $viewtopic_url . '&view=viewpoll') |
|
828 |
);
|
|
829 |
||
830 |
unset($poll_end, $poll_info, $voted_id); |
|
831 |
}
|
|
832 |
||
833 |
// If the user is trying to reach the second half of the topic, fetch it starting from the end
|
|
834 |
$store_reverse = false; |
|
835 |
$sql_limit = $config['posts_per_page']; |
|
836 |
||
837 |
if ($start > $total_posts / 2) |
|
838 |
{
|
|
839 |
$store_reverse = true; |
|
840 |
||
841 |
if ($start + $config['posts_per_page'] > $total_posts) |
|
842 |
{
|
|
843 |
$sql_limit = min($config['posts_per_page'], max(1, $total_posts - $start)); |
|
844 |
}
|
|
845 |
||
846 |
// Select the sort order
|
|
847 |
$sql_sort_order = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'ASC' : 'DESC'); |
|
848 |
$sql_start = max(0, $total_posts - $sql_limit - $start); |
|
849 |
}
|
|
850 |
else
|
|
851 |
{
|
|
852 |
// Select the sort order
|
|
853 |
$sql_sort_order = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'ASC'); |
|
854 |
$sql_start = $start; |
|
855 |
}
|
|
856 |
||
857 |
// Container for user details, only process once
|
|
858 |
$post_list = $user_cache = $id_cache = $attachments = $attach_list = $rowset = $update_count = $post_edit_list = array(); |
|
859 |
$has_attachments = $display_notice = false; |
|
860 |
$bbcode_bitfield = ''; |
|
861 |
$i = $i_total = 0; |
|
862 |
||
863 |
// Go ahead and pull all data for this topic
|
|
864 |
$sql = 'SELECT p.post_id |
|
865 |
FROM ' . POSTS_TABLE . ' p' . (($sort_by_sql[$sort_key][0] == 'u') ? ', ' . USERS_TABLE . ' u': '') . " |
|
866 |
WHERE p.topic_id = $topic_id |
|
867 |
" . ((!$auth->acl_get('m_approve', $forum_id)) ? 'AND p.post_approved = 1' : '') . " |
|
868 |
" . (($sort_by_sql[$sort_key][0] == 'u') ? 'AND u.user_id = p.poster_id': '') . " |
|
869 |
$limit_posts_time |
|
870 |
ORDER BY $sql_sort_order"; |
|
871 |
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start); |
|
872 |
||
873 |
$i = ($store_reverse) ? $sql_limit - 1 : 0; |
|
874 |
while ($row = $db->sql_fetchrow($result)) |
|
875 |
{
|
|
876 |
$post_list[$i] = $row['post_id']; |
|
877 |
($store_reverse) ? $i-- : $i++; |
|
878 |
}
|
|
879 |
$db->sql_freeresult($result); |
|
880 |
||
881 |
if (!sizeof($post_list)) |
|
882 |
{
|
|
883 |
if ($sort_days) |
|
884 |
{
|
|
885 |
trigger_error('NO_POSTS_TIME_FRAME'); |
|
886 |
}
|
|
887 |
else
|
|
888 |
{
|
|
889 |
trigger_error('NO_TOPIC'); |
|
890 |
}
|
|
891 |
}
|
|
892 |
||
893 |
// Holding maximum post time for marking topic read
|
|
894 |
// We need to grab it because we do reverse ordering sometimes
|
|
895 |
$max_post_time = 0; |
|
896 |
||
897 |
$sql = $db->sql_build_query('SELECT', array( |
|
898 |
'SELECT' => 'u.*, z.friend, z.foe, p.*', |
|
899 |
||
900 |
'FROM' => array( |
|
901 |
USERS_TABLE => 'u', |
|
902 |
POSTS_TABLE => 'p', |
|
903 |
),
|
|
904 |
||
905 |
'LEFT_JOIN' => array( |
|
906 |
array( |
|
907 |
'FROM' => array(ZEBRA_TABLE => 'z'), |
|
908 |
'ON' => 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id' |
|
909 |
)
|
|
910 |
),
|
|
911 |
||
912 |
'WHERE' => $db->sql_in_set('p.post_id', $post_list) . ' |
|
913 |
AND u.user_id = p.poster_id'
|
|
914 |
));
|
|
915 |
||
916 |
$result = $db->sql_query($sql); |
|
917 |
||
918 |
$now = getdate(time() + $user->timezone + $user->dst - date('Z')); |
|
919 |
||
920 |
// Posts are stored in the $rowset array while $attach_list, $user_cache
|
|
921 |
// and the global bbcode_bitfield are built
|
|
922 |
while ($row = $db->sql_fetchrow($result)) |
|
923 |
{
|
|
924 |
// Set max_post_time
|
|
925 |
if ($row['post_time'] > $max_post_time) |
|
926 |
{
|
|
927 |
$max_post_time = $row['post_time']; |
|
928 |
}
|
|
929 |
||
930 |
$poster_id = $row['poster_id']; |
|
931 |
||
932 |
// Does post have an attachment? If so, add it to the list
|
|
933 |
if ($row['post_attachment'] && $config['allow_attachments']) |
|
934 |
{
|
|
935 |
$attach_list[] = $row['post_id']; |
|
936 |
||
937 |
if ($row['post_approved']) |
|
938 |
{
|
|
939 |
$has_attachments = true; |
|
940 |
}
|
|
941 |
}
|
|
942 |
||
943 |
$rowset[$row['post_id']] = array( |
|
944 |
'hide_post' => ($row['foe'] && ($view != 'show' || $post_id != $row['post_id'])) ? true : false, |
|
945 |
||
946 |
'post_id' => $row['post_id'], |
|
947 |
'post_time' => $row['post_time'], |
|
948 |
'user_id' => $row['user_id'], |
|
949 |
'username' => $row['username'], |
|
950 |
'user_colour' => $row['user_colour'], |
|
951 |
'topic_id' => $row['topic_id'], |
|
952 |
'forum_id' => $row['forum_id'], |
|
953 |
'post_subject' => $row['post_subject'], |
|
954 |
'post_edit_count' => $row['post_edit_count'], |
|
955 |
'post_edit_time' => $row['post_edit_time'], |
|
956 |
'post_edit_reason' => $row['post_edit_reason'], |
|
957 |
'post_edit_user' => $row['post_edit_user'], |
|
958 |
||
959 |
// Make sure the icon actually exists
|
|
960 |
'icon_id' => (isset($icons[$row['icon_id']]['img'], $icons[$row['icon_id']]['height'], $icons[$row['icon_id']]['width'])) ? $row['icon_id'] : 0, |
|
961 |
'post_attachment' => $row['post_attachment'], |
|
962 |
'post_approved' => $row['post_approved'], |
|
963 |
'post_reported' => $row['post_reported'], |
|
964 |
'post_username' => $row['post_username'], |
|
965 |
'post_text' => $row['post_text'], |
|
966 |
'bbcode_uid' => $row['bbcode_uid'], |
|
967 |
'bbcode_bitfield' => $row['bbcode_bitfield'], |
|
968 |
'enable_smilies' => $row['enable_smilies'], |
|
969 |
'enable_sig' => $row['enable_sig'], |
|
970 |
'friend' => $row['friend'], |
|
971 |
'foe' => $row['foe'], |
|
972 |
);
|
|
973 |
||
974 |
// Define the global bbcode bitfield, will be used to load bbcodes
|
|
975 |
$bbcode_bitfield = $bbcode_bitfield | base64_decode($row['bbcode_bitfield']); |
|
976 |
||
977 |
// Is a signature attached? Are we going to display it?
|
|
978 |
if ($row['enable_sig'] && $config['allow_sig'] && $user->optionget('viewsigs')) |
|
979 |
{
|
|
980 |
$bbcode_bitfield = $bbcode_bitfield | base64_decode($row['user_sig_bbcode_bitfield']); |
|
981 |
}
|
|
982 |
||
983 |
// Cache various user specific data ... so we don't have to recompute
|
|
984 |
// this each time the same user appears on this page
|
|
985 |
if (!isset($user_cache[$poster_id])) |
|
986 |
{
|
|
987 |
if ($poster_id == ANONYMOUS) |
|
988 |
{
|
|
989 |
$user_cache[$poster_id] = array( |
|
990 |
'joined' => '', |
|
991 |
'posts' => '', |
|
992 |
'from' => '', |
|
993 |
||
994 |
'sig' => '', |
|
995 |
'sig_bbcode_uid' => '', |
|
996 |
'sig_bbcode_bitfield' => '', |
|
997 |
||
998 |
'online' => false, |
|
999 |
'avatar' => '', |
|
1000 |
'rank_title' => '', |
|
1001 |
'rank_image' => '', |
|
1002 |
'rank_image_src' => '', |
|
1003 |
'sig' => '', |
|
1004 |
'posts' => '', |
|
1005 |
'profile' => '', |
|
1006 |
'pm' => '', |
|
1007 |
'email' => '', |
|
1008 |
'www' => '', |
|
1009 |
'icq_status_img' => '', |
|
1010 |
'icq' => '', |
|
1011 |
'aim' => '', |
|
1012 |
'msn' => '', |
|
1013 |
'yim' => '', |
|
1014 |
'jabber' => '', |
|
1015 |
'search' => '', |
|
1016 |
'age' => '', |
|
1017 |
||
1018 |
'username' => $row['username'], |
|
1019 |
'user_colour' => $row['user_colour'], |
|
1020 |
||
1021 |
'warnings' => 0, |
|
1022 |
'allow_pm' => 0, |
|
1023 |
);
|
|
1024 |
}
|
|
1025 |
else
|
|
1026 |
{
|
|
1027 |
$user_sig = ''; |
|
1028 |
||
1029 |
// We add the signature to every posters entry because enable_sig is post dependant
|
|
1030 |
if ($row['user_sig'] && $config['allow_sig'] && $user->optionget('viewsigs')) |
|
1031 |
{
|
|
1032 |
$user_sig = $row['user_sig']; |
|
1033 |
}
|
|
1034 |
||
1035 |
$id_cache[] = $poster_id; |
|
1036 |
||
1037 |
$user_cache[$poster_id] = array( |
|
1038 |
'joined' => $user->format_date($row['user_regdate']), |
|
1039 |
'posts' => $row['user_posts'], |
|
1040 |
'warnings' => (isset($row['user_warnings'])) ? $row['user_warnings'] : 0, |
|
1041 |
'from' => (!empty($row['user_from'])) ? $row['user_from'] : '', |
|
1042 |
||
1043 |
'sig' => $user_sig, |
|
1044 |
'sig_bbcode_uid' => (!empty($row['user_sig_bbcode_uid'])) ? $row['user_sig_bbcode_uid'] : '', |
|
1045 |
'sig_bbcode_bitfield' => (!empty($row['user_sig_bbcode_bitfield'])) ? $row['user_sig_bbcode_bitfield'] : '', |
|
1046 |
||
1047 |
'viewonline' => $row['user_allow_viewonline'], |
|
1048 |
'allow_pm' => $row['user_allow_pm'], |
|
1049 |
||
1050 |
'avatar' => ($user->optionget('viewavatars')) ? get_user_avatar($row['user_avatar'], $row['user_avatar_type'], $row['user_avatar_width'], $row['user_avatar_height']) : '', |
|
1051 |
'age' => '', |
|
1052 |
||
1053 |
'rank_title' => '', |
|
1054 |
'rank_image' => '', |
|
1055 |
'rank_image_src' => '', |
|
1056 |
||
1057 |
'username' => $row['username'], |
|
1058 |
'user_colour' => $row['user_colour'], |
|
1059 |
||
1060 |
'online' => false, |
|
1061 |
'profile' => append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=viewprofile&u=$poster_id"), |
|
1062 |
'www' => $row['user_website'], |
|
1063 |
'aim' => ($row['user_aim'] && $auth->acl_get('u_sendim')) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=contact&action=aim&u=$poster_id") : '', |
|
1064 |
'msn' => ($row['user_msnm'] && $auth->acl_get('u_sendim')) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=contact&action=msnm&u=$poster_id") : '', |
|
1065 |
'yim' => ($row['user_yim']) ? 'http://edit.yahoo.com/config/send_webmesg?.target=' . urlencode($row['user_yim']) . '&.src=pg' : '', |
|
1066 |
'jabber' => ($row['user_jabber'] && $auth->acl_get('u_sendim')) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=contact&action=jabber&u=$poster_id") : '', |
|
1067 |
'search' => ($auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx", 'search_author=' . urlencode($row['username']) .'&showresults=posts') : '', |
|
1068 |
);
|
|
1069 |
||
1070 |
get_user_rank($row['user_rank'], $row['user_posts'], $user_cache[$poster_id]['rank_title'], $user_cache[$poster_id]['rank_image'], $user_cache[$poster_id]['rank_image_src']); |
|
1071 |
||
1072 |
if (!empty($row['user_allow_viewemail']) || $auth->acl_get('a_email')) |
|
1073 |
{
|
|
1074 |
$user_cache[$poster_id]['email'] = ($config['board_email_form'] && $config['email_enable']) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=email&u=$poster_id") : (($config['board_hide_emails'] && !$auth->acl_get('a_email')) ? '' : 'mailto:' . $row['user_email']); |
|
1075 |
}
|
|
1076 |
else
|
|
1077 |
{
|
|
1078 |
$user_cache[$poster_id]['email'] = ''; |
|
1079 |
}
|
|
1080 |
||
1081 |
if (!empty($row['user_icq'])) |
|
1082 |
{
|
|
1083 |
$user_cache[$poster_id]['icq'] = 'http://www.icq.com/people/webmsg.php?to=' . $row['user_icq']; |
|
1084 |
$user_cache[$poster_id]['icq_status_img'] = '<img src="http://web.icq.com/whitepages/online?icq=' . $row['user_icq'] . '&img=5" width="18" height="18" alt="" />'; |
|
1085 |
}
|
|
1086 |
else
|
|
1087 |
{
|
|
1088 |
$user_cache[$poster_id]['icq_status_img'] = ''; |
|
1089 |
$user_cache[$poster_id]['icq'] = ''; |
|
1090 |
}
|
|
1091 |
||
1092 |
if ($config['allow_birthdays'] && !empty($row['user_birthday'])) |
|
1093 |
{
|
|
1094 |
list($bday_day, $bday_month, $bday_year) = array_map('intval', explode('-', $row['user_birthday'])); |
|
1095 |
||
1096 |
if ($bday_year) |
|
1097 |
{
|
|
1098 |
$diff = $now['mon'] - $bday_month; |
|
1099 |
if ($diff == 0) |
|
1100 |
{
|
|
1101 |
$diff = ($now['mday'] - $bday_day < 0) ? 1 : 0; |
|
1102 |
}
|
|
1103 |
else
|
|
1104 |
{
|
|
1105 |
$diff = ($diff < 0) ? 1 : 0; |
|
1106 |
}
|
|
1107 |
||
1108 |
$user_cache[$poster_id]['age'] = (int) ($now['year'] - $bday_year - $diff); |
|
1109 |
}
|
|
1110 |
}
|
|
1111 |
}
|
|
1112 |
}
|
|
1113 |
}
|
|
1114 |
$db->sql_freeresult($result); |
|
1115 |
||
1116 |
// Load custom profile fields
|
|
1117 |
if ($config['load_cpf_viewtopic']) |
|
1118 |
{
|
|
1119 |
include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx); |
|
1120 |
$cp = new custom_profile(); |
|
1121 |
||
1122 |
// Grab all profile fields from users in id cache for later use - similar to the poster cache
|
|
1123 |
$profile_fields_cache = $cp->generate_profile_fields_template('grab', $id_cache); |
|
1124 |
}
|
|
1125 |
||
1126 |
// Generate online information for user
|
|
1127 |
if ($config['load_onlinetrack'] && sizeof($id_cache)) |
|
1128 |
{
|
|
1129 |
$sql = 'SELECT session_user_id, MAX(session_time) as online_time, MIN(session_viewonline) AS viewonline |
|
1130 |
FROM ' . SESSIONS_TABLE . ' |
|
1131 |
WHERE ' . $db->sql_in_set('session_user_id', $id_cache) . ' |
|
1132 |
GROUP BY session_user_id'; |
|
1133 |
$result = $db->sql_query($sql); |
|
1134 |
||
1135 |
$update_time = $config['load_online_time'] * 60; |
|
1136 |
while ($row = $db->sql_fetchrow($result)) |
|
1137 |
{
|
|
1138 |
$user_cache[$row['session_user_id']]['online'] = (time() - $update_time < $row['online_time'] && (($row['viewonline']) || $auth->acl_get('u_viewonline'))) ? true : false; |
|
1139 |
}
|
|
1140 |
$db->sql_freeresult($result); |
|
1141 |
}
|
|
1142 |
unset($id_cache); |
|
1143 |
||
1144 |
// Pull attachment data
|
|
1145 |
if (sizeof($attach_list)) |
|
1146 |
{
|
|
1147 |
if ($auth->acl_get('u_download') && $auth->acl_get('f_download', $forum_id)) |
|
1148 |
{
|
|
1149 |
$sql = 'SELECT * |
|
1150 |
FROM ' . ATTACHMENTS_TABLE . ' |
|
1151 |
WHERE ' . $db->sql_in_set('post_msg_id', $attach_list) . ' |
|
1152 |
AND in_message = 0
|
|
1153 |
ORDER BY filetime DESC, post_msg_id ASC'; |
|
1154 |
$result = $db->sql_query($sql); |
|
1155 |
||
1156 |
while ($row = $db->sql_fetchrow($result)) |
|
1157 |
{
|
|
1158 |
$attachments[$row['post_msg_id']][] = $row; |
|
1159 |
}
|
|
1160 |
$db->sql_freeresult($result); |
|
1161 |
||
1162 |
// No attachments exist, but post table thinks they do so go ahead and reset post_attach flags
|
|
1163 |
if (!sizeof($attachments)) |
|
1164 |
{
|
|
1165 |
$sql = 'UPDATE ' . POSTS_TABLE . ' |
|
1166 |
SET post_attachment = 0
|
|
1167 |
WHERE ' . $db->sql_in_set('post_id', $attach_list); |
|
1168 |
$db->sql_query($sql); |
|
1169 |
||
1170 |
// We need to update the topic indicator too if the complete topic is now without an attachment
|
|
1171 |
if (sizeof($rowset) != $total_posts) |
|
1172 |
{
|
|
1173 |
// Not all posts are displayed so we query the db to find if there's any attachment for this topic
|
|
1174 |
$sql = 'SELECT a.post_msg_id as post_id |
|
1175 |
FROM ' . ATTACHMENTS_TABLE . ' a, ' . POSTS_TABLE . " p |
|
1176 |
WHERE p.topic_id = $topic_id |
|
1177 |
AND p.post_approved = 1
|
|
1178 |
AND p.topic_id = a.topic_id"; |
|
1179 |
$result = $db->sql_query_limit($sql, 1); |
|
1180 |
$row = $db->sql_fetchrow($result); |
|
1181 |
$db->sql_freeresult($result); |
|
1182 |
||
1183 |
if (!$row) |
|
1184 |
{
|
|
1185 |
$sql = 'UPDATE ' . TOPICS_TABLE . " |
|
1186 |
SET topic_attachment = 0
|
|
1187 |
WHERE topic_id = $topic_id"; |
|
1188 |
$db->sql_query($sql); |
|
1189 |
}
|
|
1190 |
}
|
|
1191 |
else
|
|
1192 |
{
|
|
1193 |
$sql = 'UPDATE ' . TOPICS_TABLE . " |
|
1194 |
SET topic_attachment = 0
|
|
1195 |
WHERE topic_id = $topic_id"; |
|
1196 |
$db->sql_query($sql); |
|
1197 |
}
|
|
1198 |
}
|
|
1199 |
else if ($has_attachments && !$topic_data['topic_attachment']) |
|
1200 |
{
|
|
1201 |
// Topic has approved attachments but its flag is wrong
|
|
1202 |
$sql = 'UPDATE ' . TOPICS_TABLE . " |
|
1203 |
SET topic_attachment = 1
|
|
1204 |
WHERE topic_id = $topic_id"; |
|
1205 |
$db->sql_query($sql); |
|
1206 |
||
1207 |
$topic_data['topic_attachment'] = 1; |
|
1208 |
}
|
|
1209 |
}
|
|
1210 |
else
|
|
1211 |
{
|
|
1212 |
$display_notice = true; |
|
1213 |
}
|
|
1214 |
}
|
|
1215 |
||
1216 |
// Instantiate BBCode if need be
|
|
1217 |
if ($bbcode_bitfield !== '') |
|
1218 |
{
|
|
1219 |
$bbcode = new bbcode(base64_encode($bbcode_bitfield)); |
|
1220 |
}
|
|
1221 |
||
1222 |
$i_total = sizeof($rowset) - 1; |
|
1223 |
$prev_post_id = ''; |
|
1224 |
||
1225 |
$template->assign_vars(array( |
|
1226 |
'S_NUM_POSTS' => sizeof($post_list)) |
|
1227 |
);
|
|
1228 |
||
1229 |
// Output the posts
|
|
1230 |
$first_unread = $post_unread = false; |
|
1231 |
for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i) |
|
1232 |
{
|
|
1233 |
// A non-existing rowset only happens if there was no user present for the entered poster_id
|
|
1234 |
// This could be a broken posts table.
|
|
1235 |
if (!isset($rowset[$post_list[$i]])) |
|
1236 |
{
|
|
1237 |
continue; |
|
1238 |
}
|
|
1239 |
||
1240 |
$row =& $rowset[$post_list[$i]]; |
|
1241 |
$poster_id = $row['user_id']; |
|
1242 |
||
1243 |
// End signature parsing, only if needed
|
|
1244 |
if ($user_cache[$poster_id]['sig'] && $row['enable_sig'] && empty($user_cache[$poster_id]['sig_parsed'])) |
|
1245 |
{
|
|
1246 |
$user_cache[$poster_id]['sig'] = censor_text($user_cache[$poster_id]['sig']); |
|
1247 |
||
1248 |
if ($user_cache[$poster_id]['sig_bbcode_bitfield']) |
|
1249 |
{
|
|
1250 |
$bbcode->bbcode_second_pass($user_cache[$poster_id]['sig'], $user_cache[$poster_id]['sig_bbcode_uid'], $user_cache[$poster_id]['sig_bbcode_bitfield']); |
|
1251 |
}
|
|
1252 |
||
1253 |
$user_cache[$poster_id]['sig'] = bbcode_nl2br($user_cache[$poster_id]['sig']); |
|
1254 |
$user_cache[$poster_id]['sig'] = smiley_text($user_cache[$poster_id]['sig']); |
|
1255 |
$user_cache[$poster_id]['sig_parsed'] = true; |
|
1256 |
}
|
|
1257 |
||
1258 |
// Parse the message and subject
|
|
1259 |
$message = censor_text($row['post_text']); |
|
1260 |
||
1261 |
// Second parse bbcode here
|
|
1262 |
if ($row['bbcode_bitfield']) |
|
1263 |
{
|
|
1264 |
$bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']); |
|
1265 |
}
|
|
1266 |
||
1267 |
$message = bbcode_nl2br($message); |
|
1268 |
$message = smiley_text($message); |
|
1269 |
||
1270 |
if (!empty($attachments[$row['post_id']])) |
|
1271 |
{
|
|
1272 |
parse_attachments($forum_id, $message, $attachments[$row['post_id']], $update_count); |
|
1273 |
}
|
|
1274 |
||
1275 |
// Replace naughty words such as farty pants
|
|
1276 |
$row['post_subject'] = censor_text($row['post_subject']); |
|
1277 |
||
1278 |
// Highlight active words (primarily for search)
|
|
1279 |
if ($highlight_match) |
|
1280 |
{
|
|
1281 |
$message = preg_replace('#(?!<.*)(?<!\w)(' . $highlight_match . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">\1</span>', $message); |
|
1282 |
$row['post_subject'] = preg_replace('#(?!<.*)(?<!\w)(' . $highlight_match . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">\1</span>', $row['post_subject']); |
|
1283 |
}
|
|
1284 |
||
1285 |
// Editing information
|
|
1286 |
if (($row['post_edit_count'] && $config['display_last_edited']) || $row['post_edit_reason']) |
|
1287 |
{
|
|
1288 |
// Get usernames for all following posts if not already stored
|
|
1289 |
if (!sizeof($post_edit_list) && ($row['post_edit_reason'] || ($row['post_edit_user'] && !isset($user_cache[$row['post_edit_user']])))) |
|
1290 |
{
|
|
1291 |
// Remove all post_ids already parsed (we do not have to check them)
|
|
1292 |
$post_storage_list = (!$store_reverse) ? array_slice($post_list, $i) : array_slice(array_reverse($post_list), $i); |
|
1293 |
||
1294 |
$sql = 'SELECT DISTINCT u.user_id, u.username, u.user_colour |
|
1295 |
FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u |
|
1296 |
WHERE ' . $db->sql_in_set('p.post_id', $post_storage_list) . ' |
|
1297 |
AND p.post_edit_count <> 0
|
|
1298 |
AND p.post_edit_user <> 0
|
|
1299 |
AND p.post_edit_user = u.user_id'; |
|
1300 |
$result2 = $db->sql_query($sql); |
|
1301 |
while ($user_edit_row = $db->sql_fetchrow($result2)) |
|
1302 |
{
|
|
1303 |
$post_edit_list[$user_edit_row['user_id']] = $user_edit_row; |
|
1304 |
}
|
|
1305 |
$db->sql_freeresult($result2); |
|
1306 |
||
1307 |
unset($post_storage_list); |
|
1308 |
}
|
|
1309 |
||
1310 |
$l_edit_time_total = ($row['post_edit_count'] == 1) ? $user->lang['EDITED_TIME_TOTAL'] : $user->lang['EDITED_TIMES_TOTAL']; |
|
1311 |
||
1312 |
if ($row['post_edit_reason']) |
|
1313 |
{
|
|
1314 |
// User having edited the post also being the post author?
|
|
1315 |
if (!$row['post_edit_user'] || $row['post_edit_user'] == $poster_id) |
|
1316 |
{
|
|
1317 |
$display_username = get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']); |
|
1318 |
}
|
|
1319 |
else
|
|
1320 |
{
|
|
1321 |
$display_username = get_username_string('full', $row['post_edit_user'], $post_edit_list[$row['post_edit_user']]['username'], $post_edit_list[$row['post_edit_user']]['user_colour']); |
|
1322 |
}
|
|
1323 |
||
1324 |
$l_edited_by = sprintf($l_edit_time_total, $display_username, $user->format_date($row['post_edit_time']), $row['post_edit_count']); |
|
1325 |
}
|
|
1326 |
else
|
|
1327 |
{
|
|
1328 |
if ($row['post_edit_user'] && !isset($user_cache[$row['post_edit_user']])) |
|
1329 |
{
|
|
1330 |
$user_cache[$row['post_edit_user']] = $post_edit_list[$row['post_edit_user']]; |
|
1331 |
}
|
|
1332 |
||
1333 |
// User having edited the post also being the post author?
|
|
1334 |
if (!$row['post_edit_user'] || $row['post_edit_user'] == $poster_id) |
|
1335 |
{
|
|
1336 |
$display_username = get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']); |
|
1337 |
}
|
|
1338 |
else
|
|
1339 |
{
|
|
1340 |
$display_username = get_username_string('full', $row['post_edit_user'], $user_cache[$row['post_edit_user']]['username'], $user_cache[$row['post_edit_user']]['user_colour']); |
|
1341 |
}
|
|
1342 |
||
1343 |
$l_edited_by = sprintf($l_edit_time_total, $display_username, $user->format_date($row['post_edit_time']), $row['post_edit_count']); |
|
1344 |
}
|
|
1345 |
}
|
|
1346 |
else
|
|
1347 |
{
|
|
1348 |
$l_edited_by = ''; |
|
1349 |
}
|
|
1350 |
||
1351 |
// Bump information
|
|
1352 |
if ($topic_data['topic_bumped'] && $row['post_id'] == $topic_data['topic_last_post_id'] && isset($user_cache[$topic_data['topic_bumper']]) ) |
|
1353 |
{
|
|
1354 |
// It is safe to grab the username from the user cache array, we are at the last
|
|
1355 |
// post and only the topic poster and last poster are allowed to bump.
|
|
1356 |
// Admins and mods are bound to the above rules too...
|
|
1357 |
$l_bumped_by = '<br /><br />' . sprintf($user->lang['BUMPED_BY'], $user_cache[$topic_data['topic_bumper']]['username'], $user->format_date($topic_data['topic_last_post_time'])); |
|
1358 |
}
|
|
1359 |
else
|
|
1360 |
{
|
|
1361 |
$l_bumped_by = ''; |
|
1362 |
}
|
|
1363 |
||
1364 |
$cp_row = array(); |
|
1365 |
||
1366 |
//
|
|
1367 |
if ($config['load_cpf_viewtopic']) |
|
1368 |
{
|
|
1369 |
$cp_row = (isset($profile_fields_cache[$poster_id])) ? $cp->generate_profile_fields_template('show', false, $profile_fields_cache[$poster_id]) : array(); |
|
1370 |
}
|
|
1371 |
||
1372 |
$post_unread = (isset($topic_tracking_info[$topic_id]) && $row['post_time'] > $topic_tracking_info[$topic_id]) ? true : false; |
|
1373 |
||
1374 |
$s_first_unread = false; |
|
1375 |
if (!$first_unread && $post_unread) |
|
1376 |
{
|
|
1377 |
$s_first_unread = $first_unread = true; |
|
1378 |
}
|
|
1379 |
||
1380 |
//
|
|
1381 |
$postrow = array( |
|
1382 |
'POST_AUTHOR_FULL' => get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']), |
|
1383 |
'POST_AUTHOR_COLOUR' => get_username_string('colour', $poster_id, $row['username'], $row['user_colour'], $row['post_username']), |
|
1384 |
'POST_AUTHOR' => get_username_string('username', $poster_id, $row['username'], $row['user_colour'], $row['post_username']), |
|
1385 |
'U_POST_AUTHOR' => get_username_string('profile', $poster_id, $row['username'], $row['user_colour'], $row['post_username']), |
|
1386 |
||
1387 |
'RANK_TITLE' => $user_cache[$poster_id]['rank_title'], |
|
1388 |
'RANK_IMG' => $user_cache[$poster_id]['rank_image'], |
|
1389 |
'RANK_IMG_SRC' => $user_cache[$poster_id]['rank_image_src'], |
|
1390 |
'POSTER_JOINED' => $user_cache[$poster_id]['joined'], |
|
1391 |
'POSTER_POSTS' => $user_cache[$poster_id]['posts'], |
|
1392 |
'POSTER_FROM' => $user_cache[$poster_id]['from'], |
|
1393 |
'POSTER_AVATAR' => $user_cache[$poster_id]['avatar'], |
|
1394 |
'POSTER_WARNINGS' => $user_cache[$poster_id]['warnings'], |
|
1395 |
'POSTER_AGE' => $user_cache[$poster_id]['age'], |
|
1396 |
||
1397 |
'POST_DATE' => $user->format_date($row['post_time']), |
|
1398 |
'POST_SUBJECT' => $row['post_subject'], |
|
1399 |
'MESSAGE' => $message, |
|
1400 |
'SIGNATURE' => ($row['enable_sig']) ? $user_cache[$poster_id]['sig'] : '', |
|
1401 |
'EDITED_MESSAGE' => $l_edited_by, |
|
1402 |
'EDIT_REASON' => $row['post_edit_reason'], |
|
1403 |
'BUMPED_MESSAGE' => $l_bumped_by, |
|
1404 |
||
1405 |
'MINI_POST_IMG' => ($post_unread) ? $user->img('icon_post_target_unread', 'NEW_POST') : $user->img('icon_post_target', 'POST'), |
|
1406 |
'POST_ICON_IMG' => ($topic_data['enable_icons'] && !empty($row['icon_id'])) ? $icons[$row['icon_id']]['img'] : '', |
|
1407 |
'POST_ICON_IMG_WIDTH' => ($topic_data['enable_icons'] && !empty($row['icon_id'])) ? $icons[$row['icon_id']]['width'] : '', |
|
1408 |
'POST_ICON_IMG_HEIGHT' => ($topic_data['enable_icons'] && !empty($row['icon_id'])) ? $icons[$row['icon_id']]['height'] : '', |
|
1409 |
'ICQ_STATUS_IMG' => $user_cache[$poster_id]['icq_status_img'], |
|
1410 |
'ONLINE_IMG' => ($poster_id == ANONYMOUS || !$config['load_onlinetrack']) ? '' : (($user_cache[$poster_id]['online']) ? $user->img('icon_user_online', 'ONLINE') : $user->img('icon_user_offline', 'OFFLINE')), |
|
1411 |
'S_ONLINE' => ($poster_id == ANONYMOUS || !$config['load_onlinetrack']) ? false : (($user_cache[$poster_id]['online']) ? true : false), |
|
1412 |
||
1413 |
'U_EDIT' => (!$user->data['is_registered']) ? '' : ((($user->data['user_id'] == $poster_id && $auth->acl_get('f_edit', $forum_id) && ($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])) || $auth->acl_get('m_edit', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=edit&f=$forum_id&p={$row['post_id']}") : ''), |
|
1414 |
'U_QUOTE' => ($auth->acl_get('f_reply', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=quote&f=$forum_id&p={$row['post_id']}") : '', |
|
1415 |
'U_INFO' => ($auth->acl_get('m_info', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=main&mode=post_details&f=$forum_id&p=" . $row['post_id'], true, $user->session_id) : '', |
|
1416 |
'U_DELETE' => (!$user->data['is_registered']) ? '' : ((($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id'] && ($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])) || $auth->acl_get('m_delete', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=delete&f=$forum_id&p={$row['post_id']}") : ''), |
|
1417 |
||
1418 |
'U_PROFILE' => $user_cache[$poster_id]['profile'], |
|
1419 |
'U_SEARCH' => $user_cache[$poster_id]['search'], |
|
1420 |
'U_PM' => ($poster_id != ANONYMOUS && $config['allow_privmsg'] && $auth->acl_get('u_sendpm') && ($user_cache[$poster_id]['allow_pm'] || $auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_'))) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=compose&action=quotepost&p=' . $row['post_id']) : '', |
|
1421 |
'U_EMAIL' => $user_cache[$poster_id]['email'], |
|
1422 |
'U_WWW' => $user_cache[$poster_id]['www'], |
|
1423 |
'U_ICQ' => $user_cache[$poster_id]['icq'], |
|
1424 |
'U_AIM' => $user_cache[$poster_id]['aim'], |
|
1425 |
'U_MSN' => $user_cache[$poster_id]['msn'], |
|
1426 |
'U_YIM' => $user_cache[$poster_id]['yim'], |
|
1427 |
'U_JABBER' => $user_cache[$poster_id]['jabber'], |
|
1428 |
||
1429 |
'U_REPORT' => ($auth->acl_get('f_report', $forum_id)) ? append_sid("{$phpbb_root_path}report.$phpEx", 'f=' . $forum_id . '&p=' . $row['post_id']) : '', |
|
1430 |
'U_MCP_REPORT' => ($auth->acl_get('m_report', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=reports&mode=report_details&f=' . $forum_id . '&p=' . $row['post_id'], true, $user->session_id) : '', |
|
1431 |
'U_MCP_APPROVE' => ($auth->acl_get('m_approve', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue&mode=approve_details&f=' . $forum_id . '&p=' . $row['post_id'], true, $user->session_id) : '', |
|
1432 |
'U_MINI_POST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'p=' . $row['post_id']) . (($topic_data['topic_type'] == POST_GLOBAL) ? '&f=' . $forum_id : '') . '#p' . $row['post_id'], |
|
1433 |
'U_NEXT_POST_ID' => ($i < $i_total && isset($rowset[$post_list[$i + 1]])) ? $rowset[$post_list[$i + 1]]['post_id'] : '', |
|
1434 |
'U_PREV_POST_ID' => $prev_post_id, |
|
1435 |
'U_NOTES' => ($auth->acl_getf_global('m_')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&mode=user_notes&u=' . $poster_id, true, $user->session_id) : '', |
|
1436 |
'U_WARN' => ($auth->acl_get('m_warn') && $poster_id != $user->data['user_id'] && $poster_id != ANONYMOUS) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=warn&mode=warn_post&f=' . $forum_id . '&p=' . $row['post_id'], true, $user->session_id) : '', |
|
1437 |
||
1438 |
'POST_ID' => $row['post_id'], |
|
1439 |
'POSTER_ID' => $poster_id, |
|
1440 |
||
1441 |
'S_HAS_ATTACHMENTS' => (!empty($attachments[$row['post_id']])) ? true : false, |
|
1442 |
'S_POST_UNAPPROVED' => ($row['post_approved']) ? false : true, |
|
1443 |
'S_POST_REPORTED' => ($row['post_reported'] && $auth->acl_get('m_report', $forum_id)) ? true : false, |
|
1444 |
'S_DISPLAY_NOTICE' => $display_notice && $row['post_attachment'], |
|
1445 |
'S_FRIEND' => ($row['friend']) ? true : false, |
|
1446 |
'S_UNREAD_POST' => $post_unread, |
|
1447 |
'S_FIRST_UNREAD' => $s_first_unread, |
|
1448 |
'S_CUSTOM_FIELDS' => (isset($cp_row['row']) && sizeof($cp_row['row'])) ? true : false, |
|
1449 |
'S_TOPIC_POSTER' => ($topic_data['topic_poster'] == $poster_id) ? true : false, |
|
1450 |
||
1451 |
'S_IGNORE_POST' => ($row['hide_post']) ? true : false, |
|
1452 |
'L_IGNORE_POST' => ($row['hide_post']) ? sprintf($user->lang['POST_BY_FOE'], get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']), '<a href="' . $viewtopic_url . "&p={$row['post_id']}&view=show#p{$row['post_id']}" . '">', '</a>') : '', |
|
1453 |
);
|
|
1454 |
||
1455 |
if (isset($cp_row['row']) && sizeof($cp_row['row'])) |
|
1456 |
{
|
|
1457 |
$postrow = array_merge($postrow, $cp_row['row']); |
|
1458 |
}
|
|
1459 |
||
1460 |
// Dump vars into template
|
|
1461 |
$template->assign_block_vars('postrow', $postrow); |
|
1462 |
||
1463 |
if (!empty($cp_row['blockrow'])) |
|
1464 |
{
|
|
1465 |
foreach ($cp_row['blockrow'] as $field_data) |
|
1466 |
{
|
|
1467 |
$template->assign_block_vars('postrow.custom_fields', $field_data); |
|
1468 |
}
|
|
1469 |
}
|
|
1470 |
||
1471 |
// Display not already displayed Attachments for this post, we already parsed them. ;)
|
|
1472 |
if (!empty($attachments[$row['post_id']])) |
|
1473 |
{
|
|
1474 |
foreach ($attachments[$row['post_id']] as $attachment) |
|
1475 |
{
|
|
1476 |
$template->assign_block_vars('postrow.attachment', array( |
|
1477 |
'DISPLAY_ATTACHMENT' => $attachment) |
|
1478 |
);
|
|
1479 |
}
|
|
1480 |
}
|
|
1481 |
||
1482 |
$prev_post_id = $row['post_id']; |
|
1483 |
||
1484 |
unset($rowset[$post_list[$i]]); |
|
1485 |
unset($attachments[$row['post_id']]); |
|
1486 |
}
|
|
1487 |
unset($rowset, $user_cache); |
|
1488 |
||
1489 |
// Update topic view and if necessary attachment view counters ... but only if this is the first 'page view'
|
|
1490 |
if (isset($user->data['session_page']) && strpos($user->data['session_page'], '&t=' . $topic_id) === false) |
|
1491 |
{
|
|
1492 |
$sql = 'UPDATE ' . TOPICS_TABLE . ' |
|
1493 |
SET topic_views = topic_views + 1, topic_last_view_time = ' . time() . " |
|
1494 |
WHERE topic_id = $topic_id"; |
|
1495 |
$db->sql_query($sql); |
|
1496 |
||
1497 |
// Update the attachment download counts
|
|
1498 |
if (sizeof($update_count)) |
|
1499 |
{
|
|
1500 |
$sql = 'UPDATE ' . ATTACHMENTS_TABLE . ' |
|
1501 |
SET download_count = download_count + 1
|
|
1502 |
WHERE ' . $db->sql_in_set('attach_id', array_unique($update_count)); |
|
1503 |
$db->sql_query($sql); |
|
1504 |
}
|
|
1505 |
}
|
|
1506 |
||
1507 |
// Only mark topic if it's currently unread. Also make sure we do not set topic tracking back if earlier pages are viewed.
|
|
1508 |
if (isset($topic_tracking_info[$topic_id]) && $topic_data['topic_last_post_time'] > $topic_tracking_info[$topic_id] && $max_post_time > $topic_tracking_info[$topic_id]) |
|
1509 |
{
|
|
1510 |
markread('topic', $forum_id, $topic_id, $max_post_time); |
|
1511 |
||
1512 |
// Update forum info
|
|
1513 |
$all_marked_read = update_forum_tracking_info($forum_id, $topic_data['forum_last_post_time'], (isset($topic_data['forum_mark_time'])) ? $topic_data['forum_mark_time'] : false, false); |
|
1514 |
}
|
|
1515 |
else
|
|
1516 |
{
|
|
1517 |
$all_marked_read = true; |
|
1518 |
}
|
|
1519 |
||
1520 |
// If there are absolutely no more unread posts in this forum and unread posts shown, we can savely show the #unread link
|
|
1521 |
if ($all_marked_read) |
|
1522 |
{
|
|
1523 |
if ($post_unread) |
|
1524 |
{
|
|
1525 |
$template->assign_vars(array( |
|
1526 |
'U_VIEW_UNREAD_POST' => '#unread', |
|
1527 |
));
|
|
1528 |
}
|
|
1529 |
else if (isset($topic_tracking_info[$topic_id]) && $topic_data['topic_last_post_time'] > $topic_tracking_info[$topic_id]) |
|
1530 |
{
|
|
1531 |
$template->assign_vars(array( |
|
1532 |
'U_VIEW_UNREAD_POST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=unread") . '#unread', |
|
1533 |
));
|
|
1534 |
}
|
|
1535 |
}
|
|
1536 |
else if (!$all_marked_read) |
|
1537 |
{
|
|
1538 |
$last_page = ((floor($start / $config['posts_per_page']) + 1) == max(ceil($total_posts / $config['posts_per_page']), 1)) ? true : false; |
|
1539 |
||
1540 |
// What can happen is that we are at the last displayed page. If so, we also display the #unread link based in $post_unread
|
|
1541 |
if ($last_page && $post_unread) |
|
1542 |
{
|
|
1543 |
$template->assign_vars(array( |
|
1544 |
'U_VIEW_UNREAD_POST' => '#unread', |
|
1545 |
));
|
|
1546 |
}
|
|
1547 |
else if (!$last_page) |
|
1548 |
{
|
|
1549 |
$template->assign_vars(array( |
|
1550 |
'U_VIEW_UNREAD_POST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=unread") . '#unread', |
|
1551 |
));
|
|
1552 |
}
|
|
1553 |
}
|
|
1554 |
||
1555 |
// We overwrite $_REQUEST['f'] if there is no forum specified
|
|
1556 |
// to be able to display the correct online list.
|
|
1557 |
// One downside is that the user currently viewing this topic/post is not taken into account.
|
|
1558 |
if (empty($_REQUEST['f'])) |
|
1559 |
{
|
|
1560 |
$_REQUEST['f'] = $forum_id; |
|
1561 |
}
|
|
1562 |
||
1563 |
// Output the page
|
|
1564 |
page_header($user->lang['VIEW_TOPIC'] .' - ' . $topic_data['topic_title']); |
|
1565 |
||
1566 |
$template->set_filenames(array( |
|
1567 |
'body' => ($view == 'print') ? 'viewtopic_print.html' : 'viewtopic_body.html') |
|
1568 |
);
|
|
1569 |
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"), $forum_id); |
|
1570 |
||
1571 |
page_footer(); |
|
1572 |
||
1573 |
?>
|