vendor/pimcore/pimcore/lib/Analytics/GoogleTagManager/EventSubscriber/TrackingCodeSubscriber.php line 58

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Pimcore
  5.  *
  6.  * This source file is available under two different licenses:
  7.  * - GNU General Public License version 3 (GPLv3)
  8.  * - Pimcore Enterprise License (PEL)
  9.  * Full copyright and license information is available in
  10.  * LICENSE.md which is distributed with this source code.
  11.  *
  12.  * @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  13.  * @license    http://www.pimcore.org/license     GPLv3 and PEL
  14.  */
  15. namespace Pimcore\Analytics\GoogleTagManager\EventSubscriber;
  16. use Pimcore\Analytics\Google\Tracker;
  17. use Pimcore\Bundle\CoreBundle\EventListener\Traits\EnabledTrait;
  18. use Pimcore\Bundle\CoreBundle\EventListener\Traits\PimcoreContextAwareTrait;
  19. use Pimcore\Bundle\CoreBundle\EventListener\Traits\PreviewRequestTrait;
  20. use Pimcore\Bundle\CoreBundle\EventListener\Traits\ResponseInjectionTrait;
  21. use Pimcore\Bundle\EcommerceFrameworkBundle\Tracking\Tracker\GoogleTagManager;
  22. use Pimcore\Bundle\EcommerceFrameworkBundle\Tracking\TrackingManager;
  23. use Pimcore\Event\Analytics\Google\TagManager\CodeEvent;
  24. use Pimcore\Event\Analytics\GoogleTagManagerEvents;
  25. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  26. use Symfony\Component\Templating\EngineInterface;
  27. class TrackingCodeSubscriber implements EventSubscriberInterface
  28. {
  29.     use EnabledTrait;
  30.     use ResponseInjectionTrait;
  31.     use PimcoreContextAwareTrait;
  32.     use PreviewRequestTrait;
  33.     /** @var TrackingManager */
  34.     protected $trackingManager;
  35.     /** @var EngineInterface * */
  36.     protected $templatingEngine;
  37.     public function __construct(TrackingManager $trackingManagerEngineInterface $templatingEngine)
  38.     {
  39.         $this->trackingManager $trackingManager;
  40.         $this->templatingEngine $templatingEngine;
  41.     }
  42.     public static function getSubscribedEvents()
  43.     {
  44.         return [
  45.             GoogleTagManagerEvents::CODE_HEAD => ['onCodeHead'],
  46.         ];
  47.     }
  48.     public function onCodeHead(CodeEvent $event)
  49.     {
  50.         if (! $this->isEnabled()) {
  51.             return;
  52.         }
  53.         $activeTrackers $this->trackingManager->getActiveTrackers();
  54.         foreach ($activeTrackers as $activeTracker) {
  55.             if ($activeTracker instanceof GoogleTagManager) {
  56.                 $trackedCodes $activeTracker->getTrackedCodes();
  57.                 if (empty($trackedCodes) || ! is_array($trackedCodes)) {
  58.                     return;
  59.                 }
  60.                 $block $event->getBlock(Tracker::BLOCK_BEFORE_SCRIPT_TAG);
  61.                 $code $this->templatingEngine->render(
  62.                     '@PimcoreCore/Analytics/Tracking/GoogleTagManager/dataLayer.html.twig',
  63.                     ['trackedCodes' => $trackedCodes]
  64.                 );
  65.                 $block->prepend($code);
  66.             }
  67.         }
  68.     }
  69. }