Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
81.91% covered (warning)
81.91%
77 / 94
94.12% covered (success)
94.12%
32 / 34
CRAP
0.00% covered (danger)
0.00%
0 / 1
Session
81.91% covered (warning)
81.91%
77 / 94
94.12% covered (success)
94.12%
32 / 34
95.35
0.00% covered (danger)
0.00%
0 / 1
 getDefaults
100.00% covered (success)
100.00%
34 / 34
100.00% covered (success)
100.00%
1 / 1
1
 getContent
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getBasket
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getHuman
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getRequests
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getProviders
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getProcess
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getSource
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getScope
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getAuthKey
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getLastStep
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
3
 getStatus
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 removeLastStep
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getSelectedDate
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getEntryData
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isEmpty
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
4
 isInChange
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 isStalled
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 isReserved
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 isConfirmed
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 isPreconfirmed
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6
 isFinished
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 isProcessDeleted
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasStatus
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasProcess
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasAuthKey
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasChangedProcess
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasPreviousAppointmentSearch
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasRequests
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasProvider
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasScope
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasDate
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasDifferentEntry
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
8
 withOidcDataOnly
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
72
1<?php
2
3namespace BO\Zmsentities;
4
5/**
6 * Extension for Twig and Slim
7 *
8 * Schema-backed entity (ArrayObject::ARRAY_AS_PROPS); document dynamic keys for Psalm.
9 *
10 * @property string $id
11 * @property string $name
12 * @property array $content
13 *
14 * @SuppressWarnings(PublicMethod)
15 * @SuppressWarnings(TooManyMethods)
16 * @SuppressWarnings(Complexity)
17 */
18class Session extends Schema\Entity
19{
20    public const PRIMARY = 'id';
21
22    public static $schema = "session.json";
23
24    #[\Override]
25    public function getDefaults()
26    {
27        return [
28            'content' => array(
29                'basket' => [
30                    'requests' => '',
31                    'providers' => '',
32                    'scope' => '0',
33                    'process' => '0',
34                    'date' => '0',
35                    'familyName' => '',
36                    'email' => '',
37                    'telephone' => '',
38                    'amendment' => '',
39                    'authKey' => ''
40                ],
41                'human' => [
42                    'captcha_text' => '',
43                    'client' => 0,
44                    'ts' => 0,
45                    'origin' => '',
46                    'remoteAddress' => '',
47                    'referer' => '',
48                    'step' => array(
49                      'dayselect' => 0,
50                      'timeselect' => 0,
51                      'register' => 0,
52                      'summary' => 0
53                    )
54                ],
55                'source' => 'dldb',
56                'status' => 'start',
57                'X-Authkey' => '',
58                'error' => ''
59            )
60        ];
61    }
62
63    public function getContent()
64    {
65        return $this->toProperty()->content->get();
66    }
67
68    public function getBasket()
69    {
70        return $this->toProperty()->content->basket->get();
71    }
72
73    public function getHuman()
74    {
75        return $this->toProperty()->content->human->get();
76    }
77
78    public function getRequests()
79    {
80        return Helper\Sorter::toSortedCsv($this->toProperty()->content->basket->requests->get());
81    }
82
83    public function getProviders()
84    {
85        return Helper\Sorter::toSortedCsv($this->toProperty()->content->basket->providers->get());
86    }
87
88    public function getProcess()
89    {
90        return $this->toProperty()->content->basket->process->get();
91    }
92
93    public function getSource()
94    {
95        return $this->toProperty()->content->source->get();
96    }
97
98    public function getScope()
99    {
100        return $this->toProperty()->content->basket->scope->get();
101    }
102
103    public function getAuthKey()
104    {
105        return $this->toProperty()->content->basket->authKey->get();
106    }
107
108    public function getLastStep()
109    {
110        $steps = $this->toProperty()->content->human->step->get();
111        $steps = (is_array($steps)) ? array_keys($steps) : null;
112        return (null !== $steps) ? end($steps) : $steps;
113    }
114
115    public function getStatus()
116    {
117        return $this->toProperty()->content->status->get();
118    }
119
120    public function removeLastStep()
121    {
122        unset($this->content['human']['step'][$this->getLastStep()]);
123        return $this;
124    }
125
126    /**
127     *
128     * Get selected date
129     *
130     * @return integer
131     */
132    public function getSelectedDate()
133    {
134        return $this->toProperty()->content->basket->date->get();
135    }
136
137    /**
138     *
139     * Get entry data
140     *
141     * @return array
142     */
143    public function getEntryData()
144    {
145        return $this->toProperty()->content->entry->get();
146    }
147
148    public function isEmpty()
149    {
150        return (! $this->hasProvider() && ! $this->hasRequests() && ! $this->hasScope()) ? true : false;
151    }
152
153    public function isInChange()
154    {
155        return ('inChange' == $this->getStatus()) ? true : false;
156    }
157
158    public function isStalled()
159    {
160        return ('stalled' == $this->getStatus()) ? true : false;
161    }
162
163    public function isReserved()
164    {
165        return ('reserved' == $this->getStatus()) ? true : false;
166    }
167
168    public function isConfirmed()
169    {
170        return ('confirmed' == $this->getStatus()) ? true : false;
171    }
172
173    public function isPreconfirmed()
174    {
175        return ('preconfirmed' == $this->getStatus()) ? true : false;
176    }
177
178    public function isFinished()
179    {
180        return ('finished' == $this->getStatus()) ? true : false;
181    }
182
183    public function isProcessDeleted()
184    {
185        return ! $this->hasProcess();
186    }
187
188    public function hasStatus()
189    {
190        return (null === $this->getStatus()) ? false : true;
191    }
192
193    public function hasProcess()
194    {
195        return (null === $this->getProcess()) ? false : true;
196    }
197
198    public function hasAuthKey()
199    {
200        return (null === $this->getAuthKey()) ? false : true;
201    }
202
203    public function hasChangedProcess()
204    {
205        return ('inChange' == $this->getStatus()) ? true : false;
206    }
207
208    public function hasPreviousAppointmentSearch()
209    {
210        return ('inProgress' == $this->getStatus()) ? true : false;
211    }
212
213    /**
214     * Check if requests exists
215     *
216     * @return boolean
217     */
218    public function hasRequests()
219    {
220        return ($this->getRequests()) ? true : false;
221    }
222
223    /**
224     *
225     * Check if provider exists
226     *
227     * @return boolean
228     */
229    public function hasProvider()
230    {
231        return ($this->getProviders()) ? true : false;
232    }
233
234    /**
235     *
236     * Check if scope exists
237     *
238     * @return boolean
239     */
240    public function hasScope()
241    {
242        return ($this->getScope()) ? true : false;
243    }
244
245    /**
246     *
247     * Check if date exists
248     *
249     * @return boolean
250     */
251    public function hasDate()
252    {
253        return ($this->getSelectedDate()) ? true : false;
254    }
255
256    /**
257     *
258     * Check if entry parameter are different
259     *
260     * @return boolean
261     */
262    public function hasDifferentEntry($newEntryData)
263    {
264        return (
265            ($this->getProviders() || $this->getScope()) &&
266            $this->getRequests() &&
267            $this->getEntryData() &&
268            (
269                !($this->getProviders() == Helper\Sorter::toSortedCsv($newEntryData['providers'])) ||
270                !($this->getRequests() == Helper\Sorter::toSortedCsv($newEntryData['requests'])) ||
271                !($this->getScope() == $newEntryData['scope'])
272            )
273         ) ? true : false;
274    }
275
276    public function withOidcDataOnly()
277    {
278        $entity = clone $this;
279        if ($entity->toProperty()->content->basket->isAvailable()) {
280            unset($entity->content['basket']);
281        }
282        if ($entity->toProperty()->content->human->isAvailable()) {
283            unset($entity->content['human']);
284        }
285        if ($entity->toProperty()->content->entry->isAvailable()) {
286            unset($entity->content['entry']);
287        }
288        if ($entity->toProperty()->content->source->isAvailable()) {
289            unset($entity->content['source']);
290        }
291        if ($entity->toProperty()->content->status->isAvailable()) {
292            unset($entity->content['status']);
293        }
294        if ($entity->toProperty()->content['X-Authkey']->isAvailable()) {
295            unset($entity->content['X-Authkey']);
296        }
297        if ($entity->toProperty()->content->error->isAvailable()) {
298            unset($entity->content['error']);
299        }
300        return $entity;
301    }
302}