Files
OnAPB-Carrere_Demartin/app/Http/Controllers/Admin/CarouselItemController.php
T
Laucha1312 90c5f85512 2
2026-06-04 15:15:23 -03:00

114 lines
3.7 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\CarouselItem;
use App\Services\ImageOptimizer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
class CarouselItemController extends Controller
{
private function checkGeneralAdmin(Request $request): void
{
if (!session('admin_logged_in') || !in_array(session('admin_role'), [1, 2])) {
abort(403, 'Acceso denegado');
}
}
public function index(Request $request)
{
$this->checkGeneralAdmin($request);
$items = CarouselItem::orderBy('orden', 'asc')->latest()->get();
return view('admin.carousel.index', compact('items'));
}
public function create(Request $request)
{
$this->checkGeneralAdmin($request);
return view('admin.carousel.create');
}
public function store(Request $request)
{
$this->checkGeneralAdmin($request);
$request->validate([
'titulo' => 'nullable|string|max:255',
'subtitulo' => 'nullable|string|max:255',
'boton_texto' => 'nullable|string|max:255',
'boton_enlace' => 'nullable|string|max:255',
'imagen' => 'required|image|mimes:jpeg,png,jpg,webp|max:5120',
'orden' => 'nullable|integer',
'activo' => 'nullable|boolean',
]);
$data = $request->except('imagen');
$data['activo'] = $request->has('activo');
if ($request->hasFile('imagen')) {
$path = app(ImageOptimizer::class)->storeAndOptimize($request->file('imagen'), 'carousel');
$data['imagen'] = 'storage/' . $path;
}
CarouselItem::create($data);
return redirect()->route('admin.carousel.index')->with('admin_msg', 'Slide creado exitosamente.');
}
public function edit(Request $request, CarouselItem $carouselItem)
{
$this->checkGeneralAdmin($request);
return view('admin.carousel.edit', compact('carouselItem'));
}
public function update(Request $request, CarouselItem $carouselItem)
{
$this->checkGeneralAdmin($request);
$request->validate([
'titulo' => 'nullable|string|max:255',
'subtitulo' => 'nullable|string|max:255',
'boton_texto' => 'nullable|string|max:255',
'boton_enlace' => 'nullable|string|max:255',
'imagen' => 'nullable|image|mimes:jpeg,png,jpg,webp|max:5120',
'orden' => 'nullable|integer',
'activo' => 'nullable|boolean',
]);
$data = $request->except('imagen');
$data['activo'] = $request->has('activo');
if ($request->hasFile('imagen')) {
// Eliminar imagen anterior si existe
if ($carouselItem->imagen) {
$oldPath = public_path($carouselItem->imagen);
if (File::exists($oldPath)) {
File::delete($oldPath);
}
}
$path = app(ImageOptimizer::class)->storeAndOptimize($request->file('imagen'), 'carousel');
$data['imagen'] = 'storage/' . $path;
}
$carouselItem->update($data);
return redirect()->route('admin.carousel.index')->with('admin_msg', 'Slide actualizado exitosamente.');
}
public function destroy(Request $request, CarouselItem $carouselItem)
{
$this->checkGeneralAdmin($request);
if ($carouselItem->imagen) {
$imagePath = public_path($carouselItem->imagen);
if (File::exists($imagePath)) {
File::delete($imagePath);
}
}
$carouselItem->delete();
return redirect()->route('admin.carousel.index')->with('admin_msg', 'Slide eliminado exitosamente.');
}
}