| Server IP : 172.67.191.97 / Your IP : 104.23.197.209 Web Server : Apache/2.4.63 (Ubuntu) System : Linux adminpruebas-Virtual-Machine 6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 8.4.5 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/html/pregrados/medicina-veterinaria-zootecnia/libraries/regularlabs/src/ |
Upload File : |
<?php
/**
* @package Regular Labs Library
* @version 23.12.10783
*
* @author Peter van Westen <[email protected]>
* @link https://regularlabs.com
* @copyright Copyright © 2023 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
namespace RegularLabs\Library;
defined('_JEXEC') or die;
use Joomla\CMS\Router\Route as JRoute;
use Joomla\CMS\Uri\Uri as JUri;
class Uri
{
/**
* Adds the given url parameter (key + value) to the url or replaces it already exists
*/
public static function addParameter(
string $url,
string $key,
string $value = '',
bool $replace = true
): string
{
if (empty($key))
{
return $url;
}
$uri = parse_url($url);
$query = self::parse_query($uri['query'] ?? '');
if ( ! $replace && isset($query[$key]))
{
return $url;
}
$query[$key] = $value;
$uri['query'] = http_build_query($query);
return self::createUrlFromArray($uri);
}
/**
* Appends the given hash to the url or replaces it if there is already one
*/
public static function appendHash(string $url = '', string $hash = ''): string
{
if (empty($hash))
{
return $url;
}
$uri = parse_url($url);
$uri['fragment'] = $hash;
return self::createUrlFromArray($uri);
}
/**
* Converts an array of url parts (like made by parse_url) to a string
*/
public static function createUrlFromArray(array $uri): string
{
$user = $uri['user'] ?? '';
$pass = ! empty($uri['pass']) ? ':' . $uri['pass'] : '';
return (! empty($uri['scheme']) ? $uri['scheme'] . '://' : '')
. (($user || $pass) ? $user . $pass . '@' : '')
. (! empty($uri['host']) ? $uri['host'] : '')
. (! empty($uri['port']) ? ':' . $uri['port'] : '')
. (! empty($uri['path']) ? $uri['path'] : '')
. (! empty($uri['query']) ? '?' . $uri['query'] : '')
. (! empty($uri['fragment']) ? '#' . $uri['fragment'] : '');
}
public static function decode(string $string, bool $urldecode = true): string
{
if ($urldecode)
{
$string = urldecode($string);
}
$string = base64_decode($string);
$deflated = @gzinflate($string);
if ($string === $deflated || ! $deflated)
{
return $string;
}
return $deflated;
}
public static function encode(string $string, bool $urlencode = true): string
{
$string = base64_encode(gzdeflate($string));
if ($urlencode)
{
$string = urlencode($string);
}
return $string;
}
/**
* Returns the full uri and optionally adds/replaces the hash
*/
public static function get(string $hash = ''): string
{
$url = JUri::getInstance()->toString();
if ($hash == '')
{
return $url;
}
return self::appendHash($url, $hash);
}
public static function getCompressedAttributes(): string
{
$compressed = '';
for ($i = 0; $i < 10; $i++)
{
$compressed .= Input::getString('rlatt_' . $i, '');
}
return self::decode($compressed, false);
}
/**
* Get the value of a given url parameter from the url
*/
public static function getParameter(string $url, string $key): mixed
{
if (empty($key))
{
return '';
}
$uri = parse_url($url);
if ( ! isset($uri['query']))
{
return '';
}
$query = self::parse_query($uri['query']);
return $query[$key] ?? '';
}
/**
* Get all url parameters from the url
*/
public static function getParameters(string $url): object
{
$uri = parse_url($url);
if ( ! isset($uri['query']))
{
return (object) [];
}
$query = self::parse_query($uri['query']);
return (object) $query;
}
public static function isExternal(string $url): bool
{
if ( ! str_contains($url, '://'))
{
return false;
}
// hostname: give preference to SERVER_NAME, because this includes subdomains
$hostname = ($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST'];
return ! (str_starts_with(RegEx::replace('^.*?://', '', $url), $hostname));
}
/**
* removes the given url parameter from the url
*/
public static function removeParameter(string $url, string $key): string
{
if (empty($key))
{
return $url;
}
$uri = parse_url($url);
if ( ! isset($uri['query']))
{
return $url;
}
$query = self::parse_query($uri['query']);
unset($query[$key]);
$uri['query'] = http_build_query($query);
return self::createUrlFromArray($uri);
}
public static function route(string $url): string
{
return JRoute::_(JUri::root(true) . '/' . $url);
}
/**
* Parse a query string into an associative array.
*/
private static function parse_query(string $string): array
{
$result = [];
if ($string === '')
{
return $result;
}
$decoder = fn($value) => rawurldecode(str_replace('+', ' ', $value));
foreach (explode('&', $string) as $kvp)
{
$parts = explode('=', $kvp, 2);
$key = $decoder($parts[0]);
$value = isset($parts[1]) ? $decoder($parts[1]) : null;
if ( ! isset($result[$key]))
{
$result[$key] = $value;
continue;
}
if ( ! is_array($result[$key]))
{
$result[$key] = [$result[$key]];
}
$result[$key][] = $value;
}
return $result;
}
}