<?php use dokuwiki\Extension\ActionPlugin; use dokuwiki\Extension\EventHandler; use dokuwiki\Extension\Event; /** * DokuWiki Plugin googleconsentmananger (Action Component) * * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html * @author i-net /// software <tools@inetsoftware.de> */ class action_plugin_googleconsentmananger extends ActionPlugin { const GTMID = 'GTMID'; /** @inheritDoc */ public function register(EventHandler $controller) { $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'handleTplMetaheaderOutput'); $controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'handleDokuwikiStarted'); } /** * Event handler for DOKUWIKI_STARTED * * @see https://www.dokuwiki.org/devel:events:DOKUWIKI_STARTED * @param Event $event Event object * @param mixed $param optional parameter passed when event was registered * @return void */ public function handleDokuwikiStarted(Event $event, $param) { global $JSINFO; global $conf; $JSINFO['plugins']['googleconsent'] = array ( 'template' => $conf['template'], ); $this->addConfig( 'acceptBody' ); $this->addConfig( 'acceptButton' ); $this->addConfig( 'declineButton' ); $this->addConfig( 'policyButton' ); $this->addConfig( 'policyURL' ); $this->addConfig( 'acceptOnContinue' ); $this->addConfig( 'acceptOnScroll' ); $this->addConfig( 'acceptAnyClick' ); $this->addConfig( 'expireDays' ); $this->addConfig( 'renewOnVisit' ); $this->addConfig( 'forceShow' ); } private function addConfig( $valueName ) { global $JSINFO; $value = $this->getConf($valueName); if ( !empty( $value ) ) { $JSINFO['plugins']['googleconsent'][$valueName] = $value; } } /** * Event handler for TPL_METAHEADER_OUTPUT * * @see https://www.dokuwiki.org/devel:events:TPL_METAHEADER_OUTPUT * @param Event $event Event object * @param mixed $param optional parameter passed when event was registered * @return void */ public function handleTplMetaheaderOutput(Event $event, $param) { $GTMID = $this->getConf(self::GTMID); if(!$GTMID) { return; } $event->data['noscript'][] = array ( '_data' => '<iframe src="//www.googletagmanager.com/ns.html?id='.$this->getConf(self::GTMID).'" height="0" width="0" style="display:none;visibility:hidden"></iframe>', ); $event->data['script'][] = array ( 'type' => 'text/javascript', '_data' => " window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('config', '${GTMID}'); gtag('consent', 'default', { 'ad_user_data': 'denied', 'ad_personalization': 'denied', 'ad_storage': 'denied', 'analytics_storage': 'denied', 'wait_for_update': 500, }); gtag('js', new Date()); ", ); } }