Файловый менеджер - Редактировать - /home/harasnat/www/solequestre/plugins/system/cookiehint/versions/version5.php
Назад
<?php # reDim GmbH - Norbert Bayer # Plugin: CookieHint # license GNU/GPL www.redim.de # Version 1.4.8 (Joomla! 5.x) // No direct access defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\Uri\Uri; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\CMS\Application\CMSApplicationInterface; use Joomla\CMS\Document\HtmlDocument; /** * Class plgSystemCookieHint */ class plgSystemCookieHint extends CMSPlugin { /** * @var */ protected $app; /** * @var */ protected $assetManager; /** * @var */ protected $issite; /** * @var bool */ protected $jsblocker = false; /** * @var bool */ protected $setbottom = false; /** * @var array */ protected $infolink = array(); /** * @var bool */ protected $_loadcode = true; /** * plgSystemCookieHint constructor. * * @param $subject * @param $config */ public function __construct(&$subject, $config) { parent::__construct($subject, $config); $this->issite = $this->app->isClient('site'); } /** * */ private function setNoIndex() { $this->app->getDocument()->setMetadata('robots', 'noindex, follow'); } /** * */ private function cleanCookies() { # @header_remove('Set-Cookie'); if (isset($_COOKIE)) { $sessionname=$this->app->getSession()->getName(); $host = URI::getInstance()->getHost(); $e=explode('.',$host); $host2=array_pop($e); $host2='.'.array_pop($e).'.'.$host2; foreach($_COOKIE as $name => $value) { if($name!=$sessionname) { setcookie($name, '', -1, '', $host); setcookie($name, '', -1, '/', $host); if(!empty($host2)) { setcookie($name, '', -1, '', $host2); setcookie($name, '', -1, '/', $host2); } unset($_COOKIE[$name]); } } } } /** * */ private function rCHredirect() { $url = $this->getURL(array('rCH' => null),false,false); $this->app->redirect($url,301); } /** * */ public function onAfterInitialise() { if($this->issite) { if ($this->checkCookie() == false) { $this->app->getConfig()->set('caching', 0); } } } /** * @return bool */ private function checkReferer() { if(isset($_SERVER['HTTP_REFERER'])) { $a=URI::getInstance()->getHost(); $b=parse_url($_SERVER['HTTP_REFERER']); if(isset($b['host'])) { $b=$b['host']; }else{ $b=''; } if($a==$b) { return true; } } return false; } /** * */ public function onBeforeCompileHead() { if ($this->issite == false OR $this->app->input->getCMD('tmpl') == 'component') { $this->_loadcode=false; } $ch = $this->checkCookie(); $tmp=$this->_gtm_consent_JS($ch); if(!empty($tmp)) { $wa = $this->app->getDocument()->getWebAssetManager(); $wa->addInlineScript($tmp); } if ($ch == 1) { return; } if ($ch == 0 OR $ch == -1) { $tmp = (int) $this->params->get('cookieblocker', '0'); if ($tmp > 0) { $this->cleanCookies(); if ($tmp == 2) { $tmp=trim($this->params->get('csp',"default-src 'self' 'unsafe-inline'")); @header('Content-Security-Policy: '.$tmp); @header('X-Content-Security-Policy: '.$tmp); @header('X-WebKit-CSP: '.$tmp); } $this->jsblocker = true; } } $rCH=$this->app->input->getINT('rCH'); if($rCH<>0) { $this->setNoIndex(); } $cookie_name = 'reDimCookieHint'; $cookie_options = [ 'expires' => 0, 'path' => '/', 'secure' => (bool) $this->params->get('cookiesecure', 0), 'samesite' => $this->params->get('cookiesamesite', 'none'), ]; switch ($rCH) { case -3: case 3: //setcookie('reDimCookieHint', NULL, time() - 3600,'/'); $cookie_options['expires'] = time() - 3600; setcookie($cookie_name, null, $cookie_options); $this->rCHredirect(); break; case 2: //$d = $this->getCookieTime(); //setcookie('reDimCookieHint', 1, $d, '/'); $cookie_options['expires'] = $this->getCookieTime(); setcookie($cookie_name, 1, $cookie_options); $this->rCHredirect(); break; case -2: //$d = $this->getCookieTime(); #$this->cleanCookies(); //setcookie('reDimCookieHint', -1, 0, '/'); setcookie($cookie_name, -1, $cookie_options); $this->rCHredirect(); break; case 1: //$d = $this->getCookieTime(); //setcookie('reDimCookieHint', 1, $d, '/'); $cookie_options['expires'] = $this->getCookieTime(); setcookie($cookie_name, 1, $cookie_options); echo 'ok'; $this->app->close(); break; case -1: //$d = $this->getCookieTime(); #$this->cleanCookies(); //setcookie('reDimCookieHint', -1, 0, '/'); setcookie($cookie_name, -1, $cookie_options); echo 'ok'; $this->app->close(); break; } if ($ch == 0) { $tmp = $this->params->get('css', 'redimstyle.css'); $wa = $this->app->getDocument()->getWebAssetManager(); if ($tmp != '-1') { $wa->registerAndUseStyle('plg.system.cookiehint','plugins/system/cookiehint/css/' . $tmp, array('version' => 'auto', 'relative' => false)); } if ($this->_get_infolink('infourl') === false OR $this->_get_infolink('imprinturl')===false) { $this->params->set('position', 'bottom'); } switch ($this->params->get('position', 'bottom')) { case 'modal': $tmp = '#redim-cookiehint-modal {position: fixed; top: 0; bottom: 0; left: 0; right: 0; z-index: 99998; display: flex; justify-content : center; align-items : center;}'; break; case 'top': $tmp = '#redim-cookiehint-top {position: fixed; z-index: 99990; left: 0px; right: 0px; top: 0px; bottom: auto !important;}'; break; default: $tmp = '#redim-cookiehint-bottom {position: fixed; z-index: 99999; left: 0px; right: 0px; bottom: 0px; top: auto !important;}'; break; } $wa->addInlineStyle($tmp); unset($tmp); } } /** * @return bool */ public function checkCookie() { if(!$this->issite) { return true; } if (defined('reDimCookieHint')) { return reDimCookieHint; } if ($this->app->input->getVAR('rCH', null) != null) { return false; } $return = false; if ($this->app->input->get('cookiehint') == 'set') { @setcookie('reDimCookieHint', null, -1, 0, '/'); unset($_COOKIE['reDimCookieHint']); } if (isset($_COOKIE['reDimCookieHint'])) { $return = $_COOKIE['reDimCookieHint']; } define('reDimCookieHint', $return); return reDimCookieHint; } /** * @return float|int */ private function getCookieTime() { $cm = (int) $this->params->get('cookiemode'); $d = (int) $this->params->get('cookieexpires', 365); if ($cm == 1) { $d = 0; } else { $d = time() + ($d * 86400); } return $d; } /** * */ public function onAfterRender() { $set = false; $buffer = $this->app->getBody(); if ($this->jsblocker == true) { $html = "\n" . '<script type="text/javascript">' . $this->getHeadJava(true, true, true) . '</script>' . "\n"; if ($buffer = preg_replace("/\<head(.*)>/", "\n$0" . $html . "\n", $buffer, 1)) { $set = true; } } if ($this->checkCookie() != true AND $this->_loadcode===true) { $html = $this->_get_code(); if ($buffer = preg_replace("/\<\/body(.*)>/", "\n" . $html . "\n$0", $buffer)) { $set = true; } } if ($set == true) { $this->app->setBody($buffer); } } /** * @param int $disableCookies * @param int $disableLocal * @param int $disableSession * * @return array|false|string|string[] */ private function getHeadJava($disableCookies = 1, $disableLocal = 1, $disableSession = 1) { ob_start(); ?> (function(){ function blockCookies(disableCookies, disableLocal, disableSession){ if(disableCookies == 1){ if(!document.__defineGetter__){ Object.defineProperty(document, 'cookie',{ get: function(){ return ''; }, set: function(){ return true;} }); }else{ var oldSetter = document.__lookupSetter__('cookie'); if(oldSetter) { Object.defineProperty(document, 'cookie', { get: function(){ return ''; }, set: function(v){ if(v.match(/reDimCookieHint\=/) || v.match(/<?PHP echo Factory::getSession()->getName(); ?>\=/)) { oldSetter.call(document, v); } return true; } }); } } var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i]; var pos = cookie.indexOf('='); var name = ''; if(pos > -1){ name = cookie.substr(0, pos); }else{ name = cookie; } if(name.match(/reDimCookieHint/)) { document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; } } } if(disableLocal == 1){ window.localStorage.clear(); window.localStorage.__proto__ = Object.create(window.Storage.prototype); window.localStorage.__proto__.setItem = function(){ return undefined; }; } if(disableSession == 1){ window.sessionStorage.clear(); window.sessionStorage.__proto__ = Object.create(window.Storage.prototype); window.sessionStorage.__proto__.setItem = function(){ return undefined; }; } } blockCookies(<?PHP echo $disableCookies; ?>,<?PHP echo $disableLocal; ?>,<?PHP echo $disableSession; ?>); }()); <?PHP return str_replace(array("\n", "\r", "\t", " "), ' ', ob_get_clean()); } /** * @param array $ar * @param false $url * @param bool $chars * * @return string */ private function getURL($ar = array(), $url = false,$chars=true) { if ($url) { $uri = URI::getInstance($url); } else { $uri = URI::getInstance(); } $q = $uri->getQuery(true); if (count($ar) > 0) { if(isset($q['cookiehint'])) { unset($q['cookiehint']); } $q = array_merge($q, $ar); } $uri->setQuery($q); if($chars==false) { return $uri->toString(); } return htmlspecialchars($uri->toString(),ENT_COMPAT, 'UTF-8'); } /** * @param mixed $app */ public function setApp($app) { $this->app = $app; } /** * @param mixed $assetManager */ public function setAssetManager($assetManager) { $this->assetManager = $assetManager; } /** * @param mixed $issite */ public function setIssite($issite) { $this->issite = $issite; } /** * @param bool $jsblocker */ public function setJsblocker($jsblocker) { $this->jsblocker = $jsblocker; } /** * @param bool $setbottom */ public function setSetbottom($setbottom) { $this->setbottom = $setbottom; } /** * @param array $infolink */ public function setInfolink($infolink) { $this->infolink = $infolink; } /** * @param bool $loadcode */ public function setLoadcode($loadcode) { $this->_loadcode = $loadcode; } /** * @return string */ public function onPageCacheGetKey() { $x = 0; if (isset($_COOKIE['reDimCookieHint'])) { $x = $_COOKIE['reDimCookieHint']; } return 'reDimCookieHint' . $x; } /** * @return array|false|string|string[] */ private function _get_code() { $link = $this->_get_infolink('infourl'); $linkimprint = $this->_get_infolink('imprinturl'); $linkok = $this->getURL(array('rCH' => 2)); $linknotok = $this->getURL(array('rCH' => -2)); $position = $this->params->get('position', 'bottom'); $refusal = (int) $this->params->get('refusal'); if ($refusal == 2) { $refusalurl = trim((string) $this->params->get('refusalurl', 'https://www.cookieinfo.org/')); /*if(empty($refusalurl)) { $refusalurl = $this->getURL(array('reDimCookieHint'=>-1)); }*/ } else { $refusalurl = ''; } ob_start(); $file = str_replace('/', '', $this->params->get('file', 'redimstyle.php')); $l = $this->app->getLanguage()->getTag(); $temp = $l . '_' . $file; if (file_Exists(JPATH_SITE . '/plugins/system/cookiehint/include/' . $temp)) { $file = $temp; } else { if (!file_exists(JPATH_SITE . '/plugins/system/cookiehint/include/' . $file)) { $file = 'default.php'; } } include_once(JPATH_SITE . '/plugins/system/cookiehint/include/' . $file); ?> <script type="text/javascript"> document.addEventListener("DOMContentLoaded", function(event) { if (!navigator.cookieEnabled){ document.getElementById('redim-cookiehint-<?PHP echo $position; ?>').remove(); } }); function cookiehintfadeOut(el) { el.style.opacity = 1; (function fade() { if ((el.style.opacity -= .1) < 0) { el.style.display = "none"; } else { requestAnimationFrame(fade); } })(); } <?PHP if ($this->params->get('cookiemode') == 0) { $d = (int) $this->params->get('cookieexpires', 365); $c = date('D, d M Y', time() + (86400 * $d)) . ' 23:59:59 GMT;'; $c = 'reDimCookieHint=%s; expires=' . $c; } else { $c = 'reDimCookieHint=%s; expires=0;'; } ?> function cookiehintsubmit(obj) { document.cookie = '<?PHP echo printf($c, 1); ?>; path=/'; cookiehintfadeOut(document.getElementById('redim-cookiehint-<?PHP echo $position;?>')); return true; } function cookiehintsubmitno(obj) { document.cookie = 'reDimCookieHint=-1; expires=0; path=/'; cookiehintfadeOut(document.getElementById('redim-cookiehint-<?PHP echo $position;?>')); return true; } </script> <?PHP return str_replace(array("\n", "\r", "\t", " "), ' ', ob_get_clean()); } /** * @param string $name * * @return false|mixed */ private function _get_infolink($name='infourl') { if(isset($this->infolink[$name])) { return $this->infolink[$name]; } $lang = $this->app->getLanguage(); $lang->load("plg_system_cookiehint", JPATH_ADMINISTRATOR); $l = $lang->getTag(); $link = false; $links = $this->params->get($name, array()); if (is_object($links)) { $links = (array) $links; } if (is_array($links)) { if (isset($links[$l])) { if (!empty($links[$l])) { $link = $links[$l]; } } if (empty($link)) { if (count($links) > 0) { foreach ($links as $link) { if (!empty($link)) { break; } } } } } unset($links); $url = URI::getInstance()->toString(array('path', 'query', 'fragment')); if ($link) { if ($url == $link OR $url == '/' . $link) { if (!empty($link)) { $link = false; } } } $this->infolink[$name]=$link; return $link; } private function _gtm_consent_JS($ch) { $session=$this->app->getSession(); $ch2=$session->get('gtag',null); if($ch2==$ch AND $ch2!==null ) { return ''; } switch($ch) { case true: case 1: $gtag='granted'; break; default: $gtag='denied'; break; } $session->set('gtag',$ch); $tmp="(function() { if (typeof gtag !== 'undefined') { gtag('consent', '".$gtag."', { 'ad_storage': '".$gtag."', 'ad_user_data': '".$gtag."', 'ad_personalization': '".$gtag."', 'functionality_storage': '".$gtag."', 'personalization_storage': '".$gtag."', 'security_storage': '".$gtag."', 'analytics_storage': '".$gtag."' }); } })();"; $tmp=str_replace(array("\r","\n","\t", " "),' ',$tmp); return $tmp; } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0.01 |
proxy
|
phpinfo
|
Настройка