Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
68.00% covered (warning)
68.00%
17 / 25
CRAP
89.87% covered (success)
89.87%
204 / 227
SiteController
0.00% covered (danger)
0.00%
0 / 1
68.00% covered (warning)
68.00%
17 / 25
68.26
89.87% covered (success)
89.87%
204 / 227
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 index
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 superAdminIndex
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 userIndex
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 store
0.00% covered (danger)
0.00%
0 / 1
4.13
80.00% covered (success)
80.00%
12 / 15
 show
0.00% covered (danger)
0.00%
0 / 1
2.21
62.50% covered (warning)
62.50%
5 / 8
 update
0.00% covered (danger)
0.00%
0 / 1
2.03
80.00% covered (success)
80.00%
12 / 15
 getOfferSlots
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
14 / 14
 getSponsorSites
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
8 / 8
 getAll
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 addOrRemoveOffer
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
16 / 16
 addOrRemoveSponsor
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
12 / 12
 updateState
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
14 / 14
 creationState
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
12 / 12
 createOrUpdateSiteV2
100.00% covered (success)
100.00%
1 / 1
7
100.00% covered (success)
100.00%
29 / 29
 setJsonPatternValidation
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 refreshUploads
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
10 / 10
 refreshImagesList
100.00% covered (success)
100.00%
1 / 1
8
100.00% covered (success)
100.00%
19 / 19
 refreshOtherFile
100.00% covered (success)
100.00%
1 / 1
7
100.00% covered (success)
100.00%
9 / 9
 updateRequestWithDotNotation
0.00% covered (danger)
0.00%
0 / 1
8.10
88.24% covered (success)
88.24%
15 / 17
 storeBase64toFile
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
8 / 8
 deleteFileInStorage
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 createNewOperation
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 5
 getDefaultStructure
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 getNameOperation
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
1<?php
2
3namespace Qmp\Laravel\SiteGeneratorDetail\Controllers;
4
5use Illuminate\Http\Response;
6use Illuminate\Http\Request;
7use Illuminate\Support\Facades\Log;
8use Illuminate\Support\Facades\Redis;
9use Illuminate\Support\Facades\Storage;
10use Illuminate\Support\Str;
11use Qmp\Laravel\ApiDigitalV2\Api\DigitalV2InterfaceProvider;
12use Qmp\Laravel\MicroService\Controllers\AbstractMicroServiceController;
13use Qmp\Laravel\SiteGeneratorDetail\Models\Site;
14use Qmp\Laravel\SiteGeneratorDetail\Rules\CheckSiteDetailsImagesListRule;
15use Qmp\Laravel\SiteGeneratorDetail\Rules\CheckSiteDetailsOtherFilesRule;
16
17class SiteController extends AbstractMicroServiceController
18{
19    private $jsonPatternValidation = [
20        'api' => 'required',
21        'id' => 'required',
22        'text' => 'required',
23        'config.domain.id' => 'present',
24        'config.domain.text' => 'present',
25        'config.url' => 'present',
26        'config.urlHash' => 'present',
27        'config.date.start' => 'present',
28        'config.date.end' => 'present',
29        'config.state.value' => 'required',
30        'config.redirection.badDate' => 'present',
31        'config.redirection.noRoutes' => 'present',
32        'config.redirection.alreadyOptin' => 'present',
33        'config.sponsorsList' => 'array',
34        'config.sponsorsToDisplay' => 'present|integer',
35        'template.name' => 'present',
36        'template.siteType' => 'present',
37        'template.images.list' => 'array',
38        'template.images.affectation' => 'present',
39        'template.css.file' => 'present',
40        'template.css.content' => 'present',
41        'template.js.file' => 'present',
42        'template.js.content' => 'present',
43        'template.thema' => 'present',
44        'template.textContent' => 'present',
45        'template.breadcrumbs' => 'required',
46        'template.regulationFile' => 'required',
47        'template.termsFile' => 'required',
48        'template.footer' => 'required',
49        'template.activeExternalLinks' => 'required',
50        'template.externalLinks' => 'present',
51        'routes.0.id' => 'required',
52        'routes.0.text' => 'present',
53        'routes.0.conditions.type' => 'present',
54        'routes.0.conditions.rows' => 'present',
55        'routes.0.pages.0.id' => 'required',
56        'routes.0.pages.0.type' => 'present',
57        'routes.0.pages.0.name' => 'present',
58        'routes.0.pages.0.editMode' => 'present',
59        'routes.0.pages.0.sponsors' => 'present',
60        'routes.0.pages.0.sponsorsToDisplay' => 'required',
61        'routes.0.pages.0.blocks' => 'present',
62        'welcomeMails.active' => 'present',
63        'welcomeMails.welcomeMail' => 'present',
64        'welcomeMails.object' => 'present',
65        'welcomeMails.aliasSender' => 'present',
66        'welcomeMails.title' => 'present',
67        'welcomeMails.content' => 'present',
68        'welcomeMails.image' => 'present'
69    ];
70
71    protected $operationTypeId = 1;
72
73    public function __construct(Request $request)
74    {
75        parent::__construct($request);
76    }
77
78        /**
79     * Display a listing of the resource.
80     *
81     * @return \Illuminate\Http\Response
82     */
83    public function index()
84    {
85        return response()->json($this->assignedIndex());
86    }
87
88    protected function superAdminIndex() {
89        Log::debug('super_admin');
90        return  Site::orderBy('created_at', 'desc')->get();
91    }
92
93    protected function userIndex($ids) {
94        Log::debug('user_index');
95        return Site::whereIn('id', $ids)->orderBy('created_at', 'desc')->get();
96    }
97
98    /**
99     * Store a newly created resource in storage.
100     *
101     * @param  \Illuminate\Http\Request  $request
102     * @return \Illuminate\Http\JsonResponse
103     */
104
105    public function store(Request $request)
106    {
107        $request->validate(
108            $this->setJsonPatternValidation([
109                'id' => 'required|in:0',
110                'template.images.list' => ['array', new CheckSiteDetailsImagesListRule()],
111                'template.regulationFile' => ['required', new CheckSiteDetailsOtherFilesRule()],
112                'template.termsFile' => ['required', new CheckSiteDetailsOtherFilesRule()]
113            ])
114        );
115
116        try {
117            if (!$request->has('id') || $request->id === "0") {
118                $request->merge(['id' => uniqid()]);
119            }
120
121            $request = $this->refreshUploads($request);
122
123            $site = Site::create($request->all());
124            Redis::publish('site-generator-config', json_encode(['action' => 'save-site', 'siteId' => $site->id]));
125            return response()->json(["status" => "ok", "datas" => $site->toArray()], Response::HTTP_CREATED);
126        } catch (\Exception $e) {
127            Log::debug('Unable to store entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
128            return response()->json(["status" => "ko", "message" => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
129        }
130    }
131
132    /**
133     * Display the specified resource.
134     *
135     * @param Site $site
136     * @return \Illuminate\Http\JsonResponse
137     */
138    public function show(Site $site)
139    {
140        try {
141            $this->checkOperationAssignment($site->id);
142
143            $siteArray = $site->toArray();
144            $siteArray['progress'] = $site->progress;
145            return response()->json([
146                'site_detail' => $siteArray,
147            ]);
148        } catch (\Exception $e) {
149            Log::debug('Unable to show entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
150            return response()->json(["status" => "ko", "message" => $e->getMessage()], $this->getHttpCode($e));
151        }
152    }
153
154    /**
155     * Update the specified resource in storage.
156     *
157     * @param  \Illuminate\Http\Request $request
158     * @return \Illuminate\Http\JsonResponse
159     */
160    public function update(Request $request, $site)
161    {
162        $request->validate(
163            $this->setJsonPatternValidation([
164                'id' => 'required|in:' . $site,
165                'template.images.list' => ['array', new CheckSiteDetailsImagesListRule()],
166                'template.regulationFile' => ['required', new CheckSiteDetailsOtherFilesRule()],
167                'template.termsFile' => ['required', new CheckSiteDetailsOtherFilesRule()]
168            ])
169        );
170
171        try {
172            $this->checkOperationAssignment($request->id);
173            $site = Site::findOrFail($site);
174
175            $request = $this->refreshUploads($request, $site);
176
177            $site->update($request->except('id'));
178            Redis::publish('site-generator-config', json_encode(['action' => 'save-site', 'siteId' => $site->id]));
179            return response()->json(["status" => "ok", "datas" => $site->toArray()], Response::HTTP_OK);
180        } catch (\Exception $e) {
181            Log::debug('Unable to update entity:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
182            return response()->json(["status" => "ko", "message" => $e->getMessage()], $this->getHttpCode($e));
183        }
184    }
185
186    /**
187     * Get All available offer slots
188     *
189     * @param String $id
190     * @return \Illuminate\Http\JsonResponse
191     */
192    public function getOfferSlots($id)
193    {
194        $slots = Site::pipeline()
195            ->unwind('routes')
196            ->unwind('routes.pages')
197            ->unwind('routes.pages.blocks')
198            ->match('routes.pages.blocks.value', 2)
199            ->project('{
200                "final": {
201                    "k": "$text",
202                    "v": {
203                        "siteId": "$id",
204                        "routeId": "$routes.id",
205                        "pageId": "$routes.pages.id",
206                        "blockId": "$routes.pages.blocks.id",
207                        "text": {
208                            "$concat": [
209                                "$routes.text",
210                                " / ",
211                                "$routes.pages.name",
212                                " / ",
213                                "$routes.pages.blocks.block.text"
214                            ]
215                        },
216                        "value": {
217                            "$in": [
218                                "' . $id . '",
219                                "$routes.pages.blocks.block.offers.value"
220                            ]
221                        }
222                    }
223                }
224            }')
225            ->group('$_id', '{
226                "siteTitle": {
227                    "$first": "$final.k"
228                },
229                "slots": {
230                    "$push": "$final.v"
231                }
232            }')
233            ->sort('siteTitle', 'asc')
234            ->group(null, '{
235                "final": {
236                    "$push": {
237                        "$arrayToObject": [
238                            [
239                                {
240                                    "k": "$siteTitle",
241                                    "v": "$slots"
242                                }
243                            ]
244                        ]
245                    }
246                }
247            }')
248            ->replaceRoot('{ "$mergeObjects": "$final" }')
249            ->aggregate()
250            ->first();
251
252        return response()->json($slots);
253    }
254
255
256    /**
257     * Get All Sites with sponsor id in sponsorsList
258     *
259     * @param $id
260     * @return \Illuminate\Http\JsonResponse
261     */
262    public function getSponsorSites($id)
263    {
264
265        $sites = Site::pipeline()
266            ->unwind('config.sponsorsList')
267            ->match('config.sponsorsList.id', $id)
268            ->project('{"id": "$id"}')
269            ->aggregate()
270            ->toArray();
271
272        $sites = array_column($sites, 'id');
273
274        return response()->json($sites);
275    }
276
277    /**
278     * Get all siteDetails
279     *
280     * @return \Illuminate\Http\JsonResponse
281     */
282    public function getAll()
283    {
284        return response()->json(Site::all());
285    }
286
287    /**
288     * Add or remove offer in siteDetail
289     *
290     * @param \Illuminate\Http\Request $request
291     * @param \Qmp\Laravel\SiteGeneratorDetail\Models\Site $site
292     * @return \Illuminate\Http\JsonResponse
293     */
294    public function addOrRemoveOffer(Request $request, $site)
295    {
296
297        $request->validate([
298            'action' => 'required|in:add,remove',
299            'path' => 'required',
300            'offer' => 'required'
301        ]);
302
303        try {
304            $site = Site::findOrFail($site);
305
306            $offer = $request->offer;
307            $column = 'routes.$id.pages.$id.blocks.$id.block.offers';
308
309            $options = [
310                $request->path['routeId'],
311                $request->path['pageId'],
312                $request->path['blockId']
313            ];
314
315
316            if ($request->action === 'add') {
317                $site->pushFilter($column, $offer, $options);
318            } else {
319                $offerToRemove = ['value' =>  $offer['value']];
320                $site->pullFilter($column, $offerToRemove, $options);
321            }
322
323            return response()->json(["status" => "ok", "datas" => $site->toArray()], Response::HTTP_OK);
324        } catch (\Exception $e) {
325            Log::debug('Unable to add or remove offer:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
326            return response()->json(["status" => "ko", "message" => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
327        }
328    }
329
330    /**
331     * Add or remove sponsor in siteDetail
332     *
333     * @param Request $request
334     * @param $site
335     * @return \Illuminate\Http\JsonResponse
336     */
337    public function addOrRemoveSponsor(Request $request, $site)
338    {
339        $request->validate([
340            'action' => 'required|in:add,remove',
341            'sponsor' => 'required|array'
342        ]);
343
344        try {
345            $site = Site::findOrFail($site);
346
347            $sponsor = $request->sponsor;
348
349            if ($request->action === 'add') {
350                Site::where('id', $site->id)->push('config.sponsorsList', $sponsor);
351            } else {
352                $sponsorToRemove = ['id' =>  $sponsor['id']];
353                Site::where('id', $site->id)->pull('config.sponsorsList', $sponsorToRemove);
354            }
355
356            return response()->json(["status" => "ok", "datas" => $site->toArray()], Response::HTTP_OK);
357        } catch (\Exception $e) {
358            Log::debug('Unable to add or remove sponsor:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
359            return response()->json(["status" => "ko", "message" => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
360        }
361    }
362
363    /**
364     * Update state in siteDetail
365     *
366     * @param \Illuminate\Http\Request  $request
367     * @param [Type] $id
368     * @return \Illuminate\Http\JsonResponse
369     */
370    public function updateState(Request $request, $site)
371    {
372        $request->validate([
373            'id' => 'required|in:' . $site,
374            'value.value' => 'required|in:1,2',
375            'value.text' => 'required'
376        ]);
377
378        try {
379            $site = Site::findOrFail($site);
380            $config = $site->config;
381            $config['state'] = collect($request->value)->only(['value', 'text'])->toArray();
382            $site->config = $config;
383            $site->save();
384            Redis::publish('site-generator-config', json_encode(['action' => 'update-sites', 'siteId' => $site->id]));
385            return response()->json(["status" => "ok", "datas" => $site->toArray()], Response::HTTP_OK);
386        } catch (\Exception $e) {
387            Log::debug('Unable to update state:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
388            return response()->json(["status" => "ko", "message" => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
389        }
390    }
391
392    public function creationState(Request $request, $site)
393    {
394        $request->validate([
395            'siteId' => 'required|in:' . $site,
396            'channel' => 'required',
397            'action' => 'required',
398            'message' => 'required'
399        ]);
400
401        $site = Site::findOrFail($site);
402        $site->push('creation_state', [
403            'datetime' => (new \DateTime())->format('Y-m-d H:i:s'),
404            'channel' => $request->channel,
405            'action' => $request->action,
406            'message' => $request->message,
407        ]);
408
409        return response()->json(["status" => "ok"], Response::HTTP_OK);
410    }
411
412    /**
413     * Create or update site on digital v2
414     *
415     * @param $site
416     * @return \Illuminate\Http\JsonResponse
417     */
418    public function createOrUpdateSiteV2($id)
419    {
420        try {
421
422            $site = Site::findOrFail($id);
423            $siteV2 = $site->digitalv2 ? resolve(DigitalV2InterfaceProvider::class)->updateSite($site) : resolve(DigitalV2InterfaceProvider::class)->createSite($site);
424
425            $site->setKey('digitalv2.id', strval($siteV2['id']));
426
427            foreach ($siteV2['containers'] as $container) {
428                $column = 'routes.$id.pages.$id.blocks.$id.block';
429
430                $options = [
431                    $container['routeId'],
432                    $container['pageId'],
433                    $container['blockId']
434                ];
435
436                if ($container['tag']) {
437                    $site->setKeyFilter($column, 'tag', $container['tag'], $options);
438                }
439
440                $site->setKeyFilter($column, 'id_container', strval($container['id']), $options);
441            }
442
443            foreach ($siteV2['webservices'] as $webservice) {
444                $column = 'config.sponsorsList.$id';
445
446                $options = [strval($webservice['id_offer'])];
447
448                $site->setKeyFilter($column, 'ws', $webservice['ws'], $options);
449            }
450
451            foreach ($siteV2['visuals'] as $visual) {
452                $column = 'routes.$id.pages.$id.blocks.$id.block.offers.$value';
453
454                $options = [
455                    $visual['routeId'],
456                    $visual['pageId'],
457                    $visual['blockId'],
458                    $visual['id']
459                ];
460
461                $site->setKeyFilter($column, 'url', $visual['url'], $options);
462                $site->setKeyFilter($column, 'img', $visual['img'], $options);
463                $site->setKeyFilter($column, 'planning', $visual['id_planning'], $options);
464            }
465
466            Redis::publish('site-generator-config', json_encode(['action' => 'update-sites', 'siteId' => $id]));
467            return response()->json(["status" => "ok"], Response::HTTP_OK);
468        } catch (\Exception $e) {
469            Log::debug('Unable to update digital v2 site:' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
470            return response()->json(["status" => "ko", "message" => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
471        }
472    }
473
474    /**
475     * Set JsonPatternValidation with another validation rules
476     *
477     * @param array $newValidationRules
478     * @return array
479     */
480    private function setJsonPatternValidation(array $newValidationRules)
481    {
482        return array_merge($this->jsonPatternValidation, $newValidationRules);
483    }
484
485    /**
486     * refresh uploads file in request before store or update site
487     *
488     * @param \Illuminate\Http\Request $request
489     * @param \Qmp\Laravel\SiteGeneratorDetail\Models\Site|null $site
490     * @return Request
491     */
492    private function refreshUploads(Request $request, Site $site = null)
493    {
494        $modelRegulationFile = null;
495        $modelTermsFile = null;
496
497        if ($site) {
498            $site = collect($site->toArray());
499            $modelRegulationFile = $site->dotGet('template.regulationFile');
500            $modelTermsFile = $site->dotGet('template.termsFile');
501        }
502
503        $request = $this->refreshImagesList($request);
504        $request = $this->refreshOtherFile($request, 'template.regulationFile', $modelRegulationFile);
505        $request = $this->refreshOtherFile($request, 'template.termsFile', $modelTermsFile);
506
507        return $request;
508    }
509
510    /**
511     * Refresh images list in siteDetail
512     *
513     * @param \Illuminate\Http\Request $request
514     * @return Request
515     */
516    private function refreshImagesList(Request $request)
517    {
518        $images = $request->input('template.images.list');
519        $affectations = $request->input('template.images.affectation');
520        foreach ($images as $k => $image) {
521            if (isset($image['active']) && !$image['active']) {
522                $this->deleteFileInStorage($image['name']);
523                unset($images[$k]);
524            }
525
526            if (isset($image['upload']) && isset($image['status'])) {
527                $file = $this->storeBase64toFile($request->input('id'), $image, true);
528
529                foreach ($affectations as $key => $affectation) {
530                    $affectations[$key]['value'] = $affectation['value'] === $image['upload']['filename'] ? $file['name'] : $affectation['value'];
531                }
532
533                $newImage = [
534                    'active' => true,
535                    'name' => $file['name'],
536                    'dataURL' => $file['dataURL']
537                ];
538
539                $images[$k] = $newImage;
540            }
541        }
542
543        $template = $request->input('template');
544        $template['images']['list'] = $images;
545        $template['images']['affectation'] = $affectations;
546
547        $request->merge(['template' => $template]);
548
549        return $request;
550    }
551
552    /**
553     * Refresh other files in siteDetail
554     *
555     * @param \Illuminate\Http\Request $request
556     * @param String $pathRequest
557     * @param mixed $modelFile
558     * @return Request
559     */
560    private function refreshOtherFile(Request $request, $pathRequest, $modelFile)
561    {
562        if ($request->input($pathRequest) && !preg_match('/' . $request->input('id') . '/', $request->input($pathRequest . '.name'))) {
563            $file = $this->storeBase64toFile($request->input('id'), $request->input($pathRequest));
564            if (isset($modelFile['name']) && $request->input($pathRequest) !== $modelFile) {
565                $this->deleteFileInStorage($modelFile['name']);
566            }
567
568            $otherFile = ['name' => $file['name'], 'dataURL' => $file['dataURL']];
569
570            $this->updateRequestWithDotNotation($pathRequest, null, $otherFile, $request);
571        }
572
573        if (!$request->input($pathRequest) && $modelFile) {
574            $this->deleteFileInStorage($modelFile['name']);
575        }
576
577        return $request;
578    }
579
580    private function updateRequestWithDotNotation($dotNotation, $array = null, $value = null, $request = null)
581    {
582        $path = explode('.', $dotNotation);
583        $inputName = '';
584        if ($request !== null && isset($path[0])) {
585            $inputName = $path[0];
586            $array = $request->input($inputName);
587            array_shift($path);
588        }
589
590        if (isset($path[0]) && $path[0] !== '') {
591            $key = array_shift($path);
592            if (!isset($array[$key])) {
593                $array[$key] = [];
594            }
595            $array[$key] = $this->updateRequestWithDotNotation(implode('.', $path), $array[$key], $value);
596
597            if ($request !== null) {
598                $request->merge([$inputName => $array]);
599            }
600
601            return $array;
602        } else {
603            if ($request !== null) {
604                $request->merge([$inputName => $value]);
605            }
606            return $value;
607        }
608    }
609
610    /**
611     * Store base64 datas to file in storage
612     *
613     * @param String $idSite
614     * @param array $file
615     * @param bool|null $image
616     * @return array
617     */
618    private function storeBase64toFile(string $idSite, array $file, bool $image = null)
619    {
620        $path = $image ? $file['upload']['filename'] : $file['name'];
621        $explode = explode('.', $path);
622        $ext = end($explode);
623
624        $filename = $idSite . '_' . Str::random(10) . '.' . $ext;
625
626        $explode = explode(',', $file['dataURL']);
627        $document = str_replace(' ', '+', $explode[1]);
628
629        Storage::disk('site_generator')->put($filename, base64_decode($document));
630
631        return  ['name' => $filename, 'dataURL' => str_replace(Storage::disk('public')->path(''), '/', Storage::disk('site_generator')->path($filename))];
632    }
633
634    /**
635     * Delete file in storage
636     *
637     * @param String $filename
638     */
639    private function deleteFileInStorage(string $filename)
640    {
641        Storage::disk('site_generator')->delete($filename);
642    }
643
644    public function createNewOperation(Request $request)
645    {
646        $request->merge($this->getDefaultStructure());
647
648        $response = $this->store($request);
649
650        if (Str::startsWith($response->status(), '2')) {
651            return $this->GetResponseForCreatedOperation($response->getOriginalContent()['datas']['id']);
652        }
653
654        return $response;
655    }
656
657    private function getDefaultStructure()
658    {
659        return include(__DIR__ . '/../DefaultStructure/SiteStructure.php');
660    }
661
662    public function getNameOperation($id)
663    {
664        $session = Site::findOrFail($id, ['id', 'text']);
665
666        $session = [
667            'id' => $session->id,
668            'name' => $session->text
669        ];
670
671        return response()->json($session);
672    }
673}