ldc-dam/app/Http/Controllers/PanierController.php
Jérémy Munsch 9767e62c72
Update NPM deps and webpack.mix.js
composer require ldc/web-status-checker-laravel remove Old static status checker

Fix ImportMedia

WIP commands OK

many fixes

Fix and try to optimize folder component

Fix front icons + actions based on icons

Favico

front fix alert

Fix Media upload on depot

fix folder component buttons

Full front fix with perf due tu vuejs

Download medias

Navigate within medias superfix

Move media + loader

isLocked boolean and remove media fix

Folder scroll fix

arcadia link color red

Fix panier show external

Tons of fixes back as front

REwrited all
2022-07-22 17:00:48 +02:00

176 lines
4.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\Bo\Ajax\AddMediasBasketRequest;
use App\Http\Requests\Bo\Ajax\CreateBasketRequest;
use App\Http\Requests\Bo\Ajax\DestroyBasketRequest;
use App\Http\Requests\Bo\Ajax\RemoveMediasBasketRequest;
use App\Http\Requests\Bo\Ajax\SaveBasketPropsRequest;
use Illuminate\Support\Str;
use App\Models\Panier;
use App\Models\Format;
use App\Models\Media;
class PanierController extends Controller
{
// * BO
/**
* Page principale des paniers
*
* @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
*/
public function index()
{
/** @var \App\Models\User $user */
$user = \auth()->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 \App\Http\Requests\Bo\Ajax\AddMediasBasketRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function addMediasBasket(AddMediasBasketRequest $request)
{
/** @var \App\Models\Panier $panier */
$panier = Panier::whereId($request->panier_id)
->with('mediaList')->firstOrFail();
// * Sync every media to basket
$panier->mediaList()->sync(array_merge(
$panier->mediaList()->pluck('id')->all(),
$request->mediaList
));
return response()->json();
}
/**
* Suppression de média à un panier
*
* @param \App\Http\Requests\Bo\Ajax\RemoveMediasBasketRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function removeMediasBasket(RemoveMediasBasketRequest $request)
{
/** @var \App\Models\Panier $panier */
$panier = Panier::whereId($request->panier_id)
->with('mediaList')->firstOrFail();
/** @var \App\Models\Media $media */
$media = Media::whereId($request->media_id)->firstOrFail();
$panier->mediaList()->detach($media);
return response()->json(true);
}
/**
* Ajoute un panier
*
* @param \App\Http\Requests\Bo\Ajax\CreateBasketRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function createBasket(CreateBasketRequest $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 \App\Http\Requests\Bo\Ajax\DestroyBasketRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function destroyBasket(DestroyBasketRequest $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 \App\Models\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<\App\Models\Format> $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 \App\Http\Requests\Bo\Ajax\SaveBasketPropsRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function saveBasketProperty(SaveBasketPropsRequest $request)
{
/** @var \App\Models\Panier $panier */
$panier = Panier::whereId($request->basket_id)->firstOrFail();
$panier->fill($request->validated());
$panier->saveOrFail();
return response()->json($panier);
}
}