diff --git a/phpBB/adm/style/acp_ext_catalog.html b/phpBB/adm/style/acp_ext_catalog.html
index a6e9995cbb..84839adf9c 100644
--- a/phpBB/adm/style/acp_ext_catalog.html
+++ b/phpBB/adm/style/acp_ext_catalog.html
@@ -110,10 +110,8 @@
{{ lang('INSTALLED') }}
{% elseif extension.name in installed_extensions -%}
{{ lang('INSTALLED_MANUALLY') }}
- {%- if enabled -%}
- ({{ lang('MANAGE') }})
- {%- endif -%}
- {% elseif enabled -%}
+ ({{ lang('MANAGE') }})
+ {% elseif not enabled -%}
{{ lang('INSTALL') }}
{%- endif -%}
diff --git a/phpBB/composer-ext.json b/phpBB/composer-ext.json
index e69de29bb2..8194460949 100644
--- a/phpBB/composer-ext.json
+++ b/phpBB/composer-ext.json
@@ -0,0 +1,160 @@
+{
+ "require": {
+ "php": ">=5.5.9",
+ "bantu/ini-get-wrapper": "v1.0.1",
+ "google/recaptcha": "1.1.2",
+ "lusitanian/oauth": "v0.8.9",
+ "patchwork/utf8": "v1.1.31",
+ "psr/log": "1.0.0",
+ "ocramius/proxy-manager": "1.0.2",
+ "phing/phing": "2.4.14",
+ "sebastian/version": "1.0.6",
+ "sebastian/recursion-context": "1.0.2",
+ "sebastian/diff": "1.4.1",
+ "sebastian/comparator": "1.2.0",
+ "phpunit/php-text-template": "1.2.1",
+ "phpunit/php-token-stream": "1.4.8",
+ "phpunit/php-code-coverage": "2.2.4",
+ "paragonie/random_compat": "v1.4.1",
+ "symfony/polyfill-mbstring": "v1.2.0",
+ "squizlabs/php_codesniffer": "2.6.2",
+ "twig/twig": "v1.24.1",
+ "sebastian/exporter": "1.2.2",
+ "sebastian/environment": "1.3.7",
+ "phpunit/php-timer": "1.0.8",
+ "marc1706/fast-image-size": "v1.1.1",
+ "s9e/text-formatter": "0.6.2",
+ "guzzlehttp/psr7": "1.3.1",
+ "guzzlehttp/promises": "1.2.0",
+ "guzzlehttp/guzzle": "6.2.1",
+ "fabpot/goutte": "v3.1.2",
+ "facebook/webdriver": "1.1.1",
+ "symfony/process": "v3.1.3",
+ "laravel/homestead": "v3.0.2",
+ "sebastian/global-state": "1.1.1",
+ "doctrine/instantiator": "1.0.5",
+ "phpunit/phpunit-mock-objects": "2.3.8",
+ "phpunit/php-file-iterator": "1.4.1",
+ "phpdocumentor/reflection-common": "1.0",
+ "phpdocumentor/type-resolver": "0.2",
+ "phpdocumentor/reflection-docblock": "3.1.0",
+ "phpspec/prophecy": "v1.6.1",
+ "phpunit/phpunit": "4.8.27",
+ "phpunit/dbunit": "2.0.2",
+ "zendframework/zend-eventmanager": "3.0.1",
+ "zendframework/zend-code": "2.6.3",
+ "psr/http-message": "1.0",
+ "symfony/filesystem": "v3.1.3",
+ "symfony/config": "v3.1.3",
+ "symfony/http-foundation": "v3.1.3",
+ "symfony/event-dispatcher": "v3.1.3",
+ "symfony/debug": "v3.1.3",
+ "symfony/http-kernel": "v3.1.3",
+ "symfony/dependency-injection": "v3.1.3",
+ "symfony/proxy-manager-bridge": "v3.1.3",
+ "symfony/routing": "v3.1.3",
+ "symfony/twig-bridge": "v3.1.3",
+ "symfony/yaml": "v3.1.3",
+ "symfony/dom-crawler": "v3.1.3",
+ "symfony/browser-kit": "v3.1.3",
+ "symfony/css-selector": "v3.1.3",
+ "webmozart/assert": "1.0.2",
+ "symfony/finder": "v3.1.3",
+ "symfony/console": "v3.1.3",
+ "seld/phar-utils": "1.0.1",
+ "seld/jsonlint": "1.4.0",
+ "seld/cli-prompt": "1.0.2",
+ "justinrainbow/json-schema": "2.0.5",
+ "composer/spdx-licenses": "1.1.4",
+ "composer/semver": "1.4.2",
+ "composer/ca-bundle": "1.0.3",
+ "composer/composer": "1.2.0",
+ "phpbb/phpbb": "3.2.0-RC1",
+ "crizzo/aboutus": "*",
+ "phpbb/autogroups": "*"
+ },
+ "replace": {
+ "bantu/ini-get-wrapper": "v1.0.1",
+ "google/recaptcha": "1.1.2",
+ "lusitanian/oauth": "v0.8.9",
+ "patchwork/utf8": "v1.1.31",
+ "psr/log": "1.0.0",
+ "ocramius/proxy-manager": "1.0.2",
+ "phing/phing": "2.4.14",
+ "sebastian/version": "1.0.6",
+ "sebastian/recursion-context": "1.0.2",
+ "sebastian/diff": "1.4.1",
+ "sebastian/comparator": "1.2.0",
+ "phpunit/php-text-template": "1.2.1",
+ "phpunit/php-token-stream": "1.4.8",
+ "phpunit/php-code-coverage": "2.2.4",
+ "paragonie/random_compat": "v1.4.1",
+ "symfony/polyfill-mbstring": "v1.2.0",
+ "squizlabs/php_codesniffer": "2.6.2",
+ "twig/twig": "v1.24.1",
+ "sebastian/exporter": "1.2.2",
+ "sebastian/environment": "1.3.7",
+ "phpunit/php-timer": "1.0.8",
+ "marc1706/fast-image-size": "v1.1.1",
+ "s9e/text-formatter": "0.6.2",
+ "guzzlehttp/psr7": "1.3.1",
+ "guzzlehttp/promises": "1.2.0",
+ "guzzlehttp/guzzle": "6.2.1",
+ "fabpot/goutte": "v3.1.2",
+ "facebook/webdriver": "1.1.1",
+ "symfony/process": "v3.1.3",
+ "laravel/homestead": "v3.0.2",
+ "sebastian/global-state": "1.1.1",
+ "doctrine/instantiator": "1.0.5",
+ "phpunit/phpunit-mock-objects": "2.3.8",
+ "phpunit/php-file-iterator": "1.4.1",
+ "phpdocumentor/reflection-common": "1.0",
+ "phpdocumentor/type-resolver": "0.2",
+ "phpdocumentor/reflection-docblock": "3.1.0",
+ "phpspec/prophecy": "v1.6.1",
+ "phpunit/phpunit": "4.8.27",
+ "phpunit/dbunit": "2.0.2",
+ "zendframework/zend-eventmanager": "3.0.1",
+ "zendframework/zend-code": "2.6.3",
+ "psr/http-message": "1.0",
+ "symfony/filesystem": "v3.1.3",
+ "symfony/config": "v3.1.3",
+ "symfony/http-foundation": "v3.1.3",
+ "symfony/event-dispatcher": "v3.1.3",
+ "symfony/debug": "v3.1.3",
+ "symfony/http-kernel": "v3.1.3",
+ "symfony/dependency-injection": "v3.1.3",
+ "symfony/proxy-manager-bridge": "v3.1.3",
+ "symfony/routing": "v3.1.3",
+ "symfony/twig-bridge": "v3.1.3",
+ "symfony/yaml": "v3.1.3",
+ "symfony/dom-crawler": "v3.1.3",
+ "symfony/browser-kit": "v3.1.3",
+ "symfony/css-selector": "v3.1.3",
+ "webmozart/assert": "1.0.2",
+ "symfony/finder": "v3.1.3",
+ "symfony/console": "v3.1.3",
+ "seld/phar-utils": "1.0.1",
+ "seld/jsonlint": "1.4.0",
+ "seld/cli-prompt": "1.0.2",
+ "justinrainbow/json-schema": "2.0.5",
+ "composer/spdx-licenses": "1.1.4",
+ "composer/semver": "1.4.2",
+ "composer/ca-bundle": "1.0.3",
+ "composer/composer": "1.2.0",
+ "phpbb/phpbb": "3.2.0-RC1"
+ },
+ "repositories": [
+ {
+ "packagist": false
+ },
+ {
+ "type": "composer",
+ "url": "https://www.phpbb.com/customise/db/composer/"
+ }
+ ],
+ "config": {
+ "vendor-dir": "vendor-ext/"
+ },
+ "minimum-stability": "stable"
+}
diff --git a/phpBB/composer-ext.lock b/phpBB/composer-ext.lock
index e69de29bb2..e26a1065b5 100644
--- a/phpBB/composer-ext.lock
+++ b/phpBB/composer-ext.lock
@@ -0,0 +1,257 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "bc644abe8f4679d245f64777bddac9f2",
+ "content-hash": "bf9b94509582458eddbadef8384bfdf5",
+ "packages": [
+ {
+ "name": "composer/installers",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/installers.git",
+ "reference": "d78064c68299743e0161004f2de3a0204e33b804"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/installers/zipball/d78064c68299743e0161004f2de3a0204e33b804",
+ "reference": "d78064c68299743e0161004f2de3a0204e33b804",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0"
+ },
+ "replace": {
+ "roundcube/plugin-installer": "*",
+ "shama/baton": "*"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev",
+ "phpunit/phpunit": "4.1.*"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Composer\\Installers\\Plugin",
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Installers\\": "src/Composer/Installers"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kyle Robinson Young",
+ "email": "kyle@dontkry.com",
+ "homepage": "https://github.com/shama"
+ }
+ ],
+ "description": "A multi-framework Composer library installer",
+ "homepage": "https://composer.github.io/installers/",
+ "keywords": [
+ "Craft",
+ "Dolibarr",
+ "Hurad",
+ "ImageCMS",
+ "MODX Evo",
+ "Mautic",
+ "OXID",
+ "Plentymarkets",
+ "RadPHP",
+ "SMF",
+ "Thelia",
+ "WolfCMS",
+ "agl",
+ "aimeos",
+ "annotatecms",
+ "attogram",
+ "bitrix",
+ "cakephp",
+ "chef",
+ "cockpit",
+ "codeigniter",
+ "concrete5",
+ "croogo",
+ "dokuwiki",
+ "drupal",
+ "elgg",
+ "expressionengine",
+ "fuelphp",
+ "grav",
+ "installer",
+ "joomla",
+ "kohana",
+ "laravel",
+ "lithium",
+ "magento",
+ "mako",
+ "mediawiki",
+ "modulework",
+ "moodle",
+ "phpbb",
+ "piwik",
+ "ppi",
+ "puppet",
+ "reindex",
+ "roundcube",
+ "shopware",
+ "silverstripe",
+ "symfony",
+ "typo3",
+ "wordpress",
+ "yawik",
+ "zend",
+ "zikula"
+ ],
+ "time": "2016-08-13 20:53:52"
+ },
+ {
+ "name": "crizzo/aboutus",
+ "version": "2.0.4",
+ "dist": {
+ "type": "zip",
+ "url": "https://www.phpbb.com/customise/db/download/121131/composer",
+ "reference": null,
+ "shasum": null
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "phpbb-extension",
+ "extra": {
+ "display-name": "About us",
+ "soft-require": {
+ "phpbb/phpbb": ">=3.1.2"
+ },
+ "version-check": {
+ "host": "www.phpbb.com",
+ "directory": "/customise/db/extension/about_us",
+ "filename": "version_check"
+ }
+ },
+ "license": [
+ "GPL-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Christian Schnegelberger",
+ "username": "Crizzo",
+ "email": "kontakt@crizzo.de",
+ "homepage": "http://www.crizzo.de",
+ "role": "Developer/Founder"
+ }
+ ],
+ "description": "About us is an extension which adds to phpBB 3.1 a about us or legal notice-page, where you can add your contact details and more.",
+ "homepage": "https://www.phpbb.com/customise/db/extension/about_us/",
+ "time": "2015-10-23 00:00:00"
+ },
+ {
+ "name": "phpbb/autogroups",
+ "version": "1.0.1",
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpbb-extensions/autogroups/zipball/38ffd4dfaa839310f42be43b32075c8237f239d0",
+ "reference": "38ffd4dfaa839310f42be43b32075c8237f239d0",
+ "shasum": ""
+ },
+ "require": {
+ "composer/installers": "~1.0",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phing/phing": "2.4.*",
+ "phpbb/epv": "dev-master"
+ },
+ "type": "phpbb-extension",
+ "extra": {
+ "display-name": "Auto Groups",
+ "soft-require": {
+ "phpbb/phpbb": ">=3.1.0,<3.2.*@dev"
+ },
+ "version-check": {
+ "host": "www.phpbb.com",
+ "directory": "/customise/db/extension/auto_groups",
+ "filename": "version_check"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Michael Cullum",
+ "email": "michael@phpbb.com",
+ "homepage": "http://michaelcullum.com",
+ "role": "Extensions Team Consultant"
+ },
+ {
+ "name": "Marc Alexander",
+ "email": "admin@m-a-styles.de",
+ "homepage": "http://www.m-a-styles.de",
+ "role": "Extensions Team Consultant"
+ },
+ {
+ "name": "Matt Friedman",
+ "homepage": "http://mattfriedman.me",
+ "role": "Extensions Development Team Lead"
+ },
+ {
+ "name": "Nathan Guse",
+ "email": "nathaniel.guse@gmail.com",
+ "role": "Former Extensions Development Team Lead"
+ },
+ {
+ "name": "Clemens Husung",
+ "email": "wolfsblvt@pinkes-forum.de",
+ "role": "Extensions Development Team"
+ },
+ {
+ "name": "Lukasz Kaczynski",
+ "role": "Former Extensions Development Team Member"
+ },
+ {
+ "name": "John Peskens",
+ "email": "info@forumhulp.com",
+ "homepage": "http://forumhulp.com",
+ "role": "Former Extensions Development Team Member"
+ },
+ {
+ "name": "Ruslan Uzdenov",
+ "homepage": "http://www.phpbbguru.net",
+ "role": "Extensions Development Team"
+ }
+ ],
+ "description": "An extension that can automate the process of adding and removing users from groups upon reaching specified milestones related to their post count, age, membership, and warnings count.",
+ "homepage": "https://www.phpbb.com",
+ "keywords": [
+ "auto",
+ "extension",
+ "groups",
+ "phpbb"
+ ],
+ "time": "2015-09-05 17:30:29"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {
+ "phpbb/phpbb": 5
+ },
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=5.5.9"
+ },
+ "platform-dev": []
+}
diff --git a/phpBB/composer.json b/phpBB/composer.json
index 324ef32a1f..6f8e930c8b 100644
--- a/phpBB/composer.json
+++ b/phpBB/composer.json
@@ -27,6 +27,7 @@
"require": {
"php": ">=5.5.9",
"bantu/ini-get-wrapper": "1.0.*",
+ "composer/composer": "^1.0",
"google/recaptcha": "~1.1",
"guzzlehttp/guzzle": "~6.2",
"lusitanian/oauth": "^0.8.1",
@@ -47,8 +48,7 @@
"symfony/routing": "~3.1",
"symfony/twig-bridge": "~3.1",
"symfony/yaml": "~3.1",
- "twig/twig": "^1.0,<1.25",
- "composer/composer": "^1.0"
+ "twig/twig": "^1.0,<1.25"
},
"require-dev": {
"fabpot/goutte": "~3.1",
diff --git a/phpBB/composer.lock b/phpBB/composer.lock
index 6ad23abf13..81903906a7 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": "80752e19604f3bd6ac0af14d488a748b",
- "content-hash": "60c4fa2116744111294d5c3a5c21afdd",
+ "hash": "fb27e08d4d657b78f87a3327a41d9e20",
+ "content-hash": "274c9cfc16d9a9cd40daffe7383d568a",
"packages": [
{
"name": "bantu/ini-get-wrapper",
diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php
index b0a18719d1..eda3bace35 100644
--- a/phpBB/includes/acp/acp_extensions.php
+++ b/phpBB/includes/acp/acp_extensions.php
@@ -624,7 +624,14 @@ class acp_extensions
$enable_on_install = $this->request->variable('enable_on_install', false);
$purge_on_remove = $this->request->variable('purge_on_remove', false);
$minimum_stability = $this->request->variable('minimum_stability', 'stable');
- $repositories = array_unique(explode("\n", $this->request->variable('repositories', '')));
+ $repositories = array_unique(
+ array_filter(
+ array_map(
+ 'trim',
+ explode("\n", $this->request->variable('repositories', ''))
+ )
+ )
+ );
$previous_minimum_stability = $this->config['exts_composer_minimum_stability'];
$previous_repositories = $this->config['exts_composer_repositories'];
diff --git a/phpBB/phpbb/composer/installer.php b/phpBB/phpbb/composer/installer.php
index 205312f9e3..b3933954f9 100644
--- a/phpBB/phpbb/composer/installer.php
+++ b/phpBB/phpbb/composer/installer.php
@@ -27,6 +27,7 @@ use phpbb\composer\io\null_io;
use phpbb\config\config;
use phpbb\exception\runtime_exception;
use phpbb\filesystem\filesystem;
+use Seld\JsonLint\ParsingException;
/**
* Class to install packages through composer while freezing core dependencies.
@@ -513,7 +514,19 @@ class installer
$this->ext_json_file_backup = null;
$json_file = new JsonFile($this->get_composer_ext_json_filename());
- $ext_json_file_backup = $json_file->read();
+
+ try
+ {
+ $ext_json_file_backup = $json_file->read();
+ }
+ catch (ParsingException $e)
+ {
+ $ext_json_file_backup = '{}';
+
+ $lockFile = new JsonFile(substr($this->get_composer_ext_json_filename(), 0, -5) . '.lock');
+ $lockFile->write([]);
+ }
+
$json_file->write($ext_json_data);
$this->ext_json_file_backup = $ext_json_file_backup;
}
diff --git a/phpBB/phpbb/composer/io/translate_composer_trait.php b/phpBB/phpbb/composer/io/translate_composer_trait.php
index 9a0f63ceb5..444cf38e6b 100644
--- a/phpBB/phpbb/composer/io/translate_composer_trait.php
+++ b/phpBB/phpbb/composer/io/translate_composer_trait.php
@@ -33,7 +33,7 @@ trait translate_composer_trait
/**
* {@inheritdoc}
*/
- public function write($messages, $newline = true)
+ public function write($messages, $newline = true, $verbosity = self::NORMAL)
{
$messages = (array) $messages;
$translated_messages = [];
@@ -96,7 +96,7 @@ trait translate_composer_trait
/**
* {@inheritdoc}
*/
- public function writeError($messages, $newline = true)
+ public function writeError($messages, $newline = true, $verbosity = self::NORMAL)
{
$messages = (array) $messages;
$translated_messages = [];
diff --git a/phpBB/phpbb/composer/manager.php b/phpBB/phpbb/composer/manager.php
index 8cc9a6ab8f..db2f713509 100644
--- a/phpBB/phpbb/composer/manager.php
+++ b/phpBB/phpbb/composer/manager.php
@@ -253,7 +253,7 @@ class manager implements manager_interface
{
$this->available_packages = $this->cache->get('_composer_' . $this->package_type . '_available');
- if (!$this->available_packages)
+ if (true || !$this->available_packages)
{
$this->available_packages = $this->installer->get_available_packages($this->package_type);
$this->cache->put('_composer_' . $this->package_type . '_available', $this->available_packages, 24*60*60);