Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
62.50% |
5 / 8 |
CRAP | |
80.90% |
72 / 89 |
asset | |
0.00% |
0 / 1 |
|
62.50% |
5 / 8 |
46.54 | |
80.90% |
72 / 89 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
set_url | |
0.00% |
0 / 1 |
3.71 | |
57.14% |
4 / 7 |
|||
join_url | |
0.00% |
0 / 1 |
21.22 | |
69.77% |
30 / 43 |
|||
get_url | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
is_relative | |
0.00% |
0 / 1 |
5.39 | |
75.00% |
3 / 4 |
|||
get_path | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
set_path | |
100.00% |
1 / 1 |
7 | |
100.00% |
19 / 19 |
|||
add_assets_version | |
100.00% |
1 / 1 |
3 | |
100.00% |
10 / 10 |
<?php | |
/** | |
* | |
* This file is part of the phpBB Forum Software package. | |
* | |
* @copyright (c) phpBB Limited <https://www.phpbb.com> | |
* @license GNU General Public License, version 2 (GPL-2.0) | |
* | |
* For full copyright and license information, please see | |
* the docs/CREDITS.txt file. | |
* | |
*/ | |
namespace phpbb\template; | |
class asset | |
{ | |
protected $components = array(); | |
/** @var \phpbb\path_helper **/ | |
protected $path_helper; | |
/** @var \phpbb\filesystem\filesystem */ | |
protected $filesystem; | |
/** | |
* Constructor | |
* | |
* @param string $url URL | |
* @param \phpbb\path_helper $path_helper Path helper object | |
* @param \phpbb\filesystem\filesystem $filesystem | |
*/ | |
public function __construct($url, \phpbb\path_helper $path_helper, \phpbb\filesystem\filesystem $filesystem) | |
{ | |
$this->path_helper = $path_helper; | |
$this->filesystem = $filesystem; | |
$this->set_url($url); | |
} | |
/** | |
* Set URL | |
* | |
* @param string $url URL | |
*/ | |
public function set_url($url) | |
{ | |
if (version_compare(PHP_VERSION, '5.4.7') < 0 && substr($url, 0, 2) === '//') | |
{ | |
// Workaround for PHP 5.4.6 and older bug #62844 - add fake scheme and then remove it | |
$this->components = parse_url('http:' . $url); | |
$this->components['scheme'] = ''; | |
return; | |
} | |
$this->components = parse_url($url); | |
} | |
/** | |
* Convert URL components into string | |
* | |
* @param array $components URL components | |
* @return string URL | |
*/ | |
protected function join_url($components) | |
{ | |
$path = ''; | |
if (isset($components['scheme'])) | |
{ | |
$path = $components['scheme'] === '' ? '//' : $components['scheme'] . '://'; | |
} | |
if (isset($components['user']) || isset($components['pass'])) | |
{ | |
if ($path === '' && !isset($components['port'])) | |
{ | |
$path = '//'; | |
} | |
$path .= $components['user']; | |
if (isset($components['pass'])) | |
{ | |
$path .= ':' . $components['pass']; | |
} | |
$path .= '@'; | |
} | |
if (isset($components['host'])) | |
{ | |
if ($path === '' && !isset($components['port'])) | |
{ | |
$path = '//'; | |
} | |
$path .= $components['host']; | |
if (isset($components['port'])) | |
{ | |
$path .= ':' . $components['port']; | |
} | |
} | |
if (isset($components['path'])) | |
{ | |
$path .= $components['path']; | |
} | |
if (isset($components['query'])) | |
{ | |
$path .= '?' . $components['query']; | |
} | |
if (isset($components['fragment'])) | |
{ | |
$path .= '#' . $components['fragment']; | |
} | |
return $path; | |
} | |
/** | |
* Get URL | |
* | |
* @return string URL | |
*/ | |
public function get_url() | |
{ | |
return $this->path_helper->update_web_root_path($this->join_url($this->components)); | |
} | |
/** | |
* Checks if URL is local and relative | |
* | |
* @return boolean True if URL is local and relative | |
*/ | |
public function is_relative() | |
{ | |
if (empty($this->components) || !isset($this->components['path'])) | |
{ | |
// Invalid URL | |
return false; | |
} | |
return !isset($this->components['scheme']) && !isset($this->components['host']) && substr($this->components['path'], 0, 1) !== '/'; | |
} | |
/** | |
* Get path component of current URL | |
* | |
* @return string Path | |
*/ | |
public function get_path() | |
{ | |
return isset($this->components['path']) ? $this->components['path'] : ''; | |
} | |
/** | |
* Set path component | |
* | |
* @param string $path Path component | |
* @param boolean $urlencode If true, parts of path should be encoded with rawurlencode() | |
*/ | |
public function set_path($path, $urlencode = false) | |
{ | |
// Since 1.7.0 Twig returns the real path of the file. We need it to be relative. | |
$real_root_path = $this->filesystem->realpath($this->path_helper->get_phpbb_root_path()) . DIRECTORY_SEPARATOR; | |
// If the asset is under the phpBB root path we need to remove its path and then prepend $phpbb_root_path | |
if ($real_root_path && substr($path . DIRECTORY_SEPARATOR, 0, strlen($real_root_path)) === $real_root_path) | |
{ | |
$path = $this->path_helper->get_phpbb_root_path() . str_replace('\\', '/', substr($path, strlen($real_root_path))); | |
} | |
else | |
{ | |
// Else we make the path relative to the current working directory | |
$real_root_path = $this->filesystem->realpath('.') . DIRECTORY_SEPARATOR; | |
if ($real_root_path && substr($path . DIRECTORY_SEPARATOR, 0, strlen($real_root_path)) === $real_root_path) | |
{ | |
$path = str_replace('\\', '/', substr($path, strlen($real_root_path))); | |
} | |
} | |
if ($urlencode) | |
{ | |
$paths = explode('/', $path); | |
foreach ($paths as &$dir) | |
{ | |
$dir = rawurlencode($dir); | |
} | |
$path = implode('/', $paths); | |
} | |
$this->components['path'] = $path; | |
} | |
/** | |
* Add assets_version parameter to URL. | |
* Parameter will not be added if assets_version already exists in URL | |
* | |
* @param string $version Version | |
*/ | |
public function add_assets_version($version) | |
{ | |
if (!isset($this->components['query'])) | |
{ | |
$this->components['query'] = 'assets_version=' . $version; | |
return; | |
} | |
$query = $this->components['query']; | |
if (!preg_match('/(^|[&;])assets_version=/', $query)) | |
{ | |
$this->components['query'] = $query . '&assets_version=' . $version; | |
} | |
} | |
} |