diff options
Diffstat (limited to 'phpBB/viewtopic.php')
| -rw-r--r-- | phpBB/viewtopic.php | 92 | 
1 files changed, 15 insertions, 77 deletions
| diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 203b8586ce..a1976e169d 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -152,26 +152,12 @@ if ($view && !$post_id)  			else  			{  				$topic_id = $row['topic_id']; - -				// Check for global announcement correctness? -				if (!$row['forum_id'] && !$forum_id) -				{ -					trigger_error('NO_TOPIC'); -				} -				else if ($row['forum_id']) -				{ -					$forum_id = $row['forum_id']; -				} +				$forum_id = $row['forum_id'];  			}  		}  	} -	// Check for global announcement correctness? -	if ((!isset($row) || !$row['forum_id']) && !$forum_id) -	{ -		trigger_error('NO_TOPIC'); -	} -	else if (isset($row) && $row['forum_id']) +	if (isset($row) && $row['forum_id'])  	{  		$forum_id = $row['forum_id'];  	} @@ -186,13 +172,6 @@ $sql_array = array(  	'FROM'		=> array(FORUMS_TABLE => 'f'),  ); -// Firebird handles two columns of the same name a little differently, this -// addresses that by forcing the forum_id to come from the forums table. -if ($db->sql_layer === 'firebird') -{ -	$sql_array['SELECT'] = 'f.forum_id AS forum_id, ' . $sql_array['SELECT']; -} -  // The FROM-Order is quite important here, else t.* columns can not be correctly bound.  if ($post_id)  { @@ -247,26 +226,8 @@ else  	$sql_array['WHERE'] = "p.post_id = $post_id AND t.topic_id = p.topic_id";  } -$sql_array['WHERE'] .= ' AND (f.forum_id = t.forum_id'; - -if (!$forum_id) -{ -	// If it is a global announcement make sure to set the forum id to a postable forum -	$sql_array['WHERE'] .= ' OR (t.topic_type = ' . POST_GLOBAL . ' -		AND f.forum_type = ' . FORUM_POST . ')'; -} -else -{ -	$sql_array['WHERE'] .= ' OR (t.topic_type = ' . POST_GLOBAL . " -		AND f.forum_id = $forum_id)"; -} - -$sql_array['WHERE'] .= ')'; +$sql_array['WHERE'] .= ' AND f.forum_id = t.forum_id'; -// 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  $sql = $db->sql_build_query('SELECT', $sql_array);  $result = $db->sql_query($sql);  $topic_data = $db->sql_fetchrow($result); @@ -718,9 +679,9 @@ if (!empty($topic_data['poll_start']))  		// 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. -		if (isset($_COOKIE[$config['cookie_name'] . '_poll_' . $topic_id])) +		if ($request->is_set($config['cookie_name'] . '_poll_' . $topic_id, phpbb_request_interface::COOKIE))  		{ -			$cur_voted_id = explode(',', $_COOKIE[$config['cookie_name'] . '_poll_' . $topic_id]); +			$cur_voted_id = explode(',', $request->variable($config['cookie_name'] . '_poll_' . $topic_id, '', true, phpbb_request_interface::COOKIE));  			$cur_voted_id = array_map('intval', $cur_voted_id);  		}  	} @@ -879,7 +840,7 @@ if (!empty($topic_data['poll_start']))  			'POLL_OPTION_RESULT' 	=> $poll_option['poll_option_total'],  			'POLL_OPTION_PERCENT' 	=> $option_pct_txt,  			'POLL_OPTION_PCT'		=> round($option_pct * 100), -			'POLL_OPTION_IMG' 		=> $user->img('poll_center', $option_pct_txt, round($option_pct * 250)), +			'POLL_OPTION_WIDTH'     => round($option_pct * 250),  			'POLL_OPTION_VOTED'		=> (in_array($poll_option['poll_option_id'], $cur_voted_id)) ? true : false)  		);  	} @@ -1349,7 +1310,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)  		continue;  	} -	$row =& $rowset[$post_list[$i]]; +	$row = $rowset[$post_list[$i]];  	$poster_id = $row['user_id'];  	// End signature parsing, only if needed @@ -1557,7 +1518,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)  		'U_REPORT'			=> ($auth->acl_get('f_report', $forum_id)) ? append_sid("{$phpbb_root_path}report.$phpEx", 'f=' . $forum_id . '&p=' . $row['post_id']) : '',  		'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) : '',  		'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) : '', -		'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'], +		'U_MINI_POST'		=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'p=' . $row['post_id']) . '#p' . $row['post_id'],  		'U_NEXT_POST_ID'	=> ($i < $i_total && isset($rowset[$post_list[$i + 1]])) ? $rowset[$post_list[$i + 1]]['post_id'] : '',  		'U_PREV_POST_ID'	=> $prev_post_id,  		'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) : '', @@ -1633,34 +1594,13 @@ if (isset($user->data['session_page']) && !$user->data['is_bot'] && (strpos($use  	}  } -// Get last post time for all global announcements -// to keep proper forums tracking -if ($topic_data['topic_type'] == POST_GLOBAL) -{ -	$sql = 'SELECT topic_last_post_time as forum_last_post_time -		FROM ' . TOPICS_TABLE . ' -		WHERE forum_id = 0 -		ORDER BY topic_last_post_time DESC'; -	$result = $db->sql_query_limit($sql, 1); -	$topic_data['forum_last_post_time'] = (int) $db->sql_fetchfield('forum_last_post_time'); -	$db->sql_freeresult($result); - -	$sql = 'SELECT mark_time as forum_mark_time -		FROM ' . FORUMS_TRACK_TABLE . ' -		WHERE forum_id = 0 -			AND user_id = ' . $user->data['user_id']; -	$result = $db->sql_query($sql); -	$topic_data['forum_mark_time'] = (int) $db->sql_fetchfield('forum_mark_time'); -	$db->sql_freeresult($result); -} -  // Only mark topic if it's currently unread. Also make sure we do not set topic tracking back if earlier pages are viewed.  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])  { -	markread('topic', (($topic_data['topic_type'] == POST_GLOBAL) ? 0 : $forum_id), $topic_id, $max_post_time); +	markread('topic', $forum_id, $topic_id, $max_post_time);  	// Update forum info -	$all_marked_read = update_forum_tracking_info((($topic_data['topic_type'] == POST_GLOBAL) ? 0 : $forum_id), $topic_data['forum_last_post_time'], (isset($topic_data['forum_mark_time'])) ? $topic_data['forum_mark_time'] : false, false); +	$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);  }  else  { @@ -1750,19 +1690,19 @@ if ($s_can_vote || $s_quick_reply)  // We overwrite $_REQUEST['f'] if there is no forum specified  // to be able to display the correct online list.  // One downside is that the user currently viewing this topic/post is not taken into account. -if (empty($_REQUEST['f'])) +if (!request_var('f', 0))  { -	$_REQUEST['f'] = $forum_id; +	$request->overwrite('f', $forum_id);  }  // We need to do the same with the topic_id. See #53025. -if (empty($_REQUEST['t']) && !empty($topic_id)) +if (!request_var('t', 0) && !empty($topic_id))  { -	$_REQUEST['t'] = $topic_id; +	$request->overwrite('t', $topic_id);  }  // Output the page -page_header($user->lang['VIEW_TOPIC'] . ' - ' . $topic_data['topic_title'], true, $forum_id); +page_header($topic_data['topic_title'] . ($start ? ' - ' . sprintf($user->lang['PAGE_TITLE_NUMBER'], floor($start / $config['posts_per_page']) + 1) : ''), true, $forum_id);  $template->set_filenames(array(  	'body' => ($view == 'print') ? 'viewtopic_print.html' : 'viewtopic_body.html') @@ -1770,5 +1710,3 @@ $template->set_filenames(array(  make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"), $forum_id);  page_footer(); - -?>
\ No newline at end of file | 
