Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 49
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
Topic
0.00% covered (danger)
0.00%
0 / 49
0.00% covered (danger)
0.00%
0 / 4
156
0.00% covered (danger)
0.00%
0 / 1
 fetchList
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
6
 fetchPath
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
20
 fetchId
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
20
 readSearchResultList
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
6
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\Topic as Entity;
11use BO\Zmsdldb\MySQL\Collection\Topics as Collection;
12use BO\Zmsdldb\Elastic\Topic as Base;
13
14/** @psalm-api */
15class Topic extends Base
16{
17    #[\Override]
18    public function fetchList(): Collection
19    {
20        try {
21            $sqlArgs = [$this->locale];
22            $sql = 'SELECT data_json FROM topic WHERE locale = ?';
23
24            $topiclist = new Collection();
25
26            $stm = $this->access()->prepare($sql);
27            $stm->execute($sqlArgs);
28            $stm->fetchAll(\PDO::FETCH_FUNC, function (?string $data_json) use ($topiclist): void {
29                $topic = new Entity();
30                $topic->offsetSet('data_json', $data_json);
31
32                $topiclist[$topic['id']] = $topic;
33            });
34
35            return $topiclist;
36        } catch (\Exception $e) {
37            throw $e;
38        }
39    }
40
41    /**
42     *
43     * @return Entity|false
44     */
45    #[\Override]
46    public function fetchPath($topic_path): Entity|false
47    {
48        try {
49            $sqlArgs = [$this->locale, $topic_path];
50            $sql = 'SELECT data_json FROM topic WHERE locale = ? AND path = ?';
51
52            $stm = $this->access()->prepare($sql);
53            $stm->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, Entity::class);
54            $stm->execute($sqlArgs);
55
56            if ($stm->rowCount() === 0) {
57                return false;
58            }
59            $topic = $stm->fetch();
60            return $topic instanceof Entity ? $topic : false;
61        } catch (\Exception $e) {
62            throw $e;
63        }
64    }
65
66    /**
67     *
68     * @return Entity|false
69     */
70    #[\Override]
71    public function fetchId(mixed $itemId): Entity|false
72    {
73        try {
74            $sqlArgs = [$this->locale, (int)$itemId];
75            $sql = 'SELECT data_json FROM topic WHERE locale = ? AND id = ?';
76
77            $stm = $this->access()->prepare($sql);
78            $stm->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, Entity::class);
79            $stm->execute($sqlArgs);
80
81            if ($stm->rowCount() === 0) {
82                return false;
83            }
84            $topic = $stm->fetch();
85            return $topic instanceof Entity ? $topic : false;
86        } catch (\Exception $e) {
87            throw $e;
88        }
89    }
90
91    #[\Override]
92    public function readSearchResultList($querystring): Collection
93    {
94        try {
95            #$querystring = '+' . implode(' +', explode(' ', $querystring));
96            $sqlArgs = [$this->locale, $this->locale, $querystring];
97            $sql = "SELECT t.data_json 
98            FROM search AS se
99            LEFT JOIN topic AS t ON t.id = se.object_id AND t.locale = ?
100            WHERE 
101                se.locale = ? AND MATCH (search_value) AGAINST (? IN BOOLEAN MODE)
102                AND (search_type IN ('name', 'keywords', 'titles')) AND entity_type='topic'
103             GROUP BY se.object_id
104            ";
105            /*
106            if (!empty($service_csv)) {
107                $ids = explode(',', $service_csv);
108                $qm = array_fill(0, count($ids), '?');
109                $sql .= ' AND se.object_id IN (' . implode(', ', $qm) . ')';
110                array_push($sqlArgs, ...$ids);
111            }*/
112            #print_r($sql);exit;
113
114            $topiclist = new Collection();
115
116            $stm = $this->access()->prepare($sql);
117            $stm->execute($sqlArgs);
118            $stm->fetchAll(\PDO::FETCH_FUNC, function (?string $data_json) use ($topiclist): void {
119                $topic = new Entity();
120                $topic->offsetSet('data_json', $data_json);
121
122                $topiclist[$topic['id']] = $topic;
123            });
124
125            return $topiclist;
126        } catch (\Exception $e) {
127            throw $e;
128        }
129    }
130}