designtopack/public/site/plugins/analytics/routes/get-data.php

77 lines
2 KiB
PHP
Raw Normal View History

<?php
return [
'pattern' => '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
];
}
];