158 lines
3.2 KiB
PHP
158 lines
3.2 KiB
PHP
<?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
|
|
*/
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
use \NRFramework\Cache;
|
|
|
|
class NRURLs {
|
|
|
|
private $url;
|
|
private $shortener;
|
|
private $cache;
|
|
|
|
function __construct($url = null)
|
|
{
|
|
if (isset($url)) {
|
|
$this->set($url);
|
|
}
|
|
|
|
$this->setCache(true);
|
|
}
|
|
|
|
public function set($url)
|
|
{
|
|
$url = trim(filter_var($url, FILTER_SANITIZE_URL));
|
|
return ($this->url = $url);
|
|
}
|
|
|
|
public function setCache($state)
|
|
{
|
|
$this->cache = (bool) $state;
|
|
}
|
|
|
|
public function setShortener($service)
|
|
{
|
|
$this->shortener = $service;
|
|
}
|
|
|
|
public function get()
|
|
{
|
|
return $this->url;
|
|
}
|
|
|
|
public function validate($url_ = null)
|
|
{
|
|
$url = isset($url_) ? $url_ : $this->url;
|
|
|
|
if (!$url)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// Remove all illegal characters from the URL
|
|
$url = filter_var($url, FILTER_SANITIZE_URL);
|
|
|
|
// Validate URL
|
|
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function getShort()
|
|
{
|
|
if (!$this->validate() || !isset($this->shortener))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$hash = MD5($this->shortener->name . $this->url);
|
|
$cache = Cache::read($hash, true);
|
|
|
|
if ($cache)
|
|
{
|
|
return $cache;
|
|
}
|
|
|
|
// Load Shorten Service Class
|
|
$file = __DIR__ . "/" . strtolower($this->shortener->name) . '.php';
|
|
$class = 'nrURLShort' . $this->shortener->name;
|
|
$method = "get";
|
|
|
|
require_once(__DIR__ . "/shortener.php");
|
|
|
|
if (!class_exists($class) && file_exists($file)) {
|
|
require_once($file);
|
|
}
|
|
|
|
if (!class_exists($class) || !method_exists($class, $method))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$class_ = new $class($this->shortener, $this->url);
|
|
$data = $class_->$method();
|
|
|
|
// Return the original URL if we don't have a valid short URL
|
|
if (!$this->validate($data))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
Cache::set($hash, $data);
|
|
|
|
// Store to cache
|
|
if ($this->cache)
|
|
{
|
|
Cache::write($hash, $data);
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Appends extra parameters to the end of the URL
|
|
*
|
|
* @param String $url Pass URL
|
|
* @param String $params String of parameters (param=1¶m=2)
|
|
*
|
|
* @return string Returns new url
|
|
*/
|
|
public function appendParams($params)
|
|
{
|
|
|
|
if (!$params)
|
|
{
|
|
return $this;
|
|
}
|
|
|
|
$url = $this->url;
|
|
|
|
$query = parse_url($url, PHP_URL_QUERY);
|
|
$params = trim($params, "?");
|
|
$params = trim($params, "&");
|
|
|
|
if ($query)
|
|
{
|
|
$url .= '&' . $params;
|
|
} else
|
|
{
|
|
$url .= '?' . $params;
|
|
}
|
|
|
|
$this->set($url);
|
|
|
|
return $this;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|