Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
93 / 93 |
Entities | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
22 | |
100.00% |
93 / 93 |
store | |
100.00% |
1 / 1 |
6 | |
100.00% |
32 / 32 |
|||
update | |
100.00% |
1 / 1 |
12 | |
100.00% |
51 / 51 |
|||
saveLogoTemplating | |
100.00% |
1 / 1 |
4 | |
100.00% |
10 / 10 |
1 | <?php |
2 | |
3 | namespace Qmp\Laravel\Entities\Services\Entities; |
4 | |
5 | use App\User; |
6 | use Illuminate\Support\Facades\Storage; |
7 | use Illuminate\Support\Str; |
8 | use Qmp\Laravel\Entities\Models\Entity; |
9 | use Qmp\Laravel\Entities\Services\Campaigns\Campaigns; |
10 | use Qmp\Laravel\Entities\Services\ExternalUsers\ExternalUsers; |
11 | use Qmp\Laravel\Entities\Services\Ovh\Ovh; |
12 | |
13 | class Entities |
14 | { |
15 | /** |
16 | * @param array $validatedData |
17 | * @return Entity |
18 | * @throws \Exception |
19 | */ |
20 | public function store(array $validatedData): Entity |
21 | { |
22 | $validatedData = array_merge(['id' => uniqid()], $validatedData); |
23 | |
24 | // Save image templating |
25 | $validatedData = $this->saveLogoTemplating($validatedData); |
26 | |
27 | $entity = Entity::create(collect($validatedData)->except('config', 'campaigns')->toArray()); |
28 | |
29 | //Manage internal users |
30 | foreach ($entity->users as $id) { |
31 | $user = User::findOrFail($id); |
32 | $user->entities = array_merge($user->entities, [$entity->id]); |
33 | $user->save(); |
34 | } |
35 | |
36 | //Manage Campaigns |
37 | if(!empty($validatedData['campaigns'])) { |
38 | Campaigns::manageEntityCampaigns([ |
39 | 'id' => $entity->id, |
40 | 'add' => $validatedData['campaigns'], |
41 | 'delete' => [] |
42 | ]); |
43 | } |
44 | |
45 | $configs = collect($validatedData['config']); |
46 | // Manage classic config |
47 | $entity->config = array_values($configs->filter(function ($config){ |
48 | return $config['id'] !== 4; |
49 | })->toArray()); |
50 | |
51 | $entity->oldConfig = $validatedData['oldConfig']; |
52 | |
53 | //Manage external front |
54 | $externalFrontConfig = $configs->filter(function ($config){ |
55 | return $config['id'] === 4; |
56 | })->first(); |
57 | |
58 | if($externalFrontConfig) { |
59 | if($externalFrontConfig['url']) { |
60 | Ovh::manageOvhRecord($externalFrontConfig['url']); |
61 | } |
62 | |
63 | $externalUsers = $externalFrontConfig['external-users'] ? ExternalUsers::handleExternalUsers($externalFrontConfig['external-users']) : collect(); |
64 | |
65 | ExternalUsers::manageExternalUsersEntities([ |
66 | 'id' => $entity->id, |
67 | 'add' => $externalUsers->pluck('id')->toArray(), |
68 | 'delete' => [] |
69 | ]); |
70 | |
71 | $externalFrontConfig['external-users'] = $externalUsers->toArray(); |
72 | |
73 | /* $entity->config = array_values($configs->filter(function ($config){ |
74 | return $config['id'] !== 4; |
75 | })->push($externalFrontConfig)->toArray()); */ |
76 | |
77 | $entityConfig = $entity->config; |
78 | $entityConfig[] = $externalFrontConfig; |
79 | |
80 | $entity->config = $entityConfig; |
81 | } |
82 | |
83 | $entity->save(); |
84 | |
85 | return $entity; |
86 | } |
87 | |
88 | /** |
89 | * @param array $validatedData |
90 | * @param $id |
91 | * @return \Qmp\Laravel\Entities\Models\Entity |
92 | * @throws \Exception |
93 | */ |
94 | public function update(array $validatedData, $id): Entity |
95 | { |
96 | |
97 | // Save image templating |
98 | $validatedData = $this->saveLogoTemplating($validatedData); |
99 | |
100 | $entity = Entity::findOrFail($id); |
101 | |
102 | //Manage internal users |
103 | $deletedUsers = array_diff($entity->users, $validatedData['users']); |
104 | $addedUsers = array_diff($validatedData['users'], $entity->users); |
105 | |
106 | foreach ($addedUsers as $id) { |
107 | $user = User::findOrFail($id); |
108 | $user->entities = array_merge($user->entities, [$entity->id]); |
109 | $user->save(); |
110 | } |
111 | |
112 | foreach ($deletedUsers as $id) { |
113 | $user = User::findOrFail($id); |
114 | $entities = $user->entities; |
115 | if (($key = array_search($entity->id, $entities)) !== false) { |
116 | unset($entities[$key]); |
117 | } |
118 | $user->entities = $entities; |
119 | $user->save(); |
120 | } |
121 | |
122 | //Manage Campaigns |
123 | $campaigns = Campaigns::getEntityCampaigns($entity); |
124 | |
125 | $add = array_diff($validatedData['campaigns'], $campaigns); |
126 | $delete = array_diff($campaigns, $validatedData['campaigns']); |
127 | |
128 | if(!empty($add) || !empty($delete)) { |
129 | Campaigns::manageEntityCampaigns([ |
130 | 'id' => $entity->id, |
131 | 'add' => $add, |
132 | 'delete' => $delete |
133 | ]); |
134 | } |
135 | |
136 | //Manage external front config |
137 | $configs = collect($validatedData['config']); |
138 | $externalFrontConfig = $configs->filter(function ($config){ |
139 | return $config['id'] === 4; |
140 | })->first(); |
141 | |
142 | if($externalFrontConfig) { |
143 | if (Str::startsWith($externalFrontConfig['url'], 'http')) { |
144 | $externalFrontConfig['url'] = parse_url($externalFrontConfig['url'], PHP_URL_HOST); |
145 | } |
146 | |
147 | if($externalFrontConfig['url'] != $entity->externalfronturl) { |
148 | Ovh::manageOvhRecord($externalFrontConfig['url']); |
149 | } |
150 | |
151 | $externalUsers = $externalFrontConfig['external-users'] ? ExternalUsers::handleExternalUsers($externalFrontConfig['external-users']) : collect(); |
152 | |
153 | $externalUsersDb = collect($entity->externalusers)->pluck('id')->toArray(); |
154 | $externalUsersRequest = $externalUsers->pluck('id')->toArray(); |
155 | |
156 | $add = array_diff($externalUsersRequest, $externalUsersDb); |
157 | $delete = array_diff($externalUsersDb, $externalUsersRequest); |
158 | |
159 | if(!empty($add) || !empty($delete)) { |
160 | ExternalUsers::manageExternalUsersEntities([ |
161 | 'id' => $entity->id, |
162 | 'add' => $add, |
163 | 'delete' => $delete |
164 | ]); |
165 | } |
166 | |
167 | $externalFrontConfig['external-users'] = $externalUsers->toArray(); |
168 | |
169 | $validatedData['config'] = array_values($configs->filter(function ($config){ |
170 | return $config['id'] !== 4; |
171 | })->push($externalFrontConfig)->toArray()); |
172 | } else { |
173 | ExternalUsers::manageExternalUsersEntities([ |
174 | 'id' => $entity->id, |
175 | 'add' =>[], |
176 | 'delete' => collect($entity->externalusers)->pluck('id')->toArray() |
177 | ]); |
178 | } |
179 | |
180 | $entity->update(collect($validatedData)->except('campaigns')->toArray()); |
181 | |
182 | return $entity->refresh(); |
183 | |
184 | } |
185 | |
186 | /** |
187 | * @param array $data |
188 | * @return array |
189 | */ |
190 | protected function saveLogoTemplating(array $data): array |
191 | { |
192 | if (isset($data['templating']['logoImgToSave']) && strlen($data['templating']['logoImgToSave']) > 0) { |
193 | $ext = explode('/', mime_content_type($data['templating']['logoImgToSave']))[1]; |
194 | |
195 | $filename = '/logo/' . Str::random(32) . '.' . $ext; |
196 | |
197 | $explode = explode(',', $data['templating']['logoImgToSave']); |
198 | $document = str_replace(' ', '+', $explode[1]); |
199 | |
200 | Storage::disk('public_images')->put($filename, base64_decode($document)); |
201 | |
202 | $data['templating']['logo'] = Storage::disk('public_images')->url($filename); |
203 | } |
204 | |
205 | if (isset($data['templating'])) { |
206 | unset($data['templating']['logoImgToSave']); |
207 | } |
208 | |
209 | return $data; |
210 | } |
211 | } |