xref: /plugin/pagetemplater/action.php (revision 8d79fe1b14c477517513e1465a1fae347595d893)
1*8d79fe1bSGerry Weißbach<?php
2*8d79fe1bSGerry Weißbach
3*8d79fe1bSGerry Weißbach/**
4*8d79fe1bSGerry Weißbach * Select Template Pages for your Content
5*8d79fe1bSGerry Weißbach * The templates Pages have to have the entry @@CONTENT@@
6*8d79fe1bSGerry Weißbach * the template per page can be defined using the META plugin
7*8d79fe1bSGerry Weißbach *
8*8d79fe1bSGerry Weißbach * @license  GPL 2 (http://www.gnu.org/licenses/gpl.html)
9*8d79fe1bSGerry Weißbach * @author     i-net software <tools@inetsoftware.de>
10*8d79fe1bSGerry Weißbach * @author     Gerry Weissbach <gweissbach@inetsoftware.de>
11*8d79fe1bSGerry Weißbach */
12*8d79fe1bSGerry Weißbach
13*8d79fe1bSGerry Weißbach// must be run within Dokuwiki
14*8d79fe1bSGerry Weißbachif (!defined('DOKU_INC'))
15*8d79fe1bSGerry Weißbach    die();
16*8d79fe1bSGerry Weißbach
17*8d79fe1bSGerry Weißbachif (!defined('DOKU_LF'))
18*8d79fe1bSGerry Weißbach    define('DOKU_LF', "\n");
19*8d79fe1bSGerry Weißbachif (!defined('DOKU_TAB'))
20*8d79fe1bSGerry Weißbach    define('DOKU_TAB', "\t");
21*8d79fe1bSGerry Weißbachif (!defined('DOKU_PLUGIN'))
22*8d79fe1bSGerry Weißbach    define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
23*8d79fe1bSGerry Weißbach
24*8d79fe1bSGerry Weißbachrequire_once (DOKU_PLUGIN . 'action.php');
25*8d79fe1bSGerry Weißbachrequire_once(DOKU_INC . 'inc/pageutils.php');
26*8d79fe1bSGerry Weißbach
27*8d79fe1bSGerry Weißbachclass action_plugin_pagetemplater extends DokuWiki_Action_Plugin {
28*8d79fe1bSGerry Weißbach
29*8d79fe1bSGerry Weißbach    function getInfo(){
30*8d79fe1bSGerry Weißbach        return array_merge(confToHash(dirname(__FILE__).'/info.txt'), array(
31*8d79fe1bSGerry Weißbach				'name' => 'Page Templater Action Component',
32*8d79fe1bSGerry Weißbach		));
33*8d79fe1bSGerry Weißbach    }
34*8d79fe1bSGerry Weißbach
35*8d79fe1bSGerry Weißbach    /**
36*8d79fe1bSGerry Weißbach     * Register the eventhandlers.
37*8d79fe1bSGerry Weißbach     */
38*8d79fe1bSGerry Weißbach    function register(& $controller) {
39*8d79fe1bSGerry Weißbach        $controller->register_hook('TPL_CONTENT_DISPLAY', 'BEFORE', $this, 'handle_content_display', array ());
40*8d79fe1bSGerry Weißbach    }
41*8d79fe1bSGerry Weißbach
42*8d79fe1bSGerry Weißbach    function handle_content_display(& $event, $params) {
43*8d79fe1bSGerry Weißbach		global $ACT, $INFO;
44*8d79fe1bSGerry Weißbach
45*8d79fe1bSGerry Weißbach		if ( $ACT != 'show' )
46*8d79fe1bSGerry Weißbach			return;
47*8d79fe1bSGerry Weißbach
48*8d79fe1bSGerry Weißbach		// are we in an avtive Namespace?
49*8d79fe1bSGerry Weißbach		$namespace = $this->_getActiveNamespace();
50*8d79fe1bSGerry Weißbach		if (!$namespace && empty($INFO['meta']['templater']['page'])) { return; }
51*8d79fe1bSGerry Weißbach
52*8d79fe1bSGerry Weißbach		// check for the template
53*8d79fe1bSGerry Weißbach		$template = p_wiki_xhtml(empty ($INFO['meta']['templater']['page']) ? $this->getConf('templater_page') : $INFO['meta']['templater']['page'],'',false);
54*8d79fe1bSGerry Weißbach		if ( !$template ) { return; }
55*8d79fe1bSGerry Weißbach
56*8d79fe1bSGerry Weißbach		// set the replacements
57*8d79fe1bSGerry Weißbach		$replace = $INFO['meta']['templater'];
58*8d79fe1bSGerry Weißbach		unset($replace['page']);
59*8d79fe1bSGerry Weißbach		$replace['content'] = $event->data;
60*8d79fe1bSGerry Weißbach
61*8d79fe1bSGerry Weißbach		$new = $template;
62*8d79fe1bSGerry Weißbach		foreach (array_keys($replace) as $key) {
63*8d79fe1bSGerry Weißbach			if ( $new != $template ) { $template = $new; }
64*8d79fe1bSGerry Weißbach			if ( $key != 'content' && substr($key, 0, 1) == '!' ) {
65*8d79fe1bSGerry Weißbach				$rkey = substr($key, 1);
66*8d79fe1bSGerry Weißbach				$replace[$key] = $this->plugin_render($replace[$key]);
67*8d79fe1bSGerry Weißbach			} else { $rkey = $key; }
68*8d79fe1bSGerry Weißbach			$new = str_replace('@@' . strtoupper(trim($rkey)) . '@@', $replace[$key], $template);
69*8d79fe1bSGerry Weißbach		}
70*8d79fe1bSGerry Weißbach
71*8d79fe1bSGerry Weißbach		if ( $new != $event->data ) {
72*8d79fe1bSGerry Weißbach			$event->data = $new;
73*8d79fe1bSGerry Weißbach		}
74*8d79fe1bSGerry Weißbach
75*8d79fe1bSGerry Weißbach		return true;
76*8d79fe1bSGerry Weißbach    }
77*8d79fe1bSGerry Weißbach
78*8d79fe1bSGerry Weißbach    function _getActiveNamespace() {
79*8d79fe1bSGerry Weißbach    	global $ID;
80*8d79fe1bSGerry Weißbach    	global $INFO;
81*8d79fe1bSGerry Weißbach
82*8d79fe1bSGerry Weißbach		if (!$INFO['exists'])
83*8d79fe1bSGerry Weißbach			return false;
84*8d79fe1bSGerry Weißbach
85*8d79fe1bSGerry Weißbach    	$pattern = $this->getConf('excluded_pages');
86*8d79fe1bSGerry Weißbach		if (strlen($pattern) > 0 && preg_match($pattern, $ID)) {
87*8d79fe1bSGerry Weißbach			return false;
88*8d79fe1bSGerry Weißbach		}
89*8d79fe1bSGerry Weißbach
90*8d79fe1bSGerry Weißbach        $namespaces = explode(',', $this->getConf('enabled_namespaces'));
91*8d79fe1bSGerry Weißbach        foreach ($namespaces as $namespace) {
92*8d79fe1bSGerry Weißbach			$namespace = cleanID($namespace);
93*8d79fe1bSGerry Weißbach            if (trim($namespace) && (strpos($ID, $namespace . ':') === 0)) {
94*8d79fe1bSGerry Weißbach                return $namespace;
95*8d79fe1bSGerry Weißbach            }
96*8d79fe1bSGerry Weißbach        }
97*8d79fe1bSGerry Weißbach
98*8d79fe1bSGerry Weißbach        return false;
99*8d79fe1bSGerry Weißbach    }
100*8d79fe1bSGerry Weißbach
101*8d79fe1bSGerry Weißbach}
102*8d79fe1bSGerry Weißbach
103*8d79fe1bSGerry Weißbach//Setup VIM: ex: et ts=4 enc=utf-8 :
104