Colocar o username acima do avatar no prosilver

Suporte à dúvidas gerais relacionadas ao phpBB 3.1.
Avatar do usuário
LucasLV
Moderador
Moderador
Mensagens: 712
Registrado em: 18 Out 2013, 04:40

Colocar o username acima do avatar no prosilver

Mensagem por LucasLV »

Olá galera! Podem me ajudar com uma coisa?

A colocar o username em cima do avatar no prosilver? Com um espaçamento entre o username e o avatar, claro.
Até achei o tutorial de como fazer no phpBB 3.0X, mas mudou muita coisa e não achei as linhas pedidas lá.

Aqui estão os arquivos que acho mais prováveis que sejam modificados, não sei bem, mas deixarei aqui esses:

root/viewtopic.php

Código: Selecionar todos

<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);

// Initial var setup
$forum_id	= request_var('f', 0);
$topic_id	= request_var('t', 0);
$post_id	= request_var('p', 0);
$voted_id	= request_var('vote_id', array('' => 0));

$voted_id = (sizeof($voted_id) > 1) ? array_unique($voted_id) : $voted_id;


$start		= request_var('start', 0);
$view		= request_var('view', '');

$default_sort_days	= (!empty($user->data['user_post_show_days'])) ? $user->data['user_post_show_days'] : 0;
$default_sort_key	= (!empty($user->data['user_post_sortby_type'])) ? $user->data['user_post_sortby_type'] : 't';
$default_sort_dir	= (!empty($user->data['user_post_sortby_dir'])) ? $user->data['user_post_sortby_dir'] : 'a';

$sort_days	= request_var('st', $default_sort_days);
$sort_key	= request_var('sk', $default_sort_key);
$sort_dir	= request_var('sd', $default_sort_dir);

$update		= request_var('update', false);

$pagination = $phpbb_container->get('pagination');

$s_can_vote = false;
/**
* @todo normalize?
*/
$hilit_words	= request_var('hilit', '', true);

// Do we have a topic or post id?
if (!$topic_id && !$post_id)
{
	trigger_error('NO_TOPIC');
}

$phpbb_content_visibility = $phpbb_container->get('content.visibility');

// Find topic id if user requested a newer or older topic
if ($view && !$post_id)
{
	if (!$forum_id)
	{
		$sql = 'SELECT forum_id
			FROM ' . TOPICS_TABLE . "
			WHERE topic_id = $topic_id";
		$result = $db->sql_query($sql);
		$forum_id = (int) $db->sql_fetchfield('forum_id');
		$db->sql_freeresult($result);

		if (!$forum_id)
		{
			trigger_error('NO_TOPIC');
		}
	}

	if ($view == 'unread')
	{
		// Get topic tracking info
		$topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id);
		$topic_last_read = (isset($topic_tracking_info[$topic_id])) ? $topic_tracking_info[$topic_id] : 0;

		$sql = 'SELECT post_id, topic_id, forum_id
			FROM ' . POSTS_TABLE . "
			WHERE topic_id = $topic_id
				AND " . $phpbb_content_visibility->get_visibility_sql('post', $forum_id) . "
				AND post_time > $topic_last_read
				AND forum_id = $forum_id
			ORDER BY post_time ASC, post_id ASC";
		$result = $db->sql_query_limit($sql, 1);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		if (!$row)
		{
			$sql = 'SELECT topic_last_post_id as post_id, topic_id, forum_id
				FROM ' . TOPICS_TABLE . '
				WHERE topic_id = ' . $topic_id;
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);
		}

		if (!$row)
		{
			// Setup user environment so we can process lang string
			$user->setup('viewtopic');

			trigger_error('NO_TOPIC');
		}

		$post_id = $row['post_id'];
		$topic_id = $row['topic_id'];
	}
	else if ($view == 'next' || $view == 'previous')
	{
		$sql_condition = ($view == 'next') ? '>' : '<';
		$sql_ordering = ($view == 'next') ? 'ASC' : 'DESC';

		$sql = 'SELECT forum_id, topic_last_post_time
			FROM ' . TOPICS_TABLE . '
			WHERE topic_id = ' . $topic_id;
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		if (!$row)
		{
			$user->setup('viewtopic');
			// OK, the topic doesn't exist. This error message is not helpful, but technically correct.
			trigger_error(($view == 'next') ? 'NO_NEWER_TOPICS' : 'NO_OLDER_TOPICS');
		}
		else
		{
			$sql = 'SELECT topic_id, forum_id
				FROM ' . TOPICS_TABLE . '
				WHERE forum_id = ' . $row['forum_id'] . "
					AND topic_moved_id = 0
					AND topic_last_post_time $sql_condition {$row['topic_last_post_time']}
					AND " . $phpbb_content_visibility->get_visibility_sql('topic', $row['forum_id']) . "
				ORDER BY topic_last_post_time $sql_ordering, topic_last_post_id $sql_ordering";
			$result = $db->sql_query_limit($sql, 1);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

			if (!$row)
			{
				$sql = 'SELECT forum_style
					FROM ' . FORUMS_TABLE . "
					WHERE forum_id = $forum_id";
				$result = $db->sql_query($sql);
				$forum_style = (int) $db->sql_fetchfield('forum_style');
				$db->sql_freeresult($result);

				$user->setup('viewtopic', $forum_style);
				trigger_error(($view == 'next') ? 'NO_NEWER_TOPICS' : 'NO_OLDER_TOPICS');
			}
			else
			{
				$topic_id = $row['topic_id'];
				$forum_id = $row['forum_id'];
			}
		}
	}

	if (isset($row) && $row['forum_id'])
	{
		$forum_id = $row['forum_id'];
	}
}

// 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)
$sql_array = array(
	'SELECT'	=> 't.*, f.*',

	'FROM'		=> array(FORUMS_TABLE => 'f'),
);

// The FROM-Order is quite important here, else t.* columns can not be correctly bound.
if ($post_id)
{
	$sql_array['SELECT'] .= ', p.post_visibility, p.post_time, p.post_id';
	$sql_array['FROM'][POSTS_TABLE] = 'p';
}

// Topics table need to be the last in the chain
$sql_array['FROM'][TOPICS_TABLE] = 't';

if ($user->data['is_registered'])
{
	$sql_array['SELECT'] .= ', tw.notify_status';
	$sql_array['LEFT_JOIN'] = array();

	$sql_array['LEFT_JOIN'][] = array(
		'FROM'	=> array(TOPICS_WATCH_TABLE => 'tw'),
		'ON'	=> 'tw.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tw.topic_id'
	);

	if ($config['allow_bookmarks'])
	{
		$sql_array['SELECT'] .= ', bm.topic_id as bookmarked';
		$sql_array['LEFT_JOIN'][] = array(
			'FROM'	=> array(BOOKMARKS_TABLE => 'bm'),
			'ON'	=> 'bm.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = bm.topic_id'
		);
	}

	if ($config['load_db_lastread'])
	{
		$sql_array['SELECT'] .= ', tt.mark_time, ft.mark_time as forum_mark_time';

		$sql_array['LEFT_JOIN'][] = array(
			'FROM'	=> array(TOPICS_TRACK_TABLE => 'tt'),
			'ON'	=> 'tt.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tt.topic_id'
		);

		$sql_array['LEFT_JOIN'][] = array(
			'FROM'	=> array(FORUMS_TRACK_TABLE => 'ft'),
			'ON'	=> 'ft.user_id = ' . $user->data['user_id'] . ' AND t.forum_id = ft.forum_id'
		);
	}
}

if (!$post_id)
{
	$sql_array['WHERE'] = "t.topic_id = $topic_id";
}
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';

$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql);
$topic_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

// link to unapproved post or incorrect link
if (!$topic_data)
{
	// If post_id was submitted, we try at least to display the topic as a last resort...
	if ($post_id && $topic_id)
	{
		redirect(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "t=$topic_id" . (($forum_id) ? "&f=$forum_id" : '')));
	}

	trigger_error('NO_TOPIC');
}

$forum_id = (int) $topic_data['forum_id'];

// Now we know the forum_id and can check the permissions
if ($topic_data['topic_visibility'] != ITEM_APPROVED && !$auth->acl_get('m_approve', $forum_id))
{
	trigger_error('NO_TOPIC');
}

// This is for determining where we are (page)
if ($post_id)
{
	// are we where we are supposed to be?
	if (($topic_data['post_visibility'] == ITEM_UNAPPROVED || $topic_data['post_visibility'] == ITEM_REAPPROVE) && !$auth->acl_get('m_approve', $topic_data['forum_id']))
	{
		// If post_id was submitted, we try at least to display the topic as a last resort...
		if ($topic_id)
		{
			redirect(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "t=$topic_id" . (($forum_id) ? "&f=$forum_id" : '')));
		}

		trigger_error('NO_TOPIC');
	}
	if ($post_id == $topic_data['topic_first_post_id'] || $post_id == $topic_data['topic_last_post_id'])
	{
		$check_sort = ($post_id == $topic_data['topic_first_post_id']) ? 'd' : 'a';

		if ($sort_dir == $check_sort)
		{
			$topic_data['prev_posts'] = $phpbb_content_visibility->get_count('topic_posts', $topic_data, $forum_id) - 1;
		}
		else
		{
			$topic_data['prev_posts'] = 0;
		}
	}
	else
	{
		$sql = 'SELECT COUNT(p.post_id) AS prev_posts
			FROM ' . POSTS_TABLE . " p
			WHERE p.topic_id = {$topic_data['topic_id']}
				AND " . $phpbb_content_visibility->get_visibility_sql('post', $forum_id, 'p.');

		if ($sort_dir == 'd')
		{
			$sql .= " AND (p.post_time > {$topic_data['post_time']} OR (p.post_time = {$topic_data['post_time']} AND p.post_id >= {$topic_data['post_id']}))";
		}
		else
		{
			$sql .= " AND (p.post_time < {$topic_data['post_time']} OR (p.post_time = {$topic_data['post_time']} AND p.post_id <= {$topic_data['post_id']}))";
		}

		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		$topic_data['prev_posts'] = $row['prev_posts'] - 1;
	}
}

$topic_id = (int) $topic_data['topic_id'];
$topic_replies = $phpbb_content_visibility->get_count('topic_posts', $topic_data, $forum_id) - 1;

// Check sticky/announcement time limit
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())
{
	$sql = 'UPDATE ' . TOPICS_TABLE . '
		SET topic_type = ' . POST_NORMAL . ', topic_time_limit = 0
		WHERE topic_id = ' . $topic_id;
	$db->sql_query($sql);

	$topic_data['topic_type'] = POST_NORMAL;
	$topic_data['topic_time_limit'] = 0;
}

// Setup look and feel
$user->setup('viewtopic', $topic_data['forum_style']);

$overrides_f_read_check = false;
$overrides_forum_password_check = false;
$topic_tracking_info = isset($topic_tracking_info) ? $topic_tracking_info : null;

/**
* Event to apply extra permissions and to override original phpBB's f_read permission and forum password check
* on viewtopic access
*
* @event core.viewtopic_before_f_read_check
* @var	int		forum_id						The forum id from where the topic belongs
* @var	int		topic_id						The id of the topic the user tries to access
* @var	int		post_id							The id of the post the user tries to start viewing at.
*												It may be 0 for none given.
* @var	array	topic_data						All the information from the topic and forum tables for this topic
* 												It includes posts information if post_id is not 0
* @var	bool	overrides_f_read_check			Set true to remove f_read check afterwards
* @var	bool	overrides_forum_password_check	Set true to remove forum_password check afterwards
* @var	array	topic_tracking_info				Information upon calling get_topic_tracking()
*												Set it to NULL to allow auto-filling later.
*												Set it to an array to override original data.
* @since 3.1.3-RC1
*/
$vars = array(
	'forum_id',
	'topic_id',
	'post_id',
	'topic_data',
	'overrides_f_read_check',
	'overrides_forum_password_check',
	'topic_tracking_info',
);
extract($phpbb_dispatcher->trigger_event('core.viewtopic_before_f_read_check', compact($vars)));

// Start auth check
if (!$overrides_f_read_check && !$auth->acl_get('f_read', $forum_id))
{
	if ($user->data['user_id'] != ANONYMOUS)
	{
		trigger_error('SORRY_AUTH_READ');
	}

	login_box('', $user->lang['LOGIN_VIEWFORUM']);
}

// Forum is passworded ... check whether access has been granted to this
// user this session, if not show login box
if (!$overrides_forum_password_check && $topic_data['forum_password'])
{
	login_forum_box($topic_data);
}

// Redirect to login upon emailed notification links if user is not logged in.
if (isset($_GET['e']) && $user->data['user_id'] == ANONYMOUS)
{
	login_box(build_url('e') . '#unread', $user->lang['LOGIN_NOTIFY_TOPIC']);
}

// What is start equal to?
if ($post_id)
{
	$start = floor(($topic_data['prev_posts']) / $config['posts_per_page']) * $config['posts_per_page'];
}

// Get topic tracking info
if (!isset($topic_tracking_info))
{
	$topic_tracking_info = array();

	// Get topic tracking info
	if ($config['load_db_lastread'] && $user->data['is_registered'])
	{
		$tmp_topic_data = array($topic_id => $topic_data);
		$topic_tracking_info = get_topic_tracking($forum_id, $topic_id, $tmp_topic_data, array($forum_id => $topic_data['forum_mark_time']));
		unset($tmp_topic_data);
	}
	else if ($config['load_anon_lastread'] || $user->data['is_registered'])
	{
		$topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id);
	}
}

// Post ordering options
$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']);

$sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 's' => $user->lang['SUBJECT']);
$sort_by_sql = array('a' => array('u.username_clean', 'p.post_id'), 't' => array('p.post_time', 'p.post_id'), 's' => array('p.post_subject', 'p.post_id'));
$join_user_sql = array('a' => true, 't' => false, 's' => false);

$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, $default_sort_days, $default_sort_key, $default_sort_dir);

// Obtain correct post count and ordering SQL if user has
// requested anything different
if ($sort_days)
{
	$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
				AND " . $phpbb_content_visibility->get_visibility_sql('post', $forum_id);
	$result = $db->sql_query($sql);
	$total_posts = (int) $db->sql_fetchfield('num_posts');
	$db->sql_freeresult($result);

	$limit_posts_time = "AND p.post_time >= $min_post_time ";

	if (isset($_POST['sort']))
	{
		$start = 0;
	}
}
else
{
	$total_posts = $topic_replies + 1;
	$limit_posts_time = '';
}

// Was a highlight request part of the URI?
$highlight_match = $highlight = '';
if ($hilit_words)
{
	$highlight_match = phpbb_clean_search_string($hilit_words);
	$highlight = urlencode($highlight_match);
	$highlight_match = str_replace('\*', '\w+?', preg_quote($highlight_match, '#'));
	$highlight_match = preg_replace('#(?<=^|\s)\\\\w\*\?(?=\s|$)#', '\w+?', $highlight_match);
	$highlight_match = str_replace(' ', '|', $highlight_match);
}

// Make sure $start is set to the last page if it exceeds the amount
$start = $pagination->validate_start($start, $config['posts_per_page'], $total_posts);

// General Viewtopic URL for return links
$viewtopic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start") . ((strlen($u_sort_param)) ? "&$u_sort_param" : '') . (($highlight_match) ? "&hilit=$highlight" : ''));

// Are we watching this topic?
$s_watching_topic = array(
	'link'			=> '',
	'link_toggle'	=> '',
	'title'			=> '',
	'title_toggle'	=> '',
	'is_watching'	=> false,
);

if ($config['allow_topic_notify'])
{
	$notify_status = (isset($topic_data['notify_status'])) ? $topic_data['notify_status'] : null;
	watch_topic_forum('topic', $s_watching_topic, $user->data['user_id'], $forum_id, $topic_id, $notify_status, $start, $topic_data['topic_title']);

	// Reset forum notification if forum notify is set
	if ($config['allow_forum_notify'] && $auth->acl_get('f_subscribe', $forum_id))
	{
		$s_watching_forum = $s_watching_topic;
		watch_topic_forum('forum', $s_watching_forum, $user->data['user_id'], $forum_id, 0);
	}
}

// Bookmarks
if ($config['allow_bookmarks'] && $user->data['is_registered'] && request_var('bookmark', 0))
{
	if (check_link_hash(request_var('hash', ''), "topic_$topic_id"))
	{
		if (!$topic_data['bookmarked'])
		{
			$sql = 'INSERT INTO ' . BOOKMARKS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
				'user_id'	=> $user->data['user_id'],
				'topic_id'	=> $topic_id,
			));
			$db->sql_query($sql);
		}
		else
		{
			$sql = 'DELETE FROM ' . BOOKMARKS_TABLE . "
				WHERE user_id = {$user->data['user_id']}
					AND topic_id = $topic_id";
			$db->sql_query($sql);
		}
		$message = (($topic_data['bookmarked']) ? $user->lang['BOOKMARK_REMOVED'] : $user->lang['BOOKMARK_ADDED']);

		if (!$request->is_ajax())
		{
			$message .= '<br /><br />' . $user->lang('RETURN_TOPIC', '<a href="' . $viewtopic_url . '">', '</a>');
		}
	}
	else
	{
		$message = $user->lang['BOOKMARK_ERR'];

		if (!$request->is_ajax())
		{
			$message .= '<br /><br />' . $user->lang('RETURN_TOPIC', '<a href="' . $viewtopic_url . '">', '</a>');
		}
	}
	meta_refresh(3, $viewtopic_url);

	trigger_error($message);
}

// Grab ranks
$ranks = $cache->obtain_ranks();

// Grab icons
$icons = $cache->obtain_icons();

// Grab extensions
$extensions = array();
if ($topic_data['topic_attachment'])
{
	$extensions = $cache->obtain_attach_extensions($forum_id);
}

// Forum rules listing
$s_forum_rules = '';
gen_forum_auth_level('topic', $forum_id, $topic_data['forum_status']);

// Quick mod tools
$allow_change_type = ($auth->acl_get('m_', $forum_id) || ($user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'])) ? true : false;

$s_quickmod_action = append_sid(
	"{$phpbb_root_path}mcp.$phpEx",
	array(
		'f'	=> $forum_id,
		't'	=> $topic_id,
		'start'		=> $start,
		'quickmod'	=> 1,
		'redirect'	=> urlencode(str_replace('&', '&', $viewtopic_url)),
	),
	true,
	$user->session_id
);

$quickmod_array = array(
//	'key'			=> array('LANG_KEY', $userHasPermissions),

	'lock'					=> array('LOCK_TOPIC', ($topic_data['topic_status'] == ITEM_UNLOCKED) && ($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']))),
	'unlock'				=> array('UNLOCK_TOPIC', ($topic_data['topic_status'] != ITEM_UNLOCKED) && ($auth->acl_get('m_lock', $forum_id))),
	'delete_topic'		=> array('DELETE_TOPIC', ($auth->acl_get('m_delete', $forum_id) || (($topic_data['topic_visibility'] != ITEM_DELETED) && $auth->acl_get('m_softdelete', $forum_id)))),
	'restore_topic'		=> array('RESTORE_TOPIC', (($topic_data['topic_visibility'] == ITEM_DELETED) && $auth->acl_get('m_approve', $forum_id))),
	'move'					=> array('MOVE_TOPIC', $auth->acl_get('m_move', $forum_id) && $topic_data['topic_status'] != ITEM_MOVED),
	'split'					=> array('SPLIT_TOPIC', $auth->acl_get('m_split', $forum_id)),
	'merge'					=> array('MERGE_POSTS', $auth->acl_get('m_merge', $forum_id)),
	'merge_topic'		=> array('MERGE_TOPIC', $auth->acl_get('m_merge', $forum_id)),
	'fork'					=> array('FORK_TOPIC', $auth->acl_get('m_move', $forum_id)),
	'make_normal'		=> array('MAKE_NORMAL', ($allow_change_type && $auth->acl_gets('f_sticky', 'f_announce', $forum_id) && $topic_data['topic_type'] != POST_NORMAL)),
	'make_sticky'		=> array('MAKE_STICKY', ($allow_change_type && $auth->acl_get('f_sticky', $forum_id) && $topic_data['topic_type'] != POST_STICKY)),
	'make_announce'	=> array('MAKE_ANNOUNCE', ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_ANNOUNCE)),
	'make_global'		=> array('MAKE_GLOBAL', ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_GLOBAL)),
	'topic_logs'			=> array('VIEW_TOPIC_LOGS', $auth->acl_get('m_', $forum_id)),
);

foreach($quickmod_array as $option => $qm_ary)
{
	if (!empty($qm_ary[1]))
	{
		phpbb_add_quickmod_option($s_quickmod_action, $option, $qm_ary[0]);
	}
}

// Navigation links
generate_forum_nav($topic_data);

// Forum Rules
generate_forum_rules($topic_data);

// Moderators
$forum_moderators = array();
if ($config['load_moderators'])
{
	get_moderators($forum_moderators, $forum_id);
}

// This is only used for print view so ...
$server_path = (!$view) ? $phpbb_root_path : generate_board_url() . '/';

// Replace naughty words in title
$topic_data['topic_title'] = censor_text($topic_data['topic_title']);

$s_search_hidden_fields = array(
	't' => $topic_id,
	'sf' => 'msgonly',
);
if ($_SID)
{
	$s_search_hidden_fields['sid'] = $_SID;
}

if (!empty($_EXTRA_URL))
{
	foreach ($_EXTRA_URL as $url_param)
	{
		$url_param = explode('=', $url_param, 2);
		$s_search_hidden_fields[$url_param[0]] = $url_param[1];
	}
}

// If we've got a hightlight set pass it on to pagination.
$base_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '') . (($highlight_match) ? "&hilit=$highlight" : ''));

/**
* Event to modify data before template variables are being assigned
*
* @event core.viewtopic_assign_template_vars_before
* @var	string	base_url			URL to be passed to generate pagination
* @var	int		forum_id			Forum ID
* @var	int		post_id				Post ID
* @var	array	quickmod_array		Array with quick moderation options data
* @var	int		start				Pagination information
* @var	array	topic_data			Array with topic data
* @var	int		topic_id			Topic ID
* @var	array	topic_tracking_info	Array with topic tracking data
* @var	int		total_posts			Topic total posts count
* @var	string	viewtopic_url		URL to the topic page
* @since 3.1.0-RC4
* @change 3.1.2-RC1 Added viewtopic_url
*/
$vars = array(
	'base_url',
	'forum_id',
	'post_id',
	'quickmod_array',
	'start',
	'topic_data',
	'topic_id',
	'topic_tracking_info',
	'total_posts',
	'viewtopic_url',
);
extract($phpbb_dispatcher->trigger_event('core.viewtopic_assign_template_vars_before', compact($vars)));

$pagination->generate_template_pagination($base_url, 'pagination', 'start', $total_posts, $config['posts_per_page'], $start);

// Send vars to template
$template->assign_vars(array(
	'FORUM_ID' 		=> $forum_id,
	'FORUM_NAME' 	=> $topic_data['forum_name'],
	'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']),
	'TOPIC_ID' 		=> $topic_id,
	'TOPIC_TITLE' 	=> $topic_data['topic_title'],
	'TOPIC_POSTER'	=> $topic_data['topic_poster'],

	'TOPIC_AUTHOR_FULL'		=> get_username_string('full', $topic_data['topic_poster'], $topic_data['topic_first_poster_name'], $topic_data['topic_first_poster_colour']),
	'TOPIC_AUTHOR_COLOUR'	=> get_username_string('colour', $topic_data['topic_poster'], $topic_data['topic_first_poster_name'], $topic_data['topic_first_poster_colour']),
	'TOPIC_AUTHOR'			=> get_username_string('username', $topic_data['topic_poster'], $topic_data['topic_first_poster_name'], $topic_data['topic_first_poster_colour']),

	'TOTAL_POSTS'	=> $user->lang('VIEW_TOPIC_POSTS', (int) $total_posts),
	'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 == 0) ? '' : "&start=$start") . ((strlen($u_sort_param)) ? "&$u_sort_param" : ''), true, $user->session_id) : '',
	'MODERATORS'	=> (isset($forum_moderators[$forum_id]) && sizeof($forum_moderators[$forum_id])) ? implode($user->lang['COMMA_SEPARATOR'], $forum_moderators[$forum_id]) : '',

	'POST_IMG' 			=> ($topic_data['forum_status'] == ITEM_LOCKED) ? $user->img('button_topic_locked', 'FORUM_LOCKED') : $user->img('button_topic_new', 'POST_NEW_TOPIC'),
	'QUOTE_IMG' 		=> $user->img('icon_post_quote', 'REPLY_WITH_QUOTE'),
	'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'),
	'EDIT_IMG' 			=> $user->img('icon_post_edit', 'EDIT_POST'),
	'DELETE_IMG' 		=> $user->img('icon_post_delete', 'DELETE_POST'),
	'DELETED_IMG'		=> $user->img('icon_topic_deleted', 'POST_DELETED_RESTORE'),
	'INFO_IMG' 			=> $user->img('icon_post_info', 'VIEW_INFO'),
	'PROFILE_IMG'		=> $user->img('icon_user_profile', 'READ_PROFILE'),
	'SEARCH_IMG' 		=> $user->img('icon_user_search', 'SEARCH_USER_POSTS'),
	'PM_IMG' 			=> $user->img('icon_contact_pm', 'SEND_PRIVATE_MESSAGE'),
	'EMAIL_IMG' 		=> $user->img('icon_contact_email', 'SEND_EMAIL'),
	'JABBER_IMG'		=> $user->img('icon_contact_jabber', 'JABBER') ,
	'REPORT_IMG'		=> $user->img('icon_post_report', 'REPORT_POST'),
	'REPORTED_IMG'		=> $user->img('icon_topic_reported', 'POST_REPORTED'),
	'UNAPPROVED_IMG'	=> $user->img('icon_topic_unapproved', 'POST_UNAPPROVED'),
	'WARN_IMG'			=> $user->img('icon_user_warn', 'WARN_USER'),

	'S_IS_LOCKED'			=> ($topic_data['topic_status'] == ITEM_UNLOCKED && $topic_data['forum_status'] == ITEM_UNLOCKED) ? false : true,
	'S_SELECT_SORT_DIR' 	=> $s_sort_dir,
	'S_SELECT_SORT_KEY' 	=> $s_sort_key,
	'S_SELECT_SORT_DAYS' 	=> $s_limit_days,
	'S_SINGLE_MODERATOR'	=> (!empty($forum_moderators[$forum_id]) && sizeof($forum_moderators[$forum_id]) > 1) ? false : true,
	'S_TOPIC_ACTION' 		=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start")),
	'S_MOD_ACTION' 			=> $s_quickmod_action,

	'L_RETURN_TO_FORUM'		=> $user->lang('RETURN_TO', $topic_data['forum_name']),
	'S_VIEWTOPIC'			=> true,
	'S_UNREAD_VIEW'			=> $view == 'unread',
	'S_DISPLAY_SEARCHBOX'	=> ($auth->acl_get('u_search') && $auth->acl_get('f_search', $forum_id) && $config['load_search']) ? true : false,
	'S_SEARCHBOX_ACTION'	=> append_sid("{$phpbb_root_path}search.$phpEx"),
	'S_SEARCH_LOCAL_HIDDEN_FIELDS'	=> build_hidden_fields($s_search_hidden_fields),

	'S_DISPLAY_POST_INFO'	=> ($topic_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false,
	'S_DISPLAY_REPLY_INFO'	=> ($topic_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_reply', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false,
	'S_ENABLE_FEEDS_TOPIC'	=> ($config['feed_topic'] && !phpbb_optionget(FORUM_OPTION_FEED_EXCLUDE, $topic_data['forum_options'])) ? true : false,

	'U_TOPIC'				=> "{$server_path}viewtopic.$phpEx?f=$forum_id&t=$topic_id",
	'U_FORUM'				=> $server_path,
	'U_VIEW_TOPIC' 			=> $viewtopic_url,
	'U_CANONICAL'			=> generate_board_url() . '/' . append_sid("viewtopic.$phpEx", "t=$topic_id" . (($start) ? "&start=$start" : ''), true, ''),
	'U_VIEW_FORUM' 			=> append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id),
	'U_VIEW_OLDER_TOPIC'	=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=previous"),
	'U_VIEW_NEWER_TOPIC'	=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=next"),
	'U_PRINT_TOPIC'			=> ($auth->acl_get('f_print', $forum_id)) ? $viewtopic_url . '&view=print' : '',
	'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") : '',

	'U_WATCH_TOPIC'			=> $s_watching_topic['link'],
	'U_WATCH_TOPIC_TOGGLE'	=> $s_watching_topic['link_toggle'],
	'S_WATCH_TOPIC_TITLE'	=> $s_watching_topic['title'],
	'S_WATCH_TOPIC_TOGGLE'	=> $s_watching_topic['title_toggle'],
	'S_WATCHING_TOPIC'		=> $s_watching_topic['is_watching'],

	'U_BOOKMARK_TOPIC'		=> ($user->data['is_registered'] && $config['allow_bookmarks']) ? $viewtopic_url . '&bookmark=1&hash=' . generate_link_hash("topic_$topic_id") : '',
	'S_BOOKMARK_TOPIC'		=> ($user->data['is_registered'] && $config['allow_bookmarks'] && $topic_data['bookmarked']) ? $user->lang['BOOKMARK_TOPIC_REMOVE'] : $user->lang['BOOKMARK_TOPIC'],
	'S_BOOKMARK_TOGGLE'		=> (!$user->data['is_registered'] || !$config['allow_bookmarks'] || !$topic_data['bookmarked']) ? $user->lang['BOOKMARK_TOPIC_REMOVE'] : $user->lang['BOOKMARK_TOPIC'],
	'S_BOOKMARKED_TOPIC'	=> ($user->data['is_registered'] && $config['allow_bookmarks'] && $topic_data['bookmarked']) ? true : false,

	'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") : '',
	'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") : '',
	'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&hash=" . generate_link_hash("topic_$topic_id")) : '')
);

// Does this topic contain a poll?
if (!empty($topic_data['poll_start']))
{
	$sql = 'SELECT o.*, p.bbcode_bitfield, p.bbcode_uid
		FROM ' . POLL_OPTIONS_TABLE . ' o, ' . POSTS_TABLE . " p
		WHERE o.topic_id = $topic_id
			AND p.post_id = {$topic_data['topic_first_post_id']}
			AND p.topic_id = o.topic_id
		ORDER BY o.poll_option_id";
	$result = $db->sql_query($sql);

	$poll_info = $vote_counts = array();
	while ($row = $db->sql_fetchrow($result))
	{
		$poll_info[] = $row;
		$option_id = (int) $row['poll_option_id'];
		$vote_counts[$option_id] = (int) $row['poll_option_total'];
	}
	$db->sql_freeresult($result);

	$cur_voted_id = array();
	if ($user->data['is_registered'])
	{
		$sql = 'SELECT poll_option_id
			FROM ' . POLL_VOTES_TABLE . '
			WHERE topic_id = ' . $topic_id . '
				AND vote_user_id = ' . $user->data['user_id'];
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$cur_voted_id[] = $row['poll_option_id'];
		}
		$db->sql_freeresult($result);
	}
	else
	{
		// 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 ($request->is_set($config['cookie_name'] . '_poll_' . $topic_id, \phpbb\request\request_interface::COOKIE))
		{
			$cur_voted_id = explode(',', $request->variable($config['cookie_name'] . '_poll_' . $topic_id, '', true, \phpbb\request\request_interface::COOKIE));
			$cur_voted_id = array_map('intval', $cur_voted_id);
		}
	}

	// Can not vote at all if no vote permission
	$s_can_vote = ($auth->acl_get('f_vote', $forum_id) &&
		(($topic_data['poll_length'] != 0 && $topic_data['poll_start'] + $topic_data['poll_length'] > time()) || $topic_data['poll_length'] == 0) &&
		$topic_data['topic_status'] != ITEM_LOCKED &&
		$topic_data['forum_status'] != ITEM_LOCKED &&
		(!sizeof($cur_voted_id) ||
		($auth->acl_get('f_votechg', $forum_id) && $topic_data['poll_vote_change']))) ? true : false;
	$s_display_results = (!$s_can_vote || ($s_can_vote && sizeof($cur_voted_id)) || $view == 'viewpoll') ? true : false;

	/**
	* Event to manipulate the poll data
	*
	* @event core.viewtopic_modify_poll_data
	* @var	array	cur_voted_id				Array with options' IDs current user has voted for
	* @var	int		forum_id					The topic's forum id
	* @var	array	poll_info					Array with the poll information
	* @var	bool	s_can_vote					Flag indicating if a user can vote
	* @var	bool	s_display_results			Flag indicating if results or poll options should be displayed
	* @var	int		topic_id					The id of the topic the user tries to access
	* @var	array	topic_data					All the information from the topic and forum tables for this topic
	* @var	string	viewtopic_url				URL to the topic page
	* @var	array	vote_counts					Array with the vote counts for every poll option
	* @var	array	voted_id					Array with updated options' IDs current user is voting for
	* @since 3.1.5-RC1
	*/
	$vars = array(
		'cur_voted_id',
		'forum_id',
		'poll_info',
		's_can_vote',
		's_display_results',
		'topic_id',
		'topic_data',
		'viewtopic_url',
		'vote_counts',
		'voted_id',
	);
	extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_poll_data', compact($vars)));

	if ($update && $s_can_vote)
	{

		if (!sizeof($voted_id) || sizeof($voted_id) > $topic_data['poll_max_options'] || in_array(VOTE_CONVERTED, $cur_voted_id) || !check_form_key('posting'))
		{
			$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start"));

			meta_refresh(5, $redirect_url);
			if (!sizeof($voted_id))
			{
				$message = 'NO_VOTE_OPTION';
			}
			else if (sizeof($voted_id) > $topic_data['poll_max_options'])
			{
				$message = 'TOO_MANY_VOTE_OPTIONS';
			}
			else if (in_array(VOTE_CONVERTED, $cur_voted_id))
			{
				$message = 'VOTE_CONVERTED';
			}
			else
			{
				$message = 'FORM_INVALID';
			}

			$message = $user->lang[$message] . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $redirect_url . '">', '</a>');
			trigger_error($message);
		}

		foreach ($voted_id as $option)
		{
			if (in_array($option, $cur_voted_id))
			{
				continue;
			}

			$sql = 'UPDATE ' . POLL_OPTIONS_TABLE . '
				SET poll_option_total = poll_option_total + 1
				WHERE poll_option_id = ' . (int) $option . '
					AND topic_id = ' . (int) $topic_id;
			$db->sql_query($sql);

			$vote_counts[$option]++;

			if ($user->data['is_registered'])
			{
				$sql_ary = array(
					'topic_id'			=> (int) $topic_id,
					'poll_option_id'	=> (int) $option,
					'vote_user_id'		=> (int) $user->data['user_id'],
					'vote_user_ip'		=> (string) $user->ip,
				);

				$sql = 'INSERT INTO ' . POLL_VOTES_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
				$db->sql_query($sql);
			}
		}

		foreach ($cur_voted_id as $option)
		{
			if (!in_array($option, $voted_id))
			{
				$sql = 'UPDATE ' . POLL_OPTIONS_TABLE . '
					SET poll_option_total = poll_option_total - 1
					WHERE poll_option_id = ' . (int) $option . '
						AND topic_id = ' . (int) $topic_id;
				$db->sql_query($sql);

				$vote_counts[$option]--;

				if ($user->data['is_registered'])
				{
					$sql = 'DELETE FROM ' . POLL_VOTES_TABLE . '
						WHERE topic_id = ' . (int) $topic_id . '
							AND poll_option_id = ' . (int) $option . '
							AND vote_user_id = ' . (int) $user->data['user_id'];
					$db->sql_query($sql);
				}
			}
		}

		if ($user->data['user_id'] == ANONYMOUS && !$user->data['is_bot'])
		{
			$user->set_cookie('poll_' . $topic_id, implode(',', $voted_id), time() + 31536000);
		}

		$sql = 'UPDATE ' . TOPICS_TABLE . '
			SET poll_last_vote = ' . time() . "
			WHERE topic_id = $topic_id";
		//, topic_last_post_time = ' . time() . " -- for bumping topics with new votes, ignore for now
		$db->sql_query($sql);

		$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start"));
		$message = $user->lang['VOTE_SUBMITTED'] . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $redirect_url . '">', '</a>');

		if ($request->is_ajax())
		{
			// Filter out invalid options
			$valid_user_votes = array_intersect(array_keys($vote_counts), $voted_id);

			$data = array(
				'NO_VOTES'			=> $user->lang['NO_VOTES'],
				'success'			=> true,
				'user_votes'		=> array_flip($valid_user_votes),
				'vote_counts'		=> $vote_counts,
				'total_votes'		=> array_sum($vote_counts),
				'can_vote'			=> !sizeof($valid_user_votes) || ($auth->acl_get('f_votechg', $forum_id) && $topic_data['poll_vote_change']),
			);
			$json_response = new \phpbb\json_response();
			$json_response->send($data);
		}

		meta_refresh(5, $redirect_url);
		trigger_error($message);
	}

	$poll_total = 0;
	$poll_most = 0;
	foreach ($poll_info as $poll_option)
	{
		$poll_total += $poll_option['poll_option_total'];
		$poll_most = ($poll_option['poll_option_total'] >= $poll_most) ? $poll_option['poll_option_total'] : $poll_most;
	}

	$parse_flags = ($poll_info[0]['bbcode_bitfield'] ? OPTION_FLAG_BBCODE : 0) | OPTION_FLAG_SMILIES;

	for ($i = 0, $size = sizeof($poll_info); $i < $size; $i++)
	{
		$poll_info[$i]['poll_option_text'] = generate_text_for_display($poll_info[$i]['poll_option_text'], $poll_info[$i]['bbcode_uid'], $poll_option['bbcode_bitfield'], $parse_flags, true);
	}

	$topic_data['poll_title'] = generate_text_for_display($topic_data['poll_title'], $poll_info[0]['bbcode_uid'], $poll_info[0]['bbcode_bitfield'], $parse_flags, true);

	$poll_template_data = $poll_options_template_data = array();
	foreach ($poll_info as $poll_option)
	{
		$option_pct = ($poll_total > 0) ? $poll_option['poll_option_total'] / $poll_total : 0;
		$option_pct_txt = sprintf("%.1d%%", round($option_pct * 100));
		$option_pct_rel = ($poll_most > 0) ? $poll_option['poll_option_total'] / $poll_most : 0;
		$option_pct_rel_txt = sprintf("%.1d%%", round($option_pct_rel * 100));
		$option_most_votes = ($poll_option['poll_option_total'] > 0 && $poll_option['poll_option_total'] == $poll_most) ? true : false;

		$poll_options_template_data[] = 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'],
			'POLL_OPTION_PERCENT' 		=> $option_pct_txt,
			'POLL_OPTION_PERCENT_REL' 	=> $option_pct_rel_txt,
			'POLL_OPTION_PCT'			=> round($option_pct * 100),
			'POLL_OPTION_WIDTH'     	=> round($option_pct * 250),
			'POLL_OPTION_VOTED'			=> (in_array($poll_option['poll_option_id'], $cur_voted_id)) ? true : false,
			'POLL_OPTION_MOST_VOTES'	=> $option_most_votes,
		);
	}

	$poll_end = $topic_data['poll_length'] + $topic_data['poll_start'];

	$poll_template_data = array(
		'POLL_QUESTION'		=> $topic_data['poll_title'],
		'TOTAL_VOTES' 		=> $poll_total,
		'POLL_LEFT_CAP_IMG'	=> $user->img('poll_left'),
		'POLL_RIGHT_CAP_IMG'=> $user->img('poll_right'),

		'L_MAX_VOTES'		=> $user->lang('MAX_OPTIONS_SELECT', (int) $topic_data['poll_max_options']),
		'L_POLL_LENGTH'		=> ($topic_data['poll_length']) ? sprintf($user->lang[($poll_end > time()) ? 'POLL_RUN_TILL' : 'POLL_ENDED_AT'], $user->format_date($poll_end)) : '',

		'S_HAS_POLL'		=> true,
		'S_CAN_VOTE'		=> $s_can_vote,
		'S_DISPLAY_RESULTS'	=> $s_display_results,
		'S_IS_MULTI_CHOICE'	=> ($topic_data['poll_max_options'] > 1) ? true : false,
		'S_POLL_ACTION'		=> $viewtopic_url,

		'U_VIEW_RESULTS'	=> $viewtopic_url . '&view=viewpoll',
	);

	/**
	* Event to add/modify poll template data
	*
	* @event core.viewtopic_modify_poll_template_data
	* @var	array	cur_voted_id					Array with options' IDs current user has voted for
	* @var	int		poll_end						The poll end time
	* @var	array	poll_info						Array with the poll information
	* @var	array	poll_options_template_data		Array with the poll options template data
	* @var	array	poll_template_data				Array with the common poll template data
	* @var	int		poll_total						Total poll votes count
	* @var	int		poll_most						Mostly voted option votes count
	* @var	array	topic_data						All the information from the topic and forum tables for this topic
	* @var	string	viewtopic_url					URL to the topic page
	* @var	array	vote_counts						Array with the vote counts for every poll option
	* @var	array	voted_id						Array with updated options' IDs current user is voting for
	* @since 3.1.5-RC1
	*/
	$vars = array(
		'cur_voted_id',
		'poll_end',
		'poll_info',
		'poll_options_template_data',
		'poll_template_data',
		'poll_total',
		'poll_most',
		'topic_data',
		'viewtopic_url',
		'vote_counts',
		'voted_id',
	);
	extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_poll_template_data', compact($vars)));

	$template->assign_block_vars_array('poll_option', $poll_options_template_data);

	$template->assign_vars($poll_template_data);

	unset($poll_end, $poll_info, $poll_options_template_data, $poll_template_data, $voted_id);
}

// If the user is trying to reach the second half of the topic, fetch it starting from the end
$store_reverse = false;
$sql_limit = $config['posts_per_page'];
$sql_sort_order = $direction = '';

if ($start > $total_posts / 2)
{
	$store_reverse = true;

	// Select the sort order
	$direction = (($sort_dir == 'd') ? 'ASC' : 'DESC');

	$sql_limit = $pagination->reverse_limit($start, $sql_limit, $total_posts);
	$sql_start = $pagination->reverse_start($start, $sql_limit, $total_posts);
}
else
{
	// Select the sort order
	$direction = (($sort_dir == 'd') ? 'DESC' : 'ASC');
	$sql_start = $start;
}

if (is_array($sort_by_sql[$sort_key]))
{
	$sql_sort_order = implode(' ' . $direction . ', ', $sort_by_sql[$sort_key]) . ' ' . $direction;
}
else
{
	$sql_sort_order = $sort_by_sql[$sort_key] . ' ' . $direction;
}

// Container for user details, only process once
$post_list = $user_cache = $id_cache = $attachments = $attach_list = $rowset = $update_count = $post_edit_list = $post_delete_list = array();
$has_unapproved_attachments = $has_approved_attachments = $display_notice = false;
$i = $i_total = 0;

// Go ahead and pull all data for this topic
$sql = 'SELECT p.post_id
	FROM ' . POSTS_TABLE . ' p' . (($join_user_sql[$sort_key]) ? ', ' . USERS_TABLE . ' u': '') . "
	WHERE p.topic_id = $topic_id
		AND " . $phpbb_content_visibility->get_visibility_sql('post', $forum_id, 'p.') . "
		" . (($join_user_sql[$sort_key]) ? 'AND u.user_id = p.poster_id': '') . "
		$limit_posts_time
	ORDER BY $sql_sort_order";
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start);

$i = ($store_reverse) ? $sql_limit - 1 : 0;
while ($row = $db->sql_fetchrow($result))
{
	$post_list[$i] = (int) $row['post_id'];
	($store_reverse) ? $i-- : $i++;
}
$db->sql_freeresult($result);

if (!sizeof($post_list))
{
	if ($sort_days)
	{
		trigger_error('NO_POSTS_TIME_FRAME');
	}
	else
	{
		trigger_error('NO_TOPIC');
	}
}

// Holding maximum post time for marking topic read
// We need to grab it because we do reverse ordering sometimes
$max_post_time = 0;

$sql_ary = array(
	'SELECT'	=> 'u.*, z.friend, z.foe, p.*',

	'FROM'		=> array(
		USERS_TABLE		=> 'u',
		POSTS_TABLE		=> 'p',
	),

	'LEFT_JOIN'	=> array(
		array(
			'FROM'	=> array(ZEBRA_TABLE => 'z'),
			'ON'	=> 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id',
		),
	),

	'WHERE'		=> $db->sql_in_set('p.post_id', $post_list) . '
		AND u.user_id = p.poster_id',
);

/**
* Event to modify the SQL query before the post and poster data is retrieved
*
* @event core.viewtopic_get_post_data
* @var	int		forum_id	Forum ID
* @var	int		topic_id	Topic ID
* @var	array	topic_data	Array with topic data
* @var	array	post_list	Array with post_ids we are going to retrieve
* @var	int		sort_days	Display posts of previous x days
* @var	string	sort_key	Key the posts are sorted by
* @var	string	sort_dir	Direction the posts are sorted by
* @var	int		start		Pagination information
* @var	array	sql_ary		The SQL array to get the data of posts and posters
* @since 3.1.0-a1
* @change 3.1.0-a2 Added vars forum_id, topic_id, topic_data, post_list, sort_days, sort_key, sort_dir, start
*/
$vars = array(
	'forum_id',
	'topic_id',
	'topic_data',
	'post_list',
	'sort_days',
	'sort_key',
	'sort_dir',
	'start',
	'sql_ary',
);
extract($phpbb_dispatcher->trigger_event('core.viewtopic_get_post_data', compact($vars)));

$sql = $db->sql_build_query('SELECT', $sql_ary);
$result = $db->sql_query($sql);

$now = $user->create_datetime();
$now = phpbb_gmgetdate($now->getTimestamp() + $now->getOffset());

// Posts are stored in the $rowset array while $attach_list, $user_cache
// and the global bbcode_bitfield are built
while ($row = $db->sql_fetchrow($result))
{
	// Set max_post_time
	if ($row['post_time'] > $max_post_time)
	{
		$max_post_time = $row['post_time'];
	}

	$poster_id = (int) $row['poster_id'];

	// Does post have an attachment? If so, add it to the list
	if ($row['post_attachment'] && $config['allow_attachments'])
	{
		$attach_list[] = (int) $row['post_id'];

		if ($row['post_visibility'] == ITEM_UNAPPROVED || $row['post_visibility'] == ITEM_REAPPROVE)
		{
			$has_unapproved_attachments = true;
		}
		else if ($row['post_visibility'] == ITEM_APPROVED)
		{
			$has_approved_attachments = true;
		}
	}

	$rowset_data = array(
		'hide_post'			=> (($row['foe'] || $row['post_visibility'] == ITEM_DELETED) && ($view != 'show' || $post_id != $row['post_id'])) ? true : false,

		'post_id'			=> $row['post_id'],
		'post_time'			=> $row['post_time'],
		'user_id'			=> $row['user_id'],
		'username'			=> $row['username'],
		'user_colour'		=> $row['user_colour'],
		'topic_id'			=> $row['topic_id'],
		'forum_id'			=> $row['forum_id'],
		'post_subject'		=> $row['post_subject'],
		'post_edit_count'	=> $row['post_edit_count'],
		'post_edit_time'	=> $row['post_edit_time'],
		'post_edit_reason'	=> $row['post_edit_reason'],
		'post_edit_user'	=> $row['post_edit_user'],
		'post_edit_locked'	=> $row['post_edit_locked'],
		'post_delete_time'	=> $row['post_delete_time'],
		'post_delete_reason'=> $row['post_delete_reason'],
		'post_delete_user'	=> $row['post_delete_user'],

		// Make sure the icon actually exists
		'icon_id'			=> (isset($icons[$row['icon_id']]['img'], $icons[$row['icon_id']]['height'], $icons[$row['icon_id']]['width'])) ? $row['icon_id'] : 0,
		'post_attachment'	=> $row['post_attachment'],
		'post_visibility'	=> $row['post_visibility'],
		'post_reported'		=> $row['post_reported'],
		'post_username'		=> $row['post_username'],
		'post_text'			=> $row['post_text'],
		'bbcode_uid'		=> $row['bbcode_uid'],
		'bbcode_bitfield'	=> $row['bbcode_bitfield'],
		'enable_smilies'	=> $row['enable_smilies'],
		'enable_sig'		=> $row['enable_sig'],
		'friend'			=> $row['friend'],
		'foe'				=> $row['foe'],
	);

	/**
	* Modify the post rowset containing data to be displayed with posts
	*
	* @event core.viewtopic_post_rowset_data
	* @var	array	rowset_data	Array with the rowset data for this post
	* @var	array	row			Array with original user and post data
	* @since 3.1.0-a1
	*/
	$vars = array('rowset_data', 'row');
	extract($phpbb_dispatcher->trigger_event('core.viewtopic_post_rowset_data', compact($vars)));

	$rowset[$row['post_id']] = $rowset_data;

	// 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_data = array(
				'user_type'		=> USER_IGNORE,
				'joined'		=> '',
				'posts'			=> '',

				'sig'					=> '',
				'sig_bbcode_uid'		=> '',
				'sig_bbcode_bitfield'	=> '',

				'online'			=> false,
				'avatar'			=> ($user->optionget('viewavatars')) ? phpbb_get_user_avatar($row) : '',
				'rank_title'		=> '',
				'rank_image'		=> '',
				'rank_image_src'	=> '',
				'sig'				=> '',
				'pm'				=> '',
				'email'				=> '',
				'jabber'			=> '',
				'search'			=> '',
				'age'				=> '',

				'username'			=> $row['username'],
				'user_colour'		=> $row['user_colour'],
				'contact_user'		=> '',

				'warnings'			=> 0,
				'allow_pm'			=> 0,
			);

			/**
			* Modify the guest user's data displayed with the posts
			*
			* @event core.viewtopic_cache_guest_data
			* @var	array	user_cache_data	Array with the user's data
			* @var	int		poster_id		Poster's user id
			* @var	array	row				Array with original user and post data
			* @since 3.1.0-a1
			*/
			$vars = array('user_cache_data', 'poster_id', 'row');
			extract($phpbb_dispatcher->trigger_event('core.viewtopic_cache_guest_data', compact($vars)));

			$user_cache[$poster_id] = $user_cache_data;

			$user_rank_data = phpbb_get_user_rank($row, false);
			$user_cache[$poster_id]['rank_title'] = $user_rank_data['title'];
			$user_cache[$poster_id]['rank_image'] = $user_rank_data['img'];
			$user_cache[$poster_id]['rank_image_src'] = $user_rank_data['img_src'];
		}
		else
		{
			$user_sig = '';

			// We add the signature to every posters entry because enable_sig is post dependent
			if ($row['user_sig'] && $config['allow_sig'] && $user->optionget('viewsigs'))
			{
				$user_sig = $row['user_sig'];
			}

			$id_cache[] = $poster_id;

			$user_cache_data = array(
				'user_type'					=> $row['user_type'],
				'user_inactive_reason'		=> $row['user_inactive_reason'],

				'joined'		=> $user->format_date($row['user_regdate']),
				'posts'			=> $row['user_posts'],
				'warnings'		=> (isset($row['user_warnings'])) ? $row['user_warnings'] : 0,

				'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'] : '',

				'viewonline'	=> $row['user_allow_viewonline'],
				'allow_pm'		=> $row['user_allow_pm'],

				'avatar'		=> ($user->optionget('viewavatars')) ? phpbb_get_user_avatar($row) : '',
				'age'			=> '',

				'rank_title'		=> '',
				'rank_image'		=> '',
				'rank_image_src'	=> '',

				'username'			=> $row['username'],
				'user_colour'		=> $row['user_colour'],
				'contact_user' 		=> $user->lang('CONTACT_USER', get_username_string('username', $poster_id, $row['username'], $row['user_colour'], $row['username'])),

				'online'		=> false,
				'jabber'		=> ($config['jab_enable'] && $row['user_jabber'] && $auth->acl_get('u_sendim')) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=contact&action=jabber&u=$poster_id") : '',
				'search'		=> ($config['load_search'] && $auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx", "author_id=$poster_id&sr=posts") : '',

				'author_full'		=> get_username_string('full', $poster_id, $row['username'], $row['user_colour']),
				'author_colour'		=> get_username_string('colour', $poster_id, $row['username'], $row['user_colour']),
				'author_username'	=> get_username_string('username', $poster_id, $row['username'], $row['user_colour']),
				'author_profile'	=> get_username_string('profile', $poster_id, $row['username'], $row['user_colour']),
			);

			/**
			* Modify the users' data displayed with their posts
			*
			* @event core.viewtopic_cache_user_data
			* @var	array	user_cache_data	Array with the user's data
			* @var	int		poster_id		Poster's user id
			* @var	array	row				Array with original user and post data
			* @since 3.1.0-a1
			*/
			$vars = array('user_cache_data', 'poster_id', 'row');
			extract($phpbb_dispatcher->trigger_event('core.viewtopic_cache_user_data', compact($vars)));

			$user_cache[$poster_id] = $user_cache_data;

			$user_rank_data = phpbb_get_user_rank($row, $row['user_posts']);
			$user_cache[$poster_id]['rank_title'] = $user_rank_data['title'];
			$user_cache[$poster_id]['rank_image'] = $user_rank_data['img'];
			$user_cache[$poster_id]['rank_image_src'] = $user_rank_data['img_src'];

			if ((!empty($row['user_allow_viewemail']) && $auth->acl_get('u_sendemail')) || $auth->acl_get('a_email'))
			{
				$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']);
			}
			else
			{
				$user_cache[$poster_id]['email'] = '';
			}

			if ($config['allow_birthdays'] && !empty($row['user_birthday']))
			{
				list($bday_day, $bday_month, $bday_year) = array_map('intval', explode('-', $row['user_birthday']));

				if ($bday_year)
				{
					$diff = $now['mon'] - $bday_month;
					if ($diff == 0)
					{
						$diff = ($now['mday'] - $bday_day < 0) ? 1 : 0;
					}
					else
					{
						$diff = ($diff < 0) ? 1 : 0;
					}

					$user_cache[$poster_id]['age'] = (int) ($now['year'] - $bday_year - $diff);
				}
			}
		}
	}
}
$db->sql_freeresult($result);

// Load custom profile fields
if ($config['load_cpf_viewtopic'])
{
	$cp = $phpbb_container->get('profilefields.manager');

	// Grab all profile fields from users in id cache for later use - similar to the poster cache
	$profile_fields_tmp = $cp->grab_profile_fields_data($id_cache);

	// filter out fields not to be displayed on viewtopic. Yes, it's a hack, but this shouldn't break any MODs.
	$profile_fields_cache = array();
	foreach ($profile_fields_tmp as $profile_user_id => $profile_fields)
	{
		$profile_fields_cache[$profile_user_id] = array();
		foreach ($profile_fields as $used_ident => $profile_field)
		{
			if ($profile_field['data']['field_show_on_vt'])
			{
				$profile_fields_cache[$profile_user_id][$used_ident] = $profile_field;
			}
		}
	}
	unset($profile_fields_tmp);
}

// Generate online information for user
if ($config['load_onlinetrack'] && sizeof($id_cache))
{
	$sql = 'SELECT session_user_id, MAX(session_time) as online_time, MIN(session_viewonline) AS viewonline
		FROM ' . SESSIONS_TABLE . '
		WHERE ' . $db->sql_in_set('session_user_id', $id_cache) . '
		GROUP BY session_user_id';
	$result = $db->sql_query($sql);

	$update_time = $config['load_online_time'] * 60;
	while ($row = $db->sql_fetchrow($result))
	{
		$user_cache[$row['session_user_id']]['online'] = (time() - $update_time < $row['online_time'] && (($row['viewonline']) || $auth->acl_get('u_viewonline'))) ? true : false;
	}
	$db->sql_freeresult($result);
}
unset($id_cache);

// Pull attachment data
if (sizeof($attach_list))
{
	if ($auth->acl_get('u_download') && $auth->acl_get('f_download', $forum_id))
	{
		$sql = 'SELECT *
			FROM ' . ATTACHMENTS_TABLE . '
			WHERE ' . $db->sql_in_set('post_msg_id', $attach_list) . '
				AND in_message = 0
			ORDER BY filetime DESC, post_msg_id ASC';
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$attachments[$row['post_msg_id']][] = $row;
		}
		$db->sql_freeresult($result);

		// No attachments exist, but post table thinks they do so go ahead and reset post_attach flags
		if (!sizeof($attachments))
		{
			$sql = 'UPDATE ' . POSTS_TABLE . '
				SET post_attachment = 0
				WHERE ' . $db->sql_in_set('post_id', $attach_list);
			$db->sql_query($sql);

			// We need to update the topic indicator too if the complete topic is now without an attachment
			if (sizeof($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_msg_id as post_id
					FROM ' . ATTACHMENTS_TABLE . ' a, ' . POSTS_TABLE . " p
					WHERE p.topic_id = $topic_id
						AND p.post_visibility = " . ITEM_APPROVED . '
						AND p.topic_id = a.topic_id';
				$result = $db->sql_query_limit($sql, 1);
				$row = $db->sql_fetchrow($result);
				$db->sql_freeresult($result);

				if (!$row)
				{
					$sql = 'UPDATE ' . TOPICS_TABLE . "
						SET topic_attachment = 0
						WHERE topic_id = $topic_id";
					$db->sql_query($sql);
				}
			}
			else
			{
				$sql = 'UPDATE ' . TOPICS_TABLE . "
					SET topic_attachment = 0
					WHERE topic_id = $topic_id";
				$db->sql_query($sql);
			}
		}
		else if ($has_approved_attachments && !$topic_data['topic_attachment'])
		{
			// Topic has approved attachments but its flag is wrong
			$sql = 'UPDATE ' . TOPICS_TABLE . "
				SET topic_attachment = 1
				WHERE topic_id = $topic_id";
			$db->sql_query($sql);

			$topic_data['topic_attachment'] = 1;
		}
		else if ($has_unapproved_attachments && !$topic_data['topic_attachment'])
		{
			// Topic has only unapproved attachments but we have the right to see and download them
			$topic_data['topic_attachment'] = 1;
		}
	}
	else
	{
		$display_notice = true;
	}
}

// Get the list of users who can receive private messages
$can_receive_pm_list = $auth->acl_get_list(array_keys($user_cache), 'u_readpm');
$can_receive_pm_list = (empty($can_receive_pm_list) || !isset($can_receive_pm_list[0]['u_readpm'])) ? array() : $can_receive_pm_list[0]['u_readpm'];

// Get the list of permanently banned users
$permanently_banned_users = phpbb_get_banned_user_ids(array_keys($user_cache), false);

$i_total = sizeof($rowset) - 1;
$prev_post_id = '';

$template->assign_vars(array(
	'S_HAS_ATTACHMENTS' => $topic_data['topic_attachment'],
	'S_NUM_POSTS' => sizeof($post_list))
);

/**
* Event to modify the post, poster and attachment data before assigning the posts
*
* @event core.viewtopic_modify_post_data
* @var	int		forum_id	Forum ID
* @var	int		topic_id	Topic ID
* @var	array	topic_data	Array with topic data
* @var	array	post_list	Array with post_ids we are going to display
* @var	array	rowset		Array with post_id => post data
* @var	array	user_cache	Array with prepared user data
* @var	int		start		Pagination information
* @var	int		sort_days	Display posts of previous x days
* @var	string	sort_key	Key the posts are sorted by
* @var	string	sort_dir	Direction the posts are sorted by
* @var	bool	display_notice				Shall we display a notice instead of attachments
* @var	bool	has_approved_attachments	Does the topic have approved attachments
* @var	array	attachments					List of attachments post_id => array of attachments
* @var	array	permanently_banned_users	List of permanently banned users
* @var	array	can_receive_pm_list			Array with posters that can receive pms
* @since 3.1.0-RC3
*/
$vars = array(
	'forum_id',
	'topic_id',
	'topic_data',
	'post_list',
	'rowset',
	'user_cache',
	'sort_days',
	'sort_key',
	'sort_dir',
	'start',
	'permanently_banned_users',
	'can_receive_pm_list',
	'display_notice',
	'has_approved_attachments',
	'attachments',
);
extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_post_data', compact($vars)));

// Output the posts
$first_unread = $post_unread = false;
for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
{
	// A non-existing rowset only happens if there was no user present for the entered poster_id
	// This could be a broken posts table.
	if (!isset($rowset[$post_list[$i]]))
	{
		continue;
	}

	$row = $rowset[$post_list[$i]];
	$poster_id = $row['user_id'];

	// End signature parsing, only if needed
	if ($user_cache[$poster_id]['sig'] && $row['enable_sig'] && empty($user_cache[$poster_id]['sig_parsed']))
	{
		$parse_flags = ($user_cache[$poster_id]['sig_bbcode_bitfield'] ? OPTION_FLAG_BBCODE : 0) | OPTION_FLAG_SMILIES;
		$user_cache[$poster_id]['sig'] = generate_text_for_display($user_cache[$poster_id]['sig'], $user_cache[$poster_id]['sig_bbcode_uid'], $user_cache[$poster_id]['sig_bbcode_bitfield'],  $parse_flags, true);
	}

	// Parse the message and subject
	$parse_flags = ($row['bbcode_bitfield'] ? OPTION_FLAG_BBCODE : 0) | OPTION_FLAG_SMILIES;
	$message = generate_text_for_display($row['post_text'], $row['bbcode_uid'], $row['bbcode_bitfield'], $parse_flags, true);

	if (!empty($attachments[$row['post_id']]))
	{
		parse_attachments($forum_id, $message, $attachments[$row['post_id']], $update_count);
	}

	// Replace naughty words such as farty pants
	$row['post_subject'] = censor_text($row['post_subject']);

	// Highlight active words (primarily for search)
	if ($highlight_match)
	{
		$message = preg_replace('#(?!<.*)(?<!\w)(' . $highlight_match . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">\1</span>', $message);
		$row['post_subject'] = preg_replace('#(?!<.*)(?<!\w)(' . $highlight_match . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">\1</span>', $row['post_subject']);
	}

	// Editing information
	if (($row['post_edit_count'] && $config['display_last_edited']) || $row['post_edit_reason'])
	{
		// Get usernames for all following posts if not already stored
		if (!sizeof($post_edit_list) && ($row['post_edit_reason'] || ($row['post_edit_user'] && !isset($user_cache[$row['post_edit_user']]))))
		{
			// Remove all post_ids already parsed (we do not have to check them)
			$post_storage_list = (!$store_reverse) ? array_slice($post_list, $i) : array_slice(array_reverse($post_list), $i);

			$sql = 'SELECT DISTINCT u.user_id, u.username, u.user_colour
				FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u
				WHERE ' . $db->sql_in_set('p.post_id', $post_storage_list) . '
					AND p.post_edit_count <> 0
					AND p.post_edit_user <> 0
					AND p.post_edit_user = u.user_id';
			$result2 = $db->sql_query($sql);
			while ($user_edit_row = $db->sql_fetchrow($result2))
			{
				$post_edit_list[$user_edit_row['user_id']] = $user_edit_row;
			}
			$db->sql_freeresult($result2);

			unset($post_storage_list);
		}

		if ($row['post_edit_reason'])
		{
			// User having edited the post also being the post author?
			if (!$row['post_edit_user'] || $row['post_edit_user'] == $poster_id)
			{
				$display_username = get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']);
			}
			else
			{
				$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']);
			}

			$l_edited_by = $user->lang('EDITED_TIMES_TOTAL', (int) $row['post_edit_count'], $display_username, $user->format_date($row['post_edit_time'], false, true));
		}
		else
		{
			if ($row['post_edit_user'] && !isset($user_cache[$row['post_edit_user']]))
			{
				$user_cache[$row['post_edit_user']] = $post_edit_list[$row['post_edit_user']];
			}

			// User having edited the post also being the post author?
			if (!$row['post_edit_user'] || $row['post_edit_user'] == $poster_id)
			{
				$display_username = get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']);
			}
			else
			{
				$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']);
			}

			$l_edited_by = $user->lang('EDITED_TIMES_TOTAL', (int) $row['post_edit_count'], $display_username, $user->format_date($row['post_edit_time'], false, true));
		}
	}
	else
	{
		$l_edited_by = '';
	}

	// Deleting information
	if ($row['post_visibility'] == ITEM_DELETED && $row['post_delete_user'])
	{
		// Get usernames for all following posts if not already stored
		if (!sizeof($post_delete_list) && ($row['post_delete_reason'] || ($row['post_delete_user'] && !isset($user_cache[$row['post_delete_user']]))))
		{
			// Remove all post_ids already parsed (we do not have to check them)
			$post_storage_list = (!$store_reverse) ? array_slice($post_list, $i) : array_slice(array_reverse($post_list), $i);

			$sql = 'SELECT DISTINCT u.user_id, u.username, u.user_colour
				FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u
				WHERE ' . $db->sql_in_set('p.post_id', $post_storage_list) . '
					AND p.post_delete_user <> 0
					AND p.post_delete_user = u.user_id';
			$result2 = $db->sql_query($sql);
			while ($user_delete_row = $db->sql_fetchrow($result2))
			{
				$post_delete_list[$user_delete_row['user_id']] = $user_delete_row;
			}
			$db->sql_freeresult($result2);

			unset($post_storage_list);
		}

		if ($row['post_delete_user'] && !isset($user_cache[$row['post_delete_user']]))
		{
			$user_cache[$row['post_delete_user']] = $post_delete_list[$row['post_delete_user']];
		}

		$display_postername = get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']);

		// User having deleted the post also being the post author?
		if (!$row['post_delete_user'] || $row['post_delete_user'] == $poster_id)
		{
			$display_username = $display_postername;
		}
		else
		{
			$display_username = get_username_string('full', $row['post_delete_user'], $user_cache[$row['post_delete_user']]['username'], $user_cache[$row['post_delete_user']]['user_colour']);
		}

		if ($row['post_delete_reason'])
		{
			$l_deleted_message = $user->lang('POST_DELETED_BY_REASON', $display_postername, $display_username, $user->format_date($row['post_delete_time'], false, true), $row['post_delete_reason']);
		}
		else
		{
			$l_deleted_message = $user->lang('POST_DELETED_BY', $display_postername, $display_username, $user->format_date($row['post_delete_time'], false, true));
		}
		$l_deleted_by = $user->lang('DELETED_INFORMATION', $display_username, $user->format_date($row['post_delete_time'], false, true));
	}
	else
	{
		$l_deleted_by = $l_deleted_message = '';
	}

	// Bump information
	if ($topic_data['topic_bumped'] && $row['post_id'] == $topic_data['topic_last_post_id'] && isset($user_cache[$topic_data['topic_bumper']]) )
	{
		// It is safe to grab the username from the user cache array, we are at the last
		// post and only the topic poster and last poster are allowed to bump.
		// Admins and mods are bound to the above rules too...
		$l_bumped_by = sprintf($user->lang['BUMPED_BY'], $user_cache[$topic_data['topic_bumper']]['username'], $user->format_date($topic_data['topic_last_post_time'], false, true));
	}
	else
	{
		$l_bumped_by = '';
	}

	$cp_row = array();

	//
	if ($config['load_cpf_viewtopic'])
	{
		$cp_row = (isset($profile_fields_cache[$poster_id])) ? $cp->generate_profile_fields_template_data($profile_fields_cache[$poster_id]) : array();
	}

	$post_unread = (isset($topic_tracking_info[$topic_id]) && $row['post_time'] > $topic_tracking_info[$topic_id]) ? true : false;

	$s_first_unread = false;
	if (!$first_unread && $post_unread)
	{
		$s_first_unread = $first_unread = true;
	}

	$force_edit_allowed = $force_delete_allowed = false;

	$s_cannot_edit = !$auth->acl_get('f_edit', $forum_id) || $user->data['user_id'] != $poster_id;
	$s_cannot_edit_time = $config['edit_time'] && $row['post_time'] <= time() - ($config['edit_time'] * 60);
	$s_cannot_edit_locked = $topic_data['topic_status'] == ITEM_LOCKED || $row['post_edit_locked'];

	$s_cannot_delete = $user->data['user_id'] != $poster_id || (
			!$auth->acl_get('f_delete', $forum_id) &&
			(!$auth->acl_get('f_softdelete', $forum_id) || $row['post_visibility'] == ITEM_DELETED)
	);
	$s_cannot_delete_lastpost = $topic_data['topic_last_post_id'] != $row['post_id'];
	$s_cannot_delete_time = $config['delete_time'] && $row['post_time'] <= time() - ($config['delete_time'] * 60);
	// we do not want to allow removal of the last post if a moderator locked it!
	$s_cannot_delete_locked = $topic_data['topic_status'] == ITEM_LOCKED || $row['post_edit_locked'];

	/**
	* This event allows you to modify the conditions for the "can edit post" and "can delete post" checks
	*
	* @event core.viewtopic_modify_post_action_conditions
	* @var	array	row			Array with post data
	* @var	array	topic_data	Array with topic data
	* @var	bool	force_edit_allowed		Allow the user to edit the post (all permissions and conditions are ignored)
	* @var	bool	s_cannot_edit			User can not edit the post because it's not his
	* @var	bool	s_cannot_edit_locked	User can not edit the post because it's locked
	* @var	bool	s_cannot_edit_time		User can not edit the post because edit_time has passed
	* @var	bool	force_delete_allowed		Allow the user to delete the post (all permissions and conditions are ignored)
	* @var	bool	s_cannot_delete				User can not delete the post because it's not his
	* @var	bool	s_cannot_delete_lastpost	User can not delete the post because it's not the last post of the topic
	* @var	bool	s_cannot_delete_locked		User can not delete the post because it's locked
	* @var	bool	s_cannot_delete_time		User can not delete the post because edit_time has passed
	* @since 3.1.0-b4
	*/
	$vars = array(
		'row',
		'topic_data',
		'force_edit_allowed',
		's_cannot_edit',
		's_cannot_edit_locked',
		's_cannot_edit_time',
		'force_delete_allowed',
		's_cannot_delete',
		's_cannot_delete_lastpost',
		's_cannot_delete_locked',
		's_cannot_delete_time',
	);
	extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_post_action_conditions', compact($vars)));

	$edit_allowed = $force_edit_allowed || ($user->data['is_registered'] && ($auth->acl_get('m_edit', $forum_id) || (
		!$s_cannot_edit &&
		!$s_cannot_edit_time &&
		!$s_cannot_edit_locked
	)));

	$quote_allowed = $auth->acl_get('m_edit', $forum_id) || ($topic_data['topic_status'] != ITEM_LOCKED &&
		($user->data['user_id'] == ANONYMOUS || $auth->acl_get('f_reply', $forum_id))
	);

	$delete_allowed = $force_delete_allowed || ($user->data['is_registered'] && (
		($auth->acl_get('m_delete', $forum_id) || ($auth->acl_get('m_softdelete', $forum_id) && $row['post_visibility'] != ITEM_DELETED)) ||
		(!$s_cannot_delete && !$s_cannot_delete_lastpost && !$s_cannot_delete_time && !$s_cannot_delete_locked)
	));

	// Can this user receive a Private Message?
	$can_receive_pm = (
		// They must be a "normal" user
		$user_cache[$poster_id]['user_type'] != USER_IGNORE &&

		// They must not be deactivated by the administrator
		($user_cache[$poster_id]['user_type'] != USER_INACTIVE || $user_cache[$poster_id]['user_inactive_reason'] != INACTIVE_MANUAL) &&

		// They must be able to read PMs
		in_array($poster_id, $can_receive_pm_list) &&

		// They must not be permanently banned
		!in_array($poster_id, $permanently_banned_users) &&

		// They must allow users to contact via PM
		(($auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_')) || $user_cache[$poster_id]['allow_pm'])
	);

	$u_pm = '';

	if ($config['allow_privmsg'] && $auth->acl_get('u_sendpm') && $can_receive_pm)
	{
		$u_pm = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=compose&action=quotepost&p=' . $row['post_id']);
	}

	//
	$post_row = array(
		'POST_AUTHOR_FULL'		=> ($poster_id != ANONYMOUS) ? $user_cache[$poster_id]['author_full'] : get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
		'POST_AUTHOR_COLOUR'	=> ($poster_id != ANONYMOUS) ? $user_cache[$poster_id]['author_colour'] : get_username_string('colour', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
		'POST_AUTHOR'			=> ($poster_id != ANONYMOUS) ? $user_cache[$poster_id]['author_username'] : get_username_string('username', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
		'U_POST_AUTHOR'			=> ($poster_id != ANONYMOUS) ? $user_cache[$poster_id]['author_profile'] : get_username_string('profile', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),

		'RANK_TITLE'		=> $user_cache[$poster_id]['rank_title'],
		'RANK_IMG'			=> $user_cache[$poster_id]['rank_image'],
		'RANK_IMG_SRC'		=> $user_cache[$poster_id]['rank_image_src'],
		'POSTER_JOINED'		=> $user_cache[$poster_id]['joined'],
		'POSTER_POSTS'		=> $user_cache[$poster_id]['posts'],
		'POSTER_AVATAR'		=> $user_cache[$poster_id]['avatar'],
		'POSTER_WARNINGS'	=> $auth->acl_get('m_warn') ? $user_cache[$poster_id]['warnings'] : '',
		'POSTER_AGE'		=> $user_cache[$poster_id]['age'],
		'CONTACT_USER'		=> $user_cache[$poster_id]['contact_user'],

		'POST_DATE'			=> $user->format_date($row['post_time'], false, ($view == 'print') ? true : false),
		'POST_SUBJECT'		=> $row['post_subject'],
		'MESSAGE'			=> $message,
		'SIGNATURE'			=> ($row['enable_sig']) ? $user_cache[$poster_id]['sig'] : '',
		'EDITED_MESSAGE'	=> $l_edited_by,
		'EDIT_REASON'		=> $row['post_edit_reason'],
		'DELETED_MESSAGE'	=> $l_deleted_by,
		'DELETE_REASON'		=> $row['post_delete_reason'],
		'BUMPED_MESSAGE'	=> $l_bumped_by,

		'MINI_POST_IMG'			=> ($post_unread) ? $user->img('icon_post_target_unread', 'UNREAD_POST') : $user->img('icon_post_target', 'POST'),
		'POST_ICON_IMG'			=> ($topic_data['enable_icons'] && !empty($row['icon_id'])) ? $icons[$row['icon_id']]['img'] : '',
		'POST_ICON_IMG_WIDTH'	=> ($topic_data['enable_icons'] && !empty($row['icon_id'])) ? $icons[$row['icon_id']]['width'] : '',
		'POST_ICON_IMG_HEIGHT'	=> ($topic_data['enable_icons'] && !empty($row['icon_id'])) ? $icons[$row['icon_id']]['height'] : '',
		'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')),
		'S_ONLINE'				=> ($poster_id == ANONYMOUS || !$config['load_onlinetrack']) ? false : (($user_cache[$poster_id]['online']) ? true : false),

		'U_EDIT'			=> ($edit_allowed) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=edit&f=$forum_id&p={$row['post_id']}") : '',
		'U_QUOTE'			=> ($quote_allowed) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=quote&f=$forum_id&p={$row['post_id']}") : '',
		'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) : '',
		'U_DELETE'			=> ($delete_allowed) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=delete&f=$forum_id&p={$row['post_id']}") : '',

		'U_SEARCH'		=> $user_cache[$poster_id]['search'],
		'U_PM'			=> $u_pm,
		'U_EMAIL'		=> $user_cache[$poster_id]['email'],
		'U_JABBER'		=> $user_cache[$poster_id]['jabber'],

		'U_APPROVE_ACTION'		=> append_sid("{$phpbb_root_path}mcp.$phpEx", "i=queue&p={$row['post_id']}&f=$forum_id&redirect=" . urlencode(str_replace('&', '&', $viewtopic_url . '&p=' . $row['post_id'] . '#p' . $row['post_id']))),
		'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_MCP_RESTORE'		=> ($auth->acl_get('m_approve', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue&mode=' . (($topic_data['topic_visibility'] != ITEM_DELETED) ? 'deleted_posts' : 'deleted_topics') . '&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']) . '#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) : '',
		'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) : '',

		'POST_ID'			=> $row['post_id'],
		'POST_NUMBER'		=> $i + $start + 1,
		'POSTER_ID'			=> $poster_id,

		'S_HAS_ATTACHMENTS'	=> (!empty($attachments[$row['post_id']])) ? true : false,
		'S_MULTIPLE_ATTACHMENTS'	=> !empty($attachments[$row['post_id']]) && sizeof($attachments[$row['post_id']]) > 1,
		'S_POST_UNAPPROVED'	=> ($row['post_visibility'] == ITEM_UNAPPROVED || $row['post_visibility'] == ITEM_REAPPROVE) ? true : false,
		'S_POST_DELETED'	=> ($row['post_visibility'] == ITEM_DELETED) ? true : false,
		'L_POST_DELETED_MESSAGE'	=> $l_deleted_message,
		'S_POST_REPORTED'	=> ($row['post_reported'] && $auth->acl_get('m_report', $forum_id)) ? true : false,
		'S_DISPLAY_NOTICE'	=> $display_notice && $row['post_attachment'],
		'S_FRIEND'			=> ($row['friend']) ? true : false,
		'S_UNREAD_POST'		=> $post_unread,
		'S_FIRST_UNREAD'	=> $s_first_unread,
		'S_CUSTOM_FIELDS'	=> (isset($cp_row['row']) && sizeof($cp_row['row'])) ? true : false,
		'S_TOPIC_POSTER'	=> ($topic_data['topic_poster'] == $poster_id) ? true : false,

		'S_IGNORE_POST'		=> ($row['foe']) ? true : false,
		'L_IGNORE_POST'		=> ($row['foe']) ? sprintf($user->lang['POST_BY_FOE'], get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username'])) : '',
		'S_POST_HIDDEN'		=> $row['hide_post'],
		'L_POST_DISPLAY'	=> ($row['hide_post']) ? $user->lang('POST_DISPLAY', '<a class="display_post" data-post-id="' . $row['post_id'] . '" href="' . $viewtopic_url . "&p={$row['post_id']}&view=show#p{$row['post_id']}" . '">', '</a>') : '',
	);

	$user_poster_data = $user_cache[$poster_id];

	$current_row_number = $i;

	/**
	* Modify the posts template block
	*
	* @event core.viewtopic_modify_post_row
	* @var	int		start				Start item of this page
	* @var	int		current_row_number	Number of the post on this page
	* @var	int		end					Number of posts on this page
	* @var	int		total_posts			Total posts count
	* @var	int		poster_id			Post author id
	* @var	array	row					Array with original post and user data
	* @var	array	cp_row				Custom profile field data of the poster
	* @var	array	attachments			List of attachments
	* @var	array	user_poster_data	Poster's data from user cache
	* @var	array	post_row			Template block array of the post
	* @var	array	topic_data			Array with topic data
	* @since 3.1.0-a1
	* @change 3.1.0-a3 Added vars start, current_row_number, end, attachments
	* @change 3.1.0-b3 Added topic_data array, total_posts
	* @change 3.1.0-RC3 Added poster_id
	*/
	$vars = array(
		'start',
		'current_row_number',
		'end',
		'total_posts',
		'poster_id',
		'row',
		'cp_row',
		'attachments',
		'user_poster_data',
		'post_row',
		'topic_data',
	);
	extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_post_row', compact($vars)));

	$i = $current_row_number;

	if (isset($cp_row['row']) && sizeof($cp_row['row']))
	{
		$post_row = array_merge($post_row, $cp_row['row']);
	}

	// Dump vars into template
	$template->assign_block_vars('postrow', $post_row);

	$contact_fields = array(
		array(
			'ID'		=> 'pm',
			'NAME' 		=> $user->lang['SEND_PRIVATE_MESSAGE'],
			'U_CONTACT'	=> $u_pm,
		),
		array(
			'ID'		=> 'email',
			'NAME'		=> $user->lang['SEND_EMAIL'],
			'U_CONTACT'	=> $user_cache[$poster_id]['email'],
		),
		array(
			'ID'		=> 'jabber',
			'NAME'		=> $user->lang['JABBER'],
			'U_CONTACT'	=> $user_cache[$poster_id]['jabber'],
		),
	);

	foreach ($contact_fields as $field)
	{
		if ($field['U_CONTACT'])
		{
			$template->assign_block_vars('postrow.contact', $field);
		}
	}

	if (!empty($cp_row['blockrow']))
	{
		foreach ($cp_row['blockrow'] as $field_data)
		{
			$template->assign_block_vars('postrow.custom_fields', $field_data);

			if ($field_data['S_PROFILE_CONTACT'])
			{
				$template->assign_block_vars('postrow.contact', array(
					'ID'		=> $field_data['PROFILE_FIELD_IDENT'],
					'NAME'		=> $field_data['PROFILE_FIELD_NAME'],
					'U_CONTACT'	=> $field_data['PROFILE_FIELD_CONTACT'],
				));
			}
		}
	}

	// Display not already displayed Attachments for this post, we already parsed them. ;)
	if (!empty($attachments[$row['post_id']]))
	{
		foreach ($attachments[$row['post_id']] as $attachment)
		{
			$template->assign_block_vars('postrow.attachment', array(
				'DISPLAY_ATTACHMENT'	=> $attachment)
			);
		}
	}

	$current_row_number = $i;

	/**
	* Event after the post data has been assigned to the template
	*
	* @event core.viewtopic_post_row_after
	* @var	int		start				Start item of this page
	* @var	int		current_row_number	Number of the post on this page
	* @var	int		end					Number of posts on this page
	* @var	int		total_posts			Total posts count
	* @var	array	row					Array with original post and user data
	* @var	array	cp_row				Custom profile field data of the poster
	* @var	array	attachments			List of attachments
	* @var	array	user_poster_data	Poster's data from user cache
	* @var	array	post_row			Template block array of the post
	* @var	array	topic_data			Array with topic data
	* @since 3.1.0-a3
	* @change 3.1.0-b3 Added topic_data array, total_posts
	*/
	$vars = array(
		'start',
		'current_row_number',
		'end',
		'total_posts',
		'row',
		'cp_row',
		'attachments',
		'user_poster_data',
		'post_row',
		'topic_data',
	);
	extract($phpbb_dispatcher->trigger_event('core.viewtopic_post_row_after', compact($vars)));

	$i = $current_row_number;

	$prev_post_id = $row['post_id'];

	unset($rowset[$post_list[$i]]);
	unset($attachments[$row['post_id']]);
}
unset($rowset, $user_cache);

// Update topic view and if necessary attachment view counters ... but only for humans and if this is the first 'page view'
if (isset($user->data['session_page']) && !$user->data['is_bot'] && (strpos($user->data['session_page'], '&t=' . $topic_id) === false || isset($user->data['session_created'])))
{
	$sql = 'UPDATE ' . TOPICS_TABLE . '
		SET topic_views = topic_views + 1, topic_last_view_time = ' . time() . "
		WHERE topic_id = $topic_id";
	$db->sql_query($sql);

	// Update the attachment download counts
	if (sizeof($update_count))
	{
		$sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
			SET download_count = download_count + 1
			WHERE ' . $db->sql_in_set('attach_id', array_unique($update_count));
		$db->sql_query($sql);
	}
}

// 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', $forum_id, $topic_id, $max_post_time);

	// Update forum info
	$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
{
	$all_marked_read = true;
}

// If there are absolutely no more unread posts in this forum
// and unread posts shown, we can safely show the #unread link
if ($all_marked_read)
{
	if ($post_unread)
	{
		$template->assign_vars(array(
			'U_VIEW_UNREAD_POST'	=> '#unread',
		));
	}
	else if (isset($topic_tracking_info[$topic_id]) && $topic_data['topic_last_post_time'] > $topic_tracking_info[$topic_id])
	{
		$template->assign_vars(array(
			'U_VIEW_UNREAD_POST'	=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=unread") . '#unread',
		));
	}
}
else if (!$all_marked_read)
{
	$last_page = ((floor($start / $config['posts_per_page']) + 1) == max(ceil($total_posts / $config['posts_per_page']), 1)) ? true : false;

	// What can happen is that we are at the last displayed page. If so, we also display the #unread link based in $post_unread
	if ($last_page && $post_unread)
	{
		$template->assign_vars(array(
			'U_VIEW_UNREAD_POST'	=> '#unread',
		));
	}
	else if (!$last_page)
	{
		$template->assign_vars(array(
			'U_VIEW_UNREAD_POST'	=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&view=unread") . '#unread',
		));
	}
}

// let's set up quick_reply
$s_quick_reply = false;
if ($user->data['is_registered'] && $config['allow_quick_reply'] && ($topic_data['forum_flags'] & FORUM_FLAG_QUICK_REPLY) && $auth->acl_get('f_reply', $forum_id))
{
	// Quick reply enabled forum
	$s_quick_reply = (($topic_data['forum_status'] == ITEM_UNLOCKED && $topic_data['topic_status'] == ITEM_UNLOCKED) || $auth->acl_get('m_edit', $forum_id)) ? true : false;
}

if ($s_can_vote || $s_quick_reply)
{
	add_form_key('posting');

	if ($s_quick_reply)
	{
		$s_attach_sig	= $config['allow_sig'] && $user->optionget('attachsig') && $auth->acl_get('f_sigs', $forum_id) && $auth->acl_get('u_sig');
		$s_smilies		= $config['allow_smilies'] && $user->optionget('smilies') && $auth->acl_get('f_smilies', $forum_id);
		$s_bbcode		= $config['allow_bbcode'] && $user->optionget('bbcode') && $auth->acl_get('f_bbcode', $forum_id);
		$s_notify		= $config['allow_topic_notify'] && ($user->data['user_notify'] || $s_watching_topic['is_watching']);

		$qr_hidden_fields = array(
			'topic_cur_post_id'		=> (int) $topic_data['topic_last_post_id'],
			'lastclick'				=> (int) time(),
			'topic_id'				=> (int) $topic_data['topic_id'],
			'forum_id'				=> (int) $forum_id,
		);

		// Originally we use checkboxes and check with isset(), so we only provide them if they would be checked
		(!$s_bbcode)					? $qr_hidden_fields['disable_bbcode'] = 1		: true;
		(!$s_smilies)					? $qr_hidden_fields['disable_smilies'] = 1		: true;
		(!$config['allow_post_links'])	? $qr_hidden_fields['disable_magic_url'] = 1	: true;
		($s_attach_sig)					? $qr_hidden_fields['attach_sig'] = 1			: true;
		($s_notify)						? $qr_hidden_fields['notify'] = 1				: true;
		($topic_data['topic_status'] == ITEM_LOCKED) ? $qr_hidden_fields['lock_topic'] = 1 : true;

		$template->assign_vars(array(
			'S_QUICK_REPLY'			=> true,
			'U_QR_ACTION'			=> append_sid("{$phpbb_root_path}posting.$phpEx", "mode=reply&f=$forum_id&t=$topic_id"),
			'QR_HIDDEN_FIELDS'		=> build_hidden_fields($qr_hidden_fields),
			'SUBJECT'				=> 'Re: ' . censor_text($topic_data['topic_title']),
		));
	}
}
// now I have the urge to wash my hands :(


// 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 (!request_var('f', 0))
{
	$request->overwrite('f', $forum_id);
}

// We need to do the same with the topic_id. See #53025.
if (!request_var('t', 0) && !empty($topic_id))
{
	$request->overwrite('t', $topic_id);
}

$page_title = $topic_data['topic_title'] . ($start ? ' - ' . sprintf($user->lang['PAGE_TITLE_NUMBER'], $pagination->get_on_page($config['posts_per_page'], $start)) : '');

/**
* You can use this event to modify the page title of the viewtopic page
*
* @event core.viewtopic_modify_page_title
* @var	string	page_title		Title of the viewtopic page
* @var	array	topic_data		Array with topic data
* @var	int		forum_id		Forum ID of the topic
* @var	int		start			Start offset used to calculate the page
* @var	array	post_list		Array with post_ids we are going to display
* @since 3.1.0-a1
* @change 3.1.0-RC4 Added post_list var
*/
$vars = array('page_title', 'topic_data', 'forum_id', 'start', 'post_list');
extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_page_title', compact($vars)));

// Output the page
page_header($page_title, true, $forum_id);

$template->set_filenames(array(
	'body' => ($view == 'print') ? 'viewtopic_print.html' : 'viewtopic_body.html')
);
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"), $forum_id);

page_footer();
styles/prosilver/viewtopic_body.html

Código: Selecionar todos

<!-- INCLUDE overall_header.html -->

<h2 class="topic-title"><!-- EVENT viewtopic_topic_title_prepend --><a href="{U_VIEW_TOPIC}">{TOPIC_TITLE}</a><!-- EVENT viewtopic_topic_title_append --></h2>
<!-- NOTE: remove the style="display: none" when you want to have the forum description on the topic body -->
<!-- IF FORUM_DESC --><div style="display: none !important;">{FORUM_DESC}<br /></div><!-- ENDIF -->

<!-- IF MODERATORS -->
<p>
	<strong><!-- IF S_SINGLE_MODERATOR -->{L_MODERATOR}<!-- ELSE -->{L_MODERATORS}<!-- ENDIF -->{L_COLON}</strong> {MODERATORS}
</p>
<!-- ENDIF -->

<!-- IF S_FORUM_RULES -->
	<div class="rules<!-- IF U_FORUM_RULES --> rules-link<!-- ENDIF -->">
		<div class="inner">

		<!-- IF U_FORUM_RULES -->
			<a href="{U_FORUM_RULES}">{L_FORUM_RULES}</a>
		<!-- ELSE -->
			<strong>{L_FORUM_RULES}</strong><br />
			{FORUM_RULES}
		<!-- ENDIF -->

		</div>
	</div>
<!-- ENDIF -->

<div class="action-bar top">

	<div class="buttons">
		<!-- EVENT viewtopic_buttons_top_before -->

	<!-- IF not S_IS_BOT and S_DISPLAY_REPLY_INFO -->
		<a href="{U_POST_REPLY_TOPIC}" class="button icon-button <!-- IF S_IS_LOCKED -->locked-icon<!-- ELSE -->reply-icon<!-- ENDIF -->" title="<!-- IF S_IS_LOCKED -->{L_TOPIC_LOCKED}<!-- ELSE -->{L_POST_REPLY}<!-- ENDIF -->">
			<!-- IF S_IS_LOCKED -->{L_BUTTON_TOPIC_LOCKED}<!-- ELSE -->{L_BUTTON_POST_REPLY}<!-- ENDIF -->
		</a>
	<!-- ENDIF -->

		<!-- EVENT viewtopic_buttons_top_after -->
	</div>

	<!-- INCLUDE viewtopic_topic_tools.html -->

	<!-- IF S_DISPLAY_SEARCHBOX -->
		<div class="search-box" role="search">
			<form method="get" id="topic-search" action="{S_SEARCHBOX_ACTION}">
			<fieldset>
				<input class="inputbox search tiny"  type="search" name="keywords" id="search_keywords" size="20" placeholder="{L_SEARCH_TOPIC}" />
				<button class="button icon-button search-icon" type="submit" title="{L_SEARCH}">{L_SEARCH}</button>
				<a href="{U_SEARCH}" class="button icon-button search-adv-icon" title="{L_SEARCH_ADV}">{L_SEARCH_ADV}</a>
				{S_SEARCH_LOCAL_HIDDEN_FIELDS}
			</fieldset>
			</form>
		</div>
	<!-- ENDIF -->

	<!-- IF .pagination or TOTAL_POSTS -->
		<div class="pagination">
			<!-- IF U_VIEW_UNREAD_POST and not S_IS_BOT --><a href="{U_VIEW_UNREAD_POST}" class="mark">{L_VIEW_UNREAD_POST}</a> &bull; <!-- ENDIF -->{TOTAL_POSTS}
			<!-- IF .pagination -->
				<!-- INCLUDE pagination.html -->
			<!-- ELSE -->
				&bull; {PAGE_NUMBER}
			<!-- ENDIF -->
		</div>
	<!-- ENDIF -->
	<!-- EVENT viewtopic_body_pagination_top_after -->
</div>

<!-- IF S_HAS_POLL -->
	<form method="post" action="{S_POLL_ACTION}" data-ajax="vote_poll" class="topic_poll">

	<div class="panel">
		<div class="inner">

		<div class="content">
			<h2 class="poll-title"><!-- EVENT viewtopic_body_poll_question_prepend -->{POLL_QUESTION}<!-- EVENT viewtopic_body_poll_question_append --></h2>
			<p class="author">{L_POLL_LENGTH}<!-- IF S_CAN_VOTE and L_POLL_LENGTH --><br /><!-- ENDIF --><!-- IF S_CAN_VOTE --><span class="poll_max_votes">{L_MAX_VOTES}</span><!-- ENDIF --></p>

			<fieldset class="polls">
			<!-- BEGIN poll_option -->
				<!-- EVENT viewtopic_body_poll_option_before -->
				<dl class="<!-- IF poll_option.POLL_OPTION_VOTED -->voted<!-- ENDIF --><!-- IF poll_option.POLL_OPTION_MOST_VOTES --> most-votes<!-- ENDIF -->"<!-- IF poll_option.POLL_OPTION_VOTED --> title="{L_POLL_VOTED_OPTION}"<!-- ENDIF --> data-poll-option-id="{poll_option.POLL_OPTION_ID}">
					<dt><!-- IF S_CAN_VOTE --><label for="vote_{poll_option.POLL_OPTION_ID}">{poll_option.POLL_OPTION_CAPTION}</label><!-- ELSE -->{poll_option.POLL_OPTION_CAPTION}<!-- ENDIF --></dt>
					<!-- IF S_CAN_VOTE --><dd style="width: auto;" class="poll_option_select"><!-- IF S_IS_MULTI_CHOICE --><input type="checkbox" name="vote_id[]" id="vote_{poll_option.POLL_OPTION_ID}" value="{poll_option.POLL_OPTION_ID}"<!-- IF poll_option.POLL_OPTION_VOTED --> checked="checked"<!-- ENDIF --> /><!-- ELSE --><input type="radio" name="vote_id[]" id="vote_{poll_option.POLL_OPTION_ID}" value="{poll_option.POLL_OPTION_ID}"<!-- IF poll_option.POLL_OPTION_VOTED --> checked="checked"<!-- ENDIF --> /><!-- ENDIF --></dd><!-- ENDIF -->
					<dd class="resultbar<!-- IF not S_DISPLAY_RESULTS --> hidden<!-- ENDIF -->"><div class="<!-- IF poll_option.POLL_OPTION_PCT < 20 -->pollbar1<!-- ELSEIF poll_option.POLL_OPTION_PCT < 40 -->pollbar2<!-- ELSEIF poll_option.POLL_OPTION_PCT < 60 -->pollbar3<!-- ELSEIF poll_option.POLL_OPTION_PCT < 80 -->pollbar4<!-- ELSE -->pollbar5<!-- ENDIF -->" style="width:{poll_option.POLL_OPTION_PERCENT_REL};">{poll_option.POLL_OPTION_RESULT}</div></dd>
					<dd class="poll_option_percent<!-- IF not S_DISPLAY_RESULTS --> hidden<!-- ENDIF -->"><!-- IF poll_option.POLL_OPTION_RESULT == 0 -->{L_NO_VOTES}<!-- ELSE -->{poll_option.POLL_OPTION_PERCENT}<!-- ENDIF --></dd>
				</dl>
				<!-- EVENT viewtopic_body_poll_option_after -->
			<!-- END poll_option -->

				<dl class="poll_total_votes<!-- IF not S_DISPLAY_RESULTS --> hidden<!-- ENDIF -->">
					<dt>&nbsp;</dt>
					<dd class="resultbar">{L_TOTAL_VOTES}{L_COLON} <span class="poll_total_vote_cnt">{TOTAL_VOTES}</span></dd>
				</dl>

			<!-- IF S_CAN_VOTE -->
				<dl style="border-top: none;" class="poll_vote">
					<dt>&nbsp;</dt>
					<dd class="resultbar"><input type="submit" name="update" value="{L_SUBMIT_VOTE}" class="button1" /></dd>
				</dl>
			<!-- ENDIF -->

			<!-- IF not S_DISPLAY_RESULTS -->
				<dl style="border-top: none;" class="poll_view_results">
					<dt>&nbsp;</dt>
					<dd class="resultbar"><a href="{U_VIEW_RESULTS}">{L_VIEW_RESULTS}</a></dd>
				</dl>
			<!-- ENDIF -->
			</fieldset>
			<div class="vote-submitted hidden">{L_VOTE_SUBMITTED}</div>
		</div>

		</div>
		{S_FORM_TOKEN}
		{S_HIDDEN_FIELDS}
	</div>

	</form>
	<hr />
<!-- ENDIF -->

<!-- BEGIN postrow -->
	<!-- EVENT viewtopic_body_postrow_post_before -->
	<!-- IF postrow.S_FIRST_UNREAD -->
		<a id="unread" class="anchor"<!-- IF S_UNREAD_VIEW --> data-url="{postrow.U_MINI_POST}"<!-- ENDIF -->></a>
	<!-- ENDIF -->
	<div id="p{postrow.POST_ID}" class="post has-profile <!-- IF postrow.S_ROW_COUNT is odd -->bg1<!-- ELSE -->bg2<!-- ENDIF --><!-- IF postrow.S_UNREAD_POST --> unreadpost<!-- ENDIF --><!-- IF postrow.S_POST_REPORTED --> reported<!-- ENDIF --><!-- IF postrow.S_POST_DELETED --> deleted<!-- ENDIF --><!-- IF postrow.S_ONLINE and not postrow.S_POST_HIDDEN --> online<!-- ENDIF --><!-- IF postrow.POSTER_WARNINGS --> warned<!-- ENDIF -->">
		<div class="inner">

		<dl class="postprofile" id="profile{postrow.POST_ID}"<!-- IF postrow.S_POST_HIDDEN --> style="display: none;"<!-- ENDIF -->>
			<dt class="<!-- IF postrow.RANK_TITLE or postrow.RANK_IMG -->has-profile-rank<!-- ELSE -->no-profile-rank<!-- ENDIF --> <!-- IF postrow.POSTER_AVATAR -->has-avatar<!-- ELSE -->no-avatar<!-- ENDIF -->">
				<div class="avatar-container">
					<!-- EVENT viewtopic_body_avatar_before -->
					<!-- IF postrow.POSTER_AVATAR -->
						<!-- IF postrow.U_POST_AUTHOR --><a href="{postrow.U_POST_AUTHOR}" class="avatar">{postrow.POSTER_AVATAR}</a><!-- ELSE --><span class="avatar">{postrow.POSTER_AVATAR}</span><!-- ENDIF -->
					<!-- ENDIF -->
					<!-- EVENT viewtopic_body_avatar_after -->
				</div>
				<!-- EVENT viewtopic_body_post_author_before -->
				<!-- IF not postrow.U_POST_AUTHOR --><strong>{postrow.POST_AUTHOR_FULL}</strong><!-- ELSE -->{postrow.POST_AUTHOR_FULL}<!-- ENDIF -->
				<!-- EVENT viewtopic_body_post_author_after -->
			</dt>

			<!-- IF postrow.RANK_TITLE or postrow.RANK_IMG --><dd class="profile-rank">{postrow.RANK_TITLE}<!-- IF postrow.RANK_TITLE and postrow.RANK_IMG --><br /><!-- ENDIF -->{postrow.RANK_IMG}</dd><!-- ENDIF -->

		<!-- IF postrow.POSTER_POSTS != '' --><dd class="profile-posts"><strong>{L_POSTS}{L_COLON}</strong> <!-- IF postrow.U_SEARCH !== '' --><a href="{postrow.U_SEARCH}"><!-- ENDIF -->{postrow.POSTER_POSTS}<!-- IF postrow.U_SEARCH !== '' --></a><!-- ENDIF --></dd><!-- ENDIF -->
		<!-- IF postrow.POSTER_JOINED --><dd class="profile-joined"><strong>{L_JOINED}{L_COLON}</strong> {postrow.POSTER_JOINED}</dd><!-- ENDIF -->
		<!-- IF postrow.POSTER_WARNINGS --><dd class="profile-warnings"><strong>{L_WARNINGS}{L_COLON}</strong> {postrow.POSTER_WARNINGS}</dd><!-- ENDIF -->

		<!-- IF postrow.S_PROFILE_FIELD1 -->
			<!-- Use a construct like this to include admin defined profile fields. Replace FIELD1 with the name of your field. -->
			<dd><strong>{postrow.PROFILE_FIELD1_NAME}{L_COLON}</strong> {postrow.PROFILE_FIELD1_VALUE}</dd>
		<!-- ENDIF -->

		<!-- EVENT viewtopic_body_postrow_custom_fields_before -->
		<!-- BEGIN custom_fields -->
			<!-- IF not postrow.custom_fields.S_PROFILE_CONTACT -->
				<dd class="profile-custom-field profile-{postrow.custom_fields.PROFILE_FIELD_IDENT}"><strong>{postrow.custom_fields.PROFILE_FIELD_NAME}{L_COLON}</strong> {postrow.custom_fields.PROFILE_FIELD_VALUE}</dd>
			<!-- ENDIF -->
		<!-- END custom_fields -->
		<!-- EVENT viewtopic_body_postrow_custom_fields_after -->

		<!-- EVENT viewtopic_body_contact_fields_before -->
		<!-- IF not S_IS_BOT and .postrow.contact -->
			<dd class="profile-contact">
				<strong>{L_CONTACT}{L_COLON}</strong>
				<div class="dropdown-container dropdown-left">
					<a href="#" class="dropdown-trigger"><span class="imageset icon_contact" title="{postrow.CONTACT_USER}">{postrow.CONTACT_USER}</span></a>
					<div class="dropdown hidden">
						<div class="pointer"><div class="pointer-inner"></div></div>
						<div class="dropdown-contents contact-icons">
							<!-- BEGIN contact -->
								{% set REMAINDER = postrow.contact.S_ROW_COUNT % 4 %}
								<!-- DEFINE $S_LAST_CELL = ((REMAINDER eq 3) or (postrow.contact.S_LAST_ROW and postrow.contact.S_NUM_ROWS < 4)) -->
								<!-- IF REMAINDER eq 0 -->
									<div>
								<!-- ENDIF -->
									<a href="<!-- IF postrow.contact.U_CONTACT -->{postrow.contact.U_CONTACT}<!-- ELSE -->{postrow.U_POST_AUTHOR}<!-- ENDIF -->" title="{postrow.contact.NAME}"<!-- IF $S_LAST_CELL --> class="last-cell"<!-- ENDIF --><!-- IF postrow.contact.ID eq 'jabber' --> onclick="popup(this.href, 750, 320); return false;"<!-- ENDIF -->>
										<span class="contact-icon {postrow.contact.ID}-icon">{postrow.contact.NAME}</span>
									</a>
								<!-- IF REMAINDER eq 3 or postrow.contact.S_LAST_ROW -->
									</div>
								<!-- ENDIF -->
							<!-- END contact -->
						</div>
					</div>
				</div>
			</dd>
		<!-- ENDIF -->
		<!-- EVENT viewtopic_body_contact_fields_after -->

		</dl>

		<div class="postbody">
			<!-- IF postrow.S_POST_HIDDEN -->
				<!-- IF postrow.S_POST_DELETED -->
					<div class="ignore" id="post_hidden{postrow.POST_ID}">
						{postrow.L_POST_DELETED_MESSAGE}<br />
						{postrow.L_POST_DISPLAY}
					</div>
				<!-- ELSEIF postrow.S_IGNORE_POST -->
					<div class="ignore" id="post_hidden{postrow.POST_ID}">
						{postrow.L_IGNORE_POST}<br />
						{postrow.L_POST_DISPLAY}
					</div>
				<!-- ENDIF -->
			<!-- ENDIF -->
			<div id="post_content{postrow.POST_ID}"<!-- IF postrow.S_POST_HIDDEN --> style="display: none;"<!-- ENDIF -->>

			<h3 <!-- IF postrow.S_FIRST_ROW -->class="first"<!-- ENDIF -->><!-- IF postrow.POST_ICON_IMG --><img src="{T_ICONS_PATH}{postrow.POST_ICON_IMG}" width="{postrow.POST_ICON_IMG_WIDTH}" height="{postrow.POST_ICON_IMG_HEIGHT}" alt="" /> <!-- ENDIF --><a href="#p{postrow.POST_ID}">{postrow.POST_SUBJECT}</a></h3>

		<!-- EVENT viewtopic_body_post_buttons_list_before -->
		<!-- IF not S_IS_BOT -->
			<!-- IF postrow.U_EDIT or postrow.U_DELETE or postrow.U_REPORT or postrow.U_WARN or postrow.U_INFO or postrow.U_QUOTE -->
				<ul class="post-buttons">
					<!-- EVENT viewtopic_body_post_buttons_before -->
					<!-- IF postrow.U_EDIT -->
						<li>
							<a href="{postrow.U_EDIT}" title="{L_EDIT_POST}" class="button icon-button edit-icon"><span>{L_BUTTON_EDIT}</span></a>
						</li>
					<!-- ENDIF -->
					<!-- IF postrow.U_DELETE -->
						<li>
							<a href="{postrow.U_DELETE}" title="{L_DELETE_POST}" class="button icon-button delete-icon"><span>{L_DELETE_POST}</span></a>
						</li>
					<!-- ENDIF -->
					<!-- IF postrow.U_REPORT -->
						<li>
							<a href="{postrow.U_REPORT}" title="{L_REPORT_POST}" class="button icon-button report-icon"><span>{L_REPORT_POST}</span></a>
						</li>
					<!-- ENDIF -->
					<!-- IF postrow.U_WARN -->
						<li>
							<a href="{postrow.U_WARN}" title="{L_WARN_USER}" class="button icon-button warn-icon"><span>{L_WARN_USER}</span></a>
						</li>
					<!-- ENDIF -->
					<!-- IF postrow.U_INFO -->
						<li>
							<a href="{postrow.U_INFO}" title="{L_INFORMATION}" class="button icon-button info-icon"><span>{L_INFORMATION}</span></a>
						</li>
					<!-- ENDIF -->
					<!-- IF postrow.U_QUOTE -->
						<li>
							<a href="{postrow.U_QUOTE}" title="{L_REPLY_WITH_QUOTE}" class="button icon-button quote-icon"><span>{L_QUOTE}</span></a>
						</li>
					<!-- ENDIF -->
					<!-- EVENT viewtopic_body_post_buttons_after -->
				</ul>
			<!-- ENDIF -->
		<!-- ENDIF -->
		<!-- EVENT viewtopic_body_post_buttons_list_after -->

			<!-- EVENT viewtopic_body_postrow_post_details_before -->
			<p class="author"><!-- IF S_IS_BOT -->{postrow.MINI_POST_IMG}<!-- ELSE --><a href="{postrow.U_MINI_POST}">{postrow.MINI_POST_IMG}</a><!-- ENDIF --><span class="responsive-hide">{L_POST_BY_AUTHOR} <strong>{postrow.POST_AUTHOR_FULL}</strong> &raquo; </span>{postrow.POST_DATE} </p>
			<!-- EVENT viewtopic_body_postrow_post_details_after -->

			<!-- IF postrow.S_POST_UNAPPROVED -->
			<form method="post" class="mcp_approve" action="{postrow.U_APPROVE_ACTION}">
				<p class="post-notice unapproved">
					<strong>{L_POST_UNAPPROVED_ACTION}</strong>
					<input class="button2" type="submit" value="{L_DISAPPROVE}" name="action[disapprove]" />
					<input class="button1" type="submit" value="{L_APPROVE}" name="action[approve]" />
					<input type="hidden" name="post_id_list[]" value="{postrow.POST_ID}" />
					{S_FORM_TOKEN}
				</p>
			</form>
			<!-- ELSEIF postrow.S_POST_DELETED -->
			<form method="post" class="mcp_approve" action="{postrow.U_APPROVE_ACTION}">
				<p class="post-notice deleted">
					<strong>{L_POST_DELETED_ACTION}</strong>
					<input class="button2" type="submit" value="{L_DELETE}" name="action[disapprove]" />
					<input class="button1" type="submit" value="{L_RESTORE}" name="action[restore]" />
					<input type="hidden" name="post_id_list[]" value="{postrow.POST_ID}" />
					{S_FORM_TOKEN}
				</p>
			</form>
			<!-- ENDIF -->

			<!-- IF postrow.S_POST_REPORTED -->
			<p class="post-notice reported">
				<a href="{postrow.U_MCP_REPORT}"><strong>{L_POST_REPORTED}</strong></a>
			</p>
			<!-- ENDIF -->

			<div class="content">{postrow.MESSAGE}</div>

			<!-- IF postrow.S_HAS_ATTACHMENTS -->
				<dl class="attachbox">
					<dt>
						{L_ATTACHMENTS}
					</dt>
					<!-- BEGIN attachment -->
						<dd>{postrow.attachment.DISPLAY_ATTACHMENT}</dd>
					<!-- END attachment -->
				</dl>
			<!-- ENDIF -->

			<!-- EVENT viewtopic_body_postrow_post_notices_before -->
			<!-- IF postrow.S_DISPLAY_NOTICE --><div class="rules">{L_DOWNLOAD_NOTICE}</div><!-- ENDIF -->
			<!-- IF postrow.DELETED_MESSAGE or postrow.DELETE_REASON -->
				<div class="notice post_deleted_msg">
					{postrow.DELETED_MESSAGE}
					<!-- IF postrow.DELETE_REASON --><br /><strong>{L_REASON}{L_COLON}</strong> <em>{postrow.DELETE_REASON}</em><!-- ENDIF -->
				</div>
			<!-- ELSEIF postrow.EDITED_MESSAGE or postrow.EDIT_REASON -->
				<div class="notice">
					{postrow.EDITED_MESSAGE}
					<!-- IF postrow.EDIT_REASON --><br /><strong>{L_REASON}{L_COLON}</strong> <em>{postrow.EDIT_REASON}</em><!-- ENDIF -->
				</div>
			<!-- ENDIF -->

			<!-- IF postrow.BUMPED_MESSAGE --><div class="notice"><br /><br />{postrow.BUMPED_MESSAGE}</div><!-- ENDIF -->
			<!-- EVENT viewtopic_body_postrow_post_notices_after -->
			<!-- IF postrow.SIGNATURE --><div id="sig{postrow.POST_ID}" class="signature">{postrow.SIGNATURE}</div><!-- ENDIF -->

			<!-- EVENT viewtopic_body_postrow_post_content_footer -->
			</div>

		</div>

		<div class="back2top"><a href="#top" class="top" title="{L_BACK_TO_TOP}">{L_BACK_TO_TOP}</a></div>

		</div>
	</div>

	<hr class="divider" />
	<!-- EVENT viewtopic_body_postrow_post_after -->
<!-- END postrow -->

<!-- IF S_QUICK_REPLY -->
	<!-- INCLUDE quickreply_editor.html -->
<!-- ENDIF -->

<!-- IF S_NUM_POSTS > 1 or .pagination -->
	<form id="viewtopic" method="post" action="{S_TOPIC_ACTION}">
	<fieldset class="display-options" style="margin-top: 0; ">
		<!-- IF not S_IS_BOT -->
		<label>{L_DISPLAY_POSTS}{L_COLON} {S_SELECT_SORT_DAYS}</label>
		<label>{L_SORT_BY} {S_SELECT_SORT_KEY}</label> <label>{S_SELECT_SORT_DIR}</label>
		<input type="submit" name="sort" value="{L_GO}" class="button2" />
		<!-- ENDIF -->
	</fieldset>
	</form>
	<hr />
<!-- ENDIF -->

<!-- EVENT viewtopic_body_topic_actions_before -->
<div class="action-bar bottom">
	<div class="buttons">
		<!-- EVENT viewtopic_buttons_bottom_before -->

	<!-- IF not S_IS_BOT and S_DISPLAY_REPLY_INFO -->
		<a href="{U_POST_REPLY_TOPIC}" class="button icon-button <!-- IF S_IS_LOCKED -->locked-icon<!-- ELSE -->reply-icon<!-- ENDIF -->" title="<!-- IF S_IS_LOCKED -->{L_TOPIC_LOCKED}<!-- ELSE -->{L_POST_REPLY}<!-- ENDIF -->">
			<!-- IF S_IS_LOCKED -->{L_BUTTON_TOPIC_LOCKED}<!-- ELSE -->{L_BUTTON_POST_REPLY}<!-- ENDIF -->
		</a>
	<!-- ENDIF -->

		<!-- EVENT viewtopic_buttons_bottom_after -->
	</div>

	<!-- INCLUDE viewtopic_topic_tools.html -->

	<!-- IF .quickmod -->
		<div class="dropdown-container dropdown-container-{S_CONTENT_FLOW_BEGIN} dropdown-up dropdown-{S_CONTENT_FLOW_END} dropdown-button-control" id="quickmod">
			<span title="{L_QUICK_MOD}" class="dropdown-trigger button icon-button modtools-icon dropdown-select">{L_QUICK_MOD}</span>
			<div class="dropdown hidden">
				<div class="pointer"><div class="pointer-inner"></div></div>
				<ul class="dropdown-contents">
				<!-- BEGIN quickmod -->
					<!-- DEFINE $QUICKMOD_AJAX = (quickmod.VALUE in ['lock', 'unlock', 'delete_topic', 'restore_topic', 'make_normal', 'make_sticky', 'make_announce', 'make_global']) -->
					<li><a href="{quickmod.LINK}"<!-- IF $QUICKMOD_AJAX --> data-ajax="true" data-refresh="true"<!-- ENDIF -->>{quickmod.TITLE}</a></li>
				<!-- END quickmod -->
				</ul>
			</div>
		</div>
	<!-- ENDIF -->

	<!-- IF .pagination or TOTAL_POSTS -->
		<div class="pagination">
			{TOTAL_POSTS}
			<!-- IF .pagination -->
				<!-- INCLUDE pagination.html -->
			<!-- ELSE -->
				&bull; {PAGE_NUMBER}
			<!-- ENDIF -->
		</div>
	<!-- ENDIF -->
	<div class="clear"></div>
</div>

<!-- EVENT viewtopic_body_footer_before -->
<!-- INCLUDE jumpbox.html -->

<!-- IF S_DISPLAY_ONLINE_LIST -->
	<div class="stat-block online-list">
		<h3><!-- IF U_VIEWONLINE --><a href="{U_VIEWONLINE}">{L_WHO_IS_ONLINE}</a><!-- ELSE -->{L_WHO_IS_ONLINE}<!-- ENDIF --></h3>
		<p>{LOGGED_IN_USER_LIST}</p>
	</div>
<!-- ENDIF -->

<!-- INCLUDE overall_footer.html -->
styles/prosilver/theme/colours.css

Código: Selecionar todos

/*
--------------------------------------------------------------
Colours and backgrounds for common.css
-------------------------------------------------------------- */

html, body {
	color: #536482;
	background-color: #F5F7FA;
}

h1 {
	color: #FFFFFF;
}

h2 {
	color: #28313F;
}

h3 {
	border-bottom-color: #CCCCCC;
	color: #115098;
}

hr {
	border-color: #FFFFFF;
	border-top-color: #CCCCCC;
}

/* Search box
--------------------------------------------- */

.search-box .inputbox,
.search-box .inputbox:hover,
.search-box .inputbox:focus,
.search-box .button:hover {
	border-color: #C7C3BF;
}

.search-header {
	box-shadow: 0 0 10px #0075B0;
}

/* Round cornered boxes and backgrounds
---------------------------------------- */
#wrap {
	background-color: #FFF;
	border-color: #E6E9ED;
}

.headerbar {
	background-color: #12A3EB;
	background-image: url("./images/bg_header.gif");
	color: #FFFFFF;
}

.navbar {
	background-color: #cadceb;
}

.forabg {
	background-color: #0076b1;
	background-image: url("./images/bg_list.gif");
}

.forumbg {
	background-color: #12A3EB;
	background-image: url("./images/bg_header.gif");
}

.panel {
	background-color: #ECF1F3;
	color: #28313F;
}

.post:target .content {
	color: #000000;
}

.post:target h3 a {
	color: #000000;
}

.bg1 {
	background-color: #ECF3F7;
}

table.zebra-list tr:nth-child(odd) td, ul.zebra-list li:nth-child(odd) {
	background-color: #ECF3F7;
}

.bg2 {
	background-color: #e1ebf2;
}

table.zebra-list tr:nth-child(even) td, ul.zebra-list li:nth-child(even) {
	background-color: #e1ebf2;
}

.bg3	{
	background-color: #cadceb;
}

.ucprowbg {
	background-color: #DCDEE2;
}

.fieldsbg {
	background-color: #E7E8EA;
}

/* Horizontal lists
----------------------------------------*/

ul.navlinks {
	border-top-color: #FFFFFF;
}

/* Table styles
----------------------------------------*/
table.table1 thead th {
	color: #FFFFFF;
}

table.table1 tbody tr {
	border-color: #BFC1CF;
}

table.table1 tbody tr:hover, table.table1 tbody tr.hover {
	background-color: #CFE1F6;
	color: #000;
}

table.table1 td {
	color: #536482;
}

table.table1 tbody td {
	border-top-color: #FAFAFA;
}

table.table1 tbody th {
	border-bottom-color: #000000;
	color: #333333;
	background-color: #FFFFFF;
}

table.info tbody th {
	color: #000000;
}

/* Misc layout styles
---------------------------------------- */
dl.details dt {
	color: #000000;
}

dl.details dd {
	color: #536482;
}

.sep {
	color: #1198D9;
}

/* Pagination
---------------------------------------- */

.pagination li a {
	background-color: #ECEDEE;
	border-color: #B4BAC0;
	color: #5C758C;
}

.pagination li.ellipsis span {
	background-color: transparent;
	color:	#000000;
}

.pagination li.active span {
	background-color: #4692BF;
	border-color: #4692BF;
	color: #FFFFFF;
}

.pagination li a:hover, .pagination .dropdown-visible a.dropdown-trigger, .nojs .pagination .dropdown-container:hover a.dropdown-trigger {
	background-color: #368AD2;
	border-color: #368AD2;
	color: #FFFFFF;
}

.pagination li.next a, .pagination li.previous a, .pagination li.page-jump a {
	background-image: url("./images/icons_pagination.png");
}

/* Pagination in viewforum for multipage topics */
.row .pagination {
	background-image: url("./images/icon_pages.gif");
}

/* Miscellaneous styles
---------------------------------------- */

.copyright {
	color: #555555;
}

.error {
	color: #BC2A4D;
}

.reported {
	background-color: #F7ECEF;
}

li.reported:hover {
	background-color: #ECD5D8 !important;
}
.sticky, .announce {
	/* you can add a background for stickies and announcements*/
}

div.rules {
	background-color: #ECD5D8;
	color: #BC2A4D;
}

p.post-notice {
	background-color: #ECD5D8;
	background-image: none;
}

p.post-notice.deleted:before {
	background-image: url("./images/icon_topic_deleted.png");
}

p.post-notice.unapproved:before {
	background-image: url("./images/icon_topic_unapproved.gif");
}

p.post-notice.reported:before, p.post-notice.error:before {
	background-image: url("./images/icon_topic_reported.gif");
}

/*
--------------------------------------------------------------
Colours and backgrounds for links.css
-------------------------------------------------------------- */

a { color: #105289; }
a:hover	{ color: #D31141; }

/* Links on gradient backgrounds */
.forumbg .header a, .forabg .header a, th a {
	color: #FFFFFF;
}

.forumbg .header a:hover, .forabg .header a:hover, th a:hover {
	color: #A8D8FF;
}

/* Notification mark read link */
.dropdown-extended a.mark_read {
	background-color: #FFFFFF;
}

/* Post body links */
.postlink {
	border-bottom-color: #368AD2;
	color: #368AD2;
}

.postlink:visited {
	border-bottom-color: #5D8FBD;
	color: #5D8FBD;
}

.postlink:hover {
	background-color: #D0E4F6;
	color: #0D4473;
}

.signature a, .signature a:hover {
	background-color: transparent;
}

/* Back to top of page */
a.top {
	background-image: url("./images/icon_back_top.gif");
}

a.top2 {
	background-image: url("./images/icon_back_top.gif");
}

/* Arrow links  */
a.arrow-up			{ background-image: url("./images/arrow_up.gif"); }
a.arrow-down		{ background-image: url("./images/arrow_down.gif"); }
a.arrow-left		{ background-image: url("./images/arrow_left.gif"); }
a.arrow-right		{ background-image: url("./images/arrow_right.gif"); }

a.arrow-up:hover {
	background-color: transparent;
}

a.arrow-left:hover {
	color: #368AD2;
}

a.arrow-right:hover {
	color: #368AD2;
}

/*
--------------------------------------------------------------
Colours and backgrounds for content.css
-------------------------------------------------------------- */

ul.forums {
	background-color: #eef5f9;
	background-image: url("./images/gradient.gif");
}

ul.topiclist li {
	color: #4C5D77;
}

ul.topiclist dd {
	border-left-color: #FFFFFF;
}

.rtl ul.topiclist dd {
	border-right-color: #fff;
	border-left-color: transparent;
}

ul.topiclist li.row dt a.subforum.read {
	background-image: url("./images/subforum_read.gif");
}

ul.topiclist li.row dt a.subforum.unread {
	background-image: url("./images/subforum_unread.gif");
}

li.row {
	border-top-color:  #FFFFFF;
	border-bottom-color: #00608F;
}

li.row strong {
	color: #000000;
}

li.row:hover {
	background-color: #F6F4D0;
}

li.row:hover dd {
	border-left-color: #CCCCCC;
}

.rtl li.row:hover dd {
	border-right-color: #CCCCCC;
	border-left-color: transparent;
}

li.header dt, li.header dd {
	color: #FFFFFF;
}

/* Post body styles
----------------------------------------*/
.postbody {
	color: #333333;
}

/* Content container styles
----------------------------------------*/
.content {
	color: #333333;
}

.content h2, .panel h2 {
	color: #115098;
	border-bottom-color:  #CCCCCC;
}

dl.faq dt {
	color: #333333;
}

.posthilit {
	background-color: #F3BFCC;
	color: #BC2A4D;
}

.announce, .unreadpost {
	/* Highlight the announcements & unread posts box */
}

/* Post signature */
.signature {
	border-top-color: #CCCCCC;
}

/* Post noticies */
.notice {
	border-top-color:  #CCCCCC;
}

/* BB Code styles
----------------------------------------*/
/* Quote block */
blockquote {
	background-color: #EBEADD;
	background-image: url("./images/quote.gif");
	border-color:#DBDBCE;
}

.rtl blockquote {
	background-image: url("./images/quote_rtl.gif");
}

blockquote blockquote {
	/* Nested quotes */
	background-color:#EFEED9;
}

blockquote blockquote blockquote {
	/* Nested quotes */
	background-color: #EBEADD;
}

/* Code block */
.codebox {
	background-color: #FFFFFF;
	border-color: #C9D2D8;
}

.codebox p {
	border-bottom-color:  #CCCCCC;
}

.codebox code {
	color: #2E8B57;
}

.syntaxbg		{ color: #FFFFFF; }
.syntaxcomment	{ color: #FF8000; }
.syntaxdefault	{ color: #0000BB; }
.syntaxhtml		{ color: #000000; }
.syntaxkeyword	{ color: #007700; }
.syntaxstring	{ color: #DD0000; }

/* Attachments
----------------------------------------*/
.attachbox {
	background-color: #FFFFFF;
	border-color:  #C9D2D8;
}

.pm-message .attachbox {
	background-color: #F2F3F3;
}

.attachbox dd {
	border-top-color: #C9D2D8;
}

.attachbox p {
	color: #666666;
}

.attachbox p.stats {
	color: #666666;
}

.attach-image img {
	border-color: #999999;
}

/* Inline image thumbnails */

dl.file dd {
	color: #666666;
}

dl.thumbnail img {
	border-color: #666666;
	background-color: #FFFFFF;
}

dl.thumbnail dd {
	color: #666666;
}

dl.thumbnail dt a:hover {
	background-color: #EEEEEE;
}

dl.thumbnail dt a:hover img {
	border-color: #368AD2;
}

/* Post poll styles
----------------------------------------*/

fieldset.polls dl {
	border-top-color: #DCDEE2;
	color: #666666;
}

fieldset.polls dl.voted {
	color: #000000;
}

fieldset.polls dd div {
	color: #FFFFFF;
}

.rtl .pollbar1, .rtl .pollbar2, .rtl .pollbar3, .rtl .pollbar4, .rtl .pollbar5 {
	border-right-color: transparent;
}

.pollbar1 {
	background-color: #AA2346;
	border-bottom-color: #74162C;
	border-right-color: #74162C;
}

.rtl .pollbar1 {
	border-left-color: #74162C;
}

.pollbar2 {
	background-color: #BE1E4A;
	border-bottom-color: #8C1C38;
	border-right-color: #8C1C38;
}

.rtl .pollbar2 {
	border-left-color: #8C1C38;
}

.pollbar3 {
	background-color: #D11A4E;
	border-bottom-color: #AA2346;
	border-right-color: #AA2346;
}

.rtl .pollbar3 {
	border-left-color: #AA2346;
}

.pollbar4 {
	background-color: #E41653;
	border-bottom-color: #BE1E4A;
	border-right-color: #BE1E4A;
}

.rtl .pollbar4 {
	border-left-color: #BE1E4A;
}

.pollbar5 {
	background-color: #F81157;
	border-bottom-color: #D11A4E;
	border-right-color: #D11A4E;
}

.rtl .pollbar5 {
	border-left-color: #D11A4E;
}

/* Poster profile block
----------------------------------------*/
.postprofile {
	color: #666666;
	border-color: #FFFFFF;
}

.pm .postprofile {
	border-color: #DDDDDD;
}

.postprofile strong {
	color: #000000;
}

.online {
	background-image: url("./en/icon_user_online.gif");
}

dd.profile-warnings {
	color: #BC2A4D;
}

/*
--------------------------------------------------------------
Colours and backgrounds for buttons.css
-------------------------------------------------------------- */
.button {
	border-color: #C7C3BF;
	background-color: #FFFFFF;
	background-image: -moz-linear-gradient(top, #FFFFFF, #E9E9E9);
	background-image: -webkit-linear-gradient(top, #FFFFFF, #E9E9E9);
	background-image: -o-linear-gradient(top, #FFFFFF, #E9E9E9);
	background-image: linear-gradient(to bottom, #FFFFFF, #E9E9E9);
	-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFFFFF', EndColorStr='#E9E9E9')";
	box-shadow: 0 0 0 1px #FFFFFF inset;
	-webkit-box-shadow: 0 0 0 1px #FFFFFF inset;
	color: #D31141;
}

.dropdown-select {
	color: #536482;
}

.button:hover, .dropdown-visible .dropdown-select, .nojs .dropdown-container:hover .dropdown-select {
	border-color: #0a8ed0;
	background-image: -moz-linear-gradient(top, #E9E9E9, #FFFFFF);
	background-image: -webkit-linear-gradient(top, #E9E9E9, #FFFFFF);
	background-image: -o-linear-gradient(top, #E9E9E9, #FFFFFF);
	background-image: linear-gradient(to bottom, #E9E9E9, #FFFFFF);
	-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#E9E9E9', EndColorStr='#FFFFFF')";
	text-shadow: 1px 1px 0 #FFFFFF, -1px -1px 0 #FFFFFF, -1px -1px 0 rgba(188, 42, 77, 0.2);
}

.dropdown-select:after	{ border-color: #DADADA; }
.dropdown-select:hover	{ border-color: #C7C3BF; }

.dropdown-visible .dropdown-select, .dropdown-visible .dropdown-select:hover, .nojs .dropdown-container:hover .dropdown-select {
	border-color: #A6B2BA;
	color: #105289;
}

.contact-icons a		{ border-color: #DCDCDC; }
.contact-icons a:hover	{ background-color: #F2F6F9; }

/* Icon images
---------------------------------------- */
.icon-acp					{ background-image: url("./images/icon_acp.gif"); }
.icon-bookmark				{ background-image: url("./images/icon_bookmark.gif"); }
.icon-bump					{ background-image: url("./images/icon_bump.gif"); }
.icon-contact				{ background-image: url("./images/icon_pm.gif"); }
.icon-delete-cookies		{ background-image: url("./images/icon_delete_cookies.gif"); }
.icon-download				{ background-image: url("./images/icon_download.gif"); }
.icon-faq					{ background-image: url("./images/icon_faq.gif"); }
.icon-home					{ background-image: url("./images/icon_home.gif"); }
.icon-logout				{ background-image: url("./images/icon_logout.gif"); }
.icon-mark					{ background-image: url("./images/icon_mark.gif"); }
.icon-mcp					{ background-image: url("./images/icon_mcp.gif"); }
.icon-members				{ background-image: url("./images/icon_members.gif"); }
.icon-notification			{ background-image: url("./images/icon_notification.gif"); }
.icon-pages					{ background-image: url("./images/icon_pages.gif"); }
.icon-pm					{ background-image: url("./images/icon_pm.gif"); }
.icon-print					{ background-image: url("./images/icon_print.gif"); }
.icon-profile				{ background-image: url("./images/icon_profile.gif"); }
.icon-register				{ background-image: url("./images/icon_register.gif"); }
.icon-search, .responsive-search a	{ background-image: url("./images/icon_search.gif"); }
.icon-search-active			{ background-image: url("./images/subforum_read.gif"); }
.icon-search-new			{ background-image: url("./images/subforum_unread.gif"); }
.icon-search-self			{ background-image: url("./images/icon_topic_latest.gif"); }
.icon-search-unanswered		{ background-image: url("./images/icon_post_target.gif"); }
.icon-search-unread			{ background-image: url("./images/subforum_unread.gif"); }
.icon-sendemail				{ background-image: url("./images/icon_sendemail.gif"); }
.icon-subscribe				{ background-image: url("./images/icon_subscribe.gif"); }
.icon-team					{ background-image: url("./images/icon_team.gif"); }
.icon-ucp					{ background-image: url("./images/icon_ucp.gif"); }
.icon-unsubscribe			{ background-image: url("./images/icon_unsubscribe.gif"); }

/* Profile & navigation icons */
.contact-icon													{ background-image: url("./images/icons_contact.png"); }
.icon-button:before, .dropdown-select:after						{ background-image: url("./images/icons_button.png"); }

/* Forum icons & Topic icons */
.global_read													{ background-image: url("./images/announce_read.gif"); }
.global_read_mine												{ background-image: url("./images/announce_read_mine.gif"); }
.global_read_locked												{ background-image: url("./images/announce_read_locked.gif"); }
.global_read_locked_mine										{ background-image: url("./images/announce_read_locked_mine.gif"); }
.global_unread													{ background-image: url("./images/announce_unread.gif"); }
.global_unread_mine												{ background-image: url("./images/announce_unread_mine.gif"); }
.global_unread_locked											{ background-image: url("./images/announce_unread_locked.gif"); }
.global_unread_locked_mine										{ background-image: url("./images/announce_unread_locked_mine.gif"); }

.announce_read													{ background-image: url("./images/announce_read.gif"); }
.announce_read_mine												{ background-image: url("./images/announce_read_mine.gif"); }
.announce_read_locked											{ background-image: url("./images/announce_read_locked.gif"); }
.announce_read_locked_mine										{ background-image: url("./images/announce_read_locked_mine.gif"); }
.announce_unread												{ background-image: url("./images/announce_unread.gif"); }
.announce_unread_mine											{ background-image: url("./images/announce_unread_mine.gif"); }
.announce_unread_locked											{ background-image: url("./images/announce_unread_locked.gif"); }
.announce_unread_locked_mine									{ background-image: url("./images/announce_unread_locked_mine.gif"); }

.forum_link														{ background-image: url("./images/forum_link.gif"); }
.forum_read														{ background-image: url("./images/forum_read.gif"); }
.forum_read_locked												{ background-image: url("./images/forum_read_locked.gif"); }
.forum_read_subforum											{ background-image: url("./images/forum_read_subforum.gif"); }
.forum_unread													{ background-image: url("./images/forum_unread.gif"); }
.forum_unread_locked											{ background-image: url("./images/forum_unread_locked.gif"); }
.forum_unread_subforum											{ background-image: url("./images/forum_unread_subforum.gif"); }

.sticky_read													{ background-image: url("./images/sticky_read.gif"); }
.sticky_read_mine												{ background-image: url("./images/sticky_read_mine.gif"); }
.sticky_read_locked												{ background-image: url("./images/sticky_read_locked.gif"); }
.sticky_read_locked_mine										{ background-image: url("./images/sticky_read_locked_mine.gif"); }
.sticky_unread													{ background-image: url("./images/sticky_unread.gif"); }
.sticky_unread_mine												{ background-image: url("./images/sticky_unread_mine.gif"); }
.sticky_unread_locked											{ background-image: url("./images/sticky_unread_locked.gif"); }
.sticky_unread_locked_mine										{ background-image: url("./images/sticky_unread_locked_mine.gif"); }

.topic_moved													{ background-image: url("./images/topic_moved.gif"); }
.topic_read														{ background-image: url("./images/topic_read.gif"); }
.topic_read_mine												{ background-image: url("./images/topic_read_mine.gif"); }
.topic_read_hot													{ background-image: url("./images/topic_read_hot.gif"); }
.topic_read_hot_mine											{ background-image: url("./images/topic_read_hot_mine.gif"); }
.topic_read_locked												{ background-image: url("./images/topic_read_locked.gif"); }
.topic_read_locked_mine											{ background-image: url("./images/topic_read_locked_mine.gif"); }
.topic_unread													{ background-image: url("./images/topic_unread.gif"); }
.topic_unread_mine												{ background-image: url("./images/topic_unread_mine.gif"); }
.topic_unread_hot												{ background-image: url("./images/topic_unread_hot.gif"); }
.topic_unread_hot_mine											{ background-image: url("./images/topic_unread_hot_mine.gif"); }
.topic_unread_locked											{ background-image: url("./images/topic_unread_locked.gif"); }
.topic_unread_locked_mine										{ background-image: url("./images/topic_unread_locked_mine.gif"); }

.pm_read														{ background-image: url("./images/topic_read.gif"); }
.pm_unread														{ background-image: url("./images/topic_unread.gif"); }

/*
--------------------------------------------------------------
Colours and backgrounds for cp.css
-------------------------------------------------------------- */

/* Main CP box
----------------------------------------*/

.panel-container h3, .panel-container hr, #cp-menu hr {
	border-color: #A4B3BF;
}

.panel-container .panel li.row {
	border-bottom-color: #B5C1CB;
	border-top-color: #F9F9F9;
}

ul.cplist {
	border-top-color: #B5C1CB;
}

.panel-container .panel li.header dd, .panel-container .panel li.header dt {
	color: #000000;
}

.panel-container table.table1 thead th {
	color: #333333;
	border-bottom-color: #333333;
}

#cp-main .pm-message {
	border-color: #DBDEE2;
	background-color: #FFFFFF;
}

/* CP tabbed menu
----------------------------------------*/
#tabs .tab > a {
	background: #BACCD9;
	color: #536482;
}

#tabs .tab > a:hover {
	background: #DDEDFB;
	color: #D31141;
}

#tabs .activetab > a,
#tabs .activetab > a:hover {
	background: #CADCEB;
	background: -moz-linear-gradient(top, #E2F2FF 0%, #CADCEB 100%);
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #E2F2FF), color-stop(100%, #CADCEB));
	background: -webkit-linear-gradient(top, #E2F2FF 0%, #CADCEB 100%);
	background: -o-linear-gradient(top, #E2F2FF 0%, #CADCEB 100%);
	background: -ms-linear-gradient(top, #E2F2FF 0%, #CADCEB 100%);
	background: linear-gradient(to bottom, #E2F2FF 0%, #CADCEB 100%);
	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#E2F2FF', endColorstr='#CADCEB', GradientType=0 );
	border-color: #CADCEB;
	box-shadow: 0 1px 1px #F2F9FF inset;
	color: #333333;
}

#tabs .activetab > a:hover {
	color: #000000;
}

/* Mini tabbed menu used in MCP
----------------------------------------*/
#minitabs .tab > a {
	background-color: #E1EBF2;
}

#minitabs .activetab > a,
#minitabs .activetab > a:hover {
	background-color: #F9F9F9;
	color: #333333;
}

/* Responsive tabs
----------------------------------------*/
.responsive-tab .responsive-tab-link:before {
	border-color: #536482;
}

.responsive-tab .responsive-tab-link:hover:before {
	border-color: #D31141;
}

/* UCP navigation menu
----------------------------------------*/

/* Link styles for the sub-section links */
#navigation a {
	color: #333;
	background: #B4C4D1;
	background: -moz-linear-gradient(left, #B4C4D1 50%, #CADCEB 100%);
	background: -webkit-gradient(left top, right top, color-stop(50%, #B4C4D1), color-stop(100%, #CADCEB));
	background: -webkit-linear-gradient(left, #B4C4D1 50%, #CADCEB 100%);
	background: -o-linear-gradient(left, #B4C4D1 50%, #CADCEB 100%);
	background: -ms-linear-gradient(left, #B4C4D1 50%, #CADCEB 100%);
	background: linear-gradient(to right, #B4C4D1 50%, #CADCEB 100%);
	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#B4C4D1', endColorstr='#CADCEB', GradientType=1 );
}

.rtl #navigation a {
	background: #B4C4D1;
	background: -moz-linear-gradient(left, #CADCEB 0%, #B4C4D1 50%);
	background: -webkit-gradient(left top, right top, color-stop(0%, #CADCEB), color-stop(50%, #B4C4D1));
	background: -webkit-linear-gradient(left, #CADCEB 0%, #B4C4D1 50%);
	background: -o-linear-gradient(left, #CADCEB 0%, #B4C4D1 50%);
	background: -ms-linear-gradient(left, #CADCEB 0%, #B4C4D1 50%);
	background: linear-gradient(to right, #CADCEB 0%, #B4C4D1 50%);
	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#CADCEB', endColorstr='#B4C4D1', GradientType=1 );
}

#navigation a:hover {
	background: #AABAC6;
	color: #BC2A4D;
	filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
}

#navigation #active-subsection a {
	background: #F9F9F9;
	color: #D31141;
	filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
}

#navigation #active-subsection a:hover {
	color: #D31141;
}

@media only screen and (max-width: 900px), only screen and (max-device-width: 900px)
{
	#navigation a, .rtl #navigation a {
		background: #B2C2CF;
	}
}

/* Preferences pane layout
----------------------------------------*/
.panel-container h2 {
	color: #333333;
}

.panel-container .panel {
	background-color: #F9F9F9;
}

#cp-main .pm {
	background-color: #FFFFFF;
}

/* Friends list */
.cp-mini {
	background-color: #eef5f9;
}

dl.mini dt {
	color: #425067;
}

/* PM Styles
----------------------------------------*/
/* PM Message history */
.current {
	color: #000000 !important;
}

/* PM marking colours */
.pmlist li.pm_message_reported_colour, .pm_message_reported_colour {
	border-left-color: #BC2A4D;
	border-right-color: #BC2A4D;
}

.pmlist li.pm_marked_colour, .pm_marked_colour {
	border-color: #FF6600;
}

.pmlist li.pm_replied_colour, .pm_replied_colour {
	border-color: #A9B8C2;
}

.pmlist li.pm_friend_colour, .pm_friend_colour {
	border-color: #5D8FBD;
}

.pmlist li.pm_foe_colour, .pm_foe_colour {
	border-color: #000000;
}

/* Avatar gallery */
#gallery label {
	background: #FFFFFF;
	border-color: #CCC;
}

#gallery label:hover {
	background-color: #EEE;
}

/*
--------------------------------------------------------------
Colours and backgrounds for forms.css
-------------------------------------------------------------- */

/* General form styles
----------------------------------------*/
select {
	border-color: #666666;
	background-color: #FAFAFA;
	color: #000;
}

label {
	color: #425067;
}

option.disabled-option {
	color: graytext;
}

/* Definition list layout for forms
---------------------------------------- */
dd label {
	color: #333;
}

fieldset.fields1 {
	background-color: transparent;
}

/* Hover effects */
fieldset dl:hover dt label {
	color: #000000;
}

fieldset.fields2 dl:hover dt label {
	color: inherit;
}

/* Quick-login on index page */
fieldset.quick-login input.inputbox {
	background-color: #F2F3F3;
}

/* Posting page styles
----------------------------------------*/

#message-box textarea {
	color: #333333;
}

#message-box textarea.drag-n-drop {
	outline-color: rgba(102, 102, 102, 0.5);
}

#message-box textarea.drag-n-drop-highlight {
	outline-color: rgba(17, 163, 234, 0.5);
}

/* Input field styles
---------------------------------------- */
.inputbox {
	background-color: #FFFFFF;
	border-color: #B4BAC0;
	color: #333333;
}

.inputbox:-moz-placeholder {
	color: #333333;
}

.inputbox::-webkit-input-placeholder {
	color: #333333;
}

.inputbox:hover {
	border-color: #11A3EA;
}

.inputbox:focus {
	border-color: #11A3EA;
	color: #0F4987;
}

.inputbox:focus:-moz-placeholder {
	color: transparent;
}

.inputbox:focus::-webkit-input-placeholder {
	color: transparent;
}


/* Form button styles
---------------------------------------- */

a.button1, input.button1, input.button3, a.button2, input.button2 {
	color: #000;
	background-color: #FAFAFA;
	background-image: url("./images/bg_button.gif");
}

a.button1, input.button1 {
	border-color: #666666;
}

input.button3 {
	background-image: none;
}

/* Alternative button */
a.button2, input.button2, input.button3 {
	border-color: #666666;
}

/* <a> button in the style of the form buttons */
a.button1, a.button2 {
	color: #000000;
}

/* Hover states */
a.button1:hover, input.button1:hover, a.button2:hover, input.button2:hover, input.button3:hover {
	border-color: #BC2A4D;
	color: #BC2A4D;
}

/* Focus states */
input.button1:focus, input.button2:focus, input.button3:focus {
	border-color: #11A3EA;
	color: #0F4987;
}

input.search {
	background-image: url("./images/icon_textbox_search.gif");
}

input.disabled {
	color: #666666;
}

/* jQuery popups
---------------------------------------- */
.phpbb_alert {
	background-color: #FFFFFF;
	border-color: #999999;
}
.phpbb_alert .alert_close {
	background-image: url("./images/alert_close.png");
}
#darken {
	background-color: #000000;
}

#loading_indicator {
	background-color: #000000;
	background-image: url("./images/loading.gif");
}

.dropdown-extended ul li {
	border-top-color: #B9B9B9;
}

.dropdown-extended ul li:hover {
	background-color: #CFE1F6;
	color: #000000;
}

.dropdown-extended .header, .dropdown-extended .footer {
	border-color: #B9B9B9;
	color: #000000;
}

.dropdown-extended .footer {
	border-top-style: solid;
	border-top-width: 1px;
}

.dropdown-extended .header {
	background: #F1F8FF;
	background: -moz-linear-gradient(top, #F1F8FF 0%, #CADCEB 100%);
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F1F8FF), color-stop(100%, #CADCEB));
	background: -webkit-linear-gradient(top, #F1F8FF 0%, #CADCEB 100%);
	background: -o-linear-gradient(top, #F1F8FF 0%, #CADCEB 100%);
	background: -ms-linear-gradient(top, #F1F8FF 0%, #CADCEB 100%);
	background: linear-gradient(to bottom, #F1F8FF 0%, #CADCEB 100%);
}

.dropdown .pointer {
	border-color: #B9B9B9 transparent;
}

.dropdown .pointer-inner {
	border-color: #FFF transparent;
}

.dropdown-extended .pointer-inner {
	border-color: #F1F8FF transparent;
}

ul.linklist li.responsive-menu a.responsive-menu-link:before {
	border-color: #105289;
}

ul.linklist li.responsive-menu a.responsive-menu-link:hover:before, ul.linklist li.responsive-menu.visible a.responsive-menu-link:before {
	border-color: #D31141;
}

.dropdown .dropdown-contents {
	background: #fff;
	border-color: #b9b9b9;
	box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.2);
}

.dropdown-up .dropdown-contents {
	box-shadow: 1px 0 5px rgba(0, 0, 0, 0.2);
}

.dropdown li, .dropdown li li {
	border-color: #DCDCDC;
}

.dropdown li.separator {
	border-color: #DCDCDC;
}

/* Notifications
---------------------------------------- */

.notification_list p.notification-time {
	color: #4C5D77;
}

li.notification-reported strong, li.notification-disapproved strong {
	color: #D31141;
}
styles/prosilver/theme/content.css

Código: Selecionar todos

/* Content Styles
---------------------------------------- */

ul.topiclist {
	display: block;
	list-style-type: none;
	margin: 0;
}

ul.forums {
	background: transparent none repeat-x 0 0;
}

ul.topiclist li {
	display: block;
	list-style-type: none;
	margin: 0;
}

ul.topiclist dl {
	position: relative;
}

ul.topiclist li.row dl {
	padding: 2px 0;
}

ul.topiclist dt, ul.topiclist dd {
	display: block;
	float: left;
}

ul.topiclist dt {
	width: 100%;
	margin-right: -440px;
	font-size: 1.1em;
}

ul.topiclist.missing-column dt {
	margin-right: -345px;
}

ul.topiclist.two-long-columns dt {
	margin-right: -250px;
}

ul.topiclist.two-columns dt {
	margin-right: -80px;
}

ul.topiclist dt .list-inner {
	margin-right: 440px;
	padding-left: 5px;
	padding-right: 5px;
}

ul.topiclist.missing-column dt .list-inner {
	margin-right: 345px;
}

ul.topiclist.two-long-columns dt .list-inner {
	margin-right: 250px;
}

ul.topiclist.two-columns dt .list-inner {
	margin-right: 80px;
}

ul.topiclist dd {
	border-left: 1px solid transparent;
	padding: 4px 0;
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}

ul.topiclist dfn {
	/* Labels for post/view counts */
	position: absolute;
	left: -999px;
	width: 990px;
}

ul.topiclist li.row dt a.subforum {
	background-image: none;
	background-position: 0 50%;
	background-repeat: no-repeat;
	position: relative;
	white-space: nowrap;
	padding: 0 0 0 12px;
}

.forum-image {
	float: left;
	padding-top: 5px;
	margin-right: 5px;
}

li.row {
	border-top: 1px solid transparent;
	border-bottom: 1px solid transparent;
}

li.row strong {
	font-weight: normal;
}

li.header dt, li.header dd {
	line-height: 1em;
	border-left-width: 0;
	margin: 2px 0 4px 0;
	padding-top: 2px;
	padding-bottom: 2px;
	font-size: 1em;
	font-family: Arial, Helvetica, sans-serif;
	text-transform: uppercase;
}

li.header dt {
	font-weight: bold;
	width: 100%;
	margin-right: -440px;
}

li.header dt .list-inner {
	margin-right: 440px;
}

li.header dd {
	padding-left: 1px;
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}

li.header dl.icon dt, li.header dl.icon dd {
	min-height: 0;
}

li.header dl.icon dt .list-inner {
	/* Tweak for headers alignment when folder icon used */
	padding-left: 0;
	padding-right: 50px;
}

/* Forum list column styles */
dl.icon {
	background-position: 10px 50%;		/* Position of folder icon */
	background-repeat: no-repeat;
}

dl.icon dt {
	background-repeat: no-repeat;
	background-position: 5px 95%;		/* Position of topic icon */
}

dl.icon dt .list-inner {
	padding-left: 45px;					/* Space for folder icon */
}

dl.icon dt, dl.icon dd {
	min-height: 35px;
}

dl a.icon-link {						/* topic row icon links */
	display: block;
	width: 30px;
	height: 30px;
	padding: 0;
	position: absolute;
	top: 50%;
	left: 0;
	margin-top: -15px;
	margin-left: 9px;
}

dd.posts, dd.topics, dd.views, dd.extra, dd.mark {
	width: 80px;
	text-align: center;
	line-height: 2.2em;
	font-size: 1.2em;
}

dd.posts, dd.topics, dd.views {
	width: 95px;
}

/* List in forum description */
dl.icon dt ol,
dl.icon dt ul {
	list-style-position: inside;
	margin-left: 1em;
}

dl.icon dt li {
	display: list-item;
	list-style-type: inherit;
}

dd.lastpost, dd.redirect, dd.moderation, dd.time, dd.info {
	width: 250px;
	font-size: 1.1em;
}

dd.redirect {
	line-height: 2.5em;
}

dd.time {
	line-height: 200%;
}

dd.lastpost > span, ul.topiclist dd.info > span, ul.topiclist dd.time > span, dd.redirect > span, dd.moderation > span {
	display: block;
	padding-left: 5px;
}

dd.extra, dd.mark {
	line-height: 200%;
}

dd.option {
	width: 125px;
	line-height: 200%;
	text-align: center;
	font-size: 1.1em;
}

/* Post body styles
----------------------------------------*/
.postbody {
	padding: 0;
	line-height: 1.48em;
	width: 76%;
	float: left;
	position: relative;
}

.postbody .ignore {
	font-size: 1.1em;
}

.postbody h3.first {
	/* The first post on the page uses this */
	font-size: 1.7em;
}

.postbody h3 {
	/* Postbody requires a different h3 format - so change it here */
	float: left;
	font-size: 1.5em;
	padding: 2px 0 0 0;
	margin-top: 0 !important;
	margin-bottom: 0.3em !important;
	text-transform: none;
	border: none;
	font-family: "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif;
	line-height: 125%;
}

.postbody h3 img {
	vertical-align: bottom;
}

.has-profile .postbody h3 {
	/* If there is a post-profile, we position the post-buttons differently */
	float: none !important;
	margin-right: 180px;
}

.postbody .content {
	font-size: 1.3em;
	overflow-x: auto;
}

.postbody img.postimage {
	max-width: 100%;
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}

.search .postbody {
	width: 68%
}

/* Topic review panel
----------------------------------------*/
#review {
	margin-top: 2em;
}

#topicreview {
	padding-right: 5px;
	overflow: auto;
	height: 300px;
}

#topicreview .postbody {
	width: auto;
	float: none;
	margin: 0;
	height: auto;
}

#topicreview .post {
	height: auto;
}

#topicreview h2 {
	border-bottom-width: 0;
}

.post-ignore .postbody {
	display: none;
}

/* MCP Post details
----------------------------------------*/
#post_details {
	/* This will only work in IE7+, plus the others */
	overflow: auto;
	max-height: 300px;
}

/* Content container styles
----------------------------------------*/
.content {
	clear: both;
	min-height: 3em;
	overflow: hidden;
	line-height: 1.4em;
	font-family: "Lucida Grande", "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif;
	font-size: 1em;
	padding-bottom: 1px;
}

.content h2, .panel h2 {
	font-weight: normal;
	border-bottom: 1px solid transparent;
	font-size: 1.6em;
	margin-top: 0.5em;
	margin-bottom: 0.5em;
	padding-bottom: 0.5em;
}

.panel h3 {
	margin: 0.5em 0;
}

.panel p {
	font-size: 1.2em;
	margin-bottom: 1em;
	line-height: 1.4em;
}

.content p {
	font-family: "Lucida Grande", "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif;
	font-size: 1.2em;
	margin-bottom: 1em;
	line-height: 1.4em;
}

dl.faq {
	font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif;
	font-size: 1.1em;
	margin-top: 1em;
	margin-bottom: 2em;
	line-height: 1.4em;
}

dl.faq dt {
	font-weight: bold;
}

.content dl.faq {
	font-size: 1.2em;
	margin-bottom: 0.5em;
}

.content li {
	list-style-type: inherit;
}

.content ul, .content ol {
	margin-bottom: 1em;
	margin-left: 3em;
}

.posthilit {
	padding: 0 2px 1px 2px;
}

/* Post author */
p.author {
	margin-bottom: 0.6em;
	padding: 0 0 5px 0;
	font-family: Verdana, Helvetica, Arial, sans-serif;
	font-size: 1em;
	line-height: 1.2em;
	clear: both;
}

/* Post signature */
.signature {
	margin-top: 1.5em;
	padding-top: 0.2em;
	font-size: 1.1em;
	border-top: 1px solid transparent;
	clear: left;
	line-height: 140%;
	overflow: hidden;
	width: 100%;
}

.signature.standalone {
	border-top-width: 0;
	margin-top: 0;
}

dd .signature {
	margin: 0;
	padding: 0;
	clear: none;
	border: none;
}

.signature li {
	list-style-type: inherit;
}

.signature ul, .signature ol {
	margin-bottom: 1em;
	margin-left: 3em;
}

/* Post noticies */
.notice {
	font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif;
	width: auto;
	margin-top: 1.5em;
	padding-top: 0.2em;
	font-size: 1em;
	border-top: 1px dashed transparent;
	clear: left;
	line-height: 130%;
}

/* Jump to post link for now */
ul.searchresults {
	list-style: none;
	text-align: right;
	clear: both;
}

/* BB Code styles
----------------------------------------*/
/* Quote block */
blockquote {
	background: transparent none 6px 8px no-repeat;
	border: 1px solid transparent;
	font-size: 0.95em;
	margin: 0.5em 1px 0 25px;
	overflow: hidden;
	padding: 5px;
}

blockquote blockquote {
	/* Nested quotes */
	font-size: 1em;
	margin: 0.5em 1px 0 15px;
}

blockquote cite {
	/* Username/source of quoter */
	font-style: normal;
	font-weight: bold;
	margin-left: 20px;
	display: block;
	font-size: 0.9em;
}

blockquote cite cite {
	font-size: 1em;
}

blockquote.uncited {
	padding-top: 25px;
}

/* Code block */
.codebox {
	padding: 3px;
	border: 1px solid transparent;
	font-size: 1em;
}

.codebox p {
	text-transform: uppercase;
	border-bottom: 1px solid transparent;
	margin-bottom: 3px;
	font-size: 0.8em !important;
	font-weight: bold;
	display: block;
}

blockquote .codebox {
	margin-left: 0;
}

.codebox code {
	overflow: auto;
	display: block;
	height: auto;
	max-height: 200px;
	white-space: normal;
	padding-top: 5px;
	font: 0.9em Monaco, "Andale Mono","Courier New", Courier, mono;
	line-height: 1.3em;
	margin: 2px 0;
}

/* Attachments
----------------------------------------*/
.attachbox {
	float: left;
	width: auto;
	max-width: 100%;
	margin: 5px 5px 5px 0;
	padding: 6px;
	border: 1px dashed transparent;
	clear: left;
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}

.attachbox dt {
	font-family: Arial, Helvetica, sans-serif;
	text-transform: uppercase;
}

.attachbox dd {
	margin-top: 4px;
	padding-top: 4px;
	clear: left;
	border-top: 1px solid transparent;
	overflow-x: auto;
}

.attachbox dd dd {
	border: none;
}

.attachbox p {
	line-height: 110%;
	font-weight: normal;
	clear: left;
}

.attachbox p.stats
{
	line-height: 110%;
	font-weight: normal;
	clear: left;
}

.attach-image {
	margin: 3px 0;
	max-width: 100%;
}

.attach-image img {
	border: 1px solid transparent;
/*	cursor: move; */
	cursor: default;
}

/* Inline image thumbnails */
div.inline-attachment dl.thumbnail, div.inline-attachment dl.file {
	display: block;
	margin-bottom: 4px;
}

div.inline-attachment p {
	font-size: 100%;
}

dl.file {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	display: block;
}

dl.file dt {
	text-transform: none;
	margin: 0;
	padding: 0;
	font-weight: bold;
	font-family: Verdana, Arial, Helvetica, sans-serif;
}

dl.file dd {
	margin: 0;
	padding: 0;
}

dl.thumbnail img {
	padding: 3px;
	border: 1px solid transparent;
	box-sizing: border-box;
}

dl.thumbnail dd {
	font-style: italic;
	font-family: Verdana, Arial, Helvetica, sans-serif;
}

.attachbox dl.thumbnail dd {
	font-size: 100%;
}

dl.thumbnail dt a:hover img {
	border: 1px solid transparent;
}

/* Post poll styles
----------------------------------------*/
fieldset.polls {
	font-family: "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif;
}

fieldset.polls dl {
	margin-top: 5px;
	border-top: 1px solid transparent;
	padding: 5px 0 0 0;
	line-height: 120%;
}

fieldset.polls dl.voted {
	font-weight: bold;
}

fieldset.polls dt {
	text-align: left;
	float: left;
	display: block;
	width: 30%;
	border-right: none;
	padding: 0;
	margin: 0;
	font-size: 1.1em;
}

fieldset.polls dd {
	float: left;
	width: 10%;
	border-left: none;
	padding: 0 5px;
	margin-left: 0;
	font-size: 1.1em;
}

fieldset.polls dd.resultbar {
	width: 50%;
}

fieldset.polls dd input {
	margin: 2px 0;
}

fieldset.polls dd div {
	text-align: right;
	font-family: Arial, Helvetica, sans-serif;
	font-weight: bold;
	padding: 0 2px;
	overflow: visible;
	min-width: 8px;
}

.pollbar1, .pollbar2, .pollbar3, .pollbar4, .pollbar5 {
	border-bottom: 1px solid transparent;
	border-right: 1px solid transparent;
}

.vote-submitted {
	font-size: 1.2em;
	font-weight: bold;
	text-align: center;
}

/* Poster profile block
----------------------------------------*/
.postprofile {
	margin: 5px 0 10px 0;
	min-height: 80px;
	border: 1px solid transparent;
	border-width: 0 0 0 1px;
	width: 22%;
	float: right;
	display: inline;
}

.postprofile dd, .postprofile dt {
	line-height: 1.4em;
	margin-left: 8px;
}

.postprofile .username, .postprofile dt {
	font-size: 1.2em;
	line-height: 1.2em;
}

.postprofile .username-coloured, .postprofile dt {
	font-size: 1.2em;
	line-height: 1.3em;
}

.postprofile dd {
	overflow: hidden;
	text-overflow: ellipsis;
}

.postprofile strong {
	font-weight: normal;
}

.postprofile dt.no-profile-rank, .postprofile dd.profile-rank, .postprofile .search-result-date {
	margin-bottom: 10px;
}

/* Post-profile avatars */
.postprofile .has-avatar .avatar-container {
	margin-bottom: 3px;
	overflow: hidden;
}

.postprofile .avatar {
	display: block;
	float: left;
	max-width: 100%;
}

.postprofile .avatar img {
	display: block;
	height: auto !important;
	max-width: 100%;
}

.postprofile .profile-posts a {
	font-weight: normal;
}

dd.profile-warnings {
	font-weight: bold;
}

dd.profile-contact {
	overflow: visible;
}

.profile-contact .dropdown-container {
	display: inline-block;
}

.profile-contact .icon_contact {
	vertical-align: middle;
}

.profile-contact .dropdown {
	margin-right: -14px;
}

.online {
	background-image: none;
	background-position: 100% 0;
	background-repeat: no-repeat;
}

/* Poster profile used by search*/
.search .postprofile {
	width: 30%;
}

/* Profile used on view-profile */
.profile-avatar img {
	max-width: 100%;
}

/* pm list in compose message if mass pm is enabled */
dl.pmlist dt {
	width: 60% !important;
}

dl.pmlist dt textarea {
	width: 95%;
}

dl.pmlist dd {
	margin-left: 61% !important;
	margin-bottom: 2px;
}

.action-bar div.dl_links {
	padding: 10px 0 0 10px;
}

div.dl_links {
	display: inline-block;
	text-transform: none;
}

.dl_links strong {
	font-weight: bold;
}

.dl_links ul {
	list-style-type: none;
	margin: 0;
	display: inline-block;
}

.dl_links li {
	display: inline-block;
}

.attachment-filename {
	width: 100%;
}

.ellipsis-text {
	display: inline-block;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

table.fixed-width-table {
	table-layout: fixed;
}

/* Show scrollbars for items with overflow on iOS devices
----------------------------------------*/
.postbody .content::-webkit-scrollbar, #topicreview::-webkit-scrollbar, #post_details::-webkit-scrollbar, .codebox code::-webkit-scrollbar, .attachbox dd::-webkit-scrollbar, .attach-image::-webkit-scrollbar, .dropdown-extended ul::-webkit-scrollbar {
	width: 8px;
	height: 8px;
	-webkit-appearance: none;
	background: rgba(0, 0, 0, .1);
	border-radius: 3px;
}

.postbody .content::-webkit-scrollbar-thumb, #topicreview::-webkit-scrollbar-thumb, #post_details::-webkit-scrollbar-thumb, .codebox code::-webkit-scrollbar-thumb, .attachbox dd::-webkit-scrollbar-thumb, .attach-image::-webkit-scrollbar-thumb, .dropdown-extended ul::-webkit-scrollbar-thumb {
	background: rgba(0, 0, 0, .3);
	border-radius: 3px;
}
PS: Percebi que postei na área incorreta, seria no Styles phpBB 3.1X, me perdoem
Avatar do usuário
LucasLV
Moderador
Moderador
Mensagens: 712
Registrado em: 18 Out 2013, 04:40

Re: Colocar o username acima do avatar no prosilver

Mensagem por LucasLV »

Refresh: Eu estava lendo alguns tópicos no suporte do phpBB, e o pessoal disse que não era recomendado alterar os code padrões do phpBB, então agora fico na dúvida. Mas mesmo assim se puderem me ajudar com essa dúvida do tópico. Mesmo que numa atualização futura isso se perca pela substituição dos arquivos.
Avatar do usuário
Chico Gois
Administrador
Administrador
Mensagens: 3644
Registrado em: 03 Jul 2004, 03:53
Nome Real: Chico Gois
Localização: São Paulo - Capital
Contact:

Re: Colocar o username acima do avatar no prosilver

Mensagem por Chico Gois »

Faça um teste:

Abra: styles/prosilver/viewtopic_body.html
Localize:

Código: Selecionar todos

            <div class="avatar-container">
               <!-- EVENT viewtopic_body_avatar_before -->
               <!-- IF postrow.POSTER_AVATAR -->
                  <!-- IF postrow.U_POST_AUTHOR --><a href="{postrow.U_POST_AUTHOR}" class="avatar">{postrow.POSTER_AVATAR}</a><!-- ELSE --><span class="avatar">{postrow.POSTER_AVATAR}</span><!-- ENDIF -->
               <!-- ENDIF -->
               <!-- EVENT viewtopic_body_avatar_after -->
            </div>
Copie e cole depois de:

Código: Selecionar todos

            <!-- EVENT viewtopic_body_post_author_before -->
            <!-- IF not postrow.U_POST_AUTHOR --><strong>{postrow.POST_AUTHOR_FULL}</strong><!-- ELSE -->{postrow.POST_AUTHOR_FULL}<!-- ENDIF -->
            <!-- EVENT viewtopic_body_post_author_after -->
E apague o primeiro para não ficar duplicado
Avatar do usuário
LucasLV
Moderador
Moderador
Mensagens: 712
Registrado em: 18 Out 2013, 04:40

Re: Colocar o username acima do avatar no prosilver

Mensagem por LucasLV »

Chico Gois escreveu:Faça um teste:

Abra: styles/prosilver/viewtopic_body.html
Localize:

Código: Selecionar todos

            <div class="avatar-container">
               <!-- EVENT viewtopic_body_avatar_before -->
               <!-- IF postrow.POSTER_AVATAR -->
                  <!-- IF postrow.U_POST_AUTHOR --><a href="{postrow.U_POST_AUTHOR}" class="avatar">{postrow.POSTER_AVATAR}</a><!-- ELSE --><span class="avatar">{postrow.POSTER_AVATAR}</span><!-- ENDIF -->
               <!-- ENDIF -->
               <!-- EVENT viewtopic_body_avatar_after -->
            </div>
Copie e cole depois de:

Código: Selecionar todos

            <!-- EVENT viewtopic_body_post_author_before -->
            <!-- IF not postrow.U_POST_AUTHOR --><strong>{postrow.POST_AUTHOR_FULL}</strong><!-- ELSE -->{postrow.POST_AUTHOR_FULL}<!-- ENDIF -->
            <!-- EVENT viewtopic_body_post_author_after -->
E apague o primeiro para não ficar duplicado
Deu certo, Chico! :)

Muito obrigado.

Para centralizar esse username,eu teria que fazê-lo no arquivo .css?
henrique.seven2011
Moderador
Moderador
Mensagens: 986
Registrado em: 23 Mar 2012, 13:50
Nome Real: Saulo Henrique

Re: Colocar o username acima do avatar no prosilver

Mensagem por henrique.seven2011 »

Substitua

Código: Selecionar todos

            <!-- EVENT viewtopic_body_post_author_before -->
            <!-- IF not postrow.U_POST_AUTHOR --><strong>{postrow.POST_AUTHOR_FULL}</strong><!-- ELSE -->{postrow.POST_AUTHOR_FULL}<!-- ENDIF -->
            <!-- EVENT viewtopic_body_post_author_after -->
Por:

Código: Selecionar todos

            <!-- EVENT viewtopic_body_post_author_before -->
            <!-- IF not postrow.U_POST_AUTHOR --><center><strong>{postrow.POST_AUTHOR_FULL}</strong></center><!-- ELSE -->{postrow.POST_AUTHOR_FULL}<!-- ENDIF -->
            <!-- EVENT viewtopic_body_post_author_after -->
Cloud de Verdade?! Recomendo: Vultr, DigitalOcean e LetsCloud | Freelancer a disposição!
Avatar do usuário
LucasLV
Moderador
Moderador
Mensagens: 712
Registrado em: 18 Out 2013, 04:40

Re: Colocar o username acima do avatar no prosilver

Mensagem por LucasLV »

Henrique, não funcionou! :(

Imagem

Porém, percebi que se um visitante comentar fica assim:

Imagem

Funfou só com os visitantes, o que é estranho ;(

Teria como centralizar o avatar, o título do rank e o rank tbm?
Responder