aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/code_sniffer/phpbb/Sniffs/Namespaces/UnusedUseSniff.php118
-rw-r--r--phpBB/adm/style/acp_icons.html16
-rw-r--r--phpBB/includes/acp/acp_email.php73
-rw-r--r--phpBB/language/en/acp/common.php1
-rw-r--r--phpBB/language/en/acp/search.php2
-rw-r--r--phpBB/language/en/search.php1
-rw-r--r--phpBB/phpbb/db/tools.php2
-rw-r--r--phpBB/phpbb/request/request.php2
-rw-r--r--phpBB/phpbb/template/twig/twig.php5
-rw-r--r--phpBB/report.php18
-rw-r--r--phpBB/search.php2
-rw-r--r--phpBB/styles/prosilver/template/overall_header.html2
-rw-r--r--phpBB/styles/prosilver/template/simple_header.html2
-rw-r--r--phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html2
-rw-r--r--phpBB/styles/prosilver/template/viewtopic_body.html2
-rw-r--r--phpBB/styles/prosilver/template/viewtopic_print.html2
-rw-r--r--phpBB/styles/subsilver2/template/index.htm2
-rw-r--r--phpBB/styles/subsilver2/template/overall_header.html2
-rw-r--r--phpBB/styles/subsilver2/template/simple_header.html2
-rw-r--r--phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html4
-rw-r--r--phpBB/styles/subsilver2/template/viewtopic_print.html4
-rw-r--r--phpBB/styles/subsilver2/theme/images/index.htm2
-rw-r--r--phpBB/viewforum.php6
23 files changed, 178 insertions, 94 deletions
diff --git a/build/code_sniffer/phpbb/Sniffs/Namespaces/UnusedUseSniff.php b/build/code_sniffer/phpbb/Sniffs/Namespaces/UnusedUseSniff.php
index f81ec46579..87e676b8ff 100644
--- a/build/code_sniffer/phpbb/Sniffs/Namespaces/UnusedUseSniff.php
+++ b/build/code_sniffer/phpbb/Sniffs/Namespaces/UnusedUseSniff.php
@@ -24,6 +24,23 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
return array(T_USE);
}
+ protected function check($found_name, $full_name, $short_name, $line)
+ {
+
+ if ($found_name === $full_name)
+ {
+ $error = 'Either use statement or full name must be used.';
+ $phpcsFile->addError($error, $line, 'FullName');
+ }
+
+ if ($found_name === $short_name)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
/**
* {@inheritdoc}
*/
@@ -74,16 +91,7 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
$simple_class_name = trim($phpcsFile->getTokensAsString($simple_class_name_start, ($simple_class_name_end - $simple_class_name_start)));
- if ($simple_class_name === $class_name_full)
- {
- $error = 'Either use statement or full name must be used.';
- $phpcsFile->addError($error, $simple_statement, 'FullName');
- }
-
- if ($simple_class_name === $class_name_short)
- {
- $ok = true;
- }
+ $ok = $this->check($simple_class_name, $class_name_full, $class_name_short, $simple_statement) ? true : $ok;
}
}
@@ -98,16 +106,7 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
$paamayim_nekudotayim_class_name = trim($phpcsFile->getTokensAsString($paamayim_nekudotayim_class_name_start + 1, ($paamayim_nekudotayim_class_name_end - $paamayim_nekudotayim_class_name_start)));
- if ($paamayim_nekudotayim_class_name === $class_name_full)
- {
- $error = 'Either use statement or full name must be used.';
- $phpcsFile->addError($error, $paamayim_nekudotayim, 'FullName');
- }
-
- if ($paamayim_nekudotayim_class_name === $class_name_short)
- {
- $ok = true;
- }
+ $ok = $this->check($paamayim_nekudotayim_class_name, $class_name_full, $class_name_short, $paamayim_nekudotayim) ? true : $ok;
}
// Checks in implements
@@ -126,16 +125,7 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
$implements_class_name = trim($phpcsFile->getTokensAsString($implements_class_name_start, ($implements_class_name_end - $implements_class_name_start)));
- if ($implements_class_name === $class_name_full)
- {
- $error = 'Either use statement or full name must be used.';
- $phpcsFile->addError($error, $implements, 'FullName');
- }
-
- if ($implements_class_name === $class_name_short)
- {
- $ok = true;
- }
+ $ok = $this->check($implements_class_name, $class_name_full, $class_name_short, $implements) ? true : $ok;
}
}
@@ -145,34 +135,64 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
{
$old_function_declaration = $function_declaration;
- $end_function = $phpcsFile->findNext(array(T_CLOSE_PARENTHESIS), ($function_declaration + 1));
- $old_argument = $function_declaration;
- while (($argument = $phpcsFile->findNext(T_VARIABLE, ($old_argument + 1), $end_function)) !== false)
+ // Check docblocks
+ $find = array(
+ T_COMMENT,
+ T_DOC_COMMENT,
+ T_CLASS,
+ T_FUNCTION,
+ T_OPEN_TAG,
+ );
+
+ $comment_end = $phpcsFile->findPrevious($find, ($function_declaration - 1));
+ if ($comment_end !== false)
{
- $old_argument = $argument;
-
- $start_argument = $phpcsFile->findPrevious(array(T_OPEN_PARENTHESIS, T_COMMA), $argument);
- $argument_class_name_start = $phpcsFile->findNext(array(T_NS_SEPARATOR, T_STRING), ($start_argument + 1), $argument);
-
- // Skip the parameter if no type is defined.
- if ($argument_class_name_start !== false)
+ if (!$tokens[$comment_end]['code'] !== T_DOC_COMMENT)
{
- $argument_class_name_end = $phpcsFile->findNext($find, ($argument_class_name_start + 1), null, true);
-
- $argument_class_name = $phpcsFile->getTokensAsString($argument_class_name_start, ($argument_class_name_end - $argument_class_name_start - 1));
+ $comment_start = ($phpcsFile->findPrevious(T_DOC_COMMENT, ($comment_end - 1), null, true) + 1);
+ $comment = $phpcsFile->getTokensAsString($comment_start, ($comment_end - $comment_start + 1));
- if ($argument_class_name === $class_name_full)
+ try
{
- $error = 'Either use statement or full name must be used.';
- $phpcsFile->addError($error, $function_declaration, 'FullName');
+ $comment_parser = new PHP_CodeSniffer_CommentParser_FunctionCommentParser($comment, $phpcsFile);
+ $comment_parser->parse();
+
+ // Check @param
+ foreach ($comment_parser->getParams() as $param) {
+ $type = $param->getType();
+ $types = explode('|', str_replace('[]', '', $type));
+ foreach ($types as $type)
+ {
+ $ok = $this->check($type, $class_name_full, $class_name_short, $param->getLine() + $comment_start) ? true : $ok;
+ }
+ }
+
+ // Check @return
+ $return = $comment_parser->getReturn();
+ if ($return !== null)
+ {
+ $type = $return->getValue();
+ $types = explode('|', str_replace('[]', '', $type));
+ foreach ($types as $type)
+ {
+ $ok = $this->check($type, $class_name_full, $class_name_short, $return->getLine() + $comment_start) ? true : $ok;
+ }
+ }
}
-
- if ($argument_class_name === $class_name_short)
+ catch (PHP_CodeSniffer_CommentParser_ParserException $e)
{
- $ok = true;
+ $line = ($e->getLineWithinComment() + $comment_start);
+ $phpcsFile->addError($e->getMessage(), $line, 'FailedParse');
}
}
}
+
+ // Check type hint
+ $params = $phpcsFile->getMethodParameters($function_declaration);
+ foreach ($params as $param)
+ {
+ $ok = $this->check($param['type_hint'], $class_name_full, $class_name_short, $function_declaration) ? true : $ok;
+ }
}
if (!$ok)
diff --git a/phpBB/adm/style/acp_icons.html b/phpBB/adm/style/acp_icons.html
index 9117052d87..f18dad0ef6 100644
--- a/phpBB/adm/style/acp_icons.html
+++ b/phpBB/adm/style/acp_icons.html
@@ -7,7 +7,7 @@
<script type="text/javascript" defer="defer">
// <![CDATA[
<!-- IF S_ADD_CODE -->
-
+
var smiley = Array();
<!-- BEGIN smile -->
smiley['{smile.SMILEY_URL}'] = Array();
@@ -37,10 +37,10 @@
}
}
}
-
+
<!-- ENDIF -->
-
+
function toggle_select(icon, display, select)
{
var disp = document.getElementById('order_disp_' + select);
@@ -101,7 +101,7 @@
<tbody>
<!-- BEGIN items -->
<tr>
-
+
<td style="text-align: center;"><img src="{items.IMG_SRC}" alt="" title="" /><input type="hidden" name="image[{items.IMG}]" value="1" /></td>
<td style="vertical-align: top;">[{items.IMG}]</td>
<!-- IF S_SMILIES -->
@@ -121,7 +121,7 @@
<optgroup id="order_disp_{items.S_ROW_COUNT}" label="{L_DISPLAY_POSTING}" <!-- IF not items.POSTING_CHECKED -->disabled="disabled" class="disabled-options" <!-- ENDIF -->>{S_ORDER_LIST_DISPLAY}</optgroup>
<optgroup id="order_no_disp_{items.S_ROW_COUNT}" label="{L_DISPLAY_POSTING_NO}" <!-- IF items.POSTING_CHECKED -->disabled="disabled" class="disabled-options" <!-- ENDIF -->>{S_ORDER_LIST_UNDISPLAY}</optgroup>
</select></td>
- <!-- ENDIF -->
+ <!-- ENDIF -->
<!-- IF S_ADD -->
<td><input type="checkbox" class="radio" name="add_img[{items.IMG}]" value="1" /></td>
<!-- ENDIF -->
@@ -147,6 +147,8 @@
</tr>
<!-- ENDIF -->
<!-- ELSE -->
+ </thead>
+ <tbody>
<tr class="row3">
<td colspan="{COLSPAN}">{L_NO_ICONS}</td>
</tr>
@@ -174,7 +176,7 @@
<fieldset>
<legend>{L_IMPORT}</legend>
-
+
<!-- IF not S_PAK_OPTIONS -->
<p>{L_NO_PAK_OPTIONS}</p>
@@ -259,7 +261,7 @@
</table>
<div class="pagination">
<!-- IF .pagination -->
- <!-- INCLUDE pagination.html -->
+ <!-- INCLUDE pagination.html -->
<!-- ENDIF -->
</div>
<p class="quick">
diff --git a/phpBB/includes/acp/acp_email.php b/phpBB/includes/acp/acp_email.php
index 4fefd6bec3..4671a026eb 100644
--- a/phpBB/includes/acp/acp_email.php
+++ b/phpBB/includes/acp/acp_email.php
@@ -40,6 +40,7 @@ class acp_email
$error = array();
$usernames = request_var('usernames', '', true);
+ $usernames = explode("\n", $usernames);
$group_id = request_var('g', 0);
$subject = utf8_normalize_nfc(request_var('subject', '', true));
$message = utf8_normalize_nfc(request_var('message', '', true));
@@ -69,7 +70,7 @@ class acp_email
if (!sizeof($error))
{
- if ($usernames)
+ if (!empty($usernames))
{
// If giving usernames the admin is able to email inactive users too...
$sql_ary = array(
@@ -77,7 +78,7 @@ class acp_email
'FROM' => array(
USERS_TABLE => '',
),
- 'WHERE' => $db->sql_in_set('username_clean', array_map('utf8_clean_string', explode("\n", $usernames))) . '
+ 'WHERE' => $db->sql_in_set('username_clean', array_map('utf8_clean_string', $usernames)) . '
AND user_allow_massemail = 1',
'ORDER_BY' => 'user_lang, user_notify_type',
);
@@ -194,6 +195,39 @@ class acp_email
$errored = false;
+ $email_template = 'admin_send_email';
+ $template_data = array(
+ 'CONTACT_EMAIL' => phpbb_get_board_contact($config, $phpEx),
+ 'MESSAGE' => htmlspecialchars_decode($message),
+ );
+ $generate_log_entry = true;
+
+ /**
+ * Modify email template data before the emails are sent
+ *
+ * @event core.acp_email_send_before
+ * @var string email_template The template to be used for sending the email
+ * @var string subject The subject of the email
+ * @var array template_data Array with template data assigned to email template
+ * @var bool generate_log_entry If false, no log entry will be created
+ * @var array usernames Usernames which will be displayed in log entry, if it will be created
+ * @var int group_id The group this email will be sent to
+ * @var bool use_queue If true, email queue will be used for sending
+ * @var int priority Priority of sent emails
+ * @since 3.1.3-RC1
+ */
+ $vars = array(
+ 'email_template',
+ 'subject',
+ 'template_data',
+ 'generate_log_entry',
+ 'usernames',
+ 'group_id',
+ 'use_queue',
+ 'priority',
+ );
+ extract($phpbb_dispatcher->trigger_event('core.acp_email_send_before', compact($vars)));
+
for ($i = 0, $size = sizeof($email_list); $i < $size; $i++)
{
$used_lang = $email_list[$i][0]['lang'];
@@ -207,17 +241,14 @@ class acp_email
$messenger->im($email_row['jabber'], $email_row['name']);
}
- $messenger->template('admin_send_email', $used_lang);
+ $messenger->template($email_template, $used_lang);
$messenger->anti_abuse_headers($config, $user);
$messenger->subject(htmlspecialchars_decode($subject));
$messenger->set_mail_priority($priority);
- $messenger->assign_vars(array(
- 'CONTACT_EMAIL' => phpbb_get_board_contact($config, $phpEx),
- 'MESSAGE' => htmlspecialchars_decode($message))
- );
+ $messenger->assign_vars($template_data);
if (!($messenger->send($used_method)))
{
@@ -228,24 +259,26 @@ class acp_email
$messenger->save_queue();
- if ($usernames)
- {
- $usernames = explode("\n", $usernames);
- add_log('admin', 'LOG_MASS_EMAIL', implode(', ', utf8_normalize_nfc($usernames)));
- }
- else
+ if ($generate_log_entry)
{
- if ($group_id)
+ if (!empty($usernames))
{
- $group_name = get_group_name($group_id);
+ add_log('admin', 'LOG_MASS_EMAIL', implode(', ', utf8_normalize_nfc($usernames)));
}
else
{
- // Not great but the logging routine doesn't cope well with localising on the fly
- $group_name = $user->lang['ALL_USERS'];
- }
+ if ($group_id)
+ {
+ $group_name = get_group_name($group_id);
+ }
+ else
+ {
+ // Not great but the logging routine doesn't cope well with localising on the fly
+ $group_name = $user->lang['ALL_USERS'];
+ }
- add_log('admin', 'LOG_MASS_EMAIL', $group_name);
+ add_log('admin', 'LOG_MASS_EMAIL', $group_name);
+ }
}
if (!$errored)
@@ -286,7 +319,7 @@ class acp_email
'WARNING_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
'U_ACTION' => $this->u_action,
'S_GROUP_OPTIONS' => $select_list,
- 'USERNAMES' => $usernames,
+ 'USERNAMES' => implode("\n", $usernames),
'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=acp_email&amp;field=usernames'),
'SUBJECT' => $subject,
'MESSAGE' => $message,
diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php
index 91fc1215fc..fdbc4aebd0 100644
--- a/phpBB/language/en/acp/common.php
+++ b/phpBB/language/en/acp/common.php
@@ -558,6 +558,7 @@ $lang = array_merge($lang, array(
'LOG_LOCK_POST' => '<strong>Locked post</strong><br />» %s',
'LOG_MERGE' => '<strong>Merged posts</strong> into topic<br />» %s',
'LOG_MOVE' => '<strong>Moved topic</strong><br />» from %1$s to %2$s',
+ 'LOG_MOVED_TOPIC' => '<strong>Moved topic</strong><br />» %s',
'LOG_PM_REPORT_CLOSED' => '<strong>Closed PM report</strong><br />» %s',
'LOG_PM_REPORT_DELETED' => '<strong>Deleted PM report</strong><br />» %s',
'LOG_POST_APPROVED' => '<strong>Approved post</strong><br />» %s',
diff --git a/phpBB/language/en/acp/search.php b/phpBB/language/en/acp/search.php
index 98412cb050..bda965b615 100644
--- a/phpBB/language/en/acp/search.php
+++ b/phpBB/language/en/acp/search.php
@@ -84,7 +84,7 @@ $lang = array_merge($lang, array(
'FULLTEXT_SPHINX_WRONG_DATABASE' => 'The sphinx search for phpBB supports MySQL and PostgreSQL only.',
'FULLTEXT_SPHINX_CONFIG_FILE' => 'Sphinx config file',
'FULLTEXT_SPHINX_CONFIG_FILE_EXPLAIN' => 'The generated content of the sphinx config file. This data needs to be pasted into the sphinx.conf which is used by sphinx search daemon. Replace the [dbuser] and [dbpassword] placeholders with your database credentials.',
- 'FULLTEXT_SPHINX_NO_CONFIG_DATA' => 'The sphinx data and config directory paths are not defined. Please define them to generate the config file.',
+ 'FULLTEXT_SPHINX_NO_CONFIG_DATA' => 'The sphinx data directory path is not defined. Please define the path and submit to generate the config file.',
'GENERAL_SEARCH_SETTINGS' => 'General search settings',
'GO_TO_SEARCH_INDEX' => 'Go to search index page',
diff --git a/phpBB/language/en/search.php b/phpBB/language/en/search.php
index ec5dd99eb8..13e5bf7a97 100644
--- a/phpBB/language/en/search.php
+++ b/phpBB/language/en/search.php
@@ -71,6 +71,7 @@ $lang = array_merge($lang, array(
'NO_RECENT_SEARCHES' => 'No searches have been carried out recently.',
'NO_SEARCH' => 'Sorry but you are not permitted to use the search system.',
'NO_SEARCH_RESULTS' => 'No suitable matches were found.',
+ 'NO_SEARCH_LOAD' => 'Sorry but you cannot use search at this time. The server has high load. Please try again later.',
'NO_SEARCH_TIME' => array(
1 => 'Sorry but you cannot use search at this time. Please try again in %d second.',
2 => 'Sorry but you cannot use search at this time. Please try again in %d seconds.',
diff --git a/phpBB/phpbb/db/tools.php b/phpBB/phpbb/db/tools.php
index c8d25f23a2..f523b39fb3 100644
--- a/phpBB/phpbb/db/tools.php
+++ b/phpBB/phpbb/db/tools.php
@@ -2175,7 +2175,7 @@ class tools
}
// no break
case 'mysql_41':
- $statements[] = 'ALTER TABLE ' . $table_name . ' ADD INDEX ' . $index_name . '(' . implode(', ', $column) . ')';
+ $statements[] = 'ALTER TABLE ' . $table_name . ' ADD INDEX ' . $index_name . ' (' . implode(', ', $column) . ')';
break;
case 'mssql':
diff --git a/phpBB/phpbb/request/request.php b/phpBB/phpbb/request/request.php
index f0f2f7e2a2..56ce3999ed 100644
--- a/phpBB/phpbb/request/request.php
+++ b/phpBB/phpbb/request/request.php
@@ -275,7 +275,7 @@ class request implements \phpbb\request\request_interface
*/
public function file($form_name)
{
- return $this->variable($form_name, array('name' => 'none'), false, \phpbb\request\request_interface::FILES);
+ return $this->variable($form_name, array('name' => 'none'), true, \phpbb\request\request_interface::FILES);
}
/**
diff --git a/phpBB/phpbb/template/twig/twig.php b/phpBB/phpbb/template/twig/twig.php
index 5b71bb5e8a..db3a8e3571 100644
--- a/phpBB/phpbb/template/twig/twig.php
+++ b/phpBB/phpbb/template/twig/twig.php
@@ -115,6 +115,11 @@ class twig extends \phpbb\template\base
)
);
+ if (defined('DEBUG'))
+ {
+ $this->twig->addExtension(new \Twig_Extension_Debug());
+ }
+
$lexer = new \phpbb\template\twig\lexer($this->twig);
$this->twig->setLexer($lexer);
diff --git a/phpBB/report.php b/phpBB/report.php
index 1b5d3c9d46..3ea6bb40c5 100644
--- a/phpBB/report.php
+++ b/phpBB/report.php
@@ -99,6 +99,24 @@ if ($post_id)
// Check required permissions
$acl_check_ary = array('f_list' => 'POST_NOT_EXIST', 'f_read' => 'USER_CANNOT_READ', 'f_report' => 'USER_CANNOT_REPORT');
+ /**
+ * This event allows you to do extra auth checks and verify if the user
+ * has the required permissions
+ *
+ * @event core.report_post_auth
+ * @var array forum_data All data available from the forums table on this post's forum
+ * @var array report_data All data available from the topics and the posts tables on this post (and its topic)
+ * @var array acl_check_ary An array with the ACL to be tested. The evaluation is made in the same order as the array is sorted
+ * The key is the ACL name and the value is the language key for the error message.
+ * @since 3.1.3-RC1
+ */
+ $vars = array(
+ 'forum_data',
+ 'report_data',
+ 'acl_check_ary',
+ );
+ extract($phpbb_dispatcher->trigger_event('core.report_post_auth', compact($vars)));
+
foreach ($acl_check_ary as $acl => $error)
{
if (!$auth->acl_get($acl, $forum_id))
diff --git a/phpBB/search.php b/phpBB/search.php
index 5ba818c383..164d834ff2 100644
--- a/phpBB/search.php
+++ b/phpBB/search.php
@@ -101,7 +101,7 @@ if (!$auth->acl_get('u_search') || !$auth->acl_getf_global('f_search') || !$conf
if ($user->load && $config['limit_search_load'] && ($user->load > doubleval($config['limit_search_load'])))
{
$template->assign_var('S_NO_SEARCH', true);
- trigger_error('NO_SEARCH_TIME');
+ trigger_error('NO_SEARCH_LOAD');
}
// It is applicable if the configuration setting is non-zero, and the user cannot
diff --git a/phpBB/styles/prosilver/template/overall_header.html b/phpBB/styles/prosilver/template/overall_header.html
index ad08c1220b..121094f6e0 100644
--- a/phpBB/styles/prosilver/template/overall_header.html
+++ b/phpBB/styles/prosilver/template/overall_header.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
-<meta charset="utf-8">
+<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
{META}
<title><!-- IF UNREAD_NOTIFICATIONS_COUNT -->({UNREAD_NOTIFICATIONS_COUNT}) <!-- ENDIF --><!-- IF not S_VIEWTOPIC and not S_VIEWFORUM -->{SITENAME} - <!-- ENDIF --><!-- IF S_IN_MCP -->{L_MCP} - <!-- ELSEIF S_IN_UCP -->{L_UCP} - <!-- ENDIF -->{PAGE_TITLE}<!-- IF S_VIEWTOPIC or S_VIEWFORUM --> - {SITENAME}<!-- ENDIF --></title>
diff --git a/phpBB/styles/prosilver/template/simple_header.html b/phpBB/styles/prosilver/template/simple_header.html
index 6d22a074be..a0c7bc68bb 100644
--- a/phpBB/styles/prosilver/template/simple_header.html
+++ b/phpBB/styles/prosilver/template/simple_header.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
-<meta charset="utf-8">
+<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
{META}
<title>{SITENAME} &bull; <!-- IF S_IN_MCP -->{L_MCP} &bull; <!-- ELSEIF S_IN_UCP -->{L_UCP} &bull; <!-- ENDIF -->{PAGE_TITLE}</title>
diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html b/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html
index ce0f4941a5..7fe0d67077 100644
--- a/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html
+++ b/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
-<meta charset="utf-8">
+<meta charset="utf-8" />
<meta name="robots" content="noindex" />
{META}
<title>{SITENAME} &bull; {PAGE_TITLE}</title>
diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html
index 621e2d6143..48bcc2e922 100644
--- a/phpBB/styles/prosilver/template/viewtopic_body.html
+++ b/phpBB/styles/prosilver/template/viewtopic_body.html
@@ -313,7 +313,7 @@
</div>
- <div class="back2top"><a href="#wrap" class="top" title="{L_BACK_TO_TOP}">{L_BACK_TO_TOP}</a></div>
+ <div class="back2top"><a href="#top" class="top" title="{L_BACK_TO_TOP}">{L_BACK_TO_TOP}</a></div>
</div>
</div>
diff --git a/phpBB/styles/prosilver/template/viewtopic_print.html b/phpBB/styles/prosilver/template/viewtopic_print.html
index 5c44f58adb..66199295bb 100644
--- a/phpBB/styles/prosilver/template/viewtopic_print.html
+++ b/phpBB/styles/prosilver/template/viewtopic_print.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
-<meta charset="utf-8">
+<meta charset="utf-8" />
<meta name="robots" content="noindex" />
{META}
<title>{SITENAME} &bull; {PAGE_TITLE}</title>
diff --git a/phpBB/styles/subsilver2/template/index.htm b/phpBB/styles/subsilver2/template/index.htm
index 4763c05f0e..a1356823e2 100644
--- a/phpBB/styles/subsilver2/template/index.htm
+++ b/phpBB/styles/subsilver2/template/index.htm
@@ -1,7 +1,7 @@
<html>
<head>
<title>subSilver created by subBlue Design</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body bgcolor="#FFFFFF" text="#000000">
diff --git a/phpBB/styles/subsilver2/template/overall_header.html b/phpBB/styles/subsilver2/template/overall_header.html
index 4741154889..225a7d85ff 100644
--- a/phpBB/styles/subsilver2/template/overall_header.html
+++ b/phpBB/styles/subsilver2/template/overall_header.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
-<meta charset="utf-8">
+<meta charset="utf-8" />
{META}
<title><!-- IF UNREAD_NOTIFICATIONS_COUNT -->({UNREAD_NOTIFICATIONS_COUNT}) <!-- ENDIF --><!-- IF not S_VIEWTOPIC and not S_VIEWFORUM -->{SITENAME} - <!-- ENDIF --><!-- IF S_IN_MCP -->{L_MCP} - <!-- ELSEIF S_IN_UCP -->{L_UCP} - <!-- ENDIF -->{PAGE_TITLE}<!-- IF S_VIEWTOPIC or S_VIEWFORUM --> - {SITENAME}<!-- ENDIF --></title>
diff --git a/phpBB/styles/subsilver2/template/simple_header.html b/phpBB/styles/subsilver2/template/simple_header.html
index d292c4594a..3abf89719f 100644
--- a/phpBB/styles/subsilver2/template/simple_header.html
+++ b/phpBB/styles/subsilver2/template/simple_header.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
-<meta charset="utf-8">
+<meta charset="utf-8" />
{META}
<title>{SITENAME} &bull; <!-- IF S_IN_MCP -->{L_MCP} &bull; <!-- ELSEIF S_IN_UCP -->{L_UCP} &bull; <!-- ENDIF -->{PAGE_TITLE}</title>
diff --git a/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html b/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html
index f70f39f9d8..fd5e390d83 100644
--- a/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html
+++ b/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
-<meta charset="utf-8">
+<meta charset="utf-8" />
<meta name="robots" content="noindex" />
<title>{SITENAME} :: {PAGE_TITLE}</title>
@@ -78,7 +78,7 @@ hr.sep {
<td width="10%" nowrap="nowrap">{L_PM_FROM}{L_COLON}&nbsp;</td>
<td><b>{MESSAGE_AUTHOR}</b> [ {SENT_DATE} ]</td>
</tr>
-
+
<!-- IF S_TO_RECIPIENT -->
<tr>
<td width="10%" nowrap="nowrap">{L_TO}{L_COLON}</td>
diff --git a/phpBB/styles/subsilver2/template/viewtopic_print.html b/phpBB/styles/subsilver2/template/viewtopic_print.html
index a99d807cf2..9497fda121 100644
--- a/phpBB/styles/subsilver2/template/viewtopic_print.html
+++ b/phpBB/styles/subsilver2/template/viewtopic_print.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
-<meta charset="utf-8">
+<meta charset="utf-8" />
<meta name="robots" content="noindex" />
<title>{SITENAME} :: {PAGE_TITLE}</title>
@@ -23,7 +23,7 @@ td {
line-height: 150%;
}
-.code, .codecontent,
+.code, .codecontent,
.quote, .quotecontent {
margin: 0 5px 0 5px;
padding: 5px;
diff --git a/phpBB/styles/subsilver2/theme/images/index.htm b/phpBB/styles/subsilver2/theme/images/index.htm
index 29531416fe..957f68a803 100644
--- a/phpBB/styles/subsilver2/theme/images/index.htm
+++ b/phpBB/styles/subsilver2/theme/images/index.htm
@@ -1,7 +1,7 @@
<html>
<head>
<title>subSilver created by subBlue Design</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body bgcolor="#FFFFFF" text="#000000">
diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php
index 1f455494f7..ce079cb262 100644
--- a/phpBB/viewforum.php
+++ b/phpBB/viewforum.php
@@ -395,7 +395,7 @@ $sql_array = array(
* @var array forum_data Array with forum data
* @var array sql_array The SQL array to get the data of all topics
* @since 3.1.0-a1
-* @change 3.1.0-RC4 Added forum_data var
+* @change 3.1.0-RC4 Added forum_data var
*/
$vars = array(
'forum_data',
@@ -554,6 +554,7 @@ $sql_ary = array(
* Event to modify the SQL query before the topic ids data is retrieved
*
* @event core.viewforum_get_topic_ids_data
+* @var array forum_data Data about the forum
* @var array sql_ary SQL query array to get the topic ids data
* @var string sql_approved Topic visibility SQL string
* @var int sql_limit Number of records to select
@@ -564,8 +565,11 @@ $sql_ary = array(
* @var bool store_reverse Flag indicating if we select from the late pages
*
* @since 3.1.0-RC4
+*
+* @changed 3.1.3 Added forum_data
*/
$vars = array(
+ 'forum_data',
'sql_ary',
'sql_approved',
'sql_limit',