'Data Berita', 'category' => $request->input('category', null), 'year' => $request->input('year', null), 'month' => $request->input('month', null), 'date' => $request->input('date', null), ]); } public function create(){ return view('dashboard.news.create', [ 'title' => 'Buat Berita Baru' ]); } public function store(NewsRequest $request){ $validatedData = $request->validated(); $isNewsExists = News::withTrashed()->where('slug', $validatedData['slug'])->first(); if($isNewsExists){ return redirect()->back()->with('failed-status', 'Maaf, berita dengan judul tersebut sudah pernah ditambahkan.'); } try{ if($request->has('image')){ $validatedData['image'] = store_file($validatedData['image'], '/uploads/news')['randomFileName']; } News::create($validatedData); }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal membuat berita baru.'); } return redirect()->route('dashboard.news.index')->with('success-status', 'Berhasil membuat berita baru.'); } public function edit($id){ $news = News::findOrFail(decrypt_id($id)); return view('dashboard.news.edit', [ 'title' => 'Ubah Berita', 'news' => $news ]); } public function update(NewsRequest $request, $id){ $validatedData = $request->validated(); try{ $news = News::findOrFail(decrypt_id($id)); if($request->has('image')){ delete_file('uploads/news/'.$news->image); $validatedData['image'] = store_file($validatedData['image'], '/uploads/news')['randomFileName']; }else{ $validatedData['image'] = $news->image; } $isNewsExists = News::where('slug', $validatedData['slug'])->first(); if($isNewsExists && $isNewsExists->id !== $news->id){ return redirect()->back()->with('failed-status', 'Maaf, berita dengan judul tersebut sudah pernah ditambahkan.'); } $news->update($validatedData); }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal mengubah berita.'); } return redirect()->back()->with('success-status', 'Berhasil mengubah berita.'); } public function show($id){ $news = News::findOrFail(decrypt_id($id)); return view('dashboard.news.show', [ 'title' => 'Detail Berita', 'news' => $news ]); } public function destroy($id) { try { $news = News::findOrFail(decrypt_id($id)); DB::transaction(function () use ($id, $news) { $newSlug = Str::limit($news->slug . '-deleted-' . now()->timestamp, 191); $news->update([ 'slug' => $newSlug, ]); $news->delete(); }); return response()->json(['message' => 'Berhasil menghapus berita.']); } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) { return response()->json(['message' => 'Berita tidak ditemukan.'], 404); } catch (\Exception $e) { Log::error('Gagal menghapus berita: ' . $e->getMessage()); return response()->json(['message' => 'Gagal menghapus berita.'], 500); } } public function export(Request $request) { try{ $category = $request->input('category', 'all'); $year = $request->input('year', null); $month = $request->input('month', null); $date = $request->input('date', null); return Excel::download(new NewsExport($category, $year, $month, $date), 'news.xlsx'); }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal melakukan proses export data.'); } } public function filter(Request $request){ try{ $filteredRequest = $request->except('_token'); $filterField = array_filter($filteredRequest, function ($value) { return filled($value); }); return redirect()->route('dashboard.news.index', $filterField); }catch(\Exception $e){ return redirect()->back()->with('status-failed', 'Gagal melakukan proses filtering data.'); } } public function printData($slug){ try{ $news = News::where('slug', $slug)->first(); $pdf = Pdf::loadView('dashboard.news.print', compact('news')); return $pdf->stream('berita-'.$news->slug.'.pdf'); }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal melakukan proses print data.'); } } public function checkLink(Request $request) { $linkExists = News::where('link', $request->link)->exists(); return response()->json([ 'exists' => $linkExists ]); } }