Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
98.92% |
92 / 93 |
|
90.00% |
9 / 10 |
CRAP | |
0.00% |
0 / 1 |
Provider | |
98.92% |
92 / 93 |
|
90.00% |
9 / 10 |
25 | |
0.00% |
0 / 1 |
readEntity | |
100.00% |
10 / 10 |
|
100.00% |
1 / 1 |
1 | |||
readCollection | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
2 | |||
readListBySource | |
100.00% |
12 / 12 |
|
100.00% |
1 / 1 |
4 | |||
writeEntity | |
96.15% |
25 / 26 |
|
0.00% |
0 / 1 |
6 | |||
writeListBySource | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
2 | |||
writeImportList | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
2 | |||
writeImportEntity | |
100.00% |
23 / 23 |
|
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\Provider as Entity; |
6 | use BO\Zmsentities\Collection\ProviderList as Collection; |
7 | |
8 | class Provider extends Base |
9 | { |
10 | public function readEntity($source, $providerId, $resolveReferences = 0) |
11 | { |
12 | $this->testSource($source); |
13 | $query = new Query\Provider(Query\Base::SELECT); |
14 | $query |
15 | ->setResolveLevel($resolveReferences) |
16 | ->addEntityMapping() |
17 | ->addResolvedReferences($resolveReferences) |
18 | ->addConditionProviderSource($source) |
19 | ->addConditionProviderId($providerId); |
20 | $provider = $this->fetchOne($query, new Entity()); |
21 | return $provider; |
22 | } |
23 | |
24 | /** |
25 | * @SuppressWarnings(Param) |
26 | * |
27 | */ |
28 | protected function readCollection($query) |
29 | { |
30 | $providerList = new Collection(); |
31 | $statement = $this->fetchStatement($query); |
32 | while ($providerData = $statement->fetch(\PDO::FETCH_ASSOC)) { |
33 | $entity = new Entity($query->postProcessJoins($providerData)); |
34 | $providerList->addEntity($entity); |
35 | } |
36 | return $providerList; |
37 | } |
38 | |
39 | public function readListBySource($source, $resolveReferences = 0, $isAssigned = null, $requestIdCsv = null) |
40 | { |
41 | $this->testSource($source); |
42 | $query = new Query\Provider(Query\Base::SELECT); |
43 | $query->setDistinctSelect(); |
44 | $query->setResolveLevel($resolveReferences); |
45 | $query->addEntityMapping(); |
46 | $query->addConditionProviderSource($source); |
47 | if (null !== $isAssigned) { |
48 | $query->addConditionIsAssigned($isAssigned); |
49 | } |
50 | if (null !== $requestIdCsv) { |
51 | $query->addConditionRequestCsv($requestIdCsv, $source); |
52 | } |
53 | $providerList = $this->readCollection($query); |
54 | return ($providerList->count()) ? $providerList->sortById() : $providerList; |
55 | } |
56 | |
57 | public function writeEntity(Entity $entity) |
58 | { |
59 | $this->writeDeleteEntity($entity->getId(), $entity->getSource()); |
60 | $contact = $entity->getContact(); |
61 | if (! $contact->count()) { |
62 | throw new Exception\Provider\ProviderContactMissed(); |
63 | } |
64 | $query = new Query\Provider(Query\Base::INSERT); |
65 | $additionalData = $entity->getAdditionalData() ?? []; |
66 | |
67 | $query->addValues([ |
68 | 'source' => $entity->getSource(), |
69 | 'id' => $entity->getId(), |
70 | 'name' => $entity->getName(), |
71 | 'display_name' => $additionalData && isset($additionalData['displayName']) |
72 | ? $additionalData['displayName'] |
73 | : $entity->getName(), |
74 | 'contact__city' => $contact->getProperty('city'), |
75 | 'contact__country' => $contact->getProperty('country'), |
76 | 'contact__lat' => $contact->getProperty('lat', 0), |
77 | 'contact__lon' => $contact->getProperty('lon', 0), |
78 | 'contact__postalCode' => intval($contact->getProperty('postalCode')), |
79 | 'contact__region' => $contact->getProperty('region'), |
80 | 'contact__street' => $contact->getProperty('street'), |
81 | 'contact__streetNumber' => $contact->getProperty('streetNumber', '-'), |
82 | 'link' => ($entity->getLink()) ? $entity->getLink() : '', |
83 | 'data' => ($entity->getAdditionalData()) ? json_encode($entity->getAdditionalData()) : '{}' |
84 | ]); |
85 | $this->writeItem($query); |
86 | return $this->readEntity($entity->getSource(), $entity->getId()); |
87 | } |
88 | |
89 | public function writeListBySource(\BO\Zmsentities\Source $source) |
90 | { |
91 | $this->writeDeleteListBySource($source->getSource()); |
92 | foreach ($source->getProviderList() as $provider) { |
93 | $this->writeEntity($provider); |
94 | } |
95 | return $this->readListBySource($source->getSource()); |
96 | } |
97 | |
98 | public function writeImportList($providerList, $source = 'dldb') |
99 | { |
100 | foreach ($providerList as $provider) { |
101 | $this->writeImportEntity($provider, $source); |
102 | } |
103 | return $this->readListBySource($source, 1); |
104 | } |
105 | |
106 | public function writeImportEntity($provider, $source = 'dldb') |
107 | { |
108 | if ($provider['address']['postal_code']) { |
109 | $query = new Query\Provider(Query\Base::REPLACE); |
110 | $query->addValues([ |
111 | 'source' => $source, |
112 | 'id' => $provider['id'], |
113 | 'name' => $provider['name'], |
114 | 'display_name' => $provider['displayName'] ?? $provider['name'], |
115 | 'contact__city' => $provider['address']['city'], |
116 | 'contact__country' => $provider['address']['city'], |
117 | 'contact__lat' => $provider['geo']['lat'], |
118 | 'contact__lon' => $provider['geo']['lon'], |
119 | 'contact__postalCode' => intval($provider['address']['postal_code']), |
120 | 'contact__region' => $provider['address']['city'], |
121 | 'contact__street' => $provider['address']['street'], |
122 | 'contact__streetNumber' => $provider['address']['house_number'], |
123 | 'link' => ('dldb' == $source) |
124 | ? 'https://service.berlin.de/standort/' . $provider['id'] . '/' |
125 | : ((isset($provider['link'])) ? $provider['link'] : ''), |
126 | 'data' => json_encode($provider) |
127 | ]); |
128 | $this->writeItem($query); |
129 | $provider = $this->readEntity($source, $provider['id']); |
130 | } |
131 | return $provider; |
132 | } |
133 | |
134 | public function writeDeleteEntity($providerId, $source) |
135 | { |
136 | $query = new Query\Provider(Query\Base::DELETE); |
137 | $query->addConditionProviderId($providerId); |
138 | $query->addConditionProviderSource($source); |
139 | return $this->deleteItem($query); |
140 | } |
141 | |
142 | public function writeDeleteListBySource($source) |
143 | { |
144 | $query = new Query\Provider(Query\Base::DELETE); |
145 | $query->addConditionProviderSource($source); |
146 | return $this->deleteItem($query); |
147 | } |
148 | |
149 | protected function testSource($source) |
150 | { |
151 | if (! (new Source())->readEntity($source)) { |
152 | throw new Exception\Source\UnknownDataSource(); |
153 | } |
154 | } |
155 | } |