custom/plugins/WbmTagManagerEcomm/src/Subscriber/StorefrontRenderSubscriber.php line 38

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wbm\TagManagerEcomm\Subscriber;
  3. use Shopware\Storefront\Event\StorefrontRenderEvent;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Wbm\TagManagerEcomm\Cookie\CustomCookieProvider;
  6. use Wbm\TagManagerEcomm\Services\DataLayerModules;
  7. use Wbm\TagManagerEcomm\Services\DataLayerRenderer;
  8. class StorefrontRenderSubscriber implements EventSubscriberInterface
  9. {
  10.     /**
  11.      * @var DataLayerModules
  12.      */
  13.     private $modules;
  14.     /**
  15.      * @var DataLayerRenderer
  16.      */
  17.     private $dataLayerRenderer;
  18.     public function __construct(
  19.         DataLayerModules $modules,
  20.         DataLayerRenderer $dataLayerRenderer
  21.     ) {
  22.         $this->modules $modules;
  23.         $this->dataLayerRenderer $dataLayerRenderer;
  24.     }
  25.     public static function getSubscribedEvents(): array
  26.     {
  27.         return [
  28.             StorefrontRenderEvent::class => 'onRender',
  29.         ];
  30.     }
  31.     public function onRender(StorefrontRenderEvent $event): void
  32.     {
  33.         $salesChannelId $event->getSalesChannelContext()->getSalesChannel()->getId();
  34.         $containerId $this->modules->getContainerId($salesChannelId);
  35.         $isActive = !empty($containerId) && $this->modules->isActive($salesChannelId);
  36.         $route $event->getRequest()->attributes->get('_route');
  37.         if (!$isActive) {
  38.             return;
  39.         }
  40.         $cookie $event->getRequest()->cookies->get(KernelEventsSubscriber::COOKIE_NAME);
  41.         if ($cookie) {
  42.             if (in_array($route$this->modules->getResponseRoutes(), true)) {
  43.                 $dataLayer json_decode($cookietrue);
  44.             }
  45.         } else {
  46.             $parameters $event->getParameters();
  47.             $modules $this->modules->getModules();
  48.             if (array_key_exists($route$modules)) {
  49.                 $dataLayer $this->dataLayerRenderer->setVariables($route$parameters)
  50.                     ->renderDataLayer($route);
  51.                 $dataLayer $dataLayer->getDataLayer($route);
  52.             }
  53.         }
  54.         if (!$event->getRequest()->isXmlHttpRequest()) {
  55.             $event->setParameter(
  56.                 'wbmTagManagerConfig',
  57.                 [
  58.                     'gtmContainerId' => $containerId,
  59.                     'isTrackingProductClicks' => $this->modules->isTrackingProductClicks($salesChannelId),
  60.                     'wbmCookieEnabledName' => CustomCookieProvider::WBM_GTM_ENABLED_COOKIE_NAME,
  61.                     'hasSWConsentSupport' => $this->modules->hasSWConsentSupport($salesChannelId),
  62.                     'scriptTagAttributes' => $this->modules->getScriptTagAttributes($salesChannelId),
  63.                     'dataLayerScriptTagAttributes' => $this->modules->getDataLayerScriptTagAttributes($salesChannelId),
  64.                     'extendedUrlParameter' => $this->modules->getExtendedURLParameter($salesChannelId),
  65.                 ]
  66.             );
  67.             if (!empty($dataLayer)) {
  68.                 $event->setParameter(
  69.                     'dataLayer',
  70.                     $dataLayer['default']
  71.                 );
  72.                 if (array_key_exists('onEvent'$dataLayer)) {
  73.                     $event->setParameter(
  74.                         'onEvent',
  75.                         $dataLayer['onEvent']
  76.                     );
  77.                 }
  78.             }
  79.         }
  80.     }
  81. }