'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) { // dd('hai'); $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 ($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, ]); } }