authorizeResource(Carousel::class); } /** * Display a listing of the resource. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View */ public function index(Request $request): \Illuminate\Contracts\View\View { /** @var \Illuminate\Database\Eloquent\Builder<\App\Models\Carousel> $carouselModels */ $carouselModels = Carousel::query()->with('section'); /** @var \Illuminate\Database\Eloquent\Builder<\App\Models\Section> $sectionModels */ $sectionModels = Section::query()->whereHas('carousels')->get(); $selectedSection = intval($request->section); $carouselModels = $carouselModels->when($selectedSection, function ($query) use ($selectedSection) { $query->where('section_id', $selectedSection); }); /** @var string $search Search field */ $search = $request->input('search'); if ($search) { $this->searchQuery( $carouselModels, $search, null, 'title', ); } $searchFields = \implode(', ', [ Str::ucFirst(trans('validation.attributes.title')), ]); /** Sort columns with a query */ $this->sortQuery($carouselModels); /** Custom pagination */ $carouselModels = $this->paginate($carouselModels); return view('bo.pages.carousels.index', compact( 'carouselModels', 'sectionModels', 'selectedSection', 'search', 'searchFields' )); } /** * Show the form for creating a new resource. * * @param \App\Models\Carousel $carousel * @return \Illuminate\Contracts\View\View */ public function create(Carousel $carousel): \Illuminate\Contracts\View\View { $sectionModels = Section::all(); return view('bo.pages.carousels.create', [ 'carouselModel' => $carousel, 'sectionModels' => $sectionModels ]); } /** * Store a newly created resource in storage. * * @param \App\Http\Requests\Bo\Carousels\StoreCarouselRequest $request * @return \Illuminate\Http\RedirectResponse */ public function store(StoreCarouselRequest $request): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request) { $carousel = new Carousel(); $carousel->fill($request->validated()); if (!Arr::exists($request->validated(), 'media')) { $carousel->media = []; } // Set the new pictures files in the pictures array. collect($request->only(['media.pictures.*.path'])) ->each( function (mixed $value, string $attribute) use ($carousel) { foreach ($value['pictures']['*']['path'] as $index => $file) { if ($file instanceof \Illuminate\Http\UploadedFile) { $carousel->setAttribute( "{$attribute}->pictures->{$index}->path", FileStorageHelper::storeFile($carousel, $file, true) ); } } } ); if ($carousel->saveOrFail()) { return redirect()->route('bo.carousels.edit', $carousel) ->with('success', trans('crud.messages.has_been_created', [ 'model' => Str::ucfirst(trans_choice('models.classes.carousel', 1)) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_created', [ 'model' => Str::ucfirst(trans_choice('models.classes.carousel', 1)) ])); }); } /** * Show the form for editing the specified resource. * * @param \App\Models\Carousel $carousel * @return \Illuminate\Contracts\View\View */ public function edit(Carousel $carousel): \Illuminate\Contracts\View\View { $sectionModels = Section::all(); return view('bo.pages.carousels.edit', [ 'carouselModel' => $carousel, 'sectionModels' => $sectionModels ]); } /** * Update the specified resource in storage. * * @param \App\Http\Requests\Bo\Carousels\UpdateCarouselRequest $request * @param \App\Models\Carousel $carousel * @return \Illuminate\Http\RedirectResponse */ public function update(UpdateCarouselRequest $request, Carousel $carousel): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $carousel) { $carousel->fill($request->validated()); if (!Arr::exists($request->validated(), 'media')) { $carousel->media = []; } // Set the new pictures files in the pictures array. collect($request->only(['media.pictures.*.path'])) ->each( function (mixed $value, string $attribute) use ($carousel) { foreach ($value['pictures']['*']['path'] as $index => $file) { if ($file instanceof \Illuminate\Http\UploadedFile) { $carousel->setAttribute( "{$attribute}->pictures->{$index}->path", FileStorageHelper::storeFile($carousel, $file, true) ); } } } ); if ($carousel->saveOrFail()) { return redirect()->route('bo.carousels.edit', $carousel) ->with('success', trans('crud.messages.has_been_updated', [ 'model' => Str::ucfirst(trans_choice('models.classes.carousel', 1)) ])); } return redirect()->route('bo.carousels.edit', $carousel) ->with('error', trans('crud.messages.cannot_be_updated', [ 'model' => Str::ucfirst(trans_choice('models.classes.carousel', 1)) ])); }); } /** * Remove the specified resource from storage. * * @param \App\Models\Carousel $carousel * @return \Illuminate\Http\RedirectResponse */ public function destroy(Carousel $carousel): \Illuminate\Http\RedirectResponse { if ($carousel->deleteOrFail()) { return redirect()->route('bo.carousels.index') ->with('success', trans('crud.messages.has_been_deleted', [ 'model' => Str::ucfirst(trans_choice('models.classes.carousel', 1)) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_deleted', [ 'model' => Str::ucfirst(trans_choice('models.classes.carousel', 1)) ])); } /** * Duplicate the specified resource. * * @param \App\Models\Carousel $carousel * @return \Illuminate\Contracts\View\View */ public function duplicate(Carousel $carousel): \Illuminate\Contracts\View\View { return $this->create($carousel->replicate()); } }