diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 49c76a5..4cb0201 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -724,6 +724,10 @@ class AdminController extends AbstractController ->where('e.createdAt >= :since') ->andWhere('e.referrer IS NOT NULL') ->andWhere("e.referrer != ''") + ->andWhere("e.referrer NOT LIKE :self1") + ->andWhere("e.referrer NOT LIKE :self2") + ->setParameter('self1', '%ticket.e-cosplay.fr%') + ->setParameter('self2', '%esyweb.local%') ->setParameter('since', $since) ->groupBy('e.referrer') ->orderBy('hits', 'DESC') @@ -763,6 +767,40 @@ class AdminController extends AbstractController ->getQuery() ->getArrayResult(); + // Daily chart data + $visitorsPerDay = $em->createQueryBuilder() + ->select("SUBSTRING(v.createdAt, 1, 10) AS day, COUNT(v.id) AS cnt") + ->from(AnalyticsUniqId::class, 'v') + ->where('v.createdAt >= :since') + ->setParameter('since', $since) + ->groupBy('day') + ->orderBy('day', 'ASC') + ->getQuery() + ->getArrayResult(); + + $pageviewsPerDay = $em->createQueryBuilder() + ->select("SUBSTRING(e.createdAt, 1, 10) AS day, COUNT(e.id) AS cnt") + ->from(AnalyticsEvent::class, 'e') + ->where('e.createdAt >= :since') + ->setParameter('since', $since) + ->groupBy('day') + ->orderBy('day', 'ASC') + ->getQuery() + ->getArrayResult(); + + // Merge into aligned arrays + $allDays = []; + foreach ($visitorsPerDay as $r) { $allDays[$r['day']] = true; } + foreach ($pageviewsPerDay as $r) { $allDays[$r['day']] = true; } + ksort($allDays); + + $visitorsMap = array_column($visitorsPerDay, 'cnt', 'day'); + $pageviewsMap = array_column($pageviewsPerDay, 'cnt', 'day'); + + $chartLabels = array_keys($allDays); + $chartVisitors = array_map(fn ($d) => (int) ($visitorsMap[$d] ?? 0), $chartLabels); + $chartPageviews = array_map(fn ($d) => (int) ($pageviewsMap[$d] ?? 0), $chartLabels); + return $this->render('admin/analytics.html.twig', [ 'period' => $period, 'visitors' => $visitors, @@ -773,6 +811,9 @@ class AdminController extends AbstractController 'devices' => $devices, 'browsers' => $browsers, 'os_list' => $osList, + 'chart_labels' => $chartLabels, + 'chart_visitors' => $chartVisitors, + 'chart_pageviews' => $chartPageviews, ]); } diff --git a/templates/admin/analytics.html.twig b/templates/admin/analytics.html.twig index e5aef0e..d6590d1 100644 --- a/templates/admin/analytics.html.twig +++ b/templates/admin/analytics.html.twig @@ -35,6 +35,18 @@ + {# Charts #} +