src/EventListener/ReferralSubscriber.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Doctrine\DBAL\Connection;
  4. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  5. use Twig\Environment;
  6. class ReferralSubscriber
  7. {
  8.     private Connection $db;
  9.     private Environment $twig;
  10.     public function __construct(Connection $dbEnvironment $twig)
  11.     {
  12.         $this->db $db;
  13.         $this->twig $twig;
  14.     }
  15.     public function onKernelController(ControllerEvent $event): void
  16.     {
  17.         if (!$event->isMainRequest()) {
  18.             return;
  19.         }
  20.         $session $event->getRequest()->getSession();
  21.         if (!$session->has('hash')) {
  22.             return;
  23.         }
  24.         $hash $session->get('hash');
  25.         $user $this->db->fetchAssociative('SELECT id FROM users WHERE hash = ?', [$hash]);
  26.         if (!$user) {
  27.             return;
  28.         }
  29.         $userId $user['id'];
  30.         $dates = [];
  31.         $today = new \DateTimeImmutable();
  32.         for ($i 4$i >= 0$i--) {
  33.             $date $today->modify("-{$i} days")->format('Y-m-d');
  34.             $dates[$date] = 0
  35.         }
  36.         $sql "
  37.             SELECT DATE(created_at) AS reg_date, COUNT(*) AS registrations
  38.             FROM users
  39.             WHERE ref_id = ?
  40.               AND DATE(created_at) >= DATE_SUB(CURDATE(), INTERVAL 4 DAY)
  41.             GROUP BY reg_date
  42.         ";
  43.         $raw $this->db->fetchAllAssociative($sql, [$userId]);
  44.         foreach ($raw as $row) {
  45.             $dates[$row['reg_date']] = (int) $row['registrations'];
  46.         }
  47.         $finalData = [];
  48.         foreach ($dates as $date => $count) {
  49.             $finalData[] = ['reg_date' => $date'registrations' => $count];
  50.         }
  51.         $this->twig->addGlobal('referral_chart_data'$finalData);
  52.     }
  53. }