has('petugas_id')) { return redirect('/') ->with('error', 'Silakan login terlebih dahulu.'); } // ===================================================== // AMBIL DATA PETUGAS // ===================================================== $petugas = DB::table('petugas') ->where('id_petugas', session('petugas_id')) ->first(); // ===================================================== // JIKA DATA PETUGAS TIDAK DITEMUKAN // ===================================================== if (!$petugas) { session()->flush(); return redirect('/') ->with('error', 'Data akun tidak ditemukan.'); } // ===================================================== // TAMPILKAN HALAMAN // ===================================================== return view('pengaturan-akun', compact('petugas')); } public function updatePasswordLangsung(Request $request) { // 1. Cek Session if (!session()->has('petugas_id')) { return response()->json([ 'success' => false, 'message' => 'Sesi Anda telah berakhir, silakan login kembali.' ]); } // 2. Ambil Data Petugas $petugas = DB::table('petugas') ->where('id_petugas', session('petugas_id')) ->first(); // 3. Validasi Password Saat Ini if (!Hash::check($request->current_password, $petugas->password)) { return response()->json([ 'success' => false, 'message' => 'Password saat ini yang Anda masukkan salah!' ]); } // 4. Validasi Password Baru (Minimal 8 Karakter) if (strlen($request->password) < 8) { return response()->json([ 'success' => false, 'message' => 'Password baru minimal harus 8 karakter.' ]); } // 5. Cek jika password baru sama dengan password lama if (Hash::check($request->password, $petugas->password)) { return response()->json([ 'success' => false, 'message' => 'Password baru tidak boleh sama dengan password lama.' ]); } // 6. Update ke Database DB::table('petugas') ->where('id_petugas', $petugas->id_petugas) ->update([ 'password' => Hash::make($request->password), 'updated_at' => now() ]); DB::table('log_aktivitas')->insert([ 'id_petugas' => $petugas->id_petugas, 'aktivitas' => 'Ganti Password', 'created_at' => now(), 'updated_at' => now() ]); return response()->json([ 'success' => true, 'message' => 'Password Anda telah berhasil diperbarui.' ]); } public function update(Request $request) { $petugas = DB::table('petugas') ->where('id_petugas', session('petugas_id')) ->first(); $request->validate([ 'nama_petugas' => 'required', 'email' => 'required|email' ]); $data = [ 'nama_petugas' => $request->nama_petugas, 'email' => $request->email, 'updated_at' => now() ]; if (!empty($request->password)) { if (Hash::check($request->password, $petugas->password)) { return redirect('/pengaturan-akun') ->with('error', 'Password baru tidak boleh sama dengan password lama.'); } $data['password'] = Hash::make($request->password); } DB::table('petugas') ->where('id_petugas', $petugas->id_petugas) ->update($data); DB::table('log_aktivitas')->insert([ 'id_petugas' => $petugas->id_petugas, 'aktivitas' => 'Ganti Password (via OTP)', 'created_at' => now(), 'updated_at' => now() ]); session([ 'nama_petugas' => $request->nama_petugas ]); return redirect('/pengaturan-akun') ->with('success', 'Pengaturan akun berhasil diperbarui'); } public function kirimOtp(Request $request) { // ===================================================== // CEK LOGIN // ===================================================== if (!session()->has('petugas_id')) { return response()->json([ 'success' => false, 'message' => 'Session login tidak ditemukan.' ]); } // ===================================================== // VALIDASI EMAIL SAJA // ===================================================== $request->validate([ 'email' => 'required|email' ]); // ===================================================== // AMBIL AKUN YANG SEDANG LOGIN // ===================================================== $petugas = DB::table('petugas') ->where('id_petugas', session('petugas_id')) ->first(); if (!$petugas) { return response()->json([ 'success' => false, 'message' => 'Data akun tidak ditemukan.' ]); } // ===================================================== // EMAIL HARUS SESUAI DENGAN AKUN LOGIN // ===================================================== if ( strtolower(trim($petugas->email)) != strtolower(trim($request->email)) ) { return response()->json([ 'success' => false, 'message' => 'Email tidak sesuai dengan akun login.' ]); } // ===================================================== // GENERATE OTP // ===================================================== $otp = rand(100000, 999999); DB::table('petugas') ->where('id_petugas', $petugas->id_petugas) ->update([ 'otp_code' => $otp, 'otp_expired_at' => Carbon::now()->addMinutes(5) ]); try { $html = '
Gunakan kode OTP berikut untuk reset password akun Anda.
OTP berlaku selama 5 menit.