'analytics-data.json', 'method' => 'GET', 'action' => function () { $kirby = kirby(); $user = $kirby->user(); // Seuls les admins peuvent accéder aux données analytics if (!$user || !$user->isAdmin()) { return [ 'status' => 'error', 'message' => 'Unauthorized' ]; } $analyticsPage = $kirby->page('analytics'); if (!$analyticsPage) { return [ 'status' => 'error', 'message' => 'Analytics page not found' ]; } $request = $kirby->request(); $filters = []; if ($startDate = $request->query()->get('startDate')) { $filters['startDate'] = $startDate; } if ($endDate = $request->query()->get('endDate')) { $filters['endDate'] = $endDate; } if ($project = $request->query()->get('project')) { $filters['project'] = $project; } if (!empty($_GET['emails'])) { $filters['emails'] = explode(',', $_GET['emails']); } $data = $analyticsPage->getAnalyticsData($filters); $users = []; foreach ($kirby->users() as $u) { $email = (string) $u->email(); $name = $u->name()->isNotEmpty() ? (string) $u->name() : $email; $label = $name; $clientField = $u->content()->get('client'); if ($clientField && $clientField->isNotEmpty()) { $clientPage = $clientField->toPage(); if ($clientPage) { $label .= ' (' . $clientPage->title() . ')'; } } $users[] = [ 'email' => $email, 'label' => $label, ]; } usort($users, fn($a, $b) => strcasecmp($a['label'], $b['label'])); return [ 'status' => 'success', 'data' => $data, 'users' => $users ]; } ];