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