diff --git a/app/Http/Controllers/CommonController.php b/app/Http/Controllers/CommonController.php index 6a766d3..da7e301 100644 --- a/app/Http/Controllers/CommonController.php +++ b/app/Http/Controllers/CommonController.php @@ -39,7 +39,8 @@ class CommonController extends Controller })->with('sujet')->get(); return view('home')->with([ - 'sujets' => $sujets, 'recherches' => $recherches, + 'sujets' => $sujets, + 'recherches' => $recherches, 'dossiers' => $dossiers ]); } @@ -54,8 +55,10 @@ class CommonController extends Controller { /** @var \App\Models\User $user */ $user = auth()->user(); - Mail::to(env('MAIL_ADMIN_ADDRESS', "informatique.internet@ldc.fr")) - ->send(new ContactMail(ContactType::from($request->type), $request->url, $request->message, $user)); + foreach (config('mail.contactsList.admin') as $mail) { + Mail::to($mail) + ->send(new ContactMail(ContactType::from($request->type), $request->url, $request->message, $user)); + } return response()->json(['status' => 'OK']); } diff --git a/app/Http/Controllers/MediaController.php b/app/Http/Controllers/MediaController.php index 1f71574..2ff8127 100644 --- a/app/Http/Controllers/MediaController.php +++ b/app/Http/Controllers/MediaController.php @@ -102,7 +102,7 @@ class MediaController extends Controller $textSearch, $filters, intval(Dossier::where('id', $dossier_id)->exists() ? - $dossier_id : (in_array($dossier_id, [-1, 0]) ? $dossier_id : -1)) + $dossier_id : (in_array($dossier_id, [-1, 0]) ? $dossier_id : -1)) ); } @@ -124,7 +124,7 @@ class MediaController extends Controller 'etiquettes' => $etiquettes, 'societes' => $societes, 'marques' => $marques, - 'currentFolder' => $dossier_id, + 'currentFolder' => Dossier::query()->where('id', $dossier_id)->first() ?? $dossier_id, 'currentSujet' => optional($sujet)->codeSujet ?? \optional($sujets->first())->codeSujet, 'currentFilters' => json_encode($filters), 'paniers' => $paniers, @@ -236,8 +236,8 @@ class MediaController extends Controller $response['isDepot'] = $isDepot; $response['isCAQuery'] = $searchText && - strpos($searchText, '=') !== false && - \strval(collect(explode('=', $searchText))->get(0)) === 'ca'; + strpos($searchText, '=') !== false && + \strval(collect(explode('=', $searchText))->get(0)) === 'ca'; $response['role'] = $user->role; @@ -262,7 +262,7 @@ class MediaController extends Controller /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Media> */ $mediaList = Media::whereIn('id', collect($request->mediaList)->pluck('id')) - ->where('isLocked', false)->get(); + ->where('isLocked', false)->get(); $destinationDossierId = \intval($request->dossier_id); @@ -346,7 +346,7 @@ class MediaController extends Controller }); } catch (ModelNotFoundException | \RuntimeException $e) { return response()->json($e->getMessage(), 500); - }//end try + } //end try } /** @@ -416,7 +416,7 @@ class MediaController extends Controller 'status' => false, 'error' => trans('Une erreur est survenue veuillez réessayer') ]); - }//end try + } //end try } /** @@ -446,19 +446,6 @@ class MediaController extends Controller $clonedMedia = $media->replicate(); - $media->articles->map(function (Article $article) use ($clonedMedia) { - $clonedMedia->articles()->attach($article); - }); - $media->marques->map(function (Marque $marque) use ($clonedMedia) { - $clonedMedia->marques()->attach($marque); - }); - $media->societes->map(function (Societe $societe) use ($clonedMedia) { - $clonedMedia->societes()->attach($societe); - }); - $media->tags->map(function (Tag $tag) use ($clonedMedia) { - $clonedMedia->tags()->attach($tag); - }); - /** @var \Illuminate\Filesystem\FilesystemAdapter */ $storage = Storage::disk('media'); @@ -498,11 +485,27 @@ class MediaController extends Controller // ---- Creation des vignettes en lien avec le sujet du média $clonedMedia->createSubjectThumbnails(); + $clonedMedia->isDuplicate = true; + $clonedMedia->saveOrFail(); + // Manage relations after the model has been saved. + $media->articles->map(function (Article $article) use ($clonedMedia) { + $clonedMedia->articles()->attach($article); + }); + $media->marques->map(function (Marque $marque) use ($clonedMedia) { + $clonedMedia->marques()->attach($marque); + }); + $media->societes->map(function (Societe $societe) use ($clonedMedia) { + $clonedMedia->societes()->attach($societe); + }); + $media->tags->map(function (Tag $tag) use ($clonedMedia) { + $clonedMedia->tags()->attach($tag); + }); + /** @throws \RuntimeException */ - $clonedMedia->addToElasticSearch(); + $clonedMedia->addToIndex(); // * Get props inserted by DB. $clonedMedia->refresh(); @@ -751,8 +754,8 @@ class MediaController extends Controller $history = Historique::whereHas('media', function ($q) use ($media) { $q->whereId($media->id); })->with('user') - ->orderBy('created_date', 'DESC') - ->get(); + ->orderBy('created_date', 'DESC') + ->get(); return \response()->json([ 'history' => $history, 'vignettes' => $this->getVignettesByMedia($media) @@ -1062,9 +1065,9 @@ class MediaController extends Controller ]; $sys_extension = in_array($media->extension, [ - MediaExtension::pdf, - MediaExtension::ai, - MediaExtension::psd + MediaExtension::pdf, + MediaExtension::ai, + MediaExtension::psd ]) ? MediaExtension::png : $media->extension->value; $vignettes['preview'] = [ diff --git a/app/Http/Controllers/PanierController.php b/app/Http/Controllers/PanierController.php index 0788fbf..1b44948 100644 --- a/app/Http/Controllers/PanierController.php +++ b/app/Http/Controllers/PanierController.php @@ -68,6 +68,8 @@ class PanierController extends Controller $request->mediaList )); + Media::flushQueryCache(); + return response()->json(); } @@ -151,7 +153,7 @@ class PanierController extends Controller /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Format> $formats */ $formats = Format::withoutGlobalScope('App\Scopes\SystemScope') - ->where('system', true)->get(); + ->where('system', true)->get(); return view('panier.show')->with([ 'panier' => $panier, 'formats' => $formats, diff --git a/app/Http/Controllers/UploadController.php b/app/Http/Controllers/UploadController.php index c6954c5..9a2b991 100644 --- a/app/Http/Controllers/UploadController.php +++ b/app/Http/Controllers/UploadController.php @@ -15,6 +15,7 @@ use App\Models\Sujet; use App\Models\TypeMedia; use App\Models\User; use App\Traits\Http\HandlesMedia; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Http\UploadedFile; @@ -97,7 +98,7 @@ class UploadController extends Controller // 400 instead of 422 is for resumablejs to handle properly. return \response()->json($e->errors(), 400); } - }//end if + } //end if // We are in chunk mode, lets send the current progress. /** @var AbstractHandler $handler */ @@ -143,9 +144,9 @@ class UploadController extends Controller $this->validateUploadedFile($uplodedFile); /** @var \App\Models\Media */ - $media = Media::whereId($request->media_id) - ->whereHas('sujet', function ($q) use ($sujet) { - $q->whereId($sujet->id); + $media = Media::query()->whereId($request->media_id) + ->whereHas('sujet', function (Builder $q) use ($sujet) { + $q->where('codeSujet', $sujet->codeSujet); })->whereHas('dossier', function ($q) use ($dossier) { $q->whereId($dossier->id); })->firstOrNew(); @@ -156,7 +157,7 @@ class UploadController extends Controller // 400 instead of 422 is for resumablejs to handle properly. return \response()->json($e->errors(), 400); } - }//end if + } //end if // We are in chunk mode, lets send the current progress. /** @var AbstractHandler $handler */ @@ -341,6 +342,8 @@ class UploadController extends Controller $media->saveOrFail(); + Media::flushQueryCache(); + // * Get props inserted by DB. return response()->json($media->refresh()); }); diff --git a/app/Models/Media.php b/app/Models/Media.php index 41e49eb..fb02c03 100644 --- a/app/Models/Media.php +++ b/app/Models/Media.php @@ -39,14 +39,27 @@ class Media extends Model */ public $cacheDriver = 'redis'; + /** + * Is the model a duplicate of another (only true before we save it in database) + * + * @var boolean + */ + public $isDuplicate = false; + /** * The relations to eager load on every query. * * @var array */ protected $with = [ - 'owner', 'tags', 'etiquette', 'articles', 'sujet', - 'typeMedia', 'societes', 'marques' + 'owner', + 'tags', + 'etiquette', + 'articles', + 'sujet', + 'typeMedia', + 'societes', + 'marques' ]; /** @@ -209,8 +222,10 @@ class Media extends Model $user = auth()->user(); MediaCreated::dispatch($user, $model); - /** @throws \RuntimeException */ - $model->addToElasticSearch(); + if (empty($model->isDuplicate)) { + /** @throws \RuntimeException */ + $model->addToElasticSearch(); + } }); static::updating(function (self $model) { if ($model->statut === MediaStatut::brouillon and $model->arcadia_id) { @@ -723,7 +738,7 @@ class Media extends Model // * create preview /** @var \App\Models\Format $format */ $format = Format::withoutGlobalScope('App\Scopes\SystemScope') - ->where('libelle', '=', 'preview')->firstOrFail(); + ->where('libelle', '=', 'preview')->firstOrFail(); if ($this->extension == MediaExtension::gif) { if ($this->largeur >= $format->largeur || $this->hauteur >= $format->hauteur || $this->largeur == "") { @@ -753,7 +768,7 @@ class Media extends Model // * create thumb /** @var \App\Models\Format $format */ $format = Format::withoutGlobalScope('App\Scopes\SystemScope') - ->where('libelle', '=', 'thumb')->firstOrFail(); + ->where('libelle', '=', 'thumb')->firstOrFail(); if ($this->extension != MediaExtension::png) { $im->setImageBackgroundColor('#ffffff'); $im->setImageAlphaChannel(\Imagick::ALPHACHANNEL_REMOVE); diff --git a/config/mail.php b/config/mail.php index 025cb88..1f5af32 100644 --- a/config/mail.php +++ b/config/mail.php @@ -118,7 +118,8 @@ return [ // * Contacts List 'contactsList' => [ 'invalidXml' => preg_split('/(\s*,*\s*)*,+(\s*,*\s*)*/', env('MAIL_LIST_INVALID_XML', 'equipe.web@ldc.fr')), - 'serviceweb' => preg_split('/(\s*,*\s*)*,+(\s*,*\s*)*/', env('MAIL_LIST_SERVICEWEB', 'equipe.web@ldc.fr')) + 'serviceweb' => preg_split('/(\s*,*\s*)*,+(\s*,*\s*)*/', env('MAIL_LIST_SERVICEWEB', 'equipe.web@ldc.fr')), + 'admin' => explode(',', env('MAIL_ADMIN')), ], ]; diff --git a/resources/js/components/media-manager/MmActionsComponent.vue b/resources/js/components/media-manager/MmActionsComponent.vue index 984ef2d..cd8bf4e 100644 --- a/resources/js/components/media-manager/MmActionsComponent.vue +++ b/resources/js/components/media-manager/MmActionsComponent.vue @@ -163,8 +163,8 @@ - - - + + + + @endsection