194 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace WapplerSystems\Meilisearch\System\Url;
 | 
						|
 | 
						|
/*
 | 
						|
 * This file is part of the TYPO3 CMS project.
 | 
						|
 *
 | 
						|
 * It is free software; you can redistribute it and/or modify it under
 | 
						|
 * the terms of the GNU General Public License, either version 2
 | 
						|
 * of the License, or any later version.
 | 
						|
 *
 | 
						|
 * For the full copyright and license information, please read the
 | 
						|
 * LICENSE.txt file that was distributed with this source code.
 | 
						|
 *
 | 
						|
 * The TYPO3 project - inspiring people to share!
 | 
						|
 */
 | 
						|
 | 
						|
use TYPO3\CMS\Core\Http\Uri;
 | 
						|
use TYPO3\CMS\Core\Utility\MathUtility;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class UrlHelper
 | 
						|
 *
 | 
						|
 * @author Timo Hund <timo.hund@dkd.de>
 | 
						|
 */
 | 
						|
class UrlHelper extends Uri
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @param string $host
 | 
						|
     * @return UrlHelper
 | 
						|
     * @deprecated Will be removed with v12. Use withHost instead.
 | 
						|
     * @see Uri::withHost()
 | 
						|
     */
 | 
						|
    public function setHost(string $host)
 | 
						|
    {
 | 
						|
        $this->host = $host;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $port
 | 
						|
     * @return UrlHelper
 | 
						|
     * @deprecated Will be removed with v12. Use withPort instead.
 | 
						|
     * @see Uri::withPort()
 | 
						|
     */
 | 
						|
    public function setPort(string $port)
 | 
						|
    {
 | 
						|
        if ($port !== '') {
 | 
						|
            if (MathUtility::canBeInterpretedAsInteger($port) === false) {
 | 
						|
                $argumentType = is_object($port) ? get_class($port) : gettype($port);
 | 
						|
                throw new \InvalidArgumentException('Invalid port "' . $argumentType . '" specified, must be an integer.', 1436717324);
 | 
						|
            }
 | 
						|
 | 
						|
            $port = (int)$port;
 | 
						|
            if ($port < 1 || $port > 65535) {
 | 
						|
                throw new \InvalidArgumentException('Invalid port "' . $port . '" specified, must be a valid TCP/UDP port.', 1436717326);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $this->port = $port;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $scheme
 | 
						|
     * @return UrlHelper
 | 
						|
     * @deprecated Will be removed with v12. Use Uri::withScheme instead.
 | 
						|
     * @see Uri::withScheme()
 | 
						|
     */
 | 
						|
    public function setScheme(string $scheme)
 | 
						|
    {
 | 
						|
        $this->scheme = $this->sanitizeScheme($scheme);
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $path
 | 
						|
     * @return UrlHelper
 | 
						|
     * @deprecated Will be removed with v12. Use withPath instead.
 | 
						|
     * @see Uri::withPath()
 | 
						|
     */
 | 
						|
    public function setPath($path)
 | 
						|
    {
 | 
						|
        if (!is_string($path)) {
 | 
						|
            throw new \InvalidArgumentException('Invalid path provided. Must be of type string.', 1436717328);
 | 
						|
        }
 | 
						|
 | 
						|
        if (strpos($path, '?') !== false) {
 | 
						|
            throw new \InvalidArgumentException('Invalid path provided. Must not contain a query string.', 1436717330);
 | 
						|
        }
 | 
						|
 | 
						|
        if (strpos($path, '#') !== false) {
 | 
						|
            throw new \InvalidArgumentException('Invalid path provided; must not contain a URI fragment', 1436717332);
 | 
						|
        }
 | 
						|
        $this->path = $this->sanitizePath($path);
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Remove a given parameter from the query and create a new instance.
 | 
						|
     *
 | 
						|
     * @param string $parameterName
 | 
						|
     * @return UrlHelper
 | 
						|
     */
 | 
						|
    public function withoutQueryParameter(string $parameterName): UrlHelper
 | 
						|
    {
 | 
						|
        parse_str($this->query, $parameters);
 | 
						|
        if (isset($parameters[$parameterName])) {
 | 
						|
            unset($parameters[$parameterName]);
 | 
						|
        }
 | 
						|
        $query = '';
 | 
						|
        if (!empty($parameters)) {
 | 
						|
            $query = http_build_query($parameters);
 | 
						|
        }
 | 
						|
        $query = $this->sanitizeQuery($query);
 | 
						|
        $clonedObject = clone $this;
 | 
						|
        $clonedObject->query = $query;
 | 
						|
        return $clonedObject;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $parameterName
 | 
						|
     * @throws \InvalidArgumentException
 | 
						|
     * @return UrlHelper
 | 
						|
     * @deprecated Will be removed with v12. Use withoutQueryParameter instead.
 | 
						|
     */
 | 
						|
    public function removeQueryParameter(string $parameterName): UrlHelper
 | 
						|
    {
 | 
						|
        parse_str($this->query, $parameters);
 | 
						|
        if (isset($parameters[$parameterName])) {
 | 
						|
            unset($parameters[$parameterName]);
 | 
						|
        }
 | 
						|
        $query = '';
 | 
						|
        if (!empty($parameters)) {
 | 
						|
            $query = http_build_query($parameters);
 | 
						|
        }
 | 
						|
        $this->query = $this->sanitizeQuery($query);
 | 
						|
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Add a given parameter with value to the query and create a new instance.
 | 
						|
     *
 | 
						|
     * @param string $parameterName
 | 
						|
     * @param mixed $value
 | 
						|
     * @return UrlHelper
 | 
						|
     */
 | 
						|
    public function withQueryParameter(string $parameterName, $value): UrlHelper
 | 
						|
    {
 | 
						|
        parse_str($this->query, $parameters);
 | 
						|
        $parameters[$parameterName] = $value;
 | 
						|
        $query = '';
 | 
						|
        if (!empty($parameters)) {
 | 
						|
            $query = http_build_query($parameters);
 | 
						|
        }
 | 
						|
        $query = $this->sanitizeQuery($query);
 | 
						|
        $clonedObject = clone $this;
 | 
						|
        $clonedObject->query = $query;
 | 
						|
        return $clonedObject;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $parameterName
 | 
						|
     * @param mixed $value
 | 
						|
     * @throws \InvalidArgumentException
 | 
						|
     * @return UrlHelper
 | 
						|
     * @deprecated Will be removed with v12. Use withQueryParameter instead.
 | 
						|
     */
 | 
						|
    public function addQueryParameter(string $parameterName, $value): UrlHelper
 | 
						|
    {
 | 
						|
        $parameters = $this->query;
 | 
						|
        parse_str($this->query, $parameters);
 | 
						|
        if (empty($parameters)) {
 | 
						|
            $parameters = [];
 | 
						|
        }
 | 
						|
        $parameters[$parameterName] = $value;
 | 
						|
        $query = '';
 | 
						|
        if (!empty($parameters)) {
 | 
						|
            $query = http_build_query($parameters);
 | 
						|
        }
 | 
						|
        $this->query = $this->sanitizeQuery($query);
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return string
 | 
						|
     * @deprecated Will be removed with v12. Use __toString() instead.
 | 
						|
     */
 | 
						|
    public function getUrl(): string
 | 
						|
    {
 | 
						|
        return $this->__toString();
 | 
						|
    }
 | 
						|
}
 |