phpBB

Code Changes

File: phpbb/version_helper.php

  Unmodified   Added   Modified   Removed
Line 12Line 12
*/

namespace phpbb;

*/

namespace phpbb;

 

use phpbb\exception\version_check_exception;


/**
* Class to handle version checking and comparison


/**
* Class to handle version checking and comparison

Line 32Line 34
	 * @var string File name
*/
protected $file = 'versions.json';

	 * @var string File name
*/
protected $file = 'versions.json';

 

/**
* @var bool Use SSL or not
*/
protected $use_ssl = false;


/**
* @var string Current version installed


/**
* @var string Current version installed

Line 50Line 57
	/** @var \phpbb\config\config */
protected $config;


	/** @var \phpbb\config\config */
protected $config;


	/** @var \phpbb\user */
protected $user;

	/** @var \phpbb\file_downloader */
protected $file_downloader;


/**
* Constructor
*
* @param \phpbb\cache\service $cache
* @param \phpbb\config\config $config


/**
* Constructor
*
* @param \phpbb\cache\service $cache
* @param \phpbb\config\config $config

	 * @param \phpbb\user $user

	 * @param \phpbb\file_downloader $file_downloader

	 */

	 */

	public function __construct(\phpbb\cache\service $cache, \phpbb\config\config $config, \phpbb\user $user)

	public function __construct(\phpbb\cache\service $cache, \phpbb\config\config $config, \phpbb\file_downloader $file_downloader)

	{
$this->cache = $cache;
$this->config = $config;

	{
$this->cache = $cache;
$this->config = $config;

		$this->user = $user;

		$this->file_downloader = $file_downloader;


if (defined('PHPBB_QA'))
{


if (defined('PHPBB_QA'))
{

Line 80Line 87
	 * @param string $host Host (e.g. version.phpbb.com)
* @param string $path Path to file (e.g. /phpbb)
* @param string $file File name (Default: versions.json)

	 * @param string $host Host (e.g. version.phpbb.com)
* @param string $path Path to file (e.g. /phpbb)
* @param string $file File name (Default: versions.json)

 
	 * @param bool $use_ssl Use SSL or not (Default: false)

	 * @return version_helper
*/

	 * @return version_helper
*/

	public function set_file_location($host, $path, $file = 'versions.json')

	public function set_file_location($host, $path, $file = 'versions.json', $use_ssl = false)

	{
$this->host = $host;
$this->path = $path;
$this->file = $file;

	{
$this->host = $host;
$this->path = $path;
$this->file = $file;

 
		$this->use_ssl = $use_ssl;


return $this;
}


return $this;
}

Line 163Line 172
	* @param bool $force_update Ignores cached data. Defaults to false.
* @param bool $force_cache Force the use of the cache. Override $force_update.
* @return string

	* @param bool $force_update Ignores cached data. Defaults to false.
* @param bool $force_cache Force the use of the cache. Override $force_update.
* @return string

	* @throws \RuntimeException

	* @throws version_check_exception

	*/
public function get_latest_on_current_branch($force_update = false, $force_cache = false)
{

	*/
public function get_latest_on_current_branch($force_update = false, $force_cache = false)
{

Line 194Line 203
	* @param bool $force_update Ignores cached data. Defaults to false.
* @param bool $force_cache Force the use of the cache. Override $force_update.
* @return string

	* @param bool $force_update Ignores cached data. Defaults to false.
* @param bool $force_cache Force the use of the cache. Override $force_update.
* @return string

	* @throws \RuntimeException

	* @throws version_check_exception

	*/
public function get_suggested_updates($force_update = false, $force_cache = false)
{

	*/
public function get_suggested_updates($force_update = false, $force_cache = false)
{

Line 215Line 224
	* @param bool $force_update Ignores cached data. Defaults to false.
* @param bool $force_cache Force the use of the cache. Override $force_update.
* @return string Version info

	* @param bool $force_update Ignores cached data. Defaults to false.
* @param bool $force_cache Force the use of the cache. Override $force_update.
* @return string Version info

	* @throws \RuntimeException

	* @throws version_check_exception

	*/
public function get_versions_matching_stability($force_update = false, $force_cache = false)
{

	*/
public function get_versions_matching_stability($force_update = false, $force_cache = false)
{

Line 235Line 244
	* @param bool $force_update Ignores cached data. Defaults to false.
* @param bool $force_cache Force the use of the cache. Override $force_update.
* @return string Version info, includes stable and unstable data

	* @param bool $force_update Ignores cached data. Defaults to false.
* @param bool $force_cache Force the use of the cache. Override $force_update.
* @return string Version info, includes stable and unstable data

	* @throws \RuntimeException

	* @throws version_check_exception

	*/
public function get_versions($force_update = false, $force_cache = false)
{

	*/
public function get_versions($force_update = false, $force_cache = false)
{

		$cache_file = '_versioncheck_' . $this->host . $this->path . $this->file;

		$cache_file = '_versioncheck_' . $this->host . $this->path . $this->file . $this->use_ssl;


$info = $this->cache->get($cache_file);

if ($info === false && $force_cache)
{


$info = $this->cache->get($cache_file);

if ($info === false && $force_cache)
{

			throw new \RuntimeException($this->user->lang('VERSIONCHECK_FAIL'));

			throw new version_check_exception('VERSIONCHECK_FAIL');

		}
else if ($info === false || $force_update)
{

		}
else if ($info === false || $force_update)
{

			$errstr = $errno = '';
$info = get_remote_file($this->host, $this->path, $this->file, $errstr, $errno);

			$info = $this->file_downloader->get($this->host, $this->path, $this->file, $this->use_ssl ? 443 : 80);
$error_string = $this->file_downloader->get_error_string();





			if (!empty($errstr))

			if (!empty($error_string))

			{

			{

				throw new \RuntimeException($errstr);

				throw new version_check_exception($error_string);

			}

$info = json_decode($info, true);


			}

$info = json_decode($info, true);


			if (empty($info['stable']) && empty($info['unstable']))


			// Sanitize any data we retrieve from a server
if (!empty($info))

			{

			{

				$this->user->add_lang('acp/common');

throw new \RuntimeException($this->user->lang('VERSIONCHECK_FAIL'));



				$json_sanitizer = function (&$value, $key) {
$type_cast_helper = new \phpbb\request\type_cast_helper();
$type_cast_helper->set_var($value, $value, gettype($value), true);
};
array_walk_recursive($info, $json_sanitizer);

			}


			}


			// Replace & with & on announcement links
foreach ($info as $stability => $branches)

			if (empty($info['stable']) && empty($info['unstable']))


			{

			{

				foreach ($branches as $branch => $branch_data)
{
$info[$stability][$branch]['announcement'] = str_replace('&', '&', $branch_data['announcement']);
}

				throw new version_check_exception('VERSIONCHECK_FAIL');




			}

$info['stable'] = (empty($info['stable'])) ? array() : $info['stable'];

			}

$info['stable'] = (empty($info['stable'])) ? array() : $info['stable'];