From 092bb5332412393e356402860d117887f40c5476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Hallenbarter?= Date: Wed, 29 Apr 2026 16:59:52 +0200 Subject: [PATCH] added loging --- .../Api/V1/ActivityLogController.php | 2 +- app/Controllers/Api/V1/TodoController.php | 50 +++++++++++++++++++ app/Models/ActivityLogModel.php | 12 ++--- app/Models/CategoryModel.php | 7 --- app/Models/LoggableTrait.php | 2 +- app/Models/ProjectModel.php | 7 --- app/Models/RecurringTaskModel.php | 7 --- app/Models/TodoModel.php | 7 --- app/Models/UserModel.php | 7 --- 9 files changed, 55 insertions(+), 46 deletions(-) diff --git a/app/Controllers/Api/V1/ActivityLogController.php b/app/Controllers/Api/V1/ActivityLogController.php index 8d08324..09b6cde 100644 --- a/app/Controllers/Api/V1/ActivityLogController.php +++ b/app/Controllers/Api/V1/ActivityLogController.php @@ -21,7 +21,7 @@ class ActivityLogController extends BaseController public function index() { $userId = $this->getUserId(); - $limit = $this->request->getVar('limit') ?? 50; + $limit = (int)($this->request->getVar('limit') ?? 50); $logs = $this->activityLogModel->getByUser($userId, $limit); return $this->successResponse($logs, 'Activity logs retrieved successfully'); diff --git a/app/Controllers/Api/V1/TodoController.php b/app/Controllers/Api/V1/TodoController.php index 433e34d..b492c52 100644 --- a/app/Controllers/Api/V1/TodoController.php +++ b/app/Controllers/Api/V1/TodoController.php @@ -62,6 +62,23 @@ class TodoController extends BaseController ]; $this->todoModel->insert($data); + + // Manually log the activity + try { + $activityLogModel = new \App\Models\ActivityLogModel(); + $activityLogModel->logActivity([ + 'user_id' => $userId, + 'action' => 'todo_created', + 'entity_type' => 'todo', + 'entity_id' => $data['id'], + 'details' => json_encode(['action' => 'created', 'title' => $data['title']]), + 'ip_address' => $this->request->getIPAddress(), + 'user_agent' => $this->request->getUserAgent()->getAgentString(), + ]); + } catch (\Exception $e) { + log_message('error', 'Failed to log activity: ' . $e->getMessage()); + } + $todo = $this->todoModel->getByUserWithCategories($userId, $data['id']); return $this->successResponse($todo, 'Todo created successfully', 201); @@ -105,6 +122,23 @@ class TodoController extends BaseController } $this->todoModel->update($id, $updateData); + + // Manually log the activity + try { + $activityLogModel = new \App\Models\ActivityLogModel(); + $activityLogModel->logActivity([ + 'user_id' => $userId, + 'action' => 'todo_updated', + 'entity_type' => 'todo', + 'entity_id' => $id, + 'details' => json_encode(['action' => 'updated', 'title' => $todo['title'] ?? 'Unknown']), + 'ip_address' => $this->request->getIPAddress(), + 'user_agent' => $this->request->getUserAgent()->getAgentString(), + ]); + } catch (\Exception $e) { + log_message('error', 'Failed to log activity: ' . $e->getMessage()); + } + $todo = $this->todoModel->getByUserWithCategories($userId, $id); return $this->successResponse($todo, 'Todo updated successfully'); @@ -124,6 +158,22 @@ class TodoController extends BaseController } $this->todoModel->delete($id); + + // Manually log the activity + try { + $activityLogModel = new \App\Models\ActivityLogModel(); + $activityLogModel->logActivity([ + 'user_id' => $userId, + 'action' => 'todo_deleted', + 'entity_type' => 'todo', + 'entity_id' => $id, + 'details' => json_encode(['action' => 'deleted', 'title' => $todo['title'] ?? 'Unknown']), + 'ip_address' => $this->request->getIPAddress(), + 'user_agent' => $this->request->getUserAgent()->getAgentString(), + ]); + } catch (\Exception $e) { + log_message('error', 'Failed to log activity: ' . $e->getMessage()); + } return $this->successResponse(null, 'Todo deleted successfully'); } diff --git a/app/Models/ActivityLogModel.php b/app/Models/ActivityLogModel.php index 1b9bc09..003567a 100644 --- a/app/Models/ActivityLogModel.php +++ b/app/Models/ActivityLogModel.php @@ -34,9 +34,6 @@ class ActivityLogModel extends Model // Log an activity public function logActivity($data) { - // Disable events to prevent any recursive logging - $this->skipEvents(); - if (!isset($data['id'])) { $data['id'] = $this->generateUuid(); } @@ -44,12 +41,9 @@ class ActivityLogModel extends Model $data['created_at'] = date('Y-m-d H:i:s'); } - $result = $this->insert($data); - - // Re-enable events - $this->skipEvents(false); - - return $result; + // Use builder directly to avoid triggering events + $builder = $this->db->table($this->table); + return $builder->insert($data); } // Get logs by user diff --git a/app/Models/CategoryModel.php b/app/Models/CategoryModel.php index a775a0f..d3e7dfb 100644 --- a/app/Models/CategoryModel.php +++ b/app/Models/CategoryModel.php @@ -6,8 +6,6 @@ use CodeIgniter\Model; class CategoryModel extends Model { - use LoggableTrait; - protected $table = 'categories'; protected $primaryKey = 'id'; protected $useAutoIncrement = false; @@ -30,9 +28,4 @@ class CategoryModel extends Model 'user_id' => 'required', 'name' => 'required|max_length[255]', ]; - - protected function getEntityType(): string - { - return 'category'; - } } diff --git a/app/Models/LoggableTrait.php b/app/Models/LoggableTrait.php index 822ff6b..52bbd0f 100644 --- a/app/Models/LoggableTrait.php +++ b/app/Models/LoggableTrait.php @@ -134,7 +134,7 @@ trait LoggableTrait { try { $request = \Config\Services::request(); - return $request->getUserAgent()->toString(); + return $request->getUserAgent()->getAgentString(); } catch (\Exception $e) { return 'CLI/Script'; } diff --git a/app/Models/ProjectModel.php b/app/Models/ProjectModel.php index c5691f7..da78b0b 100644 --- a/app/Models/ProjectModel.php +++ b/app/Models/ProjectModel.php @@ -6,8 +6,6 @@ use CodeIgniter\Model; class ProjectModel extends Model { - use LoggableTrait; - protected $table = 'projects'; protected $primaryKey = 'id'; protected $useAutoIncrement = false; @@ -30,9 +28,4 @@ class ProjectModel extends Model 'user_id' => 'required', 'name' => 'required|max_length[255]', ]; - - protected function getEntityType(): string - { - return 'project'; - } } diff --git a/app/Models/RecurringTaskModel.php b/app/Models/RecurringTaskModel.php index 945073d..c209c3d 100644 --- a/app/Models/RecurringTaskModel.php +++ b/app/Models/RecurringTaskModel.php @@ -6,8 +6,6 @@ use CodeIgniter\Model; class RecurringTaskModel extends Model { - use LoggableTrait; - protected $table = 'recurring_tasks'; protected $primaryKey = 'id'; protected $useAutoIncrement = false; @@ -35,11 +33,6 @@ class RecurringTaskModel extends Model 'schedule' => 'required|in_list[daily,weekly,monthly,custom]', ]; - protected function getEntityType(): string - { - return 'recurring_task'; - } - // Get recurring tasks with categories public function getWithCategories($taskId = null) { diff --git a/app/Models/TodoModel.php b/app/Models/TodoModel.php index 3a484f4..bb7c8b8 100644 --- a/app/Models/TodoModel.php +++ b/app/Models/TodoModel.php @@ -6,8 +6,6 @@ use CodeIgniter\Model; class TodoModel extends Model { - use LoggableTrait; - protected $table = 'todos'; protected $primaryKey = 'id'; protected $useAutoIncrement = false; @@ -39,11 +37,6 @@ class TodoModel extends Model 'status' => 'permit_empty|in_list[open,in_progress,completed,archived]', ]; - protected function getEntityType(): string - { - return 'todo'; - } - // Get todos with categories public function getWithCategories($todoId = null) { diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php index ef1145f..177f32e 100644 --- a/app/Models/UserModel.php +++ b/app/Models/UserModel.php @@ -6,8 +6,6 @@ use CodeIgniter\Model; class UserModel extends Model { - use LoggableTrait; - protected $table = 'users'; protected $primaryKey = 'id'; protected $useAutoIncrement = false; @@ -40,9 +38,4 @@ class UserModel extends Model 'is_unique' => 'This email is already registered', ], ]; - - protected function getEntityType(): string - { - return 'user'; - } }