aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/composer.json2
-rw-r--r--phpBB/composer.lock4
-rw-r--r--phpBB/config/default/container/services_console.yml37
-rw-r--r--phpBB/docs/README.html6
-rw-r--r--phpBB/includes/acp/acp_attachments.php2
-rw-r--r--phpBB/includes/acp/acp_forums.php2
-rw-r--r--phpBB/includes/bbcode.php5
-rw-r--r--phpBB/includes/functions_admin.php4
-rw-r--r--phpBB/includes/functions_convert.php16
-rw-r--r--phpBB/install/convert/convertor.php2
-rw-r--r--phpBB/install/convertors/convert_phpbb20.php2
-rwxr-xr-xphpBB/install/phpbbcli.php2
-rw-r--r--phpBB/language/en/cli.php19
-rw-r--r--phpBB/language/en/install.php2
-rw-r--r--phpBB/memberlist.php13
-rw-r--r--phpBB/phpbb/console/command/user/activate.php218
-rw-r--r--phpBB/phpbb/console/command/user/add.php32
-rw-r--r--phpBB/phpbb/console/command/user/delete.php170
-rw-r--r--phpBB/phpbb/console/command/user/reclean.php198
-rw-r--r--phpBB/phpbb/controller/resolver.php18
-rw-r--r--phpBB/phpbb/db/migration/data/v310/alpha1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/alpha2.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/alpha3.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/beta1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/beta2.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/beta3.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/beta4.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/gold.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/rc1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/rc2.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/rc3.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/rc4.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/rc5.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v310/rc6.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v311.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v312.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v312rc1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v313.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v313rc1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v313rc2.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v314.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v314rc1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v314rc2.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v315.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v315rc1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v316.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v316rc1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v317.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v317pl1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v317rc1.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v318.php5
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/v318rc1.php5
-rw-r--r--phpBB/phpbb/db/tools/mssql.php2
-rw-r--r--phpBB/phpbb/di/container_builder.php16
-rw-r--r--phpBB/phpbb/install/module/install_database/task/add_config_settings.php9
-rw-r--r--phpBB/phpbb/install/module/update_database/task/update.php3
-rw-r--r--phpBB/phpbb/install/module/update_filesystem/task/file_check.php1
-rw-r--r--phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php21
-rw-r--r--phpBB/phpbb/module/module_manager.php2
-rw-r--r--phpBB/phpbb/notification/type/quote.php4
-rw-r--r--phpBB/posting.php3
-rw-r--r--phpBB/styles/prosilver/style.cfg4
62 files changed, 915 insertions, 64 deletions
diff --git a/phpBB/composer.json b/phpBB/composer.json
index d6a4213c4a..b0c9b57cb6 100644
--- a/phpBB/composer.json
+++ b/phpBB/composer.json
@@ -62,7 +62,7 @@
},
"extra": {
"branch-alias": {
- "dev-master": "3.3.x-dev"
+ "dev-master": "3.2.x-dev"
}
}
}
diff --git a/phpBB/composer.lock b/phpBB/composer.lock
index f565c424fa..968447fd63 100644
--- a/phpBB/composer.lock
+++ b/phpBB/composer.lock
@@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "e61304256160e9e0c521a4996912d65d",
- "content-hash": "64ae8ac9ac0cc8b1f47e58f43e2d7461",
+ "hash": "9cbb41222e71eb86e0ef9118baafc691",
+ "content-hash": "03a990fa2d088c89afe4824d2d53e873",
"packages": [
{
"name": "bantu/ini-get-wrapper",
diff --git a/phpBB/config/default/container/services_console.yml b/phpBB/config/default/container/services_console.yml
index 0a28c0ed1f..3f27ee666a 100644
--- a/phpBB/config/default/container/services_console.yml
+++ b/phpBB/config/default/container/services_console.yml
@@ -220,6 +220,21 @@ services:
tags:
- { name: console.command }
+ console.command.user.activate:
+ class: phpbb\console\command\user\activate
+ arguments:
+ - '@user'
+ - '@dbal.conn'
+ - '@config'
+ - '@language'
+ - '@log'
+ - '@notification_manager'
+ - '@user_loader'
+ - '%core.root_path%'
+ - '%core.php_ext%'
+ tags:
+ - { name: console.command }
+
console.command.user.add:
class: phpbb\console\command\user\add
arguments:
@@ -232,3 +247,25 @@ services:
- '%core.php_ext%'
tags:
- { name: console.command }
+
+ console.command.user.delete:
+ class: phpbb\console\command\user\delete
+ arguments:
+ - '@user'
+ - '@dbal.conn'
+ - '@language'
+ - '@log'
+ - '@user_loader'
+ - '%core.root_path%'
+ - '%core.php_ext%'
+ tags:
+ - { name: console.command }
+
+ console.command.user.reclean:
+ class: phpbb\console\command\user\reclean
+ arguments:
+ - '@user'
+ - '@dbal.conn'
+ - '@language'
+ tags:
+ - { name: console.command }
diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html
index 20afc310db..a7906ac802 100644
--- a/phpBB/docs/README.html
+++ b/phpBB/docs/README.html
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="" />
-<meta name="description" content="phpBB 3.3.x Readme" />
+<meta name="description" content="phpBB 3.2.x Readme" />
<title>phpBB &bull; Readme</title>
<link href="assets/css/stylesheet.css" rel="stylesheet" type="text/css" media="screen" />
@@ -21,7 +21,7 @@
<div id="doc-description">
<a href="../index.php" id="logo"><img src="assets/images/site_logo.gif" alt="" /></a>
- <h1>phpBB 3.3.x Readme</h1>
+ <h1>phpBB 3.2.x Readme</h1>
<p style="display: none;"><a href="#start_here">Skip</a></p>
</div>
@@ -324,7 +324,7 @@
<div class="content">
- <p>phpBB 3.3.x takes advantage of new features added in PHP 5.4. We recommend that you upgrade to the latest stable release of PHP to run phpBB. The minimum version required is PHP 5.4.0 and the maximum supported version is PHP 7.0.</p>
+ <p>phpBB 3.2.x takes advantage of new features added in PHP 5.4. We recommend that you upgrade to the latest stable release of PHP to run phpBB. The minimum version required is PHP 5.4.0 and the maximum supported version is PHP 7.0.</p>
<p>Please remember that running any application on a development (unstable, e.g. a beta release) version of PHP can lead to strange/unexpected results which may appear to be bugs in the application. Therefore, we recommend you upgrade to the newest stable version of PHP before running phpBB. If you are running a development version of PHP please check any bugs you find on a system running a stable release before submitting.</p>
diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php
index ab413bf1d7..07ec6713a0 100644
--- a/phpBB/includes/acp/acp_attachments.php
+++ b/phpBB/includes/acp/acp_attachments.php
@@ -1431,7 +1431,7 @@ class acp_attachments
$row['group_name'] = $user->lang['NOT_ASSIGNED'];
$group_name[] = $row;
- for ($i = 0; $i < sizeof($group_name); $i++)
+ for ($i = 0, $groups_size = sizeof($group_name); $i < $groups_size; $i++)
{
if ($default_group === false)
{
diff --git a/phpBB/includes/acp/acp_forums.php b/phpBB/includes/acp/acp_forums.php
index c5d2d0ea09..3ea9d81887 100644
--- a/phpBB/includes/acp/acp_forums.php
+++ b/phpBB/includes/acp/acp_forums.php
@@ -1420,7 +1420,7 @@ class acp_forums
$diff = sizeof($moved_forums) * 2;
$moved_ids = array();
- for ($i = 0; $i < sizeof($moved_forums); ++$i)
+ for ($i = 0, $size = sizeof($moved_forums); $i < $size; ++$i)
{
$moved_ids[] = $moved_forums[$i]['forum_id'];
}
diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php
index e8969e552e..4b2aa90ebc 100644
--- a/phpBB/includes/bbcode.php
+++ b/phpBB/includes/bbcode.php
@@ -226,6 +226,11 @@ class bbcode
),
'preg' => array(
'#\[quote(?:=&quot;(.*?)&quot;)?:$uid\]((?!\[quote(?:=&quot;.*?&quot;)?:$uid\]).)?#is' => function ($match) {
+ if (!isset($match[2]))
+ {
+ $match[2] = '';
+ }
+
return $this->bbcode_second_pass_quote($match[1], $match[2]);
},
)
diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php
index a0073ec158..a84cbd9311 100644
--- a/phpBB/includes/functions_admin.php
+++ b/phpBB/includes/functions_admin.php
@@ -2999,8 +2999,8 @@ function add_permission_language()
$lang_files = $finder
->prefix('permissions_')
->suffix(".$phpEx")
- ->core_path('language/' . $user->lang_name . '/')
- ->extension_directory('/language/' . $user->lang_name)
+ ->core_path('language/')
+ ->extension_directory('/language')
->find();
foreach ($lang_files as $lang_file => $ext_name)
diff --git a/phpBB/includes/functions_convert.php b/phpBB/includes/functions_convert.php
index 3575768782..27d3658e36 100644
--- a/phpBB/includes/functions_convert.php
+++ b/phpBB/includes/functions_convert.php
@@ -479,7 +479,7 @@ function import_avatar_gallery($gallery_name = '', $subdirs_as_galleries = false
$dir->close();
}
- for ($i = 0; $i < sizeof($dirlist); ++$i)
+ for ($i = 0, $end = sizeof($dirlist); $i < $end; ++$i)
{
$dir = $dirlist[$i];
@@ -1425,7 +1425,7 @@ function get_path($src_path, $src_url, $test_file)
$path_array = array();
$phpbb_parts = explode('/', $script_path);
- for ($i = 0; $i < sizeof($url_parts); ++$i)
+ for ($i = 0, $end = sizeof($url_parts); $i < $end; ++$i)
{
if ($i < sizeof($phpbb_parts[$i]) && $url_parts[$i] == $phpbb_parts[$i])
{
@@ -1435,7 +1435,7 @@ function get_path($src_path, $src_url, $test_file)
else
{
$path = '';
- for ($j = $i; $j < sizeof($phpbb_parts); ++$j)
+ for ($j = $i, $end2 = sizeof($phpbb_parts); $j < $end2; ++$j)
{
$path .= '../';
}
@@ -2267,7 +2267,7 @@ function convert_bbcode($message, $convert_size = true, $extended_bbcodes = fals
"\n\n"
);
- for ($i = 0; $i < sizeof($str_from); ++$i)
+ for ($i = 0, $end = sizeof($str_from); $i < $end; ++$i)
{
$origx[] = '#\\' . str_replace(']', '\\]', $str_from[$i]) . '#is';
$replx[] = $str_to[$i];
@@ -2276,7 +2276,7 @@ function convert_bbcode($message, $convert_size = true, $extended_bbcodes = fals
if (preg_match_all('#\[email=([^\]]+)\](.*?)\[/email\]#i', $message, $m))
{
- for ($i = 0; $i < sizeof($m[1]); ++$i)
+ for ($i = 0, $end = sizeof($m[1]); $i < $end; ++$i)
{
if ($m[1][$i] == $m[2][$i])
{
@@ -2340,7 +2340,7 @@ function copy_file($src, $trg, $overwrite = false, $die_on_failure = true, $sour
$parts = explode('/', $trg);
unset($parts[sizeof($parts) - 1]);
- for ($i = 0; $i < sizeof($parts); ++$i)
+ for ($i = 0, $end = sizeof($parts); $i < $end; ++$i)
{
$path .= $parts[$i] . '/';
@@ -2440,7 +2440,7 @@ function copy_dir($src, $trg, $copy_subdirs = true, $overwrite = false, $die_on_
if ($copy_subdirs)
{
- for ($i = 0; $i < sizeof($dirlist); ++$i)
+ for ($i = 0, $end = sizeof($dirlist); $i < $end; ++$i)
{
$dir = $dirlist[$i];
@@ -2475,7 +2475,7 @@ function copy_dir($src, $trg, $copy_subdirs = true, $overwrite = false, $die_on_
$convert->p_master->error(sprintf($str, implode('<br />', $bad_dirs)), __LINE__, __FILE__);
}
- for ($i = 0; $i < sizeof($filelist); ++$i)
+ for ($i = 0, $end = sizeof($filelist); $i < $end; ++$i)
{
copy_file($src . $filelist[$i], $trg . $filelist[$i], $overwrite, $die_on_failure, $source_relative_path);
}
diff --git a/phpBB/install/convert/convertor.php b/phpBB/install/convert/convertor.php
index 769f8bb637..5a3799a7a1 100644
--- a/phpBB/install/convert/convertor.php
+++ b/phpBB/install/convert/convertor.php
@@ -373,7 +373,7 @@ class convertor
$val = array($val);
}
- for ($j = 0; $j < sizeof($val); ++$j)
+ for ($j = 0, $size = sizeof($val); $j < $size; ++$j)
{
if (preg_match('/LEFT JOIN ([a-z0-9_]+) AS ([a-z0-9_]+)/i', $val[$j], $m))
{
diff --git a/phpBB/install/convertors/convert_phpbb20.php b/phpBB/install/convertors/convert_phpbb20.php
index d0885dc620..977670c94c 100644
--- a/phpBB/install/convertors/convert_phpbb20.php
+++ b/phpBB/install/convertors/convert_phpbb20.php
@@ -38,7 +38,7 @@ $dbms = $phpbb_config_php_file->convert_30_dbms_to_31($dbms);
$convertor_data = array(
'forum_name' => 'phpBB 2.0.x',
'version' => '1.0.3',
- 'phpbb_version' => '3.3.0-a1-dev',
+ 'phpbb_version' => '3.2.0-b3-dev',
'author' => '<a href="https://www.phpbb.com/">phpBB Limited</a>',
'dbms' => $dbms,
'dbhost' => $dbhost,
diff --git a/phpBB/install/phpbbcli.php b/phpBB/install/phpbbcli.php
index 4b86f64e2a..87eab84b5a 100755
--- a/phpBB/install/phpbbcli.php
+++ b/phpBB/install/phpbbcli.php
@@ -23,7 +23,7 @@ if (php_sapi_name() !== 'cli')
define('IN_PHPBB', true);
define('IN_INSTALL', true);
define('PHPBB_ENVIRONMENT', 'production');
-define('PHPBB_VERSION', '3.3.0-a1-dev');
+define('PHPBB_VERSION', '3.2.0-b3-dev');
$phpbb_root_path = __DIR__ . '/../';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
diff --git a/phpBB/language/en/cli.php b/phpBB/language/en/cli.php
index 6cb516ebfd..db4b5f9ec6 100644
--- a/phpBB/language/en/cli.php
+++ b/phpBB/language/en/cli.php
@@ -82,11 +82,20 @@ $lang = array_merge($lang, array(
'CLI_DESCRIPTION_THUMBNAIL_GENERATE' => 'Generate all missing thumbnails.',
'CLI_DESCRIPTION_THUMBNAIL_RECREATE' => 'Recreate all thumbnails.',
+ 'CLI_DESCRIPTION_USER_ACTIVATE' => 'Activate (or deactivate) a user account.',
+ 'CLI_DESCRIPTION_USER_ACTIVATE_USERNAME' => 'Username of the account to activate.',
+ 'CLI_DESCRIPTION_USER_ACTIVATE_DEACTIVATE' => 'Deactivate the user’s account',
+ 'CLI_DESCRIPTION_USER_ACTIVATE_ACTIVE' => 'The user is already active.',
+ 'CLI_DESCRIPTION_USER_ACTIVATE_INACTIVE' => 'The user is already inactive.',
'CLI_DESCRIPTION_USER_ADD' => 'Add a new user.',
'CLI_DESCRIPTION_USER_ADD_OPTION_USERNAME' => 'Username of the new user',
'CLI_DESCRIPTION_USER_ADD_OPTION_PASSWORD' => 'Password of the new user',
'CLI_DESCRIPTION_USER_ADD_OPTION_EMAIL' => 'E-mail address of the new user',
'CLI_DESCRIPTION_USER_ADD_OPTION_NOTIFY' => 'Send account activation email to the new user (not sent by default)',
+ 'CLI_DESCRIPTION_USER_DELETE' => 'Delete a user account.',
+ 'CLI_DESCRIPTION_USER_DELETE_USERNAME' => 'Username of the user to delete',
+ 'CLI_DESCRIPTION_USER_DELETE_OPTION_POSTS' => 'Delete all posts by the user. Without this option, the user’s posts will be retained.',
+ 'CLI_DESCRIPTION_USER_RECLEAN' => 'Re-clean usernames.',
'CLI_EXTENSION_DISABLE_FAILURE' => 'Could not disable extension %s',
'CLI_EXTENSION_DISABLE_SUCCESS' => 'Successfully disabled extension %s',
@@ -126,12 +135,22 @@ $lang = array_merge($lang, array(
'CLI_THUMBNAIL_NOTHING_TO_DELETE' => 'No thumbnails to delete.',
'CLI_USER_ADD_SUCCESS' => 'Successfully added user %s.',
+ 'CLI_USER_DELETE_CONFIRM' => 'Are you sure you want to delete ‘%s’? [y/N]',
+ 'CLI_USER_RECLEAN_START' => 'Re-cleaning usernames',
+ 'CLI_USER_RECLEAN_DONE' => [
+ 0 => 'Re-cleaning complete. No usernames needed to be cleaned.',
+ 1 => 'Re-cleaning complete. %d username was cleaned.',
+ 2 => 'Re-cleaning complete. %d usernames were cleaned.',
+ ],
));
// Additional help for commands.
$lang = array_merge($lang, array(
'CLI_HELP_CRON_RUN' => $lang['CLI_DESCRIPTION_CRON_RUN'] . ' Optionally you can specify a cron task name to run only the specified cron task.',
+ 'CLI_HELP_USER_ACTIVATE' => 'Activate a user account, or deactivate an account using the <info>--deactivate</info> option.
+To optionally send an activation email to the user, use the <info>--send-email</info> option.',
'CLI_HELP_USER_ADD' => 'The <info>%command.name%</info> command adds a new user:
If this command is run without options, you will be prompted to enter them.
To optionally send an email to the new user, use the <info>--send-email</info> option.',
+ 'CLI_HELP_USER_RECLEAN' => 'Re-clean usernames will check all stored usernames and ensure clean versions are also stored. Cleaned usernames are a case insensitive form, NFC normalized and transformed to ASCII.',
));
diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php
index 39d53ece7b..9a727be649 100644
--- a/phpBB/language/en/install.php
+++ b/phpBB/language/en/install.php
@@ -523,7 +523,7 @@ $lang = array_merge($lang, array(
// Finish conversion
'CONVERT_COMPLETE' => 'Conversion completed',
- 'CONVERT_COMPLETE_EXPLAIN' => 'You have now successfully converted your board to phpBB 3.3. You can now login and <a href="../">access your board</a>. Please ensure that the settings were transferred correctly before enabling your board by deleting the install directory. Remember that help on using phpBB is available online via the <a href="https://www.phpbb.com/support/docs/en/3.3/ug/">Documentation</a> and the <a href="https://www.phpbb.com/community/viewforum.php?f=466">support forums</a>.',
+ 'CONVERT_COMPLETE_EXPLAIN' => 'You have now successfully converted your board to phpBB 3.2. You can now login and <a href="../">access your board</a>. Please ensure that the settings were transferred correctly before enabling your board by deleting the install directory. Remember that help on using phpBB is available online via the <a href="https://www.phpbb.com/support/docs/en/3.3/ug/">Documentation</a> and the <a href="https://www.phpbb.com/community/viewforum.php?f=466">support forums</a>.',
'CONV_ERROR_ATTACH_FTP_DIR' => 'FTP upload for attachments is enabled at the old board. Please disable the FTP upload option and make sure a valid upload directory is specified, then copy all attachment files to this new web accessible directory. Once you have done this, restart the convertor.',
'CONV_ERROR_CONFIG_EMPTY' => 'There is no configuration information available for the conversion.',
diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php
index 146ded0929..bfa28d8d11 100644
--- a/phpBB/memberlist.php
+++ b/phpBB/memberlist.php
@@ -93,6 +93,12 @@ $default_key = 'c';
$sort_key = $request->variable('sk', $default_key);
$sort_dir = $request->variable('sd', 'a');
+$user_types = array(USER_NORMAL, USER_FOUNDER);
+if ($auth->acl_get('a_user'))
+{
+ $user_types[] = USER_INACTIVE;
+}
+
// What do you want to do today? ... oops, I think that line is taken ...
switch ($mode)
{
@@ -834,7 +840,7 @@ switch ($mode)
$sql = 'SELECT username, user_id, user_colour
FROM ' . USERS_TABLE . '
- WHERE ' . $db->sql_in_set('user_type', array(USER_NORMAL, USER_FOUNDER)) . '
+ WHERE ' . $db->sql_in_set('user_type', $user_types) . '
AND username_clean ' . $db->sql_like_expression(utf8_clean_string($username_chars) . $db->get_any_char());
$result = $db->sql_query_limit($sql, 10);
$user_list = array();
@@ -1231,11 +1237,6 @@ switch ($mode)
);
extract($phpbb_dispatcher->trigger_event('core.memberlist_modify_sql_query_data', compact($vars)));
- $user_types = array(USER_NORMAL, USER_FOUNDER);
- if ($auth->acl_get('a_user'))
- {
- $user_types[] = USER_INACTIVE;
- }
// Count the users ...
$sql = 'SELECT COUNT(u.user_id) AS total_users
FROM ' . USERS_TABLE . " u$sql_from
diff --git a/phpBB/phpbb/console/command/user/activate.php b/phpBB/phpbb/console/command/user/activate.php
new file mode 100644
index 0000000000..9c85718b4c
--- /dev/null
+++ b/phpBB/phpbb/console/command/user/activate.php
@@ -0,0 +1,218 @@
+<?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.
+ *
+ */
+
+namespace phpbb\console\command\user;
+
+use phpbb\config\config;
+use phpbb\console\command\command;
+use phpbb\db\driver\driver_interface;
+use phpbb\language\language;
+use phpbb\log\log_interface;
+use phpbb\notification\manager;
+use phpbb\user;
+use phpbb\user_loader;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Style\SymfonyStyle;
+
+class activate extends command
+{
+ /** @var driver_interface */
+ protected $db;
+
+ /** @var config */
+ protected $config;
+
+ /** @var language */
+ protected $language;
+
+ /** @var log_interface */
+ protected $log;
+
+ /** @var manager */
+ protected $notifications;
+
+ /** @var user_loader */
+ protected $user_loader;
+
+ /**
+ * phpBB root path
+ *
+ * @var string
+ */
+ protected $phpbb_root_path;
+
+ /**
+ * PHP extension.
+ *
+ * @var string
+ */
+ protected $php_ext;
+
+ /**
+ * Construct method
+ *
+ * @param user $user
+ * @param driver_interface $db
+ * @param config $config
+ * @param language $language
+ * @param log_interface $log
+ * @param manager $notifications
+ * @param user_loader $user_loader
+ * @param string $phpbb_root_path
+ * @param string $php_ext
+ */
+ public function __construct(user $user, driver_interface $db, config $config, language $language, log_interface $log, manager $notifications, user_loader $user_loader, $phpbb_root_path, $php_ext)
+ {
+ $this->db = $db;
+ $this->config = $config;
+ $this->language = $language;
+ $this->log = $log;
+ $this->notifications = $notifications;
+ $this->user_loader = $user_loader;
+ $this->phpbb_root_path = $phpbb_root_path;
+ $this->php_ext = $php_ext;
+
+ $this->language->add_lang('acp/users');
+ parent::__construct($user);
+ }
+
+ /**
+ * Sets the command name and description
+ *
+ * @return null
+ */
+ protected function configure()
+ {
+ $this
+ ->setName('user:activate')
+ ->setDescription($this->language->lang('CLI_DESCRIPTION_USER_ACTIVATE'))
+ ->setHelp($this->language->lang('CLI_HELP_USER_ACTIVATE'))
+ ->addArgument(
+ 'username',
+ InputArgument::REQUIRED,
+ $this->language->lang('CLI_DESCRIPTION_USER_ACTIVATE_USERNAME')
+ )
+ ->addOption(
+ 'deactivate',
+ 'd',
+ InputOption::VALUE_NONE,
+ $this->language->lang('CLI_DESCRIPTION_USER_ACTIVATE_DEACTIVATE')
+ )
+ ->addOption(
+ 'send-email',
+ null,
+ InputOption::VALUE_NONE,
+ $this->language->lang('CLI_DESCRIPTION_USER_ADD_OPTION_NOTIFY')
+ )
+ ;
+ }
+
+ /**
+ * Executes the command user:activate
+ *
+ * Activate (or deactivate) a user account
+ *
+ * @param InputInterface $input The input stream used to get the options
+ * @param OutputInterface $output The output stream, used to print messages
+ *
+ * @return int 0 if all is well, 1 if any errors occurred
+ */
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $io = new SymfonyStyle($input, $output);
+
+ $name = $input->getArgument('username');
+ $mode = ($input->getOption('deactivate')) ? 'deactivate' : 'activate';
+
+ $user_id = $this->user_loader->load_user_by_username($name);
+ $user_row = $this->user_loader->get_user($user_id);
+
+ if ($user_row['user_id'] == ANONYMOUS)
+ {
+ $io->error($this->language->lang('NO_USER'));
+ return 1;
+ }
+
+ // Check if the user is already active (or inactive)
+ if ($mode == 'activate' && $user_row['user_type'] != USER_INACTIVE)
+ {
+ $io->error($this->language->lang('CLI_DESCRIPTION_USER_ACTIVATE_ACTIVE'));
+ return 1;
+ }
+ else if ($mode == 'deactivate' && $user_row['user_type'] == USER_INACTIVE)
+ {
+ $io->error($this->language->lang('CLI_DESCRIPTION_USER_ACTIVATE_INACTIVE'));
+ return 1;
+ }
+
+ // Activate the user account
+ if (!function_exists('user_active_flip'))
+ {
+ require($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext);
+ }
+
+ user_active_flip($mode, $user_row['user_id']);
+
+ // Notify the user upon activation
+ if ($mode == 'activate' && $this->config['require_activation'] == USER_ACTIVATION_ADMIN)
+ {
+ $this->send_notification($user_row, $input);
+ }
+
+ // Log and display the result
+ $msg = ($mode == 'activate') ? 'USER_ADMIN_ACTIVATED' : 'USER_ADMIN_DEACTIVED';
+ $log = ($mode == 'activate') ? 'LOG_USER_ACTIVE' : 'LOG_USER_INACTIVE';
+
+ $this->log->add('admin', ANONYMOUS, '', $log, false, array($user_row['username']));
+ $this->log->add('user', ANONYMOUS, '', $log . '_USER', false, array(
+ 'reportee_id' => $user_row['user_id']
+ ));
+
+ $io->success($this->language->lang($msg));
+
+ return 0;
+ }
+
+ /**
+ * Send account activation notification to user
+ *
+ * @param array $user_row The user data array
+ * @param InputInterface $input The input stream used to get the options
+ * @return null
+ */
+ protected function send_notification($user_row, InputInterface $input)
+ {
+ $this->notifications->delete_notifications('notification.type.admin_activate_user', $user_row['user_id']);
+
+ if ($input->getOption('send-email'))
+ {
+ if (!class_exists('messenger'))
+ {
+ require($this->phpbb_root_path . 'includes/functions_messenger.' . $this->php_ext);
+ }
+
+ $messenger = new \messenger(false);
+ $messenger->template('admin_welcome_activated', $user_row['user_lang']);
+ $messenger->set_addresses($user_row);
+ $messenger->anti_abuse_headers($this->config, $this->user);
+ $messenger->assign_vars(array(
+ 'USERNAME' => htmlspecialchars_decode($user_row['username']))
+ );
+
+ $messenger->send(NOTIFY_EMAIL);
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/user/add.php b/phpBB/phpbb/console/command/user/add.php
index df1f4aa54a..c60a059251 100644
--- a/phpBB/phpbb/console/command/user/add.php
+++ b/phpBB/phpbb/console/command/user/add.php
@@ -13,28 +13,34 @@
namespace phpbb\console\command\user;
+use phpbb\config\config;
+use phpbb\console\command\command;
+use phpbb\db\driver\driver_interface;
use phpbb\exception\runtime_exception;
+use phpbb\language\language;
+use phpbb\passwords\manager;
+use phpbb\user;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\Question;
use Symfony\Component\Console\Style\SymfonyStyle;
-class add extends \phpbb\console\command\command
+class add extends command
{
/** @var array Array of interactively acquired options */
protected $data;
- /** @var \phpbb\db\driver\driver_interface */
+ /** @var driver_interface */
protected $db;
- /** @var \phpbb\config\config */
+ /** @var config */
protected $config;
- /** @var \phpbb\language\language */
+ /** @var language */
protected $language;
- /** @var \phpbb\passwords\manager */
+ /** @var manager */
protected $password_manager;
/**
@@ -54,15 +60,15 @@ class add extends \phpbb\console\command\command
/**
* Construct method
*
- * @param \phpbb\user $user
- * @param \phpbb\db\driver\driver_interface $db
- * @param \phpbb\config\config $config
- * @param \phpbb\language\language $language
- * @param \phpbb\passwords\manager $password_manager
- * @param string $phpbb_root_path
- * @param string $php_ext
+ * @param user $user
+ * @param driver_interface $db
+ * @param config $config
+ * @param language $language
+ * @param manager $password_manager
+ * @param string $phpbb_root_path
+ * @param string $php_ext
*/
- public function __construct(\phpbb\user $user, \phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\language\language $language, \phpbb\passwords\manager $password_manager, $phpbb_root_path, $php_ext)
+ public function __construct(user $user, driver_interface $db, config $config, language $language, manager $password_manager, $phpbb_root_path, $php_ext)
{
$this->db = $db;
$this->config = $config;
diff --git a/phpBB/phpbb/console/command/user/delete.php b/phpBB/phpbb/console/command/user/delete.php
new file mode 100644
index 0000000000..8593541c1a
--- /dev/null
+++ b/phpBB/phpbb/console/command/user/delete.php
@@ -0,0 +1,170 @@
+<?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.
+ *
+ */
+
+namespace phpbb\console\command\user;
+
+use phpbb\console\command\command;
+use phpbb\db\driver\driver_interface;
+use phpbb\language\language;
+use phpbb\log\log_interface;
+use phpbb\user;
+use phpbb\user_loader;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\ConfirmationQuestion;
+use Symfony\Component\Console\Style\SymfonyStyle;
+
+class delete extends command
+{
+ /** @var driver_interface */
+ protected $db;
+
+ /** @var language */
+ protected $language;
+
+ /** @var log_interface */
+ protected $log;
+
+ /** @var user_loader */
+ protected $user_loader;
+
+ /**
+ * phpBB root path
+ *
+ * @var string
+ */
+ protected $phpbb_root_path;
+
+ /**
+ * PHP extension.
+ *
+ * @var string
+ */
+ protected $php_ext;
+
+ /**
+ * Construct method
+ *
+ * @param user $user
+ * @param driver_interface $db
+ * @param language $language
+ * @param log_interface $log
+ * @param user_loader $user_loader
+ * @param string $phpbb_root_path
+ * @param string $php_ext
+ */
+ public function __construct(user $user, driver_interface $db, language $language, log_interface $log, user_loader $user_loader, $phpbb_root_path, $php_ext)
+ {
+ $this->db = $db;
+ $this->language = $language;
+ $this->log = $log;
+ $this->user_loader = $user_loader;
+ $this->phpbb_root_path = $phpbb_root_path;
+ $this->php_ext = $php_ext;
+
+ $this->language->add_lang('acp/users');
+ parent::__construct($user);
+ }
+
+ /**
+ * Sets the command name and description
+ *
+ * @return null
+ */
+ protected function configure()
+ {
+ $this
+ ->setName('user:delete')
+ ->setDescription($this->language->lang('CLI_DESCRIPTION_USER_DELETE'))
+ ->addArgument(
+ 'username',
+ InputArgument::REQUIRED,
+ $this->language->lang('CLI_DESCRIPTION_USER_DELETE_USERNAME')
+ )
+ ->addOption(
+ 'delete-posts',
+ null,
+ InputOption::VALUE_NONE,
+ $this->language->lang('CLI_DESCRIPTION_USER_DELETE_OPTION_POSTS')
+ )
+ ;
+ }
+
+ /**
+ * Executes the command user:delete
+ *
+ * Deletes a user from the database. An option to delete the user's posts
+ * is available, by default posts will be retained.
+ *
+ * @param InputInterface $input The input stream used to get the options
+ * @param OutputInterface $output The output stream, used to print messages
+ *
+ * @return int 0 if all is well, 1 if any errors occurred
+ */
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $name = $input->getArgument('username');
+ $mode = ($input->getOption('delete-posts')) ? 'remove' : 'retain';
+
+ if ($name)
+ {
+ $io = new SymfonyStyle($input, $output);
+
+ $user_id = $this->user_loader->load_user_by_username($name);
+ $user_row = $this->user_loader->get_user($user_id);
+
+ if ($user_row['user_id'] == ANONYMOUS)
+ {
+ $io->error($this->language->lang('NO_USER'));
+ return 1;
+ }
+
+ if (!function_exists('user_delete'))
+ {
+ require($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext);
+ }
+
+ user_delete($mode, $user_row['user_id'], $user_row['username']);
+
+ $this->log->add('admin', ANONYMOUS, '', 'LOG_USER_DELETED', false, array($user_row['username']));
+
+ $io->success($this->language->lang('USER_DELETED'));
+ }
+
+ return 0;
+ }
+
+ /**
+ * Interacts with the user.
+ * Confirm they really want to delete the account...last chance!
+ *
+ * @param InputInterface $input An InputInterface instance
+ * @param OutputInterface $output An OutputInterface instance
+ */
+ protected function interact(InputInterface $input, OutputInterface $output)
+ {
+ $helper = $this->getHelper('question');
+
+ $question = new ConfirmationQuestion(
+ $this->language->lang('CLI_USER_DELETE_CONFIRM', $input->getArgument('username')),
+ false
+ );
+
+ if (!$helper->ask($input, $output, $question))
+ {
+ $input->setArgument('username', false);
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/user/reclean.php b/phpBB/phpbb/console/command/user/reclean.php
new file mode 100644
index 0000000000..e298c285be
--- /dev/null
+++ b/phpBB/phpbb/console/command/user/reclean.php
@@ -0,0 +1,198 @@
+<?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.
+ *
+ */
+
+namespace phpbb\console\command\user;
+
+use phpbb\console\command\command;
+use phpbb\db\driver\driver_interface;
+use phpbb\language\language;
+use phpbb\user;
+use Symfony\Component\Console\Helper\ProgressBar;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Style\SymfonyStyle;
+
+class reclean extends command
+{
+ /** @var driver_interface */
+ protected $db;
+
+ /** @var language */
+ protected $language;
+
+ /** @var int A count of the number of re-cleaned user names */
+ protected $processed;
+
+ /** @var ProgressBar */
+ protected $progress;
+
+ /**
+ * Construct method
+ *
+ * @param user $user
+ * @param driver_interface $db
+ * @param language $language
+ */
+ public function __construct(user $user, driver_interface $db, language $language)
+ {
+ $this->db = $db;
+ $this->language = $language;
+
+ parent::__construct($user);
+ }
+
+ /**
+ * Sets the command name and description
+ *
+ * @return null
+ */
+ protected function configure()
+ {
+ $this
+ ->setName('user:reclean')
+ ->setDescription($this->language->lang('CLI_DESCRIPTION_USER_RECLEAN'))
+ ->setHelp($this->language->lang('CLI_HELP_USER_RECLEAN'))
+ ;
+ }
+
+ /**
+ * Executes the command user:reclean
+ *
+ * Cleans user names that are unclean.
+ *
+ * @param InputInterface $input The input stream used to get the options
+ * @param OutputInterface $output The output stream, used to print messages
+ *
+ * @return int 0 if all is well, 1 if any errors occurred
+ */
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $io = new SymfonyStyle($input, $output);
+
+ $io->section($this->language->lang('CLI_USER_RECLEAN_START'));
+
+ $this->processed = 0;
+
+ $this->progress = $this->create_progress_bar($this->get_count(), $io, $output);
+ $this->progress->setMessage($this->language->lang('CLI_USER_RECLEAN_START'));
+ $this->progress->start();
+
+ $stage = 0;
+ while ($stage !== true)
+ {
+ $stage = $this->reclean_usernames($stage);
+ }
+
+ $this->progress->finish();
+
+ $io->newLine(2);
+ $io->success($this->language->lang('CLI_USER_RECLEAN_DONE', $this->processed));
+
+ return 0;
+ }
+
+ /**
+ * Re-clean user names
+ * Only user names that are unclean will be re-cleaned
+ *
+ * @param int $start An offset index
+ * @return bool|int Return the next offset index or true if all records have been processed.
+ */
+ protected function reclean_usernames($start = 0)
+ {
+ $limit = 500;
+ $i = 0;
+
+ $this->db->sql_transaction('begin');
+
+ $sql = 'SELECT user_id, username, username_clean FROM ' . USERS_TABLE;
+ $result = $this->db->sql_query_limit($sql, $limit, $start);
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $i++;
+ $username_clean = $this->db->sql_escape(utf8_clean_string($row['username']));
+
+ if ($username_clean != $row['username_clean'])
+ {
+ $sql = 'UPDATE ' . USERS_TABLE . "
+ SET username_clean = '$username_clean'
+ WHERE user_id = {$row['user_id']}";
+ $this->db->sql_query($sql);
+
+ $this->processed++;
+ }
+
+ $this->progress->advance();
+ }
+ $this->db->sql_freeresult($result);
+
+ $this->db->sql_transaction('commit');
+
+ return ($i < $limit) ? true : $start + $i;
+ }
+
+ /**
+ * Create a styled progress bar
+ *
+ * @param integer $max Max value for the progress bar
+ * @param SymfonyStyle $io
+ * @param OutputInterface $output The output stream, used to print messages
+ * @return ProgressBar
+ */
+ protected function create_progress_bar($max, SymfonyStyle $io, OutputInterface $output)
+ {
+ $progress = $io->createProgressBar($max);
+ if ($output->getVerbosity() === OutputInterface::VERBOSITY_VERBOSE)
+ {
+ $progress->setFormat('<info>[%percent:3s%%]</info> %message%');
+ $progress->setOverwrite(false);
+ }
+ else if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERY_VERBOSE)
+ {
+ $progress->setFormat('<info>[%current:s%/%max:s%]</info><comment>[%elapsed%/%estimated%][%memory%]</comment> %message%');
+ $progress->setOverwrite(false);
+ }
+ else
+ {
+ $io->newLine(2);
+ $progress->setFormat(
+ " %current:s%/%max:s% %bar% %percent:3s%%\n" .
+ " %elapsed:6s%/%estimated:-6s% %memory:6s%\n");
+ $progress->setBarWidth(60);
+ }
+
+ if (!defined('PHP_WINDOWS_VERSION_BUILD'))
+ {
+ $progress->setEmptyBarCharacter('░'); // light shade character \u2591
+ $progress->setProgressCharacter('');
+ $progress->setBarCharacter('▓'); // dark shade character \u2593
+ }
+
+ return $progress;
+ }
+
+ /**
+ * Get the count of users in the database
+ *
+ * @return int
+ */
+ protected function get_count()
+ {
+ $sql = 'SELECT COUNT(user_id) AS count FROM ' . USERS_TABLE;
+ $result = $this->db->sql_query($sql);
+ $count = (int) $this->db->sql_fetchfield('count');
+ $this->db->sql_freeresult($result);
+
+ return $count;
+ }
+}
diff --git a/phpBB/phpbb/controller/resolver.php b/phpBB/phpbb/controller/resolver.php
index 4f432c3323..f8dffc12de 100644
--- a/phpBB/phpbb/controller/resolver.php
+++ b/phpBB/phpbb/controller/resolver.php
@@ -126,9 +126,21 @@ class resolver implements ControllerResolverInterface
*/
public function getArguments(Request $request, $controller)
{
- // At this point, $controller contains the object and method name
- list($object, $method) = $controller;
- $mirror = new \ReflectionMethod($object, $method);
+ // At this point, $controller should be a callable
+ if (is_array($controller))
+ {
+ list($object, $method) = $controller;
+ $mirror = new \ReflectionMethod($object, $method);
+ }
+ else if (is_object($controller) && !$controller instanceof \Closure)
+ {
+ $mirror = new \ReflectionObject($controller);
+ $mirror = $mirror->getMethod('__invoke');
+ }
+ else
+ {
+ $mirror = new \ReflectionFunction($controller);
+ }
$arguments = array();
$parameters = $mirror->getParameters();
diff --git a/phpBB/phpbb/db/migration/data/v310/alpha1.php b/phpBB/phpbb/db/migration/data/v310/alpha1.php
index 1df85bc64c..4a48d2830a 100644
--- a/phpBB/phpbb/db/migration/data/v310/alpha1.php
+++ b/phpBB/phpbb/db/migration/data/v310/alpha1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class alpha1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-a1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/alpha2.php b/phpBB/phpbb/db/migration/data/v310/alpha2.php
index 78bc755ec9..bfbcc4f6f5 100644
--- a/phpBB/phpbb/db/migration/data/v310/alpha2.php
+++ b/phpBB/phpbb/db/migration/data/v310/alpha2.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class alpha2 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-a2', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/alpha3.php b/phpBB/phpbb/db/migration/data/v310/alpha3.php
index 574d19d2f4..bb0f904fd4 100644
--- a/phpBB/phpbb/db/migration/data/v310/alpha3.php
+++ b/phpBB/phpbb/db/migration/data/v310/alpha3.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class alpha3 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-a3', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/beta1.php b/phpBB/phpbb/db/migration/data/v310/beta1.php
index 84887bd58e..9feba5235d 100644
--- a/phpBB/phpbb/db/migration/data/v310/beta1.php
+++ b/phpBB/phpbb/db/migration/data/v310/beta1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class beta1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-b1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/beta2.php b/phpBB/phpbb/db/migration/data/v310/beta2.php
index 458e305c7b..d5e31ce4cb 100644
--- a/phpBB/phpbb/db/migration/data/v310/beta2.php
+++ b/phpBB/phpbb/db/migration/data/v310/beta2.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class beta2 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-b2', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/beta3.php b/phpBB/phpbb/db/migration/data/v310/beta3.php
index a6c62bf936..78c61e8e90 100644
--- a/phpBB/phpbb/db/migration/data/v310/beta3.php
+++ b/phpBB/phpbb/db/migration/data/v310/beta3.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class beta3 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-b3', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/beta4.php b/phpBB/phpbb/db/migration/data/v310/beta4.php
index 3e91d95178..e634785c38 100644
--- a/phpBB/phpbb/db/migration/data/v310/beta4.php
+++ b/phpBB/phpbb/db/migration/data/v310/beta4.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class beta4 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-b4', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/gold.php b/phpBB/phpbb/db/migration/data/v310/gold.php
index e84c7ee951..188851f87d 100644
--- a/phpBB/phpbb/db/migration/data/v310/gold.php
+++ b/phpBB/phpbb/db/migration/data/v310/gold.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class gold extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/rc1.php b/phpBB/phpbb/db/migration/data/v310/rc1.php
index 10ba7fefff..751208c6ca 100644
--- a/phpBB/phpbb/db/migration/data/v310/rc1.php
+++ b/phpBB/phpbb/db/migration/data/v310/rc1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class rc1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-RC1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/rc2.php b/phpBB/phpbb/db/migration/data/v310/rc2.php
index e1323659da..5cd0393a13 100644
--- a/phpBB/phpbb/db/migration/data/v310/rc2.php
+++ b/phpBB/phpbb/db/migration/data/v310/rc2.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class rc2 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-RC2', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/rc3.php b/phpBB/phpbb/db/migration/data/v310/rc3.php
index 0e6a452251..9fb483ef6a 100644
--- a/phpBB/phpbb/db/migration/data/v310/rc3.php
+++ b/phpBB/phpbb/db/migration/data/v310/rc3.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class rc3 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-RC3', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/rc4.php b/phpBB/phpbb/db/migration/data/v310/rc4.php
index 47de8291c1..0d756c762c 100644
--- a/phpBB/phpbb/db/migration/data/v310/rc4.php
+++ b/phpBB/phpbb/db/migration/data/v310/rc4.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class rc4 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-RC4', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/rc5.php b/phpBB/phpbb/db/migration/data/v310/rc5.php
index 5b6f70e32e..d92537d877 100644
--- a/phpBB/phpbb/db/migration/data/v310/rc5.php
+++ b/phpBB/phpbb/db/migration/data/v310/rc5.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class rc5 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-RC5', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v310/rc6.php b/phpBB/phpbb/db/migration/data/v310/rc6.php
index b84f2edcc9..1df502a1e4 100644
--- a/phpBB/phpbb/db/migration/data/v310/rc6.php
+++ b/phpBB/phpbb/db/migration/data/v310/rc6.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v310;
class rc6 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.0-RC6', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v311.php b/phpBB/phpbb/db/migration/data/v31x/v311.php
index 00844dd4c0..b9d6ed3053 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v311.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v311.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v311 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v312.php b/phpBB/phpbb/db/migration/data/v31x/v312.php
index bf49935f4d..114c2b959b 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v312.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v312.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v312 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.2', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v312rc1.php b/phpBB/phpbb/db/migration/data/v31x/v312rc1.php
index d4b133fc01..e2408d432b 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v312rc1.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v312rc1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v312rc1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.2-RC1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v313.php b/phpBB/phpbb/db/migration/data/v31x/v313.php
index 5a4e21a9b7..b86788da16 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v313.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v313.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v313 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.3', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v313rc1.php b/phpBB/phpbb/db/migration/data/v31x/v313rc1.php
index e50754f805..b1dcc03364 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v313rc1.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v313rc1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v313rc1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.3-RC1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v313rc2.php b/phpBB/phpbb/db/migration/data/v31x/v313rc2.php
index d832d6f502..b701dca5ed 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v313rc2.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v313rc2.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v313rc2 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.3-RC2', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v314.php b/phpBB/phpbb/db/migration/data/v31x/v314.php
index b7793ca569..82dbbf29c9 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v314.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v314.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v314 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.4', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v314rc1.php b/phpBB/phpbb/db/migration/data/v31x/v314rc1.php
index 10cdbe3f9c..e7baf0c2ce 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v314rc1.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v314rc1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v314rc1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.4-RC1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v314rc2.php b/phpBB/phpbb/db/migration/data/v31x/v314rc2.php
index b75b7a9be8..3fc5bf2ad5 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v314rc2.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v314rc2.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v314rc2 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.4-RC2', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v315.php b/phpBB/phpbb/db/migration/data/v31x/v315.php
index 778cdf717e..d5eacf8dd3 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v315.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v315.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v315 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.5', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v315rc1.php b/phpBB/phpbb/db/migration/data/v31x/v315rc1.php
index 4cf4472aa7..a58b6a0f2a 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v315rc1.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v315rc1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v315rc1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.5-RC1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v316.php b/phpBB/phpbb/db/migration/data/v31x/v316.php
index cec113eff2..b3e0060ced 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v316.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v316.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v316 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.6', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v316rc1.php b/phpBB/phpbb/db/migration/data/v31x/v316rc1.php
index 487cd05e5d..6badfb68d4 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v316rc1.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v316rc1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v316rc1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.6-RC1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v317.php b/phpBB/phpbb/db/migration/data/v31x/v317.php
index 15ba2a1feb..d95be06ba6 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v317.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v317.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v317 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.7', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v317pl1.php b/phpBB/phpbb/db/migration/data/v31x/v317pl1.php
index 2e1b0e9b9d..1cb39b03f0 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v317pl1.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v317pl1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v317pl1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.7-pl1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v317rc1.php b/phpBB/phpbb/db/migration/data/v31x/v317rc1.php
index fa24819094..77759daa66 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v317rc1.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v317rc1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v317rc1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.7-RC1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v318.php b/phpBB/phpbb/db/migration/data/v31x/v318.php
index b254279a5d..7663529d3a 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v318.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v318.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v318 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.8', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/migration/data/v31x/v318rc1.php b/phpBB/phpbb/db/migration/data/v31x/v318rc1.php
index 8bae95c7d6..2cab5c96d4 100644
--- a/phpBB/phpbb/db/migration/data/v31x/v318rc1.php
+++ b/phpBB/phpbb/db/migration/data/v31x/v318rc1.php
@@ -15,6 +15,11 @@ namespace phpbb\db\migration\data\v31x;
class v318rc1 extends \phpbb\db\migration\migration
{
+ public function effectively_installed()
+ {
+ return phpbb_version_compare($this->config['version'], '3.1.8-RC1', '>=');
+ }
+
static public function depends_on()
{
return array(
diff --git a/phpBB/phpbb/db/tools/mssql.php b/phpBB/phpbb/db/tools/mssql.php
index a90a85bbb2..87719acd21 100644
--- a/phpBB/phpbb/db/tools/mssql.php
+++ b/phpBB/phpbb/db/tools/mssql.php
@@ -605,7 +605,7 @@ class mssql extends tools
if (!empty($column_data['default']))
{
// Add new default value constraint
- $statements[] = 'ALTER TABLE [' . $table_name . '] ADD CONSTRAINT [DF_' . $table_name . '_' . $column_name . '_1] ' . $this->db->sql_escape($column_data['default']) . ' FOR [' . $column_name . ']';
+ $statements[] = 'ALTER TABLE [' . $table_name . '] ADD CONSTRAINT [DF_' . $table_name . '_' . $column_name . '_1] ' . $column_data['default'] . ' FOR [' . $column_name . ']';
}
if (!empty($indexes))
diff --git a/phpBB/phpbb/di/container_builder.php b/phpBB/phpbb/di/container_builder.php
index 7bfe1bbb87..b9284d04be 100644
--- a/phpBB/phpbb/di/container_builder.php
+++ b/phpBB/phpbb/di/container_builder.php
@@ -556,7 +556,13 @@ class container_builder
*/
protected function get_container_filename()
{
- return $this->get_cache_dir() . 'container_' . md5($this->phpbb_root_path) . '.' . $this->php_ext;
+ $container_params = [
+ 'phpbb_root_path' => $this->phpbb_root_path,
+ 'use_extensions' => $this->use_extensions,
+ 'config_path' => $this->config_path,
+ ];
+
+ return $this->get_cache_dir() . 'container_' . md5(implode(',', $container_params)) . '.' . $this->php_ext;
}
/**
@@ -566,7 +572,13 @@ class container_builder
*/
protected function get_autoload_filename()
{
- return $this->get_cache_dir() . 'autoload_' . md5($this->phpbb_root_path) . '.' . $this->php_ext;
+ $container_params = [
+ 'phpbb_root_path' => $this->phpbb_root_path,
+ 'use_extensions' => $this->use_extensions,
+ 'config_path' => $this->config_path,
+ ];
+
+ return $this->get_cache_dir() . 'autoload_' . md5(implode(',', $container_params)) . '.' . $this->php_ext;
}
/**
diff --git a/phpBB/phpbb/install/module/install_database/task/add_config_settings.php b/phpBB/phpbb/install/module/install_database/task/add_config_settings.php
index 20b7679ec1..7a2df01de6 100644
--- a/phpBB/phpbb/install/module/install_database/task/add_config_settings.php
+++ b/phpBB/phpbb/install/module/install_database/task/add_config_settings.php
@@ -129,12 +129,19 @@ class add_config_settings extends \phpbb\install\task_base
$this->db->sql_return_on_error(true);
$server_name = $this->install_config->get('server_name');
- $cookie_domain = $this->install_config->get('cookie_domain');
$current_time = time();
$user_ip = phpbb_ip_normalise($this->iohandler->get_server_variable('REMOTE_ADDR'));
$user_ip = ($user_ip === false) ? '' : $user_ip;
$referer = $this->iohandler->get_server_variable('REFERER');
+ // Calculate cookie domain
+ $cookie_domain = $server_name;
+
+ if (strpos($cookie_domain, 'www.') === 0)
+ {
+ $cookie_domain = substr($cookie_domain, 3);
+ }
+
// Set default config and post data, this applies to all DB's
$sql_ary = array(
'INSERT INTO ' . $this->config_table . " (config_name, config_value)
diff --git a/phpBB/phpbb/install/module/update_database/task/update.php b/phpBB/phpbb/install/module/update_database/task/update.php
index 4b2baf2c23..9fed2317e9 100644
--- a/phpBB/phpbb/install/module/update_database/task/update.php
+++ b/phpBB/phpbb/install/module/update_database/task/update.php
@@ -142,6 +142,7 @@ class update extends task_base
$this->migrator->set_migrations($migrations);
$migration_count = count($this->migrator->get_migrations());
$this->iohandler->set_task_count($migration_count, true);
+ $this->installer_config->set_task_progress_count($migration_count);
$progress_count = $this->installer_config->get('database_update_count', 0);
while (!$this->migrator->finished())
@@ -183,8 +184,6 @@ class update extends task_base
);
}
- $this->iohandler->finish_progress('INLINE_UPDATE_SUCCESSFUL');
-
$this->iohandler->add_success_message('INLINE_UPDATE_SUCCESSFUL');
$this->config->delete('version_update_from');
diff --git a/phpBB/phpbb/install/module/update_filesystem/task/file_check.php b/phpBB/phpbb/install/module/update_filesystem/task/file_check.php
index 5dbee6c259..f4b3870148 100644
--- a/phpBB/phpbb/install/module/update_filesystem/task/file_check.php
+++ b/phpBB/phpbb/install/module/update_filesystem/task/file_check.php
@@ -166,6 +166,7 @@ class file_check extends task_base
}
$this->installer_config->set('update_files', $file_update_info);
+ $this->installer_config->set('update_info', array());
}
/**
diff --git a/phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php b/phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php
index c46c05500a..7f18950cf6 100644
--- a/phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php
+++ b/phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php
@@ -66,11 +66,7 @@ class show_file_status extends task_base
$this->cache = $container->get('cache.driver');
// Initialize compression file updater
- $compression_method = $this->installer_config->get('compression_method', '');
$this->file_updater = $file_updater_factory->get('compression');
- $conflict_archive = $this->file_updater->init($compression_method);
-
- $this->installer_config->set('update_file_conflict_archive', $conflict_archive);
parent::__construct(false);
}
@@ -96,6 +92,10 @@ class show_file_status extends task_base
// Create archive for merge conflicts
if (!empty($merge_conflicts))
{
+ $compression_method = $this->installer_config->get('compression_method', '');
+ $conflict_archive = $this->file_updater->init($compression_method);
+ $this->installer_config->set('update_file_conflict_archive', $conflict_archive);
+
foreach ($merge_conflicts as $filename)
{
$this->file_updater->create_new_file(
@@ -111,9 +111,9 @@ class show_file_status extends task_base
'DOWNLOAD_CONFLICTS',
'DOWNLOAD_CONFLICTS_EXPLAIN'
);
- }
- $this->file_updater->close();
+ $this->file_updater->close();
+ }
// Render update file statuses
$file_update_info = $this->installer_config->get('update_files', array());
@@ -140,10 +140,13 @@ class show_file_status extends task_base
}
else
{
+ $conflict_archive_path = $this->installer_config->get('update_file_conflict_archive', null);
+
// Remove archive
- $this->filesystem->remove(
- $this->installer_config->get('update_file_conflict_archive', null)
- );
+ if ($conflict_archive_path !== null && $this->filesystem->exists($conflict_archive_path))
+ {
+ $this->filesystem->remove($conflict_archive_path);
+ }
$this->installer_config->set('update_file_conflict_archive', null);
}
diff --git a/phpBB/phpbb/module/module_manager.php b/phpBB/phpbb/module/module_manager.php
index a812d06736..7ae16cdb61 100644
--- a/phpBB/phpbb/module/module_manager.php
+++ b/phpBB/phpbb/module/module_manager.php
@@ -356,7 +356,7 @@ class module_manager
$diff = sizeof($moved_modules) * 2;
$moved_ids = array();
- for ($i = 0; $i < sizeof($moved_modules); ++$i)
+ for ($i = 0, $size = sizeof($moved_modules); $i < $size; ++$i)
{
$moved_ids[] = $moved_modules[$i]['module_id'];
}
diff --git a/phpBB/phpbb/notification/type/quote.php b/phpBB/phpbb/notification/type/quote.php
index 684463c8c3..323c18b204 100644
--- a/phpBB/phpbb/notification/type/quote.php
+++ b/phpBB/phpbb/notification/type/quote.php
@@ -115,14 +115,14 @@ class quote extends \phpbb\notification\type\post
));
// Find the new users to notify
- $notifications = array_keys($this->find_users_for_notification($post));
+ $notifications = $this->find_users_for_notification($post);
// Find the notifications we must delete
$remove_notifications = array_diff(array_keys($old_notifications), array_keys($notifications));
// Find the notifications we must add
$add_notifications = array();
- foreach (array_diff(array_keys($notifications), $old_notifications) as $user_id)
+ foreach (array_diff(array_keys($notifications), array_keys($old_notifications)) as $user_id)
{
$add_notifications[$user_id] = $notifications[$user_id];
}
diff --git a/phpBB/posting.php b/phpBB/posting.php
index 9bd4acf99b..4986909148 100644
--- a/phpBB/posting.php
+++ b/phpBB/posting.php
@@ -1593,6 +1593,9 @@ $message_parser->decode_message($post_data['bbcode_uid']);
if ($generate_quote)
{
+ // Remove attachment bbcode tags from the quoted message to avoid mixing with the new post attachments if any
+ $message_parser->message = preg_replace('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#uis', '\\2', $message_parser->message);
+
if ($config['allow_bbcode'])
{
$message_parser->message = $phpbb_container->get('text_formatter.utils')->generate_quote(
diff --git a/phpBB/styles/prosilver/style.cfg b/phpBB/styles/prosilver/style.cfg
index e0b87f2398..690c35ca7a 100644
--- a/phpBB/styles/prosilver/style.cfg
+++ b/phpBB/styles/prosilver/style.cfg
@@ -21,8 +21,8 @@
# General Information about this style
name = prosilver
copyright = © phpBB Limited, 2007
-style_version = 3.3.0-dev
-phpbb_version = 3.3.0-dev
+style_version = 3.2.0-b3-dev
+phpbb_version = 3.2.0-b3-dev
# Defining a different template bitfield
# template_bitfield = lNg=