- Ajout filtre multiselect par page(s) dans le dashboard analytics - Chart multi-courbes par page quand aucun filtre page sélectionné - Options de pages indépendantes du filtre page (persistent à la sélection) - Options de pages dépendantes du filtre utilisateur - Tracking modal-file avec format "Projet / Label" dans dialog.js - Tri alphabétique des options du filtre par page - Fix user list 500 error (email string, client field check) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
80 lines
2.1 KiB
PHP
80 lines
2.1 KiB
PHP
<?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']);
|
|
}
|
|
|
|
if (!empty($_GET['pageNames'])) {
|
|
$filters['pageNames'] = explode(',', $_GET['pageNames']);
|
|
}
|
|
|
|
$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
|
|
];
|
|
}
|
|
];
|