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