user(); /** @var \Illuminate\Database\Eloquent\Collection $paniers */ $paniers = $user->paniersOwner; return view('panier.index')->with([ 'paniers' => $paniers, ]); } // * AJAX /** * Get user baskets * * @return \Illuminate\Http\JsonResponse */ public function getBaskets() { /** @var \App\Models\User $user */ $user = \auth()->user(); /** @var \Illuminate\Database\Eloquent\Collection $paniers */ $paniers = $user->paniersOwner; return response()->json($paniers); } /** * Ajout de média à un panier * * @param AjaxAddMediasBasketRequest $request * @return \Illuminate\Http\JsonResponse */ public function addMediasBasket(AjaxAddMediasBasketRequest $request) { /** @var \App\Models\Panier $panier */ $panier = Panier::whereId($request->panier_id) ->with('medias')->firstOrFail(); // * Sync every media to basket $panier->medias()->sync(array_merge( $panier->medias()->pluck('id')->all(), $request->medias )); return response()->json(); } /** * Suppression de média à un panier * * @param AjaxRemoveMediasBasketRequest $request * @return \Illuminate\Http\JsonResponse */ public function removeMediasBasket(AjaxRemoveMediasBasketRequest $request) { /** @var \App\Models\Panier $panier */ $panier = Panier::whereId($request->panier_id) ->with('medias')->firstOrFail(); /** @var \App\Models\Media $media */ $media = Media::whereId($request->media_id)->firstOrFail(); $panier->medias()->detach($media); return response()->json(true); } /** * Ajoute un panier * * @param AjaxCreateBasketRequest $request * @return \Illuminate\Http\JsonResponse */ public function createBasket(AjaxCreateBasketRequest $request) { /** @var \App\Models\User $user */ $user = auth()->user(); $panier = new Panier(); $panier->libelle = $request->title; $panier->uid = Str::uuid(); $panier->owner()->associate($user); $panier->saveOrFail(); return response()->json($panier); } /** * Supprimer un panier * * @param AjaxDestroyBasketRequest $request * @return \Illuminate\Http\JsonResponse */ public function destroyBasket(AjaxDestroyBasketRequest $request) { /** @var \App\Models\Panier $basket */ $basket = Panier::whereId($request->basket_id)->firstOrFail(); $basket->deleteOrFail(); return response()->json(); } // * FO /** * Page publique d'un panier * * @param Panier $panier * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory */ public function showBasket(Panier $panier) { /** @var \App\Models\User|null $user */ $user = auth()->user(); // * Ne pas afficher le panier si il n'est pas pas publié et // * que l'utilisateur n'est pas le propiétaire if (!$panier->statut) { if (!$user or \optional($panier->owner)->id !== $user->id) { abort(404); } } /** @var \Illuminate\Database\Eloquent\Collection $formats */ $formats = Format::withoutGlobalScope('App\Scopes\SystemScope') ->where('system', true)->get(); return view('panier.show')->with([ 'panier' => $panier, 'formats' => $formats, ]); } /** * Enregistre les propriétés d'un panier * * @param AjaxSaveBasketPropsRequest $request * @return \Illuminate\Http\JsonResponse */ public function saveBasketProperty(AjaxSaveBasketPropsRequest $request) { /** @var \App\Models\Panier $panier */ $panier = Panier::whereId($request->basket_id)->firstOrFail(); $panier->fill($request->validated()); $panier->saveOrFail(); return response()->json($panier); } }