Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 139
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
Service
0.00% covered (danger)
0.00%
0 / 139
0.00% covered (danger)
0.00%
0 / 6
650
0.00% covered (danger)
0.00%
0 / 1
 fetchId
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
42
 fetchList
0.00% covered (danger)
0.00%
0 / 31
0.00% covered (danger)
0.00%
0 / 1
20
 fetchFromCsv
0.00% covered (danger)
0.00%
0 / 26
0.00% covered (danger)
0.00%
0 / 1
12
 fetchListRelated
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
12
 readSearchResultList
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
12
 fetchServicesForCompilation
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3/**
4 * @package ClientDldb
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsdldb\MySQL;
9
10use BO\Zmsdldb\MySQL\Entity\Service as Entity;
11use BO\Zmsdldb\MySQL\Collection\Services as Collection;
12use BO\Zmsdldb\Elastic\Service as Base
13;
14use Error;
15
16/**
17 * @SuppressWarnings(Coupling)
18 */
19class Service extends Base
20{
21    /**
22     *
23     * @return Entity\Service
24     */
25    public function fetchId($service_id)
26    {
27        try {
28            if ($service_id) {
29                $sqlArgs = [$this->locale, (int)$service_id];
30                $sql = 'SELECT data_json FROM service WHERE locale = ? AND id = ?';
31
32                $stm = $this->access()->prepare($sql);
33                $stm->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\\BO\\Zmsdldb\\MySQL\\Entity\\Service');
34                $stm->execute($sqlArgs);
35                if (!$stm || ($stm && $stm->rowCount() == 0)) {
36                    return false;
37                }
38                $service = $stm->fetch();
39                return $service;
40            }
41            return false;
42        } catch (\Exception $e) {
43            throw $e;
44        }
45    }
46
47    /**
48     *
49     * @return Collection
50     */
51    public function fetchList($location_csv = false, $mixLanguages = false)
52    {
53        #--IF(s2.id, s2.data_json, s.data_json)  AS data_json
54        # COALESCE(s2.data_json, s.data_json) AS data_json
55        try {
56            $sqlArgs = [$this->locale];
57            $where = [];
58            $join = [];
59            $groupBy = '';
60            if (false === $mixLanguages) {
61                $where[] = 's.locale = ?';
62                $sql = 'SELECT data_json FROM service AS s ';
63            } else {
64                $where[] = "s.locale='de'";
65                $sql = "SELECT 
66                COALESCE(s2.data_json, s.data_json) AS data_json
67                FROM service AS s
68                LEFT JOIN service AS s2 ON s2.id = s.id AND s2.locale = ?
69                ";
70            }
71
72            if (!empty($location_csv)) {
73                #$sqlArgs[] = $this->locale;
74                $ids = explode(',', $location_csv);
75                $questionMarks = array_fill(0, count($ids), '?');
76                $join[] = 'LEFT JOIN location_service AS ls ON ls.service_id = s.id';# AND ls.locale = ?';
77
78                $where[] = "ls.location_id IN (" . implode(', ', $questionMarks) . ")";
79                $groupBy = 'GROUP BY s.id';
80                array_push($sqlArgs, ...$ids);
81            }
82            $sql .= " " . implode(' ', $join);
83            $sql .= " WHERE " . implode(' AND ', $where);
84            $sql .= " " . $groupBy;
85
86            #echo '<pre>' . print_r([$sql, $sqlArgs],1) . '</pre>';exit;
87
88            $serviceList = new Collection();
89
90            $stm = $this->access()->prepare($sql);
91            $stm->execute($sqlArgs);
92            $stm->fetchAll(\PDO::FETCH_FUNC, function ($data_json) use ($serviceList) {
93                $service = new \BO\Zmsdldb\MySQL\Entity\Service();
94                $service->offsetSet('data_json', $data_json);
95
96                $serviceList[$service['id']] = $service;
97            });
98
99            return $serviceList;
100        } catch (\Exception $e) {
101            throw $e;
102        }
103    }
104
105    /**
106     *
107     * @return Collection\Services
108     */
109    public function fetchFromCsv($service_csv, $mixLanguages = false)
110    {
111        try {
112            $sqlArgs = [$this->locale];
113            $where = [];
114            $join = [];
115
116            if (false === $mixLanguages) {
117                $where[] = 's.locale = ?';
118                $sql = 'SELECT data_json FROM service AS s ';
119            } else {
120                $where[] = "s.locale='de'";
121                $sql = "SELECT 
122                COALESCE(s2.data_json, s.data_json) AS data_json
123                FROM service AS s
124                LEFT JOIN service AS s2 ON s2.id = s.id AND s2.locale = ?
125                ";
126            }
127
128            $ids = explode(',', $service_csv);
129            $questionMarks = array_fill(0, count($ids), '?');
130
131            $where[] = 's.id IN (' . implode(', ', $questionMarks) . ')';
132            array_push($sqlArgs, ...$ids);
133
134            $sql .= " " . implode(' ', $join);
135            $sql .= " WHERE " . implode(' AND ', $where);
136
137            $serviceList = new Collection();
138
139            $stm = $this->access()->prepare($sql);
140            $stm->execute($sqlArgs);
141            $stm->fetchAll(\PDO::FETCH_FUNC, function ($data_json) use ($serviceList) {
142                $service = new \BO\Zmsdldb\MySQL\Entity\Service();
143                $service->offsetSet('data_json', $data_json);
144
145                $serviceList[$service['id']] = $service;
146            });
147
148            return $serviceList;
149        } catch (\Exception $e) {
150            throw $e;
151        }
152    }
153
154    public function fetchListRelated($service_id)
155    {
156        try {
157            $service = $this->fetchId($service_id);
158            $serviceList = new Collection();
159            if (!$service) {
160                return $serviceList;
161            }
162            $leika = str_split(substr(strval($service['leika']), 0, 11));
163            $leika[0] = '_';
164            $leika[1] = '_';
165
166            $leika = implode($leika);
167
168            $sqlArgs = [$this->locale, $service['leika'], $leika . '%'];
169
170            $sql = 'SELECT data_json FROM service WHERE locale = ? AND leika != ? AND leika LIKE ?';
171
172            $serviceList = new Collection();
173
174            $stm = $this->access()->prepare($sql);
175            $stm->execute($sqlArgs);
176            $stm->fetchAll(\PDO::FETCH_FUNC, function ($data_json) use ($serviceList) {
177                $service = new \BO\Zmsdldb\MySQL\Entity\Service();
178                $service->offsetSet('data_json', $data_json);
179
180                $serviceList[$service['id']] = $service;
181            });
182
183            return $serviceList;
184        } catch (\Exception $e) {
185            throw $e;
186        }
187    }
188
189    public function readSearchResultList($query, $service_csv = null)
190    {
191        try {
192            #$query = '+' . implode(' +', explode(' ', $query));
193            $sqlArgs = [$this->locale, $this->locale, $query];
194            $sql = "SELECT s.data_json 
195            FROM search AS se
196            LEFT JOIN service AS s ON s.id = se.object_id AND s.locale = ?
197            WHERE 
198                se.locale = ? AND MATCH (search_value) AGAINST (? IN BOOLEAN MODE)
199                AND (search_type IN ('name', 'keywords')) AND entity_type='service'
200            GROUP BY se.object_id
201            ";
202
203            if (!empty($service_csv)) {
204                $ids = explode(',', $service_csv);
205                $questionMarks = array_fill(0, count($ids), '?');
206                $sql .= ' AND se.object_id IN (' . implode(', ', $questionMarks) . ')';
207                array_push($sqlArgs, ...$ids);
208            }
209            #print_r($sql);exit;
210
211            $serviceList = new Collection();
212
213            $stm = $this->access()->prepare($sql);
214            $stm->execute($sqlArgs);
215            $stm->fetchAll(\PDO::FETCH_FUNC, function ($data_json) use ($serviceList) {
216                $service = new \BO\Zmsdldb\MySQL\Entity\Service();
217                $service->offsetSet('data_json', $data_json);
218
219                $serviceList[$service['id']] = $service;
220            });
221
222            return $serviceList;
223        } catch (\Exception $e) {
224            throw $e;
225        }
226    }
227
228    public function fetchServicesForCompilation($authoritys = [], $locations = [], $services = [])
229    {
230        try {
231            $sqlArgs = [$this->locale];
232
233            $sql = "SELECT 
234                s.data_json
235            FROM service AS s
236            ";
237            $where = ['s.locale = ?'];
238            $join = [];
239
240            if (!empty($authoritys)) {
241                $sqlArgs[] = $this->locale;
242                $join[] = 'authority_service AS a_s ON a_s.service_id = s.id AND a_s.locale = ?';
243                $where[] = 'a_s.authority_id IN (' . implode(',', $authoritys) . ')';
244            }
245            if (!empty($locations)) {
246                $sqlArgs[] = $this->locale;
247                $join[] = 'location_service AS ls ON ls.service_id = s.id AND ls.locale = ?';
248                $where[] = 'ls.location_id IN (' . implode(',', $locations) . ')';
249            }
250
251            if (!empty($services)) {
252                $where[] = 's.id IN (' . implode(',', $services) . ')';
253            }
254            if (!empty($join)) {
255                $sql .= ' LEFT JOIN ' . implode(' LEFT JOIN ', $join);
256            }
257            $sql .= ' WHERE ' . implode(' AND ', $where);
258
259            $serviceList = new Collection();
260
261            $stm = $this->access()->prepare($sql);
262            $stm->execute($sqlArgs);
263            $stm->fetchAll(\PDO::FETCH_FUNC, function ($data_json) use ($serviceList) {
264                $service = new \BO\Zmsdldb\MySQL\Entity\Service();
265                $service->offsetSet('data_json', $data_json);
266
267                $serviceList[$service['id']] = $service;
268            });
269
270            return $serviceList;
271        } catch (\Exception $e) {
272            throw $e;
273        }
274    }
275}