get('level'); $guruQuery = DB::table('guru') ->join('users', 'guru.user_id', '=', 'users.id') ->select( 'guru.id', 'users.email as username', 'guru.nama as nama', DB::raw("'" . self::LEVEL_GURU . "' as level"), 'users.is_active' ); $siswaQuery = DB::table('siswa') ->join('users', 'siswa.user_id', '=', 'users.id') ->select( 'siswa.id', 'users.email as username', 'siswa.nama as nama', DB::raw("'" . self::LEVEL_SISWA . "' as level"), 'users.is_active' ); $union = $guruQuery->unionAll($siswaQuery); $users = DB::query()->fromSub($union, 'users'); if ($levelFilter) { $users->where('level', $levelFilter); } $page = $request->get('page', 1); $perPage = 10; $allUsers = $users->get(); $currentPageItems = $allUsers->slice(($page - 1) * $perPage, $perPage)->values(); $paginatedUsers = new LengthAwarePaginator( $currentPageItems, $allUsers->count(), $perPage, $page, ['path' => $request->url(), 'query' => $request->query()] ); $data['users'] = $paginatedUsers; return view('admin.user.index', $data)->with('success', session('success')); } catch (\Exception $e) { Log::error('Gagal memuat data user: ' . $e->getMessage()); return back()->withErrors('Terjadi kesalahan saat memuat data user.'); } } public function edit(Request $request, $id) { try { $level = $request->level; if ($level == self::LEVEL_GURU) { $userDetail = DB::table('guru')->where('id', $id)->first(); } elseif ($level == self::LEVEL_SISWA) { $userDetail = DB::table('siswa')->where('id', $id)->first(); } else { return back()->with('error', 'Level tidak dikenali'); } if (!$userDetail) { return back()->with('error', 'User tidak ditemukan'); } $user = DB::table('users')->where('id', $userDetail->user_id)->first(); if (!$user) { return back()->with('error', 'User utama tidak ditemukan'); } return view('admin.user.edit', [ 'level' => $level, 'id' => $id, 'userDetail' => $userDetail, 'user' => $user, ]); } catch (\Exception $e) { Log::error('Gagal membuka halaman edit user: ' . $e->getMessage()); return back()->withErrors('Terjadi kesalahan saat membuka halaman edit.'); } } public function update(Request $request, $id) { try { $level = $request->level; if ($level == self::LEVEL_GURU) { $userDetail = DB::table('guru')->where('id', $id)->first(); } elseif ($level == self::LEVEL_SISWA) { $userDetail = DB::table('siswa')->where('id', $id)->first(); } else { return back()->with('error', 'Level tidak dikenali'); } if (!$userDetail) { return back()->with('error', 'User tidak ditemukan'); } $userId = $userDetail->user_id; $request->validate([ 'email' => 'required|email|unique:users,email,' . $userId, 'password' => 'nullable|min:6', ]); $dataUpdate = [ 'email' => $request->email, 'updated_at' => now(), ]; if ($request->filled('password')) { $dataUpdate['password'] = bcrypt($request->password); } DB::table('users')->where('id', $userId)->update($dataUpdate); return redirect()->route('admin.users.index')->with('success', 'User berhasil diperbarui'); } catch (\Exception $e) { Log::error('Gagal memperbarui user: ' . $e->getMessage()); return back()->withErrors('Terjadi kesalahan saat memperbarui user.'); } } public function destroy(Request $request, $id) { try { $level = $request->level; if ($level == self::LEVEL_GURU) { DB::table('guru')->where('id', $id)->delete(); } elseif ($level == self::LEVEL_SISWA) { DB::table('siswa')->where('id', $id)->delete(); } else { return back()->with('error', 'Level tidak dikenali'); } return back()->with('success', 'User berhasil dihapus'); } catch (\Exception $e) { Log::error('Gagal menghapus user: ' . $e->getMessage()); return back()->withErrors('Terjadi kesalahan saat menghapus user.'); } } public function toggleAktif(Request $request, $id) { try { switch ($request->level) { case self::LEVEL_GURU: $tbl = 'guru'; break; case self::LEVEL_SISWA: $tbl = 'siswa'; break; default: return back()->with('error', 'Level tidak valid'); } $userDetail = DB::table($tbl)->where('id', $id)->first(); if (!$userDetail) { return back()->with('error', 'User tidak ditemukan'); } $user = DB::table('users')->where('id', $userDetail->user_id)->first(); if (!$user) { return back()->with('error', 'User utama tidak ditemukan'); } $newStatus = $user->is_active ? 0 : 1; DB::table('users')->where('id', $userDetail->user_id)->update(['is_active' => $newStatus]); return back()->with('success', 'Status aktifasi berhasil diubah'); } catch (\Exception $e) { Log::error('Gagal mengubah status user: ' . $e->getMessage()); return back()->withErrors('Terjadi kesalahan saat mengubah status aktifasi.'); } } }