vendor/pimcore/pimcore/lib/Analytics/Piwik/EventListener/TrackingCodeListener.php line 73

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\Piwik\EventListener;
  16. use Pimcore\Analytics\Piwik\Tracker;
  17. use Pimcore\Bundle\CoreBundle\EventListener\Traits\PimcoreContextAwareTrait;
  18. use Pimcore\Bundle\CoreBundle\EventListener\Traits\PreviewRequestTrait;
  19. use Pimcore\Bundle\CoreBundle\EventListener\Traits\ResponseInjectionTrait;
  20. use Pimcore\Http\Request\Resolver\PimcoreContextResolver;
  21. use Pimcore\Tool;
  22. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  23. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  24. use Symfony\Component\HttpKernel\KernelEvents;
  25. class TrackingCodeListener implements EventSubscriberInterface
  26. {
  27.     use ResponseInjectionTrait;
  28.     use PimcoreContextAwareTrait;
  29.     use PreviewRequestTrait;
  30.     /**
  31.      * @var Tracker
  32.      */
  33.     private $tracker;
  34.     /**
  35.      * @var bool
  36.      */
  37.     private $enabled true;
  38.     public function __construct(Tracker $tracker)
  39.     {
  40.         $this->tracker $tracker;
  41.     }
  42.     public static function getSubscribedEvents()
  43.     {
  44.         return [
  45.             KernelEvents::RESPONSE => ['onKernelResponse', -110]
  46.         ];
  47.     }
  48.     public function enable()
  49.     {
  50.         $this->enabled true;
  51.     }
  52.     public function disable()
  53.     {
  54.         $this->enabled false;
  55.     }
  56.     public function isEnabled(): bool
  57.     {
  58.         return $this->enabled;
  59.     }
  60.     public function onKernelResponse(FilterResponseEvent $event)
  61.     {
  62.         if (!$this->enabled) {
  63.             return;
  64.         }
  65.         $request $event->getRequest();
  66.         if (!$event->isMasterRequest()) {
  67.             return;
  68.         }
  69.         // only inject analytics code on non-admin requests
  70.         if (!$this->matchesPimcoreContext($requestPimcoreContextResolver::CONTEXT_DEFAULT)) {
  71.             return;
  72.         }
  73.         if ($this->isPreviewRequest($request)) {
  74.             return;
  75.         }
  76.         // output filters are disabled
  77.         if (!Tool::useFrontendOutputFilters($event->getRequest())) {
  78.             return;
  79.         }
  80.         $response $event->getResponse();
  81.         if (!$this->isHtmlResponse($response)) {
  82.             return;
  83.         }
  84.         $code $this->tracker->generateCode();
  85.         if (empty($code)) {
  86.             return;
  87.         }
  88.         $this->injectBeforeHeadEnd($response$code);
  89.     }
  90. }