parent
3aaf726856
commit
c8d3aa2517
|
@ -13,12 +13,17 @@ use Icinga\Data\Filter\Filter;
|
||||||
* returns Urls reflecting all changes made to the url and to the parameters.
|
* returns Urls reflecting all changes made to the url and to the parameters.
|
||||||
*
|
*
|
||||||
* Direct instantiation is prohibited and should be done either with @see Url::fromRequest() or
|
* Direct instantiation is prohibited and should be done either with @see Url::fromRequest() or
|
||||||
* @see Url::fromUrlString()
|
* @see Url::fromPath()
|
||||||
*
|
|
||||||
* Currently, protocol, host and port are ignored and will be implemented when required
|
|
||||||
*/
|
*/
|
||||||
class Url
|
class Url
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Whether this url points to an external resource
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $external;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An array of all parameters stored in this Url
|
* An array of all parameters stored in this Url
|
||||||
*
|
*
|
||||||
|
@ -132,8 +137,6 @@ class Url
|
||||||
}
|
}
|
||||||
|
|
||||||
$urlObject = new Url();
|
$urlObject = new Url();
|
||||||
$baseUrl = $request->getBaseUrl();
|
|
||||||
$urlObject->setBaseUrl($baseUrl);
|
|
||||||
|
|
||||||
if ($url === '#') {
|
if ($url === '#') {
|
||||||
$urlObject->setPath($url);
|
$urlObject->setPath($url);
|
||||||
|
@ -141,8 +144,25 @@ class Url
|
||||||
}
|
}
|
||||||
|
|
||||||
$urlParts = parse_url($url);
|
$urlParts = parse_url($url);
|
||||||
|
if (isset($urlParts['scheme']) && $urlParts['scheme'] !== $request->getScheme()) {
|
||||||
|
$baseUrl = $urlParts['scheme'] . '://' . $urlParts['host'] . (isset($urlParts['port'])
|
||||||
|
? (':' . $urlParts['port'])
|
||||||
|
: '');
|
||||||
|
$urlObject->setIsExternal();
|
||||||
|
} elseif (
|
||||||
|
(isset($urlParts['host]']) && $urlParts['host'] !== $request->getServer('SERVER_NAME'))
|
||||||
|
|| (isset($urlParts['port']) && $urlParts['port'] != $request->getServer('SERVER_PORT'))
|
||||||
|
) {
|
||||||
|
$baseUrl = $urlParts['host'] . (isset($urlParts['port']) ? (':' . $urlParts['port']) : '');
|
||||||
|
$urlObject->setIsExternal();
|
||||||
|
} else {
|
||||||
|
$baseUrl = $request->getBaseUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
$urlObject->setBaseUrl($baseUrl);
|
||||||
|
|
||||||
if (isset($urlParts['path'])) {
|
if (isset($urlParts['path'])) {
|
||||||
if ($baseUrl !== '' && strpos($urlParts['path'], $baseUrl) === 0) {
|
if ($baseUrl && !$urlObject->isExternal() && strpos($urlParts['path'], $baseUrl) === 0) {
|
||||||
$urlObject->setPath(substr($urlParts['path'], strlen($baseUrl)));
|
$urlObject->setPath(substr($urlParts['path'], strlen($baseUrl)));
|
||||||
} else {
|
} else {
|
||||||
$urlObject->setPath($urlParts['path']);
|
$urlObject->setPath($urlParts['path']);
|
||||||
|
@ -236,6 +256,29 @@ class Url
|
||||||
return $this->path;
|
return $this->path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether this url points to an external resource
|
||||||
|
*
|
||||||
|
* @param bool $state
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setIsExternal($state = true)
|
||||||
|
{
|
||||||
|
$this->external = (bool) $state;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return whether this url points to an external resource
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isExternal()
|
||||||
|
{
|
||||||
|
return $this->external;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the relative url with query parameters as a string
|
* Return the relative url with query parameters as a string
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue