1f09b1d21SJuergen-aus-Zuendorf<?php 2f09b1d21SJuergen-aus-Zuendorf/** 3f09b1d21SJuergen-aus-Zuendorf * DokuWiki Plugin footer (Action Component) 4f09b1d21SJuergen-aus-Zuendorf * 5f09b1d21SJuergen-aus-Zuendorf * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6f09b1d21SJuergen-aus-Zuendorf * 7f09b1d21SJuergen-aus-Zuendorf * Original: from Plugin headerfooter, author Li Zheng <lzpublic@qq.com> 8f09b1d21SJuergen-aus-Zuendorf * Modified by Juergen H-J-Schuemmer@Web.de 9f09b1d21SJuergen-aus-Zuendorf * Only the footer component is supported in this plugin because the header functionality breaks the section edit mode 10f09b1d21SJuergen-aus-Zuendorf */ 11f09b1d21SJuergen-aus-Zuendorf 12f09b1d21SJuergen-aus-Zuendorf// must be run within Dokuwiki 13f09b1d21SJuergen-aus-Zuendorfif(!defined('DOKU_INC')) die(); 14f09b1d21SJuergen-aus-Zuendorf 15f09b1d21SJuergen-aus-Zuendorfclass action_plugin_footer extends DokuWiki_Action_Plugin { 16f09b1d21SJuergen-aus-Zuendorf public function register(Doku_Event_Handler $controller) { 17f09b1d21SJuergen-aus-Zuendorf 18f09b1d21SJuergen-aus-Zuendorf $controller->register_hook('PARSER_WIKITEXT_PREPROCESS', 'AFTER', $this, 'handle_parser_wikitext_preprocess'); 19f09b1d21SJuergen-aus-Zuendorf 20f09b1d21SJuergen-aus-Zuendorf } 21f09b1d21SJuergen-aus-Zuendorf public function handle_parser_wikitext_preprocess(Doku_Event &$event, $param) { 22f09b1d21SJuergen-aus-Zuendorf global $INFO; 23f09b1d21SJuergen-aus-Zuendorf global $ID; 24f09b1d21SJuergen-aus-Zuendorf global $conf; 25f09b1d21SJuergen-aus-Zuendorf 26f09b1d21SJuergen-aus-Zuendorf //what does this mean??? 27f09b1d21SJuergen-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ü. 28f09b1d21SJuergen-aus-Zuendorf 29f09b1d21SJuergen-aus-Zuendorf //helper array needed for parsePageTemplate 30f09b1d21SJuergen-aus-Zuendorf //so that replacement like shown here is possible: https://www.dokuwiki.org/namespace_templates#replacement_patterns 31f09b1d21SJuergen-aus-Zuendorf $data = array( 32f09b1d21SJuergen-aus-Zuendorf 'id' => $ID, // the id of the page to be created 33f09b1d21SJuergen-aus-Zuendorf 'tpl' => '', // the text used as template 34f09b1d21SJuergen-aus-Zuendorf ); 35f09b1d21SJuergen-aus-Zuendorf 36f09b1d21SJuergen-aus-Zuendorf // Auslesen der Konfiguration für das Präfix der Vorlage-Dateien: 37f09b1d21SJuergen-aus-Zuendorf $pre_nsp = $this->getConf('prefix_namespace'); 38f09b1d21SJuergen-aus-Zuendorf if ($pre_nsp != '') { 39f09b1d21SJuergen-aus-Zuendorf $pre_nsp = '/'.$pre_nsp.'_'; 40f09b1d21SJuergen-aus-Zuendorf } else { 41f09b1d21SJuergen-aus-Zuendorf $pre_nsp = '/_'; // Defaultwert 1 Unterstrich für Namespace 42f09b1d21SJuergen-aus-Zuendorf }; 43f09b1d21SJuergen-aus-Zuendorf $pre_sub = $this->getConf('prefix_subnamespace'); 44f09b1d21SJuergen-aus-Zuendorf if ($pre_sub != '') { 45f09b1d21SJuergen-aus-Zuendorf $pre_sub = '/'.$pre_sub.'_'; 46f09b1d21SJuergen-aus-Zuendorf } else { 47f09b1d21SJuergen-aus-Zuendorf $pre_sub = '/__'; // Defaultwert 2 Unterstriche für Sub-Namespace 48f09b1d21SJuergen-aus-Zuendorf }; 49f09b1d21SJuergen-aus-Zuendorf 50f09b1d21SJuergen-aus-Zuendorf $footerpath = ''; 51f09b1d21SJuergen-aus-Zuendorf $templatename = 'footer.txt'; // Name der Vorlage 52f09b1d21SJuergen-aus-Zuendorf $path = dirname(wikiFN($ID)); 53f09b1d21SJuergen-aus-Zuendorf if (@file_exists($path.$pre_nsp.$templatename)) { 54f09b1d21SJuergen-aus-Zuendorf $footerpath = $path.$pre_nsp.$templatename; 55f09b1d21SJuergen-aus-Zuendorf } else { 56f09b1d21SJuergen-aus-Zuendorf // search upper namespaces for templates 57f09b1d21SJuergen-aus-Zuendorf $len = strlen(rtrim($conf['datadir'], '/')); 58f09b1d21SJuergen-aus-Zuendorf while (strlen($path) >= $len) { 59f09b1d21SJuergen-aus-Zuendorf if (@file_exists($path.$pre_sub.$templatename)) { 60f09b1d21SJuergen-aus-Zuendorf $footerpath = $path.$pre_sub.$templatename; 61f09b1d21SJuergen-aus-Zuendorf break; 62f09b1d21SJuergen-aus-Zuendorf } 63f09b1d21SJuergen-aus-Zuendorf $path = substr($path, 0, strrpos($path, '/')); 64f09b1d21SJuergen-aus-Zuendorf } 65f09b1d21SJuergen-aus-Zuendorf } 66f09b1d21SJuergen-aus-Zuendorf 67f09b1d21SJuergen-aus-Zuendorf if (!empty($footerpath)) { 68*c5828f78SJuergen-aus-Zuendorf $content = $event->data; 69*c5828f78SJuergen-aus-Zuendorf if(strpos($content,"~~NOFOOTER~~") == false) { 70*c5828f78SJuergen-aus-Zuendorf // Prüfung. ob der Befehl "~~NOFOOTER~~" im Quelltext enthalten ist 71f09b1d21SJuergen-aus-Zuendorf $footer = file_get_contents($footerpath); 72f09b1d21SJuergen-aus-Zuendorf if ($footer !== false) { 73f09b1d21SJuergen-aus-Zuendorf $data['tpl'] = cleanText($footer); 74f09b1d21SJuergen-aus-Zuendorf $footer = parsePageTemplate($data); 75f09b1d21SJuergen-aus-Zuendorf if ($this->getConf('separation') == 'paragraph') { 76f09b1d21SJuergen-aus-Zuendorf // Wenn Absätze zum Teilen verwendet werden 77f09b1d21SJuergen-aus-Zuendorf $footer = rtrim($footer, " \r\n\\") . "\n\n"; 78f09b1d21SJuergen-aus-Zuendorf } 79f09b1d21SJuergen-aus-Zuendorf $event->data .= $footer; 80f09b1d21SJuergen-aus-Zuendorf } 81*c5828f78SJuergen-aus-Zuendorf } else { 82*c5828f78SJuergen-aus-Zuendorf $event->data = str_replace('~~NOFOOTER~~','',$content); 83*c5828f78SJuergen-aus-Zuendorf // Befehl "~~NOFOOTER~~" soll nicht angezeigt werden 84*c5828f78SJuergen-aus-Zuendorf } 85f09b1d21SJuergen-aus-Zuendorf } 86f09b1d21SJuergen-aus-Zuendorf } 87f09b1d21SJuergen-aus-Zuendorf} 88