Lines 43.75% 35 / 80
Methods 42.85% 9 / 21
Classes 0.00% 0 / 1
Name Lines Methods CRAP
 __clone 100.00% 2 / 2 100.00% 1 / 1 2
 create 100.00% 5 / 5 100.00% 1 / 1 1
 hasAppointments 100.00% 4 / 4 100.00% 1 / 1 3
 hasLocations 100.00% 1 / 1 100.00% 1 / 1 2
 getLocationListByOfficePath 100.00% 5 / 5 100.00% 1 / 1 2
 hasLocationId 100.00% 1 / 1 100.00% 1 / 1 1
 removeLocation 100.00% 3 / 3 100.00% 1 / 1 1
 isInServiceList 100.00% 6 / 6 100.00% 1 / 1 5
 clearLocations 0.00% 0 / 1 0.00% 0 / 1 2
 addLocation 0.00% 0 / 1 0.00% 0 / 1 2
 [BO\Zmsdldb\Entity\Base] getId 0.00% 0 / 3 0.00% 0 / 1 6
 [BO\Zmsdldb\Entity\Base] getName 0.00% 0 / 1 0.00% 0 / 1 2
 [BO\Zmsdldb\Entity\Base] getPath 0.00% 0 / 3 0.00% 0 / 1 6
 [BO\Zmsdldb\Entity\Base] hasValidOffset 100.00% 4 / 4 100.00% 1 / 1 4
 [BO\Zmsdldb\Entity\Base] getLocale 0.00% 0 / 4 0.00% 0 / 1 6
 [BO\Zmsdldb\Entity\Base] getLink 0.00% 0 / 3 0.00% 0 / 1 6
 [BO\Zmsdldb\Entity\Base] getType 0.00% 0 / 3 0.00% 0 / 1 6
 [BO\Zmsdldb\Entity\Base] subcount 0.00% 0 / 3 0.00% 0 / 1 12
 [BO\Zmsdldb\Entity\Base] __set 0.00% 0 / 1 0.00% 0 / 1 2
 [BO\Zmsdldb\Entity\Base] offsetSet 40.00% 4 / 10 0.00% 0 / 1 7.46
 [BO\Zmsdldb\Entity\Base] doubleUnterlineToArray 0.00% 0 / 16 0.00% 0 / 1 56
13class Authority extends Base
14{
15    public function __clone()
16    {
17        if ($this['locations'] instanceof \BO\Zmsdldb\Collection\Locations) {
18            $this['locations'] = clone $this['locations'];
19        }
20    }
21
22    public static function create(mixed $name): self
23    {
24        $data = array(
25            'name' => $name,
26            'locations' => new \BO\Zmsdldb\Collection\Locations()
27        );
28        return new self($data);
29    }
30
31    /**
32     * Check if appointments are available
33     *
34     * @param String $serviceCsv
35     *            only check for this serviceCsv
36     * @param Bool $external
37     *            allow external links, default false
38     *
39     * @return Bool
40     * @psalm-api
41     */
42    public function hasAppointments($serviceCsv = null, $external = false)
43    {
44        foreach ($this['locations'] as $location) {
45            if ($location->hasAppointments($serviceCsv, $external)) {
46                return true;
47            }
48        }
49        return false;
50    }
51
52    /**
53     * Check if locations are available
54     *
55     * @return Bool
56     * @psalm-api
57     */
58    public function hasLocations()
59    {
60        return count($this['locations']) > 0 ? true : false;
61    }
62
63    /**
64     *
65     * @param String $officepath
66     *            only check for this office
67     * @return Authority
68     *
69     * @psalm-api
70     */
71    public function getLocationListByOfficePath($officepath)
72    {
73        $authority = clone $this;
74        if (count($authority['locations'])) {
75            $locations = new \BO\Zmsdldb\Collection\Locations($authority['locations']);
76            $authority['locations'] = $locations->getLocationListByOfficePath($officepath);
77        }
78        return $authority;
79    }
80
81    /**
82     *
83     * @param Int $locationId
84     *
85     * @return Bool
86     * @psalm-api
87     */
88    public function hasLocationId($locationId)
89    {
90        return $this['locations']->hasLocationId($locationId);
91    }
92
93    /**
94     * Remove a location
95     *
96     * @param Int $locationId
97     *
98     * @return self
99     * @psalm-api
100     */
101    public function removeLocation($locationId)
102    {
103        $authority = clone $this;
104        $authority['locations'] = $authority['locations']->removeLocation($locationId);
105        return $authority;
106    }
107
108    /**
109     * Check if Authority is part of ServiceList
110     *
111     * @param mixed $servicelist
112     *            only check for this service list
113     *
114     * @return bool
115     */
116    public function isInServiceList(mixed $servicelist = array())
117    {
118        foreach ($servicelist as $service) {
119            if ($service->offsetExists('authorities')) {
120                foreach ($service['authorities'] as $authority) {
121                    if ($authority['id'] == $this['id']) {
122                        return true;
123                    }
124                }
125            }
126        }
127        return false;
128    }
129
130    public function clearLocations(): void
131    {
132        $this['locations'] = new \BO\Zmsdldb\Collection\Locations();
133    }
134
135    public function addLocation(\BO\Zmsdldb\Entity\Location $location): void
136    {
137        $this['locations'][$location['id']] = $location;
138    }
139}

Inherited from BO\Zmsdldb\Entity\Base

19    public function getId(): mixed
20    {
21        if (!$this->offsetExists('id')) {
22            return false;
23        }
24        return $this['id'];
25    }
31    public function getName(): mixed
32    {
33        return $this['name'];
34    }
41    public function getPath(): mixed
42    {
43        if (!$this->offsetExists('path')) {
44            return false;
45        }
46        return $this['path'];
47    }
49    public static function hasValidOffset(mixed $item, string $index): bool
50    {
51        return (
52            (is_object($item) && $item->offsetExists($index)) ||
53            (is_array($item) && array_key_exists($index, $item))
54        );
55    }
58    public function getLocale(): mixed
59    {
60        $meta = $this['meta'];
61        if (false === static::hasValidOffset($meta, 'locale')) {
62            return false;
63        }
64        return $this['meta']['locale'];
65    }
68    public function getLink(): mixed
69    {
70        if (!$this->offsetExists('link')) {
71            return false;
72        }
73        return $this['link'];
74    }
76    public function getType(): mixed
77    {
78        if (!$this->offsetExists('type')) {
79            return false;
80        }
81        return $this['type'];
82    }
84    protected static function subcount(mixed $countable): int|null
85    {
86        if (is_array($countable) || $countable instanceof \Countable) {
87            return count($countable);
88        }
89        return null;
90    }
92    public function __set(string $name, mixed $value)
93    {
94        $this->offsetSet($name, $value);
95    }
98    public function offsetSet($index, $value): void
99    {
100        if ('data_json' == $index) {
101            $value = json_decode($value, true);
102            $this->exchangeArray($value);
103        } else {
104            /** @psalm-suppress RiskyTruthyFalsyComparison */
105            if (stripos($index, '_json')) {
106                $value = json_decode($value, true);
107                $index = str_replace('_json', '', $index);
108            }
109            /** @psalm-suppress RiskyTruthyFalsyComparison */
110            if (stripos($index, '__')) {
111                static::doubleUnterlineToArray($this, $index, $value);
112                return;
113            }
114
115            parent::offsetSet($index, $value);
116        }
117    }
123    public static function doubleUnterlineToArray(&$array, string $key, mixed $value): mixed
124    {
125        if ($key === '') {
126            return $array = $value;
127        }
128        $keys = explode('__', $key);
129
130        $numKeys = count($keys);
131        while ($numKeys > 1) {
132            $key = array_shift($keys);
133            $numKeys = count($keys);
134            if ($key === null) {
135                break;
136            }
137            if (! isset($array[$key]) || ! is_array($array[$key])) {
138                $array[$key] = [];
139            }
140
141            $array = &$array[$key];
142        }
143
144        $lastKey = array_shift($keys);
145        if ($lastKey !== null) {
146            $array[$lastKey] = $value;
147        }
148
149        return $array;
150    }