TIF_NGANJUK_E41220418/app/Http/Controllers/Admin/BuketController.php

153 lines
6.1 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Buket;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\File;
class BuketController extends Controller
{
public function index()
{
$buket = Buket::latest()->get();
return view('admin.produk-buket.index', compact('buket'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'nama' => 'required|string|min:3|max:100',
'ukuran' => 'required|in:S,M,L',
'kategori' => 'required|in:single,fresh,premium_fresh,artificial',
'harga' => 'required|numeric|min:0',
'request_khusus' => 'nullable|string|max:255',
'deskripsi' => 'required|string|min:10',
'foto' => 'required|image|mimes:jpeg,png,jpg|max:2048',
], [
// Detail Pesan Kustom menggunakan :attribute
'required' => 'Kolom :attribute tidak boleh kosong.',
'string' => 'Input :attribute harus berupa teks valid.',
'min' => ':attribute terlalu pendek, minimal harus :min karakter.',
'max' => ':attribute melebihi batas, maksimal :max karakter/KB.',
'in' => 'Pilihan :attribute tidak sesuai dengan data yang tersedia.',
'numeric' => ':attribute harus berupa angka.',
'image' => ':attribute harus berupa file gambar (foto).',
'mimes' => 'Format :attribute tidak didukung. Gunakan format: jpeg, png, atau jpg.',
'max.file' => 'Ukuran :attribute terlalu besar, maksimal adalah 2MB.',
], [
// Alias Atribut agar pesan lebih ramah pengguna
'nama' => 'nama buket',
'ukuran' => 'ukuran buket',
'kategori' => 'kategori buket',
'harga' => 'harga',
'request_khusus' => 'request khusus',
'deskripsi' => 'deskripsi produk',
'foto' => 'foto produk',
]);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput()
->with('error_modal', 'create');
}
$path = null;
if ($request->hasFile('foto')) {
$file = $request->file('foto');
$filename = time() . '_' . $file->getClientOriginalName();
$file->move(public_path('img/buket'), $filename);
$path = 'img/buket/' . $filename;
}
Buket::create([
'nama' => $request->nama,
'ukuran' => $request->ukuran,
'kategori' => $request->kategori,
'harga' => $request->harga,
'request_khusus' => $request->request_khusus,
'deskripsi' => $request->deskripsi,
'foto' => $path,
]);
return redirect()->back()->with('success', 'Produk buket berhasil ditambahkan!');
}
public function update(Request $request, string $id)
{
$buket = Buket::findOrFail($id);
$validator = Validator::make($request->all(), [
'nama' => 'required|string|min:3|max:100',
'ukuran' => 'required|in:S,M,L',
'kategori' => 'required|in:single,fresh,premium_fresh,artificial',
'harga' => 'required|numeric|min:0',
'request_khusus' => 'nullable|string|max:255',
'deskripsi' => 'required|string|min:10',
'foto' => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
], [
// Detail Pesan Kustom menggunakan :attribute
'required' => 'Kolom :attribute tidak boleh kosong.',
'string' => 'Input :attribute harus berupa teks valid.',
'min' => ':attribute terlalu pendek, minimal harus :min karakter.',
'max' => ':attribute melebihi batas, maksimal :max karakter/KB.',
'in' => 'Pilihan :attribute tidak sesuai dengan data yang tersedia.',
'numeric' => ':attribute harus berupa angka.',
'image' => ':attribute harus berupa file gambar (foto).',
'mimes' => 'Format :attribute tidak didukung. Gunakan format: jpeg, png, atau jpg.',
'max.file' => 'Ukuran :attribute terlalu besar, maksimal adalah 2MB.',
], [
// Alias Atribut agar pesan lebih ramah pengguna
'nama' => 'nama buket',
'ukuran' => 'ukuran buket',
'kategori' => 'kategori buket',
'harga' => 'harga',
'request_khusus' => 'request khusus',
'deskripsi' => 'deskripsi produk',
'foto' => 'foto produk',
]);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput()
->with('error_id', $id);
}
$data = $request->only(['nama', 'ukuran', 'kategori', 'harga', 'request_khusus', 'deskripsi']);
if ($request->hasFile('foto')) {
// 1. Hapus foto lama jika ada
if ($buket->foto) {
File::delete(public_path($buket->foto));
}
// 2. Upload foto baru
$file = $request->file('foto');
$filename = time() . '_' . $file->getClientOriginalName();
$file->move(public_path('img/buket'), $filename);
$data['foto'] = 'img/buket/' . $filename;
}
$buket->update($data);
return redirect()->back()->with('success', 'Produk buket berhasil diperbarui!');
}
public function destroy(string $id)
{
$buket = Buket::findOrFail($id);
if ($buket->foto) {
File::delete(public_path($buket->foto));
}
$buket->delete();
return redirect()->back()->with('success', 'Produk dan foto berhasil dihapus permanen!');
}
}