src/Listener/TrackerListener.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Listener;
  3. use App\Entity\Tracker;
  4. use Symfony\Component\HttpFoundation\Cookie;
  5. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  6. use App\Service\TrackerManager;
  7. final class TrackerListener
  8. {
  9.     private $trackerManager;
  10.     public function __construct(TrackerManager $trackerManager)
  11.     {
  12.         $this->trackerManager $trackerManager;
  13.     }
  14.     public function onKernelResponse(ResponseEvent $event)
  15.     {
  16.         $request $event->getRequest();
  17.         $response $event->getResponse();
  18.         if (strpos($request->getPathInfo(), '/admin/') !== false) {
  19.             return false;
  20.         }
  21.         $cookieValue = [];
  22.         if ($request->query->has(Tracker::TRACKER_PARAM)) {
  23.             $tracker $this->trackerManager->findTracker($request->query->get(Tracker::TRACKER_PARAM));
  24.             if (!$tracker) {
  25.                 return false;
  26.             }
  27.             $trackerVariables array_merge(
  28.                 array_column($tracker->getGetVariables(), 'variable'),
  29.                 Tracker::MANDATORY_FIELDS
  30.             );
  31.             foreach ($request->query->all() as $query => $value) {
  32.                 if (in_array($query,$trackerVariables)) {
  33.                     $cookieValue[$query] = $value;
  34.                 }
  35.             }
  36.             if (!empty($cookieValue)) {
  37.                 $cookie Cookie::create('tracking')
  38.                     ->withValue(json_encode($cookieValue))
  39.                     ->withExpires(time() + (30*24*3600));
  40.                 $response->headers->setCookie($cookie);
  41.             }
  42.         }
  43.         if ($request->get('_route') === 'thank_you_page') {
  44.             $response->headers->clearCookie('tracking');
  45.         }
  46.     }
  47. }