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
176 lines
4.9 KiB
PHP
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);
|
|
}
|
|
}
|