auditLogModel = new AuditLogModel(); $this->userModel = new UserModel(); } /** * Display audit logs with pagination */ public function index() { // Check if user is admin if (session()->get('role') !== 'admin') { return redirect()->to('/admin/dashboard') ->with('error', 'Anda tidak memiliki akses ke halaman ini.'); } // Get search query $search = $this->request->getGet('search'); $actionFilter = $this->request->getGet('action'); $userFilter = $this->request->getGet('user'); // Build query $this->auditLogModel->select('audit_logs.*, users.username, users.email') ->join('users', 'users.id = audit_logs.user_id', 'left') ->orderBy('audit_logs.created_at', 'DESC'); // Apply search filter if (!empty($search)) { $this->auditLogModel->groupStart() ->like('audit_logs.action', $search) ->orLike('users.username', $search) ->orLike('users.email', $search) ->orLike('audit_logs.ip_address', $search) ->groupEnd(); } // Apply action filter if (!empty($actionFilter)) { $this->auditLogModel->where('audit_logs.action', $actionFilter); } // Apply user filter if (!empty($userFilter)) { $this->auditLogModel->where('audit_logs.user_id', $userFilter); } // Get paginated results $perPage = 20; $page = (int) ($this->request->getGet('page') ?? 1); $auditLogs = $this->auditLogModel->paginate($perPage, 'default', $page); $pager = $this->auditLogModel->pager; $total = $pager->getTotal(); // Get unique actions for filter dropdown $actions = $this->auditLogModel->select('action') ->distinct() ->orderBy('action', 'ASC') ->findAll(); // Get users for filter dropdown $users = $this->userModel->select('id, username, email') ->orderBy('username', 'ASC') ->findAll(); $data = [ 'title' => 'Audit Log', 'auditLogs' => $auditLogs, 'pager' => $pager, 'search' => $search, 'actionFilter' => $actionFilter, 'userFilter' => $userFilter, 'actions' => $actions, 'users' => $users, 'total' => $total, ]; return view('admin/audit-logs/index', $data); } }