mirror of
https://github.com/phpbb/phpbb.git
synced 2025-03-22 00:21:02 +01:00
Merge pull request #4662 from marc1706/ticket/14968
[ticket/14968] Distinguish between update/upgrade & show upgrade info in ACP index * marc1706/ticket/14968: [ticket/14968] Use earlier version as written in comment [ticket/14968] Update docblock and ensure method returns array [ticket/14968] Display possible upgrade on acp index and update page [ticket/14968] Add method for retrieving updates on current branch
This commit is contained in:
commit
085a839963
@ -30,6 +30,11 @@
|
||||
<p><a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> · <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_VERSION_UPGRADEABLE -->
|
||||
<div class="errorbox notice">
|
||||
<p>{UPGRADE_INSTRUCTIONS}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF S_SEARCH_INDEX_MISSING -->
|
||||
<div class="errorbox">
|
||||
|
@ -20,6 +20,11 @@
|
||||
<p>{L_VERSION_NOT_UP_TO_DATE_ACP} - <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a></p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_VERSION_UPGRADEABLE -->
|
||||
<div class="errorbox notice">
|
||||
<p>{UPGRADE_INSTRUCTIONS}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<fieldset>
|
||||
<legend></legend>
|
||||
|
@ -431,13 +431,23 @@ class acp_main
|
||||
|
||||
if ($auth->acl_get('a_board'))
|
||||
{
|
||||
/** @var \phpbb\version_helper $version_helper */
|
||||
$version_helper = $phpbb_container->get('version_helper');
|
||||
try
|
||||
{
|
||||
$recheck = $request->variable('versioncheck_force', false);
|
||||
$updates_available = $version_helper->get_suggested_updates($recheck);
|
||||
$updates_available = $version_helper->get_update_on_branch($recheck);
|
||||
$upgrades_available = $version_helper->get_suggested_updates();
|
||||
if (!empty($upgrades_available))
|
||||
{
|
||||
$upgrades_available = array_pop($upgrades_available);
|
||||
}
|
||||
|
||||
$template->assign_var('S_VERSION_UP_TO_DATE', empty($updates_available));
|
||||
$template->assign_vars(array(
|
||||
'S_VERSION_UP_TO_DATE' => empty($updates_available),
|
||||
'S_VERSION_UPGRADEABLE' => !empty($upgrades_available),
|
||||
'UPGRADE_INSTRUCTIONS' => !empty($upgrades_available) ? $user->lang('UPGRADE_INSTRUCTIONS', $upgrades_available['current'], $upgrades_available['announcement']) : false,
|
||||
));
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
|
@ -37,7 +37,12 @@ class acp_update
|
||||
try
|
||||
{
|
||||
$recheck = $request->variable('versioncheck_force', false);
|
||||
$updates_available = $version_helper->get_suggested_updates($recheck);
|
||||
$updates_available = $version_helper->get_update_on_branch($recheck);
|
||||
$upgrades_available = $version_helper->get_suggested_updates();
|
||||
if (!empty($upgrades_available))
|
||||
{
|
||||
$upgrades_available = array_pop($upgrades_available);
|
||||
}
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
@ -61,6 +66,8 @@ class acp_update
|
||||
'CURRENT_VERSION' => $config['version'],
|
||||
|
||||
'UPDATE_INSTRUCTIONS' => sprintf($user->lang['UPDATE_INSTRUCTIONS'], $update_link),
|
||||
'S_VERSION_UPGRADEABLE' => !empty($upgrades_available),
|
||||
'UPGRADE_INSTRUCTIONS' => !empty($upgrades_available) ? $user->lang('UPGRADE_INSTRUCTIONS', $upgrades_available['current'], $upgrades_available['announcement']) : false,
|
||||
));
|
||||
|
||||
// Incomplete update?
|
||||
|
@ -574,6 +574,7 @@ $lang = array_merge($lang, array(
|
||||
'UPDATING_DATA' => 'Updating data',
|
||||
'UPDATING_TO_LATEST_STABLE' => 'Updating database to latest stable release',
|
||||
'UPDATED_VERSION' => 'Updated version',
|
||||
'UPGRADE_INSTRUCTIONS' => 'A new feature release <strong>%1$s</strong> is available. Please read <a href="%2$s" title="%2$s"><strong>the release announcement</strong></a> to learn about what it has to offer, and how to upgrade.',
|
||||
'UPLOAD_METHOD' => 'Upload method',
|
||||
|
||||
'UPDATE_DB_SUCCESS' => 'Database update was successful.',
|
||||
|
@ -200,6 +200,49 @@ class version_helper
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the latest update for the current 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_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;
|
||||
|
||||
// Filter out any versions less than to the current version
|
||||
$versions = array_filter($versions, function($data) use ($self, $current_version) {
|
||||
return $self->compare($data['current'], $current_version, '>=');
|
||||
});
|
||||
|
||||
// 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
|
||||
*
|
||||
|
@ -332,4 +332,204 @@ class phpbb_version_helper_test extends phpbb_test_case
|
||||
|
||||
$this->assertSame($expected, $version_helper->get_latest_on_current_branch());
|
||||
}
|
||||
|
||||
public function get_update_on_branch_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'1.0.0',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'current' => '1.0.1',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'1.0.1',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'1.0.1-a1',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1-a2',
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.0',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'current' => '1.0.1-a2',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'1.1.0',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'1.1.1',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'1.1.0-a1',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.0-a2',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'current' => '1.1.0-a2',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'1.1.0',
|
||||
array(),
|
||||
array(),
|
||||
),
|
||||
// Latest safe release is 1.0.1
|
||||
array(
|
||||
'1.0.0',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
'security' => '1.0.1',
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'current' => '1.0.1',
|
||||
'security' => '1.0.1',
|
||||
),
|
||||
),
|
||||
// Latest safe release is 1.0.0
|
||||
array(
|
||||
'1.0.0',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
'security' => '1.0.0',
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'current' => '1.0.1',
|
||||
'security' => '1.0.0',
|
||||
),
|
||||
),
|
||||
// Latest safe release is 1.1.0
|
||||
array(
|
||||
'1.0.0',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
'security' => '1.1.0',
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
// Latest 1.0 release is EOL
|
||||
array(
|
||||
'1.0.0',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
'eol' => true,
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'current' => '1.1.1',
|
||||
),
|
||||
),
|
||||
// All are EOL -- somewhat undefined behavior
|
||||
array(
|
||||
'1.0.0',
|
||||
array(
|
||||
'1.0' => array(
|
||||
'current' => '1.0.1',
|
||||
'eol' => true,
|
||||
),
|
||||
'1.1' => array(
|
||||
'current' => '1.1.1',
|
||||
'eol' => true,
|
||||
),
|
||||
),
|
||||
array(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider get_update_on_branch_data
|
||||
*/
|
||||
public function test_get_update_on_branch($current_version, $versions, $expected)
|
||||
{
|
||||
$version_helper = $this
|
||||
->getMockBuilder('\phpbb\version_helper')
|
||||
->setMethods(array(
|
||||
'get_versions_matching_stability',
|
||||
))
|
||||
->setConstructorArgs(array(
|
||||
$this->cache,
|
||||
new \phpbb\config\config(array(
|
||||
'version' => $current_version,
|
||||
)),
|
||||
new \phpbb\file_downloader(),
|
||||
new \phpbb\user('\phpbb\datetime'),
|
||||
))
|
||||
->getMock()
|
||||
;
|
||||
|
||||
$version_helper->expects($this->any())
|
||||
->method('get_versions_matching_stability')
|
||||
->will($this->returnValue($versions));
|
||||
|
||||
$this->assertSame($expected, $version_helper->get_update_on_branch());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user