diff options
author | Marc Alexander <admin@m-a-styles.de> | 2017-04-11 21:26:52 +0200 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2017-04-11 21:26:52 +0200 |
commit | f9a596c544fb6677d822cd78d16987d8e751b729 (patch) | |
tree | 99245e01d4a87678734da6f539ed2359238a65cf /phpBB/phpbb | |
parent | 3bf133c96ca34195024feb16bed812aa8dc77184 (diff) | |
parent | 450402ea429e654aab01ae934772ddf90d2e6a38 (diff) | |
download | forums-f9a596c544fb6677d822cd78d16987d8e751b729.tar forums-f9a596c544fb6677d822cd78d16987d8e751b729.tar.gz forums-f9a596c544fb6677d822cd78d16987d8e751b729.tar.bz2 forums-f9a596c544fb6677d822cd78d16987d8e751b729.tar.xz forums-f9a596c544fb6677d822cd78d16987d8e751b729.zip |
Merge pull request #4761 from VSEphpbb/ticket/15142
[ticket/15142] Check extension updates on current branch
Diffstat (limited to 'phpBB/phpbb')
-rw-r--r-- | phpBB/phpbb/version_helper.php | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/phpBB/phpbb/version_helper.php b/phpBB/phpbb/version_helper.php index b00f4f1d5f..9dc5a2e7c9 100644 --- a/phpBB/phpbb/version_helper.php +++ b/phpBB/phpbb/version_helper.php @@ -244,6 +244,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. |