| [ Index ] |
PHP Cross Reference of Nucleus CMS 3.32 |
[Summary view] [Print] [Text view]
1 <?php 2 /* 3 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 4 * Copyright (C) 2002-2007 The Nucleus Group 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or (at your option) any later version. 10 * (see nucleus/documentation/index.html#license for more info) 11 */ 12 /** 13 * @license http://nucleuscms.org/license.txt GNU General Public License 14 * @copyright Copyright (C) 2002-2007 The Nucleus Group 15 * @version $Id: PARSER.php 1148 2007-05-19 23:02:46Z kaigreve $ 16 */ 17 18 if ( !function_exists('requestVar') ) exit; 19 require_once dirname(__FILE__) . '/BaseActions.php'; 20 21 /** 22 * This is the parser class of Nucleus. It is used for various things (skin parsing, 23 * form generation, ...) 24 */ 25 class PARSER { 26 27 // array with the names of all allowed actions 28 var $actions; 29 30 // reference to actions handler 31 var $handler; 32 33 // delimiters that can be used for skin/templatevars 34 var $delim; 35 36 // parameter delimiter (to separate skinvar params) 37 var $pdelim; 38 39 // usually set to 0. When set to 1, all skinvars are allowed regardless of $actions 40 var $norestrictions; 41 42 /** 43 * Creates a new parser object with the given allowed actions 44 * and the given handler 45 * 46 * @param $allowedActions array 47 * @param $handler class object with functions for each action (reference) 48 * @param $delim optional delimiter 49 * @param $paramdelim optional parameterdelimiter 50 */ 51 function PARSER($allowedActions, &$handler, $delim = '(<%|%>)', $pdelim = ',') { 52 $this->actions = $allowedActions; 53 $this->handler =& $handler; 54 $this->delim = $delim; 55 $this->pdelim = $pdelim; 56 $this->norestrictions = 0; // set this to 1 to disable checking for allowedActions 57 } 58 59 /** 60 * Parses the given contents and outputs it 61 */ 62 function parse(&$contents) { 63 64 $pieces = preg_split('/'.$this->delim.'/',$contents); 65 66 $maxidx = sizeof($pieces); 67 for ($idx = 0; $idx < $maxidx; $idx++) { 68 echo $pieces[$idx]; 69 $idx++; 70 if ($idx < $maxidx) { 71 $this->doAction($pieces[$idx]); 72 } 73 } 74 } 75 76 77 /** 78 * handle an action 79 */ 80 function doAction($action) { 81 global $manager; 82 83 if (!$action) return; 84 85 // split into action name + arguments 86 if (strstr($action,'(')) { 87 $paramStartPos = strpos($action, '('); 88 $params = substr($action, $paramStartPos + 1, strlen($action) - $paramStartPos - 2); 89 $action = substr($action, 0, $paramStartPos); 90 $params = explode ($this->pdelim, $params); 91 92 // trim parameters 93 // for PHP versions lower than 4.0.6: 94 // - add // before '$params = ...' 95 // - remove // before 'foreach' 96 $params = array_map('trim',$params); 97 // foreach ($params as $key => $value) { $params[$key] = trim($value); } 98 } else { 99 // no parameters 100 $params = array(); 101 } 102 103 $actionlc = strtolower($action); 104 105 // skip execution of skinvars while inside an if condition which hides this part of the page 106 if (!$this->handler->if_currentlevel && ($actionlc != 'else') && ($actionlc != 'elseif') && ($actionlc != 'endif') && ($actionlc != 'ifnot') && ($actionlc != 'elseifnot') && (substr($actionlc,0,2) != 'if')) 107 return; 108 109 if (in_array($actionlc, $this->actions) || $this->norestrictions ) { 110 // when using PHP versions lower than 4.0.5, uncomment the line before 111 // and comment the call_user_func_array call 112 //$this->call_using_array($action, $this->handler, $params); 113 call_user_func_array(array(&$this->handler,'parse_' . $actionlc), $params); 114 } else { 115 // redirect to plugin action if possible 116 if (in_array('plugin', $this->actions) && $manager->pluginInstalled('NP_'.$action)) 117 $this->doAction('plugin('.$action.$this->pdelim.implode($this->pdelim,$params).')'); 118 else 119 echo '<%' , $action , '(', implode($this->pdelim, $params), ')%>'; 120 } 121 122 } 123 124 /** 125 * Calls a method using an array of parameters (for use with PHP versions lower than 4.0.5) 126 * ( = call_user_func_array() function ) 127 */ 128 function call_using_array($methodname, &$handler, $paramarray) { 129 130 $methodname = 'parse_' . $methodname; 131 132 if (!method_exists($handler, $methodname)) { 133 return; 134 } 135 136 $command = 'call_user_func(array(&$handler,$methodname)'; 137 for ($i = 0; $i<count($paramarray); $i++) 138 $command .= ',$paramarray[' . $i . ']'; 139 $command .= ');'; 140 eval($command); // execute the correct method 141 } 142 143 function setProperty($property, $value) { 144 global $manager; 145 $manager->setParserProperty($property, $value); 146 } 147 148 function getProperty($name) { 149 global $manager; 150 return $manager->getParserProperty($name); 151 } 152 153 154 } 155 156 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Tue Feb 12 15:34:36 2008 | Cross-referenced by PHPXref 0.7 |