'Data Pengguna', 'role' => $request->input('role', null), 'status' => $request->input('status', null), ]); } public function create() { return view('dashboard.users.create', [ 'title' => 'Buat Pengguna Baru', 'roles' => Role::all(), ]); } public function store(UserRequest $request) { $validatedData = $request->validated(); try { User::create($validatedData); } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal membuat pengguna baru.'); } return redirect()->back()->with('success-status', 'Berhasil membuat pengguna baru.'); } public function edit($id) { $user = User::with(['role'])->findOrFail(decrypt_id($id)); return view('dashboard.users.edit', [ 'title' => 'Ubah Pengguna', 'user' => $user, 'roles' => Role::all(), ]); } public function update(UserRequest $request, $id) { $validatedData = $request->validated(); try { $user = User::findOrFail(decrypt_id($id)); $user->update($validatedData); } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal mengubah pengguna.'); } return redirect()->back()->with('success-status', 'Berhasil mengubah pengguna.'); } public function show($id, $type) { $user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id)); $data = [ 'title' => 'Profile Pengguna', 'user' => $user, 'roles' => Role::all(), 'page' => 'show-user', '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); } } public function resetPassword($id) { $user = User::with(['role'])->findOrFail(decrypt_id($id)); return view('dashboard.users.reset-password', [ 'title' => 'Reset Password', 'page' => 'reset', 'user' => $user, ]); } public function resetPasswordAction(ResetPasswordRequest $request, $id) { $validatedData = $request->validated(); try { User::findOrFail(decrypt_id($id))->update([ 'password' => $validatedData['password'], ]); } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal mereset password pengguna.'); } return redirect()->back()->with('success-status', 'Berhasil mereset password pengguna.'); } public function destroy($id) { try { $user = User::with(['company.media.journalists'])->findOrFail(decrypt_id($id)); if ($user->role_id == '3') { if ($user->company) { $company = $user->company; if ($company->media) { $media = $company->media; if ($media->journalists) { $media->journalists->delete(); } $media->delete(); } $company->delete(); } } $user->delete(); return response()->json(['message' => 'Berhasil menghapus user beserta data terkait.']); } catch (\Exception $e) { return response()->json(['message' => 'Gagal menghapus user atau data terkait.'], 500); } } public function profile($type) { $data = [ 'title' => 'Detail Akun', 'user' => Auth::user(), 'roles' => Role::all(), 'page' => 'profile', 'type' => $type, ]; switch ($type) { case 'account': return view('dashboard.users.profiles.account', $data); case 'login-activities': $data['loginActivities'] = LoginHistory::where('user_id', Auth::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 handling lainnya jika tipe tidak dikenali } } public function filter(Request $request) { $filteredRequest = $request->except('_token'); $filterField = array_filter($filteredRequest, function ($value) { return filled($value); }); return redirect()->route('dashboard.users.index', $filterField); } public function process($id, $type, $process) { $user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id)); $data = [ 'title' => 'Profile Pengguna', 'user' => $user, 'roles' => Role::all(), 'page' => 'process', 'type' => $type, 'process' => $process, ]; 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); // untuk menangani tipe yang tidak dikenal } } public function statusAction(Request $request, $id, $action) { $user = User::findOrFail(decrypt_id($id)); try { if ($user->status === '0' && Auth::check() && is_role(['1'])) { if ($action == 'accept') { $user->update([ 'status' => '1', ]); Mail::to($user->email)->send(new AccountVerification($user, 'accepted')); return response()->json(['message' => 'Berhasil menyetujui pengguna.']); } elseif ($action == 'reject') { $validatedData = $request->validate([ 'rejection_reason' => ['required'], ], [ 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', ]); $user->update([ 'status' => '3', ]); $user->company->update([ 'rejection_reason' => $validatedData['rejection_reason'], ]); Mail::to($user->email)->send(new AccountVerification($user, 'rejected', strip_tags($validatedData['rejection_reason']))); return redirect()->back()->with('success-status', 'Berhasil menolak pengguna.'); } } } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Proses gagal.'); } } public function setting() { $user = Auth::user(); return view('dashboard.users.setting', [ 'title' => 'Pengaturan Akun', 'user' => $user, ]); } public function settingAction(AccountSettingRequest $request) { $validatedData = $request->validated(); try { $user = User::findOrFail(Auth::id()); $user->update([ 'name' => $validatedData['name'], 'email' => $validatedData['email'], ]); } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal mengubah data akun.'); } return redirect()->back()->with('success-status', 'Berhasil mengubah data akun.'); } public function changePassword() { $user = User::with(['role'])->findOrFail(Auth::id()); return view('dashboard.users.reset-password', [ 'title' => 'Ubah Password', 'page' => 'change', 'user' => $user, ]); } public function changePasswordAction(ChangePasswordRequest $request) { $validatedData = $request->validated(); try { $user = User::findOrFail(Auth::id()); $user->update([ 'password' => $validatedData['password'], ]); } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal mengubah password.'); } return redirect()->route('dashboard.users.setting')->with('success-status', 'Berhasil mengubah password.'); } }