2001-02-17 08:37:32 +00:00
< ? php
2001-03-07 06:53:39 +00:00
/***************************************************************************
2001-07-06 17:47:10 +00:00
* viewtopic . php
2001-03-07 06:53:39 +00:00
* -------------------
* begin : Saturday , Feb 13 , 2001
* copyright : ( C ) 2001 The phpBB Group
* email : support @ phpbb . com
*
* $Id $
*
***************************************************************************/
2001-09-07 22:56:50 +00:00
/***************************************************************************
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
***************************************************************************/
2001-08-30 22:07:08 +00:00
2002-03-18 13:35:43 +00:00
define ( 'IN_PHPBB' , true );
2002-03-22 23:17:06 +00:00
$phpbb_root_path = './' ;
2001-07-13 16:14:37 +00:00
include ( $phpbb_root_path . 'extension.inc' );
include ( $phpbb_root_path . 'common.' . $phpEx );
2003-02-26 00:37:43 +00:00
2003-04-26 01:17:40 +00:00
// Start session management
$user -> start ();
$auth -> acl ( $user -> data );
2003-02-26 00:37:43 +00:00
// Initial var setup
2003-02-27 14:27:21 +00:00
$forum_id = ( isset ( $_GET [ 'f' ])) ? max ( intval ( $_GET [ 'f' ]), 0 ) : 0 ;
$topic_id = ( isset ( $_GET [ 't' ])) ? max ( intval ( $_GET [ 't' ]), 0 ) : 0 ;
$post_id = ( isset ( $_GET [ 'p' ])) ? max ( intval ( $_GET [ 'p' ]), 0 ) : 0 ;
$start = ( isset ( $_GET [ 'start' ])) ? max ( intval ( $_GET [ 'start' ]), 0 ) : 0 ;
2001-10-16 01:00:47 +00:00
2003-02-27 14:27:21 +00:00
$sort_days = ( ! empty ( $_REQUEST [ 'st' ])) ? max ( intval ( $_REQUEST [ 'st' ]), 0 ) : 0 ;
2003-02-28 01:13:08 +00:00
$sort_key = ( ! empty ( $_REQUEST [ 'sk' ])) ? htmlspecialchars ( $_REQUEST [ 'sk' ]) : 't' ;
$sort_dir = ( ! empty ( $_REQUEST [ 'sd' ])) ? htmlspecialchars ( $_REQUEST [ 'sd' ]) : 'a' ;
2003-02-26 00:37:43 +00:00
// Do we have a topic or post id?
2003-05-11 00:58:14 +00:00
if ( ! $topic_id && ! $post_id )
2001-08-09 22:21:55 +00:00
{
2003-02-26 00:37:43 +00:00
trigger_error ( 'NO_TOPIC' );
2001-08-09 22:21:55 +00:00
}
2003-06-19 16:25:42 +00:00
$tracking_topics = ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) ? unserialize ( stripslashes ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) : array ();
2003-02-26 00:37:43 +00:00
2002-10-31 13:41:28 +00:00
// Find topic id if user requested a newer or older topic
2003-05-23 16:15:03 +00:00
$unread_post_id = '' ;
2003-05-11 00:58:14 +00:00
if ( isset ( $_GET [ 'view' ]) && ! $post_id )
2001-05-16 00:49:06 +00:00
{
2003-04-26 01:17:40 +00:00
if ( $_GET [ 'view' ] == 'unread' )
2001-09-26 22:12:38 +00:00
{
2003-04-26 01:17:40 +00:00
if ( $user -> data [ 'user_id' ] != ANONYMOUS )
2001-09-26 22:12:38 +00:00
{
2003-04-26 01:17:40 +00:00
if ( $config [ 'load_db_lastread' ])
{
switch ( SQL_LAYER )
{
case 'oracle' :
break ;
default :
$sql_lastread = 'LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.user_id = ' . $user -> data [ 'user_id' ] . '
AND tt . topic_id = p . topic_id ) ' ;
$sql_unread_time = ' tt.mark_time OR tt.mark_time IS NULL' ;
}
}
else
{
2003-06-19 16:25:42 +00:00
$sql_unread_time = base_convert ( max ( $tracking_topics [ $forum_id ]), 36 , 10 );
2003-05-23 23:46:55 +00:00
$sql_unread_time = max ( $sql_unread_time , $user -> data [ 'session_last_visit' ]);
2003-04-26 01:17:40 +00:00
}
2003-05-19 15:24:49 +00:00
$sql = ' SELECT p . post_id
FROM ( ' . POSTS_TABLE . " p
$sql_lastread , " . TOPICS_TABLE . " t )
WHERE t . topic_id = $topic_id
AND p . topic_id = t . topic_id
2003-03-25 00:05:28 +00:00
" . (( $auth->acl_get ('m_approve', $forum_id )) ? '' : 'AND p.post_approved = 1') . "
2003-05-23 23:46:55 +00:00
AND ( p . post_time > $sql_unread_time
2003-05-19 15:24:49 +00:00
OR p . post_id = t . topic_last_post_id )
2003-01-22 16:46:44 +00:00
ORDER BY p . post_time ASC " ;
$result = $db -> sql_query_limit ( $sql , 1 );
2002-11-19 18:55:23 +00:00
if ( ! ( $row = $db -> sql_fetchrow ( $result )))
2001-09-26 22:12:38 +00:00
{
2003-04-26 01:17:40 +00:00
// Setup user environment so we can process lang string
$user -> setup ();
meta_refresh ( 3 , " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id " );
$message = $user -> lang [ 'NO_UNREAD_POSTS' ] . '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_TOPIC' ], " <a href= \" viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id\ " > " , '</a>');
trigger_error ( $message );
2001-09-26 22:12:38 +00:00
}
2003-05-23 16:15:03 +00:00
$db -> sql_freeresult ( $result );
2002-11-19 18:55:23 +00:00
2003-05-23 16:15:03 +00:00
$unread_post_id = $post_id = $row [ 'post_id' ];
2001-09-26 22:12:38 +00:00
}
}
2002-10-31 13:47:00 +00:00
else if ( $_GET [ 'view' ] == 'next' || $_GET [ 'view' ] == 'previous' )
2001-05-16 00:49:06 +00:00
{
2002-11-18 21:04:45 +00:00
$sql_condition = ( $_GET [ 'view' ] == 'next' ) ? '>' : '<' ;
$sql_ordering = ( $_GET [ 'view' ] == 'next' ) ? 'ASC' : 'DESC' ;
2001-05-16 00:56:59 +00:00
2003-05-23 16:15:03 +00:00
$sql = ' SELECT t . topic_id
FROM ' . TOPICS_TABLE . ' t , ' . TOPICS_TABLE . " t2
2002-03-20 15:04:21 +00:00
WHERE t2 . topic_id = $topic_id
AND t . forum_id = t2 . forum_id
2003-05-23 16:15:03 +00:00
" . (( $auth->acl_get ('m_approve', $forum_id )) ? '' : 'AND t.topic_approved = 1') . "
2002-08-17 22:08:34 +00:00
AND t . topic_last_post_time $sql_condition t2 . topic_last_post_time
2003-01-22 16:46:44 +00:00
ORDER BY t . topic_last_post_time $sql_ordering " ;
$result = $db -> sql_query_limit ( $sql , 1 );
2001-08-02 08:36:38 +00:00
2002-10-31 13:47:00 +00:00
if ( ! ( $row = $db -> sql_fetchrow ( $result )))
2001-07-05 17:39:38 +00:00
{
2003-02-26 00:37:43 +00:00
$message = ( $_GET [ 'view' ] == 'next' ) ? 'NO_NEWER_TOPICS' : 'NO_OLDER_TOPICS' ;
2002-11-01 12:23:08 +00:00
trigger_error ( $message );
2001-07-05 17:39:38 +00:00
}
else
{
2002-03-20 15:04:21 +00:00
$topic_id = $row [ 'topic_id' ];
2001-07-05 17:39:38 +00:00
}
2001-05-16 00:49:06 +00:00
}
}
2001-07-05 17:39:38 +00:00
2003-01-22 16:46:44 +00:00
2001-07-05 17:39:38 +00:00
// This rather complex gaggle of code handles querying for topics but
// also allows for direct linking to a post (and the calculation of which
// page the post is on and the correct display of viewtopic)
2002-11-01 12:23:08 +00:00
$join_sql_table = ( ! $post_id ) ? '' : ', ' . POSTS_TABLE . ' p, ' . POSTS_TABLE . ' p2 ' ;
2003-03-13 00:40:28 +00:00
if ( ! $post_id )
{
$join_sql = " t.topic_id = $topic_id " ;
}
else
{
2003-03-25 00:05:28 +00:00
if ( $auth -> acl_get ( 'm_approve' , $forum_id ))
2003-03-13 00:40:28 +00:00
{
$join_sql = ( ! $post_id ) ? " t.topic_id = $topic_id " : " p.post_id = $post_id AND t.topic_id = p.topic_id AND p2.topic_id = p.topic_id AND p2.post_id <= $post_id " ;
}
else
{
$join_sql = ( ! $post_id ) ? " t.topic_id = $topic_id " : " p.post_id = $post_id AND p.post_approved = 1 AND t.topic_id = p.topic_id AND p2.topic_id = p.topic_id AND p2.post_approved = 1 AND p2.post_id <= $post_id " ;
}
}
2003-07-02 22:36:10 +00:00
$extra_fields = ( ! $post_id ) ? '' : ', COUNT(p2.post_id) AS prev_posts' ;
$order_sql = ( ! $post_id ) ? '' : 'GROUP BY p.post_id, t.topic_id, t.topic_title, t.topic_status, t.topic_replies, t.topic_time, t.topic_type, t.poll_max_options, t.poll_start, t.poll_length, t.poll_title, f.forum_name, f.forum_desc, f.forum_parents, f.parent_id, f.left_id, f.right_id, f.forum_status, f.forum_id, f.forum_style, f.forum_password ORDER BY p.post_id ASC' ;
2001-05-27 22:08:47 +00:00
2002-11-05 04:50:55 +00:00
if ( $user -> data [ 'user_id' ] != ANONYMOUS )
{
switch ( SQL_LAYER )
{
case 'oracle' :
2003-02-27 15:58:07 +00:00
// TODO
break ;
2002-11-05 04:50:55 +00:00
default :
$extra_fields .= ', tw.notify_status' ;
2003-04-22 16:47:34 +00:00
$join_sql_table .= ' LEFT JOIN ' . TOPICS_WATCH_TABLE . ' tw ON (tw.user_id = ' . $user -> data [ 'user_id' ] . '
AND t . topic_id = tw . topic_id ) ' ;
2002-11-05 04:50:55 +00:00
}
}
2003-02-27 15:58:07 +00:00
// Join to forum table on topic forum_id unless topic forum_id is zero
// whereupon we join on the forum_id passed as a parameter ... this
// is done so navigation, forum name, etc. remain consistent with where
// user clicked to view a global topic
2003-07-02 22:36:10 +00:00
// NOTE: for global announcements, set forum_id to the forum they should be
// displayed by default. Change this query to user POST_GLOBAL rather than
// "forum_id = 0". NOTE2: if you read this I forgot to remove this note before I committed my files.
$sql = 'SELECT t.topic_id, t.forum_id, t.topic_title, t.topic_attachment, t.topic_status, ' . (( $auth -> acl_get ( 'm_approve' )) ? 't.topic_replies_real AS topic_replies' : 't.topic_replies' ) . ', t.topic_last_post_id, t.topic_time, t.topic_type, t.poll_max_options, t.poll_start, t.poll_length, t.poll_title, f.forum_name, f.forum_desc, f.forum_parents, f.parent_id, f.left_id, f.right_id, f.forum_status, f.forum_id, f.forum_style, f.forum_password' . $extra_fields . '
FROM ' . TOPICS_TABLE . ' t , ' . FORUMS_TABLE . ' f ' . $join_sql_table . "
WHERE $join_sql
AND ( f . forum_id = t . forum_id
" . ((! $forum_id ) ? '' : 'OR (t.topic_type = ' . POST_GLOBAL . " AND f . forum_id = $forum_id ) " ) . "
)
$order_sql " ;
$sql = 'SELECT t.topic_id, t.topic_title, t.topic_attachment, t.topic_status, t.topic_replies, t.topic_replies_real, t.topic_last_post_id, t.topic_time, t.topic_type, t.poll_max_options, t.poll_start, t.poll_length, t.poll_title, f.forum_name, f.forum_desc, f.forum_parents, f.parent_id, f.left_id, f.right_id, f.forum_status, f.forum_id, f.forum_style, f.forum_password' . $extra_fields . '
2003-05-03 23:58:45 +00:00
FROM ' . TOPICS_TABLE . ' t , ' . FORUMS_TABLE . ' f ' . $join_sql_table . "
2001-10-16 13:10:09 +00:00
WHERE $join_sql
2003-02-27 15:58:07 +00:00
AND ( f . forum_id = t . forum_id
OR ( t . forum_id = 0 AND
f . forum_id = $forum_id )
2003-04-02 23:25:38 +00:00
)
2001-10-16 13:10:09 +00:00
$order_sql " ;
2002-07-14 14:45:26 +00:00
$result = $db -> sql_query ( $sql );
2001-05-27 22:08:47 +00:00
2003-01-22 20:16:18 +00:00
if ( ! $topic_data = $db -> sql_fetchrow ( $result ))
2001-03-04 04:17:02 +00:00
{
2003-02-26 00:37:43 +00:00
trigger_error ( 'NO_TOPIC' );
2001-03-04 04:17:02 +00:00
}
2003-02-27 14:27:21 +00:00
2003-07-02 22:36:10 +00:00
// Extract the data
extract ( $topic_data );
if ( ! $topic_approved && ! $auth -> acl_get ( 'm_approve' , $forum_id ))
{
trigger_error ( 'NO_TOPIC' );
}
2002-11-19 18:55:23 +00:00
2003-04-26 01:17:40 +00:00
// Setup look and feel
2003-07-02 22:36:10 +00:00
$user -> setup ( false , $forum_style );
2003-05-03 23:58:45 +00:00
2003-07-02 22:36:10 +00:00
// TODO: shouldn't this be moved after the f_read check?
2003-05-03 23:58:45 +00:00
// Forum is passworded ... check whether access has been granted to this
// user this session, if not show login box
2003-07-02 22:36:10 +00:00
if ( $forum_password )
2003-05-03 23:58:45 +00:00
{
login_forum_box ( $topic_data );
}
2003-06-23 14:00:57 +00:00
2001-05-30 20:21:42 +00:00
// Start auth check
2003-03-25 00:05:28 +00:00
if ( ! $auth -> acl_get ( 'f_read' , $forum_id ))
2001-05-30 20:21:42 +00:00
{
2003-03-17 00:53:38 +00:00
if ( $user -> data [ 'user_id' ] != ANONYMOUS )
2002-02-11 02:16:28 +00:00
{
2003-03-17 00:53:38 +00:00
trigger_error ( $user -> lang [ 'SORRY_AUTH_READ' ]);
2002-02-11 02:16:28 +00:00
}
2003-03-17 00:53:38 +00:00
login_box ( preg_replace ( '#.*?([a-z]+?\.' . $phpEx . '.*?)$#i' , '\1' , htmlspecialchars ( $_SERVER [ 'REQUEST_URI' ])), '' , $user -> lang [ 'LOGIN_VIEWFORUM' ]);
2001-05-30 20:21:42 +00:00
}
2002-11-19 18:55:23 +00:00
2003-06-23 14:00:57 +00:00
// Not final in the slightest! Far too simplistic
if ( isset ( $_GET [ 'rate' ]))
{
// Check for rating count for previous X time
// Grab existing rating for this post, if it exists
$sql = ' SELECT *
FROM ' . RATINGS_TABLE . '
WHERE user_id = ' . $user->data[' user_id ' ] . "
AND post_id = $post_id " ;
$result = $db -> sql_query ( $sql );
switch ( $_GET [ 'rate' ])
{
case 'good' :
$rate = 1 ;
break ;
case 'bad' :
$rate = - 1 ;
break ;
}
$updated = ( $row = $db -> sql_fetchrow ( $result )) ? true : false ;
$db -> sql_freeresult ( $result );
// Insert rating if appropriate
$sql = ( ! $updated ) ? 'INSERT INTO ' . RATINGS_TABLE . ' (user_id, post_id, rating, rating_time) VALUES (' . $user -> data [ 'user_id' ] . " , $post_id , $rate , " . time () . ')' : 'UPDATE ' . RATINGS_TABLE . " SET rating = $rate , rating_time = " . time () . " WHERE post_id = $post_id AND user_id = " . $user -> data [ 'user_id' ];
$db -> sql_query ( $sql );
// Rating sum and count since first post
$sql = ' SELECT p . poster_id , SUM ( r . rating ) AS rated , COUNT ( r . rating ) as total_ratings
FROM ' . RATINGS_TABLE . ' r , ' . POSTS_TABLE . ' p , ' . POSTS_TABLE . " p2
WHERE p2 . post_id = $post_id
AND p . poster_id = p2 . poster_id
AND p . post_time < " . (time() - (30 * 86400)) . '
AND r . post_id = p . post_id
AND r . user_id <> p2 . poster_id
GROUP BY p . poster_id ' ;
$result = $db -> sql_query ( $sql );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
$total_ratings = $row [ 'total_ratings' ];
$historic_rating = ( $row [ 'rated' ] / $row [ 'total_ratings' ]) * 0.30 ;
// Rating sum and count past thirty days
$sql = ' SELECT p . poster_id , SUM ( r . rating ) AS rated , COUNT ( r . rating ) as total_ratings
FROM ' . RATINGS_TABLE . ' r , ' . POSTS_TABLE . ' p , ' . POSTS_TABLE . " p2
WHERE p2 . post_id = $post_id
AND p . poster_id = p2 . poster_id
AND p . post_time > " . (time() - (30 * 86400)) . '
AND r . post_id = p . post_id
AND r . user_id <> p2 . poster_id
GROUP BY p . poster_id ' ;
$result = $db -> sql_query ( $sql );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
$total_ratings += $row [ 'total_ratings' ];
$thirty_day_rating = ( $row [ 'rated' ] / $row [ 'total_ratings' ]) * 0.50 ;
if ( $total_ratings > $config [ 'min_ratings' ])
{
// Post count and reg date for this user
$sql = ' SELECT user_id , user_regdate , user_posts
FROM ' . USERS_TABLE . '
WHERE user_id = ' . $row[' poster_id ' ];
$result = $db -> sql_query ( $sql );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
$post_count_rating = ( $row [ 'user_posts' ] / $config [ 'num_posts' ]) * 0.1 ;
$day_rating = (( $row [ 'user_regdate' ] > $config [ 'board_startdate' ]) ? $config [ 'board_startdate' ] / $row [ 'user_regdate' ] : 1 ) * 0.1 ;
$poster_id = $row [ 'user_id' ];
// Number of rated posts by this user
/* $sql = ' SELECT COUNT ( DISTINCT ( p . post_id )) AS rated_posts
FROM ' . RATINGS_TABLE . ' r , ' . POSTS_TABLE . " p
WHERE p . poster_id = $poster_id
AND r . post_id = p . post_id
AND r . user_id <> $poster_id " ;
$result = $db -> sql_query ( $sql );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result ); */
$karma = ( $historic_rating + $thirty_day_rating + $day_rating + $post_count_rating ) * 5 ;
$karma = ( $karma < 0 ) ? floor ( $karma ) : (( $karma > 0 ) ? ceil ( $karma ) : 0 );
$sql = 'UPDATE ' . USERS_TABLE . "
SET user_karma = $karma
WHERE user_id = $poster_id " ;
$db -> sql_query ( $sql );
}
meta_refresh ( 3 , " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id &p= $post_id # $post_id " );
$message = ( $updated ) ? $user -> lang [ 'RATING_UPDATED' ] : $user -> lang [ 'RATING_ADDED' ];
$message = $message . '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_POST' ], " <a href= \" viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id &p= $post_id # $post_id\ " > " , '</a>');
trigger_error ( $message );
}
2002-11-19 18:55:23 +00:00
2003-02-26 00:37:43 +00:00
// What is start equal to?
2002-10-31 13:41:28 +00:00
if ( ! empty ( $post_id ))
2002-02-11 02:16:28 +00:00
{
2002-10-30 00:57:27 +00:00
$start = floor (( $prev_posts - 1 ) / $config [ 'posts_per_page' ]) * $config [ 'posts_per_page' ];
2002-02-11 02:16:28 +00:00
}
2003-05-23 16:15:03 +00:00
2003-04-10 21:35:31 +00:00
// Fill extension informations, if this topic has attachments
$extensions = array ();
if ( $topic_attachment )
{
obtain_attach_extensions ( $extensions );
}
2003-02-26 00:37:43 +00:00
2003-05-23 16:15:03 +00:00
2003-02-26 00:37:43 +00:00
// Are we watching this topic?
2003-05-23 16:15:03 +00:00
$s_watching_topic = $s_watching_topic_img = '' ;
2003-06-05 00:53:39 +00:00
if ( $config [ 'email_enable' ] && $config [ 'allow_topic_notify' ])
2003-05-23 16:15:03 +00:00
{
watch_topic_forum ( 'topic' , $s_watching_topic , $s_watching_topic_img , $user -> data [ 'user_id' ], $topic_id , $notify_status );
}
2002-07-14 14:45:26 +00:00
2003-01-08 22:23:51 +00:00
2002-07-14 14:45:26 +00:00
// Post ordering options
2003-02-26 00:37:43 +00:00
$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' ], 364 => $user -> lang [ '1_YEAR' ]);
2003-01-08 22:23:51 +00:00
$sort_by_text = array ( 'a' => $user -> lang [ 'AUTHOR' ], 't' => $user -> lang [ 'POST_TIME' ], 's' => $user -> lang [ 'SUBJECT' ]);
2003-02-27 03:41:34 +00:00
$sort_by_sql = array ( 'a' => 'u.username' , 't' => 'p.post_id' , 's' => 'p.post_subject' );
2003-02-26 00:37:43 +00:00
2003-05-02 15:50:11 +00:00
$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '' ;
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 );
2001-08-14 00:29:39 +00:00
2003-02-27 14:27:21 +00:00
// Obtain correct post count and ordering SQL if user has
// requested anything different
2003-02-27 03:41:34 +00:00
if ( $sort_days )
2002-07-14 14:45:26 +00:00
{
2003-02-27 03:41:34 +00:00
$min_post_time = time () - ( $sort_days * 86400 );
$sql = ' SELECT COUNT ( post_id ) AS num_posts
FROM ' . POSTS_TABLE . "
WHERE topic_id = $topic_id
AND post_time >= $min_post_time
2003-03-25 00:05:28 +00:00
" . (( $auth->acl_get ('m_approve', $forum_id )) ? '' : 'AND p.post_approved = 1');
2003-02-27 03:41:34 +00:00
$result = $db -> sql_query ( $sql );
2003-05-20 14:01:57 +00:00
if ( isset ( $_POST [ 'sort' ]))
{
$start = 0 ;
}
2003-02-27 03:41:34 +00:00
$total_posts = ( $row = $db -> sql_fetchrow ( $result )) ? $row [ 'num_posts' ] : 0 ;
$limit_posts_time = " AND p.post_time >= $min_post_time " ;
2001-08-14 00:29:39 +00:00
}
2003-02-27 15:58:07 +00:00
else
{
$total_posts = $topic_replies + 1 ;
$limit_posts_time = '' ;
}
2003-02-27 03:41:34 +00:00
2003-02-27 14:27:21 +00:00
// Select the sort order
$sort_order = $sort_by_sql [ $sort_key ] . ' ' . (( $sort_dir == 'd' ) ? 'DESC' : 'ASC' );
2003-01-08 22:23:51 +00:00
2003-06-19 16:25:42 +00:00
// Grab ranks
$ranks = array ();
obtain_ranks ( $ranks );
2001-03-04 04:17:02 +00:00
2002-07-14 14:45:26 +00:00
2003-01-22 16:46:44 +00:00
// Grab icons
$icons = array ();
obtain_icons ( $icons );
2002-07-14 14:45:26 +00:00
2002-11-19 18:55:23 +00:00
// Was a highlight request part of the URI?
2002-11-21 22:46:12 +00:00
$highlight_match = $highlight = '' ;
2003-02-27 14:27:21 +00:00
if ( isset ( $_GET [ 'hilit' ]))
2002-01-09 23:35:41 +00:00
{
// Split words and phrases
2003-02-27 14:27:21 +00:00
$words = explode ( ' ' , trim ( htmlspecialchars ( urldecode ( $_GET [ 'hilit' ]))));
2002-01-09 23:35:41 +00:00
2002-10-31 13:41:28 +00:00
foreach ( $words as $word )
2002-01-09 23:35:41 +00:00
{
2002-10-31 13:41:28 +00:00
if ( trim ( $word ) != '' )
2002-01-09 23:35:41 +00:00
{
2003-03-08 22:10:24 +00:00
$highlight_match .= (( $highlight_match != '' ) ? '|' : '' ) . str_replace ( '*' , '\w*?' , preg_quote ( $word , '#' ));
2002-01-09 23:35:41 +00:00
}
}
2002-10-31 13:41:28 +00:00
unset ( $words );
2002-11-21 22:46:12 +00:00
2003-02-27 14:27:21 +00:00
$highlight = urlencode ( $_GET [ 'hilit' ]);
2002-01-09 23:35:41 +00:00
}
2003-01-22 16:46:44 +00:00
2003-02-26 00:37:43 +00:00
// Forum rules listing
2002-07-14 14:45:26 +00:00
$s_forum_rules = '' ;
2003-02-26 00:37:43 +00:00
gen_forum_rules ( 'topic' , $forum_id );
// Quick mod tools
2002-07-17 14:56:12 +00:00
$topic_mod = '' ;
2003-06-23 14:00:57 +00:00
$topic_mod .= ( $auth -> acl_get ( 'm_lock' , $forum_id )) ? (( $topic_status == ITEM_UNLOCKED ) ? '<option value="lock">' . $user -> lang [ 'LOCK_TOPIC' ] . '</option>' : '<option value="unlock">' . $user -> lang [ 'UNLOCK_TOPIC' ] . '</option>' ) : '' ;
2003-04-17 20:47:17 +00:00
$topic_mod .= ( $auth -> acl_get ( 'm_delete' , $forum_id )) ? '<option value="delete_topic">' . $user -> lang [ 'DELETE_TOPIC' ] . '</option>' : '' ;
2003-03-25 00:05:28 +00:00
$topic_mod .= ( $auth -> acl_get ( 'm_move' , $forum_id )) ? '<option value="move">' . $user -> lang [ 'MOVE_TOPIC' ] . '</option>' : '' ;
$topic_mod .= ( $auth -> acl_get ( 'm_split' , $forum_id )) ? '<option value="split">' . $user -> lang [ 'SPLIT_TOPIC' ] . '</option>' : '' ;
$topic_mod .= ( $auth -> acl_get ( 'm_merge' , $forum_id )) ? '<option value="merge">' . $user -> lang [ 'MERGE_TOPIC' ] . '</option>' : '' ;
2003-04-09 21:55:03 +00:00
$topic_mod .= ( $auth -> acl_get ( 'm_' , $forum_id )) ? '<option value="fork">' . $user -> lang [ 'FORK_TOPIC' ] . '</option>' : '' ;
2003-03-30 21:05:58 +00:00
$topic_mod .= ( $auth -> acl_get ( 'm_' , $forum_id ) && $topic_type != POST_NORMAL ) ? '<option value="make_normal">' . $user -> lang [ 'MAKE_NORMAL' ] . '</option>' : '' ;
$topic_mod .= ( $auth -> acl_get ( 'f_sticky' , $forum_id ) && $topic_type != POST_STICKY ) ? '<option value="make_sticky">' . $user -> lang [ 'MAKE_STICKY' ] . '</option>' : '' ;
2003-07-02 22:36:10 +00:00
$topic_mod .= ( $auth -> acl_get ( 'f_announce' , $forum_id ) && $topic_type != POST_ANNOUNCE ) ? '<option value="make_announce">' . $user -> lang [ 'MAKE_ANNOUNCE' ] . '</option>' : '' ;
$topic_mod .= ( $auth -> acl_get ( 'f_announce' , $forum_id ) && $topic_type != POST_GLOBAL ) ? '<option value="make_global">' . $user -> lang [ 'MAKE_GLOBAL' ] . '</option>' : '' ;
2003-04-02 23:25:38 +00:00
$topic_mod .= ( $auth -> acl_get ( 'm_' , $forum_id )) ? '<option value="viewlogs">' . $user -> lang [ 'VIEW_TOPIC_LOGS' ] . '</option>' : '' ;
2003-02-26 00:37:43 +00:00
2002-07-14 14:45:26 +00:00
// If we've got a hightlight set pass it on to pagination.
2003-05-26 23:53:34 +00:00
$pagination_url = " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id & " . (( $highlight_match ) ? " &hilit= $highlight " : '' );
2003-02-27 03:41:34 +00:00
$pagination = generate_pagination ( $pagination_url , $total_posts , $config [ 'posts_per_page' ], $start );
2002-07-14 14:45:26 +00:00
2003-02-26 00:37:43 +00:00
2003-01-21 15:58:32 +00:00
// Grab censored words
$censors = array ();
obtain_word_list ( $censors );
2002-01-12 17:00:32 +00:00
2003-01-21 15:58:32 +00:00
2003-01-22 20:16:18 +00:00
// Navigation links
generate_forum_nav ( $topic_data );
2003-01-22 16:46:44 +00:00
2002-11-19 18:55:23 +00:00
// Moderators
$forum_moderators = array ();
get_moderators ( $forum_moderators , $forum_id );
2003-01-08 22:23:51 +00:00
2003-01-21 15:58:32 +00:00
// This is only used for print view so ...
2003-03-29 18:28:45 +00:00
$server_path = ( ! isset ( $_GET [ 'view' ])) ? '' : (( $config [ 'cookie_secure' ]) ? 'https://' : 'http://' ) . trim ( $config [ 'server_name' ]) . (( $config [ 'server_port' ] <> 80 ) ? ':' . trim ( $config [ 'server_port' ]) . '/' : '/' ) . trim ( $config [ 'script_path' ]) . '/' ;
2003-01-21 15:58:32 +00:00
2003-04-26 01:17:40 +00:00
// Replace naughty words in title
if ( sizeof ( $censors ))
{
$topic_title = preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $topic_title );
}
2002-01-12 17:00:32 +00:00
// Send vars to template
2001-05-27 22:08:47 +00:00
$template -> assign_vars ( array (
2002-10-28 00:08:18 +00:00
'FORUM_ID' => $forum_id ,
'FORUM_NAME' => $forum_name ,
2002-11-19 18:55:23 +00:00
'FORUM_DESC' => strip_tags ( $forum_desc ),
2002-10-28 00:08:18 +00:00
'TOPIC_ID' => $topic_id ,
'TOPIC_TITLE' => $topic_title ,
2003-06-23 14:00:57 +00:00
'PAGINATION' => $pagination ,
'PAGE_NUMBER' => on_page ( $total_posts , $config [ 'posts_per_page' ], $start ),
2003-03-25 00:05:28 +00:00
'TOTAL_POSTS' => ( $total_posts == 1 ) ? $user -> lang [ 'VIEW_TOPIC_POST' ] : sprintf ( $user -> lang [ 'VIEW_TOPIC_POSTS' ], $total_posts ),
2003-05-02 15:50:11 +00:00
'MCP' => ( $auth -> acl_get ( 'm_' , $forum_id )) ? sprintf ( $user -> lang [ 'MCP' ], " <a href= \" mcp. $phpEx ?sid= " . $user -> session_id . " &f= $forum_id &t= $topic_id &start= $start & $u_sort_param &posts_per_page= " . $config [ 'posts_per_page' ] . '">' , '</a>' ) : '' ,
2003-04-15 23:12:28 +00:00
'MODERATORS' => ( sizeof ( $forum_moderators [ $forum_id ])) ? implode ( ', ' , $forum_moderators [ $forum_id ]) : '' ,
2002-10-28 00:08:18 +00:00
2003-06-19 16:25:42 +00:00
'POST_IMG' => ( $forum_status == ITEM_LOCKED ) ? $user -> img ( 'btn_locked' , $user -> lang [ 'FORUM_LOCKED' ]) : $user -> img ( 'btn_post' , $user -> lang [ 'POST_NEW_TOPIC' ]),
2003-05-23 16:15:03 +00:00
'QUOTE_IMG' => $user -> img ( 'btn_quote' , $user -> lang [ 'QUOTE_POST' ]),
2003-05-23 23:46:55 +00:00
'REPLY_IMG' => ( $forum_status == ITEM_LOCKED || $topic_status == ITEM_LOCKED ) ? $user -> img ( 'btn_locked' , $user -> lang [ 'TOPIC_LOCKED' ]) : $user -> img ( 'btn_reply' , $user -> lang [ 'REPLY_TO_TOPIC' ]),
2003-05-23 16:15:03 +00:00
'EDIT_IMG' => $user -> img ( 'btn_edit' , $user -> lang [ 'EDIT_POST' ]),
'DELETE_IMG' => $user -> img ( 'btn_delete' , $user -> lang [ 'DELETE_POST' ]),
'IP_IMG' => $user -> img ( 'btn_ip' , $user -> lang [ 'VIEW_IP' ]),
'PROFILE_IMG' => $user -> img ( 'btn_profile' , $user -> lang [ 'READ_PROFILE' ]),
'SEARCH_IMG' => $user -> img ( 'btn_search' , $user -> lang [ 'SEARCH_USER_POSTS' ]),
'PM_IMG' => $user -> img ( 'btn_pm' , $user -> lang [ 'SEND_PRIVATE_MESSAGE' ]),
'EMAIL_IMG' => $user -> img ( 'btn_email' , $user -> lang [ 'SEND_EMAIL' ]),
'WWW_IMG' => $user -> img ( 'btn_www' , $user -> lang [ 'VISIT_WEBSITE' ]),
'ICQ_IMG' => $user -> img ( 'btn_icq' , $user -> lang [ 'ICQ' ]),
'AIM_IMG' => $user -> img ( 'btn_aim' , $user -> lang [ 'AIM' ]),
'MSN_IMG' => $user -> img ( 'btn_msnm' , $user -> lang [ 'MSNM' ]),
'YIM_IMG' => $user -> img ( 'btn_yim' , $user -> lang [ 'YIM' ]) ,
'JABBER_IMG' => $user -> img ( 'btn_jabber' , $user -> lang [ 'JABBER' ]) ,
'REPORT_IMG' => $user -> img ( 'btn_report' , $user -> lang [ 'REPORT_POST' ]),
2003-03-30 14:33:50 +00:00
'REPORTED_IMG' => $user -> img ( 'icon_reported' , $user -> lang [ 'POST_BEEN_REPORTED' ]),
'UNAPPROVED_IMG' => $user -> img ( 'icon_unapproved' , $user -> lang [ 'POST_NOT_BEEN_APPROVED' ]),
2003-03-13 00:40:28 +00:00
2003-02-26 00:37:43 +00:00
'S_SELECT_SORT_DIR' => $s_sort_dir ,
'S_SELECT_SORT_KEY' => $s_sort_key ,
'S_SELECT_SORT_DAYS' => $s_limit_days ,
2003-04-26 01:17:40 +00:00
'S_TOPIC_ACTION' => " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id &start= $start " ,
2003-02-26 00:37:43 +00:00
'S_TOPIC_MOD' => ( $topic_mod != '' ) ? '<select name="mode">' . $topic_mod . '</select>' : '' ,
2003-02-06 00:24:04 +00:00
'S_MOD_ACTION' => " mcp. $phpEx ?sid= " . $user -> session_id . " &t= $topic_id &quickmod=1 " ,
2003-03-06 01:08:00 +00:00
2003-02-28 14:35:35 +00:00
'S_WATCH_TOPIC' => $s_watching_topic ,
2003-04-26 01:17:40 +00:00
'S_DISPLAY_SEARCHBOX' => ( $auth -> acl_get ( 'f_search' , $forum_id )) ? true : false ,
2003-02-28 14:35:35 +00:00
'S_SEARCHBOX_ACTION' => " search. $phpEx $SID &f= $forum_id " ,
2002-10-28 00:08:18 +00:00
2003-04-26 01:17:40 +00:00
'U_TOPIC' => $server_path . " viewtopic. $phpEx ?f= $forum_id &t= $topic_id " ,
2002-11-20 23:07:01 +00:00
'U_FORUM' => $server_path ,
2003-07-02 22:36:10 +00:00
'U_VIEW_UNREAD_POST' => " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id &view=unread#unread " ,
2003-05-02 15:50:11 +00:00
'U_VIEW_TOPIC' => " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id &start= $start & $u_sort_param &hilit= $highlight " ,
2003-05-28 14:20:11 +00:00
'U_VIEW_FORUM' => " viewforum. $phpEx $SID &f= $forum_id " ,
'U_VIEW_OLDER_TOPIC' => " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id &view=previous " ,
2003-07-02 22:36:10 +00:00
'U_VIEW_NEWER_TOPIC' => " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id &view=next " ,
2003-06-19 16:25:42 +00:00
'U_PRINT_TOPIC' => ( $auth -> acl_get ( 'f_print' , $forum_id )) ? " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id & $u_sort_param &view=print " : '' ,
'U_EMAIL_TOPIC' => ( $auth -> acl_get ( 'f_email' , $forum_id ) && $config [ 'email_enable' ]) ? " memberlist. $phpEx $SID &mode=email&t= $topic_id " : '' ,
2003-03-29 18:28:45 +00:00
2003-06-19 16:25:42 +00:00
'U_POST_NEW_TOPIC' => " posting. $phpEx $SID &mode=post&f= $forum_id " ,
2003-05-28 14:20:11 +00:00
'U_POST_REPLY_TOPIC' => " posting. $phpEx $SID &mode=reply&f= $forum_id &t= $topic_id " )
2001-07-06 00:03:51 +00:00
);
2001-05-03 22:10:23 +00:00
2003-05-28 14:20:11 +00:00
2002-08-15 15:45:22 +00:00
// Does this topic contain a poll?
2002-10-30 00:57:27 +00:00
if ( ! empty ( $poll_start ))
2001-09-06 00:29:07 +00:00
{
2003-05-23 16:15:03 +00:00
$sql = ' SELECT *
2003-05-25 14:32:20 +00:00
FROM ' . POLL_OPTIONS_TABLE . '
WHERE topic_id = ' . $topic_id . '
ORDER BY poll_option_id ' ;
2002-07-14 14:45:26 +00:00
$result = $db -> sql_query ( $sql );
2001-09-06 00:29:07 +00:00
2003-06-29 10:59:36 +00:00
$poll_info = array ();
2002-11-01 12:23:08 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2001-09-06 00:29:07 +00:00
{
2002-10-30 00:57:27 +00:00
$poll_info [] = $row ;
}
$db -> sql_freeresult ( $result );
2002-07-14 14:45:26 +00:00
2003-04-26 01:17:40 +00:00
if ( $user -> data [ 'user_id' ] != ANONYMOUS )
2003-04-22 16:47:34 +00:00
{
2003-05-23 16:15:03 +00:00
$sql = ' SELECT poll_option_id
2003-05-25 14:32:20 +00:00
FROM ' . POLL_VOTES_TABLE . '
WHERE topic_id = ' . $topic_id . '
AND vote_user_id = ' . $user->data[' user_id ' ];
2003-04-26 01:17:40 +00:00
$result = $db -> sql_query ( $sql );
$voted_id = array ();
2003-07-02 22:36:10 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2003-04-22 16:47:34 +00:00
{
2003-07-02 22:36:10 +00:00
$voted_id [] = $row [ 'poll_option_id' ];
2003-04-22 16:47:34 +00:00
}
2003-04-26 01:17:40 +00:00
$db -> sql_freeresult ( $result );
2003-04-22 16:47:34 +00:00
}
2003-04-26 01:17:40 +00:00
else
2003-04-22 16:47:34 +00:00
{
2003-04-26 01:17:40 +00:00
// Cookie based guest tracking ... I don't like this but hum ho
// it's oft requested. This relies on "nice" users who don't feel
// the need to delete cookies to mess with results. We could get
// a little more clever by time limiting based on ip's but ultimately
// it can be overcome without great difficulty.
if ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_poll_' . $topic_id ]))
2003-04-22 16:47:34 +00:00
{
2003-04-26 01:17:40 +00:00
$voted_id = explode ( ',' , $_COOKIE [ $config [ 'cookie_name' ] . '_poll_' . $topic_id ]);
2003-04-22 16:47:34 +00:00
}
2003-04-26 01:17:40 +00:00
}
$s_can_vote = ((( ! sizeof ( $voted_id ) && $auth -> acl_get ( 'f_vote' , $forum_id )) || $auth -> acl_get ( 'f_votechg' , $forum_id )) &&
2003-06-29 10:59:36 +00:00
(( $poll_length != 0 && $poll_start + $poll_length > time ()) || ( $poll_length == 0 )) &&
2003-04-26 01:17:40 +00:00
$topic_status != ITEM_LOCKED &&
$forum_status != ITEM_LOCKED ) ? true : false ;
$s_display_results = ( ! $s_can_vote || ( $s_can_vote && sizeof ( $voted_id )) || $_GET [ 'vote' ] = 'viewresult' ) ? true : false ;
2003-04-22 16:47:34 +00:00
2003-04-26 01:17:40 +00:00
if ( isset ( $_POST [ 'castvote' ]) && $s_can_vote )
{
2003-04-22 16:47:34 +00:00
$voted_id = array_map ( 'intval' , $_POST [ 'vote_id' ]);
if ( ! sizeof ( $voted_id ) || sizeof ( $voted_id ) > $poll_max_options )
{
2003-04-26 01:17:40 +00:00
meta_refresh ( 5 , " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id " );
$message = ( ! sizeof ( $voted_id )) ? 'NO_VOTE_OPTION' : 'TOO_MANY_VOTE_OPTIONS' ;
$message = $user -> lang [ $message ] . '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_TOPIC' ], " <a href= \" viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id\ " > " , '</a>');
trigger_error ( $message );
2003-04-22 16:47:34 +00:00
}
foreach ( $voted_id as $option )
{
2003-04-26 01:17:40 +00:00
$sql = 'UPDATE ' . POLL_OPTIONS_TABLE . "
2003-04-22 16:47:34 +00:00
SET poll_option_total = poll_option_total + 1
WHERE poll_option_id = $option
AND topic_id = $topic_id " ;
$db -> sql_query ( $sql );
2003-04-26 01:17:40 +00:00
if ( $user -> data [ 'user_id' ] != ANONYMOUS )
{
$sql = 'INSERT INTO ' . POLL_VOTES_TABLE . " (topic_id, poll_option_id, vote_user_id, vote_user_ip)
VALUES ( $topic_id , $option , " . $user->data ['user_id'] . " , '$user->ip' ) " ;
$db -> sql_query ( $sql );
}
2003-04-22 16:47:34 +00:00
}
2003-04-26 01:17:40 +00:00
if ( $user -> data [ 'user_id' ] == ANONYMOUS )
{
setcookie ( $config [ 'cookie_name' ] . '_poll_' . $topic_id , implode ( ',' , $voted_id ), time () + 31536000 , $config [ 'cookie_path' ], $config [ 'cookie_domain' ], $config [ 'cookie_secure' ]);
}
$sql = 'UPDATE ' . TOPICS_TABLE . '
SET poll_last_vote = ' . time() . ' , topic_last_post_time = ' . time () . "
2003-04-22 16:47:34 +00:00
WHERE topic_id = $topic_id " ;
$db -> sql_query ( $sql );
2003-04-26 01:17:40 +00:00
meta_refresh ( 5 , " viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id " );
$message = $user -> lang [ 'VOTE_SUBMITTED' ] . '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_TOPIC' ], " <a href= \" viewtopic. $phpEx $SID &f= $forum_id &t= $topic_id\ " > " , '</a>');
trigger_error ( $message );
}
2001-09-06 00:29:07 +00:00
2002-10-30 00:57:27 +00:00
$poll_total = 0 ;
foreach ( $poll_info as $poll_option )
{
$poll_total += $poll_option [ 'poll_option_total' ];
}
2002-07-14 14:45:26 +00:00
2002-10-30 00:57:27 +00:00
foreach ( $poll_info as $poll_option )
{
2003-01-21 15:58:32 +00:00
$poll_option [ 'poll_option_text' ] = ( sizeof ( $censors )) ? preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $poll_option [ 'poll_option_text' ]) : $poll_option [ 'poll_option_text' ];
2002-11-18 21:04:45 +00:00
$option_pct = ( $poll_total > 0 ) ? $poll_option [ 'poll_option_total' ] / $poll_total : 0 ;
2002-10-30 00:57:27 +00:00
$option_pct_txt = sprintf ( " %.1d%% " , ( $option_pct * 100 ));
$template -> assign_block_vars ( 'poll_option' , array (
'POLL_OPTION_ID' => $poll_option [ 'poll_option_id' ],
'POLL_OPTION_CAPTION' => $poll_option [ 'poll_option_text' ],
'POLL_OPTION_RESULT' => $poll_option [ 'poll_option_total' ],
2003-04-26 01:17:40 +00:00
'POLL_OPTION_PERCENT' => $option_pct_txt ,
2003-04-22 16:47:34 +00:00
'POLL_OPTION_IMG' => $user -> img ( 'poll_center' , $option_pct_txt , round ( $option_pct * $user -> theme [ 'poll_length' ]), true ),
'POLL_OPTION_VOTED' => ( in_array ( $poll_option [ 'poll_option_id' ], $voted_id )) ? true : false )
2002-10-30 00:57:27 +00:00
);
}
2001-09-07 22:56:50 +00:00
2002-10-30 00:57:27 +00:00
$template -> assign_vars ( array (
2003-04-22 16:47:34 +00:00
'POLL_QUESTION' => ( sizeof ( $censors )) ? preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $poll_title ) : $poll_title ,
2002-10-30 00:57:27 +00:00
'TOTAL_VOTES' => $poll_total ,
'POLL_LEFT_CAP_IMG' => $user -> img ( 'poll_left' ),
'POLL_RIGHT_CAP_IMG' => $user -> img ( 'poll_right' ),
2001-09-06 00:29:07 +00:00
2003-05-23 16:15:03 +00:00
'L_MAX_VOTES' => ( $poll_max_options == 1 ) ? $user -> lang [ 'MAX_OPTION_SELECT' ] : sprintf ( $user -> lang [ 'MAX_OPTIONS_SELECT' ], $poll_max_options ),
'L_POLL_LENGTH' => ( $poll_length ) ? sprintf ( $user -> lang [ 'POLL_RUN_TILL' ], $user -> format_date ( $poll_length + $poll_start )) : '' ,
2003-04-22 16:47:34 +00:00
2003-04-26 01:17:40 +00:00
'S_HAS_POLL' => true ,
'S_CAN_VOTE' => $s_can_vote ,
'S_DISPLAY_RESULTS' => $s_display_results ,
2003-04-22 16:47:34 +00:00
'S_IS_MULTI_CHOICE' => ( $poll_max_options > 1 ) ? true : false ,
2003-05-02 15:50:11 +00:00
'S_POLL_ACTION' => " viewtopic. $phpEx $SID &t= $topic_id & $u_sort_param " ,
2002-02-12 22:57:03 +00:00
2003-05-23 16:15:03 +00:00
'U_VIEW_RESULTS' => " viewtopic. $phpEx $SID &t= $topic_id & $u_sort_param &vote=viewresult " )
2002-10-30 00:57:27 +00:00
);
2003-05-02 15:50:11 +00:00
unset ( $poll_info );
unset ( $voted_id );
2001-09-06 00:29:07 +00:00
}
2003-01-08 22:23:51 +00:00
2002-07-14 14:45:26 +00:00
// Container for user details, only process once
2003-04-18 15:04:12 +00:00
$user_cache = $attachments = $attach_list = $rowset = $update_count = array ();
2003-04-16 20:45:30 +00:00
$has_attachments = FALSE ;
2003-02-26 00:37:43 +00:00
$force_encoding = '' ;
2003-04-22 16:47:34 +00:00
$bbcode_bitfield = $i = 0 ;
2001-05-24 20:10:34 +00:00
2003-04-16 20:45:30 +00:00
// Go ahead and pull all data for this topic
2003-06-05 00:53:39 +00:00
$sql = " SELECT u.username, u.user_id, u.user_colour, u.user_posts, u.user_from, u.user_karma, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_jabber, u.user_regdate, u.user_msnm, u.user_allow_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_sig_bbcode_bitfield, u.user_avatar, u.user_avatar_type, u.user_avatar_width, u.user_avatar_height, p.*
2003-04-16 20:45:30 +00:00
FROM " . POSTS_TABLE . " p , " . USERS_TABLE . " u
WHERE p . topic_id = $topic_id
" . (( $auth->acl_get ('m_approve', $forum_id )) ? '' : 'AND p.post_approved = 1') . "
$limit_posts_time
AND u . user_id = p . poster_id
ORDER BY $sort_order " ;
2003-06-23 14:00:57 +00:00
$result = $db -> sql_query_limit ( $sql , $config [ 'posts_per_page' ], $start );
2003-04-16 20:45:30 +00:00
if ( ! $row = $db -> sql_fetchrow ( $result ))
{
trigger_error ( $user -> lang [ 'NO_TOPIC' ]);
}
2003-04-17 02:06:49 +00:00
// Posts are stored in the $rowset array while $attach_list, $user_cache
// and the global bbcode_bitfield are built
2003-04-16 20:45:30 +00:00
do
{
2003-06-17 19:34:17 +00:00
$display_notice = FALSE ;
2003-04-17 16:59:37 +00:00
$poster_id = $row [ 'poster_id' ];
2003-04-17 02:06:49 +00:00
$poster = ( $poster_id == ANONYMOUS ) ? (( ! empty ( $row [ 'post_username' ])) ? $row [ 'post_username' ] : $user -> lang [ 'GUEST' ]) : $row [ 'username' ];
if ( $row [ 'user_karma' ] < $user -> data [ 'user_min_karma' ] && ( empty ( $_GET [ 'view' ]) || $_GET [ 'view' ] != 'karma' || $post_id != $row [ 'post_id' ]))
{
$rowset [] = array (
2003-06-19 16:25:42 +00:00
'below_karma' => TRUE ,
'post_id' => $row [ 'post_id' ],
'poster' => $poster ,
'user_karma' => $row [ 'user_karma' ]
2003-04-17 02:06:49 +00:00
);
continue ;
}
2003-06-17 19:34:17 +00:00
// Does post have an attachment? If so, add it to the list
if ( $row [ 'post_attachment' ] && $config [ 'allow_attachments' ])
{
if ( $auth -> acl_get ( 'f_download' , $forum_id ))
{
$attach_list [] = $row [ 'post_id' ];
if ( $row [ 'post_approved' ])
{
$has_attachments = TRUE ;
}
}
else
{
$display_notice = TRUE ;
}
}
2003-04-17 02:06:49 +00:00
$rowset [] = array (
2003-06-23 14:00:57 +00:00
'post_id' => $row [ 'post_id' ],
2003-06-21 01:43:07 +00:00
'post_time' => $row [ 'post_time' ],
2003-06-23 14:00:57 +00:00
'poster' => ( $row [ 'user_colour' ]) ? '<span style="color:#' . $row [ 'user_colour' ] . '">' . $poster . '</span>' : $poster ,
'user_id' => $row [ 'user_id' ],
'topic_id' => $row [ 'topic_id' ],
'forum_id' => $row [ 'forum_id' ],
2003-06-21 01:43:07 +00:00
'post_subject' => $row [ 'post_subject' ],
'post_edit_count' => $row [ 'post_edit_count' ],
'post_edit_time' => $row [ 'post_edit_time' ],
2003-06-23 14:00:57 +00:00
'icon_id' => $row [ 'icon_id' ],
'post_approved' => $row [ 'post_approved' ],
2003-06-21 01:43:07 +00:00
'post_reported' => $row [ 'post_reported' ],
'post_text' => $row [ 'post_text' ],
'post_encoding' => $row [ 'post_encoding' ],
2003-06-23 14:00:57 +00:00
'bbcode_uid' => $row [ 'bbcode_uid' ],
'bbcode_bitfield' => $row [ 'bbcode_bitfield' ],
'enable_html' => $row [ 'enable_html' ],
'enable_smilies' => $row [ 'enable_smilies' ],
'enable_sig' => $row [ 'enable_sig' ],
'display_notice' => $display_notice
2003-04-17 02:06:49 +00:00
);
2003-04-16 20:45:30 +00:00
2003-06-17 19:34:17 +00:00
2003-04-26 01:17:40 +00:00
// Define the global bbcode bitfield, will be used to load bbcodes
$bbcode_bitfield |= $row [ 'bbcode_bitfield' ];
2003-04-16 20:45:30 +00:00
// Cache various user specific data ... so we don't have to recompute
// this each time the same user appears on this page
if ( ! isset ( $user_cache [ $poster_id ]))
{
if ( $poster_id == ANONYMOUS )
{
$user_cache [ $poster_id ] = array (
2003-06-23 14:00:57 +00:00
'joined' => '' ,
2003-04-16 20:45:30 +00:00
'posts' => '' ,
'from' => '' ,
2003-06-23 14:00:57 +00:00
'avatar' => '' ,
'rank_title' => '' ,
2003-04-16 20:45:30 +00:00
'rank_image' => '' ,
2003-06-23 14:00:57 +00:00
'sig' => '' ,
2003-04-16 20:45:30 +00:00
'posts' => '' ,
2003-06-23 14:00:57 +00:00
'profile' => '' ,
'pm' => '' ,
2003-04-16 20:45:30 +00:00
'email' => '' ,
'www' => '' ,
'icq_status_img' => '' ,
2003-06-23 14:00:57 +00:00
'icq' => '' ,
'aim' => '' ,
2003-04-16 20:45:30 +00:00
'msn' => '' ,
2003-06-23 14:00:57 +00:00
'search' => ''
2003-04-16 20:45:30 +00:00
);
2003-02-26 00:37:43 +00:00
}
2003-04-16 20:45:30 +00:00
else
{
2003-04-26 01:17:40 +00:00
$user_sig = '' ;
2003-06-21 01:43:07 +00:00
if ( $row [ 'user_sig' ] && $config [ 'allow_sig' ] && $user -> data [ 'user_viewsigs' ])
2003-04-16 20:45:30 +00:00
{
2003-04-26 01:17:40 +00:00
$user_sig = $row [ 'user_sig' ];
$bbcode_bitfield |= $row [ 'user_sig_bbcode_bitfield' ];
2003-04-16 20:45:30 +00:00
}
2003-02-26 00:37:43 +00:00
2003-04-16 20:45:30 +00:00
$user_cache [ $poster_id ] = array (
2003-05-23 16:15:03 +00:00
'joined' => $user -> format_date ( $row [ 'user_regdate' ], $user -> lang [ 'DATE_FORMAT' ]),
'posts' => ( ! empty ( $row [ 'user_posts' ])) ? $row [ 'user_posts' ] : '' ,
'from' => ( ! empty ( $row [ 'user_from' ])) ? $row [ 'user_from' ] : '' ,
2003-06-19 16:25:42 +00:00
'karma' => ( ! empty ( $row [ 'user_karma' ])) ? $row [ 'user_karma' ] : 0 ,
'karma_img' => '<img src="images/karma' . $row [ 'user_karma' ] . '.gif" alt="' . $user -> lang [ 'KARMA_LEVEL' ] . ': ' . $user -> lang [ 'KARMA' ][ $row [ 'user_karma' ]] . '" title="' . $user -> lang [ 'KARMA_LEVEL' ] . ': ' . $user -> lang [ 'KARMA' ][ $row [ 'user_karma' ]] . '" />' ,
2003-04-26 01:17:40 +00:00
2003-05-23 16:15:03 +00:00
'sig' => $user_sig ,
'sig_bbcode_uid' => ( ! empty ( $row [ 'user_sig_bbcode_uid' ])) ? $row [ 'user_sig_bbcode_uid' ] : '' ,
'sig_bbcode_bitfield' => ( ! empty ( $row [ 'user_sig_bbcode_bitfield' ])) ? $row [ 'user_sig_bbcode_bitfield' ] : '' ,
2003-04-26 01:17:40 +00:00
2003-05-23 16:15:03 +00:00
'avatar' => '' ,
2003-04-17 02:06:49 +00:00
2003-05-23 16:15:03 +00:00
'profile' => " memberlist. $phpEx $SID &mode=viewprofile&u= $poster_id " ,
'pm' => " ucp. $phpEx $SID &mode=message&action=send&u= $poster_id " ,
'www' => $row [ 'user_website' ],
'aim' => ( $row [ 'user_aim' ]) ? " memberlist. $phpEx $SID &mode=contact&action=aim&u= $poster_id " : '' ,
'msn' => ( $row [ 'user_msnm' ]) ? " memberlist. $phpEx $SID &mode=contact&action=msnm&u= $poster_id " : '' ,
'yim' => ( $row [ 'user_yim' ]) ? 'http://edit.yahoo.com/config/send_webmesg?.target=' . $row [ 'user_yim' ] . '&.src=pg' : '' ,
'jabber' => ( $row [ 'user_jabber' ]) ? " memberlist. $phpEx $SID &mode=contact&action=jabber&u= $poster_id " : '' ,
'search' => ( $auth -> acl_get ( 'u_search' )) ? " search. $phpEx $SID &search_author= " . urlencode ( $row [ 'username' ]) . '&showresults=posts' : ''
2003-02-26 00:37:43 +00:00
2003-04-16 20:45:30 +00:00
);
2001-06-11 00:43:15 +00:00
2003-05-26 23:53:34 +00:00
if ( $row [ 'user_avatar' ] && $user -> data [ 'user_viewavatars' ])
2002-07-17 14:56:12 +00:00
{
2003-05-28 14:20:11 +00:00
$avatar_img = '' ;
2002-11-01 12:23:08 +00:00
switch ( $row [ 'user_avatar_type' ])
2002-07-17 20:57:31 +00:00
{
2003-05-26 23:53:34 +00:00
case AVATAR_UPLOAD :
$avatar_img = $config [ 'avatar_path' ] . '/' ;
2002-07-17 20:57:31 +00:00
break ;
2003-05-26 23:53:34 +00:00
case AVATAR_GALLERY :
$avatar_img = $config [ 'avatar_gallery_path' ] . '/' ;
2002-07-17 20:57:31 +00:00
break ;
}
2003-05-26 23:53:34 +00:00
$avatar_img .= $row [ 'user_avatar' ];
2003-05-28 14:20:11 +00:00
$user_cache [ $poster_id ][ 'avatar' ] = '<img src="' . $avatar_img . '" width="' . $row [ 'user_avatar_width' ] . '" height="' . $row [ 'user_avatar_height' ] . '" border="0" alt="" />' ;
2002-07-17 20:57:31 +00:00
}
2003-04-16 20:45:30 +00:00
if ( ! empty ( $row [ 'user_rank' ]))
2002-07-17 20:57:31 +00:00
{
2003-04-16 20:45:30 +00:00
$user_cache [ $poster_id ][ 'rank_title' ] = $ranks [ 'special' ][ $row [ 'user_rank' ]][ 'rank_title' ];
2003-06-03 21:40:02 +00:00
$user_cache [ $poster_id ][ 'rank_image' ] = ( ! empty ( $ranks [ 'special' ][ $row [ 'user_rank' ]][ 'rank_image' ])) ? '<img src="' . $config [ 'ranks_path' ] . '/' . $ranks [ 'special' ][ $row [ 'user_rank' ]][ 'rank_image' ] . '" border="0" alt="' . $ranks [ 'special' ][ $row [ 'user_rank' ]][ 'rank_title' ] . '" title="' . $ranks [ 'special' ][ $row [ 'user_rank' ]][ 'rank_title' ] . '" /><br />' : '' ;
2002-07-17 14:56:12 +00:00
}
2003-04-16 20:45:30 +00:00
else
2001-04-02 14:36:36 +00:00
{
2003-04-16 20:45:30 +00:00
foreach ( $ranks [ 'normal' ] as $rank )
2002-07-14 14:45:26 +00:00
{
2003-04-16 20:45:30 +00:00
if ( $row [ 'user_posts' ] >= $rank [ 'rank_min' ])
{
$user_cache [ $poster_id ][ 'rank_title' ] = $rank [ 'rank_title' ];
2003-06-03 21:40:02 +00:00
$user_cache [ $poster_id ][ 'rank_image' ] = ( ! empty ( $rank [ 'rank_image' ])) ? '<img src="' . $config [ 'ranks_path' ] . '/' . $rank [ 'rank_image' ] . '" border="0" alt="' . $rank [ 'rank_title' ] . '" title="' . $rank [ 'rank_title' ] . '" /><br />' : '' ;
2003-04-16 20:45:30 +00:00
break ;
}
2002-07-14 14:45:26 +00:00
}
2001-05-13 16:02:30 +00:00
}
2001-07-05 17:39:38 +00:00
2003-06-19 16:25:42 +00:00
if ( ! empty ( $row [ 'user_allow_viewemail' ]) || $auth -> acl_get ( 'a_email' ))
2002-07-17 20:57:31 +00:00
{
2003-06-19 16:25:42 +00:00
$user_cache [ $poster_id ][ 'email' ] = ( $config [ 'board_email_form' ] && $config [ 'email_enable' ]) ? " memberlist. $phpEx $SID &mode=email&u= " . $poster_id : 'mailto:' . $row [ 'user_email' ];
2002-07-17 20:57:31 +00:00
}
else
{
2003-01-08 22:23:51 +00:00
$user_cache [ $poster_id ][ 'email' ] = '' ;
2002-07-17 20:57:31 +00:00
}
2002-11-01 12:23:08 +00:00
if ( ! empty ( $row [ 'user_icq' ]))
2002-07-17 20:57:31 +00:00
{
2003-05-23 16:15:03 +00:00
$user_cache [ $poster_id ][ 'icq' ] = " memberlist. $phpEx $SID &mode=contact&action=icq&u= $poster_id " ;
2003-06-19 16:25:42 +00:00
$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" border="0" />' ;
2002-07-17 20:57:31 +00:00
}
else
{
2003-01-08 22:23:51 +00:00
$user_cache [ $poster_id ][ 'icq_status_img' ] = '' ;
$user_cache [ $poster_id ][ 'icq' ] = '' ;
2002-07-17 20:57:31 +00:00
}
2001-11-15 18:38:23 +00:00
}
2003-04-16 20:45:30 +00:00
}
2003-04-17 02:06:49 +00:00
}
while ( $row = $db -> sql_fetchrow ( $result ));
$db -> sql_freeresult ( $result );
// Pull attachment data
if ( count ( $attach_list ))
{
2003-06-17 19:34:17 +00:00
include ( $phpbb_root_path . 'includes/functions_display.' . $phpEx );
2003-04-17 02:06:49 +00:00
$sql = ' SELECT a . post_id , d .*
FROM ' . ATTACHMENTS_TABLE . ' a , ' . ATTACHMENTS_DESC_TABLE . ' d
WHERE a . post_id IN ( ' . implode(' , ', $attach_list) . ' )
AND a . attach_id = d . attach_id
2003-05-01 18:24:18 +00:00
ORDER BY d . filetime ' . ((!$config[' display_order ']) ? ' DESC ' : ' ASC ') . ' , a . post_id ASC ' ;
2003-04-17 02:06:49 +00:00
$result = $db -> sql_query ( $sql );
while ( $row = $db -> sql_fetchrow ( $result ))
{
$attachments [ $row [ 'post_id' ]][] = $row ;
}
$db -> sql_freeresult ( $result );
// No attachments exist, but post table thinks they do
// so go ahead and reset post_attach flags
if ( ! count ( $attachments ))
{
$sql = 'UPDATE ' . POSTS_TABLE . '
SET post_attachment = 0
WHERE post_id IN ( ' . implode(' , ', $attach_list) . ' ) ' ;
$db -> sql_query ( $sql );
2003-06-19 16:25:42 +00:00
// We need to update the topic indicator too if the complete topic is now without an attachment
2003-04-17 02:06:49 +00:00
if ( count ( $rowset ) != $total_posts )
{
// Not all posts are displayed so we query the db to find if there's any attachment for this topic
$sql = ' SELECT a . post_id
FROM ' . ATTACHMENTS_TABLE . ' a , ' . POSTS_TABLE . " p
WHERE p . topic_id = $topic_id
AND p . post_approved = 1
AND p . post_id = a . post_id " ;
$result = $db -> sql_query_limit ( $sql , 1 );
if ( ! $db -> sql_fetchrow ( $result ))
{
2003-04-22 16:47:34 +00:00
$sql = 'UPDATE ' . TOPICS_TABLE . "
SET topic_attachment = 0
WHERE topic_id = $topic_id " ;
$db -> sql_query ( $sql );
2003-04-17 02:06:49 +00:00
}
}
else
{
2003-04-22 16:47:34 +00:00
$sql = 'UPDATE ' . TOPICS_TABLE . "
SET topic_attachment = 0
WHERE topic_id = $topic_id " ;
$db -> sql_query ( $sql );
2003-04-17 02:06:49 +00:00
}
}
elseif ( $has_attachments && ! $topic_data [ 'topic_attachment' ])
{
// Topic has approved attachments but its flag is wrong
2003-04-22 16:47:34 +00:00
$sql = 'UPDATE ' . TOPICS_TABLE . "
SET topic_attachment = 1
WHERE topic_id = $topic_id " ;
$db -> sql_query ( $sql );
2003-04-17 02:06:49 +00:00
}
}
2003-06-23 14:00:57 +00:00
// Instantiate BBCode if need be
2003-04-17 02:06:49 +00:00
if ( $bbcode_bitfield )
{
include ( $phpbb_root_path . 'includes/bbcode.' . $phpEx );
$bbcode = new bbcode ( $bbcode_bitfield );
}
2003-06-23 14:00:57 +00:00
// Output the posts
2003-06-21 01:43:07 +00:00
foreach ( $rowset as $i => $row )
2003-04-17 02:06:49 +00:00
{
2003-05-26 23:53:34 +00:00
$poster_id = $row [ 'user_id' ];
2003-04-17 02:06:49 +00:00
// Three situations can prevent a post being display:
// i) The posters karma is below the minimum of the user
// ii) The poster is on the users ignore list
// iii) The post was made in a codepage different from the users
if ( ! empty ( $row [ 'below_karma' ]))
{
$template -> assign_block_vars ( 'postrow' , array (
2003-06-05 00:53:39 +00:00
'S_IGNORE_POST' => true ,
2003-06-21 01:43:07 +00:00
'S_ROW_COUNT' => $i ,
2003-04-17 02:06:49 +00:00
2003-06-19 16:25:42 +00:00
'L_IGNORE_POST' => sprintf ( $user -> lang [ 'POST_BELOW_KARMA' ], $row [ 'poster' ], $row [ 'user_karma' ], " <a href= \" viewtopic. $phpEx $SID &f= $forum_id &p= " . $row [ 'post_id' ] . '&view=karma#' . $row [ 'post_id' ] . '">' , '</a>' ))
2003-04-17 02:06:49 +00:00
);
continue ;
}
else if ( $row [ 'post_encoding' ] != $user -> lang [ 'ENCODING' ])
{
if ( ! empty ( $_GET [ 'view' ]) && $_GET [ 'view' ] == 'encoding' && $post_id == $row [ 'post_id' ])
{
$force_encoding = $row [ 'post_encoding' ];
}
else
{
$template -> assign_block_vars ( 'postrow' , array (
2003-06-05 00:53:39 +00:00
'S_IGNORE_POST' => true ,
2003-06-21 01:43:07 +00:00
'S_ROW_COUNT' => $i ,
2003-04-17 02:06:49 +00:00
2003-06-05 00:53:39 +00:00
'L_IGNORE_POST' => sprintf ( $user -> lang [ 'POST_ENCODING' ], $row [ 'poster' ], '<a href="viewtopic.' . $phpEx . $SID . '&p=' . $row [ 'post_id' ] . '&view=encoding#' . $row [ 'post_id' ] . '">' , '</a>' ))
2003-04-17 02:06:49 +00:00
);
continue ;
}
}
// End signature parsing, only if needed
2003-06-21 01:43:07 +00:00
if ( $row [ 'enable_sig' ] && $user_cache [ $poster_id ][ 'sig' ] && empty ( $user_cache [ 'sig_parsed' ]))
2003-04-17 02:06:49 +00:00
{
2003-06-21 01:43:07 +00:00
$user_cache [ $poster_id ][ 'sig' ] = ( $config [ 'enable_smilies' ]) ? preg_replace ( '#<!\-\- s(.*?) \-\-><img src="\{SMILE_PATH\}\/.*? \/><!\-\- s\1 \-\->#' , '\1' , $user_cache [ $poster_id ][ 'sig' ]) : str_replace ( '<img src="{SMILE_PATH}' , '<img src="' . $config [ 'smilies_path' ], $user_cache [ $poster_id ][ 'sig' ]);
2003-04-17 02:06:49 +00:00
if ( $user_cache [ $poster_id ][ 'sig_bbcode_bitfield' ])
{
2003-06-19 16:25:42 +00:00
$bbcode -> bbcode_second_pass ( $user_cache [ $poster_id ][ 'sig' ], $user_cache [ $poster_id ][ 'sig_bbcode_uid' ], $user_cache [ $poster_id ][ 'sig_bbcode_bitfield' ]);
2003-04-17 02:06:49 +00:00
}
2003-04-17 16:59:37 +00:00
2003-04-17 02:06:49 +00:00
if ( count ( $censors ))
{
$user_cache [ $poster_id ][ 'sig' ] = str_replace ( '\"' , '"' , substr ( preg_replace ( '#(\>(((?>([^><]+|(?R)))*)\<))#se' , " preg_replace( \$ censors['match'], \$ censors['replace'], ' \\ 0') " , '>' . $user_cache [ $poster_id ][ 'sig' ] . '<' ), 1 , - 1 ));
}
2003-04-26 01:17:40 +00:00
$user_cache [ $poster_id ][ 'sig' ] = str_replace ( " \n " , '<br />' , $user_cache [ $poster_id ][ 'sig' ]);
2003-04-17 02:06:49 +00:00
$user_cache [ $poster_id ][ 'sig_parsed' ] = TRUE ;
}
2001-11-15 18:38:23 +00:00
2002-07-14 14:45:26 +00:00
2003-04-16 20:45:30 +00:00
// Parse the message and subject
$message = $row [ 'post_text' ];
2003-01-21 15:58:32 +00:00
2003-04-17 16:59:37 +00:00
2003-04-16 20:45:30 +00:00
// If the board has HTML off but the post has HTML
// on then we process it, else leave it alone
if ( ! $auth -> acl_get ( 'f_html' , $forum_id ))
{
if ( $row [ 'enable_html' ] && $auth -> acl_get ( 'f_bbcode' , $forum_id ))
2003-01-08 22:23:51 +00:00
{
2003-04-16 20:45:30 +00:00
$message = preg_replace ( '#(<)([\/]?.*?)(>)#is' , " < \\ 2> " , $message );
2003-01-08 22:23:51 +00:00
}
2003-04-16 20:45:30 +00:00
}
2003-01-08 22:23:51 +00:00
2003-01-21 15:58:32 +00:00
2003-04-16 20:45:30 +00:00
// Second parse bbcode here
if ( $row [ 'bbcode_bitfield' ])
{
2003-06-19 16:25:42 +00:00
$bbcode -> bbcode_second_pass ( $message , $row [ 'bbcode_uid' ], $row [ 'bbcode_bitfield' ]);
2003-04-16 20:45:30 +00:00
}
2001-12-14 02:41:33 +00:00
2003-01-21 15:58:32 +00:00
2003-04-16 20:45:30 +00:00
// If we allow users to disable display of emoticons
// we'll need an appropriate check and preg_replace here
2003-05-20 13:24:23 +00:00
$message = ( empty ( $config [ 'allow_smilies' ]) || ! $user -> data [ 'user_viewsmilies' ]) ? preg_replace ( '#<!\-\- s(.*?) \-\-><img src="\{SMILE_PATH\}\/.*? \/><!\-\- s\1 \-\->#' , '\1' , $message ) : str_replace ( '<img src="{SMILE_PATH}' , '<img src="' . $config [ 'smilies_path' ], $message );
2002-03-31 00:06:34 +00:00
2003-01-22 16:46:44 +00:00
2003-04-16 20:45:30 +00:00
// Highlight active words (primarily for search)
if ( $highlight_match )
{
// This was shamelessly 'borrowed' from volker at multiartstudio dot de
// via php.net's annotated manual
2003-06-19 16:25:42 +00:00
$message = str_replace ( '\"' , '"' , substr ( preg_replace ( '#(\>(((?>([^><]+|(?R)))*)\<))#se' , " preg_replace('# \ b( " . $highlight_match . " ) \ b#i', '<span class= \" posthighlight \" > \\ \\ 1</span>', ' \\ 0') " , '>' . $message . '<' ), 1 , - 1 ));
2003-04-16 20:45:30 +00:00
}
2002-11-01 12:23:08 +00:00
2003-01-22 16:46:44 +00:00
2003-04-16 20:45:30 +00:00
// Replace naughty words such as farty pants
if ( sizeof ( $censors ))
{
2003-04-17 16:59:37 +00:00
$row [ 'post_subject' ] = preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $row [ 'post_subject' ]);
2003-04-16 20:45:30 +00:00
$message = str_replace ( '\"' , '"' , substr ( preg_replace ( '#(\>(((?>([^><]+|(?R)))*)\<))#se' , " preg_replace( \$ censors['match'], \$ censors['replace'], ' \\ 0') " , '>' . $message . '<' ), 1 , - 1 ));
}
2002-11-01 12:23:08 +00:00
2003-04-17 16:59:37 +00:00
$message = str_replace ( " \n " , '<br />' , $message );
2003-01-22 16:46:44 +00:00
2003-04-16 20:45:30 +00:00
// Editing information
2003-05-11 16:21:35 +00:00
if ( ! empty ( $row [ 'post_edit_count' ]) && $config [ 'display_last_edited' ])
2003-04-16 20:45:30 +00:00
{
2003-05-11 16:21:35 +00:00
$l_edit_time_total = ( $row [ 'post_edit_count' ] == 1 ) ? $user -> lang [ 'EDITED_TIME_TOTAL' ] : $user -> lang [ 'EDITED_TIMES_TOTAL' ];
2003-01-22 16:46:44 +00:00
2003-04-17 02:06:49 +00:00
$l_edited_by = '<br /><br />' . sprintf ( $l_edit_time_total , $row [ 'poster' ], $user -> format_date ( $row [ 'post_edit_time' ]), $row [ 'post_edit_count' ]);
2003-04-16 20:45:30 +00:00
}
else
{
$l_edited_by = '' ;
}
2001-07-15 15:45:09 +00:00
2002-08-15 15:45:22 +00:00
2003-04-16 20:45:30 +00:00
// Dump vars into template
$template -> assign_block_vars ( 'postrow' , array (
2003-04-17 02:06:49 +00:00
'POSTER_NAME' => $row [ 'poster' ],
2003-04-16 20:45:30 +00:00
'POSTER_RANK' => $user_cache [ $poster_id ][ 'rank_title' ],
'RANK_IMAGE' => $user_cache [ $poster_id ][ 'rank_image' ],
'POSTER_JOINED' => $user_cache [ $poster_id ][ 'joined' ],
'POSTER_POSTS' => $user_cache [ $poster_id ][ 'posts' ],
'POSTER_FROM' => $user_cache [ $poster_id ][ 'from' ],
'POSTER_AVATAR' => $user_cache [ $poster_id ][ 'avatar' ],
2003-06-19 16:25:42 +00:00
'POSTER_KARMA' => $user_cache [ $poster_id ][ 'karma' ],
2003-04-16 20:45:30 +00:00
2003-04-22 16:47:34 +00:00
'POST_DATE' => $user -> format_date ( $row [ 'post_time' ]),
2003-04-17 16:59:37 +00:00
'POST_SUBJECT' => $row [ 'post_subject' ],
2003-04-16 20:45:30 +00:00
'MESSAGE' => $message ,
2003-06-21 01:43:07 +00:00
'SIGNATURE' => ( $row [ 'enable_sig' ]) ? $user_cache [ $poster_id ][ 'sig' ] : '' ,
2003-04-16 20:45:30 +00:00
'EDITED_MESSAGE' => $l_edited_by ,
2003-05-26 23:53:34 +00:00
'MINI_POST_IMG' => ( $row [ 'post_time' ] > $user -> data [ 'user_lastvisit' ] && $row [ 'post_time' ] > $topic_last_read && $user -> data [ 'user_id' ] != ANONYMOUS ) ? $user -> img ( 'icon_post_new' , $user -> lang [ 'NEW_POST' ]) : $user -> img ( 'icon_post' , $user -> lang [ 'POST' ]),
2003-05-23 16:15:03 +00:00
'POST_ICON_IMG' => ( ! empty ( $row [ 'icon_id' ])) ? '<img src="' . $config [ 'icons_path' ] . '/' . $icons [ $row [ 'icon_id' ]][ 'img' ] . '" width="' . $icons [ $row [ 'icon_id' ]][ 'width' ] . '" height="' . $icons [ $row [ 'icon_id' ]][ 'height' ] . '" alt="" title="" />' : '' ,
'ICQ_STATUS_IMG' => $user_cache [ $poster_id ][ 'icq_status_img' ],
2003-06-19 16:25:42 +00:00
'KARMA_IMG' => $user_cache [ $poster_id ][ 'karma_img' ],
2003-05-23 16:15:03 +00:00
2003-06-23 14:00:57 +00:00
'U_EDIT' => (( $user -> data [ 'user_id' ] == $poster_id && $auth -> acl_get ( 'f_edit' , $forum_id ) && ( $row [ 'post_time' ] > time () - $config [ 'edit_time' ] || ! $config [ 'edit_time' ])) || $auth -> acl_get ( 'm_edit' , $forum_id )) ? " posting. $phpEx $SID &mode=edit&f= $forum_id &p= " . $row [ 'post_id' ] : '' ,
2003-06-03 21:40:02 +00:00
'U_QUOTE' => ( $auth -> acl_get ( 'f_quote' , $forum_id )) ? " posting. $phpEx $SID &mode=quote&f= $forum_id &p= " . $row [ 'post_id' ] : '' ,
2003-05-23 16:15:03 +00:00
'U_IP' => ( $auth -> acl_get ( 'm_ip' , $forum_id )) ? " mcp. $phpEx ?sid= " . $user -> session_id . " &mode=post_details&p= " . $row [ 'post_id' ] . " &t= $topic_id #ip " : '' ,
2003-06-26 16:46:17 +00:00
'U_DELETE' => (( $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' ] || ! $config [ 'edit_time' ])) || $auth -> acl_get ( 'm_delete' , $forum_id )) ? " posting. $phpEx $SID &mode=delete&f= $forum_id &p= " . $row [ 'post_id' ] : '' ,
2003-05-23 16:15:03 +00:00
'U_PROFILE' => $user_cache [ $poster_id ][ 'profile' ],
'U_SEARCH' => $user_cache [ $poster_id ][ 'search' ],
'U_PM' => $user_cache [ $poster_id ][ 'pm' ],
'U_EMAIL' => $user_cache [ $poster_id ][ 'email' ],
'U_WWW' => $user_cache [ $poster_id ][ 'www' ],
'U_ICQ' => $user_cache [ $poster_id ][ 'icq' ],
'U_AIM' => $user_cache [ $poster_id ][ 'aim' ],
'U_MSN' => $user_cache [ $poster_id ][ 'msn' ],
'U_YIM' => $user_cache [ $poster_id ][ 'yim' ],
'U_JABBER' => $user_cache [ $poster_id ][ 'jabber' ],
2003-06-19 16:25:42 +00:00
'U_RATE_GOOD' => " viewtopic. $phpEx $SID &rate=good&p= " . $row [ 'post_id' ],
'U_RATE_BAD' => " viewtopic. $phpEx $SID &rate=bad&p= " . $row [ 'post_id' ],
2003-05-23 16:15:03 +00:00
'U_REPORT' => " report. $phpEx $SID &p= " . $row [ 'post_id' ],
'U_MCP_REPORT' => ( $auth -> acl_get ( 'f_report' , $forum_id )) ? " mcp. $phpEx $SID &mode=post_details&p= " . $row [ 'post_id' ] : '' ,
'U_MCP_APPROVE' => " mcp. $phpEx $SID &mode=approve&p= " . $row [ 'post_id' ],
2003-07-02 22:36:10 +00:00
'U_MCP_DETAILS' => " mcp. $phpEx $SID &mode=post_details&p= " . $row [ 'post_id' ],
2003-05-23 16:15:03 +00:00
'U_MINI_POST' => " viewtopic. $phpEx $SID &p= " . $row [ 'post_id' ] . '#' . $row [ 'post_id' ],
'U_POST_ID' => ( $unread_post_id == $row [ 'post_id' ]) ? 'unread' : $row [ 'post_id' ],
2003-04-16 20:45:30 +00:00
2003-06-21 01:43:07 +00:00
'S_ROW_COUNT' => $i ,
2003-06-19 16:25:42 +00:00
'S_CAN_RATE' => ( $auth -> acl_get ( 'f_rate' , $forum_id ) && $row [ 'post_approved' ] && ! $row [ 'post_reported' ] && $poster_id != $user -> data [ 'user_id' ] && $poster_id != ANONYMOUS ) ? true : false ,
2003-04-17 02:06:49 +00:00
'S_HAS_ATTACHMENTS' => ( ! empty ( $attachments [ $row [ 'post_id' ]])) ? TRUE : FALSE ,
2003-04-16 20:45:30 +00:00
'S_POST_UNAPPROVED' => ( $row [ 'post_approved' ]) ? FALSE : TRUE ,
2003-06-17 19:34:17 +00:00
'S_POST_REPORTED' => ( $row [ 'post_reported' ] && $auth -> acl_get ( 'm_' , $forum_id )) ? TRUE : FALSE ,
'S_DISPLAY_NOTICE' => $row [ 'display_notice' ])
2003-04-17 16:59:37 +00:00
);
2003-04-16 20:45:30 +00:00
// Process Attachments for this post
2003-04-17 02:06:49 +00:00
if ( sizeof ( $attachments [ $row [ 'post_id' ]]))
2003-04-16 20:45:30 +00:00
{
2003-06-17 19:34:17 +00:00
display_attachments ( $attachments [ $row [ 'post_id' ]], $update_count );
2003-04-16 20:45:30 +00:00
}
2003-04-17 02:06:49 +00:00
2003-06-21 01:43:07 +00:00
unset ( $rowset [ $i ]);
2003-04-17 02:06:49 +00:00
unset ( $attachments [ $row [ 'post_id' ]]);
2003-01-08 22:23:51 +00:00
}
2003-04-16 20:45:30 +00:00
unset ( $rowset );
unset ( $user_cache );
2003-01-08 22:23:51 +00:00
2003-04-16 23:07:56 +00:00
2003-05-02 15:50:11 +00:00
// Update topic view and if necessary attachment view counters ... but only
// if this is the first 'page view'
2003-04-16 23:07:56 +00:00
if ( ! preg_match ( " #&t= $topic_id # " , $user -> data [ 'session_page' ]))
2003-04-16 20:45:30 +00:00
{
2003-06-23 14:00:57 +00:00
$sql = 'UPDATE ' . TOPICS_TABLE . '
SET topic_views = topic_views + 1 , topic_last_view_time = ' . time () . "
2003-04-16 20:45:30 +00:00
WHERE topic_id = $topic_id " ;
$db -> sql_query ( $sql );
2003-05-02 15:50:11 +00:00
// Update the attachment download counts
2003-06-23 14:00:57 +00:00
if ( sizeof ( $update_count ))
2003-05-02 15:50:11 +00:00
{
2003-05-23 16:15:03 +00:00
$sql = 'UPDATE ' . ATTACHMENTS_DESC_TABLE . '
2003-05-02 15:50:11 +00:00
SET download_count = download_count + 1
2003-05-23 16:15:03 +00:00
WHERE attach_id IN ( ' . implode(' , ', array_unique($update_count)) . ' ) ' ;
2003-05-02 15:50:11 +00:00
$db -> sql_query ( $sql );
}
2003-04-16 20:45:30 +00:00
}
2003-01-08 22:23:51 +00:00
2003-02-26 00:37:43 +00:00
2003-04-26 01:17:40 +00:00
// Mark topics read
2003-06-23 14:00:57 +00:00
$mark_forum_id = ( $topic_type == POST_GLOBAL ) ? 0 : $forum_id ;
markread ( 'topic' , $mark_forum_id , $topic_id , $row [ 'post_time' ]);
2003-04-26 01:17:40 +00:00
2003-02-26 00:37:43 +00:00
// Change encoding if appropriate
if ( $force_encoding != '' )
{
$user -> lang [ 'ENCODING' ] = $force_encoding ;
}
2003-04-26 01:17:40 +00:00
2002-10-31 13:41:28 +00:00
// Output the page
2003-05-03 23:58:45 +00:00
page_header ( $user -> lang [ 'VIEW_TOPIC' ] . ' - ' . $topic_title );
2002-10-31 13:41:28 +00:00
$template -> set_filenames ( array (
2002-11-20 23:07:01 +00:00
'body' => ( isset ( $_GET [ 'view' ]) && $_GET [ 'view' ] == 'print' ) ? 'viewtopic_print.html' : 'viewtopic_body.html' )
2002-10-31 13:41:28 +00:00
);
make_jumpbox ( 'viewforum.' . $phpEx , $forum_id );
2003-05-03 23:58:45 +00:00
page_footer ();
2001-02-17 08:37:32 +00:00
2003-01-08 22:23:51 +00:00
?>