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 | } |