Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
111 / 111 |
|
100.00% |
14 / 14 |
CRAP | |
100.00% |
1 / 1 |
Request | |
100.00% |
111 / 111 |
|
100.00% |
14 / 14 |
30 | |
100.00% |
1 / 1 |
readEntity | |
100.00% |
12 / 12 |
|
100.00% |
1 / 1 |
2 | |||
readCollection | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
2 | |||
readRequestByProcessId | |
100.00% |
8 / 8 |
|
100.00% |
1 / 1 |
2 | |||
readRequestsByIds | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
1 | |||
readRequestByArchiveId | |
100.00% |
8 / 8 |
|
100.00% |
1 / 1 |
2 | |||
readListByProvider | |
100.00% |
12 / 12 |
|
100.00% |
1 / 1 |
2 | |||
readListBySource | |
100.00% |
7 / 7 |
|
100.00% |
1 / 1 |
2 | |||
readListByCluster | |
100.00% |
14 / 14 |
|
100.00% |
1 / 1 |
5 | |||
writeEntity | |
100.00% |
13 / 13 |
|
100.00% |
1 / 1 |
2 | |||
writeListBySource | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
2 | |||
writeImportEntity | |
100.00% |
13 / 13 |
|
100.00% |
1 / 1 |
4 | |||
writeDeleteEntity | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
1 | |||
writeDeleteListBySource | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
1 | |||
testSource | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace BO\Zmsdb; |
4 | |
5 | use BO\Zmsentities\Request as Entity; |
6 | use BO\Zmsentities\Collection\RequestList as Collection; |
7 | |
8 | /** |
9 | * |
10 | * @SuppressWarnings(TooManyPublicMethods) |
11 | */ |
12 | class Request extends Base |
13 | { |
14 | public function readEntity($source, $requestId, $resolveReferences = 0) |
15 | { |
16 | $this->testSource($source); |
17 | $query = new Query\Request(Query\Base::SELECT); |
18 | $query |
19 | ->setResolveLevel($resolveReferences) |
20 | ->addEntityMapping() |
21 | ->addResolvedReferences($resolveReferences) |
22 | ->addConditionRequestSource($source) |
23 | ->addConditionRequestId($requestId); |
24 | $request = $this->fetchOne($query, new Entity()); |
25 | if (! $request->hasId()) { |
26 | throw new Exception\Request\RequestNotFound("Could not find request with ID $source/$requestId"); |
27 | } |
28 | return $request; |
29 | } |
30 | |
31 | /** |
32 | * @SuppressWarnings(Param) |
33 | * |
34 | */ |
35 | protected function readCollection($query) |
36 | { |
37 | $requestList = new Collection(); |
38 | $statement = $this->fetchStatement($query); |
39 | while ($requestData = $statement->fetch(\PDO::FETCH_ASSOC)) { |
40 | $request = new Entity($query->postProcessJoins($requestData)); |
41 | $requestList->addEntity($request); |
42 | } |
43 | return $requestList; |
44 | } |
45 | |
46 | public function readRequestByProcessId($processId, $resolveReferences = 0) |
47 | { |
48 | $collection = new Collection(); |
49 | if ($processId) { |
50 | $query = new Query\Request(Query\Base::SELECT); |
51 | $query->setResolveLevel($resolveReferences); |
52 | $query->addConditionProcessId($processId); |
53 | $query->addEntityMapping(); |
54 | $collection = $this->readCollection($query); |
55 | } |
56 | return $collection; |
57 | } |
58 | |
59 | public function readRequestsByIds($ids, $resolveReferences = 0) |
60 | { |
61 | $query = new Query\Request(Query\Base::SELECT); |
62 | $query->setResolveLevel($resolveReferences); |
63 | $query->addConditionIds($ids); |
64 | $query->addEntityMapping(); |
65 | |
66 | return $this->readCollection($query); |
67 | } |
68 | |
69 | public function readRequestByArchiveId($archiveId, $resolveReferences = 0) |
70 | { |
71 | $collection = new Collection(); |
72 | if ($archiveId) { |
73 | $query = new Query\Request(Query\Base::SELECT); |
74 | $query->setResolveLevel($resolveReferences); |
75 | $query->addConditionArchiveId($archiveId); |
76 | $query->addEntityMapping(); |
77 | $collection = $this->readCollection($query); |
78 | } |
79 | return $collection; |
80 | } |
81 | |
82 | public function readListByProvider($source, $providerId, $resolveReferences = 0) |
83 | { |
84 | $this->testSource($source); |
85 | $query = new Query\Request(Query\Base::SELECT); |
86 | $requestRelationQuery = new RequestRelation(); |
87 | $query->setResolveLevel($resolveReferences); |
88 | $query->addConditionProvider($providerId, $source); |
89 | $query->addConditionRequestSource($source); |
90 | $query->addEntityMapping(); |
91 | $requestList = $this->readCollection($query); |
92 | foreach ($requestList as $request) { |
93 | $requestRelation = $requestRelationQuery->readEntity($request->getId(), $providerId); |
94 | $request['timeSlotCount'] = $requestRelation->getSlotCount(); |
95 | } |
96 | return $requestList; |
97 | } |
98 | |
99 | public function readListBySource($source, $resolveReferences = 0) |
100 | { |
101 | $this->testSource($source); |
102 | $query = new Query\Request(Query\Base::SELECT); |
103 | $query->setResolveLevel($resolveReferences); |
104 | $query->addConditionRequestSource($source); |
105 | $query->addEntityMapping(); |
106 | $requestList = $this->readCollection($query); |
107 | return ($requestList->count()) ? $requestList->sortByCustomKey('id') : $requestList; |
108 | } |
109 | |
110 | public function readListByCluster(\BO\Zmsentities\Cluster $cluster, $resolveReferences = 0) |
111 | { |
112 | $intersectList = array(); |
113 | if ($cluster->scopes->count()) { |
114 | foreach ($cluster->scopes as $scope) { |
115 | $requestsByProvider = $this |
116 | ->readListByProvider( |
117 | $scope->provider['source'], |
118 | $scope->getProviderId(), |
119 | $resolveReferences - 1 |
120 | )->getArrayCopy(); |
121 | if (count($requestsByProvider)) { |
122 | $intersectList = (count($intersectList)) ? |
123 | array_values(array_intersect($intersectList, $requestsByProvider)) : $requestsByProvider; |
124 | } |
125 | } |
126 | } |
127 | $requestList = new Collection($intersectList); |
128 | return $requestList; |
129 | } |
130 | |
131 | public function writeEntity(Entity $entity) |
132 | { |
133 | $additionalData = ($entity->getAdditionalData()) ? json_encode($entity->getAdditionalData()) : '{}'; |
134 | $this->writeDeleteEntity($entity->getId(), $entity->getSource()); |
135 | $query = new Query\Request(Query\Base::INSERT); |
136 | $query->addValues([ |
137 | 'source' => $entity->getSource(), |
138 | 'id' => $entity->getId(), |
139 | 'name' => $entity->getName(), |
140 | 'group' => $entity->getGroup(), |
141 | 'link' => $entity->getLink(), |
142 | 'data' => $additionalData |
143 | ]); |
144 | $this->writeItem($query); |
145 | return $this->readEntity($entity->getSource(), $entity->getId()); |
146 | } |
147 | |
148 | public function writeListBySource(\BO\Zmsentities\Source $source) |
149 | { |
150 | $this->writeDeleteListBySource($source->getSource()); |
151 | foreach ($source->getRequestList() as $request) { |
152 | $this->writeEntity($request); |
153 | } |
154 | return $this->readListBySource($source->getSource()); |
155 | } |
156 | |
157 | public function writeImportEntity($request, $source = 'dldb') |
158 | { |
159 | $query = new Query\Request(Query\Base::REPLACE); |
160 | $query->addValues([ |
161 | 'source' => $source, |
162 | 'id' => $request['id'], |
163 | 'name' => $request['name'], |
164 | 'group' => (isset($request['group'])) ? $request['group'] : 'Sonstiges', |
165 | 'link' => ('dldb' == $source) |
166 | ? 'https://service.berlin.de/dienstleistung/' . $request['id'] . '/' |
167 | : ((isset($request['link'])) ? $request['link'] : ''), |
168 | 'data' => json_encode($request) |
169 | ]); |
170 | $this->writeItem($query); |
171 | return $this->readEntity($source, $request['id']); |
172 | } |
173 | |
174 | public function writeDeleteEntity($requestId, $source) |
175 | { |
176 | $query = new Query\Request(Query\Base::DELETE); |
177 | $query->addConditionRequestId($requestId); |
178 | $query->addConditionRequestSource($source); |
179 | return $this->deleteItem($query); |
180 | } |
181 | |
182 | public function writeDeleteListBySource($source) |
183 | { |
184 | $query = new Query\Request(Query\Base::DELETE); |
185 | $query->addConditionRequestSource($source); |
186 | return $this->deleteItem($query); |
187 | } |
188 | |
189 | protected function testSource($source) |
190 | { |
191 | if (! (new Source())->readEntity($source)) { |
192 | throw new Exception\Source\UnknownDataSource(); |
193 | } |
194 | } |
195 | } |