'Data Jurnalis' ]); }else if(is_role(['3'])){ $user = User::with(['role', 'company.media.journalists'])->findOrFail(Auth::id()); return view('dashboard.journalists.index',[ 'title' => 'Data Jurnalis', 'user' => $user, 'journalists' => $user->company->media->journalists ->where('approved_status', '1') ->whereNull('deleted_at'), ]); } } public function submission(){ return view('dashboard.journalists.submission',[ 'title' => 'Data Permohonan Penambahan Jurnalis' ]); } public function processSubmission($id){ $journalist = Journalist::with(['media.company'])->findOrFail(decrypt_id($id)); return view('dashboard.journalists.process-submission',[ 'title' => 'Data Permohonan Penambahan Jurnalis', 'journalist' => $journalist, ]); } public function processSubmissionAction(Request $request, $id, $action){ $journalist = Journalist::with(['media.company'])->findOrFail(decrypt_id($id)); if($action === 'accept'){ $acceptedJournalist = $journalist->update([ 'approved_status' => '1', 'approved_at' => now(), ]); if($acceptedJournalist){ return response()->json(['message' => 'Berhasil menyetujui jurnalis.']); } }else if($action === 'reject'){ $validatedData = $request->validate([ 'rejection_reason' => ['required'], ], [ 'rejection_reason.required' => 'Deskripsi wajib diisi.', ]); $rejectedJournalist = $journalist->update([ 'approved_status' => '2', 'rejection_reason' => $validatedData['rejection_reason'] ]); return redirect()->route('dashboard.journalists.submissions')->with('success-status', 'Berhasil menolak jurnalis.'); } } public function create(){ return view('dashboard.journalists.create',[ 'title' => 'Tambah Data Jurnalis' ]); } public function store(JournalistRequest $request){ $validatedData = $request->validated(); $fileFieldMap = [ 'journalist_ukw_sertificate_doc' => 'ukw_sertificate_doc', 'journalist_press_card_doc' => 'press_card_doc', ]; $journalistFileNames = []; foreach ($fileFieldMap as $requestKey => $dbField) { if ($request->hasFile($requestKey) && filled($validatedData[$requestKey])) { $journalistFileNames[$requestKey] = store_file($validatedData[$requestKey], '/uploads/journalists', 'public')['randomFileName']; }else{ $journalistFileNames[$requestKey] = null; } } $createdJournalist = Journalist::create([ 'name' => $validatedData['journalist_name'], 'email' => $validatedData['journalist_email'], 'phone_number' => $validatedData['journalist_phone_number'], 'press_card' => $validatedData['journalist_press_card'], 'press_card_doc' => $journalistFileNames['journalist_press_card_doc'], 'ukw_sertificate' => $validatedData['journalist_ukw_sertificate'], 'ukw_sertificate_doc' => $journalistFileNames['journalist_ukw_sertificate_doc'], 'approved_status' => '0', 'approved_at' => null, 'edit_description' => null, 'edit_status' => '0', 'media_id' => Auth::user()->company->media->id ]); if($createdJournalist){ return redirect()->route('dashboard.journalists.index')->with('success-status', 'Berhasil menambahkan jurnalis.')->with('created-journalist', true); }else{ return redirect()->route('dashboard.journalists.index')->with('failed-status', 'Gagal menambahkan jurnalis.'); } } public function editRequest($id){ $journalist = Journalist::findOrFail(decrypt_id($id)); if(!in_array($journalist->edit_status, ['0', '3'])){ abort(404); } return view('dashboard.journalists.edit-request', [ 'title' => 'Permohonan Ubah Data Jurnalis', 'journalist' => $journalist ]); } public function editRequestAction(Request $request, $id){ $journalist = Journalist::findOrFail(decrypt_id($id)); if(!in_array($journalist->edit_status, ['0', '3'])){ abort(404); } $validatedData = $request->validate([ 'edit_description' => ['required'], ], [ 'edit_description.required' => 'Deskripsi wajib diisi.', ]); if(!Auth::check()){ abort(404); } $updatedJournalist = $journalist->update([ 'edit_status' => '1', 'edit_description' => $validatedData['edit_description'] ]); if($updatedJournalist){ return redirect()->route('dashboard.journalists.index')->with('success-status', 'Berhasil melakukan permohonan edit data jurnalis.'); }else{ return redirect()->route('dashboard.journalists.index')->with('failed-status', 'Gagal melakukan permohonan edit data jurnalis.'); } } public function processEdit($id){ $journalist = Journalist::findOrFail(decrypt_id($id)); if(!in_array($journalist->edit_status, ['1', '2']) || !is_role(['1'])){ abort(404); } return view('dashboard.journalists.show', [ 'title' => 'Permohonan Ubah Data Jurnalis', 'journalist' => $journalist, 'purpose' => 'processEdit' ]); } public function processEditAction(Request $request, $id, $action){ $journalist = Journalist::findOrFail(decrypt_id($id)); if(!in_array($journalist->edit_status, ['1']) || !is_role(['1'])){ abort(404); } if(is_role(['1'])){ if($action === 'accept'){ $acceptedJournalist = $journalist->update([ 'edit_status' => '2', ]); if($acceptedJournalist){ return response()->json(['message' => 'Berhasil menyetujui permohonan edit jurnalis.']); } }else if($action === 'reject'){ $validatedData = $request->validate([ 'edit_rejection_reason' => ['required'], ], [ 'edit_rejection_reason.required' => 'Alasan penolakan wajib diisi.', ]); $journalist->update([ 'edit_status' => '3', 'edit_rejection_reason' => $validatedData['edit_rejection_reason'] ]); return redirect()->route('dashboard.journalists.index')->with('success-status', 'Berhasil menolak permohonan edit jurnalis.'); } } } public function edit(){} public function update(){} public function show($id){ $journalist = Journalist::findOrFail(decrypt_id($id)); return view('dashboard.journalists.show', [ 'title' => 'Detail Jurnalis', 'journalist' => $journalist ]); } public function destroy($id){ try { $journalist = Journalist::findOrFail(decrypt_id($id)); $user = User::with(['company.media.journalists'])->findOrFail(Auth::id()); $journalists = optional($user->company?->media)->journalists?->whereNull('deleted_at')->where('approved_status', '1'); if ($journalists->count() <= 1) { return response()->json([ 'status' => 'failed', 'message' => 'Media harus punya minimal satu jurnalis.' ]); } $journalist->delete(); return response()->json(['message' => 'Berhasil menghapus jurnalis.']); } catch (\Exception $e) { return response()->json(['message' => 'Gagal menghapus jurnalis.'], 500); } } }