diff --git a/phpBB/phpbb/composer/installer.php b/phpBB/phpbb/composer/installer.php
index 72378cfa73..7731d5c074 100644
--- a/phpBB/phpbb/composer/installer.php
+++ b/phpBB/phpbb/composer/installer.php
@@ -287,7 +287,6 @@ class installer
$packages),
'replace' => $core_packages,
'repositories' => $this->get_composer_repositories(),
- 'minimum-stability' => 'dev',
];
$json_file = new JsonFile($this->get_composer_ext_json_filename());
diff --git a/phpBB/phpbb/composer/io/console_io.php b/phpBB/phpbb/composer/io/console_io.php
index bf1754d4c0..33ac77ba4e 100644
--- a/phpBB/phpbb/composer/io/console_io.php
+++ b/phpBB/phpbb/composer/io/console_io.php
@@ -21,15 +21,7 @@ use Symfony\Component\Console\Output\OutputInterface;
class console_io extends ConsoleIO
{
- /**
- * @var language
- */
- protected $language;
-
- /**
- * @var array
- */
- protected $composer_error;
+ use translate_composer_trait;
/**
* Constructor.
@@ -44,174 +36,4 @@ class console_io extends ConsoleIO
parent::__construct($input, $output, $helperSet);
}
-
- /**
- * {@inheritdoc}
- */
- public function write($messages, $newline = true)
- {
- $messages = (array) $messages;
- $translated_messages = [];
-
- foreach ($messages as $message)
- {
- $lang_key = $message;
- $parameters = [];
- $level = 0;
-
- $message = trim(strip_tags($message), "\n\r");
-
- if (strpos($message, 'Deleting ') === 0)
- {
- $elements = explode(' ', $message);
- $lang_key = 'COMPOSER_DELETING';
- $parameters = [$elements[1]];
- }
-
- //$translated_message = $this->language->lang_array($lang_key, $parameters);
- $translated_message = call_user_func_array([$this->language, 'lang'], array_merge((array)$lang_key, $parameters));
-
- switch ($level)
- {
- case 1:
- $translated_message = '' . $translated_message . '';
- break;
- case 2:
- $translated_message = '' . $translated_message . '';
- break;
- case 3:
- $translated_message = '' . $translated_message . '';
- break;
- case 4:
- $translated_message = '' . $translated_message . '';
- break;
- }
-
- $translated_messages[] = $translated_message;
- }
-
- parent::write($translated_messages, $newline);
- }
-
- /**
- * {@inheritdoc}
- */
- public function writeError($messages, $newline = true)
- {
- $messages = (array) $messages;
- $translated_messages = [];
-
- foreach ($messages as $message)
- {
- $lang_key = $message;
- $parameters = [];
- $level = 0;
-
- $message = trim(strip_tags($message), "\n\r");
-
- if (strpos($message, ' Problem ') === 0)
- {
- if ($this->output->getVerbosity() < OutputInterface::VERBOSITY_VERBOSE)
- {
- continue;
- }
-
- $lang_key = "\n" . $message . "\n";
- $level = 4;
- }
- else if ($message === 'Updating dependencies')
- {
- $lang_key = 'COMPOSER_UPDATING_DEPENDENCIES';
- $level = 1;
- }
- else if ($message === 'Loading composer repositories with package information')
- {
- $lang_key = 'COMPOSER_LOADING_REPOSITORIES';
- $level = 1;
- }
- else if ($message === 'Your requirements could not be resolved to an installable set of packages.')
- {
- $this->composer_error[] = ['COMPOSER_ERROR_CONFLICT', []];
- continue;
- }
- else if (strpos($message, 'could not be fully loaded, package information was loaded from the local cache and may be out of date') !== false)
- {
- $end_repo = strpos($message, 'could not be fully loaded, package information was loaded from the local cache and may be out of date');
- $repo = substr($message, 0, $end_repo - 1);
-
- $lang_key = 'COMPOSER_REPOSITORY_UNAVAILABLE';
- $parameters = [$repo];
- $level = 3;
- }
- else if (strpos($message, 'file could not be downloaded') !== false)
- {
- continue;
- }
- else if (strpos($message, ' - Installing ') === 0)
- {
- $elements = explode(' ', $message);
- $lang_key = 'COMPOSER_INSTALLING_PACKAGE';
- $parameters = [$elements[4], trim($elements[5], '()')];
- }
- else if ($message === 'Nothing to install or update')
- {
- $lang_key = 'COMPOSER_UPDATE_NOTHING';
- $level = 3;
- }
- else if ($message === ' Downloading')
- {
- continue;
- }
- else if ($message === ' Loading from cache')
- {
- continue;
- }
- else if ($message === 'Writing lock file')
- {
- continue;
- }
- else if (empty($message))
- {
- continue;
- }
-
- //$translated_message = $this->language->lang_array($lang_key, $parameters);
- $translated_message = call_user_func_array([$this->language, 'lang'], array_merge((array)$lang_key, $parameters));
-
- switch ($level)
- {
- case 1:
- $translated_message = '' . $translated_message . '';
- break;
- case 2:
- $translated_message = '' . $translated_message . '';
- break;
- case 3:
- $translated_message = '' . $translated_message . '';
- break;
- case 4:
- $translated_message = '' . $translated_message . '';
- break;
- }
-
- $translated_messages[] = $translated_message;
- }
-
- parent::writeError($translated_messages, $newline);
- }
-
- public function get_composer_error()
- {
- $error = '';
- foreach ($this->composer_error as $error_line)
- {
- // $error .= $this->language->lang_array($error_line[0], $error_line[1]);
- $error .= call_user_func_array([$this->language, 'lang'], array_merge((array)$error_line[0], $error_line[1]));
- $error .= "\n";
- }
-
- $this->composer_error = [];
-
- return $error;
- }
}
diff --git a/phpBB/phpbb/composer/io/translate_composer_trait.php b/phpBB/phpbb/composer/io/translate_composer_trait.php
new file mode 100644
index 0000000000..376ef28a80
--- /dev/null
+++ b/phpBB/phpbb/composer/io/translate_composer_trait.php
@@ -0,0 +1,200 @@
+
+ * @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 phpbb\language\language;
+use Symfony\Component\Console\Output\OutputInterface;
+
+trait translate_composer_trait
+{
+ /**
+ * @var language
+ */
+ protected $language;
+
+ /**
+ * @var array
+ */
+ protected $composer_error;
+
+ /**
+ * {@inheritdoc}
+ */
+ public function write($messages, $newline = true)
+ {
+ $messages = (array) $messages;
+ $translated_messages = [];
+
+ foreach ($messages as $message)
+ {
+ $lang_key = $message;
+ $parameters = [];
+ $level = 0;
+
+ $message = trim(strip_tags($message), "\n\r");
+
+ if (strpos($message, 'Deleting ') === 0)
+ {
+ $elements = explode(' ', $message);
+ $lang_key = 'COMPOSER_DELETING';
+ $parameters = [$elements[1]];
+ }
+
+ //$translated_message = $this->language->lang_array($lang_key, $parameters);
+ $translated_message = call_user_func_array([$this->language, 'lang'], array_merge((array)$lang_key, $parameters));
+
+ switch ($level)
+ {
+ case 1:
+ $translated_message = '' . $translated_message . '';
+ break;
+ case 2:
+ $translated_message = '' . $translated_message . '';
+ break;
+ case 3:
+ $translated_message = '' . $translated_message . '';
+ break;
+ case 4:
+ $translated_message = '' . $translated_message . '';
+ break;
+ }
+
+ $translated_messages[] = $translated_message;
+ }
+
+ parent::write($translated_messages, $newline);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function writeError($messages, $newline = true)
+ {
+ $messages = (array) $messages;
+ $translated_messages = [];
+
+ foreach ($messages as $message)
+ {
+ $lang_key = $message;
+ $parameters = [];
+ $level = 0;
+
+ $message = trim(strip_tags($message), "\n\r");
+
+ if (strpos($message, ' Problem ') === 0)
+ {
+ if ($this->output->getVerbosity() < OutputInterface::VERBOSITY_VERBOSE)
+ {
+ continue;
+ }
+
+ $lang_key = "\n" . $message . "\n";
+ $level = 4;
+ }
+ else if ($message === 'Updating dependencies')
+ {
+ $lang_key = 'COMPOSER_UPDATING_DEPENDENCIES';
+ $level = 1;
+ }
+ else if ($message === 'Loading composer repositories with package information')
+ {
+ $lang_key = 'COMPOSER_LOADING_REPOSITORIES';
+ $level = 1;
+ }
+ else if ($message === 'Your requirements could not be resolved to an installable set of packages.')
+ {
+ $this->composer_error[] = ['COMPOSER_ERROR_CONFLICT', []];
+ continue;
+ }
+ else if (strpos($message, 'could not be fully loaded, package information was loaded from the local cache and may be out of date') !== false)
+ {
+ $end_repo = strpos($message, 'could not be fully loaded, package information was loaded from the local cache and may be out of date');
+ $repo = substr($message, 0, $end_repo - 1);
+
+ $lang_key = 'COMPOSER_REPOSITORY_UNAVAILABLE';
+ $parameters = [$repo];
+ $level = 3;
+ }
+ else if (strpos($message, 'file could not be downloaded') !== false)
+ {
+ continue;
+ }
+ else if (strpos($message, ' - Installing ') === 0)
+ {
+ $elements = explode(' ', $message);
+ $lang_key = 'COMPOSER_INSTALLING_PACKAGE';
+ $parameters = [$elements[4], trim($elements[5], '()')];
+ }
+ else if ($message === 'Nothing to install or update')
+ {
+ $lang_key = 'COMPOSER_UPDATE_NOTHING';
+ $level = 3;
+ }
+ else if ($message === ' Downloading')
+ {
+ continue;
+ }
+ else if ($message === ' Loading from cache')
+ {
+ continue;
+ }
+ else if ($message === 'Writing lock file')
+ {
+ continue;
+ }
+ else if (empty($message))
+ {
+ continue;
+ }
+
+ //$translated_message = $this->language->lang_array($lang_key, $parameters);
+ $translated_message = call_user_func_array([$this->language, 'lang'], array_merge((array)$lang_key, $parameters));
+
+ switch ($level)
+ {
+ case 1:
+ $translated_message = '' . $translated_message . '';
+ break;
+ case 2:
+ $translated_message = '' . $translated_message . '';
+ break;
+ case 3:
+ $translated_message = '' . $translated_message . '';
+ break;
+ case 4:
+ $translated_message = '' . $translated_message . '';
+ break;
+ }
+
+ $translated_messages[] = $translated_message;
+ }
+
+ parent::writeError($translated_messages, $newline);
+ }
+
+ public function get_composer_error()
+ {
+ $error = '';
+ foreach ($this->composer_error as $error_line)
+ {
+ // $error .= $this->language->lang_array($error_line[0], $error_line[1]);
+ $error .= call_user_func_array([$this->language, 'lang'], array_merge((array)$error_line[0], $error_line[1]));
+ $error .= "\n";
+ }
+
+ $this->composer_error = [];
+
+ return $error;
+ }
+}
diff --git a/phpBB/phpbb/composer/io/web_io.php b/phpBB/phpbb/composer/io/web_io.php
new file mode 100644
index 0000000000..9e8aa6ec76
--- /dev/null
+++ b/phpBB/phpbb/composer/io/web_io.php
@@ -0,0 +1,39 @@
+
+ * @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\BufferIO;
+use phpbb\language\language;
+use Symfony\Component\Console\Helper\HelperSet;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class web_io extends BufferIO
+{
+ use translate_composer_trait;
+
+ /**
+ * Constructor.
+ *
+ * @param InputInterface $input The input instance
+ * @param OutputInterface $output The output instance
+ * @param HelperSet $helperSet The helperSet instance
+ */
+ public function __construct(InputInterface $input, OutputInterface $output, HelperSet $helperSet, language $language)
+ {
+ $this->language = $language;
+
+ parent::__construct($input, $output, $helperSet);
+ }
+}