src/Service/UtmManager.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use Symfony\Component\HttpFoundation\Cookie;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. class UtmManager
  7. {
  8.     private $utms;
  9.     public function loadUtm(Request $request)
  10.     {
  11.         $utmArray $request->cookies->get('utm', []);
  12.         if (is_string($utmArray)) {
  13.             $utmArray json_decode($utmArraytrue);
  14.         }
  15.         $this->utms $utmArray;
  16.     }
  17.     public function updateUtm(Request $request)
  18.     {
  19.         // On fusionne par-dessus les UTM déjà chargés depuis le cookie (loadUtm),
  20.         // pour ne pas perdre source/content/keyword lors d'une navigation
  21.         // intermédiaire sans paramètres utm_* (ex. recherche de centre ?ville=...).
  22.         $utmArray is_array($this->utms) ? $this->utms : [];
  23.         foreach (['source''content''keyword'] as $key) {
  24.             if ($request->query->has('utm_' $key)) {
  25.                 $utmArray[$key] = preg_replace('/[^-a-zA-Z0-9_]/'''$request->query->get('utm_' $key));
  26.             }
  27.         }
  28.         // MCA-784: Capture du paramètre delivered_id pour force delivery
  29.         if ($request->query->has('delivered_id')) {
  30.             $deliveredId $request->query->get('delivered_id');
  31.             // Validation : IDs numériques séparés par virgules
  32.             if (preg_match('/^[0-9]+(,[0-9]+)*$/'$deliveredId)) {
  33.                 $utmArray['delivered_id'] = $deliveredId;
  34.             }
  35.         }
  36.         //add url acquisition
  37.         $utmArray['url'] = $request->getPathInfo();
  38.         $this->utms $utmArray;
  39.     }
  40.     public function storeUtm(Request $requestResponse $response)
  41.     {
  42.         if (!empty($this->utms)) {
  43.             $response->headers->setCookie(new Cookie('utm'json_encode($this->utms), strtotime('now + 1 year')));
  44.         }
  45.     }
  46.     public function getUtms()
  47.     {
  48.         return $this->utms;
  49.     }
  50.     /* force UTM (used by API)*/
  51.     public function setUtms(array $utms)
  52.     {
  53.         $this->utms=$utms;
  54.         return $this;
  55.     }
  56.     public function getUtmSource()
  57.     {
  58.         return isset($this->utms['source']) ? $this->utms['source'] : null;
  59.     }
  60.     public function getUtmContent()
  61.     {
  62.         return isset($this->utms['content']) ? $this->utms['content'] : null;
  63.     }
  64.     public function getUtmKeyword()
  65.     {
  66.         return isset($this->utms['keyword']) ? $this->utms['keyword'] : null;
  67.     }
  68.     public function getUtmUrl()
  69.     {
  70.         return isset($this->utms['url']) ? $this->utms['url'] : null;
  71.     }
  72.     /**
  73.      * MCA-784: Récupère le paramètre delivered_id pour force delivery
  74.      * @return string|null IDs d'administrateurs séparés par virgule (ex: "123,456")
  75.      */
  76.     public function getDeliveredId()
  77.     {
  78.         return isset($this->utms['delivered_id']) ? $this->utms['delivered_id'] : null;
  79.     }
  80. }