<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class UtmManager
{
private $utms;
public function loadUtm(Request $request)
{
$utmArray = $request->cookies->get('utm', []);
if (is_string($utmArray)) {
$utmArray = json_decode($utmArray, true);
}
$this->utms = $utmArray;
}
public function updateUtm(Request $request)
{
$utmArray = [];
foreach (['source', 'content', 'keyword'] as $key) {
if ($request->query->has('utm_' . $key)) {
$utmArray[$key] = preg_replace('/[^-a-zA-Z0-9_]/', '', $request->query->get('utm_' . $key));
}
}
// MCA-784: Capture du paramètre delivered_id pour force delivery
if ($request->query->has('delivered_id')) {
$deliveredId = $request->query->get('delivered_id');
// Validation : IDs numériques séparés par virgules
if (preg_match('/^[0-9]+(,[0-9]+)*$/', $deliveredId)) {
$utmArray['delivered_id'] = $deliveredId;
}
}
//add url acquisition
$utmArray['url'] = $request->getPathInfo();
$this->utms = $utmArray;
}
public function storeUtm(Request $request, Response $response)
{
if (!empty($this->utms)) {
$response->headers->setCookie(new Cookie('utm', json_encode($this->utms), strtotime('now + 1 year')));
}
}
public function getUtms()
{
return $this->utms;
}
/* force UTM (used by API)*/
public function setUtms(array $utms)
{
$this->utms=$utms;
return $this;
}
public function getUtmSource()
{
return isset($this->utms['source']) ? $this->utms['source'] : null;
}
public function getUtmContent()
{
return isset($this->utms['content']) ? $this->utms['content'] : null;
}
public function getUtmKeyword()
{
return isset($this->utms['keyword']) ? $this->utms['keyword'] : null;
}
public function getUtmUrl()
{
return isset($this->utms['url']) ? $this->utms['url'] : null;
}
/**
* MCA-784: Récupère le paramètre delivered_id pour force delivery
* @return string|null IDs d'administrateurs séparés par virgule (ex: "123,456")
*/
public function getDeliveredId()
{
return isset($this->utms['delivered_id']) ? $this->utms['delivered_id'] : null;
}
}