<?php
namespace App\DataLayer;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Twig\Environment;
class DataLayerManager
{
public const EVENTS_SESSION_KEY = 'datalayer_events';
public const TEMPLATE = 'datalayer/default.html.twig';
private ?array $events = null;
public function __construct(
protected readonly SessionInterface $session,
protected readonly Environment $twig,
) {}
public function addEvent(DataLayerEvent $event): static
{
$events = $this->getEvents() ?? [];
$events[] = $event;
$this->session->set(self::EVENTS_SESSION_KEY, $events);
return $this;
}
public function getEvents(): ?array
{
return $this->session->get(self::EVENTS_SESSION_KEY, []);
}
public function reset(): static
{
$this->session->remove(self::EVENTS_SESSION_KEY);
return $this;
}
public function render(): string
{
$structuredData = [];
/** @var DataLayerEvent $event */
foreach($this->getEvents() as $event) {
$eventData = [];
if($event->getName()) {
$eventData['event'] = $event->getName();
}
foreach($event->getValues() ?? [] as $key => $value) {
$eventData[$key] = $value;
}
$structuredData[] = $eventData;
}
$this->reset();
return $this->twig->render(self::TEMPLATE, ['data' => $structuredData]);
}
}