diff --git a/src/Controller/Administration/VisitorAnalyticsController.php b/src/Controller/Administration/VisitorAnalyticsController.php index 0bb9b61..159a027 100644 --- a/src/Controller/Administration/VisitorAnalyticsController.php +++ b/src/Controller/Administration/VisitorAnalyticsController.php @@ -18,8 +18,17 @@ class VisitorAnalyticsController extends AbstractController { $visitStats = $visitRepository->getVisitCountByRoute(); + // Counters for the last 24 hours and last 7 days + $last24h = new \DateTimeImmutable('-24 hours'); + $last7d = new \DateTimeImmutable('-7 days'); + + $last24hCount = $visitRepository->countVisitsSince($last24h); + $last7dCount = $visitRepository->countVisitsSince($last7d); + return $this->render('admin/analytics.html.twig', [ 'visitStats' => $visitStats, + 'last24hCount' => $last24hCount, + 'last7dCount' => $last7dCount, ]); } } diff --git a/src/Repository/VisitRepository.php b/src/Repository/VisitRepository.php index 026a518..3b9e98a 100644 --- a/src/Repository/VisitRepository.php +++ b/src/Repository/VisitRepository.php @@ -4,6 +4,7 @@ namespace App\Repository; use App\Entity\Visit; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\DBAL\Types\Types; use Doctrine\Persistence\ManagerRegistry; /** @@ -34,4 +35,17 @@ class VisitRepository extends ServiceEntityRepository ->getQuery() ->getResult(); } + + /** + * Returns total number of visits since the given datetime (inclusive). + */ + public function countVisitsSince(\DateTimeImmutable $since): int + { + $qb = $this->createQueryBuilder('v') + ->select('COUNT(v.id)') + ->where('v.visitedAt >= :since') + ->setParameter('since', $since, Types::DATETIME_IMMUTABLE); + + return (int) $qb->getQuery()->getSingleScalarResult(); + } } diff --git a/templates/admin/analytics.html.twig b/templates/admin/analytics.html.twig index ee99d15..b8911eb 100644 --- a/templates/admin/analytics.html.twig +++ b/templates/admin/analytics.html.twig @@ -6,6 +6,14 @@