1
0
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:
Tristan Darricau 2017-01-22 23:10:22 +01:00
commit 085a839963
No known key found for this signature in database
GPG Key ID: 817043C2E29DB881
7 changed files with 274 additions and 3 deletions

View File

@ -30,6 +30,11 @@
<p><a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> &middot; <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">

View File

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

View File

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

View File

@ -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?

View File

@ -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.',

View File

@ -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
*

View File

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