<?php /** * eSales Media Cookie Policy * * Copyright (C) 2013-2015 eSalesMedia * * @package eSM_cookiepolicy * @link http://www.esales-media.de * @license commercial * * @author Benjamin Roth <benjamin@esales-media.de> */ namespace eSM_cookiepolicy; /** * Class CookiePolicy */ class CookiePolicy extends \Frontend { /** * Template * @var string */ protected $strTemplate = 'cookiepolicy_dialog'; /** * Root page object * @var \PageModel|null */ protected $objRootPage; /** * Cookie policy check * * @param \PageModel $objPage * @param \LayoutModel $objLayout * @param \PageRegular $objPageRegular */ public function cookiePolicyCheck(\PageModel $objPage, \LayoutModel $objLayout, \PageRegular $objPageRegular) { // Skip cookie policy if passed before if ($this->Input->cookie('eSM_cookiepolicy_passed') || $objPage->esm_cookiepolicy_ignore) { return; } // Get root page $this->objRootPage = $this->getRootPageFromUrl(); // Don't check if cookie policy is disabled if (!$this->objRootPage->esm_cookiepolicy_check) { return; } // Load dialog template $objTemplate = new \FrontendTemplate($this->strTemplate); // Set template vars $objTemplate->title = $GLOBALS['TL_LANG']['MSC']['esm_cookiepolicy']['title']; $objTemplate->text = $this->replacePlaceholders($this->objRootPage->esm_cookiepolicy_text); $objTemplate->btn_confirm = $GLOBALS['TL_LANG']['MSC']['esm_cookiepolicy']['btn_confirm']; $objTemplate->commitURL = 'system/modules/eSM_cookiepolicy/ajax/Ajax.php?do=cookiepolicy_authentication&cookiepolicy_commit='.$this->createToken(); // Add dialog code to page $GLOBALS['TL_JQUERY'][] = $this->replaceInsertTags($objTemplate->parse()); } /** * Is policy token correct * * @return bool */ public static function ajaxPassCookiePolicy() { if (!\Input::get('cookiepolicy_commit')) { return false; } if (\Input::get('cookiepolicy_commit') == $_SESSION['eSM_cookiepolicy_token']) { preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', \Environment::get('host'), $regs); setcookie('eSM_cookiepolicy_passed', true, time()+31536000, '/','.'.$regs['domain']); unset($_SESSION['eSM_cookiepolicy_token']); return true; } return false; } /** * Create and return a 32 char token * * @return string */ protected function createToken() { if (!$_SESSION['eSM_cookiepolicy_token']) { $length = 32; $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $random_string = ""; for ($p = 0; $p < $length; $p++) { $random_string .= $characters[mt_rand(0, strlen($characters))]; } $_SESSION['eSM_cookiepolicy_token'] = $random_string; } return $_SESSION['eSM_cookiepolicy_token']; } /** * Replace placeholders * * @param $strString * @return string */ protected function replacePlaceholders($strString) { $strReturn = ''; // Get cookie policy page $objPolicyPage = \PageModel::findByPk($this->objRootPage->esm_cookiepolicy_jumpTo); // Remove any unwanted tags (especially PHP tags) $strString = strip_tags($strString, \Config::get('allowedTags')); // Split placeholders $arrPlaceholders = preg_split('/(%%[^%]+%%)/', $strString, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); // Replace placeholders foreach ($arrPlaceholders as $placeholder) { switch (strtolower($placeholder)) { case '%%url%%': $strString = preg_replace('/'.$placeholder.'/i',$this->generateFrontendUrl($objPolicyPage->row()),$strString); } } return $strString; } }