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