2026-04-17 10:46:29 +05:30

99 lines
3.6 KiB
PHP

<?php
namespace App\Controllers;
use App\Models\ActivityLogModel;
class ActivityLog extends BaseController
{
public function index()
{
if ($r = $this->requireRole('admin')) {
return $r;
}
$activityModel = new ActivityLogModel();
// Get filter parameters
$search = $this->request->getGet('search') ?? '';
$action = $this->request->getGet('action') ?? '';
$userType = $this->request->getGet('user_type') ?? '';
$dateFrom = $this->request->getGet('date_from') ?? '';
$dateTo = $this->request->getGet('date_to') ?? '';
$ip = $this->request->getGet('ip') ?? '';
// Build filters array
$filters = [];
if (!empty($search)) $filters['search'] = $search;
if (!empty($action)) $filters['action'] = $action;
if (!empty($userType)) $filters['user_type'] = $userType;
if (!empty($dateFrom)) $filters['date_from'] = $dateFrom;
if (!empty($dateTo)) $filters['date_to'] = $dateTo;
if (!empty($ip)) $filters['ip'] = $ip;
// Get filtered logs
$logs = $activityModel->getFilteredLogs($filters, 200);
return view('admin/activity_log', [
'logs' => $logs,
'totalLogs' => count($logs),
'actionSummary' => $activityModel->getActionSummary(),
'roleSummary' => $activityModel->getRoleSummary(),
'filters' => [
'search' => $search,
'action' => $action,
'user_type' => $userType,
'date_from' => $dateFrom,
'date_to' => $dateTo,
'ip' => $ip,
],
'availableActions' => $activityModel->getAvailableActions(),
'actionIcons' => [
'login' => 'box-arrow-in-right',
'logout' => 'box-arrow-right',
'register_patient' => 'person-plus',
'register_doctor' => 'person-badge-plus',
'add_doctor' => 'person-badge-plus',
'update_doctor' => 'person-badge',
'delete_doctor' => 'person-badge-x',
'add_patient' => 'person-plus',
'update_patient' => 'person',
'delete_patient' => 'person-x',
'book_appointment' => 'calendar-plus',
'update_appointment' => 'calendar-check',
'cancel_appointment' => 'calendar-x',
'view_appointment' => 'calendar-event',
],
]);
}
public function analytics()
{
if ($r = $this->requireRole('admin')) {
return $r;
}
$period = $this->request->getGet('period') ?? '7_days';
if (! in_array($period, ['7_days', '30_days'], true)) {
$period = '7_days';
}
$activityModel = new ActivityLogModel();
$summary = $activityModel->getSummary($period);
return view('admin/activity_analytics', [
'period' => $period,
'summary' => $summary,
'actionLabels' => json_encode(array_keys($summary['by_action'])),
'actionCounts' => json_encode(array_values($summary['by_action'])),
'typeLabels' => json_encode(array_keys($summary['by_role'])),
'typeCounts' => json_encode(array_values($summary['by_role'])),
'userLabels' => json_encode(array_column($summary['most_active_users'], 'actor')),
'userCounts' => json_encode(array_column($summary['most_active_users'], 'count')),
'uniqueIPs' => $summary['unique_ips'],
'criticalActions' => $activityModel->getCriticalActions(50),
]);
}
}