vendor/pimcore/pimcore/bundles/CoreBundle/EventListener/Frontend/CookiePolicyNoticeListener.php line 141

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  * @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  * @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace Pimcore\Bundle\CoreBundle\EventListener\Frontend;
  15. use Pimcore\Bundle\CoreBundle\EventListener\Traits\PimcoreContextAwareTrait;
  16. use Pimcore\Bundle\CoreBundle\EventListener\Traits\ResponseInjectionTrait;
  17. use Pimcore\Config;
  18. use Pimcore\Http\Request\Resolver\PimcoreContextResolver;
  19. use Symfony\Bundle\FrameworkBundle\Translation\Translator;
  20. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  21. use Symfony\Component\HttpKernel\KernelInterface;
  22. /**
  23.  * @deprecated
  24.  */
  25. class CookiePolicyNoticeListener
  26. {
  27.     use ResponseInjectionTrait;
  28.     use PimcoreContextAwareTrait;
  29.     /**
  30.      * @var bool
  31.      */
  32.     protected $enabled true;
  33.     /**
  34.      * @var string
  35.      */
  36.     protected $templateCode null;
  37.     /**
  38.      * @var KernelInterface
  39.      */
  40.     protected $kernel;
  41.     /**
  42.      * @var Translator
  43.      */
  44.     protected $translator;
  45.     /**
  46.      * @var Config
  47.      */
  48.     protected $config;
  49.     /**
  50.      * @param KernelInterface $kernel
  51.      */
  52.     public function __construct(KernelInterface $kernelConfig $config)
  53.     {
  54.         $this->kernel $kernel;
  55.         $this->config $config;
  56.     }
  57.     /**
  58.      * @return bool
  59.      */
  60.     public function disable()
  61.     {
  62.         $this->enabled false;
  63.         return true;
  64.     }
  65.     /**
  66.      * @return bool
  67.      */
  68.     public function enable()
  69.     {
  70.         $this->enabled true;
  71.         return true;
  72.     }
  73.     /**
  74.      * @return bool
  75.      */
  76.     public function isEnabled()
  77.     {
  78.         return $this->enabled;
  79.     }
  80.     /**
  81.      * @param string $code
  82.      */
  83.     public function setTemplateCode($code)
  84.     {
  85.         $this->templateCode $code;
  86.     }
  87.     /**
  88.      * @return string
  89.      */
  90.     public function getTemplateCode()
  91.     {
  92.         return $this->templateCode;
  93.     }
  94.     /**
  95.      * @param string $path
  96.      */
  97.     public function loadTemplateFromResource($path)
  98.     {
  99.         $templateFile $this->kernel->locateResource($path);
  100.         if (file_exists($templateFile)) {
  101.             $this->setTemplateCode(file_get_contents($templateFile));
  102.         }
  103.     }
  104.     /**
  105.      * @return Translator
  106.      */
  107.     public function getTranslator()
  108.     {
  109.         return $this->translator;
  110.     }
  111.     /**
  112.      * @param Translator $translator
  113.      */
  114.     public function setTranslator($translator)
  115.     {
  116.         $this->translator $translator;
  117.     }
  118.     /**
  119.      * @param FilterResponseEvent $event
  120.      */
  121.     public function onKernelResponse(FilterResponseEvent $event)
  122.     {
  123.         $request $event->getRequest();
  124.         if (!$event->isMasterRequest()) {
  125.             return;
  126.         }
  127.         if (!$this->matchesPimcoreContext($requestPimcoreContextResolver::CONTEXT_DEFAULT)) {
  128.             return;
  129.         }
  130.         $response $event->getResponse();
  131.         $locale $request->getLocale();
  132.         if ($this->enabled && $this->config['general']['show_cookie_notice'] && \Pimcore\Tool::useFrontendOutputFilters()) {
  133.             if ($event->isMasterRequest() && $this->isHtmlResponse($response)) {
  134.                 $template $this->getTemplateCode();
  135.                 // cleanup code
  136.                 $template preg_replace('/[\r\n\t]+/'' '$template); //remove new lines, spaces, tabs
  137.                 $template preg_replace('/>[\s]+</''><'$template); //remove new lines, spaces, tabs
  138.                 $template preg_replace('/[\s]+/'' '$template); //remove new lines, spaces, tabs
  139.                 $translations $this->getTranslations($locale);
  140.                 foreach ($translations as $key => &$value) {
  141.                     $value htmlentities($valueENT_COMPAT'UTF-8');
  142.                     $template str_replace('%' $key '%'$value$template);
  143.                 }
  144.                 $linkContent '';
  145.                 if (array_key_exists('linkTarget'$translations)) {
  146.                     $linkContent '<a href="' $translations['linkTarget'] . '" aria-label="' $translations['linkText'] . '" data-content="' $translations['linkText'] . '"></a>';
  147.                 }
  148.                 $template str_replace('%link%'$linkContent$template);
  149.                 $templateCode json_encode($template);
  150.                 $code '
  151.                         <script>
  152.                             (function () {
  153.                                 var ls = window["localStorage"];
  154.                                 if(ls && !ls.getItem("pc-cookie-accepted")) {
  155.                                     var code = ' $templateCode ';
  156.                                     var ci = window.setInterval(function () {
  157.                                         if(document.body) {
  158.                                             clearInterval(ci);
  159.                                             document.body.insertAdjacentHTML("beforeend", code);
  160.                                             document.getElementById("pc-button").onclick = function () {
  161.                                                 document.getElementById("pc-cookie-notice").style.display = "none";
  162.                                                 ls.setItem("pc-cookie-accepted", "true");
  163.                                             };
  164.                                         }
  165.                                     }, 100);
  166.                                 }
  167.                             })();
  168.                         </script>
  169.                     ';
  170.                 $content $response->getContent();
  171.                 // search for the end <head> tag, and insert the google analytics code before
  172.                 // this method is much faster than using simple_html_dom and uses less memory
  173.                 $headEndPosition stripos($content'</head>');
  174.                 if ($headEndPosition !== false) {
  175.                     $content substr_replace($content$code '</head>'$headEndPosition7);
  176.                 }
  177.                 $response->setContent($content);
  178.             }
  179.         }
  180.     }
  181.     /**
  182.      * @param string $locale
  183.      *
  184.      * @return array
  185.      */
  186.     protected function getTranslations($locale)
  187.     {
  188.         // most common translations
  189.         $defaultTranslations = [
  190.             'text' => [
  191.                 'en' => 'Cookies help us deliver our services. By using our services, you agree to our use of cookies.',
  192.                 'de' => 'Cookies helfen uns bei der Bereitstellung unserer Dienste. Durch die Nutzung unserer Dienste erklären Sie sich mit dem Einsatz von Cookies einverstanden.',
  193.                 'it' => "I cookie ci aiutano a fornire i nostri servizi. Utilizzando tali servizi, accetti l'utilizzo dei cookie da parte.",
  194.                 'fr' => "Les cookies assurent le bon fonctionnement de nos services. En utilisant ces derniers, vous acceptez l'utilisation des cookies.",
  195.                 'nl' => 'Cookies helpen ons onze services te leveren. Door onze services te gebruiken, geef je aan akkoord te gaan met ons gebruik van cookies.',
  196.                 'es' => 'Las cookies nos ayudan a ofrecer nuestros servicios. Al utilizarlos, aceptas que usemos cookies.',
  197.                 'zh' => 'Cookie 可帮助我们提供服务。使用我们的服务即表示您同意我们使用 Cookie',
  198.                 'no' => 'Informasjonskapsler hjelper oss med å levere tjenestene vi tilbyr. Ved å benytte deg av tjenestene våre, godtar du bruken av informasjonskapsler.',
  199.                 'hu' => 'A cookie-k segítenek minket a szolgáltatásnyújtásban. Szolgáltatásaink használatával jóváhagyja, hogy cookie-kat használjunk.',
  200.                 'sv' => 'Vi tar hjälp av cookies för att tillhandahålla våra tjänster. Genom att använda våra tjänster godkänner du att vi använder cookies.',
  201.                 'fi' => 'Evästeet auttavat meitä palveluidemme tarjoamisessa. Käyttämällä palveluitamme hyväksyt evästeiden käytön.',
  202.                 'da' => 'Cookies hjælper os med at levere vores tjenester. Ved at bruge vores tjenester accepterer du vores brug af cookies.',
  203.                 'pl' => 'Nasze usługi wymagają plików cookie. Korzystając z nich, zgadzasz się na używanie przez nas tych plików.',
  204.                 'cs' => 'Při poskytování služeb nám pomáhají soubory cookie. Používáním našich služeb vyjadřujete souhlas s naším používáním souborů cookie',
  205.                 'sk' => 'Súbory cookie nám pomáhajú pri poskytovaní našich služieb. Používaním našich služieb vyjadrujete súhlas s používaním súborov cookie.',
  206.                 'pt' => 'Os cookies nos ajudam a oferecer nossos serviços. Ao usar nossos serviços, você concorda com nosso uso dos cookies.',
  207.                 'hr' => 'Kolačići nam pomažu pružati usluge. Upotrebom naših usluga prihvaćate našu upotrebu kolačića.',
  208.                 'sl' => 'Piškotki omogočajo, da vam ponudimo svoje storitve. Z uporabo teh storitev se strinjate z našo uporabo piškotkov.',
  209.                 'sr' => 'Колачићи нам помажу да пружамо услуге. Коришћењем услуга прихватате нашу употребу колачића.',
  210.                 'ru' => 'Используя наши сервисы, Вы соглашаетесь на наше использование файлов cookie. Это необходимо для нормального функционирования наших сервисов.',
  211.                 'bg' => '„Бисквитките“ ни помагат да предоставяме услугите си. С използването им приемате употребата на „бисквитките“ от наша страна.',
  212.                 'et' => 'Küpsised aitavad meil teenuseid pakkuda. Teenuste kasutamisel nõustute küpsiste kasutamisega.',
  213.                 'el' => 'Τα cookie μάς βοηθούν να προσφέρουμε τις υπηρεσίες μας. Χρησιμοποιώντας τις υπηρεσίες μας, αποδέχεστε την από μέρους μας χρήση των cookie.',
  214.                 'lv' => 'Mūsu pakalpojumos tiek izmantoti sīkfaili. Lietojot mūsu pakalpojumus, jūs piekrītat sīkfailu izmantošanai.',
  215.                 'lt' => 'Slapukai naudingi mums, kad galėtume teikti paslaugas. Naudodamiesi paslaugomis, sutinkate, kad mes galime naudoti slapukus.',
  216.                 'ro' => 'Cookie-urile ne ajută să vă oferim serviciile noastre. Prin utilizarea serviciilor, acceptați modul în care utilizăm cookie-urile.',
  217.             ],
  218.             'linkText' => [
  219.                 'en' => 'Learn more',
  220.                 'de' => 'Weitere Informationen',
  221.                 'it' => 'Ulteriori informazioni',
  222.                 'fr' => 'En savoir plus',
  223.                 'nl' => 'Meer informatie',
  224.                 'es' => 'Más información',
  225.                 'zh' => '了解详情',
  226.                 'no' => 'Finn ut mer',
  227.                 'hu' => 'További információ',
  228.                 'sv' => 'Läs mer',
  229.                 'fi' => 'Lisätietoja',
  230.                 'da' => 'Få flere oplysninger',
  231.                 'pl' => 'Więcej informacji',
  232.                 'cs' => 'Další informace',
  233.                 'sk' => 'Ďalšie informácie',
  234.                 'pt' => 'Saiba mais',
  235.                 'hr' => 'Saznajte više',
  236.                 'sl' => 'Več o tem',
  237.                 'sr' => 'Сазнајте више',
  238.                 'ru' => 'Подробнее...',
  239.                 'bg' => 'Научете повече',
  240.                 'et' => 'Lisateave',
  241.                 'el' => 'Μάθετε περισσότερα',
  242.                 'lv' => 'Uzziniet vairāk',
  243.                 'lt' => 'Sužinoti daugiau',
  244.                 'ro' => 'Aflați mai multe',
  245.             ],
  246.             'ok' => [
  247.                 'en' => 'OK',
  248.                 'de' => 'Ok',
  249.                 'it' => 'Ho capito',
  250.                 'fr' => "J'ai compris",
  251.                 'nl' => 'Ik snap het',
  252.                 'es' => 'De acuerdo',
  253.                 'zh' => '知道了',
  254.                 'no' => 'Greit',
  255.                 'hu' => 'Rendben',
  256.                 'sv' => 'Uppfattat',
  257.                 'fi' => 'Selvä',
  258.                 'da' => 'Forstået',
  259.                 'pl' => 'OK',
  260.                 'cs' => 'OK',
  261.                 'sk' => 'Rozumiem',
  262.                 'pt' => 'Entendi',
  263.                 'hr' => 'Shvaćam',
  264.                 'sl' => 'V redu',
  265.                 'sr' => 'Важи',
  266.                 'ru' => 'OK',
  267.                 'bg' => 'Разбрах',
  268.                 'et' => 'Selge',
  269.                 'el' => 'Το κατάλαβα',
  270.                 'lv' => 'Sapratu',
  271.                 'lt' => 'Supratau',
  272.                 'ro' => 'Am înțeles',
  273.             ]
  274.         ];
  275.         $translations = [];
  276.         if ($this->getTranslator()) {
  277.             foreach (['text''linkText''ok''linkTarget'] as $key) {
  278.                 $translationKey 'cookie-policy-' $key;
  279.                 $translation $this->getTranslator()->trans($translationKey);
  280.                 if ($translation != $translationKey) {
  281.                     $translations[$key] = $translation;
  282.                 }
  283.             }
  284.         }
  285.         $language 'en'// default language
  286.         if ($locale) {
  287.             $languagePart = \Locale::getPrimaryLanguage($locale);
  288.             if (array_key_exists($languagePart$defaultTranslations['text'])) {
  289.                 $language $languagePart;
  290.             }
  291.         }
  292.         // set defaults in en
  293.         foreach ($defaultTranslations as $key => $values) {
  294.             if (!array_key_exists($key$translations)) {
  295.                 $translations[$key] = $values[$language];
  296.             }
  297.         }
  298.         return $translations;
  299.     }
  300. }