gambar kategori

This commit is contained in:
rahmagustin 2026-03-13 04:54:34 +07:00
parent 72b51b00a3
commit 622e7e6e8c
1 changed files with 61 additions and 64 deletions

View File

@ -3,129 +3,126 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\KategoriTps;
use Illuminate\Http\Request;
use App\Models\KategoriTps;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
class KategoriTpsController extends Controller
{
// Tampilkan data kategori
public function index(Request $request)
{
$title = 'Kategori TPS';
$search = $request->search;
$kategori = KategoriTps::when($search, function ($query) use ($search) {
$query->where('nama_kategori', 'like', '%' . $search . '%');
})
->orderBy('id_kategori_tps', 'desc')
->paginate(10);
->orderBy('id_kategori_tps', 'desc')
->paginate(10);
return view('admin.kategori-tps.index', compact('title', 'kategori'));
return view('admin.kategori-tps.index', compact('kategori'));
}
// Form tambah
public function create()
{
$title = 'Tambah Kategori TPS';
return view('admin.kategori-tps.create', compact('title'));
return view('admin.kategori-tps.create');
}
// Simpan kategori
public function store(Request $request)
{
$data = $request->validate(
[
'nama_kategori' => 'required|string|max:100',
'kepanjangan_kategori' => 'required|string|max:255',
'deskripsi' => 'required|string',
'foto_kategori' => 'required|image|mimes:jpg,jpeg,png|max:2048',
],
[
'nama_kategori.required' => 'Nama kategori wajib diisi',
'kepanjangan_kategori.required' => 'Kepanjangan kategori wajib diisi',
'deskripsi.required' => 'Deskripsi kategori wajib diisi',
'foto_kategori.required' => 'Foto kategori wajib diunggah',
'foto_kategori.image' => 'File harus berupa gambar',
'foto_kategori.mimes' => 'Format gambar harus JPG, JPEG, atau PNG',
'foto_kategori.max' => 'Ukuran gambar maksimal 2 MB',
]
$validator = Validator::make($request->all(), [
'nama_kategori' => 'required|string|max:100',
'kepanjangan_kategori' => 'required|string|max:255',
'deskripsi' => 'required|string',
'foto_kategori' => 'nullable|image|mimes:jpg,jpeg,png|max:2048',
], [
'nama_kategori.required' => 'Nama kategori wajib diisi',
'kepanjangan_kategori.required' => 'Kepanjangan kategori wajib diisi',
'deskripsi.required' => 'Deskripsi wajib diisi',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$data = $request->only(
'nama_kategori',
'kepanjangan_kategori',
'deskripsi'
);
// Upload foto ke public/assets/admin/images/kategori-tps
// Upload foto
if ($request->hasFile('foto_kategori')) {
$file = $request->file('foto_kategori');
$filename = strtolower(str_replace(' ', '_', $request->nama_kategori))
. '_' . time()
. '.' . $file->getClientOriginalExtension();
$file->move(public_path('assets/admin/images/kategori-tps'), $filename);
$data['foto_kategori'] = $filename;
$data['foto_kategori'] = $request->file('foto_kategori')
->store('kategori-tps', 'public');
}
KategoriTps::create($data);
return redirect()
->route('admin.kategori.index')
return redirect()->route('admin.kategori.index')
->with('success', 'Kategori TPS berhasil ditambahkan');
}
// Form edit
public function edit($id)
{
$title = 'Edit Kategori TPS';
$kategori = KategoriTps::findOrFail($id);
return view('admin.kategori-tps.edit', compact('title', 'kategori'));
return view('admin.kategori-tps.edit', compact('kategori'));
}
// Update kategori
public function update(Request $request, $id)
{
$kategori = KategoriTps::findOrFail($id);
$data = $request->validate(
[
'nama_kategori' => 'required|string|max:100',
'kepanjangan_kategori' => 'required|string|max:255',
'deskripsi' => 'required|string',
'foto_kategori' => 'nullable|image|mimes:jpg,jpeg,png|max:2048',
],
[
'nama_kategori.required' => 'Nama kategori wajib diisi',
'kepanjangan_kategori.required' => 'Kepanjangan kategori wajib diisi',
'deskripsi.required' => 'Deskripsi kategori wajib diisi',
'foto_kategori.image' => 'File harus berupa gambar',
'foto_kategori.mimes' => 'Format gambar harus JPG, JPEG, atau PNG',
'foto_kategori.max' => 'Ukuran gambar maksimal 2 MB',
]
$validator = Validator::make($request->all(), [
'nama_kategori' => 'required|string|max:100',
'kepanjangan_kategori' => 'required|string|max:255',
'deskripsi' => 'required|string',
'foto_kategori' => 'nullable|image|mimes:jpg,jpeg,png|max:2048',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$data = $request->only(
'nama_kategori',
'kepanjangan_kategori',
'deskripsi'
);
if ($request->hasFile('foto_kategori')) {
// Hapus foto lama jika ada
if ($kategori->foto_kategori && file_exists(public_path('assets/admin/images/kategori-tps/' . $kategori->foto_kategori))) {
unlink(public_path('assets/admin/images/kategori-tps/' . $kategori->foto_kategori));
if ($kategori->foto_kategori) {
Storage::disk('public')->delete($kategori->foto_kategori);
}
$file = $request->file('foto_kategori');
$filename = strtolower(str_replace(' ', '_', $request->nama_kategori))
. '_' . time()
. '.' . $file->getClientOriginalExtension();
$file->move(public_path('assets/admin/images/kategori-tps'), $filename);
$data['foto_kategori'] = $filename;
$data['foto_kategori'] = $request->file('foto_kategori')
->store('kategori-tps', 'public');
}
$kategori->update($data);
return redirect()
->route('admin.kategori.index')
return redirect()->route('admin.kategori.index')
->with('success', 'Kategori TPS berhasil diperbarui');
}
// Hapus kategori
public function destroy($id)
{
$kategori = KategoriTps::findOrFail($id);
if ($kategori->foto_kategori && file_exists(public_path('assets/admin/images/kategori-tps/' . $kategori->foto_kategori))) {
unlink(public_path('assets/admin/images/kategori-tps/' . $kategori->foto_kategori));
if ($kategori->foto_kategori) {
Storage::disk('public')->delete($kategori->foto_kategori);
}
$kategori->delete();
return redirect()
->route('admin.kategori.index')
return redirect()->route('admin.kategori.index')
->with('success', 'Kategori TPS berhasil dihapus');
}
}