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