SI_Wisata_Gadis/app/Http/Controllers/KulinerController.php

211 lines
7.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\DataWisata;
use App\Models\DataKuliner;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\DataKategoriDetail;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
class KulinerController extends Controller
{
public function index(Request $request)
{
// Debug untuk melihat data yang dikirim dari form pencarian
// dd($request->all());
// Ambil daftar kategori detail untuk dropdown
$kategoriDetails = DataKategoriDetail::all();
// Query utama DataKuliner
$query = DataKuliner::query();
// Filter berdasarkan kategori (jika ada input id_kategori_detail)
if ($request->id_kategori_detail) {
$query->whereHas('wisata.kategori_detail', function ($q) use ($request) {
$q->where('id', $request->id_kategori_detail);
});
}
// Filter berdasarkan nama kuliner (jika ada input nama_kuliner)
if ($request->nama_kuliner) {
$query->where('nama_kuliner', 'like', '%' . $request->nama_kuliner . '%');
}
// Ambil data kuliner dengan relasi wisata dan kategori
$DataKuliner = $query->with(['wisata.kategori_detail.kategori'])->latest()->paginate(10);
return view('admin.adminDataKuliner', compact('DataKuliner', 'kategoriDetails'));
}
public function create()
{
$DataWisata = DataWisata::all();
return view('admin.tambahKuliner', ['DataWisata' => $DataWisata]);
}
public function store(Request $request)
{
// Validasi data yang diterima
$validated = $request->validate([
'id_wisata' => 'required',
'nama_kuliner.*' => 'required|string|max:255',
'deskripsi_kuliner.*' => 'required|string',
'no_hp.*' => ['required', 'regex:/^(\+62|0)[0-9]{8,13}$/'],
'jam_operasional.*.hari' => 'nullable|string',
'jam_operasional.*.buka' => 'nullable|date_format:H:i',
'jam_operasional.*.tutup' => 'nullable|date_format:H:i',
'gambar_kuliner.*' => 'nullable|image',
'gambar_menu.*.*' => 'nullable|image',
]);
// Proses simpan data kuliner dan gambar
foreach ($request->nama_kuliner as $index => $nama_kuliner) {
$kuliner = new DataKuliner();
$kuliner->id_wisata = $request->id_wisata;
$kuliner->nama_kuliner = $nama_kuliner;
$kuliner->deskripsi_kuliner = $request->deskripsi_kuliner[$index] ?? null;
$kuliner->no_hp = $request->no_hp[$index] ?? null;
// Simpan jam operasional untuk masing-masing kuliner
$kuliner->jam_operasional = isset($request->jam_operasional[$index])
? json_encode($request->jam_operasional[$index])
: null;
// Menyimpan gambar kuliner
if (
is_array($request->file('gambar_kuliner')) &&
isset($request->file('gambar_kuliner')[$index])
) {
$file = $request->file('gambar_kuliner')[$index];
$path = $file->store('images/kuliner/img', 'public');
$kuliner->gambar_kuliner = $path;
}
// Menyimpan gambar menu
if (isset($request->gambar_menu[$index]) && is_array($request->gambar_menu[$index])) {
$menu_images = [];
foreach ($request->gambar_menu[$index] as $menu_image) {
$path = $menu_image->store('images/kuliner/detail', 'public');
$menu_images[] = $path;
}
$kuliner->gambar_menu = json_encode($menu_images);
}
$kuliner->save();
}
return redirect()->route('kuliner.index')->with('success', 'Kuliner berhasil ditambahkan.');
}
public function edit($id)
{
// Ambil data kuliner berdasarkan ID
$kuliner = DataKuliner::find($id);
// Cek apakah data ditemukan
if (!$kuliner) {
return redirect()->route('kuliner.index')->with(['error' => 'Kuliner tidak ditemukan']);
}
// Decode JSON ke array jika masih string
if (is_string($kuliner->jam_operasional)) {
$kuliner->jam_operasional = json_decode($kuliner->jam_operasional, true);
}
// Ambil data wisata untuk dropdown
$wisata = DataWisata::all();
// Kirim data ke view edit
return view('admin.editKuliner', [
'kuliner' => $kuliner,
'wisata' => $wisata
]);
}
public function update(Request $request, $id)
{
$request->validate([
'id_wisata' => 'required',
'nama_kuliner' => 'required|string|max:255',
'deskripsi_kuliner' => 'nullable|string|max:800',
'gambar_kuliner' => 'nullable|image',
'gambar_menu.*' => 'nullable|image',
'no_hp' => 'nullable|string',
'jam_operasional' => 'nullable|array',
]);
$kuliner = DataKuliner::find($id);
if (!$kuliner) {
return redirect()->route('kuliner.index')->with(['error' => 'Data kuliner tidak ditemukan']);
}
try {
$kuliner->id_wisata = $request->id_wisata;
$kuliner->nama_kuliner = $request->nama_kuliner;
$kuliner->deskripsi_kuliner = $request->deskripsi_kuliner;
$kuliner->no_hp = $request->no_hp;
// ✅ Simpan seluruh jam_operasional
if ($request->has('jam_operasional')) {
$kuliner->jam_operasional = json_encode($request->jam_operasional);
}
// ✅ Gambar utama
if ($request->hasFile('gambar_kuliner')) {
if ($kuliner->gambar_kuliner) {
Storage::delete('public/' . $kuliner->gambar_kuliner);
}
$path = $request->file('gambar_kuliner')->store('images/kuliner/img', 'public');
$kuliner->gambar_kuliner = $path;
}
// ✅ Gambar Menu
if ($request->hasFile('gambar_menu')) {
if ($kuliner->gambar_menu) {
foreach (json_decode($kuliner->gambar_menu, true) as $oldImage) {
Storage::delete('public/' . $oldImage);
}
}
$menuImages = [];
foreach ($request->file('gambar_menu') as $file) {
$menuImages[] = $file->store('images/kuliner/detail', 'public');
}
$kuliner->gambar_menu = json_encode($menuImages);
}
$kuliner->save();
return redirect()->route('kuliner.index')->with(['success' => 'Data kuliner berhasil diupdate']);
} catch (\Exception $e) {
return back()->withInput()->withErrors(['error' => $e->getMessage()]);
}
}
public function destroy($id)
{
// Temukan kategori berdasarkan ID
$kuliner = DataKuliner::findOrFail($id);
// Hapus kategori
$kuliner->delete();
return redirect()->route('kuliner.index')->with('success', 'Kuliner berhasil dihapus.');
}
public function show($id) {}
}