get(); $nextUrutan = (Pengumuman::max('urutan') ?? 0) + 1; return view('admin.manajemen-pengumuman.index', compact('pengumumen', 'nextUrutan')); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $validator = Validator::make($request->all(), [ 'nama_pengumuman' => 'required|string|max:255', 'deskripsi_pengumuman' => 'required|string|max:1000', 'foto_pengumuman' => 'required|image|mimes:jpeg,png,jpg,gif,webp|max:5120', 'status' => 'boolean', ], [ 'nama_pengumuman.required' => 'Nama pengumuman harus diisi', 'nama_pengumuman.max' => 'Nama pengumuman maksimal 255 karakter', 'deskripsi_pengumuman.required' => 'Deskripsi pengumuman harus diisi', 'deskripsi_pengumuman.max' => 'Deskripsi pengumuman maksimal 1000 karakter', 'foto_pengumuman.required' => 'Foto pengumuman harus diisi', 'foto_pengumuman.image' => 'File harus berupa gambar', 'foto_pengumuman.mimes' => 'Format gambar harus jpeg, png, jpg, gif, atau webp', 'foto_pengumuman.max' => 'Ukuran gambar maksimal 5MB', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'message' => 'Validasi gagal', 'errors' => $validator->errors(), ], 422); } try { $fileName = null; if ($request->hasFile('foto_pengumuman')) { $file = $request->file('foto_pengumuman'); $fileName = time().'_'.uniqid().'.'.$file->getClientOriginalExtension(); $file->move(storage_path('pengumuman'), $fileName); } $pengumuman = Pengumuman::create([ 'admin_id' => auth()->id(), 'nama_pengumuman' => $request->nama_pengumuman, 'deskripsi_pengumuman' => $request->deskripsi_pengumuman, 'foto_pengumuman' => $fileName, 'status' => $request->has('status') ? true : false, 'urutan' => (Pengumuman::max('urutan') ?? 0) + 1, ]); return response()->json([ 'success' => true, 'message' => 'Pengumuman berhasil ditambahkan!', 'pengumuman' => [ 'id' => $pengumuman->id, 'nama_pengumuman' => $pengumuman->nama_pengumuman, 'deskripsi_pengumuman' => $pengumuman->deskripsi_pengumuman, 'deskripsi_pendek' => $pengumuman->deskripsi_pendek, 'foto_pengumuman_url' => $pengumuman->foto_pengumuman_url, 'status' => $pengumuman->status, 'urutan' => $pengumuman->urutan, 'created_at' => $pengumuman->created_at->format('d M Y'), ], ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Terjadi kesalahan: '.$e->getMessage(), ], 500); } } /** * Display the specified resource. */ public function show(Pengumuman $pengumuman) { return response()->json([ 'success' => true, 'pengumuman' => [ 'id' => $pengumuman->id, 'nama_pengumuman' => $pengumuman->nama_pengumuman, 'deskripsi_pengumuman' => $pengumuman->deskripsi_pengumuman, 'foto_pengumuman_url' => $pengumuman->foto_pengumuman_url, 'status' => $pengumuman->status, 'urutan' => $pengumuman->urutan, 'created_at' => $pengumuman->created_at->format('d F Y'), 'updated_at' => $pengumuman->updated_at->format('d F Y'), ], ]); } /** * Update the specified resource in storage. */ public function update(Request $request, Pengumuman $pengumuman) { $validator = Validator::make($request->all(), [ 'nama_pengumuman' => 'required|string|max:255', 'deskripsi_pengumuman' => 'required|string|max:1000', 'foto_pengumuman' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:5120', 'status' => 'boolean', 'urutan' => 'nullable|integer|min:0', ], [ 'nama_pengumuman.required' => 'Nama pengumuman harus diisi', 'nama_pengumuman.max' => 'Nama pengumuman maksimal 255 karakter', 'deskripsi_pengumuman.required' => 'Deskripsi pengumuman harus diisi', 'deskripsi_pengumuman.max' => 'Deskripsi pengumuman maksimal 1000 karakter', 'foto_pengumuman.image' => 'File harus berupa gambar', 'foto_pengumuman.mimes' => 'Format gambar harus jpeg, png, jpg, gif, atau webp', 'foto_pengumuman.max' => 'Ukuran gambar maksimal 5MB', 'urutan.integer' => 'Urutan harus berupa angka', 'urutan.min' => 'Urutan minimal 0', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'message' => 'Validasi gagal', 'errors' => $validator->errors(), ], 422); } try { $data = [ 'nama_pengumuman' => $request->nama_pengumuman, 'deskripsi_pengumuman' => $request->deskripsi_pengumuman, 'status' => $request->has('status') ? true : false, 'urutan' => $request->urutan ?? $pengumuman->urutan, ]; // Handle foto upload jika ada if ($request->hasFile('foto_pengumuman')) { // Hapus foto lama jika ada if ($pengumuman->foto_pengumuman && file_exists(storage_path('pengumuman/'.$pengumuman->foto_pengumuman))) { unlink(storage_path('pengumuman/'.$pengumuman->foto_pengumuman)); } $file = $request->file('foto_pengumuman'); $fileName = time().'_'.uniqid().'.'.$file->getClientOriginalExtension(); $file->move(storage_path('pengumuman'), $fileName); $data['foto_pengumuman'] = $fileName; } $pengumuman->update($data); return response()->json([ 'success' => true, 'message' => 'Pengumuman berhasil diperbarui!', 'pengumuman' => [ 'id' => $pengumuman->id, 'nama_pengumuman' => $pengumuman->nama_pengumuman, 'deskripsi_pengumuman' => $pengumuman->deskripsi_pengumuman, 'deskripsi_pendek' => $pengumuman->deskripsi_pendek, 'foto_pengumuman_url' => $pengumuman->foto_pengumuman_url, 'status' => $pengumuman->status, 'urutan' => $pengumuman->urutan, 'updated_at' => $pengumuman->updated_at->format('d M Y'), ], ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Terjadi kesalahan: '.$e->getMessage(), ], 500); } } /** * Remove the specified resource from storage. */ public function destroy(Pengumuman $pengumuman) { try { // Hapus foto dari storage if ($pengumuman->foto_pengumuman && file_exists(storage_path('pengumuman/'.$pengumuman->foto_pengumuman))) { unlink(storage_path('pengumuman/'.$pengumuman->foto_pengumuman)); } $pengumuman->delete(); return response()->json([ 'success' => true, 'message' => 'Pengumuman berhasil dihapus!', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Terjadi kesalahan: '.$e->getMessage(), ], 500); } } /** * Update pengumuman status */ public function updateStatus(Request $request, Pengumuman $pengumuman) { $validator = Validator::make($request->all(), [ 'status' => 'required|boolean', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'message' => 'Validasi gagal', ], 422); } try { $pengumuman->update([ 'status' => $request->status, ]); return response()->json([ 'success' => true, 'message' => 'Status pengumuman berhasil diperbarui!', 'pengumuman' => [ 'id' => $pengumuman->id, 'status' => $pengumuman->status, ], ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Terjadi kesalahan: '.$e->getMessage(), ], 500); } } }