aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/phpbb')
-rw-r--r--phpBB/phpbb/console/command/update/check.php302
-rw-r--r--phpBB/phpbb/extension/manager.php38
-rw-r--r--phpBB/phpbb/extension/metadata_manager.php18
-rw-r--r--phpBB/phpbb/finder.php4
4 files changed, 342 insertions, 20 deletions
diff --git a/phpBB/phpbb/console/command/update/check.php b/phpBB/phpbb/console/command/update/check.php
new file mode 100644
index 0000000000..0ef3c970ac
--- /dev/null
+++ b/phpBB/phpbb/console/command/update/check.php
@@ -0,0 +1,302 @@
+<?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\update;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class check extends \phpbb\console\command\command
+{
+ /** @var \phpbb\config\config */
+ protected $config;
+
+ /** @var \Symfony\Component\DependencyInjection\ContainerBuilder */
+ protected $phpbb_container;
+
+ /**
+ * Construct method
+ */
+ public function __construct(\phpbb\user $user, \phpbb\config\config $config, \Symfony\Component\DependencyInjection\ContainerInterface $phpbb_container)
+ {
+ parent::__construct($user);
+
+ $this->config = $config;
+ $this->phpbb_container = $phpbb_container;
+ $this->user->add_lang(array('acp/common', 'acp/extensions'));
+ }
+
+ /**
+ * Configures the service.
+ *
+ * Sets the name and description of the command.
+ *
+ * @return null
+ */
+ protected function configure()
+ {
+ $this
+ ->setName('update:check')
+ ->setDescription($this->user->lang('CLI_DESCRIPTION_UPDATE_CHECK'))
+ ->addArgument('ext-name', InputArgument::OPTIONAL, $this->user->lang('CLI_DESCRIPTION_UPDATE_CHECK_ARGUMENT_1'))
+ ->addOption('stability', null, InputOption::VALUE_REQUIRED, 'CLI_DESCRIPTION_CRON_RUN_OPTION_STABILITY')
+ ->addOption('cache', 'c', InputOption::VALUE_NONE, 'CLI_DESCRIPTION_CRON_RUN_OPTION_CACHE')
+ ;
+ }
+
+ /**
+ * Executes the command.
+ *
+ * Checks if an update is available.
+ * If at least one is available, a message is printed and if verbose mode is set the list of possible updates is printed.
+ * If their is none, nothing is printed unless verbose mode is set.
+ *
+ * @param InputInterface $input Input stream, used to get the options.
+ * @param OutputInterface $output Output stream, used to print messages.
+ * @return int 0 if the board is up to date, 1 if it is not and 2 if an error occured.
+ * @throws \RuntimeException
+ */
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $recheck = true;
+ if ($input->getOption('cache'))
+ {
+ $recheck = false;
+ }
+
+ $stability = null;
+ if ($input->getOption('stability'))
+ {
+ $stability = $input->getOption('stability');
+ if (!($stability == 'stable') && !($stability == 'unstable'))
+ {
+ throw new \RuntimeException($this->user->lang('CLI_ERROR_INVALID_STABILITY', $stability));
+ }
+ }
+
+ $ext_name = $input->getArgument('ext-name');
+ if ($ext_name != null)
+ {
+ if ($ext_name == 'all')
+ {
+ return $this->check_all_ext($input, $output, $stability, $recheck);
+ }
+ else
+ {
+ return $this->check_ext($input, $output, $stability, $recheck, $ext_name);
+ }
+ }
+ else
+ {
+ return $this->check_core($input, $output, $stability, $recheck);
+ }
+ }
+
+ /**
+ * Check if a given extension is up to date
+ *
+ * @param InputInterface $input Input stream, used to get the options.
+ * @param OutputInterface $output Output stream, used to print messages.
+ * @param OutputInterface $stability Force a given stability
+ * @param bool $recheck Disallow the use of the cache
+ * @param string $ext_name The extension name
+ * @return int
+ */
+ protected function check_ext(InputInterface $input, OutputInterface $output, $stability, $recheck, $ext_name)
+ {
+ try
+ {
+ $ext_manager = $this->phpbb_container->get('ext.manager');
+ $md_manager = $ext_manager->create_extension_metadata_manager($ext_name, null);
+ $updates_available = $ext_manager->version_check($md_manager, $recheck, false, $stability);
+ }
+ catch (\RuntimeException $e)
+ {
+ $output->writeln('<error>' . $e->getMessage() . '</error>');
+
+ return 2;
+ }
+
+ $metadata = $md_manager->get_metadata('all');
+ if ($input->getOption('verbose'))
+ {
+ $output->writeln('<info>' . $md_manager->get_metadata('display-name') . '</info>');
+ $output->writeln('');
+
+ $output->writeln('<comment>' . $this->user->lang('CURRENT_VERSION') . $this->user->lang('COLON') . '</comment> ' . $metadata['version']);
+ }
+
+ if (!empty($updates_available))
+ {
+ $output->writeln('');
+ $output->writeln('<question>' . $this->user->lang('NOT_UP_TO_DATE', $metadata['name']) . '</question>');
+
+ if ($input->getOption('verbose'))
+ {
+ $this->display_versions($output, $updates_available);
+ }
+
+ return 1;
+ }
+ else
+ {
+ $output->writeln('');
+ $output->writeln('<question>' . $this->user->lang('NOT_UP_TO_DATE', $metadata['name']) . '</question>');
+
+ if ($input->getOption('verbose'))
+ {
+ $output->writeln('<info>' . $this->user->lang('UPDATE_NOT_NEEDED') . '</info>');
+ }
+
+ return 0;
+ }
+ }
+
+ /**
+ * Check if the core is up to date
+ *
+ * @param InputInterface $input Input stream, used to get the options.
+ * @param OutputInterface $output Output stream, used to print messages.
+ * @param OutputInterface $stability Force a given stability
+ * @param bool $recheck Disallow the use of the cache
+ * @return int
+ */
+ protected function check_core(InputInterface $input, OutputInterface $output, $stability, $recheck)
+ {
+ $version_helper = $this->phpbb_container->get('version_helper');
+ $version_helper->force_stability($stability);
+
+ try
+ {
+ $updates_available = $version_helper->get_suggested_updates($recheck);
+ }
+ catch (\RuntimeException $e)
+ {
+ $output->writeln('<error>' . $this->user->lang('VERSIONCHECK_FAIL') . '</error>');
+
+ return 2;
+ }
+
+ if ($input->getOption('verbose'))
+ {
+ $output->writeln('<info>phpBB core</info>');
+ $output->writeln('');
+
+ $output->writeln('<comment>' . $this->user->lang('CURRENT_VERSION') . $this->user->lang('COLON') . '</comment> ' . $this->config['version']);
+ }
+
+ if (!empty($updates_available))
+ {
+ $output->writeln('');
+ $output->writeln('<question>' . $this->user->lang('UPDATE_NEEDED') . '</question>');
+
+ if ($input->getOption('verbose'))
+ {
+ $this->display_versions($output, $updates_available);
+ }
+
+ return 1;
+ }
+ else
+ {
+ if ($input->getOption('verbose'))
+ {
+ $output->writeln('');
+ $output->writeln('<question>' . $this->user->lang('UPDATE_NOT_NEEDED') . '</question>');
+ }
+
+ return 0;
+ }
+ }
+
+ /**
+ * Check if all the available extensions are up to date
+ *
+ * @param InputInterface $input Input stream, used to get the options.
+ * @param OutputInterface $output Output stream, used to print messages.
+ * @param OutputInterface $stability Force a given stability
+ * @param bool $recheck Disallow the use of the cache
+ * @return int
+ */
+ protected function check_all_ext(InputInterface $input, OutputInterface $output, $stability, $recheck)
+ {
+ $ext_manager = $this->phpbb_container->get('ext.manager');
+
+ $ext_name_length = max(30, strlen($this->user->lang('EXTENSION_NAME')));
+ $current_version_length = max(15, strlen($this->user->lang('CURRENT_VERSION')));
+ $latest_version_length = max(15, strlen($this->user->lang('LATEST_VERSION')));
+
+ $output->writeln(sprintf("%-{$ext_name_length}s | %-{$current_version_length}s | %s", $this->user->lang('EXTENSION_NAME'), $this->user->lang('CURRENT_VERSION'), $this->user->lang('LATEST_VERSION')));
+ $output->writeln(sprintf("%'-{$ext_name_length}s-+-%'-{$current_version_length}s-+-%'-{$latest_version_length}s", '', '', ''));
+ foreach ($ext_manager->all_available() as $ext_name => $ext_path)
+ {
+ $message = sprintf("<info>%-{$ext_name_length}s</info>", $ext_name);
+ $md_manager = $ext_manager->create_extension_metadata_manager($ext_name, null);
+ try
+ {
+ $metadata = $md_manager->get_metadata('all');
+ $message .= sprintf(" | <info>%-{$current_version_length}s</info>", $metadata['version']);
+ try
+ {
+ $updates_available = $ext_manager->version_check($md_manager, $recheck, false, $stability);
+ $message .= sprintf(" | <comment>%s</comment>", implode(', ', array_keys($updates_available)));
+ }
+ catch (\RuntimeException $e)
+ {
+ $message .= ' | ';
+ }
+ }
+ catch (\RuntimeException $e)
+ {
+ $message .= ('<error>' . $e->getMessage() . '</error>');
+ }
+
+ $output->writeln($message);
+ }
+
+ return 0;
+ }
+
+ /**
+ * Display the details of the available updates
+ *
+ * @param OutputInterface $output Output stream, used to print messages.
+ * @param array $updates_available The list of the available updates
+ */
+ protected function display_versions(OutputInterface $output, $updates_available)
+ {
+ $output->writeln('');
+ $output->writeln('<comment>' . $this->user->lang('UPDATES_AVAILABLE') . '</comment>');
+ foreach ($updates_available as $version_data)
+ {
+ $messages = array();
+ $messages[] = sprintf("\t%-30s| %s", $this->user->lang('VERSION'), $version_data['current']);
+
+ if (isset($version_data['announcement']))
+ {
+ $messages[] = sprintf("\t%-30s| %s", $this->user->lang('ANNOUNCEMENT_TOPIC'), $version_data['announcement']);
+ }
+
+ if (isset($version_data['download']))
+ {
+ $messages[] = sprintf("\t%-30s| %s", $this->user->lang('DOWNLOAD_LATEST'), $version_data['download']);
+ }
+
+ $messages[] = '';
+
+ $output->writeln(implode("\n", $messages));
+ }
+ }
+}
diff --git a/phpBB/phpbb/extension/manager.php b/phpBB/phpbb/extension/manager.php
index 98d2d27278..6cdc8c0cc7 100644
--- a/phpBB/phpbb/extension/manager.php
+++ b/phpBB/phpbb/extension/manager.php
@@ -42,10 +42,10 @@ class manager
* @param string $extension_table The name of the table holding extensions
* @param string $phpbb_root_path Path to the phpbb includes directory.
* @param string $php_ext php file extension, defaults to php
- * @param \phpbb\cache\driver\driver_interface $cache A cache instance or null
+ * @param \phpbb\cache\service $cache A cache instance or null
* @param string $cache_name The name of the cache variable, defaults to _ext
*/
- public function __construct(ContainerInterface $container, \phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\filesystem\filesystem_interface $filesystem, $extension_table, $phpbb_root_path, $php_ext = 'php', \phpbb\cache\driver\driver_interface $cache = null, $cache_name = '_ext')
+ public function __construct(ContainerInterface $container, \phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\filesystem\filesystem_interface $filesystem, $extension_table, $phpbb_root_path, $php_ext = 'php', \phpbb\cache\service $cache = null, $cache_name = '_ext')
{
$this->cache = $cache;
$this->cache_name = $cache_name;
@@ -146,12 +146,11 @@ class manager
* Instantiates the metadata manager for the extension with the given name
*
* @param string $name The extension name
- * @param \phpbb\template\template $template The template manager
* @return \phpbb\extension\metadata_manager Instance of the metadata manager
*/
- public function create_extension_metadata_manager($name, \phpbb\template\template $template)
+ public function create_extension_metadata_manager($name)
{
- return new \phpbb\extension\metadata_manager($name, $this->config, $this, $template, $this->phpbb_root_path);
+ return new \phpbb\extension\metadata_manager($name, $this->config, $this, $this->phpbb_root_path);
}
/**
@@ -566,6 +565,35 @@ class manager
}
/**
+ * Check the version and return the available updates (for an extension).
+ *
+ * @param \phpbb\extension\metadata_manager $md_manager The metadata manager for the version to check.
+ * @param bool $force_update Ignores cached data. Defaults to false.
+ * @param bool $force_cache Force the use of the cache. Override $force_update.
+ * @param string $stability Force the stability (null by default).
+ * @return string
+ * @throws \RuntimeException
+ */
+ public function version_check(\phpbb\extension\metadata_manager $md_manager, $force_update = false, $force_cache = false, $stability = null)
+ {
+ $meta = $md_manager->get_metadata('all');
+
+ if (!isset($meta['extra']['version-check']))
+ {
+ throw new \RuntimeException($this->user->lang('NO_VERSIONCHECK'), 1);
+ }
+
+ $version_check = $meta['extra']['version-check'];
+
+ $version_helper = new \phpbb\version_helper($this->cache, $this->config, $this->user);
+ $version_helper->set_current_version($meta['version']);
+ $version_helper->set_file_location($version_check ['host'], $version_check ['directory'], $version_check ['filename']);
+ $version_helper->force_stability($stability);
+
+ return $updates = $version_helper->get_suggested_updates($force_update, $force_cache);
+ }
+
+ /**
* Check to see if a given extension is purged
*
* An extension is purged if it is available, not enabled and not disabled.
diff --git a/phpBB/phpbb/extension/metadata_manager.php b/phpBB/phpbb/extension/metadata_manager.php
index 4f080647c8..fe64c92ee1 100644
--- a/phpBB/phpbb/extension/metadata_manager.php
+++ b/phpBB/phpbb/extension/metadata_manager.php
@@ -31,12 +31,6 @@ class metadata_manager
protected $extension_manager;
/**
- * phpBB Template instance
- * @var \phpbb\template\template
- */
- protected $template;
-
- /**
* phpBB root path
* @var string
*/
@@ -66,14 +60,12 @@ class metadata_manager
* @param string $ext_name Name (including vendor) of the extension
* @param \phpbb\config\config $config phpBB Config instance
* @param \phpbb\extension\manager $extension_manager An instance of the phpBB extension manager
- * @param \phpbb\template\template $template phpBB Template instance
* @param string $phpbb_root_path Path to the phpbb includes directory.
*/
- public function __construct($ext_name, \phpbb\config\config $config, \phpbb\extension\manager $extension_manager, \phpbb\template\template $template, $phpbb_root_path)
+ public function __construct($ext_name, \phpbb\config\config $config, \phpbb\extension\manager $extension_manager, $phpbb_root_path)
{
$this->config = $config;
$this->extension_manager = $extension_manager;
- $this->template = $template;
$this->phpbb_root_path = $phpbb_root_path;
$this->ext_name = $ext_name;
@@ -336,11 +328,11 @@ class metadata_manager
/**
* Outputs the metadata into the template
*
- * @return null
+ * @param \phpbb\template\template $template phpBB Template instance
*/
- public function output_template_data()
+ public function output_template_data(\phpbb\template\template $template)
{
- $this->template->assign_vars(array(
+ $template->assign_vars(array(
'META_NAME' => $this->metadata['name'],
'META_TYPE' => $this->metadata['type'],
'META_DESCRIPTION' => (isset($this->metadata['description'])) ? $this->metadata['description'] : '',
@@ -360,7 +352,7 @@ class metadata_manager
foreach ($this->metadata['authors'] as $author)
{
- $this->template->assign_block_vars('meta_authors', array(
+ $template->assign_block_vars('meta_authors', array(
'AUTHOR_NAME' => $author['name'],
'AUTHOR_EMAIL' => (isset($author['email'])) ? $author['email'] : '',
'AUTHOR_HOMEPAGE' => (isset($author['homepage'])) ? $author['homepage'] : '',
diff --git a/phpBB/phpbb/finder.php b/phpBB/phpbb/finder.php
index 58bc27084e..1f1d931880 100644
--- a/phpBB/phpbb/finder.php
+++ b/phpBB/phpbb/finder.php
@@ -50,12 +50,12 @@ class finder
*
* @param \phpbb\filesystem\filesystem_interface $filesystem Filesystem instance
* @param string $phpbb_root_path Path to the phpbb root directory
- * @param \phpbb\cache\driver\driver_interface $cache A cache instance or null
+ * @param \phpbb\cache\service $cache A cache instance or null
* @param string $php_ext php file extension
* @param string $cache_name The name of the cache variable, defaults to
* _ext_finder
*/
- public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, $phpbb_root_path = '', \phpbb\cache\driver\driver_interface $cache = null, $php_ext = 'php', $cache_name = '_ext_finder')
+ public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, $phpbb_root_path = '', \phpbb\cache\service $cache = null, $php_ext = 'php', $cache_name = '_ext_finder')
{
$this->filesystem = $filesystem;
$this->phpbb_root_path = $phpbb_root_path;