summaryrefslogtreecommitdiffstats
path: root/vendor/ipl/web/src/Url.php
blob: adb96cd0df5649dc11e4123730789673343f7144 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php

namespace ipl\Web;

use Icinga\Web\UrlParams;
use ipl\Stdlib\Filter\Rule;
use ipl\Web\Filter\QueryString;

/**
 * @TODO(el): Don't depend on Icinga Web's Url
 */
class Url extends \Icinga\Web\Url
{
    /** @var ?Rule */
    private $filter;

    /**
     * Set the filter
     *
     * @param ?Rule $filter
     *
     * @return $this
     */
    public function setFilter(?Rule $filter): self
    {
        $this->filter = $filter;

        return $this;
    }

    /**
     * Get the filter
     *
     * @return ?Rule
     */
    public function getFilter(): ?Rule
    {
        return $this->filter;
    }

    /**
     * Render and return the filter and parameters as query string
     *
     * @param ?string $separator
     *
     * @return string
     */
    public function getQueryString($separator = null)
    {
        if ($this->filter === null) {
            return parent::getQueryString($separator);
        }

        $params = UrlParams::fromQueryString(QueryString::render($this->filter));
        foreach ($this->getParams()->toArray(false) as $name => $value) {
            if (is_int($name)) {
                $name = $value;
                $value = true;
            }

            $params->addEncoded($name, $value);
        }

        return $params->toString($separator);
    }

    public function __toString()
    {
        return $this->getAbsoluteUrl('&');
    }
}