xref: /plugin/footerv2/action.php (revision c5828f78a772d2c413a55d5ed3054b5cf2a6023f)
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