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 538d79fe1bSGerry Weißbach $template = p_wiki_xhtml(empty ($INFO['meta']['templater']['page']) ? $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); 66*4c1d7955SGerry 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