1f09b1d21SJuergen-aus-Zuendorf<?php 2*c83cd936SJuergen-aus-Zuendorf 3f09b1d21SJuergen-aus-Zuendorf/** 4*c83cd936SJuergen-aus-Zuendorf 5f09b1d21SJuergen-aus-Zuendorf * DokuWiki Plugin footer (Action Component) 6*c83cd936SJuergen-aus-Zuendorf 7f09b1d21SJuergen-aus-Zuendorf * 8*c83cd936SJuergen-aus-Zuendorf 9f09b1d21SJuergen-aus-Zuendorf * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 10*c83cd936SJuergen-aus-Zuendorf 11f09b1d21SJuergen-aus-Zuendorf * 12*c83cd936SJuergen-aus-Zuendorf 13f09b1d21SJuergen-aus-Zuendorf * Original: from Plugin headerfooter, author Li Zheng <lzpublic@qq.com> 14*c83cd936SJuergen-aus-Zuendorf 15f09b1d21SJuergen-aus-Zuendorf * Modified by Juergen H-J-Schuemmer@Web.de 16*c83cd936SJuergen-aus-Zuendorf 17f09b1d21SJuergen-aus-Zuendorf * Only the footer component is supported in this plugin because the header functionality breaks the section edit mode 18*c83cd936SJuergen-aus-Zuendorf 19f09b1d21SJuergen-aus-Zuendorf */ 20f09b1d21SJuergen-aus-Zuendorf 21*c83cd936SJuergen-aus-Zuendorf 22f09b1d21SJuergen-aus-Zuendorf// must be run within Dokuwiki 23*c83cd936SJuergen-aus-Zuendorf 24f09b1d21SJuergen-aus-Zuendorfif(!defined('DOKU_INC')) die(); 25f09b1d21SJuergen-aus-Zuendorf 26*c83cd936SJuergen-aus-Zuendorf 27f09b1d21SJuergen-aus-Zuendorfclass action_plugin_footer extends DokuWiki_Action_Plugin { 28*c83cd936SJuergen-aus-Zuendorf 29f09b1d21SJuergen-aus-Zuendorf public function register(Doku_Event_Handler $controller) { 30f09b1d21SJuergen-aus-Zuendorf 31*c83cd936SJuergen-aus-Zuendorf 32f09b1d21SJuergen-aus-Zuendorf $controller->register_hook('PARSER_WIKITEXT_PREPROCESS', 'AFTER', $this, 'handle_parser_wikitext_preprocess'); 33f09b1d21SJuergen-aus-Zuendorf 34*c83cd936SJuergen-aus-Zuendorf // aus Seite "https://github.com/MrBertie/pagequery/commit/6cae014dc7cc779c0be8d0a660af42407b414806": 35*c83cd936SJuergen-aus-Zuendorf 36*c83cd936SJuergen-aus-Zuendorf $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, '_purgecache'); 37*c83cd936SJuergen-aus-Zuendorf 38f09b1d21SJuergen-aus-Zuendorf } 39*c83cd936SJuergen-aus-Zuendorf 40f09b1d21SJuergen-aus-Zuendorf public function handle_parser_wikitext_preprocess(Doku_Event &$event, $param) { 41*c83cd936SJuergen-aus-Zuendorf 42f09b1d21SJuergen-aus-Zuendorf global $INFO; 43*c83cd936SJuergen-aus-Zuendorf 44f09b1d21SJuergen-aus-Zuendorf global $ID; 45*c83cd936SJuergen-aus-Zuendorf 46f09b1d21SJuergen-aus-Zuendorf global $conf; 47f09b1d21SJuergen-aus-Zuendorf 48*c83cd936SJuergen-aus-Zuendorf 49f09b1d21SJuergen-aus-Zuendorf //what does this mean??? 50*c83cd936SJuergen-aus-Zuendorf 51f09b1d21SJuergen-aus-Zuendorf if ($INFO['id'] != '') return; // Jede Seite wird zweimal ausgeführt. Wenn die ID leer ist, ist es der echte Text, andernfalls ist es das Menü. 52f09b1d21SJuergen-aus-Zuendorf 53*c83cd936SJuergen-aus-Zuendorf 54f09b1d21SJuergen-aus-Zuendorf //helper array needed for parsePageTemplate 55*c83cd936SJuergen-aus-Zuendorf 56f09b1d21SJuergen-aus-Zuendorf //so that replacement like shown here is possible: https://www.dokuwiki.org/namespace_templates#replacement_patterns 57*c83cd936SJuergen-aus-Zuendorf 58f09b1d21SJuergen-aus-Zuendorf $data = array( 59*c83cd936SJuergen-aus-Zuendorf 60f09b1d21SJuergen-aus-Zuendorf 'id' => $ID, // the id of the page to be created 61*c83cd936SJuergen-aus-Zuendorf 62f09b1d21SJuergen-aus-Zuendorf 'tpl' => '', // the text used as template 63*c83cd936SJuergen-aus-Zuendorf 64f09b1d21SJuergen-aus-Zuendorf ); 65f09b1d21SJuergen-aus-Zuendorf 66*c83cd936SJuergen-aus-Zuendorf 67f09b1d21SJuergen-aus-Zuendorf // Auslesen der Konfiguration für das Präfix der Vorlage-Dateien: 68*c83cd936SJuergen-aus-Zuendorf 69f09b1d21SJuergen-aus-Zuendorf $pre_nsp = $this->getConf('prefix_namespace'); 70*c83cd936SJuergen-aus-Zuendorf 71f09b1d21SJuergen-aus-Zuendorf if ($pre_nsp != '') { 72*c83cd936SJuergen-aus-Zuendorf 73f09b1d21SJuergen-aus-Zuendorf $pre_nsp = '/'.$pre_nsp.'_'; 74*c83cd936SJuergen-aus-Zuendorf 75f09b1d21SJuergen-aus-Zuendorf } else { 76*c83cd936SJuergen-aus-Zuendorf 77f09b1d21SJuergen-aus-Zuendorf $pre_nsp = '/_'; // Defaultwert 1 Unterstrich für Namespace 78*c83cd936SJuergen-aus-Zuendorf 79f09b1d21SJuergen-aus-Zuendorf }; 80*c83cd936SJuergen-aus-Zuendorf 81f09b1d21SJuergen-aus-Zuendorf $pre_sub = $this->getConf('prefix_subnamespace'); 82*c83cd936SJuergen-aus-Zuendorf 83f09b1d21SJuergen-aus-Zuendorf if ($pre_sub != '') { 84*c83cd936SJuergen-aus-Zuendorf 85f09b1d21SJuergen-aus-Zuendorf $pre_sub = '/'.$pre_sub.'_'; 86*c83cd936SJuergen-aus-Zuendorf 87f09b1d21SJuergen-aus-Zuendorf } else { 88*c83cd936SJuergen-aus-Zuendorf 89f09b1d21SJuergen-aus-Zuendorf $pre_sub = '/__'; // Defaultwert 2 Unterstriche für Sub-Namespace 90*c83cd936SJuergen-aus-Zuendorf 91f09b1d21SJuergen-aus-Zuendorf }; 92f09b1d21SJuergen-aus-Zuendorf 93*c83cd936SJuergen-aus-Zuendorf 94f09b1d21SJuergen-aus-Zuendorf $footerpath = ''; 95*c83cd936SJuergen-aus-Zuendorf 96f09b1d21SJuergen-aus-Zuendorf $templatename = 'footer.txt'; // Name der Vorlage 97*c83cd936SJuergen-aus-Zuendorf 98f09b1d21SJuergen-aus-Zuendorf $path = dirname(wikiFN($ID)); 99*c83cd936SJuergen-aus-Zuendorf 100f09b1d21SJuergen-aus-Zuendorf if (@file_exists($path.$pre_nsp.$templatename)) { 101*c83cd936SJuergen-aus-Zuendorf 102f09b1d21SJuergen-aus-Zuendorf $footerpath = $path.$pre_nsp.$templatename; 103*c83cd936SJuergen-aus-Zuendorf 104f09b1d21SJuergen-aus-Zuendorf } else { 105*c83cd936SJuergen-aus-Zuendorf 106f09b1d21SJuergen-aus-Zuendorf // search upper namespaces for templates 107*c83cd936SJuergen-aus-Zuendorf 108f09b1d21SJuergen-aus-Zuendorf $len = strlen(rtrim($conf['datadir'], '/')); 109*c83cd936SJuergen-aus-Zuendorf 110f09b1d21SJuergen-aus-Zuendorf while (strlen($path) >= $len) { 111*c83cd936SJuergen-aus-Zuendorf 112f09b1d21SJuergen-aus-Zuendorf if (@file_exists($path.$pre_sub.$templatename)) { 113*c83cd936SJuergen-aus-Zuendorf 114f09b1d21SJuergen-aus-Zuendorf $footerpath = $path.$pre_sub.$templatename; 115*c83cd936SJuergen-aus-Zuendorf 116f09b1d21SJuergen-aus-Zuendorf break; 117*c83cd936SJuergen-aus-Zuendorf 118f09b1d21SJuergen-aus-Zuendorf } 119f09b1d21SJuergen-aus-Zuendorf 120*c83cd936SJuergen-aus-Zuendorf $path = substr($path, 0, strrpos($path, '/')); 121*c83cd936SJuergen-aus-Zuendorf 122*c83cd936SJuergen-aus-Zuendorf } 123*c83cd936SJuergen-aus-Zuendorf 124*c83cd936SJuergen-aus-Zuendorf } 125*c83cd936SJuergen-aus-Zuendorf 126*c83cd936SJuergen-aus-Zuendorf 127f09b1d21SJuergen-aus-Zuendorf if (!empty($footerpath)) { 128*c83cd936SJuergen-aus-Zuendorf 129c5828f78SJuergen-aus-Zuendorf $content = $event->data; 130*c83cd936SJuergen-aus-Zuendorf 131c5828f78SJuergen-aus-Zuendorf if(strpos($content,"~~NOFOOTER~~") == false) { 132*c83cd936SJuergen-aus-Zuendorf 133c5828f78SJuergen-aus-Zuendorf // Prüfung. ob der Befehl "~~NOFOOTER~~" im Quelltext enthalten ist 134*c83cd936SJuergen-aus-Zuendorf 135f09b1d21SJuergen-aus-Zuendorf $footer = file_get_contents($footerpath); 136*c83cd936SJuergen-aus-Zuendorf 137f09b1d21SJuergen-aus-Zuendorf if ($footer !== false) { 138*c83cd936SJuergen-aus-Zuendorf 139f09b1d21SJuergen-aus-Zuendorf $data['tpl'] = cleanText($footer); 140*c83cd936SJuergen-aus-Zuendorf 141f09b1d21SJuergen-aus-Zuendorf $footer = parsePageTemplate($data); 142*c83cd936SJuergen-aus-Zuendorf 143f09b1d21SJuergen-aus-Zuendorf if ($this->getConf('separation') == 'paragraph') { 144*c83cd936SJuergen-aus-Zuendorf 145f09b1d21SJuergen-aus-Zuendorf // Wenn Absätze zum Teilen verwendet werden 146*c83cd936SJuergen-aus-Zuendorf 147f09b1d21SJuergen-aus-Zuendorf $footer = rtrim($footer, " \r\n\\") . "\n\n"; 148*c83cd936SJuergen-aus-Zuendorf 149f09b1d21SJuergen-aus-Zuendorf } 150*c83cd936SJuergen-aus-Zuendorf 151f09b1d21SJuergen-aus-Zuendorf $event->data .= $footer; 152*c83cd936SJuergen-aus-Zuendorf 153f09b1d21SJuergen-aus-Zuendorf } 154*c83cd936SJuergen-aus-Zuendorf 155*c83cd936SJuergen-aus-Zuendorf /* 156*c83cd936SJuergen-aus-Zuendorf 157*c83cd936SJuergen-aus-Zuendorf // Code übernommen von Seite "https://www.dokuwiki.org/devel:event_handlers_code#caching": 158*c83cd936SJuergen-aus-Zuendorf 159*c83cd936SJuergen-aus-Zuendorf $event->preventDefault(); // stop dokuwiki carrying out its own checks 160*c83cd936SJuergen-aus-Zuendorf 161*c83cd936SJuergen-aus-Zuendorf $event->stopPropagation(); // avoid other handlers of this event, changing our decision here 162*c83cd936SJuergen-aus-Zuendorf 163*c83cd936SJuergen-aus-Zuendorf $event->result = false; // don't use the cached version 164*c83cd936SJuergen-aus-Zuendorf 165*c83cd936SJuergen-aus-Zuendorf */ 166*c83cd936SJuergen-aus-Zuendorf 167c5828f78SJuergen-aus-Zuendorf } else { 168*c83cd936SJuergen-aus-Zuendorf 169c5828f78SJuergen-aus-Zuendorf $event->data = str_replace('~~NOFOOTER~~','',$content); 170*c83cd936SJuergen-aus-Zuendorf 171c5828f78SJuergen-aus-Zuendorf // Befehl "~~NOFOOTER~~" soll nicht angezeigt werden 172*c83cd936SJuergen-aus-Zuendorf 173c5828f78SJuergen-aus-Zuendorf } 174*c83cd936SJuergen-aus-Zuendorf 175*c83cd936SJuergen-aus-Zuendorf } 176*c83cd936SJuergen-aus-Zuendorf 177*c83cd936SJuergen-aus-Zuendorf } 178*c83cd936SJuergen-aus-Zuendorf 179*c83cd936SJuergen-aus-Zuendorf 180*c83cd936SJuergen-aus-Zuendorf // Codeschnipsel aus Seite "https://github.com/MrBertie/pagequery/commit/6cae014dc7cc779c0be8d0a660af42407b414806": 181*c83cd936SJuergen-aus-Zuendorf 182*c83cd936SJuergen-aus-Zuendorf /** 183*c83cd936SJuergen-aus-Zuendorf 184*c83cd936SJuergen-aus-Zuendorf * Check for pages changes and eventually purge cache. 185*c83cd936SJuergen-aus-Zuendorf 186*c83cd936SJuergen-aus-Zuendorf * 187*c83cd936SJuergen-aus-Zuendorf 188*c83cd936SJuergen-aus-Zuendorf * @author Samuele Tognini <samuele@samuele.netsons.org> 189*c83cd936SJuergen-aus-Zuendorf 190*c83cd936SJuergen-aus-Zuendorf * 191*c83cd936SJuergen-aus-Zuendorf 192*c83cd936SJuergen-aus-Zuendorf * @param Doku_Event $event 193*c83cd936SJuergen-aus-Zuendorf 194*c83cd936SJuergen-aus-Zuendorf * @param mixed $param not defined 195*c83cd936SJuergen-aus-Zuendorf 196*c83cd936SJuergen-aus-Zuendorf */ 197*c83cd936SJuergen-aus-Zuendorf 198*c83cd936SJuergen-aus-Zuendorf function _purgecache(&$event, $param) { 199*c83cd936SJuergen-aus-Zuendorf 200*c83cd936SJuergen-aus-Zuendorf global $ID; 201*c83cd936SJuergen-aus-Zuendorf 202*c83cd936SJuergen-aus-Zuendorf global $conf; 203*c83cd936SJuergen-aus-Zuendorf 204*c83cd936SJuergen-aus-Zuendorf /** @var cache_parser $cache */ 205*c83cd936SJuergen-aus-Zuendorf 206*c83cd936SJuergen-aus-Zuendorf $cache = &$event->data; 207*c83cd936SJuergen-aus-Zuendorf 208*c83cd936SJuergen-aus-Zuendorf 209*c83cd936SJuergen-aus-Zuendorf if(!isset($cache->page)) return; 210*c83cd936SJuergen-aus-Zuendorf 211*c83cd936SJuergen-aus-Zuendorf //purge only xhtml cache 212*c83cd936SJuergen-aus-Zuendorf 213*c83cd936SJuergen-aus-Zuendorf if($cache->mode != "xhtml") return; 214*c83cd936SJuergen-aus-Zuendorf 215*c83cd936SJuergen-aus-Zuendorf //Check if it is an pagequery page 216*c83cd936SJuergen-aus-Zuendorf 217*c83cd936SJuergen-aus-Zuendorf if(!p_get_metadata($ID, 'pagequery')) return; 218*c83cd936SJuergen-aus-Zuendorf 219*c83cd936SJuergen-aus-Zuendorf $aclcache = $this->getConf('aclcache'); 220*c83cd936SJuergen-aus-Zuendorf 221*c83cd936SJuergen-aus-Zuendorf if($conf['useacl']) { 222*c83cd936SJuergen-aus-Zuendorf 223*c83cd936SJuergen-aus-Zuendorf $newkey = false; 224*c83cd936SJuergen-aus-Zuendorf 225*c83cd936SJuergen-aus-Zuendorf if($aclcache == 'user') { 226*c83cd936SJuergen-aus-Zuendorf 227*c83cd936SJuergen-aus-Zuendorf //Cache per user 228*c83cd936SJuergen-aus-Zuendorf 229*c83cd936SJuergen-aus-Zuendorf if($_SERVER['REMOTE_USER']) $newkey = $_SERVER['REMOTE_USER']; 230*c83cd936SJuergen-aus-Zuendorf 231*c83cd936SJuergen-aus-Zuendorf } else if($aclcache == 'groups') { 232*c83cd936SJuergen-aus-Zuendorf 233*c83cd936SJuergen-aus-Zuendorf //Cache per groups 234*c83cd936SJuergen-aus-Zuendorf 235*c83cd936SJuergen-aus-Zuendorf global $INFO; 236*c83cd936SJuergen-aus-Zuendorf 237*c83cd936SJuergen-aus-Zuendorf if($INFO['userinfo']['grps']) $newkey = implode('#', $INFO['userinfo']['grps']); 238*c83cd936SJuergen-aus-Zuendorf 239*c83cd936SJuergen-aus-Zuendorf } 240*c83cd936SJuergen-aus-Zuendorf 241*c83cd936SJuergen-aus-Zuendorf if($newkey) { 242*c83cd936SJuergen-aus-Zuendorf 243*c83cd936SJuergen-aus-Zuendorf $cache->key .= "#".$newkey; 244*c83cd936SJuergen-aus-Zuendorf 245*c83cd936SJuergen-aus-Zuendorf $cache->cache = getCacheName($cache->key, $cache->ext); 246*c83cd936SJuergen-aus-Zuendorf 247*c83cd936SJuergen-aus-Zuendorf } 248*c83cd936SJuergen-aus-Zuendorf 249*c83cd936SJuergen-aus-Zuendorf } 250*c83cd936SJuergen-aus-Zuendorf 251*c83cd936SJuergen-aus-Zuendorf //Check if a page is more recent than purgefile. 252*c83cd936SJuergen-aus-Zuendorf 253*c83cd936SJuergen-aus-Zuendorf if(@filemtime($cache->cache) < @filemtime($conf['cachedir'].'/purgefile')) { 254*c83cd936SJuergen-aus-Zuendorf 255*c83cd936SJuergen-aus-Zuendorf $event->preventDefault(); 256*c83cd936SJuergen-aus-Zuendorf 257*c83cd936SJuergen-aus-Zuendorf $event->stopPropagation(); 258*c83cd936SJuergen-aus-Zuendorf 259*c83cd936SJuergen-aus-Zuendorf $event->result = false; 260*c83cd936SJuergen-aus-Zuendorf 261f09b1d21SJuergen-aus-Zuendorf } 262f09b1d21SJuergen-aus-Zuendorf } 263f09b1d21SJuergen-aus-Zuendorf}