19declare(strict_types=1);
122 throw new \InvalidArgumentException(
"Parameter name or namespace not set");
125 $parameter = implode(self::SEPARATOR,
$namespace) . self::SEPARATOR . $name;
127 throw new \ilException(
"Parameter '" . $parameter .
"' already reserved in URL");
131 $clone = clone $this;
132 $clone->params[$parameter] = ($initial_value) ??
'';
133 $clone->tokens[$parameter] =
$token;
142 foreach ($names as $name) {
146 array_unshift(
$tokens, $builder);
156 $clone = clone $this;
157 unset($clone->params[
$token->getName()]);
158 unset($clone->tokens[
$token->getName()]);
169 $clone = clone $this;
170 $clone->params[
$token->getName()] = $value;
187 $token_render[] =
'["' .
$token->getName() .
'",' .
$token->render() .
']';
189 $output =
'new Map([' . implode(
',', $token_render) .
'])';
205 $output =
'new il.UI.core.URLBuilder(new URL("' . $this->
buildURI() .
'"), ' . $this->
renderTokens($tokens) .
')';
216 $uri =
new URI($this->uri->getBaseURI() . $this->buildQuery() . $this->buildFragment());
229 $params = array_merge($this->uri->getParameters(), $this->params);
230 $query = (! empty(
$params)) ?
'?' . http_build_query(
$params) :
'';
231 $query = preg_replace(
'/%5B[0-9]+%5D/simU',
'%5B%5D', $query);
240 if ($this->fragment !==
null) {
241 return ($this->fragment !==
'') ?
'#' . $this->fragment :
'';
243 $fragment = ($this->uri->getFragment()) ?
'#' . $this->uri->getFragment() :
'';
252 return array_key_exists($name, $this->params);
263 if (! in_array(
$token, $this->tokens)
264 || $this->tokens[
$token->getName()]->getToken() !==
$token->getToken()) {
265 throw new \DomainException(
"Token for '" .
$token->getName() .
"' is not valid");
268 throw new \ilException(
"Parameter '" .
$token->getName() .
"' does not exist in URL");
279 if (! (strlen((
string)
$uri) <= self::URL_MAX_LENGTH)) {
280 throw new \LengthException(
"The final URL is longer than " . self::URL_MAX_LENGTH .
" and will not be valid.");
The scope of this class is split ilias-conform URI's into components.
getName()
Get the full name of the token including its namespace.
buildFragment()
Create the fragment/hash part of the URL.
buildQuery()
Create the query part of the URL from all parameters Claimed parameters overwrite base parameters in ...
renderTokens(array $tokens)
Renders a Javascript Map of all given tokens.
withURI(URI $uri)
Changes the base URI of the Builder.
parameterExists(string $name)
Check if parameter was already acquired.
array $tokens
Stores all generated tokens for acquired parameters.
acquireParameters(array $namespace, string ... $names)
buildURI()
Get a URI representation of the full URL including query string and fragment/hash.
withFragment(?string $fragment)
Change the fragment/hash part of the URL.
array $params
Stores all acquired parameters These always take precedence over existing parameters in the base URI.
checkToken(URLBuilderToken $token)
Check if a token is valid.
deleteParameter(URLBuilderToken $token)
Delete an acquired parameter if the supplied token is valid.
withParameter(URLBuilderToken $token, string|array $value)
Change an acquired parameter's value if the supplied token is valid.
string $fragment
Stores the URL fragment/hash (#) (always changeable due to its usage)
renderObject(array $tokens)
Renders a Javascript URLBuilder object with changeable parameters for all given tokens.
const SEPARATOR
Separator for parts of a parameter's namespace.
acquireParameter(array $namespace, string $name, ?string $initial_value=null)
Add a new parameter with a namespace and get its token for subsequent changes.
URI $uri
Base URI for the URLBuilder.
const URL_MAX_LENGTH
A maximum length of 8192 characters should be safe to use in most browsers, even though longer URLs w...
checkLength(URI $uri)
Check the full length of the URI against URL_MAX_LENGTH.
if($err=$client->getError()) $namespace
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...