1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-03-20 23:51:28 +01:00

Merge branch '3.2.x'

This commit is contained in:
Marc Alexander 2017-04-11 21:28:08 +02:00
commit fba8595421
No known key found for this signature in database
GPG Key ID: 50E0D2423696F995
4 changed files with 363 additions and 6 deletions

View File

@ -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)
{

View File

@ -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);
}
/**

View File

@ -240,6 +240,69 @@ 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, '>=');
});
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
*

View File

@ -546,4 +546,301 @@ class phpbb_version_helper_test extends phpbb_test_case
$this->assertSame($expected, $version_helper->get_update_on_branch());
}
public function get_ext_update_on_branch_data()
{
return array(
// Single branch, check version for current branch
array(
'3.1.0',
'1.0.0',
array(
'3.1' => array(
'current' => '1.0.1',
),
),
array(
'current' => '1.0.1',
),
),
array(
'3.1.0',
'1.0.1',
array(
'3.1' => array(
'current' => '1.0.1',
),
),
array(),
),
array(
'3.2.0',
'1.0.0',
array(
'3.2' => array(
'current' => '1.1.1',
),
),
array(
'current' => '1.1.1',
),
),
array(
'3.2.0',
'1.1.1',
array(
'3.2' => array(
'current' => '1.1.1',
),
),
array(),
),
// Single branch, check for newest version when branches don't match up
array(
'3.1.0',
'1.0.0',
array(
'3.2' => array(
'current' => '1.1.1',
),
),
array(
'current' => '1.1.1',
),
),
array(
'3.1.0',
'1.1.1',
array(
'3.2' => array(
'current' => '1.1.1',
),
),
array(),
),
array(
'3.2.0',
'1.0.0',
array(
'3.1' => array(
'current' => '1.0.1',
),
),
array(
'current' => '1.0.1',
),
),
array(
'3.2.0',
'1.0.1',
array(
'3.1' => array(
'current' => '1.0.1',
),
),
array(),
),
array(
'3.3.0',
'1.0.0',
array(
'3.2' => array(
'current' => '1.1.1',
),
),
array(
'current' => '1.1.1',
),
),
array(
'3.3.0',
'1.1.1',
array(
'3.2' => array(
'current' => '1.1.1',
),
),
array(),
),
// Multiple branches, check version for current branch
array(
'3.1.0',
'1.0.0',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(
'current' => '1.0.1',
),
),
array(
'3.1.0',
'1.0.1',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(),
),
array(
'3.1.0',
'1.1.1',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(),
),
array(
'3.2.0',
'1.0.0',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(
'current' => '1.1.1',
),
),
array(
'3.2.0',
'1.0.1',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(
'current' => '1.1.1',
),
),
array(
'3.2.0',
'1.1.1',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(),
),
// Multiple branches, check for newest version when branches don't match up
array(
'3.3.0',
'1.0.0',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(
'current' => '1.1.1',
),
),
array(
'3.3.0',
'1.0.1',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(
'current' => '1.1.1',
),
),
array(
'3.3.0',
'1.1.0',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(
'current' => '1.1.1',
),
),
array(
'3.3.0',
'1.1.1',
array(
'3.1' => array(
'current' => '1.0.1',
),
'3.2' => array(
'current' => '1.1.1',
),
),
array(),
),
);
}
/**
* @dataProvider get_ext_update_on_branch_data
*/
public function test_get_ext_update_on_branch($phpbb_version, $ext_version, $versions, $expected)
{
global $phpbb_root_path, $phpEx;
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
$lang = new \phpbb\language\language($lang_loader);
$version_helper = $this
->getMockBuilder('\phpbb\version_helper')
->setMethods(array(
'get_versions_matching_stability',
))
->setConstructorArgs(array(
$this->cache,
new \phpbb\config\config(array(
'version' => $phpbb_version,
)),
new \phpbb\file_downloader(),
new \phpbb\user($lang, '\phpbb\datetime'),
))
->getMock()
;
$version_helper->expects($this->any())
->method('get_versions_matching_stability')
->will($this->returnValue($versions));
$version_helper->set_current_version($ext_version);
$this->assertSame($expected, $version_helper->get_ext_update_on_branch());
}
}