'Data Media', 'type' => $request->input('type', null), 'classification' => $request->input('classification', null), 'status' => $request->input('status', null), 'edit_status' => $request->input('edit_status', null), 'address' => $request->input('address', null), 'register_year' => $request->input('register_year', null), 'register_month' => $request->input('register_month', null), 'register_date' => $request->input('register_date', null), ]); } elseif (is_role(['3'])) { $user = User::with(['role', 'company.media.journalists'])->findOrFail(Auth::id()); $data = [ 'title' => 'Data Media', 'user' => $user, ]; return view('dashboard.media.index', $data); } } public function editRequest() { if (! in_array(Auth::user()->company->media->edit_status, ['0', '3'])) { abort(404); } return view('dashboard.media.edit-request', [ 'title' => 'Permohonan Ubah Data Media', ]); } public function editRequestAction(Request $request) { try { if (! in_array(Auth::user()->company->media->edit_status, ['0', '3'])) { abort(404); } $validatedData = $request->validate([ 'edit_description' => ['required'], ], [ 'edit_description.required' => 'Deskripsi wajib diisi.', ]); if (! Auth::check()) { abort(404); } $user = User::with(['company.media'])->findOrFail(Auth::id()); $user->company->media->update([ 'edit_status' => '1', 'edit_description' => $validatedData['edit_description'], ]); } catch (\Exception $e) { return redirect()->route('dashboard.media.index')->with('failed-status', 'Gagal melakukan permohonan edit data media.'); } return redirect()->route('dashboard.media.index')->with('success-status', 'Berhasil melakukan permohonan edit data media.'); } public function edit() { if (! in_array(Auth::user()->company->media->edit_status, ['2'])) { abort(404); } $user = User::with(['role', 'company.media.journalists'])->findOrFail(Auth::id()); return view('dashboard.media.edit', [ 'title' => 'Ubah Data Media', 'user' => $user, ]); } public function update(MediaRequest $request) { $validatedData = $request->validated(); try { if (! in_array(Auth::user()->company->media->edit_status, ['2'])) { abort(404); } $media = User::with(['company.media'])->findOrFail(Auth::id())->company->media; $fileFieldMap = [ 'media_journalism_organization_doc' => 'journalism_organization_doc', 'media_press_council_certificate_doc' => 'press_council_certificate_doc', ]; $mediaFileNames = []; foreach ($fileFieldMap as $requestKey => $dbField) { if ($request->hasFile($requestKey) && filled($validatedData[$requestKey])) { $mediaFileNames[$requestKey] = store_file($validatedData[$requestKey], '/uploads/media')['randomFileName']; } else { $mediaFileNames[$requestKey] = $media->{$dbField}; } } $updatedMedia = $media->update([ 'name' => $validatedData['media_name'], 'address' => $validatedData['media_address'], 'link' => $validatedData['media_link'], 'type' => $validatedData['media_type'], 'classification' => $validatedData['media_classification'], 'journalism_organization' => $validatedData['media_journalism_organization'], 'journalism_organization_doc' => $mediaFileNames['media_journalism_organization_doc'], 'press_council_certificate' => $validatedData['media_press_council_certificate'], 'press_council_certificate_doc' => $mediaFileNames['media_press_council_certificate_doc'], 'edit_description' => null, 'edit_status' => '0', ]); } catch (\Exception $e) { return redirect()->route('dashboard.media.index')->with('failed-status', 'Gagal mengubah data media.'); } return redirect()->route('dashboard.media.index')->with('success-status', 'Berhasil mengubah data media.'); } public function show($id, $type) { $user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id)); $data = [ 'title' => 'Data Media', 'user' => $user, 'roles' => Role::all(), 'page' => 'media', 'purpose' => 'show', 'idnPage' => 'media', 'route' => 'media', 'type' => $type, ]; switch ($type) { case 'account': return view('dashboard.users.profiles.account', $data); case 'login-activities': $data['loginActivities'] = LoginHistory::where('user_id', $user->id) ->orderByDesc('id') ->simplePaginate(20); return view('dashboard.users.profiles.login-activity', $data); case 'company': return view('dashboard.users.profiles.company', $data); case 'media': return view('dashboard.users.profiles.media', $data); case 'journalists': return view('dashboard.users.profiles.journalists', $data); default: abort(404); // optional: menangani type yang tidak dikenal } } public function destroy($id) { return response()->json([ 'status' => 'warning', 'message' => 'Aksi belum tersedia.', ]); } public function process(Request $request, $id, $type) { $user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id)); if ($request->query('category') && ! in_array($request->query('category'), ['account-status', 'edit-request'])) { abort(404); } $data = [ 'title' => 'Data Media', 'user' => $user, 'roles' => Role::all(), 'page' => 'media', 'purpose' => 'process', 'idnPage' => 'media', 'route' => 'media', 'type' => $type, 'category' => $request->query('category', null), ]; switch ($type) { case 'account': return view('dashboard.users.profiles.account', $data); case 'login-activities': $data['loginActivities'] = LoginHistory::where('user_id', $user->id) ->orderByDesc('id') ->simplePaginate(20); return view('dashboard.users.profiles.login-activity', $data); case 'company': return view('dashboard.users.profiles.company', $data); case 'media': return view('dashboard.users.profiles.media', $data); case 'journalists': return view('dashboard.users.profiles.journalists', $data); default: abort(404); // atau bisa redirect atau response lainnya jika $type tidak valid } } public function processAcceptAction(Request $request, $id, $type, $category) { $user = User::with(['company'])->findOrFail(decrypt_id($id)); if (! in_array($category, ['account-status', 'edit-request']) || ! is_role(['1'])) { abort(404); } if (is_role(['1']) && $category === 'edit-request') { $user->company->media->update([ 'edit_status' => '2', ]); } return response()->json([ 'message' => 'Berhasil menyetujui permohonan edit media.', ]); } public function processRejectAction(Request $request, $id, $type, $category) { $user = User::with(['company'])->findOrFail(decrypt_id($id)); if (! in_array($category, ['account-status', 'edit-request']) || ! is_role(['1'])) { abort(404); } if (is_role(['1'])) { $validatedData = $request->validate([ 'rejection_reason' => ['required'], ], [ 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', ]); if ($category === 'edit-request' && $user->company->media->edit_status === '1') { $user->company->media->update([ 'edit_status' => '3', 'edit_rejection_reason' => $validatedData['rejection_reason'], ]); } } return redirect()->route('dashboard.media.index')->with('success-status', 'Berhasil menolak permohonan edit media.'); } public function export(Request $request) { try { $type = $request->input('type', null); $classification = $request->input('classification', null); $status = $request->input('status', null); $edit_status = $request->input('edit_status', null); $address = $request->input('address', null); $register_year = $request->input('register_year', null); $register_month = $request->input('register_month', null); $register_date = $request->input('register_date', null); $formattedNow = Carbon::parse(now())->locale('id')->translatedFormat('d-m-Y'); return Excel::download(new MediaExport($type, $classification, $status, $edit_status, $address, $register_year, $register_month, $register_date), 'media-'.$formattedNow.'.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.media.index', $filterField); } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal melakukan proses filter data.'); } } public function printData($id) { try { $media = Media::with(['user.role', 'company'])->findOrFail(decrypt_id($id)); $pdf = Pdf::loadView('dashboard.media.print', compact('media')); return $pdf->stream('media-'.slugify($media->name).'.pdf'); } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal melakukan proses print data.'); } } }