Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
64.79% covered (warning)
64.79%
46 / 71
55.56% covered (warning)
55.56%
5 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 1
Service
64.79% covered (warning)
64.79%
46 / 71
55.56% covered (warning)
55.56%
5 / 9
62.23
0.00% covered (danger)
0.00%
0 / 1
 parseData
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
3
 searchAll
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
30
 fetchList
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
2
 fetchListRelated
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
12
 fetchCombinations
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 fetchLocationCsv
85.71% covered (warning)
85.71%
6 / 7
0.00% covered (danger)
0.00%
0 / 1
2.01
 fetchFromCsv
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
4
 fetchListFromTopic
93.75% covered (success)
93.75%
15 / 16
0.00% covered (danger)
0.00%
0 / 1
7.01
 readSearchResultList
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3/**
4 * @package 115Mandant
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsdldb\File;
9
10use BO\Zmsdldb\Entity\Service as Entity;
11use BO\Zmsdldb\Collection\Services as Collection;
12
13/**
14 * Common methods shared by access classes
15 */
16class Service extends Base
17{
18    #[\Override]
19    protected function parseData($data)
20    {
21        $itemList = new Collection();
22        foreach ($data['data'] as $item) {
23            $service = new Entity($item);
24            if ($service->isLocale($this->locale)) {
25                $itemList[$item['id']] = $service;
26            }
27        }
28        return $itemList;
29    }
30
31    /**
32     *
33     * @SuppressWarnings(Param)
34     * @return Collection
35     */
36    public function searchAll($querystring, $service_csv = false, $location_csv = false)
37    {
38        $serviceList = $this->fetchList($location_csv);
39        if ($querystring) {
40            $serviceList = new Collection(array_filter((array) $serviceList, function ($item) use ($querystring) {
41                $length = (3 < strlen($querystring)) ? strlen($querystring) : 3;
42                $nameMatch = preg_match('/[' . $querystring . ']{' . $length . ',}/i', $item['name']);
43                $keywordMatch = preg_match('/[' . $querystring . ']{' . $length . ',}/i', $item['meta']['keywords']);
44                return ($nameMatch || $keywordMatch);
45            }));
46        }
47        $serviceList = $serviceList->sortByName();
48        return ($location_csv) ? $serviceList->containsLocation($location_csv) : $serviceList;
49    }
50
51    /**
52     *
53     * @return Collection
54     */
55    public function fetchList($location_csv = false)
56    {
57        #echo '<pre>' . print_r($this,1) . '</pre>';exit;
58        $servicelist = $this->getItemList();
59        if ($location_csv) {
60            $servicelist = new Collection(array_filter((array) $servicelist, function ($item) use ($location_csv) {
61                $service = new Entity($item);
62                return $service->containsLocation($location_csv);
63            }));
64        }
65        return $servicelist;
66    }
67
68    /**
69     *
70     * @return Collection
71     */
72    public function fetchListRelated($service_id)
73    {
74        $service = $this->fetchId($service_id);
75        $serviceList = $this->getItemList();
76
77        $relatedList = new Collection(
78            array_filter(
79                (array) $serviceList,
80                function ($item) use ($service) {
81                    $leikaIdentItem = substr(strval($item['leika']), 0, 11);
82                    $leikaIdentService = substr(strval($service['leika']), 0, 11);
83                    return ($leikaIdentItem == $leikaIdentService && $item['id'] != $service['id']);
84                }
85            )
86        );
87        return ($relatedList) ? $relatedList : new Collection();
88    }
89
90    /**
91     *
92     * @return Collection
93     */
94    public function fetchCombinations($service_csv)
95    {
96        return $this->fetchList($this->fetchLocationCsv($service_csv));
97    }
98
99    /**
100     *
101     * @return string
102     */
103    protected function fetchLocationCsv($service_csv)
104    {
105        $locationlist = $this->access()
106            ->fromLocation()
107            ->fetchList($service_csv);
108        $locationIdList = array();
109        foreach ($locationlist as $location) {
110            $locationIdList[] = $location['id'];
111        }
112        return implode(',', $locationIdList);
113    }
114
115    /**
116     *
117     * @return Collection
118     */
119    public function fetchFromCsv($service_csv)
120    {
121        $servicelist = new Collection();
122        foreach (explode(',', $service_csv) as $service_id) {
123            $service = $this->fetchId($service_id);
124            if ($service && $service->isLocale($this->locale)) {
125                $servicelist[$service_id] = $service;
126            }
127        }
128        return $servicelist;
129    }
130
131    /**
132     * Return services by topic
133     * If topic is root, include sub-services
134     * root_topic in realations not usable because of multiple roots for one service
135     *
136     * @return Collection
137     */
138    public function fetchListFromTopic(\BO\Zmsdldb\Entity\Topic $topic)
139    {
140        $itemlist = new Collection();
141        $serviceIds = array();
142        if ($topic) {
143            $serviceIds = $topic->getServiceIds();
144            if ($topic['relation']['navi'] && isset($topic['relation']['childs'])) {
145                foreach ($topic['relation']['childs'] as $child) {
146                    $childtopic = $this->access()
147                        ->fromTopic()
148                        ->fetchPath($child['path']);
149                    if ($childtopic) {
150                        $serviceIds = array_merge($serviceIds, $childtopic->getServiceIds());
151                    }
152                }
153            }
154        }
155        if (count($serviceIds)) {
156            $servicelistCSV = implode(',', $serviceIds);
157            $servicelist = $this->fetchFromCsv($servicelistCSV);
158            return $servicelist;
159        }
160        return $itemlist->sortByName();
161    }
162
163    /**
164     *
165     * @return Collection
166     */
167    public function readSearchResultList($query, $service_csv = '')
168    {
169        $servicelist = $this->fetchCombinations($service_csv);
170        $servicelist = new Collection(array_filter((array) $servicelist, function ($item) use ($query) {
171            return false !== strpos($item['name'], $query);
172        }));
173        return $servicelist;
174    }
175}