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