xref: /plugin/pagetemplater/action.php (revision 4d302956c319ddd7cb789df2a514e64b398fdce7) !
18d79fe1bSGerry Weißbach<?php
28d79fe1bSGerry Weißbach
38d79fe1bSGerry Weißbach/**
48d79fe1bSGerry Weißbach * Select Template Pages for your Content
58d79fe1bSGerry Weißbach * The templates Pages have to have the entry @@CONTENT@@
68d79fe1bSGerry Weißbach * the template per page can be defined using the META plugin
78d79fe1bSGerry Weißbach *
88d79fe1bSGerry Weißbach * @license  GPL 2 (http://www.gnu.org/licenses/gpl.html)
98d79fe1bSGerry Weißbach * @author     i-net software <tools@inetsoftware.de>
108d79fe1bSGerry Weißbach * @author     Gerry Weissbach <gweissbach@inetsoftware.de>
118d79fe1bSGerry Weißbach */
128d79fe1bSGerry Weißbach
138d79fe1bSGerry Weißbach// must be run within Dokuwiki
148d79fe1bSGerry Weißbachif (!defined('DOKU_INC'))
158d79fe1bSGerry Weißbach    die();
168d79fe1bSGerry Weißbach
178d79fe1bSGerry Weißbachif (!defined('DOKU_LF'))
188d79fe1bSGerry Weißbach    define('DOKU_LF', "\n");
198d79fe1bSGerry Weißbachif (!defined('DOKU_TAB'))
208d79fe1bSGerry Weißbach    define('DOKU_TAB', "\t");
218d79fe1bSGerry Weißbachif (!defined('DOKU_PLUGIN'))
228d79fe1bSGerry Weißbach    define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
238d79fe1bSGerry Weißbach
248d79fe1bSGerry Weißbachrequire_once (DOKU_PLUGIN . 'action.php');
258d79fe1bSGerry Weißbachrequire_once(DOKU_INC . 'inc/pageutils.php');
268d79fe1bSGerry Weißbach
278d79fe1bSGerry Weißbachclass action_plugin_pagetemplater extends DokuWiki_Action_Plugin {
288d79fe1bSGerry Weißbach
298d79fe1bSGerry Weißbach    function getInfo(){
308d79fe1bSGerry Weißbach        return array_merge(confToHash(dirname(__FILE__).'/info.txt'), array(
318d79fe1bSGerry Weißbach				'name' => 'Page Templater Action Component',
328d79fe1bSGerry Weißbach		));
338d79fe1bSGerry Weißbach    }
348d79fe1bSGerry Weißbach
358d79fe1bSGerry Weißbach    /**
368d79fe1bSGerry Weißbach     * Register the eventhandlers.
378d79fe1bSGerry Weißbach     */
388d79fe1bSGerry Weißbach    function register(& $controller) {
398d79fe1bSGerry Weißbach        $controller->register_hook('TPL_CONTENT_DISPLAY', 'BEFORE', $this, 'handle_content_display', array ());
408d79fe1bSGerry Weißbach    }
418d79fe1bSGerry Weißbach
428d79fe1bSGerry Weißbach    function handle_content_display(& $event, $params) {
438d79fe1bSGerry Weißbach		global $ACT, $INFO;
448d79fe1bSGerry Weißbach
458d79fe1bSGerry Weißbach		if ( $ACT != 'show' )
468d79fe1bSGerry Weißbach			return;
478d79fe1bSGerry Weißbach
488d79fe1bSGerry Weißbach		// are we in an avtive Namespace?
498d79fe1bSGerry Weißbach		$namespace = $this->_getActiveNamespace();
508d79fe1bSGerry Weißbach		if (!$namespace && empty($INFO['meta']['templater']['page'])) { return; }
518d79fe1bSGerry Weißbach
528d79fe1bSGerry Weißbach		// check for the template
53*4d302956SMuhammad Saiful Islam		$template = p_wiki_xhtml(empty ($INFO['meta']['templater']['page']) ? resolve_id($namespace, $this->getConf('templater_page')) : $INFO['meta']['templater']['page'],'',false);
548d79fe1bSGerry Weißbach		if ( !$template ) { return; }
558d79fe1bSGerry Weißbach
568d79fe1bSGerry Weißbach		// set the replacements
578d79fe1bSGerry Weißbach		$replace = $INFO['meta']['templater'];
588d79fe1bSGerry Weißbach		unset($replace['page']);
598d79fe1bSGerry Weißbach		$replace['content'] = $event->data;
608d79fe1bSGerry Weißbach
618d79fe1bSGerry Weißbach		$new = $template;
628d79fe1bSGerry Weißbach		foreach (array_keys($replace) as $key) {
638d79fe1bSGerry Weißbach			if ( $new != $template ) { $template = $new; }
648d79fe1bSGerry Weißbach			if ( $key != 'content' && substr($key, 0, 1) == '!' ) {
658d79fe1bSGerry Weißbach				$rkey = substr($key, 1);
664c1d7955SGerry Weißbach				$replace[$key] = p_render('xhtml', p_get_instructions($replace[$key]),$info);
678d79fe1bSGerry Weißbach			} else { $rkey = $key; }
688d79fe1bSGerry Weißbach			$new = str_replace('@@' . strtoupper(trim($rkey)) . '@@', $replace[$key], $template);
698d79fe1bSGerry Weißbach		}
708d79fe1bSGerry Weißbach
718d79fe1bSGerry Weißbach		if ( $new != $event->data ) {
728d79fe1bSGerry Weißbach			$event->data = $new;
738d79fe1bSGerry Weißbach		}
748d79fe1bSGerry Weißbach
758d79fe1bSGerry Weißbach		return true;
768d79fe1bSGerry Weißbach    }
778d79fe1bSGerry Weißbach
788d79fe1bSGerry Weißbach    function _getActiveNamespace() {
798d79fe1bSGerry Weißbach    	global $ID;
808d79fe1bSGerry Weißbach    	global $INFO;
818d79fe1bSGerry Weißbach
828d79fe1bSGerry Weißbach		if (!$INFO['exists'])
838d79fe1bSGerry Weißbach			return false;
848d79fe1bSGerry Weißbach
858d79fe1bSGerry Weißbach    	$pattern = $this->getConf('excluded_pages');
868d79fe1bSGerry Weißbach		if (strlen($pattern) > 0 && preg_match($pattern, $ID)) {
878d79fe1bSGerry Weißbach			return false;
888d79fe1bSGerry Weißbach		}
898d79fe1bSGerry Weißbach
908d79fe1bSGerry Weißbach        $namespaces = explode(',', $this->getConf('enabled_namespaces'));
918d79fe1bSGerry Weißbach        foreach ($namespaces as $namespace) {
928d79fe1bSGerry Weißbach			$namespace = cleanID($namespace);
938d79fe1bSGerry Weißbach            if (trim($namespace) && (strpos($ID, $namespace . ':') === 0)) {
948d79fe1bSGerry Weißbach                return $namespace;
958d79fe1bSGerry Weißbach            }
968d79fe1bSGerry Weißbach        }
978d79fe1bSGerry Weißbach
988d79fe1bSGerry Weißbach        return false;
998d79fe1bSGerry Weißbach    }
1008d79fe1bSGerry Weißbach
1018d79fe1bSGerry Weißbach}
1028d79fe1bSGerry Weißbach
1038d79fe1bSGerry Weißbach//Setup VIM: ex: et ts=4 enc=utf-8 :
104