<?php
namespace App\Listener;
use App\Entity\Tracker;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use App\Service\TrackerManager;
final class TrackerListener
{
private $trackerManager;
public function __construct(TrackerManager $trackerManager)
{
$this->trackerManager = $trackerManager;
}
public function onKernelResponse(ResponseEvent $event)
{
$request = $event->getRequest();
$response = $event->getResponse();
if (strpos($request->getPathInfo(), '/admin/') !== false) {
return false;
}
$cookieValue = [];
if ($request->query->has(Tracker::TRACKER_PARAM)) {
$tracker = $this->trackerManager->findTracker($request->query->get(Tracker::TRACKER_PARAM));
if (!$tracker) {
return false;
}
$trackerVariables = array_merge(
array_column($tracker->getGetVariables(), 'variable'),
Tracker::MANDATORY_FIELDS
);
foreach ($request->query->all() as $query => $value) {
if (in_array($query,$trackerVariables)) {
$cookieValue[$query] = $value;
}
}
if (!empty($cookieValue)) {
$cookie = Cookie::create('tracking')
->withValue(json_encode($cookieValue))
->withExpires(time() + (30*24*3600));
$response->headers->setCookie($cookie);
}
}
if ($request->get('_route') === 'thank_you_page') {
$response->headers->clearCookie('tracking');
}
}
}