1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-31 05:50:42 +02:00

[ticket/15142] Check extension updates on current branch

PHPBB3-15142
This commit is contained in:
Matt Friedman
2017-03-24 09:37:14 -07:00
parent 927220c873
commit 91ab27ecc9
2 changed files with 59 additions and 6 deletions

View File

@@ -243,6 +243,62 @@ class version_helper
return $update_info === null ? array() : $update_info;
}
/**
* 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, '>=');
});
$versions = array_intersect_key($versions, array_flip($branches));
// CDB reverse sorts extension versions, so we need to resort them
ksort($versions);
// Get the lowest 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
*