aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/adm/style/acp_ext_details.html1
-rw-r--r--phpBB/adm/style/acp_jabber.html15
-rw-r--r--phpBB/adm/style/acp_profile.html1
-rw-r--r--phpBB/common.php5
-rw-r--r--phpBB/composer.json2
-rw-r--r--phpBB/composer.lock381
-rw-r--r--phpBB/config/default/container/services_console.yml12
-rw-r--r--phpBB/config/default/container/services_cron.yml14
-rw-r--r--phpBB/config/default/container/services_password.yml7
-rw-r--r--phpBB/docs/events.md48
-rw-r--r--phpBB/includes/acp/acp_board.php1
-rw-r--r--phpBB/includes/acp/acp_jabber.php25
-rw-r--r--phpBB/includes/functions_content.php4
-rw-r--r--phpBB/includes/functions_display.php7
-rw-r--r--phpBB/includes/functions_jabber.php53
-rw-r--r--phpBB/includes/functions_messenger.php38
-rw-r--r--phpBB/includes/mcp/mcp_ban.php5
-rw-r--r--phpBB/includes/mcp/mcp_main.php8
-rw-r--r--phpBB/includes/mcp/mcp_post.php5
-rw-r--r--phpBB/includes/startup.php83
-rw-r--r--phpBB/install/schemas/schema_data.sql1
-rw-r--r--phpBB/language/en/acp/board.php40
-rw-r--r--phpBB/language/en/cli.php3
-rw-r--r--phpBB/language/en/install.php5
-rw-r--r--phpBB/memberlist.php5
-rw-r--r--phpBB/phpbb/console/command/fixup/update_hashes.php117
-rw-r--r--phpBB/phpbb/console/command/update/check.php2
-rw-r--r--phpBB/phpbb/cron/task/core/update_hashes.php130
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/add_jabber_ssl_context_config_options.php32
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/add_latest_topics_index.php51
-rw-r--r--phpBB/phpbb/db/migration/data/v31x/update_hashes.php33
-rw-r--r--phpBB/phpbb/db/migration/data/v32x/load_user_activity_limit.php36
-rw-r--r--phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p1.php46
-rw-r--r--phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p2.php46
-rw-r--r--phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p3.php46
-rw-r--r--phpBB/phpbb/db/migration/data/v32x/user_notifications_table_reduce_column_sizes.php48
-rw-r--r--phpBB/phpbb/db/migration/data/v32x/user_notifications_table_remove_duplicates.php55
-rw-r--r--phpBB/phpbb/db/migration/data/v32x/user_notifications_table_temp_index.php46
-rw-r--r--phpBB/phpbb/db/migration/data/v32x/user_notifications_table_unique_index.php51
-rw-r--r--phpBB/phpbb/db/tools/tools.php61
-rw-r--r--phpBB/phpbb/files/filespec.php2
-rw-r--r--phpBB/phpbb/help/controller/help.php6
-rw-r--r--phpBB/phpbb/install/helper/database.php9
-rw-r--r--phpBB/phpbb/passwords/driver/md5_phpbb2.php2
-rw-r--r--phpBB/phpbb/template/base.php29
-rw-r--r--phpBB/phpbb/template/context.php73
-rw-r--r--phpBB/phpbb/template/template.php24
-rw-r--r--phpBB/phpbb/template/twig/lexer.php11
-rw-r--r--phpBB/phpbb/template/twig/loader.php2
-rw-r--r--phpBB/posting.php10
-rw-r--r--phpBB/styles/prosilver/template/ajax.js2
-rw-r--r--phpBB/styles/prosilver/template/forumlist_body.html4
-rw-r--r--phpBB/styles/prosilver/template/index_body.html7
-rw-r--r--phpBB/styles/prosilver/template/mcp_topic.html2
-rw-r--r--phpBB/styles/prosilver/template/search_results.html1
-rw-r--r--phpBB/styles/prosilver/template/viewforum_body.html4
-rw-r--r--phpBB/styles/prosilver/template/viewtopic_body.html4
-rw-r--r--phpBB/styles/prosilver/theme/content.css8
-rw-r--r--phpBB/viewonline.php5
59 files changed, 1423 insertions, 351 deletions
diff --git a/phpBB/adm/style/acp_ext_details.html b/phpBB/adm/style/acp_ext_details.html
index d7839f7ec8..bbddf2e6b6 100644
--- a/phpBB/adm/style/acp_ext_details.html
+++ b/phpBB/adm/style/acp_ext_details.html
@@ -19,6 +19,7 @@
</div>
<!-- ENDIF -->
<!-- ENDIF -->
+<!-- EVENT acp_ext_details_notice -->
<fieldset>
<legend>{L_EXT_DETAILS}</legend>
diff --git a/phpBB/adm/style/acp_jabber.html b/phpBB/adm/style/acp_jabber.html
index 3c3b895624..e76c9a0323 100644
--- a/phpBB/adm/style/acp_jabber.html
+++ b/phpBB/adm/style/acp_jabber.html
@@ -47,6 +47,21 @@
<dd><label><input type="radio" class="radio" id="jab_use_ssl" name="jab_use_ssl" value="1"<!-- IF JAB_USE_SSL --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
<label><input type="radio" class="radio" name="jab_use_ssl" value="0"<!-- IF not JAB_USE_SSL --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
</dl>
+<dl>
+ <dt><label for="jab_verify_peer">{L_JAB_VERIFY_PEER}{L_COLON}</label><br /><span>{L_JAB_VERIFY_PEER_EXPLAIN}</span></dt>
+ <dd><label><input type="radio" class="radio" id="jab_verify_peer" name="jab_verify_peer" value="1"<!-- IF JAB_VERIFY_PEER --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
+ <label><input type="radio" class="radio" name="jab_verify_peer" value="0"<!-- IF not JAB_VERIFY_PEER --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
+</dl>
+<dl>
+ <dt><label for="jab_verify_peer_name">{L_JAB_VERIFY_PEER_NAME}{L_COLON}</label><br /><span>{L_JAB_VERIFY_PEER_NAME_EXPLAIN}</span></dt>
+ <dd><label><input type="radio" class="radio" id="jab_verify_peer_name" name="jab_verify_peer_name" value="1"<!-- IF JAB_VERIFY_PEER_NAME --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
+ <label><input type="radio" class="radio" name="jab_verify_peer_name" value="0"<!-- IF not JAB_VERIFY_PEER_NAME --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
+</dl>
+<dl>
+ <dt><label for="jab_allow_self_signed">{L_JAB_ALLOW_SELF_SIGNED}{L_COLON}</label><br /><span>{L_JAB_ALLOW_SELF_SIGNED_EXPLAIN}</span></dt>
+ <dd><label><input type="radio" class="radio" id="jab_allow_self_signed" name="jab_allow_self_signed" value="1"<!-- IF JAB_ALLOW_SELF_SIGNED --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
+ <label><input type="radio" class="radio" name="jab_allow_self_signed" value="0"<!-- IF not JAB_ALLOW_SELF_SIGNED --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
+</dl>
<!-- ENDIF -->
<dl>
<dt><label for="jab_package_size">{L_JAB_PACKAGE_SIZE}{L_COLON}</label><br /><span>{L_JAB_PACKAGE_SIZE_EXPLAIN}</span></dt>
diff --git a/phpBB/adm/style/acp_profile.html b/phpBB/adm/style/acp_profile.html
index cebd2e9632..bd3935b464 100644
--- a/phpBB/adm/style/acp_profile.html
+++ b/phpBB/adm/style/acp_profile.html
@@ -85,6 +85,7 @@
<dd><input type="checkbox" class="radio" id="field_is_contact" name="field_is_contact" value="1"<!-- IF S_FIELD_CONTACT --> checked="checked"<!-- ENDIF --> /></dd>
<dd><input class="text medium" type="text" name="field_contact_desc" id="field_contact_desc" value="{FIELD_CONTACT_DESC}" /> <label for="field_contact_desc">{L_FIELD_CONTACT_DESC}</label></dd>
<dd><input class="text medium" type="text" name="field_contact_url" id="field_contact_url" value="{FIELD_CONTACT_URL}" /> <label for="field_contact_url">{L_FIELD_CONTACT_URL}</label></dd>
+ <!-- EVENT acp_profile_contact_last -->
</dl>
</fieldset>
diff --git a/phpBB/common.php b/phpBB/common.php
index 70feb55d04..172503f078 100644
--- a/phpBB/common.php
+++ b/phpBB/common.php
@@ -20,11 +20,6 @@ if (!defined('IN_PHPBB'))
exit;
}
-if (version_compare(PHP_VERSION, '5.4') < 0)
-{
- die('You are running an unsupported PHP version. Please upgrade to PHP 5.4.0 or higher before trying to install or update to phpBB 3.2');
-}
-
require($phpbb_root_path . 'includes/startup.' . $phpEx);
require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
diff --git a/phpBB/composer.json b/phpBB/composer.json
index 976c3a74cd..52217a7540 100644
--- a/phpBB/composer.json
+++ b/phpBB/composer.json
@@ -47,7 +47,7 @@
"symfony/routing": "^2.8",
"symfony/twig-bridge": "^2.8",
"symfony/yaml": "^2.8",
- "twig/twig": "^1.0,<1.25"
+ "twig/twig": "^1.0"
},
"require-dev": {
"fabpot/goutte": "~2.0",
diff --git a/phpBB/composer.lock b/phpBB/composer.lock
index fac6a43f0e..2cce1156f0 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": "fa77bb5667bcac933b072b639a44aec0",
- "content-hash": "da4fd9fbb589d2cffaa3f0168875475d",
+ "hash": "a66e58446c273c4b92f8e5f227180be8",
+ "content-hash": "d3646acce6058e89ebcf76debb7f72ea",
"packages": [
{
"name": "bantu/ini-get-wrapper",
@@ -342,7 +342,7 @@
"oauth",
"security"
],
- "time": "2016-07-12 22:15:00"
+ "time": "2016-07-12 22:15:00"
},
{
"name": "marc1706/fast-image-size",
@@ -460,16 +460,16 @@
},
{
"name": "paragonie/random_compat",
- "version": "v1.4.1",
+ "version": "v1.4.2",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
- "reference": "c7e26a21ba357863de030f0b9e701c7d04593774"
+ "reference": "965cdeb01fdcab7653253aa81d40441d261f1e66"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/c7e26a21ba357863de030f0b9e701c7d04593774",
- "reference": "c7e26a21ba357863de030f0b9e701c7d04593774",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/965cdeb01fdcab7653253aa81d40441d261f1e66",
+ "reference": "965cdeb01fdcab7653253aa81d40441d261f1e66",
"shasum": ""
},
"require": {
@@ -504,7 +504,7 @@
"pseudorandom",
"random"
],
- "time": "2016-03-18 20:34:03"
+ "time": "2017-03-13 16:22:52"
},
{
"name": "patchwork/utf8",
@@ -614,27 +614,25 @@
},
{
"name": "react/promise",
- "version": "v2.4.1",
+ "version": "v2.5.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
- "reference": "8025426794f1944de806618671d4fa476dc7626f"
+ "reference": "62785ae604c8d69725d693eb370e1d67e94c4053"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise/zipball/8025426794f1944de806618671d4fa476dc7626f",
- "reference": "8025426794f1944de806618671d4fa476dc7626f",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/62785ae604c8d69725d693eb370e1d67e94c4053",
+ "reference": "62785ae604c8d69725d693eb370e1d67e94c4053",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
},
+ "type": "library",
"autoload": {
"psr-4": {
"React\\Promise\\": "src/"
@@ -654,20 +652,24 @@
}
],
"description": "A lightweight implementation of CommonJS Promises/A for PHP",
- "time": "2016-05-03 17:50:52"
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "time": "2017-03-25 12:08:31"
},
{
"name": "s9e/text-formatter",
- "version": "0.9.1",
+ "version": "0.9.6",
"source": {
"type": "git",
"url": "https://github.com/s9e/TextFormatter.git",
- "reference": "e0f1d477d5c24dff11fa3aaa408d8ead07006fe3"
+ "reference": "077c510109f3011dec68a5bcbaeb93a1f9138128"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/s9e/TextFormatter/zipball/e0f1d477d5c24dff11fa3aaa408d8ead07006fe3",
- "reference": "e0f1d477d5c24dff11fa3aaa408d8ead07006fe3",
+ "url": "https://api.github.com/repos/s9e/TextFormatter/zipball/077c510109f3011dec68a5bcbaeb93a1f9138128",
+ "reference": "077c510109f3011dec68a5bcbaeb93a1f9138128",
"shasum": ""
},
"require": {
@@ -719,26 +721,29 @@
"parser",
"shortcodes"
],
- "time": "2017-01-22 17:12:21"
+ "time": "2017-05-10 19:37:30"
},
{
"name": "symfony/config",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "1361bc4e66f97b6202ae83f4190e962c624b5e61"
+ "reference": "0b8541d18507d10204a08384640ff6df3c739ebe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/1361bc4e66f97b6202ae83f4190e962c624b5e61",
- "reference": "1361bc4e66f97b6202ae83f4190e962c624b5e61",
+ "url": "https://api.github.com/repos/symfony/config/zipball/0b8541d18507d10204a08384640ff6df3c739ebe",
+ "reference": "0b8541d18507d10204a08384640ff6df3c739ebe",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
"symfony/filesystem": "~2.3|~3.0.0"
},
+ "require-dev": {
+ "symfony/yaml": "~2.7|~3.0.0"
+ },
"suggest": {
"symfony/yaml": "To use the yaml reference dumper"
},
@@ -772,25 +777,25 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
- "time": "2016-11-03 07:52:58"
+ "time": "2017-04-12 14:07:15"
},
{
"name": "symfony/console",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "a871ba00e0f604dceac64c56c27f99fbeaf4854e"
+ "reference": "efa4d466b67c2fc9bf9419a981e683e1f99fa029"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/a871ba00e0f604dceac64c56c27f99fbeaf4854e",
- "reference": "a871ba00e0f604dceac64c56c27f99fbeaf4854e",
+ "url": "https://api.github.com/repos/symfony/console/zipball/efa4d466b67c2fc9bf9419a981e683e1f99fa029",
+ "reference": "efa4d466b67c2fc9bf9419a981e683e1f99fa029",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
- "symfony/debug": "~2.7,>=2.7.2|~3.0.0",
+ "symfony/debug": "^2.7.2|~3.0.0",
"symfony/polyfill-mbstring": "~1.0"
},
"require-dev": {
@@ -833,20 +838,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2016-11-15 23:02:12"
+ "time": "2017-05-28 14:07:33"
},
{
"name": "symfony/debug",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "62a68f640456f6761d752c62d81631428ef0d8a1"
+ "reference": "344f50ce827413b3640bfcb1e37386a67d06ea1f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/62a68f640456f6761d752c62d81631428ef0d8a1",
- "reference": "62a68f640456f6761d752c62d81631428ef0d8a1",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/344f50ce827413b3640bfcb1e37386a67d06ea1f",
+ "reference": "344f50ce827413b3640bfcb1e37386a67d06ea1f",
"shasum": ""
},
"require": {
@@ -858,7 +863,7 @@
},
"require-dev": {
"symfony/class-loader": "~2.2|~3.0.0",
- "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2|~3.0.0"
+ "symfony/http-kernel": "~2.3.24|~2.5.9|^2.6.2|~3.0.0"
},
"type": "library",
"extra": {
@@ -890,20 +895,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2016-11-15 12:53:17"
+ "time": "2017-04-19 19:56:30"
},
{
"name": "symfony/dependency-injection",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "9d2c5033ca70ceade8d7584f997a9d3943f0fe5f"
+ "reference": "155b770e68150139779295864d6b6cb3172cd821"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9d2c5033ca70ceade8d7584f997a9d3943f0fe5f",
- "reference": "9d2c5033ca70ceade8d7584f997a9d3943f0fe5f",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/155b770e68150139779295864d6b6cb3172cd821",
+ "reference": "155b770e68150139779295864d6b6cb3172cd821",
"shasum": ""
},
"require": {
@@ -953,20 +958,20 @@
],
"description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com",
- "time": "2016-11-18 21:10:01"
+ "time": "2017-05-25 22:57:22"
},
{
"name": "symfony/event-dispatcher",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "25c576abd4e0f212e678fe8b2bd9a9a98c7ea934"
+ "reference": "7fc8e2b4118ff316550596357325dfd92a51f531"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/25c576abd4e0f212e678fe8b2bd9a9a98c7ea934",
- "reference": "25c576abd4e0f212e678fe8b2bd9a9a98c7ea934",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7fc8e2b4118ff316550596357325dfd92a51f531",
+ "reference": "7fc8e2b4118ff316550596357325dfd92a51f531",
"shasum": ""
},
"require": {
@@ -974,7 +979,7 @@
},
"require-dev": {
"psr/log": "~1.0",
- "symfony/config": "~2.0,>=2.0.5|~3.0.0",
+ "symfony/config": "^2.0.5|~3.0.0",
"symfony/dependency-injection": "~2.6|~3.0.0",
"symfony/expression-language": "~2.6|~3.0.0",
"symfony/stopwatch": "~2.3|~3.0.0"
@@ -1013,20 +1018,20 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2016-10-13 01:43:15"
+ "time": "2017-04-26 16:56:54"
},
{
"name": "symfony/filesystem",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "a3784111af9f95f102b6411548376e1ae7c93898"
+ "reference": "19c11158da8d110cc5289c063bf2ec4cc1ce9e7c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/a3784111af9f95f102b6411548376e1ae7c93898",
- "reference": "a3784111af9f95f102b6411548376e1ae7c93898",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/19c11158da8d110cc5289c063bf2ec4cc1ce9e7c",
+ "reference": "19c11158da8d110cc5289c063bf2ec4cc1ce9e7c",
"shasum": ""
},
"require": {
@@ -1062,20 +1067,20 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
- "time": "2016-10-18 04:28:30"
+ "time": "2017-05-28 14:07:33"
},
{
"name": "symfony/finder",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "0023b024363dfc0cd21262e556f25a291fe8d7fd"
+ "reference": "b058a6f0cb6ee9b6b727aae03d5a62474a308528"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/0023b024363dfc0cd21262e556f25a291fe8d7fd",
- "reference": "0023b024363dfc0cd21262e556f25a291fe8d7fd",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/b058a6f0cb6ee9b6b727aae03d5a62474a308528",
+ "reference": "b058a6f0cb6ee9b6b727aae03d5a62474a308528",
"shasum": ""
},
"require": {
@@ -1111,20 +1116,20 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2016-11-03 07:52:58"
+ "time": "2017-05-25 22:57:22"
},
{
"name": "symfony/http-foundation",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "4f8c167732bbf3ba4284c0915f57b332091f6b68"
+ "reference": "03bf5ded5a4b54473e7551df5cfab854f7434ed4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4f8c167732bbf3ba4284c0915f57b332091f6b68",
- "reference": "4f8c167732bbf3ba4284c0915f57b332091f6b68",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/03bf5ded5a4b54473e7551df5cfab854f7434ed4",
+ "reference": "03bf5ded5a4b54473e7551df5cfab854f7434ed4",
"shasum": ""
},
"require": {
@@ -1166,27 +1171,27 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2016-11-15 23:02:12"
+ "time": "2017-05-19 11:49:58"
},
{
"name": "symfony/http-kernel",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "29d9bb59c6d895e65d8fea3859c96c3b6e9368ba"
+ "reference": "ae9dd4cfde4a3efa94475863fc330825715fe549"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/29d9bb59c6d895e65d8fea3859c96c3b6e9368ba",
- "reference": "29d9bb59c6d895e65d8fea3859c96c3b6e9368ba",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ae9dd4cfde4a3efa94475863fc330825715fe549",
+ "reference": "ae9dd4cfde4a3efa94475863fc330825715fe549",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
"psr/log": "~1.0",
- "symfony/debug": "~2.6,>=2.6.2",
- "symfony/event-dispatcher": "~2.6,>=2.6.7|~3.0.0",
+ "symfony/debug": "^2.6.2",
+ "symfony/event-dispatcher": "^2.6.7|~3.0.0",
"symfony/http-foundation": "~2.7.20|~2.8.13|~3.1.6"
},
"conflict": {
@@ -1197,16 +1202,16 @@
"symfony/class-loader": "~2.1|~3.0.0",
"symfony/config": "~2.8",
"symfony/console": "~2.3|~3.0.0",
- "symfony/css-selector": "~2.0,>=2.0.5|~3.0.0",
+ "symfony/css-selector": "^2.0.5|~3.0.0",
"symfony/dependency-injection": "~2.8|~3.0.0",
- "symfony/dom-crawler": "~2.0,>=2.0.5|~3.0.0",
+ "symfony/dom-crawler": "^2.0.5|~3.0.0",
"symfony/expression-language": "~2.4|~3.0.0",
- "symfony/finder": "~2.0,>=2.0.5|~3.0.0",
- "symfony/process": "~2.0,>=2.0.5|~3.0.0",
+ "symfony/finder": "^2.0.5|~3.0.0",
+ "symfony/process": "^2.0.5|~3.0.0",
"symfony/routing": "~2.8|~3.0.0",
"symfony/stopwatch": "~2.3|~3.0.0",
"symfony/templating": "~2.2|~3.0.0",
- "symfony/translation": "~2.0,>=2.0.5|~3.0.0",
+ "symfony/translation": "^2.0.5|~3.0.0",
"symfony/var-dumper": "~2.6|~3.0.0"
},
"suggest": {
@@ -1248,7 +1253,7 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2016-11-21 02:24:42"
+ "time": "2017-05-29 19:14:58"
},
{
"name": "symfony/polyfill-mbstring",
@@ -1425,16 +1430,16 @@
},
{
"name": "symfony/proxy-manager-bridge",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/proxy-manager-bridge.git",
- "reference": "69922100cdfe37bc9c0429cab5bd523e861e562e"
+ "reference": "991c0fcd1d461ee9c7cde7d2c44d1ed7f4cc36ae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/69922100cdfe37bc9c0429cab5bd523e861e562e",
- "reference": "69922100cdfe37bc9c0429cab5bd523e861e562e",
+ "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/991c0fcd1d461ee9c7cde7d2c44d1ed7f4cc36ae",
+ "reference": "991c0fcd1d461ee9c7cde7d2c44d1ed7f4cc36ae",
"shasum": ""
},
"require": {
@@ -1475,20 +1480,20 @@
],
"description": "Symfony ProxyManager Bridge",
"homepage": "https://symfony.com",
- "time": "2016-10-03 15:49:46"
+ "time": "2017-04-12 14:07:15"
},
{
"name": "symfony/routing",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "6cee3ed22c778a7410119a3d51a20f60252a156c"
+ "reference": "a8f328c7e701b7bb05a93fca62a5ab2b6b3e500e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/6cee3ed22c778a7410119a3d51a20f60252a156c",
- "reference": "6cee3ed22c778a7410119a3d51a20f60252a156c",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/a8f328c7e701b7bb05a93fca62a5ab2b6b3e500e",
+ "reference": "a8f328c7e701b7bb05a93fca62a5ab2b6b3e500e",
"shasum": ""
},
"require": {
@@ -1504,7 +1509,7 @@
"symfony/config": "~2.7|~3.0.0",
"symfony/expression-language": "~2.4|~3.0.0",
"symfony/http-foundation": "~2.3|~3.0.0",
- "symfony/yaml": "~2.0,>=2.0.5|~3.0.0"
+ "symfony/yaml": "^2.0.5|~3.0.0"
},
"suggest": {
"doctrine/annotations": "For using the annotation loader",
@@ -1550,32 +1555,32 @@
"uri",
"url"
],
- "time": "2016-08-16 14:56:08"
+ "time": "2017-04-12 14:07:15"
},
{
"name": "symfony/twig-bridge",
- "version": "v2.8.11",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
- "reference": "5e9679f7085e99adb5248e07b4677494b8f884b5"
+ "reference": "362aa855b5819355811b58f8b5f15679196a181e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5e9679f7085e99adb5248e07b4677494b8f884b5",
- "reference": "5e9679f7085e99adb5248e07b4677494b8f884b5",
+ "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/362aa855b5819355811b58f8b5f15679196a181e",
+ "reference": "362aa855b5819355811b58f8b5f15679196a181e",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
- "twig/twig": "~1.23|~2.0"
+ "twig/twig": "~1.28|~2.0"
},
"require-dev": {
"symfony/asset": "~2.7|~3.0.0",
"symfony/console": "~2.8|~3.0.0",
"symfony/expression-language": "~2.4|~3.0.0",
"symfony/finder": "~2.3|~3.0.0",
- "symfony/form": "~2.8.4",
+ "symfony/form": "^2.8.19",
"symfony/http-kernel": "~2.8|~3.0.0",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/routing": "~2.2|~3.0.0",
@@ -1585,7 +1590,7 @@
"symfony/templating": "~2.1|~3.0.0",
"symfony/translation": "~2.7|~3.0.0",
"symfony/var-dumper": "~2.7.16|~2.8.9|~3.0.9",
- "symfony/yaml": "~2.0,>=2.0.5|~3.0.0"
+ "symfony/yaml": "^2.0.5|~3.0.0"
},
"suggest": {
"symfony/asset": "For using the AssetExtension",
@@ -1631,20 +1636,20 @@
],
"description": "Symfony Twig Bridge",
"homepage": "https://symfony.com",
- "time": "2016-09-06 10:55:00"
+ "time": "2017-04-12 14:07:15"
},
{
"name": "symfony/yaml",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "befb26a3713c97af90d25dd12e75621ef14d91ff"
+ "reference": "93ccdde79f4b079c7558da4656a3cb1c50c68e02"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/befb26a3713c97af90d25dd12e75621ef14d91ff",
- "reference": "befb26a3713c97af90d25dd12e75621ef14d91ff",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/93ccdde79f4b079c7558da4656a3cb1c50c68e02",
+ "reference": "93ccdde79f4b079c7558da4656a3cb1c50c68e02",
"shasum": ""
},
"require": {
@@ -1680,33 +1685,34 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2016-11-14 16:15:57"
+ "time": "2017-05-01 14:31:55"
},
{
"name": "twig/twig",
- "version": "v1.24.2",
+ "version": "v1.33.2",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7"
+ "reference": "dd6ca96227917e1e85b41c7c3cc6507b411e0927"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/33093f6e310e6976baeac7b14f3a6ec02f2d79b7",
- "reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/dd6ca96227917e1e85b41c7c3cc6507b411e0927",
+ "reference": "dd6ca96227917e1e85b41c7c3cc6507b411e0927",
"shasum": ""
},
"require": {
"php": ">=5.2.7"
},
"require-dev": {
+ "psr/container": "^1.0",
"symfony/debug": "~2.7",
- "symfony/phpunit-bridge": "~2.7"
+ "symfony/phpunit-bridge": "~3.3@dev"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.24-dev"
+ "dev-master": "1.33-dev"
}
},
"autoload": {
@@ -1741,7 +1747,7 @@
"keywords": [
"templating"
],
- "time": "2016-09-01 17:50:53"
+ "time": "2017-04-20 17:39:48"
},
{
"name": "zendframework/zend-code",
@@ -2239,16 +2245,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "2.0.4",
+ "version": "2.0.5",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+ "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
- "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b",
+ "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b",
"shasum": ""
},
"require": {
@@ -2284,31 +2290,31 @@
"email": "mike.vanriel@naenius.com"
}
],
- "time": "2015-02-03 12:10:50"
+ "time": "2016-01-25 08:17:30"
},
{
"name": "phpspec/prophecy",
- "version": "v1.6.2",
+ "version": "v1.7.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "6c52c2722f8460122f96f86346600e1077ce22cb"
+ "reference": "93d39f1f7f9326d746203c7c056f300f7f126073"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb",
- "reference": "6c52c2722f8460122f96f86346600e1077ce22cb",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073",
+ "reference": "93d39f1f7f9326d746203c7c056f300f7f126073",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
- "sebastian/comparator": "^1.1",
- "sebastian/recursion-context": "^1.0|^2.0"
+ "sebastian/comparator": "^1.1|^2.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0"
},
"require-dev": {
- "phpspec/phpspec": "^2.0",
+ "phpspec/phpspec": "^2.5|^3.2",
"phpunit/phpunit": "^4.8 || ^5.6.5"
},
"type": "library",
@@ -2347,7 +2353,7 @@
"spy",
"stub"
],
- "time": "2016-11-21 14:58:47"
+ "time": "2017-03-02 20:05:34"
},
{
"name": "phpunit/dbunit",
@@ -2560,25 +2566,30 @@
},
{
"name": "phpunit/php-timer",
- "version": "1.0.8",
+ "version": "1.0.9",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
+ "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+ "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4|~5"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
"autoload": {
"classmap": [
"src/"
@@ -2600,20 +2611,20 @@
"keywords": [
"timer"
],
- "time": "2016-05-12 18:03:57"
+ "time": "2017-02-26 11:10:40"
},
{
"name": "phpunit/php-token-stream",
- "version": "1.4.9",
+ "version": "1.4.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b"
+ "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b",
- "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7",
+ "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7",
"shasum": ""
},
"require": {
@@ -2649,20 +2660,20 @@
"keywords": [
"tokenizer"
],
- "time": "2016-11-15 14:06:22"
+ "time": "2017-02-27 10:12:30"
},
{
"name": "phpunit/phpunit",
- "version": "4.8.31",
+ "version": "4.8.35",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "98b2b39a520766bec663ff5b7ff1b729db9dbfe3"
+ "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/98b2b39a520766bec663ff5b7ff1b729db9dbfe3",
- "reference": "98b2b39a520766bec663ff5b7ff1b729db9dbfe3",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87",
+ "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87",
"shasum": ""
},
"require": {
@@ -2721,7 +2732,7 @@
"testing",
"xunit"
],
- "time": "2016-12-09 02:45:31"
+ "time": "2017-02-06 05:18:07"
},
{
"name": "phpunit/phpunit-mock-objects",
@@ -2814,7 +2825,9 @@
"authors": [
{
"name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
}
],
"description": "Pimple is a simple Dependency Injection Container for PHP 5.3",
@@ -2884,16 +2897,16 @@
},
{
"name": "sebastian/comparator",
- "version": "1.2.2",
+ "version": "1.2.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f"
+ "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a1ed12e8b2409076ab22e3897126211ff8b1f7f",
- "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+ "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
"shasum": ""
},
"require": {
@@ -2944,27 +2957,27 @@
"compare",
"equality"
],
- "time": "2016-11-19 09:18:40"
+ "time": "2017-01-29 09:50:25"
},
{
"name": "sebastian/diff",
- "version": "1.4.1",
+ "version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
+ "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+ "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.8"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
"extra": {
@@ -2996,7 +3009,7 @@
"keywords": [
"diff"
],
- "time": "2015-12-08 07:14:41"
+ "time": "2017-05-22 07:24:03"
},
{
"name": "sebastian/environment",
@@ -3168,16 +3181,16 @@
},
{
"name": "sebastian/recursion-context",
- "version": "1.0.4",
+ "version": "1.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e"
+ "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/938df7a6478e72795e5f8266cff24d06e3136f2e",
- "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+ "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
"shasum": ""
},
"require": {
@@ -3217,7 +3230,7 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2016-11-15 06:55:36"
+ "time": "2016-10-03 07:41:43"
},
{
"name": "sebastian/version",
@@ -3256,16 +3269,16 @@
},
{
"name": "squizlabs/php_codesniffer",
- "version": "2.7.1",
+ "version": "2.9.1",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
- "reference": "9b324f3a1132459a7274a0ace2e1b766ba80930f"
+ "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9b324f3a1132459a7274a0ace2e1b766ba80930f",
- "reference": "9b324f3a1132459a7274a0ace2e1b766ba80930f",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
+ "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
"shasum": ""
},
"require": {
@@ -3330,20 +3343,20 @@
"phpcs",
"standards"
],
- "time": "2016-11-30 04:02:31"
+ "time": "2017-05-22 02:43:20"
},
{
"name": "symfony/browser-kit",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "165bf6d1e72cd72f2fe170a070aa2a1f17f2d744"
+ "reference": "4386755566fc8d29bddf89694663b0e96cb01e61"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/165bf6d1e72cd72f2fe170a070aa2a1f17f2d744",
- "reference": "165bf6d1e72cd72f2fe170a070aa2a1f17f2d744",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/4386755566fc8d29bddf89694663b0e96cb01e61",
+ "reference": "4386755566fc8d29bddf89694663b0e96cb01e61",
"shasum": ""
},
"require": {
@@ -3351,8 +3364,8 @@
"symfony/dom-crawler": "~2.1|~3.0.0"
},
"require-dev": {
- "symfony/css-selector": "~2.0,>=2.0.5|~3.0.0",
- "symfony/process": "~2.3.34|~2.7,>=2.7.6|~3.0.0"
+ "symfony/css-selector": "^2.0.5|~3.0.0",
+ "symfony/process": "~2.3.34|^2.7.6|~3.0.0"
},
"suggest": {
"symfony/process": ""
@@ -3387,20 +3400,20 @@
],
"description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com",
- "time": "2016-09-06 10:55:00"
+ "time": "2017-04-12 14:07:15"
},
{
"name": "symfony/css-selector",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "981abbbd6ba49af338a98490cbe29e7f39ca9fa9"
+ "reference": "ba3204654efa779691fac9e948a96b4a7067e4ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/981abbbd6ba49af338a98490cbe29e7f39ca9fa9",
- "reference": "981abbbd6ba49af338a98490cbe29e7f39ca9fa9",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/ba3204654efa779691fac9e948a96b4a7067e4ab",
+ "reference": "ba3204654efa779691fac9e948a96b4a7067e4ab",
"shasum": ""
},
"require": {
@@ -3440,20 +3453,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2016-11-03 07:52:58"
+ "time": "2017-05-01 14:31:55"
},
{
"name": "symfony/dom-crawler",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "7f565fe00e580c1edf732234a6d26e9b796bd105"
+ "reference": "b19d01ec41c704497b0bee78bce8bf97619c0649"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7f565fe00e580c1edf732234a6d26e9b796bd105",
- "reference": "7f565fe00e580c1edf732234a6d26e9b796bd105",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b19d01ec41c704497b0bee78bce8bf97619c0649",
+ "reference": "b19d01ec41c704497b0bee78bce8bf97619c0649",
"shasum": ""
},
"require": {
@@ -3496,20 +3509,20 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
- "time": "2016-11-14 16:15:57"
+ "time": "2017-05-25 22:57:22"
},
{
"name": "symfony/process",
- "version": "v2.8.14",
+ "version": "v2.8.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f"
+ "reference": "d54232f5682fda2f8bbebff7c81b864646867ab9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f",
- "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f",
+ "url": "https://api.github.com/repos/symfony/process/zipball/d54232f5682fda2f8bbebff7c81b864646867ab9",
+ "reference": "d54232f5682fda2f8bbebff7c81b864646867ab9",
"shasum": ""
},
"require": {
@@ -3545,7 +3558,7 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2016-09-29 14:03:54"
+ "time": "2017-05-08 01:19:21"
}
],
"aliases": [],
diff --git a/phpBB/config/default/container/services_console.yml b/phpBB/config/default/container/services_console.yml
index e25ab4f03f..282b5abb77 100644
--- a/phpBB/config/default/container/services_console.yml
+++ b/phpBB/config/default/container/services_console.yml
@@ -167,6 +167,18 @@ services:
tags:
- { name: console.command }
+ console.command.fixup.update_hashes:
+ class: phpbb\console\command\fixup\update_hashes
+ arguments:
+ - '@config'
+ - '@user'
+ - '@dbal.conn'
+ - '@passwords.manager'
+ - '@passwords.driver_collection'
+ - '%passwords.algorithms%'
+ tags:
+ - { name: console.command }
+
console.command.reparser.list:
class: phpbb\console\command\reparser\list_all
arguments:
diff --git a/phpBB/config/default/container/services_cron.yml b/phpBB/config/default/container/services_cron.yml
index 0b95a96190..d7f6388536 100644
--- a/phpBB/config/default/container/services_cron.yml
+++ b/phpBB/config/default/container/services_cron.yml
@@ -219,3 +219,17 @@ services:
- [set_reparser, [text_reparser.user_signature]]
tags:
- { name: cron.task }
+
+ cron.task.core.update_hashes:
+ class: phpbb\cron\task\core\update_hashes
+ arguments:
+ - '@config'
+ - '@dbal.conn'
+ - '@passwords.update.lock'
+ - '@passwords.manager'
+ - '@passwords.driver_collection'
+ - '%passwords.algorithms%'
+ calls:
+ - [set_name, [cron.task.core.update_hashes]]
+ tags:
+ - { name: cron.task }
diff --git a/phpBB/config/default/container/services_password.yml b/phpBB/config/default/container/services_password.yml
index c276365c56..d5f5fe287b 100644
--- a/phpBB/config/default/container/services_password.yml
+++ b/phpBB/config/default/container/services_password.yml
@@ -127,3 +127,10 @@ services:
- '@passwords.driver_helper'
tags:
- { name: passwords.driver }
+
+ passwords.update.lock:
+ class: phpbb\lock\db
+ arguments:
+ - update_hashes_lock
+ - '@config'
+ - '@dbal.conn'
diff --git a/phpBB/docs/events.md b/phpBB/docs/events.md
index 7ca4637ac7..8bece6465e 100644
--- a/phpBB/docs/events.md
+++ b/phpBB/docs/events.md
@@ -64,6 +64,12 @@ acp_ext_details_end
* Since: 3.1.11-RC1
* Purpose: Add more detailed information on extension after the available information.
+acp_ext_details_notice
+===
+* Location: adm/style/acp_ext_details.html
+* Since: 3.1.11-RC1
+* Purpose: Add extension detail notices after version check information.
+
acp_ext_list_disabled_name_after
===
* Location: adm/style/acp_ext_list.html
@@ -399,6 +405,13 @@ acp_profile_contact_before
* Since: 3.1.6-RC1
* Purpose: Add extra options to custom profile field configuration in the ACP
+acp_profile_contact_last
+===
+* Locations:
+ + adm/style/acp_profile.html
+* Since: 3.1.11-RC1
+* Purpose: Add contact specific options to custom profile fields in the ACP
+
acp_profile_step_one_lang_after
===
* Locations:
@@ -688,6 +701,20 @@ forumlist_body_last_post_title_prepend
* Since: 3.1.0-a1
* Purpose: Add content before the post title of the latest post in a forum on the forum list.
+forumlist_body_subforum_link_append
+===
+* Locations:
+ + styles/prosilver/template/forumlist_body.html
+* Since: 3.1.11-RC1
+* Purpose: Add content at the end of subforum link item.
+
+forumlist_body_subforum_link_prepend
+===
+* Locations:
+ + styles/prosilver/template/forumlist_body.html
+* Since: 3.1.11-RC1
+* Purpose: Add content at the start of subforum link item.
+
forumlist_body_subforums_after
===
* Locations:
@@ -933,6 +960,20 @@ mcp_topic_postrow_post_details_before
* Since: 3.1.10-RC1
* Purpose: Add content before post details in topic moderation
+mcp_topic_postrow_post_subject_after
+===
+* Locations:
+ + styles/prosilver/template/mcp_topic.html
+* Since: 3.1.11-RC1
+* Purpose: Add content after post subject in topic moderation
+
+mcp_topic_postrow_post_subject_before
+===
+* Locations:
+ + styles/prosilver/template/mcp_topic.html
+* Since: 3.1.11-RC1
+* Purpose: Add content before post subject in topic moderation
+
mcp_topic_topic_title_after
===
* Locations:
@@ -1820,6 +1861,13 @@ search_results_topic_before
* Since: 3.1.0-b4
* Purpose: Add data before search result topics
+search_results_topic_title_after
+===
+* Locations:
+ + styles/prosilver/template/search_results.html
+* Since: 3.1.11-RC1
+* Purpose: Add data after search results topic title
+
simple_footer_after
===
* Locations:
diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php
index 9b5078b941..e044384c9f 100644
--- a/phpBB/includes/acp/acp_board.php
+++ b/phpBB/includes/acp/acp_board.php
@@ -353,6 +353,7 @@ class acp_board
'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_user_activity' => array('lang' => 'LOAD_USER_ACTIVITY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'load_user_activity_limit' => array('lang' => 'LOAD_USER_ACTIVITY_LIMIT', 'validate' => 'int:0:99999999', 'type' => 'number:0:99999999', 'explain' => true),
'load_tplcompile' => array('lang' => 'RECOMPILE_STYLES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'allow_cdn' => array('lang' => 'ALLOW_CDN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'allow_live_searches' => array('lang' => 'ALLOW_LIVE_SEARCHES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
diff --git a/phpBB/includes/acp/acp_jabber.php b/phpBB/includes/acp/acp_jabber.php
index 5dec6bb7d4..07f5dadbff 100644
--- a/phpBB/includes/acp/acp_jabber.php
+++ b/phpBB/includes/acp/acp_jabber.php
@@ -49,13 +49,16 @@ class acp_jabber
$this->tpl_name = 'acp_jabber';
$this->page_title = 'ACP_JABBER_SETTINGS';
- $jab_enable = $request->variable('jab_enable', (bool) $config['jab_enable']);
- $jab_host = $request->variable('jab_host', (string) $config['jab_host']);
- $jab_port = $request->variable('jab_port', (int) $config['jab_port']);
- $jab_username = $request->variable('jab_username', (string) $config['jab_username']);
- $jab_password = $request->variable('jab_password', (string) $config['jab_password']);
- $jab_package_size = $request->variable('jab_package_size', (int) $config['jab_package_size']);
- $jab_use_ssl = $request->variable('jab_use_ssl', (bool) $config['jab_use_ssl']);
+ $jab_enable = $request->variable('jab_enable', (bool) $config['jab_enable']);
+ $jab_host = $request->variable('jab_host', (string) $config['jab_host']);
+ $jab_port = $request->variable('jab_port', (int) $config['jab_port']);
+ $jab_username = $request->variable('jab_username', (string) $config['jab_username']);
+ $jab_password = $request->variable('jab_password', (string) $config['jab_password']);
+ $jab_package_size = $request->variable('jab_package_size', (int) $config['jab_package_size']);
+ $jab_use_ssl = $request->variable('jab_use_ssl', (bool) $config['jab_use_ssl']);
+ $jab_verify_peer = $request->variable('jab_verify_peer', (bool) $config['jab_verify_peer']);
+ $jab_verify_peer_name = $request->variable('jab_verify_peer_name', (bool) $config['jab_verify_peer_name']);
+ $jab_allow_self_signed = $request->variable('jab_allow_self_signed', (bool) $config['jab_allow_self_signed']);
$form_name = 'acp_jabber';
add_form_key($form_name);
@@ -73,7 +76,7 @@ class acp_jabber
// Is this feature enabled? Then try to establish a connection
if ($jab_enable)
{
- $jabber = new jabber($jab_host, $jab_port, $jab_username, $jab_password, $jab_use_ssl);
+ $jabber = new jabber($jab_host, $jab_port, $jab_username, $jab_password, $jab_use_ssl, $jab_verify_peer, $jab_verify_peer_name, $jab_allow_self_signed);
if (!$jabber->connect())
{
@@ -113,6 +116,9 @@ class acp_jabber
}
$config->set('jab_package_size', $jab_package_size);
$config->set('jab_use_ssl', $jab_use_ssl);
+ $config->set('jab_verify_peer', $jab_verify_peer);
+ $config->set('jab_verify_peer_name', $jab_verify_peer_name);
+ $config->set('jab_allow_self_signed', $jab_allow_self_signed);
$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_' . $log);
trigger_error($message . adm_back_link($this->u_action));
@@ -128,6 +134,9 @@ class acp_jabber
'JAB_PASSWORD' => $jab_password !== '' ? '********' : '',
'JAB_PACKAGE_SIZE' => $jab_package_size,
'JAB_USE_SSL' => $jab_use_ssl,
+ 'JAB_VERIFY_PEER' => $jab_verify_peer,
+ 'JAB_VERIFY_PEER_NAME' => $jab_verify_peer_name,
+ 'JAB_ALLOW_SELF_SIGNED' => $jab_allow_self_signed,
'S_CAN_USE_SSL' => jabber::can_use_ssl(),
'S_GTALK_NOTE' => (!@function_exists('dns_get_record')) ? true : false,
));
diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php
index 387606a300..c3e7a7ceb7 100644
--- a/phpBB/includes/functions_content.php
+++ b/phpBB/includes/functions_content.php
@@ -734,9 +734,11 @@ function generate_text_for_storage(&$text, &$uid, &$bitfield, &$flags, $allow_bb
* @var string uid The BBCode UID
* @var string bitfield The BBCode Bitfield
* @var int flags The BBCode Flags
+ * @var string message_parser The message_parser object
* @since 3.1.0-a1
+ * @changed 3.1.11-RC1 Added message_parser to vars
*/
- $vars = array('text', 'uid', 'bitfield', 'flags');
+ $vars = array('text', 'uid', 'bitfield', 'flags', 'message_parser');
extract($phpbb_dispatcher->trigger_event('core.modify_text_for_storage_after', compact($vars)));
return $message_parser->warn_msg;
diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php
index c8b5ec8b1a..32bee14eef 100644
--- a/phpBB/includes/functions_display.php
+++ b/phpBB/includes/functions_display.php
@@ -1165,12 +1165,13 @@ function display_reasons($reason_id = 0)
*/
function display_user_activity(&$userdata_ary)
{
- global $auth, $template, $db, $user;
+ global $auth, $template, $db, $user, $config;
global $phpbb_root_path, $phpEx;
global $phpbb_container, $phpbb_dispatcher;
- // Do not display user activity for users having more than 5000 posts...
- if ($userdata_ary['user_posts'] > 5000)
+ // Do not display user activity for users having too many posts...
+ $limit = $config['load_user_activity_limit'];
+ if ($userdata_ary['user_posts'] > $limit && $limit != 0)
{
return;
}
diff --git a/phpBB/includes/functions_jabber.php b/phpBB/includes/functions_jabber.php
index a38888a861..cfe8c2a90e 100644
--- a/phpBB/includes/functions_jabber.php
+++ b/phpBB/includes/functions_jabber.php
@@ -41,6 +41,9 @@ class jabber
var $username;
var $password;
var $use_ssl;
+ var $verify_peer;
+ var $verify_peer_name;
+ var $allow_self_signed;
var $resource = 'functions_jabber.phpbb.php';
var $enable_logging;
@@ -49,8 +52,18 @@ class jabber
var $features = array();
/**
+ * Constructor
+ *
+ * @param string $server Jabber server
+ * @param int $port Jabber server port
+ * @param string $username Jabber username or JID
+ * @param string $password Jabber password
+ * @param boold $use_ssl Use ssl
+ * @param bool $verify_peer Verify SSL certificate
+ * @param bool $verify_peer_name Verify Jabber peer name
+ * @param bool $allow_self_signed Allow self signed certificates
*/
- function jabber($server, $port, $username, $password, $use_ssl = false)
+ function __construct($server, $port, $username, $password, $use_ssl = false, $verify_peer = true, $verify_peer_name = true, $allow_self_signed = false)
{
$this->connect_server = ($server) ? $server : 'localhost';
$this->port = ($port) ? $port : 5222;
@@ -71,6 +84,9 @@ class jabber
$this->password = $password;
$this->use_ssl = ($use_ssl && self::can_use_ssl()) ? true : false;
+ $this->verify_peer = $verify_peer;
+ $this->verify_peer_name = $verify_peer_name;
+ $this->allow_self_signed = $allow_self_signed;
// Change port if we use SSL
if ($this->port == 5222 && $this->use_ssl)
@@ -95,7 +111,7 @@ class jabber
*/
static public function can_use_tls()
{
- if (!@extension_loaded('openssl') || !function_exists('stream_socket_enable_crypto') || !function_exists('stream_get_meta_data') || !function_exists('socket_set_blocking') || !function_exists('stream_get_wrappers'))
+ if (!@extension_loaded('openssl') || !function_exists('stream_socket_enable_crypto') || !function_exists('stream_get_meta_data') || !function_exists('stream_set_blocking') || !function_exists('stream_get_wrappers'))
{
return false;
}
@@ -138,7 +154,7 @@ class jabber
$this->session['ssl'] = $this->use_ssl;
- if ($this->open_socket($this->connect_server, $this->port, $this->use_ssl))
+ if ($this->open_socket($this->connect_server, $this->port, $this->use_ssl, $this->verify_peer, $this->verify_peer_name, $this->allow_self_signed))
{
$this->send("<?xml version='1.0' encoding='UTF-8' ?" . ">\n");
$this->send("<stream:stream to='{$this->server}' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>\n");
@@ -226,10 +242,13 @@ class jabber
* @param string $server host to connect to
* @param int $port port number
* @param bool $use_ssl use ssl or not
+ * @param bool $verify_peer verify ssl certificate
+ * @param bool $verify_peer_name verify peer name
+ * @param bool $allow_self_signed allow self-signed ssl certificates
* @access public
* @return bool
*/
- function open_socket($server, $port, $use_ssl = false)
+ function open_socket($server, $port, $use_ssl, $verify_peer, $verify_peer_name, $allow_self_signed)
{
if (@function_exists('dns_get_record'))
{
@@ -240,12 +259,26 @@ class jabber
}
}
- $server = $use_ssl ? 'ssl://' . $server : $server;
+ $options = array();
- if ($this->connection = @fsockopen($server, $port, $errorno, $errorstr, $this->timeout))
+ if ($use_ssl)
{
- socket_set_blocking($this->connection, 0);
- socket_set_timeout($this->connection, 60);
+ $remote_socket = 'ssl://' . $server . ':' . $port;
+
+ // Set ssl context options, see http://php.net/manual/en/context.ssl.php
+ $options['ssl'] = array('verify_peer' => $verify_peer, 'verify_peer_name' => $verify_peer_name, 'allow_self_signed' => $allow_self_signed);
+ }
+ else
+ {
+ $remote_socket = $server . ':' . $port;
+ }
+
+ $socket_context = stream_context_create($options);
+
+ if ($this->connection = @stream_socket_client($remote_socket, $errorno, $errorstr, $this->timeout, STREAM_CLIENT_CONNECT, $socket_context))
+ {
+ stream_set_blocking($this->connection, 0);
+ stream_set_timeout($this->connection, 60);
return true;
}
@@ -562,7 +595,7 @@ class jabber
case 'proceed':
// continue switching to TLS
$meta = stream_get_meta_data($this->connection);
- socket_set_blocking($this->connection, 1);
+ stream_set_blocking($this->connection, 1);
if (!stream_socket_enable_crypto($this->connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT))
{
@@ -570,7 +603,7 @@ class jabber
return false;
}
- socket_set_blocking($this->connection, $meta['blocked']);
+ stream_set_blocking($this->connection, $meta['blocked']);
$this->session['tls'] = true;
// new stream
diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php
index 802246c1c5..ab7f00a65a 100644
--- a/phpBB/includes/functions_messenger.php
+++ b/phpBB/includes/functions_messenger.php
@@ -306,10 +306,16 @@ class messenger
/**
* Send the mail out to the recipients set previously in var $this->addresses
+ *
+ * @param int $method User notification method NOTIFY_EMAIL|NOTIFY_IM|NOTIFY_BOTH
+ * @param bool $break Flag indicating if the function only formats the subject
+ * and the message without sending it
+ *
+ * @return bool
*/
function send($method = NOTIFY_EMAIL, $break = false)
{
- global $config, $user;
+ global $config, $user, $phpbb_dispatcher;
// We add some standard variables we always use, no need to specify them always
$this->assign_vars(array(
@@ -318,6 +324,30 @@ class messenger
'SITENAME' => htmlspecialchars_decode($config['sitename']),
));
+ $subject = $this->subject;
+ $message = $this->msg;
+ /**
+ * Event to modify notification message text before parsing
+ *
+ * @event core.modify_notification_message
+ * @var int method User notification method NOTIFY_EMAIL|NOTIFY_IM|NOTIFY_BOTH
+ * @var bool break Flag indicating if the function only formats the subject
+ * and the message without sending it
+ * @var string subject The message subject
+ * @var string message The message text
+ * @since 3.1.11-RC1
+ */
+ $vars = array(
+ 'method',
+ 'break',
+ 'subject',
+ 'message',
+ );
+ extract($phpbb_dispatcher->trigger_event('core.modify_notification_message', compact($vars)));
+ $this->subject = $subject;
+ $this->msg = $message;
+ unset($subject, $message);
+
// Parse message through template
$this->msg = trim($this->template->assign_display('body'));
@@ -618,7 +648,7 @@ class messenger
if (!$use_queue)
{
include_once($phpbb_root_path . 'includes/functions_jabber.' . $phpEx);
- $this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl']);
+ $this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl'], $config['jab_verify_peer'], $config['jab_verify_peer_name'], $config['jab_allow_self_signed']);
if (!$this->jabber->connect())
{
@@ -818,7 +848,7 @@ class queue
}
include_once($phpbb_root_path . 'includes/functions_jabber.' . $phpEx);
- $this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl']);
+ $this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl'], $config['jab_verify_peer'], $config['jab_verify_peer_name'], $config['jab_allow_self_signed']);
if (!$this->jabber->connect())
{
@@ -1089,7 +1119,7 @@ function smtpmail($addresses, $subject, $message, &$err_msg, $headers = false)
$options['ssl'] = array('verify_peer' => $verify_peer, 'verify_peer_name' => $verify_peer_name, 'allow_self_signed' => $allow_self_signed);
$socket_context = stream_context_create($options);
- $smtp->socket = stream_socket_client($remote_socket, $errno, $errstr, 20, STREAM_CLIENT_CONNECT, $socket_context);
+ $smtp->socket = @stream_socket_client($remote_socket, $errno, $errstr, 20, STREAM_CLIENT_CONNECT, $socket_context);
$collector->uninstall();
$error_contents = $collector->format_errors();
diff --git a/phpBB/includes/mcp/mcp_ban.php b/phpBB/includes/mcp/mcp_ban.php
index 4d2151fded..2f3405f915 100644
--- a/phpBB/includes/mcp/mcp_ban.php
+++ b/phpBB/includes/mcp/mcp_ban.php
@@ -28,7 +28,10 @@ class mcp_ban
global $db, $user, $auth, $template, $request, $phpbb_dispatcher;
global $phpbb_root_path, $phpEx;
- include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ if (!function_exists('user_ban'))
+ {
+ include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ }
// Include the admin banning interface...
include($phpbb_root_path . 'includes/acp/acp_ban.' . $phpEx);
diff --git a/phpBB/includes/mcp/mcp_main.php b/phpBB/includes/mcp/mcp_main.php
index 971982e4fc..3d56bba21c 100644
--- a/phpBB/includes/mcp/mcp_main.php
+++ b/phpBB/includes/mcp/mcp_main.php
@@ -637,10 +637,13 @@ function mcp_move_topic($topic_ids)
*
* @event core.mcp_main_modify_shadow_sql
* @var array shadow SQL array to be used by $db->sql_build_array
+ * @var array row Topic data
* @since 3.1.11-RC1
+ * @changed 3.1.11-RC1 Added variable: row
*/
$vars = array(
'shadow',
+ 'row',
);
extract($phpbb_dispatcher->trigger_event('core.mcp_main_modify_shadow_sql', compact($vars)));
@@ -1343,11 +1346,14 @@ function mcp_fork_topic($topic_ids)
* Perform actions before forked topic is created.
*
* @event core.mcp_main_modify_fork_sql
- * @var array sql_ary SQL array to be used by $db->sql_build_array
+ * @var array sql_ary SQL array to be used by $db->sql_build_array
+ * @var array topic_row Topic data
* @since 3.1.11-RC1
+ * @changed 3.1.11-RC1 Added variable: topic_row
*/
$vars = array(
'sql_ary',
+ 'topic_row',
);
extract($phpbb_dispatcher->trigger_event('core.mcp_main_modify_fork_sql', compact($vars)));
diff --git a/phpBB/includes/mcp/mcp_post.php b/phpBB/includes/mcp/mcp_post.php
index dd7aebdbd1..60ec3b8f5a 100644
--- a/phpBB/includes/mcp/mcp_post.php
+++ b/phpBB/includes/mcp/mcp_post.php
@@ -53,7 +53,10 @@ function mcp_post_details($id, $mode, $action)
if ($auth->acl_get('m_info', $post_info['forum_id']))
{
$ip = $request->variable('ip', '');
- include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ if (!function_exists('user_ipwhois'))
+ {
+ include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ }
$template->assign_vars(array(
'RETURN_POST' => sprintf($user->lang['RETURN_POST'], '<a href="' . append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&amp;mode=$mode&amp;p=$post_id") . '">', '</a>'),
diff --git a/phpBB/includes/startup.php b/phpBB/includes/startup.php
index 5900016c39..66f85657a5 100644
--- a/phpBB/includes/startup.php
+++ b/phpBB/includes/startup.php
@@ -22,88 +22,15 @@ if (!defined('IN_PHPBB'))
$level = E_ALL & ~E_NOTICE & ~E_DEPRECATED;
error_reporting($level);
-/*
-* Remove variables created by register_globals from the global scope
-* Thanks to Matt Kavanagh
+/**
+* Minimum Requirement: PHP 5.4.0
*/
-function deregister_globals()
+if (version_compare(PHP_VERSION, '5.4') < 0)
{
- $not_unset = array(
- 'GLOBALS' => true,
- '_GET' => true,
- '_POST' => true,
- '_COOKIE' => true,
- '_REQUEST' => true,
- '_SERVER' => true,
- '_SESSION' => true,
- '_ENV' => true,
- '_FILES' => true,
- 'phpEx' => true,
- 'phpbb_root_path' => true
- );
-
- // Not only will array_merge and array_keys give a warning if
- // a parameter is not an array, array_merge will actually fail.
- // So we check if _SESSION has been initialised.
- if (!isset($_SESSION) || !is_array($_SESSION))
- {
- $_SESSION = array();
- }
-
- // Merge all into one extremely huge array; unset this later
- $input = array_merge(
- array_keys($_GET),
- array_keys($_POST),
- array_keys($_COOKIE),
- array_keys($_SERVER),
- array_keys($_SESSION),
- array_keys($_ENV),
- array_keys($_FILES)
- );
-
- foreach ($input as $varname)
- {
- if (isset($not_unset[$varname]))
- {
- // Hacking attempt. No point in continuing.
- if (isset($_COOKIE[$varname]))
- {
- echo "Clear your cookies. ";
- }
- echo "Malicious variable name detected. Contact the administrator and ask them to disable register_globals.";
- exit;
- }
-
- unset($GLOBALS[$varname]);
- }
-
- unset($input);
+ die('You are running an unsupported PHP version. Please upgrade to PHP 5.4.0 or higher before trying to install or update to phpBB 3.2');
}
+// Register globals and magic quotes have been dropped in PHP 5.4 so no need for extra checks
-// Register globals and magic quotes have been dropped in PHP 5.4
-if (version_compare(PHP_VERSION, '5.4.0-dev', '>='))
-{
- /**
- * @ignore
- */
- define('STRIP', false);
-}
-else
-{
- if (get_magic_quotes_runtime())
- {
- // Deactivate
- @set_magic_quotes_runtime(0);
- }
-
- // Be paranoid with passed vars
- if (@ini_get('register_globals') == '1' || strtolower(@ini_get('register_globals')) == 'on' || !function_exists('ini_get'))
- {
- deregister_globals();
- }
-
- define('STRIP', (get_magic_quotes_gpc()) ? true : false);
-}
// In PHP 5.3.0 the error level has been raised to E_WARNING which causes problems
// because we show E_WARNING errors and do not set a default timezone.
diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql
index 998cf17c3d..263200d8ff 100644
--- a/phpBB/install/schemas/schema_data.sql
+++ b/phpBB/install/schemas/schema_data.sql
@@ -197,6 +197,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_search', '1')
INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_tplcompile', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_unreads_search', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_user_activity', '1');
+INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_user_activity_limit', '5000');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('max_attachments', '3');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('max_attachments_pm', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('max_autologin_time', '0');
diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php
index 4b9a50c05e..e6c56a5bbb 100644
--- a/phpBB/language/en/acp/board.php
+++ b/phpBB/language/en/acp/board.php
@@ -398,6 +398,8 @@ $lang = array_merge($lang, array(
'LOAD_CPF_VIEWTOPIC' => 'Display custom profile fields on topic pages',
'LOAD_USER_ACTIVITY' => 'Show user’s activity',
'LOAD_USER_ACTIVITY_EXPLAIN' => 'Displays active topic/forum in user profiles and user control panel. It is recommended to disable this on boards with more than one million posts.',
+ 'LOAD_USER_ACTIVITY_LIMIT' => 'User’s activity post limit',
+ 'LOAD_USER_ACTIVITY_LIMIT_EXPLAIN' => 'The active topic/forum won’t be shown for users having more than this number of posts. Set to 0 to disable the limit.',
'READ_NOTIFICATION_EXPIRE_DAYS' => 'Read Notification Expiration',
'READ_NOTIFICATION_EXPIRE_DAYS_EXPLAIN' => 'Number of days that will elapse before a read notification will automatically be deleted. Set this value to 0 to make notifications permanent.',
'RECOMPILE_STYLES' => 'Recompile stale style components',
@@ -602,20 +604,26 @@ $lang = array_merge($lang, array(
$lang = array_merge($lang, array(
'ACP_JABBER_SETTINGS_EXPLAIN' => 'Here you can enable and control the use of Jabber for instant messaging and board notifications. Jabber is an open source protocol and therefore available for use by anyone. Some Jabber servers include gateways or transports which allow you to contact users on other networks. Not all servers offer all transports and changes in protocols can prevent transports from operating. Please be sure to enter already registered account details - phpBB will use the details you enter here as is.',
- 'JAB_ENABLE' => 'Enable Jabber',
- 'JAB_ENABLE_EXPLAIN' => 'Enables use of Jabber messaging and notifications.',
- 'JAB_GTALK_NOTE' => 'Please note that GTalk will not work because the <samp>dns_get_record</samp> function could not be found. This function is not available in PHP4, and is not implemented on Windows platforms. It currently does not work on BSD-based systems, including Mac OS.',
- 'JAB_PACKAGE_SIZE' => 'Jabber package size',
- 'JAB_PACKAGE_SIZE_EXPLAIN' => 'This is the number of messages sent in one package. If set to 0 the message is sent immediately and will not be queued for later sending.',
- 'JAB_PASSWORD' => 'Jabber password',
- 'JAB_PASSWORD_EXPLAIN' => '<em><strong>Warning:</strong> This password will be stored as plain text in the database, visible to everybody who can access your database or who can view this configuration page.</em>',
- 'JAB_PORT' => 'Jabber port',
- 'JAB_PORT_EXPLAIN' => 'Leave blank unless you know it is not port 5222.',
- 'JAB_SERVER' => 'Jabber server',
- 'JAB_SERVER_EXPLAIN' => 'See %sjabber.org%s for a list of servers.',
- 'JAB_SETTINGS_CHANGED' => 'Jabber settings changed successfully.',
- 'JAB_USE_SSL' => 'Use SSL to connect',
- 'JAB_USE_SSL_EXPLAIN' => 'If enabled a secure connection is tried to be established. The Jabber port will be modified to 5223 if port 5222 is specified.',
- 'JAB_USERNAME' => 'Jabber username or JID',
- 'JAB_USERNAME_EXPLAIN' => 'Specify a registered username or a valid JID. The username will not be checked for validity. If you only specify a username, then your JID will be the username and the server you specified above. Else, specify a valid JID, for example user@jabber.org.',
+ 'JAB_ALLOW_SELF_SIGNED' => 'Allow self-signed SSL certificates',
+ 'JAB_ALLOW_SELF_SIGNED_EXPLAIN' => 'Allow connections to Jabber server with self-signed SSL certificate.<em><strong>Warning:</strong> Allowing self-signed SSL certificates may cause security implications.</em>',
+ 'JAB_ENABLE' => 'Enable Jabber',
+ 'JAB_ENABLE_EXPLAIN' => 'Enables use of Jabber messaging and notifications.',
+ 'JAB_GTALK_NOTE' => 'Please note that GTalk will not work because the <samp>dns_get_record</samp> function could not be found. This function is not available in PHP4, and is not implemented on Windows platforms. It currently does not work on BSD-based systems, including Mac OS.',
+ 'JAB_PACKAGE_SIZE' => 'Jabber package size',
+ 'JAB_PACKAGE_SIZE_EXPLAIN' => 'This is the number of messages sent in one package. If set to 0 the message is sent immediately and will not be queued for later sending.',
+ 'JAB_PASSWORD' => 'Jabber password',
+ 'JAB_PASSWORD_EXPLAIN' => '<em><strong>Warning:</strong> This password will be stored as plain text in the database, visible to everybody who can access your database or who can view this configuration page.</em>',
+ 'JAB_PORT' => 'Jabber port',
+ 'JAB_PORT_EXPLAIN' => 'Leave blank unless you know it is not port 5222.',
+ 'JAB_SERVER' => 'Jabber server',
+ 'JAB_SERVER_EXPLAIN' => 'See %sjabber.org%s for a list of servers.',
+ 'JAB_SETTINGS_CHANGED' => 'Jabber settings changed successfully.',
+ 'JAB_USE_SSL' => 'Use SSL to connect',
+ 'JAB_USE_SSL_EXPLAIN' => 'If enabled a secure connection is tried to be established. The Jabber port will be modified to 5223 if port 5222 is specified.',
+ 'JAB_USERNAME' => 'Jabber username or JID',
+ 'JAB_USERNAME_EXPLAIN' => 'Specify a registered username or a valid JID. The username will not be checked for validity. If you only specify a username, then your JID will be the username and the server you specified above. Else, specify a valid JID, for example user@jabber.org.',
+ 'JAB_VERIFY_PEER' => 'Verify SSL certificate',
+ 'JAB_VERIFY_PEER_EXPLAIN' => 'Require verification of SSL certificate used by Jabber server.<em><strong>Warning:</strong> Connecting peers with unverified SSL certificates may cause security implications.</em>',
+ 'JAB_VERIFY_PEER_NAME' => 'Verify Jabber peer name',
+ 'JAB_VERIFY_PEER_NAME_EXPLAIN' => 'Require verification of peer name for Jabber servers using SSL / TLS connections.<em><strong>Warning:</strong> Connecting to unverified peers may cause security implications.</em>',
));
diff --git a/phpBB/language/en/cli.php b/phpBB/language/en/cli.php
index 2f969ceede..1517e0e344 100644
--- a/phpBB/language/en/cli.php
+++ b/phpBB/language/en/cli.php
@@ -91,6 +91,8 @@ $lang = array_merge($lang, array(
'CLI_DESCRIPTION_UPDATE_CHECK_OPTION_CACHE' => 'Run check command with cache.',
'CLI_DESCRIPTION_UPDATE_CHECK_OPTION_STABILITY' => 'Run command choosing to check only stable or unstable versions.',
+ 'CLI_DESCRIPTION_UPDATE_HASH_BCRYPT' => 'Updates outdated password hashes to be hashed with bcrypt.',
+
'CLI_ERROR_INVALID_STABILITY' => '"%s" needs to be set to "stable" or "unstable".',
'CLI_DESCRIPTION_USER_ACTIVATE' => 'Activate (or deactivate) a user account.',
@@ -125,6 +127,7 @@ $lang = array_merge($lang, array(
'CLI_EXTENSIONS_ENABLED' => 'Enabled',
'CLI_FIXUP_RECALCULATE_EMAIL_HASH_SUCCESS' => 'Successfully recalculated all email hashes.',
+ 'CLI_FIXUP_UPDATE_HASH_BCRYPT_SUCCESS' => 'Successfully updated outdated password hashes to bcrypt.',
'CLI_MIGRATION_NAME' => 'Migration name, including the namespace (use forward slashes instead of backslashes to avoid problems).',
'CLI_MIGRATIONS_AVAILABLE' => 'Available migrations',
diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php
index c2e741c6a7..f7d9f58d43 100644
--- a/phpBB/language/en/install.php
+++ b/phpBB/language/en/install.php
@@ -83,7 +83,7 @@ $lang = array_merge($lang, array(
'ACP_LINK' => 'Take me to <a href="%1$s">the ACP</a>',
'INSTALL_PHPBB_INSTALLED' => 'phpBB is already installed.',
- 'INSTALL_PHPBB_NOT_INSTALLED' => 'phpBB is not installed yet.'
+ 'INSTALL_PHPBB_NOT_INSTALLED' => 'phpBB is not installed yet.',
));
// Requirements translation
@@ -119,7 +119,7 @@ $lang = array_merge($lang, array(
'RETEST_REQUIREMENTS' => 'Retest requirements',
- 'STAGE_REQUIREMENTS' => 'Check requirements'
+ 'STAGE_REQUIREMENTS' => 'Check requirements',
));
// General error messages
@@ -199,6 +199,7 @@ $lang = array_merge($lang, array(
'INST_ERR_DB_NO_NAME' => 'No database name specified.',
'INST_ERR_DB_FORUM_PATH' => 'The database file specified is within your board directory tree. You should put this file in a non web-accessible location.',
'INST_ERR_DB_CONNECT' => 'Could not connect to the database, see error message below.',
+ 'INST_ERR_DB_NO_WRITABLE' => 'Both the database and the directory containing it must be writable.',
'INST_ERR_DB_NO_ERROR' => 'No error message given.',
'INST_ERR_PREFIX' => 'Tables with the specified prefix already exist, please choose an alternative.',
'INST_ERR_DB_NO_MYSQLI' => 'The version of MySQL installed on this machine is incompatible with the “MySQL with MySQLi Extension” option you have selected. Please try the “MySQL” option instead.',
diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php
index e816e06488..b4bf92836f 100644
--- a/phpBB/memberlist.php
+++ b/phpBB/memberlist.php
@@ -105,7 +105,10 @@ switch ($mode)
{
case 'team':
// Display a listing of board admins, moderators
- include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ if (!function_exists('user_get_id_name'))
+ {
+ include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ }
$page_title = $user->lang['THE_TEAM'];
$template_html = 'memberlist_team.html';
diff --git a/phpBB/phpbb/console/command/fixup/update_hashes.php b/phpBB/phpbb/console/command/fixup/update_hashes.php
new file mode 100644
index 0000000000..4bcc3b5d19
--- /dev/null
+++ b/phpBB/phpbb/console/command/fixup/update_hashes.php
@@ -0,0 +1,117 @@
+<?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\fixup;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Helper\ProgressBar;
+
+class update_hashes extends \phpbb\console\command\command
+{
+ /** @var \phpbb\config\config */
+ protected $config;
+
+ /** @var \phpbb\db\driver\driver_interface */
+ protected $db;
+
+ /** @var \phpbb\passwords\manager */
+ protected $passwords_manager;
+
+ /** @var string Default hashing type */
+ protected $default_type;
+
+ /**
+ * Update_hashes constructor
+ *
+ * @param \phpbb\config\config $config
+ * @param \phpbb\user $user
+ * @param \phpbb\db\driver\driver_interface $db
+ * @param \phpbb\passwords\manager $passwords_manager
+ * @param array $hashing_algorithms Hashing driver
+ * service collection
+ * @param array $defaults Default password types
+ */
+ public function __construct(\phpbb\config\config $config, \phpbb\user $user,
+ \phpbb\db\driver\driver_interface $db, \phpbb\passwords\manager $passwords_manager,
+ $hashing_algorithms, $defaults)
+ {
+ $this->config = $config;
+ $this->db = $db;
+
+ $this->passwords_manager = $passwords_manager;
+
+ foreach ($defaults as $type)
+ {
+ if ($hashing_algorithms[$type]->is_supported())
+ {
+ $this->default_type = $type;
+ break;
+ }
+ }
+
+ parent::__construct($user);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function configure()
+ {
+ $this
+ ->setName('fixup:update-hashes')
+ ->setDescription($this->user->lang('CLI_DESCRIPTION_UPDATE_HASH_BCRYPT'))
+ ;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ // Get count to be able to display progress
+ $sql = 'SELECT COUNT(user_id) AS count
+ FROM ' . USERS_TABLE . '
+ WHERE user_password ' . $this->db->sql_like_expression('$H$' . $this->db->get_any_char()) . '
+ OR user_password ' . $this->db->sql_like_expression('$CP$' . $this->db->get_any_char());
+ $result = $this->db->sql_query($sql);
+ $total_update_passwords = $this->db->sql_fetchfield('count');
+ $this->db->sql_freeresult($result);
+
+ // Create progress bar
+ $progress_bar = new ProgressBar($output, $total_update_passwords);
+ $progress_bar->start();
+
+ $sql = 'SELECT user_id, user_password
+ FROM ' . USERS_TABLE . '
+ WHERE user_password ' . $this->db->sql_like_expression('$H$' . $this->db->get_any_char()) . '
+ OR user_password ' . $this->db->sql_like_expression('$CP$' . $this->db->get_any_char());
+ $result = $this->db->sql_query($sql);
+
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $new_hash = $this->passwords_manager->hash($row['user_password'], array($this->default_type));
+
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET user_password = "' . $this->db->sql_escape($new_hash) . '"
+ WHERE user_id = ' . (int) $row['user_id'];
+ $this->db->sql_query($sql);
+ $progress_bar->advance();
+ }
+
+ $this->config->set('update_hashes_last_cron', time());
+
+ $progress_bar->finish();
+
+ $output->writeln('<info>' . $this->user->lang('CLI_FIXUP_UPDATE_HASH_BCRYPT_SUCCESS') . '</info>');
+ }
+}
diff --git a/phpBB/phpbb/console/command/update/check.php b/phpBB/phpbb/console/command/update/check.php
index ed8ad79eea..9ced651e8b 100644
--- a/phpBB/phpbb/console/command/update/check.php
+++ b/phpBB/phpbb/console/command/update/check.php
@@ -325,7 +325,7 @@ class check extends \phpbb\console\command\command
$io->table([
$this->language->lang('VERSION'),
$this->language->lang('ANNOUNCEMENT_TOPIC'),
- $this->language->lang('DOWNLOAD_LATEST'),
+ $this->language->lang('DOWNLOAD_LATEST'),
], $rows);
}
}
diff --git a/phpBB/phpbb/cron/task/core/update_hashes.php b/phpBB/phpbb/cron/task/core/update_hashes.php
new file mode 100644
index 0000000000..a4fe477d99
--- /dev/null
+++ b/phpBB/phpbb/cron/task/core/update_hashes.php
@@ -0,0 +1,130 @@
+<?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\cron\task\core;
+
+/**
+ * Update old hashes to the current default hashing algorithm
+ *
+ * It is intended to gradually update all "old" style hashes to the
+ * current default hashing algorithm.
+ */
+class update_hashes extends \phpbb\cron\task\base
+{
+ /** @var \phpbb\config\config */
+ protected $config;
+
+ /** @var \phpbb\db\driver\driver_interface */
+ protected $db;
+
+ /** @var \phpbb\lock\db */
+ protected $update_lock;
+
+ /** @var \phpbb\passwords\manager */
+ protected $passwords_manager;
+
+ /** @var string Default hashing type */
+ protected $default_type;
+
+ /**
+ * Constructor.
+ *
+ * @param \phpbb\config\config $config
+ * @param \phpbb\db\driver\driver_interface $db
+ * @param \phpbb\lock\db $update_lock
+ * @param \phpbb\passwords\manager $passwords_manager
+ * @param array $hashing_algorithms Hashing driver
+ * service collection
+ * @param array $defaults Default password types
+ */
+ public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\lock\db $update_lock, \phpbb\passwords\manager $passwords_manager, $hashing_algorithms, $defaults)
+ {
+ $this->config = $config;
+ $this->db = $db;
+ $this->passwords_manager = $passwords_manager;
+ $this->update_lock = $update_lock;
+
+ foreach ($defaults as $type)
+ {
+ if ($hashing_algorithms[$type]->is_supported())
+ {
+ $this->default_type = $type;
+ break;
+ }
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function is_runnable()
+ {
+ return !$this->config['use_system_cron'];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function should_run()
+ {
+ if (!empty($this->config['update_hashes_lock']))
+ {
+ $last_run = explode(' ', $this->config['update_hashes_lock']);
+ if ($last_run[0] + 60 >= time())
+ {
+ return false;
+ }
+ }
+
+ return $this->config['enable_update_hashes'] && $this->config['update_hashes_last_cron'] < (time() - 60);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function run()
+ {
+ if ($this->update_lock->acquire())
+ {
+ $sql = 'SELECT user_id, user_password
+ FROM ' . USERS_TABLE . '
+ WHERE user_password ' . $this->db->sql_like_expression('$H$' . $this->db->get_any_char()) . '
+ OR user_password ' . $this->db->sql_like_expression('$CP$' . $this->db->get_any_char());
+ $result = $this->db->sql_query_limit($sql, 20);
+
+ $affected_rows = 0;
+
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $new_hash = $this->passwords_manager->hash($row['user_password'], array($this->default_type));
+
+ // Increase number so we know that users were selected from the database
+ $affected_rows++;
+
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET user_password = "' . $this->db->sql_escape($new_hash) . '"
+ WHERE user_id = ' . (int) $row['user_id'];
+ $this->db->sql_query($sql);
+ }
+
+ $this->config->set('update_hashes_last_cron', time());
+ $this->update_lock->release();
+
+ // Stop cron for good once all hashes are converted
+ if ($affected_rows === 0)
+ {
+ $this->config->set('enable_update_hashes', '0');
+ }
+ }
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v31x/add_jabber_ssl_context_config_options.php b/phpBB/phpbb/db/migration/data/v31x/add_jabber_ssl_context_config_options.php
new file mode 100644
index 0000000000..9f416fe069
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v31x/add_jabber_ssl_context_config_options.php
@@ -0,0 +1,32 @@
+<?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\db\migration\data\v31x;
+
+class add_jabber_ssl_context_config_options extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array('\phpbb\db\migration\data\v31x\v3110');
+ }
+
+ public function update_data()
+ {
+ return array(
+ // See http://php.net/manual/en/context.ssl.php
+ array('config.add', array('jab_verify_peer', 1)),
+ array('config.add', array('jab_verify_peer_name', 1)),
+ array('config.add', array('jab_allow_self_signed', 0)),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v31x/add_latest_topics_index.php b/phpBB/phpbb/db/migration/data/v31x/add_latest_topics_index.php
new file mode 100644
index 0000000000..fa2899e348
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v31x/add_latest_topics_index.php
@@ -0,0 +1,51 @@
+<?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\db\migration\data\v31x;
+
+class add_latest_topics_index extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v31x\v3110',
+ );
+ }
+
+ public function update_schema()
+ {
+ return array(
+ 'add_index' => array(
+ $this->table_prefix . 'topics' => array(
+ 'latest_topics' => array(
+ 'forum_id',
+ 'topic_last_post_time',
+ 'topic_last_post_id',
+ 'topic_moved_id',
+ ),
+ ),
+ ),
+ );
+ }
+
+ public function revert_schema()
+ {
+ return array(
+ 'drop_keys' => array(
+ $this->table_prefix . 'topics' => array(
+ 'latest_topics',
+ ),
+ ),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v31x/update_hashes.php b/phpBB/phpbb/db/migration/data/v31x/update_hashes.php
new file mode 100644
index 0000000000..aa83c3ffbf
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v31x/update_hashes.php
@@ -0,0 +1,33 @@
+<?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\db\migration\data\v31x;
+
+class update_hashes extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v31x\v3110',
+ );
+ }
+
+ public function update_data()
+ {
+ return array(
+ array('config.add', array('enable_update_hashes', '1')),
+ array('config.add', array('update_hashes_lock', '')),
+ array('config.add', array('update_hashes_last_cron', '0'))
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v32x/load_user_activity_limit.php b/phpBB/phpbb/db/migration/data/v32x/load_user_activity_limit.php
new file mode 100644
index 0000000000..71bb6c00bf
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v32x/load_user_activity_limit.php
@@ -0,0 +1,36 @@
+<?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\db\migration\data\v32x;
+
+class load_user_activity_limit extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v320\v320',
+ );
+ }
+
+ public function effectively_installed()
+ {
+ return isset($this->config['load_user_activity_limit']);
+ }
+
+ public function update_data()
+ {
+ return array(
+ array('config.add', array('load_user_activity_limit', '5000')),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p1.php b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p1.php
new file mode 100644
index 0000000000..93ff31ec6c
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p1.php
@@ -0,0 +1,46 @@
+<?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\db\migration\data\v32x;
+
+class user_notifications_table_index_p1 extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v32x\cookie_notice_p2',
+ );
+ }
+
+ public function update_schema()
+ {
+ return array(
+ 'add_index' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'user_id' => array('user_id'),
+ ),
+ ),
+ );
+ }
+
+ public function revert_schema()
+ {
+ return array(
+ 'drop_keys' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'user_id',
+ ),
+ ),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p2.php b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p2.php
new file mode 100644
index 0000000000..0a471766a0
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p2.php
@@ -0,0 +1,46 @@
+<?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\db\migration\data\v32x;
+
+class user_notifications_table_index_p2 extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v32x\user_notifications_table_index_p1',
+ );
+ }
+
+ public function update_schema()
+ {
+ return array(
+ 'add_index' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'uid_itm_id' => array('user_id', 'item_id'),
+ ),
+ ),
+ );
+ }
+
+ public function revert_schema()
+ {
+ return array(
+ 'drop_keys' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'uid_itm_id',
+ ),
+ ),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p3.php b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p3.php
new file mode 100644
index 0000000000..1636b3024a
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_index_p3.php
@@ -0,0 +1,46 @@
+<?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\db\migration\data\v32x;
+
+class user_notifications_table_index_p3 extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v32x\user_notifications_table_index_p2',
+ );
+ }
+
+ public function update_schema()
+ {
+ return array(
+ 'add_index' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'usr_itm_tpe' => array('user_id', 'item_type', 'item_id'),
+ ),
+ ),
+ );
+ }
+
+ public function revert_schema()
+ {
+ return array(
+ 'drop_keys' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'usr_itm_tpe',
+ ),
+ ),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_reduce_column_sizes.php b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_reduce_column_sizes.php
new file mode 100644
index 0000000000..e0a107782e
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_reduce_column_sizes.php
@@ -0,0 +1,48 @@
+<?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\db\migration\data\v32x;
+
+class user_notifications_table_reduce_column_sizes extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v32x\user_notifications_table_index_p3',
+ );
+ }
+
+ public function update_schema()
+ {
+ return array(
+ 'change_columns' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'item_type' => array('VCHAR:165', ''),
+ 'method' => array('VCHAR:165', ''),
+ ),
+ ),
+ );
+ }
+
+ public function revert_schema()
+ {
+ return array(
+ 'change_columns' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'item_type' => array('VCHAR:255', ''),
+ 'method' => array('VCHAR:255', ''),
+ ),
+ ),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_remove_duplicates.php b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_remove_duplicates.php
new file mode 100644
index 0000000000..50d0642056
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_remove_duplicates.php
@@ -0,0 +1,55 @@
+<?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\db\migration\data\v32x;
+
+class user_notifications_table_remove_duplicates extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v32x\user_notifications_table_temp_index',
+ );
+ }
+
+ public function update_data()
+ {
+ return array(
+ array('custom', array(array($this, 'remove_duplicates'))),
+ );
+ }
+
+ public function remove_duplicates()
+ {
+ $insert_buffer = new \phpbb\db\sql_insert_buffer($this->db, $this->table_prefix . 'user_notifications');
+
+ $sql = "SELECT item_type, item_id, user_id, method, MAX(notify) AS notify
+ FROM {$this->table_prefix}user_notifications
+ GROUP BY item_type, item_id, user_id, method
+ HAVING COUNT(item_type) > 1";
+
+ $result = $this->sql_query($sql);
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ // Delete the duplicate entries
+ $this->sql_query("DELETE FROM {$this->table_prefix}user_notifications
+ WHERE user_id = {$row['user_id']}
+ AND item_type = '{$row['item_type']}'
+ AND method = '{$row['method']}'");
+
+ // And re-insert as a single one
+ $insert_buffer->insert($row);
+ }
+ $this->db->sql_freeresult($result);
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_temp_index.php b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_temp_index.php
new file mode 100644
index 0000000000..80256a0e0a
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_temp_index.php
@@ -0,0 +1,46 @@
+<?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\db\migration\data\v32x;
+
+class user_notifications_table_temp_index extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v32x\user_notifications_table_reduce_column_sizes',
+ );
+ }
+
+ public function update_schema()
+ {
+ return array(
+ 'add_index' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'itm_usr_mthd' => array('item_type', 'item_id', 'user_id', 'method'),
+ ),
+ ),
+ );
+ }
+
+ public function revert_schema()
+ {
+ return array(
+ 'drop_keys' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'itm_usr_mthd',
+ ),
+ ),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_unique_index.php b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_unique_index.php
new file mode 100644
index 0000000000..51cf90c8a0
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v32x/user_notifications_table_unique_index.php
@@ -0,0 +1,51 @@
+<?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\db\migration\data\v32x;
+
+class user_notifications_table_unique_index extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v32x\user_notifications_table_remove_duplicates',
+ );
+ }
+
+ public function update_schema()
+ {
+ return array(
+ 'drop_keys' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'itm_usr_mthd',
+ ),
+ ),
+ 'add_unique_index' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'itm_usr_mthd' => array('item_type', 'item_id', 'user_id', 'method'),
+ ),
+ ),
+ );
+ }
+
+ public function revert_schema()
+ {
+ return array(
+ 'drop_keys' => array(
+ $this->table_prefix . 'user_notifications' => array(
+ 'itm_usr_mthd',
+ ),
+ ),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/tools/tools.php b/phpBB/phpbb/db/tools/tools.php
index 9273d69cd6..76036554d2 100644
--- a/phpBB/phpbb/db/tools/tools.php
+++ b/phpBB/phpbb/db/tools/tools.php
@@ -946,7 +946,20 @@ class tools implements tools_interface
{
case 'oracle':
case 'sqlite3':
- $row[$col] = substr($row[$col], strlen($table_name) + 1);
+ $index_name = $this->check_index_name_length($table_name, $table_name . '_' . $index_name, false);
+ $table_prefix = substr(CONFIG_TABLE, 0, -6); // strlen(config)
+
+ if (strpos($index_name , $table_name) === false)
+ {
+ if (strpos($index_name, $table_prefix) !== false)
+ {
+ $row[$col] = substr($row[$col], strlen($table_prefix) + 1);
+ }
+ else
+ {
+ $row[$col] = substr($row[$col], strlen($table_name) + 1);
+ }
+ }
break;
}
@@ -1359,12 +1372,14 @@ class tools implements tools_interface
{
case 'mysql_40':
case 'mysql_41':
+ $index_name = $this->check_index_name_length($table_name, $index_name, false);
$statements[] = 'DROP INDEX ' . $index_name . ' ON ' . $table_name;
break;
case 'oracle':
case 'sqlite3':
- $statements[] = 'DROP INDEX ' . $table_name . '_' . $index_name;
+ $index_name = $this->check_index_name_length($table_name, $table_name . '_' . $index_name, false);
+ $statements[] = 'DROP INDEX ' . $index_name;
break;
}
@@ -1487,17 +1502,17 @@ class tools implements tools_interface
{
$statements = array();
- $this->check_index_name_length($table_name, $index_name);
-
switch ($this->sql_layer)
{
case 'oracle':
case 'sqlite3':
- $statements[] = 'CREATE UNIQUE INDEX ' . $table_name . '_' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')';
+ $index_name = $this->check_index_name_length($table_name, $table_name . '_' . $index_name);
+ $statements[] = 'CREATE UNIQUE INDEX ' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')';
break;
case 'mysql_40':
case 'mysql_41':
+ $index_name = $this->check_index_name_length($table_name, $index_name);
$statements[] = 'ALTER TABLE ' . $table_name . ' ADD UNIQUE INDEX ' . $index_name . '(' . implode(', ', $column) . ')';
break;
}
@@ -1512,8 +1527,6 @@ class tools implements tools_interface
{
$statements = array();
- $this->check_index_name_length($table_name, $index_name);
-
// remove index length unless MySQL4
if ('mysql_40' != $this->sql_layer)
{
@@ -1524,7 +1537,8 @@ class tools implements tools_interface
{
case 'oracle':
case 'sqlite3':
- $statements[] = 'CREATE INDEX ' . $table_name . '_' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')';
+ $index_name = $this->check_index_name_length($table_name, $table_name . '_' . $index_name);
+ $statements[] = 'CREATE INDEX ' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')';
break;
case 'mysql_40':
@@ -1539,6 +1553,7 @@ class tools implements tools_interface
}
// no break
case 'mysql_41':
+ $index_name = $this->check_index_name_length($table_name, $index_name);
$statements[] = 'ALTER TABLE ' . $table_name . ' ADD INDEX ' . $index_name . ' (' . implode(', ', $column) . ')';
break;
}
@@ -1551,15 +1566,35 @@ class tools implements tools_interface
*
* @param string $table_name
* @param string $index_name
+ * @param bool $throw_error
+ * @return string The index name, shortened if too long
*/
- protected function check_index_name_length($table_name, $index_name)
+ protected function check_index_name_length($table_name, $index_name, $throw_error = true)
{
- $table_prefix = substr(CONFIG_TABLE, 0, -6); // strlen(config)
- if (strlen($table_name . $index_name) - strlen($table_prefix) > 24)
+ if (strlen($index_name) > 30)
{
- $max_length = strlen($table_prefix) + 24;
- trigger_error("Index name '{$table_name}_$index_name' on table '$table_name' is too long. The maximum is $max_length characters.", E_USER_ERROR);
+ // Try removing the table prefix if it's at the beginning
+ $table_prefix = substr(CONFIG_TABLE, 0, -6); // strlen(config)
+ if (strpos($index_name, $table_prefix) === 0)
+ {
+ $index_name = substr($index_name, strlen($table_prefix) + 1);
+ return $this->check_index_name_length($table_name, $index_name);
+ }
+
+ // Try removing the table name then
+ if (strpos($index_name, $table_name) === 0)
+ {
+ $index_name = substr($index_name, strlen($table_name) + 1);
+ return $this->check_index_name_length($table_name, $index_name);
+ }
+
+ if ($throw_error)
+ {
+ trigger_error("Index name '$index_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR);
+ }
}
+
+ return $index_name;
}
/**
diff --git a/phpBB/phpbb/files/filespec.php b/phpBB/phpbb/files/filespec.php
index 2ff2a92c83..f1a32ef4a8 100644
--- a/phpBB/phpbb/files/filespec.php
+++ b/phpBB/phpbb/files/filespec.php
@@ -129,7 +129,7 @@ class filespec
$this->class_initialized = true;
$this->filename = $upload_ary['tmp_name'];
$this->filesize = $upload_ary['size'];
- $name = (STRIP) ? stripslashes($upload_ary['name']) : $upload_ary['name'];
+ $name = $upload_ary['name'];
$name = trim(utf8_basename($name));
$this->realname = $this->uploadname = $name;
$this->mimetype = $upload_ary['type'];
diff --git a/phpBB/phpbb/help/controller/help.php b/phpBB/phpbb/help/controller/help.php
index 9cc3b0c8b4..3bf6fe3098 100644
--- a/phpBB/phpbb/help/controller/help.php
+++ b/phpBB/phpbb/help/controller/help.php
@@ -64,6 +64,7 @@ class help
*/
public function handle($mode)
{
+ $template_file = 'faq_body.html';
switch ($mode)
{
case 'faq':
@@ -85,13 +86,16 @@ class help
* @var string lang_file Language file containing the help data
* @var string ext_name Vendor and extension name where the help
* language file can be loaded from
+ * @var string template_file Template file name
* @since 3.1.4-RC1
+ * @changed 3.1.11-RC1 Added template_file var
*/
$vars = array(
'page_title',
'mode',
'lang_file',
'ext_name',
+ 'template_file',
);
extract($this->dispatcher->trigger_event('core.faq_mode_validation', compact($vars)));
@@ -113,7 +117,7 @@ class help
$this->assign_to_template($this->user->help);
make_jumpbox(append_sid("{$this->root_path}viewforum.{$this->php_ext}"));
- return $this->helper->render('faq_body.html', $page_title);
+ return $this->helper->render($template_file, $page_title);
}
/**
diff --git a/phpBB/phpbb/install/helper/database.php b/phpBB/phpbb/install/helper/database.php
index 192f0a3654..59b86a8ca7 100644
--- a/phpBB/phpbb/install/helper/database.php
+++ b/phpBB/phpbb/install/helper/database.php
@@ -336,6 +336,15 @@ class database
);
}
+ // Check if SQLite database is writable
+ if ($dbms_info['SCHEMA'] === 'sqlite'
+ && (!$this->filesystem->is_writable($dbhost) || !$this->filesystem->is_writable(pathinfo($dbhost, PATHINFO_DIRNAME))))
+ {
+ $errors[] = array(
+ 'title' =>'INST_ERR_DB_NO_WRITABLE',
+ );
+ }
+
// Try to connect to db
if (is_array($db->sql_connect($dbhost, $dbuser, $dbpass, $dbname, $dbport, false, true)))
{
diff --git a/phpBB/phpbb/passwords/driver/md5_phpbb2.php b/phpBB/phpbb/passwords/driver/md5_phpbb2.php
index bd8cc51e5a..b38b041d6c 100644
--- a/phpBB/phpbb/passwords/driver/md5_phpbb2.php
+++ b/phpBB/phpbb/passwords/driver/md5_phpbb2.php
@@ -95,7 +95,7 @@ class md5_phpbb2 extends base
// in phpBB2 passwords were used exactly as they were sent, with addslashes applied
$password_old_format = isset($_REQUEST['password']) ? (string) $_REQUEST['password'] : '';
- $password_old_format = (!STRIP) ? addslashes($password_old_format) : $password_old_format;
+ $password_old_format = addslashes($password_old_format);
$password_new_format = $this->request->variable('password', '', true);
if ($super_globals_disabled)
diff --git a/phpBB/phpbb/template/base.php b/phpBB/phpbb/template/base.php
index 41c0a01ba8..d502aceab8 100644
--- a/phpBB/phpbb/template/base.php
+++ b/phpBB/phpbb/template/base.php
@@ -107,6 +107,27 @@ abstract class base implements template
/**
* {@inheritdoc}
*/
+ public function retrieve_vars(array $vararray)
+ {
+ $result = array();
+ foreach ($vararray as $varname)
+ {
+ $result[$varname] = $this->retrieve_var($varname);
+ }
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function retrieve_var($varname)
+ {
+ return $this->context->retrieve_var($varname);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
public function assign_block_vars($blockname, array $vararray)
{
$this->context->assign_block_vars($blockname, $vararray);
@@ -127,6 +148,14 @@ abstract class base implements template
/**
* {@inheritdoc}
*/
+ public function retrieve_block_vars($blockname, array $vararray)
+ {
+ return $this->context->retrieve_block_vars($blockname, $vararray);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert')
{
return $this->context->alter_block_array($blockname, $vararray, $key, $mode);
diff --git a/phpBB/phpbb/template/context.php b/phpBB/phpbb/template/context.php
index 5e4f71a2a9..392efd5933 100644
--- a/phpBB/phpbb/template/context.php
+++ b/phpBB/phpbb/template/context.php
@@ -87,6 +87,17 @@ class context
}
/**
+ * Retreive a single scalar value from a single key.
+ *
+ * @param string $varname Variable name
+ * @return mixed Variable value, or null if not set
+ */
+ public function retrieve_var($varname)
+ {
+ return isset($this->rootref[$varname]) ? $this->rootref[$varname] : null;
+ }
+
+ /**
* Returns a reference to template data array.
*
* This function is public so that template renderer may invoke it.
@@ -264,6 +275,68 @@ class context
}
/**
+ * Retrieve key variable pairs from the specified block
+ *
+ * @param string $blockname Name of block to retrieve $vararray from
+ * @param array $vararray An array of variable names, empty array retrieves all vars
+ * @return array of hashes with variable name as key and retrieved value or null as value
+ */
+ public function retrieve_block_vars($blockname, array $vararray)
+ {
+ // For nested block, $blockcount > 0, for top-level block, $blockcount == 0
+ $blocks = explode('.', $blockname);
+ $blockcount = sizeof($blocks) - 1;
+
+ $block = $this->tpldata;
+ for ($i = 0; $i <= $blockcount; $i++)
+ {
+ if (($pos = strpos($blocks[$i], '[')) !== false)
+ {
+ $name = substr($blocks[$i], 0, $pos);
+
+ if (strpos($blocks[$i], '[]') === $pos)
+ {
+ $index = sizeof($block[$name]) - 1;
+ }
+ else
+ {
+ $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1);
+ }
+ }
+ else
+ {
+ $name = $blocks[$i];
+ $index = sizeof($block[$name]) - 1;
+ }
+ $block = $block[$name];
+ $block = $block[$index];
+ }
+
+ $result = array();
+ if ($vararray === array())
+ {
+ // The calculated vars that depend on the block position are excluded from the complete block returned results
+ $excluded_vars = array('S_FIRST_ROW', 'S_LAST_ROW', 'S_BLOCK_NAME', 'S_NUM_ROWS', 'S_ROW_COUNT', 'S_ROW_NUM');
+
+ foreach ($block as $varname => $varvalue)
+ {
+ if ($varname === strtoupper($varname) && !is_array($varvalue) && !in_array($varname, $excluded_vars))
+ {
+ $result[$varname] = $varvalue;
+ }
+ }
+ }
+ else
+ {
+ foreach ($vararray as $varname)
+ {
+ $result[$varname] = isset($block[$varname]) ? $block[$varname] : null;
+ }
+ }
+ return $result;
+ }
+
+ /**
* Find the index for a specified key in the innermost specified block
*
* @param string $blockname the blockname, for example 'loop'
diff --git a/phpBB/phpbb/template/template.php b/phpBB/phpbb/template/template.php
index d1ec442e9a..df83d5bc43 100644
--- a/phpBB/phpbb/template/template.php
+++ b/phpBB/phpbb/template/template.php
@@ -128,6 +128,22 @@ interface template
public function append_var($varname, $varval);
/**
+ * Retrieve multiple template values
+ *
+ * @param array $vararray An array with variable names
+ * @return array A hash of variable name => value pairs (value is null if not set)
+ */
+ public function retrieve_vars(array $vararray);
+
+ /**
+ * Retreive a single scalar value from a single key.
+ *
+ * @param string $varname Variable name
+ * @return mixed Variable value, or null if not set
+ */
+ public function retrieve_var($varname);
+
+ /**
* Assign key variable pairs from an array to a specified block
* @param string $blockname Name of block to assign $vararray to
* @param array $vararray A hash of variable name => value pairs
@@ -144,6 +160,14 @@ interface template
public function assign_block_vars_array($blockname, array $block_vars_array);
/**
+ * Retrieve variable values from an specified block
+ * @param string $blockname Name of block to retrieve $vararray from
+ * @param array $vararray An array with variable names, empty array gets all vars
+ * @return array A hash of variable name => value pairs (value is null if not set)
+ */
+ public function retrieve_block_vars($blockname, array $vararray);
+
+ /**
* Change already assigned key variable pair (one-dimensional - single loop entry)
*
* An example of how to use this function:
diff --git a/phpBB/phpbb/template/twig/lexer.php b/phpBB/phpbb/template/twig/lexer.php
index f1542109a4..d0bcfa615e 100644
--- a/phpBB/phpbb/template/twig/lexer.php
+++ b/phpBB/phpbb/template/twig/lexer.php
@@ -22,6 +22,14 @@ class lexer extends \Twig_Lexer
public function tokenize($code, $filename = null)
{
+ // Handle \Twig_Source format input
+ if ($code instanceof \Twig_Source)
+ {
+ $source = $code;
+ $code = $source->getCode();
+ $filename = $source->getName();
+ }
+
// Our phpBB tags
// Commented out tokens are handled separately from the main replace
$phpbb_tags = array(
@@ -125,7 +133,8 @@ class lexer extends \Twig_Lexer
// Appends any filters
$code = preg_replace('#{([a-zA-Z0-9_\.]+)(\|[^}]+?)?}#', '{{ $1$2 }}', $code);
- return parent::tokenize($code, $filename);
+ // Tokenize \Twig_Source instance
+ return parent::tokenize(new \Twig_Source($code, $filename));
}
/**
diff --git a/phpBB/phpbb/template/twig/loader.php b/phpBB/phpbb/template/twig/loader.php
index d2b42852ce..c13e3ee298 100644
--- a/phpBB/phpbb/template/twig/loader.php
+++ b/phpBB/phpbb/template/twig/loader.php
@@ -35,7 +35,7 @@ class loader extends \Twig_Loader_Filesystem
{
$this->filesystem = $filesystem;
- parent::__construct($paths);
+ parent::__construct($paths, $this->filesystem->realpath(dirname(__FILE__)));
}
/**
diff --git a/phpBB/posting.php b/phpBB/posting.php
index 6d4c3cb395..df2ef0d13c 100644
--- a/phpBB/posting.php
+++ b/phpBB/posting.php
@@ -1073,7 +1073,10 @@ if ($submit || $preview || $refresh)
// Validate username
if (($post_data['username'] && !$user->data['is_registered']) || ($mode == 'edit' && $post_data['poster_id'] == ANONYMOUS && $post_data['username'] && $post_data['post_username'] && $post_data['post_username'] != $post_data['username']))
{
- include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ if (!function_exists('validate_username'))
+ {
+ include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ }
$user->add_lang('ucp');
@@ -1189,6 +1192,11 @@ if ($submit || $preview || $refresh)
{
// We have a poll but the editing user is not permitted to create/edit it.
// So we just keep the original poll-data.
+ // Decode the poll title and options text fisrt.
+ $original_poll_data['poll_title'] = $bbcode_utils->unparse($original_poll_data['poll_title']);
+ $original_poll_data['poll_option_text'] = $bbcode_utils->unparse($original_poll_data['poll_option_text']);
+ $original_poll_data['poll_options'] = explode("\n", $original_poll_data['poll_option_text']);
+
$poll = array_merge($original_poll_data, array(
'enable_bbcode' => $post_data['enable_bbcode'],
'enable_urls' => $post_data['enable_urls'],
diff --git a/phpBB/styles/prosilver/template/ajax.js b/phpBB/styles/prosilver/template/ajax.js
index 1bb3aabb9b..6903ad2261 100644
--- a/phpBB/styles/prosilver/template/ajax.js
+++ b/phpBB/styles/prosilver/template/ajax.js
@@ -26,7 +26,7 @@ phpbb.addAjaxCallback('mark_forums_read', function(res) {
});
// Mark subforums read
- $('a.subforum[class*="unread"]').removeClass('unread').addClass('read');
+ $('a.subforum[class*="unread"]').removeClass('unread').addClass('read').children('.icon.icon-red').removeClass('icon-red').addClass('icon-blue');
// Mark topics read if we are watching a category and showing active topics
if ($('#active_topics').length) {
diff --git a/phpBB/styles/prosilver/template/forumlist_body.html b/phpBB/styles/prosilver/template/forumlist_body.html
index 4ab6de250f..621e226260 100644
--- a/phpBB/styles/prosilver/template/forumlist_body.html
+++ b/phpBB/styles/prosilver/template/forumlist_body.html
@@ -52,8 +52,8 @@
<!-- EVENT forumlist_body_subforums_before -->
<br /><strong>{forumrow.L_SUBFORUM_STR}{L_COLON}</strong>
<!-- BEGIN subforum -->
- <a href="{forumrow.subforum.U_SUBFORUM}" class="subforum<!-- IF forumrow.subforum.S_UNREAD --> unread<!-- ELSE --> read<!-- ENDIF -->" title="<!-- IF forumrow.subforum.S_UNREAD -->{L_UNREAD_POSTS}<!-- ELSE -->{L_NO_UNREAD_POSTS}<!-- ENDIF -->">
- <i class="icon <!-- IF forumrow.subforum.IS_LINK -->fa-external-link<!-- ELSE -->fa-file-o<!-- ENDIF --> fa-fw <!-- IF forumrow.subforum.S_UNREAD --> icon-red<!-- ELSE --> icon-blue<!-- ENDIF --> icon-md" aria-hidden="true"></i>{forumrow.subforum.SUBFORUM_NAME}</a><!-- IF not forumrow.subforum.S_LAST_ROW -->{L_COMMA_SEPARATOR}<!-- ENDIF -->
+ <!-- EVENT forumlist_body_subforum_link_prepend --><a href="{forumrow.subforum.U_SUBFORUM}" class="subforum<!-- IF forumrow.subforum.S_UNREAD --> unread<!-- ELSE --> read<!-- ENDIF -->" title="<!-- IF forumrow.subforum.S_UNREAD -->{L_UNREAD_POSTS}<!-- ELSE -->{L_NO_UNREAD_POSTS}<!-- ENDIF -->">
+ <i class="icon <!-- IF forumrow.subforum.IS_LINK -->fa-external-link<!-- ELSE -->fa-file-o<!-- ENDIF --> fa-fw <!-- IF forumrow.subforum.S_UNREAD --> icon-red<!-- ELSE --> icon-blue<!-- ENDIF --> icon-md" aria-hidden="true"></i>{forumrow.subforum.SUBFORUM_NAME}</a><!-- IF not forumrow.subforum.S_LAST_ROW -->{L_COMMA_SEPARATOR}<!-- ENDIF --><!-- EVENT forumlist_body_subforum_link_append -->
<!-- END subforum -->
<!-- EVENT forumlist_body_subforums_after -->
<!-- ENDIF -->
diff --git a/phpBB/styles/prosilver/template/index_body.html b/phpBB/styles/prosilver/template/index_body.html
index b4febd1d49..b292c40eb2 100644
--- a/phpBB/styles/prosilver/template/index_body.html
+++ b/phpBB/styles/prosilver/template/index_body.html
@@ -40,8 +40,11 @@
<!-- IF U_VIEWONLINE --><h3><a href="{U_VIEWONLINE}">{L_WHO_IS_ONLINE}</a></h3><!-- ELSE --><h3>{L_WHO_IS_ONLINE}</h3><!-- ENDIF -->
<p>
<!-- EVENT index_body_block_online_prepend -->
- {TOTAL_USERS_ONLINE} ({L_ONLINE_EXPLAIN})<br />{RECORD_USERS}<br /> <br />{LOGGED_IN_USER_LIST}
- <!-- IF LEGEND --><br /><em>{L_LEGEND}{L_COLON} {LEGEND}</em><!-- ENDIF -->
+ {TOTAL_USERS_ONLINE} ({L_ONLINE_EXPLAIN})<br />{RECORD_USERS}<br />
+ <!-- IF U_VIEWONLINE -->
+ <br />{LOGGED_IN_USER_LIST}
+ <!-- IF LEGEND --><br /><em>{L_LEGEND}{L_COLON} {LEGEND}</em><!-- ENDIF -->
+ <!-- ENDIF -->
<!-- EVENT index_body_block_online_append -->
</p>
</div>
diff --git a/phpBB/styles/prosilver/template/mcp_topic.html b/phpBB/styles/prosilver/template/mcp_topic.html
index d64c9c9a21..35b1ecca0a 100644
--- a/phpBB/styles/prosilver/template/mcp_topic.html
+++ b/phpBB/styles/prosilver/template/mcp_topic.html
@@ -111,7 +111,9 @@
</li>
</ul>
+ <!-- EVENT mcp_topic_postrow_post_subject_before -->
<h3><a href="{postrow.U_POST_DETAILS}">{postrow.POST_SUBJECT}</a></h3>
+ <!-- EVENT mcp_topic_postrow_post_subject_after -->
<!-- EVENT mcp_topic_postrow_post_details_before -->
<p class="author">
diff --git a/phpBB/styles/prosilver/template/search_results.html b/phpBB/styles/prosilver/template/search_results.html
index 6bbf9c9afe..997bc28b4b 100644
--- a/phpBB/styles/prosilver/template/search_results.html
+++ b/phpBB/styles/prosilver/template/search_results.html
@@ -185,6 +185,7 @@
<dd class="search-result-date">{searchresults.POST_DATE}</dd>
<dd>{L_FORUM}{L_COLON} <a href="{searchresults.U_VIEW_FORUM}">{searchresults.FORUM_TITLE}</a></dd>
<dd>{L_TOPIC}{L_COLON} <a href="{searchresults.U_VIEW_TOPIC}">{searchresults.TOPIC_TITLE}</a></dd>
+ <!-- EVENT search_results_topic_title_after -->
<dd>{L_REPLIES}{L_COLON} <strong>{searchresults.TOPIC_REPLIES}</strong></dd>
<dd>{L_VIEWS}{L_COLON} <strong>{searchresults.TOPIC_VIEWS}</strong></dd>
<!-- EVENT search_results_postprofile_after -->
diff --git a/phpBB/styles/prosilver/template/viewforum_body.html b/phpBB/styles/prosilver/template/viewforum_body.html
index 867fd84112..b57f48ba15 100644
--- a/phpBB/styles/prosilver/template/viewforum_body.html
+++ b/phpBB/styles/prosilver/template/viewforum_body.html
@@ -289,9 +289,9 @@
<!-- INCLUDE jumpbox.html -->
-<!-- IF S_DISPLAY_ONLINE_LIST -->
+<!-- IF S_DISPLAY_ONLINE_LIST and U_VIEWONLINE -->
<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>
+ <h3><a href="{U_VIEWONLINE}">{L_WHO_IS_ONLINE}</a></h3>
<p>{LOGGED_IN_USER_LIST}</p>
</div>
<!-- ENDIF -->
diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html
index 522151cf7d..71d364bbb9 100644
--- a/phpBB/styles/prosilver/template/viewtopic_body.html
+++ b/phpBB/styles/prosilver/template/viewtopic_body.html
@@ -439,9 +439,9 @@
<!-- EVENT viewtopic_body_footer_before -->
<!-- INCLUDE jumpbox.html -->
-<!-- IF S_DISPLAY_ONLINE_LIST -->
+<!-- IF S_DISPLAY_ONLINE_LIST and U_VIEWONLINE -->
<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>
+ <h3><a href="{U_VIEWONLINE}">{L_WHO_IS_ONLINE}</a></h3>
<p>{LOGGED_IN_USER_LIST}</p>
</div>
<!-- ENDIF -->
diff --git a/phpBB/styles/prosilver/theme/content.css b/phpBB/styles/prosilver/theme/content.css
index 7ff6b4d5ef..741056e4c4 100644
--- a/phpBB/styles/prosilver/theme/content.css
+++ b/phpBB/styles/prosilver/theme/content.css
@@ -489,18 +489,17 @@ blockquote cite > div {
/* Code block */
.codebox {
- padding: 3px;
border: 1px solid transparent;
font-size: 1em;
margin: 1em 0 1.2em 0;
- overflow-x: scroll;
word-wrap: normal;
}
.codebox p {
text-transform: uppercase;
border-bottom: 1px solid transparent;
- margin-bottom: 3px;
+ margin-bottom: 0;
+ padding: 3px;
font-size: 0.8em !important;
font-weight: bold;
display: block;
@@ -515,10 +514,9 @@ blockquote .codebox {
display: block;
height: auto;
max-height: 200px;
- padding-top: 5px;
+ padding: 5px 3px;
font: 0.9em Monaco, "Andale Mono","Courier New", Courier, monospace;
line-height: 1.3em;
- margin: 2px 0;
}
/* Attachments
diff --git a/phpBB/viewonline.php b/phpBB/viewonline.php
index 624fe4ca9c..d5ddb0ba13 100644
--- a/phpBB/viewonline.php
+++ b/phpBB/viewonline.php
@@ -64,7 +64,10 @@ $order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC
// Whois requested
if ($mode == 'whois' && $auth->acl_get('a_') && $session_id)
{
- include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ if (!function_exists('user_get_id_name'))
+ {
+ include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
+ }
$sql = 'SELECT u.user_id, u.username, u.user_type, s.session_ip
FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s