diff options
author | Matt Friedman <maf675@gmail.com> | 2017-04-10 15:47:51 -0700 |
---|---|---|
committer | Matt Friedman <maf675@gmail.com> | 2017-04-10 15:51:22 -0700 |
commit | 6ce5ef53cbb91bca32fc653e62e3f898b2855cec (patch) | |
tree | 5ec61923c567d7ff89657ccca0c350142bc87e50 /phpBB | |
parent | ecef296beeb2458f4bdccb1d3bbd05f76a580c12 (diff) | |
parent | 450402ea429e654aab01ae934772ddf90d2e6a38 (diff) | |
download | forums-6ce5ef53cbb91bca32fc653e62e3f898b2855cec.tar forums-6ce5ef53cbb91bca32fc653e62e3f898b2855cec.tar.gz forums-6ce5ef53cbb91bca32fc653e62e3f898b2855cec.tar.bz2 forums-6ce5ef53cbb91bca32fc653e62e3f898b2855cec.tar.xz forums-6ce5ef53cbb91bca32fc653e62e3f898b2855cec.zip |
[ticket/15142] Merge branch 'ticket/15142' into 32x
PHPBB3-15142
Diffstat (limited to 'phpBB')
-rw-r--r-- | phpBB/includes/acp/acp_extensions.php | 5 | ||||
-rw-r--r-- | phpBB/phpbb/extension/manager.php | 4 | ||||
-rw-r--r-- | phpBB/phpbb/version_helper.php | 63 |
3 files changed, 66 insertions, 6 deletions
diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 164e5872bb..d5082e9727 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -331,10 +331,7 @@ class acp_extensions 'UP_TO_DATE_MSG' => $this->user->lang(empty($updates_available) ? 'UP_TO_DATE' : 'NOT_UP_TO_DATE', $md_manager->get_metadata('display-name')), )); - foreach ($updates_available as $branch => $version_data) - { - $template->assign_block_vars('updates_available', $version_data); - } + $template->assign_block_vars('updates_available', $updates_available); } catch (exception_interface $e) { diff --git a/phpBB/phpbb/extension/manager.php b/phpBB/phpbb/extension/manager.php index ca0ff31d5d..e3e6fe4077 100644 --- a/phpBB/phpbb/extension/manager.php +++ b/phpBB/phpbb/extension/manager.php @@ -573,7 +573,7 @@ class manager * @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 + * @return array * @throws runtime_exception */ public function version_check(\phpbb\extension\metadata_manager $md_manager, $force_update = false, $force_cache = false, $stability = null) @@ -592,7 +592,7 @@ class manager $version_helper->set_file_location($version_check['host'], $version_check['directory'], $version_check['filename'], isset($version_check['ssl']) ? $version_check['ssl'] : false); $version_helper->force_stability($stability); - return $updates = $version_helper->get_suggested_updates($force_update, $force_cache); + return $version_helper->get_ext_update_on_branch($force_update, $force_cache); } /** diff --git a/phpBB/phpbb/version_helper.php b/phpBB/phpbb/version_helper.php index fb330df26f..bb15dd1a74 100644 --- a/phpBB/phpbb/version_helper.php +++ b/phpBB/phpbb/version_helper.php @@ -241,6 +241,69 @@ class version_helper } /** + * Gets the latest extension update for the current phpBB branch the user is on + * Will suggest versions from newer branches when EoL has been reached + * and/or version from newer branch is needed for having all known security + * issues fixed. + * + * @param bool $force_update Ignores cached data. Defaults to false. + * @param bool $force_cache Force the use of the cache. Override $force_update. + * @return array Version info or empty array if there are no updates + * @throws \RuntimeException + */ + public function get_ext_update_on_branch($force_update = false, $force_cache = false) + { + $versions = $this->get_versions_matching_stability($force_update, $force_cache); + + $self = $this; + $current_version = $this->current_version; + + // Get current phpBB branch from version, e.g.: 3.2 + preg_match('/^(\d+\.\d+).*$/', $this->config['version'], $matches); + $current_branch = $matches[1]; + + // Filter out any versions less than the current version + $versions = array_filter($versions, function($data) use ($self, $current_version) { + return $self->compare($data['current'], $current_version, '>='); + }); + + // Filter out any phpbb branches less than the current version + $branches = array_filter(array_keys($versions), function($branch) use ($self, $current_branch) { + return $self->compare($branch, $current_branch, '>='); + }); + if (!empty($branches)) + { + $versions = array_intersect_key($versions, array_flip($branches)); + } + else + { + // If branches are empty, it means the current phpBB branch is newer than any branch the + // extension was validated against. Reverse sort the versions array so we get the newest + // validated release available. + krsort($versions); + } + + // Get the first available version from the previous list. + $update_info = array_reduce($versions, function($value, $data) use ($self, $current_version) { + if ($value === null && $self->compare($data['current'], $current_version, '>=')) + { + if (!$data['eol'] && (!$data['security'] || $self->compare($data['security'], $data['current'], '<='))) + { + return $self->compare($data['current'], $current_version, '>') ? $data : array(); + } + else + { + return null; + } + } + + return $value; + }); + + return $update_info === null ? array() : $update_info; + } + + /** * Obtains the latest version information * * @param bool $force_update Ignores cached data. Defaults to false. |