Passed
Push — master ( 7822c6...0f91e9 )
by Sebastian
03:25
created

QueryParamsTrait::hasQueryParam()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 5
rs 10
1
<?php
2
/**
3
 * File containing the {@see \Mailcode\Traits\Commands\Validation\QueryParamsTrait} trait.
4
 *
5
 * @package Mailcode
6
 * @subpackage Validation
7
 * @see \Mailcode\Traits\Commands\Validation\QueryParamsTrait
8
 */
9
10
declare(strict_types=1);
11
12
namespace Mailcode\Traits\Commands\Validation;
13
14
use Mailcode\Commands\ParamsException;
15
use Mailcode\Interfaces\Commands\Validation\QueryParamsInterface;
16
use Mailcode\Mailcode_Parser_Statement_Tokenizer_Token_StringLiteral;
17
use Mailcode\Traits\Commands\Validation\QueryParamsTrait\QueryParam;
18
19
/**
20
 * Command validation drop-in: checks for the presence
21
 * of query parameters specified in separate string
22
 * literals, identified by the format <code>"paramName=paramValue"</code>.
23
 *
24
 * @package Mailcode
25
 * @subpackage Validation
26
 * @author Sebastian Mordziol <[email protected]>
27
 *
28
 * @see QueryParamsInterface
29
 */
30
trait QueryParamsTrait
31
{
32
    /**
33
     * @var Mailcode_Parser_Statement_Tokenizer_Token_StringLiteral[]
34
     */
35
    private array $queryParamTokens = array();
36
37
    protected function validateSyntax_query_params() : void
38
    {
39
40
    }
41
42
    public function hasQueryParams() : bool
43
    {
44
        $params = $this->collectParams();
45
        return !empty($params);
46
    }
47
48
    /**
49
     * @return array<string,string>
50
     */
51
    public function getQueryParams() : array
52
    {
53
        $params = $this->collectParams();
54
        $result = array();
55
56
        foreach($params as $param)
57
        {
58
            $result[$param->getName()] = $param->getValue();
59
        }
60
61
        return $result;
62
    }
63
64
    /**
65
     * @return Mailcode_Parser_Statement_Tokenizer_Token_StringLiteral[]
66
     */
67
    public function getQueryParamTokens() : array
68
    {
69
        $params = $this->collectParams();
70
        $result = array();
71
72
        foreach($params as $param)
73
        {
74
            $result[] = $param->getToken();
75
        }
76
77
        return $result;
78
    }
79
80
    /**
81
     * @return array<string,QueryParam>
82
     * @throws ParamsException
83
     */
84
    private function collectParams() : array
85
    {
86
        $literals = $this->requireParams()
0 ignored issues
show
Bug introduced by
It seems like requireParams() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

86
        $literals = $this->/** @scrutinizer ignore-call */ requireParams()
Loading history...
87
            ->getInfo()
88
            ->getStringLiterals();
89
90
        $result = array();
91
92
        foreach($literals as $literal)
93
        {
94
            $text = $literal->getText();
95
96
            if(strpos($text, '=') !== false)
97
            {
98
                $param = new QueryParam($literal);
99
                $result[$param->getName()] = $param;
100
            }
101
        }
102
103
        return $result;
104
    }
105
106
    public function getQueryParam(string $name) : string
107
    {
108
        $params = $this->collectParams();
109
110
        if(isset($params[$name]))
111
        {
112
            return $params[$name]->getValue();
113
        }
114
115
        return '';
116
    }
117
118
    public function hasQueryParam(string $name) : bool
119
    {
120
        $params = $this->collectParams();
121
122
        return isset($params[$name]);
123
    }
124
125
    public function setQueryParam(string $name, string $value) : self
126
    {
127
        $params = $this->collectParams();
128
129
        if(isset($params[$name]))
130
        {
131
            $params[$name]->setValue($value);
132
        }
133
        else
134
        {
135
            $this->addParam($name, $value);
136
        }
137
138
        return $this;
139
    }
140
141
    private function addParam(string $name, string $value) : void
142
    {
143
        $this->requireParams()
144
            ->getInfo()
145
            ->addStringLiteral(sprintf('%s=%s', $name, $value));
146
    }
147
148
    public function removeQueryParam(string $name) : self
149
    {
150
        $params = $this->collectParams();
151
152
        if(isset($params[$name]))
153
        {
154
            $this->requireParams()
155
                ->getInfo()
156
                ->removeToken($params[$name]->getToken());
157
        }
158
159
        return $this;
160
    }
161
}
162