mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-27 21:58:52 +00:00
[ticket/11366] Moving to \phpbb\version_helper
+ bug fix (missing exception) + Using \phpbb\version_helper So, now, the version file have a new format : { "stable": { "<branch>": { "current": "<version>", [ "announcement": "<announcement link>", ] [ "download": "<download link>", ] }, "<branch>": { ... } }, "unstable": { } } PHPBB3-11366
This commit is contained in:
parent
e0b2ceef83
commit
44752c0dbf
5 changed files with 72 additions and 311 deletions
|
@ -62,23 +62,27 @@
|
|||
<!-- IF S_VERSIONCHECK && not S_UP_TO_DATE -->
|
||||
<fieldset>
|
||||
<legend>{L_LATEST_VERSION}</legend>
|
||||
<!-- BEGIN updates_available -->
|
||||
<fieldset>
|
||||
<dl>
|
||||
<dt><label>{L_VERSION}{L_COLON}</label></dt>
|
||||
<dd><span id="latest_version">{LATEST_VERSION}</span></dd>
|
||||
<dd><strong>{updates_available.current}</strong></dd>
|
||||
</dl>
|
||||
<!-- IF LATEST_DOWNLOAD -->
|
||||
<!-- IF updates_available.download-->
|
||||
<dl>
|
||||
<dt><label>{L_DOWNLOAD_LATEST}</label></dt>
|
||||
<dd><strong id="latest_download"><a href="{LATEST_DOWNLOAD}">{L_DOWNLOAD} {META_NAME} {LATEST_VERSION}</a></strong></dd>
|
||||
<dd><strong><a href="{updates_available.download}">{L_DOWNLOAD} {META_NAME} {LATEST_VERSION}</a></strong></dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF LATEST_ANNOUNCEMENT -->
|
||||
<!-- IF updates_available.announcement -->
|
||||
<dl>
|
||||
<dt><label>{L_ANNOUNCEMENT_TOPIC}</label></dt>
|
||||
<dd><strong id="latest_announcement"><a href="{LATEST_ANNOUNCEMENT}">{L_RELEASE_ANNOUNCEMENT}</a></strong></dd>
|
||||
<dd><strong><a href="{updates_available.announcement}">{L_RELEASE_ANNOUNCEMENT}</a></strong></dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
</fieldset>
|
||||
<!-- END updates_available -->
|
||||
</fieldset>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF META_REQUIRE_PHPBB || META_REQUIRE_PHP -->
|
||||
|
|
|
@ -7,12 +7,11 @@
|
|||
<p>{L_EXTENSIONS_EXPLAIN}</p>
|
||||
|
||||
<table class="table1">
|
||||
<col class="row1" ><col class="row1" ><col class="row1" ><col class="row2" ><col class="row2" >
|
||||
<col class="row1" ><col class="row1" ><col class="row2" ><col class="row2" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{L_EXTENSION_NAME}</th>
|
||||
<th width="10%">{L_CURRENT_VERSION}</th>
|
||||
<th width="10%">{L_LATEST_VERSION}</th>
|
||||
<th width="10%">{L_EXTENSION_OPTIONS}</th>
|
||||
<th width="10%">{L_EXTENSION_ACTIONS}</th>
|
||||
</tr>
|
||||
|
@ -25,10 +24,9 @@
|
|||
<!-- BEGIN enabled -->
|
||||
<tr class="ext_enabled">
|
||||
<td><strong>{enabled.META_DISPLAY_NAME}</strong></td>
|
||||
<td style="text-align: center;">{enabled.META_VERSION}</td>
|
||||
<td style="text-align: center;">
|
||||
<!-- IF enabled.S_VERSIONCHECK -->
|
||||
<strong <!-- IF enabled.S_UP_TO_DATE -->style="color: #228822;"<!-- ELSE -->style="color: #BC2A4D;"<!-- ENDIF -->>{enabled.LATEST_VERSION}</strong> [ <a href="{enabled.U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> ]
|
||||
<strong <!-- IF enabled.S_UP_TO_DATE -->style="color: #228822;"<!-- ELSE -->style="color: #BC2A4D;"<!-- ENDIF -->>{enabled.META_VERSION}</strong> [ <a href="{enabled.U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> ]
|
||||
<!-- ENDIF -->
|
||||
</td>
|
||||
<td style="text-align: center;"><a href="{enabled.U_DETAILS}">{L_DETAILS}</a></td>
|
||||
|
@ -44,15 +42,14 @@
|
|||
|
||||
<!-- IF .disabled -->
|
||||
<tr>
|
||||
<td class="row3" colspan="5"><strong>{L_EXTENSIONS_DISABLED}</strong></td>
|
||||
<td class="row3" colspan="4"><strong>{L_EXTENSIONS_DISABLED}</strong></td>
|
||||
</tr>
|
||||
<!-- BEGIN disabled -->
|
||||
<tr class="ext_disabled">
|
||||
<td><strong>{disabled.META_DISPLAY_NAME}</strong></td>
|
||||
<td style="text-align: center;">{disabled.META_VERSION}</td>
|
||||
<td style="text-align: center;">
|
||||
<!-- IF disabled.S_VERSIONCHECK -->
|
||||
<strong <!-- IF disabled.S_UP_TO_DATE -->style="color: #228822;"<!-- ELSE -->style="color: #BC2A4D;"<!-- ENDIF -->>{disabled.LATEST_VERSION}</strong> [ <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> ]
|
||||
<strong <!-- IF disabled.S_UP_TO_DATE -->style="color: #228822;"<!-- ELSE -->style="color: #BC2A4D;"<!-- ENDIF -->>{disabled.META_VERSION}</strong> [ <a href="{disabled.U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> ]
|
||||
<!-- ENDIF -->
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
|
|
|
@ -251,9 +251,18 @@ class acp_extensions
|
|||
|
||||
try
|
||||
{
|
||||
$infos = array();
|
||||
$this->version_check($md_manager, $infos, $request->variable('versioncheck_force', false));
|
||||
$template->assign_vars($infos);
|
||||
$updates_available = $this->version_check($md_manager, $request->variable('versioncheck_force', false));
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_UP_TO_DATE' => empty($updates_available),
|
||||
'S_VERSIONCHECK' => true,
|
||||
'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);
|
||||
}
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
|
@ -295,7 +304,15 @@ class acp_extensions
|
|||
'META_VERSION' => $meta['version'],
|
||||
);
|
||||
|
||||
$this->version_check($md_manager, $enabled_extension_meta_data[$name]);
|
||||
$updates = $this->version_check($md_manager);
|
||||
|
||||
$enabled_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
|
||||
$enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
|
||||
$enabled_extension_meta_data[$name]['U_VERSIONCHECK_FORCE'] = $this->u_action . '&action=details&versioncheck_force=1&ext_name=' . urlencode($md_manager->get_metadata('name'));
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
$enabled_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
|
||||
}
|
||||
catch(\phpbb\extension\exception $e)
|
||||
{
|
||||
|
@ -343,7 +360,15 @@ class acp_extensions
|
|||
'META_VERSION' => $meta['version'],
|
||||
);
|
||||
|
||||
$this->version_check($md_manager, $disabled_extension_meta_data[$name]);
|
||||
$updates = $this->version_check($md_manager);
|
||||
|
||||
$disabled_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
|
||||
$disabled_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
|
||||
$disabled_extension_meta_data[$name]['U_VERSIONCHECK_FORCE'] = $this->u_action . '&action=details&versioncheck_force=1&ext_name=' . urlencode($md_manager->get_metadata('name'));
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
$disabeld_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
|
||||
}
|
||||
catch(\phpbb\extension\exception $e)
|
||||
{
|
||||
|
@ -394,7 +419,15 @@ class acp_extensions
|
|||
'META_VERSION' => $meta['version'],
|
||||
);
|
||||
|
||||
$this->version_check($md_manager, $available_extension_meta_data[$name]);
|
||||
$updates = $this->version_check($md_manager);
|
||||
|
||||
$available_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates);
|
||||
$available_extension_meta_data[$name]['S_VERSIONCHECK'] = true;
|
||||
$available_extension_meta_data[$name]['U_VERSIONCHECK_FORCE'] = $this->u_action . '&action=details&versioncheck_force=1&ext_name=' . urlencode($md_manager->get_metadata('name'));
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
$available_extension_meta_data[$name]['S_VERSIONCHECK'] = false;
|
||||
}
|
||||
catch(\phpbb\extension\exception $e)
|
||||
{
|
||||
|
@ -439,13 +472,12 @@ class acp_extensions
|
|||
}
|
||||
|
||||
/**
|
||||
* Check the version and dump to the template
|
||||
* Check the version and return the availables updates.
|
||||
*
|
||||
* @param \phpbb\extension\metadata_manager $md_manager The metadata manager for the version to check.
|
||||
* @param array $array_dest The array to bind to the template.
|
||||
* @param bool $force Ignores cached data. Default to false.
|
||||
*/
|
||||
private function version_check(\phpbb\extension\metadata_manager $md_manager, &$array_dest, $force = false)
|
||||
private function version_check(\phpbb\extension\metadata_manager $md_manager, $force = false)
|
||||
{
|
||||
$meta = $md_manager->get_metadata('all');
|
||||
|
||||
|
@ -454,28 +486,13 @@ class acp_extensions
|
|||
throw new \RuntimeException($this->user->lang('NO_VERSIONCHECK'));
|
||||
}
|
||||
|
||||
$version_helper = new \phpbb\extension\version_helper($this->cache, $this->user);
|
||||
$version_helper->set_metadata($meta);
|
||||
$meta_vc = $meta['extra']['version-check'];
|
||||
|
||||
try
|
||||
{
|
||||
$version_helper->get_version($force);
|
||||
$version_compare = $version_helper->is_uptodate();
|
||||
$version_helper = new \phpbb\version_helper($this->cache, $this->config, $this->user);
|
||||
$version_helper->set_current_version($meta['version']);
|
||||
$version_helper->set_file_location($meta_vc['host'], $meta_vc['directory'], $meta_vc['filename']);
|
||||
|
||||
$array_dest = array_merge($array_dest, array(
|
||||
'S_VERSIONCHECK' => true,
|
||||
'S_UP_TO_DATE' => $version_compare,
|
||||
'LATEST_VERSION' => $version_helper->get_latest_version(),
|
||||
'LATEST_DOWNLOAD' => $version_helper->get_latest_download_link(),
|
||||
'LATEST_ANNOUNCEMENT' => $version_helper->get_latest_announcement_link(),
|
||||
'UP_TO_DATE_MSG' => $this->user->lang($version_compare ? 'UP_TO_DATE' : 'NOT_UP_TO_DATE', $md_manager->get_metadata('display-name')),
|
||||
'U_VERSIONCHECK_FORCE' => $this->u_action . '&action=details&versioncheck_force=1&ext_name=' . urlencode($md_manager->get_metadata('name')),
|
||||
));
|
||||
}
|
||||
catch(\RuntimeException $e)
|
||||
{
|
||||
$array_dest['S_VERSIONCHECK'] = false;
|
||||
}
|
||||
return $updates = $version_helper->get_suggested_updates(true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -110,7 +110,7 @@ $lang = array_merge($lang, array(
|
|||
'NOT_UP_TO_DATE' => '%s is not up to date',
|
||||
'UP_TO_DATE' => '%s is up to date',
|
||||
'ANNOUNCEMENT_TOPIC' => 'Release Announcement',
|
||||
'DOWNLOAD_LATEST' => 'Download Latest Version',
|
||||
'DOWNLOAD_LATEST' => 'Download Version',
|
||||
'NO_VERSIONCHECK' => 'No informations about how get the latest version.',
|
||||
// 'NO_INFO' => 'Version server could not be contacted',
|
||||
));
|
||||
|
|
|
@ -1,257 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* @package extension
|
||||
* @copyright (c) 2014 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\extension;
|
||||
|
||||
/**
|
||||
* Class to handle version checking and comparison for the extensions
|
||||
*/
|
||||
class version_helper
|
||||
{
|
||||
/**
|
||||
* @var string Host
|
||||
*/
|
||||
protected $host = '';
|
||||
|
||||
/**
|
||||
* @var string Path to file
|
||||
*/
|
||||
protected $path = '';
|
||||
|
||||
/**
|
||||
* @var string File name
|
||||
*/
|
||||
protected $file = '';
|
||||
|
||||
/**
|
||||
* @var string Extension name
|
||||
*/
|
||||
protected $extension = '';
|
||||
|
||||
/**
|
||||
* @var string Current version installed
|
||||
*/
|
||||
protected $current_version = '';
|
||||
|
||||
/** @var \phpbb\cache\service */
|
||||
protected $cache;
|
||||
|
||||
/** @var \phpbb\user */
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* @var array Metadata of the latest versio
|
||||
*/
|
||||
protected $latest_version_metadata;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param \phpbb\cache\service $cache
|
||||
* @param \phpbb\user $user
|
||||
*/
|
||||
public function __construct(\phpbb\cache\service $cache, \phpbb\user $user)
|
||||
{
|
||||
$this->cache = $cache;
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the informations concerning the current version from the metadata
|
||||
*
|
||||
* @param array $metadata
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
public function set_metadata($metadata)
|
||||
{
|
||||
if (! isset($metadata['extra']['version-check']))
|
||||
{
|
||||
throw new \RuntimeException($this->user->lang('NO_VERSIONCHECK'));
|
||||
}
|
||||
|
||||
$meta_vc = $metadata['extra']['version-check'];
|
||||
|
||||
$this->set_file_location($meta_vc['host'], $meta_vc['directory'], $meta_vc['filename']);
|
||||
$this->set_extension($metadata['name']);
|
||||
$this->set_current_version($metadata['version']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name of the extention
|
||||
*
|
||||
* @param string Name of the extension
|
||||
* @return version_helper
|
||||
*/
|
||||
public function set_extension($extension)
|
||||
{
|
||||
$this->extension = $extension;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set location to the file
|
||||
*
|
||||
* @param string $host Host (e.g. version.phpbb.com)
|
||||
* @param string $path Path to file (e.g. /phpbb)
|
||||
* @param string $file File name (Default: composer.json)
|
||||
* @return version_helper
|
||||
*/
|
||||
public function set_file_location($host, $path, $file = 'composer.json')
|
||||
{
|
||||
$this->host = $host;
|
||||
$this->path = $path;
|
||||
$this->file = $file;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set current version
|
||||
*
|
||||
* @param string $version The current version
|
||||
* @return version_helper
|
||||
*/
|
||||
public function set_current_version($version)
|
||||
{
|
||||
$this->current_version = $version;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper for version_compare() that allows using uppercase A and B
|
||||
* for alpha and beta releases.
|
||||
*
|
||||
* See http://www.php.net/manual/en/function.version-compare.php
|
||||
*
|
||||
* @param string $version1 First version number
|
||||
* @param string $version2 Second version number
|
||||
* @param string $operator Comparison operator (optional)
|
||||
*
|
||||
* @return mixed Boolean (true, false) if comparison operator is specified.
|
||||
* Integer (-1, 0, 1) otherwise.
|
||||
*/
|
||||
public function compare($version1, $version2, $operator = null)
|
||||
{
|
||||
return phpbb_version_compare($version1, $version2, $operator);
|
||||
}
|
||||
|
||||
/**
|
||||
* Say if the extension is up to date or not
|
||||
*
|
||||
* The informations about the lastest version are retrieved if needed
|
||||
*
|
||||
* @return bool true if the version is up to date
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
public function is_uptodate()
|
||||
{
|
||||
if (empty($this->latest_version_metadata))
|
||||
{
|
||||
$this->get_version();
|
||||
}
|
||||
|
||||
return $this->compare($this->current_version, $this->latest_version_metadata['version'], '>=');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the latest version number
|
||||
*
|
||||
* @return The latest version number ready to be displayed.
|
||||
*/
|
||||
public function get_latest_version() {
|
||||
if (empty($this->latest_version_metadata))
|
||||
{
|
||||
$this->get_version();
|
||||
}
|
||||
|
||||
return htmlspecialchars($this->latest_version_metadata['version']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the latest download link
|
||||
*
|
||||
* @return The latest download link if existed, an empty string otherwise.
|
||||
*/
|
||||
public function get_latest_download_link() {
|
||||
if (empty($this->latest_version_metadata))
|
||||
{
|
||||
$this->get_version();
|
||||
}
|
||||
|
||||
return isset($this->latest_version_metadata['extra']['download']) ? $this->latest_version_metadata['extra']['download']: '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the latest announcement link
|
||||
*
|
||||
* @return The latest announcement link if existed, an empty string otherwise.
|
||||
*/
|
||||
public function get_latest_announcement_link() {
|
||||
if (empty($this->latest_version_metadata))
|
||||
{
|
||||
$this->get_version();
|
||||
}
|
||||
|
||||
return isset($this->latest_version_metadata['extra']['announcement']) ? $this->latest_version_metadata['extra']['announcement']: '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtains the latest version information
|
||||
*
|
||||
* @param bool $force_update Ignores cached data. Defaults to false.
|
||||
* @return string Version info
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
public function get_version($force_update = false)
|
||||
{
|
||||
echo 'Force : ' . $force_update;
|
||||
$cache_file = 'versioncheck_ext_' . $this->extension . ':' . $this->host . $this->path . $this->file;
|
||||
|
||||
$info = $this->cache->get($cache_file);
|
||||
|
||||
if ($info === false || $force_update)
|
||||
{
|
||||
$errstr = $errno = '';
|
||||
$info = get_remote_file($this->host, $this->path, $this->file, $errstr, $errno);
|
||||
|
||||
if (!empty($errstr))
|
||||
{
|
||||
throw new \RuntimeException($errstr);
|
||||
}
|
||||
|
||||
$info = json_decode($info, true);
|
||||
|
||||
if (empty($info['version']))
|
||||
{
|
||||
$this->user->add_lang('acp/common');
|
||||
|
||||
throw new \RuntimeException($this->user->lang('VERSIONCHECK_FAIL'));
|
||||
}
|
||||
|
||||
// Replace & with & on announcement and download links
|
||||
if (isset($info['extra']['announcement']))
|
||||
{
|
||||
$info['extra']['announcement'] = str_replace('&', '&', $info['extra']['announcement']);
|
||||
}
|
||||
|
||||
if (isset($info['extra']['download']))
|
||||
{
|
||||
$info['extra']['download'] = str_replace('&', '&', $info['extra']['download']);
|
||||
}
|
||||
|
||||
$this->cache->put($cache_file, $info, 86400); // 24 hours
|
||||
}
|
||||
|
||||
$this->latest_version_metadata = $info;
|
||||
|
||||
return $info;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue