bundles/FoxHabbit/BasisBundle/EventListener/Frontend/CookiebotListener.php line 35

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace FoxHabbit\BasisBundle\EventListener\Frontend;
  4. use Pimcore\Bundle\CoreBundle\EventListener\Traits\EnabledTrait;
  5. use Pimcore\Bundle\CoreBundle\EventListener\Traits\PimcoreContextAwareTrait;
  6. use Pimcore\Bundle\CoreBundle\EventListener\Traits\PreviewRequestTrait;
  7. use Pimcore\Bundle\CoreBundle\EventListener\Traits\ResponseInjectionTrait;
  8. use Pimcore\Http\Request\Resolver\PimcoreContextResolver;
  9. use Pimcore\Tool;
  10. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  11. class CookiebotListener
  12. {
  13.     use EnabledTrait;
  14.     use ResponseInjectionTrait;
  15.     use PimcoreContextAwareTrait;
  16.     use PreviewRequestTrait;
  17.     protected $cookiebotId null;
  18.     protected $cookiebotManual null;
  19.     public function onKernelResponse(ResponseEvent $event)
  20.     {
  21.         $code null;
  22.         $request $event->getRequest();
  23.         $response $event->getResponse();
  24.         if (!$this->isHtmlResponse($response)) {
  25.             return;
  26.         } else if (!$this->isEnabled()) {
  27.             $code '<!-- cookiebot listener not enabled -->';
  28.         } else if (!$event->isMasterRequest()) {
  29.             $code '<!-- cookiebot listener: not in master request -->';
  30.         } else if (!$this->matchesPimcoreContext($requestPimcoreContextResolver::CONTEXT_DEFAULT)) {
  31.             // only inject tag manager code on non-admin requests
  32.             $code '<!-- cookiebot listener: wrong request context -->';
  33.         } else  if (!Tool::useFrontendOutputFilters()) {
  34.             $code '<!-- cookiebot listener: output filters disabled -->';
  35.         } else if ($this->isPreviewRequest($request)) {
  36.             $code '<!-- cookiebot listener: no output in preview -->';
  37.         } else if (!$this->isHtmlResponse($response)) {
  38.             return;
  39.         }
  40.         $siteId null;
  41.         if(\Pimcore\Model\Site::isSiteRequest()) {
  42.             $site \Pimcore\Model\Site::getCurrentSite();
  43.             $siteId $site->getId();
  44.         }
  45.         if( $this->cookiebotId === null) {
  46.             $websiteSetting \Pimcore\Model\WebsiteSetting::getByName('CookiebotId'$siteId);
  47.             if( $websiteSetting && $websiteSetting->getData()) {
  48.                 $this->cookiebotId $websiteSetting->getData();
  49.             }
  50.         }
  51.         if( ! $this->cookiebotId) {
  52.             $code '<!-- cookiebot listener: no id set -->';
  53.         }
  54.         $locale $event->getRequest()->getLocale();
  55.         $useIAB $websiteSetting \Pimcore\Model\WebsiteSetting::getByName('CookiebotUseIAB'$siteId);
  56.         $useIABCode '';
  57.         if($useIAB && $useIAB->getData()) {
  58.             $useIABCode 'data-framework="IAB"';
  59.         }
  60.         if( empty($code)) {
  61.             if( $this->cookiebotManual) {
  62.                 $code '<!-- script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" '.$useIABCode.' data-cbid="'.$this->cookiebotId.'" data-culture="'.$locale.'" type="text/javascript" async></script> MANUAL -->';
  63.             } else {
  64.                 $code '<script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" '.$useIABCode.' data-cbid="'.$this->cookiebotId.'" data-culture="'.$locale.'" data-blockingmode="auto" type="text/javascript"></script><!-- AUTO -->';
  65.             }
  66.         }
  67.         $content $response->getContent();
  68.         if (!empty($code)) {
  69.             // search for the start <head> tag, and insert the code
  70.             $headStartPosition stripos($content"<head>");
  71.             if ($headStartPosition !== false) {
  72.                 $content substr_replace($content"<head>".$code$headStartPosition6);
  73.             }
  74.         }
  75.         $response->setContent($content);
  76.     }
  77. }