<?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));
}
}
//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;
}
}