<?php
namespace App\EventListener;
use Doctrine\DBAL\Connection;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Twig\Environment;
class ReferralSubscriber
{
private Connection $db;
private Environment $twig;
public function __construct(Connection $db, Environment $twig)
{
$this->db = $db;
$this->twig = $twig;
}
public function onKernelController(ControllerEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
$session = $event->getRequest()->getSession();
if (!$session->has('hash')) {
return;
}
$hash = $session->get('hash');
$user = $this->db->fetchAssociative('SELECT id FROM users WHERE hash = ?', [$hash]);
if (!$user) {
return;
}
$userId = $user['id'];
$dates = [];
$today = new \DateTimeImmutable();
for ($i = 4; $i >= 0; $i--) {
$date = $today->modify("-{$i} days")->format('Y-m-d');
$dates[$date] = 0;
}
$sql = "
SELECT DATE(created_at) AS reg_date, COUNT(*) AS registrations
FROM users
WHERE ref_id = ?
AND DATE(created_at) >= DATE_SUB(CURDATE(), INTERVAL 4 DAY)
GROUP BY reg_date
";
$raw = $this->db->fetchAllAssociative($sql, [$userId]);
foreach ($raw as $row) {
$dates[$row['reg_date']] = (int) $row['registrations'];
}
$finalData = [];
foreach ($dates as $date => $count) {
$finalData[] = ['reg_date' => $date, 'registrations' => $count];
}
$this->twig->addGlobal('referral_chart_data', $finalData);
}
}