acf
This commit is contained in:
157
plugins/system/nrframework/NRFramework/URL.php
Normal file
157
plugins/system/nrframework/NRFramework/URL.php
Normal file
@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @author Tassos Marinos <info@tassos.gr>
|
||||
* @link https://www.tassos.gr
|
||||
* @copyright Copyright © 2024 Tassos All Rights Reserved
|
||||
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
|
||||
*/
|
||||
|
||||
namespace NRFramework;
|
||||
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use NRFramework\Factory;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
|
||||
class URL
|
||||
{
|
||||
/**
|
||||
* The path.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $path;
|
||||
|
||||
/**
|
||||
* The Factory.
|
||||
*
|
||||
* @var Factory
|
||||
*/
|
||||
private $factory;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*/
|
||||
public function __construct($path, $factory = null)
|
||||
{
|
||||
$this->path = trim($path ?? '');
|
||||
$this->factory = $factory ? $factory : new Factory();
|
||||
}
|
||||
|
||||
public function getInstance()
|
||||
{
|
||||
return clone Uri::getInstance($this->path);
|
||||
}
|
||||
|
||||
public function getDomainName()
|
||||
{
|
||||
return strtolower(str_ireplace('www.', '', $this->getInstance()->getHost()));
|
||||
}
|
||||
|
||||
public function isAbsolute()
|
||||
{
|
||||
return !is_null($this->getInstance()->getScheme());
|
||||
}
|
||||
|
||||
public function isInternal()
|
||||
{
|
||||
if (!$this->path)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$host = $this->getInstance()->getHost();
|
||||
|
||||
if (is_null($host))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
$siteHost = $this->factory->getURI()->getHost();
|
||||
|
||||
return preg_match('#' . preg_quote($siteHost, '#') . '#', $host) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform a relative path to absolute URL
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function toAbsolute()
|
||||
{
|
||||
if (empty($this->path))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if it's already absolute URL
|
||||
if ($this->isAbsolute())
|
||||
{
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
$basePath = \parse_url(Uri::root());
|
||||
|
||||
$parse_path = $this->getInstance();
|
||||
$parse_path->setScheme($basePath['scheme']);
|
||||
$parse_path->setHost($basePath['host']);
|
||||
$parse_path->setPath($basePath['path'] . $parse_path->getPath());
|
||||
|
||||
return $parse_path->toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* CDNify a resource
|
||||
*
|
||||
* @param string $host The hostname of the CDN to be used
|
||||
* @param string $scheme
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function cdnify($host, $scheme = 'https')
|
||||
{
|
||||
// Allow only internal URLs
|
||||
if (!$this->isInternal())
|
||||
{
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
// Allow only resource files
|
||||
$path = $this->getInstance()->getPath();
|
||||
|
||||
if (strpos($path, '.') === false)
|
||||
{
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
return $this->setHost($host, $scheme);
|
||||
}
|
||||
|
||||
public function setHost($domain, $scheme = 'https')
|
||||
{
|
||||
if (empty($this->path))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$url_new = $this->getInstance();
|
||||
$url_new->setScheme($scheme);
|
||||
$url_new->setHost($domain);
|
||||
|
||||
// Path should always start with a slash
|
||||
if ($url_new->getPath())
|
||||
{
|
||||
$url_new->setPath('/' . ltrim($url_new->getPath(), '/'));
|
||||
}
|
||||
|
||||
$result = $url_new->toString();
|
||||
|
||||
if ($scheme == '//')
|
||||
{
|
||||
$result = str_replace('://', '', $result);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user