diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css index f115a6f72c..aab20b36d5 100644 --- a/phpBB/adm/style/admin.css +++ b/phpBB/adm/style/admin.css @@ -2975,4 +2975,5 @@ fieldset.permissions .permissions-switch { color: #f1f1f1; font-family: monospace; overflow-x:scroll; + line-height: 1.5em; } diff --git a/phpBB/config/default/container/services_extensions.yml b/phpBB/config/default/container/services_extensions.yml index a28fd019d8..dda02340ab 100644 --- a/phpBB/config/default/container/services_extensions.yml +++ b/phpBB/config/default/container/services_extensions.yml @@ -15,6 +15,7 @@ services: class: phpbb\composer\installer arguments: - '%core.root_path%' + - '@filesystem' - '@config' ext.composer.manager: diff --git a/phpBB/phpbb/composer/installer.php b/phpBB/phpbb/composer/installer.php index 1179d592f5..8b4c762c92 100644 --- a/phpBB/phpbb/composer/installer.php +++ b/phpBB/phpbb/composer/installer.php @@ -20,6 +20,7 @@ use Composer\IO\NullIO; use Composer\Json\JsonFile; use Composer\Package\BasePackage; use Composer\Package\CompletePackage; +use Composer\Package\Link; use Composer\Package\PackageInterface; use Composer\Repository\ComposerRepository; use Composer\Repository\RepositoryInterface; @@ -27,6 +28,7 @@ use Composer\Semver\Constraint\ConstraintInterface; use Composer\Util\RemoteFilesystem; use phpbb\config\config; use phpbb\exception\runtime_exception; +use phpbb\filesystem\filesystem; /** * Class to install packages through composer while freezing core dependencies. @@ -76,10 +78,11 @@ class installer private $ext_json_file_backup; /** - * @param string $root_path phpBB root path - * @param config $config Config object + * @param string $root_path phpBB root path + * @param filesystem $filesystem Filesystem object + * @param config $config Config object */ - public function __construct($root_path, config $config = null) + public function __construct($root_path, filesystem $filesystem, config $config = null) { if ($config) { @@ -90,13 +93,15 @@ class installer $this->repositories = (array) $repositories; } - $this->packagist = (bool) $config['exts_composer_packagist']; - $this->composer_filename = $config['exts_composer_json_file']; - $this->packages_vendor_dir = $config['exts_composer_vendor_dir']; - $this->minimum_stability = $config['exts_composer_minimum_stability']; + $this->packagist = (bool) $config['exts_composer_packagist']; + $this->composer_filenam = $config['exts_composer_json_file']; + $this->packages_vendor_dir = $config['exts_composer_vendor_dir']; + $this->minimum_stability = $config['exts_composer_minimum_stability']; } $this->root_path = $root_path; + + putenv('COMPOSER_HOME=' . $filesystem->realpath($root_path) . 'store/composer'); } /** @@ -119,7 +124,7 @@ class installer $this->do_install($packages, $whitelist, $io); $this->restore_cwd(); } - catch (\Exception $e) + catch (runtime_exception $e) { $this->restore_cwd(); throw $e; @@ -175,6 +180,7 @@ class installer { $this->restore_ext_json_file(); $this->restore_cwd(); + throw new runtime_exception('COMPOSER_CANNOT_INSTALL', [], $e); } @@ -182,6 +188,7 @@ class installer { $this->restore_ext_json_file(); $this->restore_cwd(); + throw new runtime_exception($io->get_composer_error(), []); } } @@ -192,6 +199,8 @@ class installer * @param string|array $types Returns only the packages with the given type(s) * * @return array The installed packages associated to their version. + * + * @throws runtime_exception */ public function get_installed_packages($types) { @@ -203,7 +212,7 @@ class installer $result = $this->do_get_installed_packages($types); $this->restore_cwd(); } - catch (\Exception $e) + catch (runtime_exception $e) { $this->restore_cwd(); throw $e; @@ -231,6 +240,8 @@ class installer $composer = Factory::create($io, $this->get_composer_ext_json_filename(), false); $installed = []; + + /** @var Link[] $required_links */ $required_links = $composer->getPackage()->getRequires(); $installed_packages = $composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages(); @@ -260,6 +271,8 @@ class installer * @param string $type Returns only the packages with the given type * * @return array The name of the available packages, associated to their definition. Ordered by name. + * + * @throws runtime_exception */ public function get_available_packages($type) { @@ -271,7 +284,7 @@ class installer $result = $this->do_get_available_packages($type); $this->restore_cwd(); } - catch (\Exception $e) + catch (runtime_exception $e) { $this->restore_cwd(); throw $e; @@ -488,7 +501,6 @@ class installer 'replace' => $core_packages, 'repositories' => $this->get_composer_repositories(), 'config' => [ - 'cache-dir' => 'store/composer', 'vendor-dir'=> $this->packages_vendor_dir, ], 'minimum-stability' => $this->minimum_stability, diff --git a/phpBB/phpbb/composer/io/console_io.php b/phpBB/phpbb/composer/io/console_io.php index 14c1ef29e9..5239b050bb 100644 --- a/phpBB/phpbb/composer/io/console_io.php +++ b/phpBB/phpbb/composer/io/console_io.php @@ -19,7 +19,7 @@ use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -class console_io extends ConsoleIO +class console_io extends ConsoleIO implements io_interface { use translate_composer_trait; diff --git a/phpBB/phpbb/composer/io/html_output_formatter.php b/phpBB/phpbb/composer/io/html_output_formatter.php index c20ad83c89..1629e1895c 100644 --- a/phpBB/phpbb/composer/io/html_output_formatter.php +++ b/phpBB/phpbb/composer/io/html_output_formatter.php @@ -4,7 +4,7 @@ * This file is part of the phpBB Forum Software package. * * @copyright (c) phpBB Limited - * @license GNU General Public License, version 2 (GPL-2.0) + * @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. @@ -16,34 +16,35 @@ namespace phpbb\composer\io; class html_output_formatter extends \Composer\Console\HtmlOutputFormatter { protected static $availableForegroundColors = [ - 30 => 'black', - 31 => 'red', - 32 => 'green', - 33 => 'orange', - 34 => 'blue', - 35 => 'magenta', - 36 => 'cyan', - 37 => 'white' - ]; + 30 => 'black', + 31 => 'red', + 32 => 'green', + 33 => 'orange', + 34 => 'blue', + 35 => 'magenta', + 36 => 'cyan', + 37 => 'white', + ]; protected static $availableBackgroundColors = [ - 40 => 'black', - 41 => 'red', - 42 => 'green', - 43 => 'yellow', - 44 => 'blue', - 45 => 'magenta', - 46 => 'cyan', - 47 => 'white' - ]; + 40 => 'black', + 41 => 'red', + 42 => 'green', + 43 => 'yellow', + 44 => 'blue', + 45 => 'magenta', + 46 => 'cyan', + 47 => 'white', + ]; - protected static $availableOptions = [ - 1 => 'bold', - 4 => 'underscore', - //5 => 'blink', - //7 => 'reverse', - //8 => 'conceal' - ]; + protected static $availableOptions + = [ + 1 => 'bold', + 4 => 'underscore', + //5 => 'blink', + //7 => 'reverse', + //8 => 'conceal' + ]; /** * {@inheritdoc} @@ -52,7 +53,7 @@ class html_output_formatter extends \Composer\Console\HtmlOutputFormatter { $formatted = parent::format($message); - return preg_replace_callback("{[\033\e]\[([0-9;]+)m(.*?)[\033\e]\[[0-9;]+m}s", array($this, 'formatHtml'), $formatted); + return preg_replace_callback("{[\033\e]\[([0-9;]+)m(.*?)[\033\e]\[[0-9;]+m}s", [$this, 'formatHtml'], $formatted); } protected function formatHtml($matches) @@ -62,13 +63,13 @@ class html_output_formatter extends \Composer\Console\HtmlOutputFormatter { if (isset(self::$availableForegroundColors[$code])) { - $out .= 'color:'.self::$availableForegroundColors[$code].';'; + $out .= 'color:' . self::$availableForegroundColors[$code] . ';'; } - elseif (isset(self::$availableBackgroundColors[$code])) + else if (isset(self::$availableBackgroundColors[$code])) { - $out .= 'background-color:'.self::$availableBackgroundColors[$code].';'; + $out .= 'background-color:' . self::$availableBackgroundColors[$code] . ';'; } - elseif (isset(self::$availableOptions[$code])) + else if (isset(self::$availableOptions[$code])) { switch (self::$availableOptions[$code]) { @@ -83,6 +84,6 @@ class html_output_formatter extends \Composer\Console\HtmlOutputFormatter } } - return $out.'">'.$matches[2].''; + return $out . '">' . $matches[2] . ''; } } diff --git a/phpBB/phpbb/composer/io/io_interface.php b/phpBB/phpbb/composer/io/io_interface.php new file mode 100644 index 0000000000..2b1f0c1007 --- /dev/null +++ b/phpBB/phpbb/composer/io/io_interface.php @@ -0,0 +1,32 @@ + + * @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\composer\io; + +use Composer\IO\ConsoleIO; +use Composer\IO\IOInterface; +use Composer\IO\NullIO; +use phpbb\language\language; +use Symfony\Component\Console\Helper\HelperSet; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +interface io_interface extends IOInterface +{ + /** + * Returns the composer errors that occurred since the last tcall of the method. + * + * @return string + */ + public function get_composer_error(); +} diff --git a/phpBB/phpbb/composer/io/null_io.php b/phpBB/phpbb/composer/io/null_io.php new file mode 100644 index 0000000000..d38020d5f2 --- /dev/null +++ b/phpBB/phpbb/composer/io/null_io.php @@ -0,0 +1,32 @@ + + * @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\composer\io; + +use Composer\IO\ConsoleIO; +use Composer\IO\NullIO; +use phpbb\language\language; +use Symfony\Component\Console\Helper\HelperSet; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class console_io extends NullIO implements io_interface +{ + /** + * {@inheritdoc} + */ + public function get_composer_error() + { + return ''; + } +} diff --git a/phpBB/phpbb/composer/io/web_io.php b/phpBB/phpbb/composer/io/web_io.php index e7927c7233..4eab3d099a 100644 --- a/phpBB/phpbb/composer/io/web_io.php +++ b/phpBB/phpbb/composer/io/web_io.php @@ -18,7 +18,7 @@ use phpbb\language\language; use Symfony\Component\Console\Formatter\OutputFormatterInterface; use Symfony\Component\Console\Output\StreamOutput; -class web_io extends BufferIO +class web_io extends BufferIO implements io_interface { use translate_composer_trait;