paginate(15); $peminat = Peminat::orderBy('created_at', 'desc')->get(); // Statistik Peminat (Trend 30 Hari Terakhir) $statistik = Peminat::selectRaw('DATE(created_at) as tanggal, COUNT(*) as jumlah') ->where('created_at', '>=', now()->subDays(30)) ->groupBy('tanggal') ->orderBy('tanggal', 'asc') ->get(); $labels = $statistik->pluck('tanggal')->map(function($date) { return \Carbon\Carbon::parse($date)->translatedFormat('d M'); }); $counts = $statistik->pluck('jumlah'); return view('admin.pbdp', compact('pbdp', 'peminat', 'labels', 'counts')); } public function create() { return view('admin.form-pbdp'); } public function store(Request $request) { $validated = $request->validate([ 'nama_jalur' => 'required', 'persyaratan_khusus' => 'required', 'tanggal_buka' => 'required|date', 'tanggal_tutup' => 'required|date|after:tanggal_buka', ]); $data = $request->all(); $data['id_user'] = Auth::id(); $storagePath = $this->storagePath(); if ($request->hasFile('foto')) { if (!file_exists($storagePath . '/foto_pbdp')) { mkdir($storagePath . '/foto_pbdp', 0755, true); } $filename = time() . '_' . preg_replace('/[^a-zA-Z0-9._-]/', '_', $request->file('foto')->getClientOriginalName()); $request->file('foto')->move($storagePath . '/foto_pbdp', $filename); $data['foto'] = 'foto_pbdp/' . $filename; } Pbdp::create($data); return redirect()->route('pbdp.index')->with('success', 'Data berhasil ditambahkan'); } public function edit($id_pbdp) { $pbdp = Pbdp::findOrFail($id_pbdp); return view('admin.edit-pbdp', compact('pbdp')); } public function update(Request $request, $id_pbdp) { $pbdp = Pbdp::findOrFail($id_pbdp); $request->validate([ 'nama_jalur' => 'required', 'persyaratan_khusus' => 'required', 'tanggal_buka' => 'required|date', 'tanggal_tutup' => 'required|date|after:tanggal_buka', ]); $data = $request->all(); $data['id_user'] = Auth::id(); $storagePath = $this->storagePath(); if ($request->hasFile('foto')) { if ($pbdp->foto && file_exists($storagePath . '/' . $pbdp->foto)) { unlink($storagePath . '/' . $pbdp->foto); } if (!file_exists($storagePath . '/foto_pbdp')) { mkdir($storagePath . '/foto_pbdp', 0755, true); } $filename = time() . '_' . preg_replace('/[^a-zA-Z0-9._-]/', '_', $request->file('foto')->getClientOriginalName()); $request->file('foto')->move($storagePath . '/foto_pbdp', $filename); $data['foto'] = 'foto_pbdp/' . $filename; } else { unset($data['foto']); } $pbdp->update($data); return redirect()->route('pbdp.index')->with('success', 'Data berhasil diupdate'); } public function destroy($id_pbdp) { $pbdp = Pbdp::findOrFail($id_pbdp); $storagePath = $this->storagePath(); if ($pbdp->foto && file_exists($storagePath . '/' . $pbdp->foto)) { unlink($storagePath . '/' . $pbdp->foto); } $pbdp->delete(); return redirect()->route('pbdp.index')->with('success', 'Data berhasil dihapus'); } }