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