diff --git a/app/Config/Routes.php b/app/Config/Routes.php index d2f5bdc..0c295b4 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -48,6 +48,7 @@ $routes->get('admin/doctors/data', 'Admin::getDoctors'); $routes->get('admin/patients/data', 'Admin::getPatients'); $routes->get('/admin/activity-log', 'ActivityLog::index'); $routes->get('/admin/activity/analytics', 'ActivityLog::analytics'); +$routes->post('/admin/activity-log/clear', 'ActivityLog::clear'); // $routes->post('/admin/activity-log/datatable', 'ActivityLog::datatable'); // $routes->get('/admin/activity-log/summary', 'ActivityLog::getSummary'); // $routes->get('/admin/activity-log/critical', 'ActivityLog::getCritical'); diff --git a/app/Controllers/ActivityLog.php b/app/Controllers/ActivityLog.php index 482bcf2..a0f3e1c 100644 --- a/app/Controllers/ActivityLog.php +++ b/app/Controllers/ActivityLog.php @@ -34,9 +34,15 @@ class ActivityLog extends BaseController // Get filtered logs $logs = $activityModel->getFilteredLogs($filters, 200); + // Debug: Check database connection and count + $db = \Config\Database::connect(); + $totalInDb = $db->table('activity_logs')->countAll(); + log_message('debug', 'Activity logs in database: ' . $totalInDb . ', retrieved: ' . count($logs)); + return view('admin/activity_log', [ 'logs' => $logs, 'totalLogs' => count($logs), + 'totalInDb' => $totalInDb, 'actionSummary' => $activityModel->getActionSummary(), 'roleSummary' => $activityModel->getRoleSummary(), 'filters' => [ @@ -67,6 +73,24 @@ class ActivityLog extends BaseController ]); } + public function clear() + { + if ($r = $this->requireRole('admin')) { + return $r; + } + + if ($this->request->getMethod() === 'post') { + $activityModel = new ActivityLogModel(); + if ($activityModel->clearAll()) { + return redirect()->to(base_url('admin/activity-log'))->with('success', 'All activity logs have been cleared.'); + } else { + return redirect()->to(base_url('admin/activity-log'))->with('error', 'Failed to clear activity logs.'); + } + } + + return redirect()->to(base_url('admin/activity-log')); + } + public function analytics() { if ($r = $this->requireRole('admin')) { diff --git a/app/Controllers/Auth.php b/app/Controllers/Auth.php index 3ef184c..53e39e2 100644 --- a/app/Controllers/Auth.php +++ b/app/Controllers/Auth.php @@ -96,7 +96,10 @@ class Auth extends BaseController ]); $logModel = new ActivityLogModel(); - $logModel->log('login', "User logged in as {$user['role']}", 'user', (int) $user['id']); + $result = $logModel->log('login', "User logged in as {$user['role']}", 'user', (int) $user['id']); + if (!$result) { + log_message('error', 'Failed to log login activity for user ' . $user['id']); + } if ($user['role'] === 'admin') { return redirect()->to(site_url('admin/dashboard')); diff --git a/app/Models/ActivityLogModel.php b/app/Models/ActivityLogModel.php index 472747c..382aed6 100644 --- a/app/Models/ActivityLogModel.php +++ b/app/Models/ActivityLogModel.php @@ -52,7 +52,7 @@ class ActivityLogModel extends Model $validTargetTypes = ['admin', 'doctor', 'patient']; $targetUserType = in_array($targetType, $validTargetTypes, true) ? $targetType : null; - return (bool) $this->insert([ + $data = [ 'ip' => $ipAddress, 'action' => $action, 'description' => $description, @@ -62,7 +62,18 @@ class ActivityLogModel extends Model 'target_user_type' => $targetUserType, 'activity_page' => $request->getPath(), 'activity_at' => date('Y-m-d H:i:s'), - ]); + ]; + + try { + $result = $this->insert($data); + if (!$result) { + log_message('error', 'Failed to insert activity log: ' . json_encode($data) . ' - Errors: ' . json_encode($this->errors())); + } + return (bool) $result; + } catch (\Exception $e) { + log_message('error', 'Exception in ActivityLogModel::log: ' . $e->getMessage()); + return false; + } } public function getFilteredLogs(array $filters = [], int $limit = 200): array @@ -200,4 +211,9 @@ class ActivityLogModel extends Model ->orderBy('activity_at', 'DESC') ->findAll($limit); } + + public function clearAll(): bool + { + return $this->truncate(); + } } diff --git a/app/Views/admin/activity_analytics.php b/app/Views/admin/activity_analytics.php index 1979d6d..9a23c1f 100644 --- a/app/Views/admin/activity_analytics.php +++ b/app/Views/admin/activity_analytics.php @@ -78,16 +78,16 @@ function formatLabel($label) {

Total Actions

-
+

-

Active Roles

+

Activity Roles

diff --git a/app/Views/admin/activity_log.php b/app/Views/admin/activity_log.php index 196325f..efda7c2 100644 --- a/app/Views/admin/activity_log.php +++ b/app/Views/admin/activity_log.php @@ -118,6 +118,20 @@
+ + getFlashdata('success')): ?> + + + getFlashdata('error')): ?> + + +
@@ -194,7 +208,7 @@
Total Entries
-

+

(DB: )

@@ -230,6 +244,9 @@
View Analytics +
+ +