[ Index ]

PHP Cross Reference of Nucleus CMS v3.51 code documentation

title

Body

[close]

/nucleus/libs/ -> PARSER.php (source)

   1  <?php
   2  /*

   3   * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)

   4   * Copyright (C) 2002-2009 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-2009 The Nucleus Group

  15   * @version $Id: PARSER.php 1388 2009-07-18 06:31:28Z shizuki $

  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, $CONF;
  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                  if ($CONF['DebugVars']==true) {
 120                  echo '&lt;%' , $action , '(', implode($this->pdelim, $params), ')%&gt;';
 121          }
 122              }
 123              
 124          }
 125  
 126      }
 127  
 128      /**

 129        * Calls a method using an array of parameters (for use with PHP versions lower than 4.0.5)

 130        * ( = call_user_func_array() function )

 131        */
 132  	function call_using_array($methodname, &$handler, $paramarray) {
 133  
 134          $methodname = 'parse_' . $methodname;
 135  
 136          if (!method_exists($handler, $methodname)) {
 137              return;
 138          }
 139  
 140          $command = 'call_user_func(array(&$handler,$methodname)';
 141          for ($i = 0; $i<count($paramarray); $i++)
 142              $command .= ',$paramarray[' . $i . ']';
 143          $command .= ');';
 144          eval($command);    // execute the correct method

 145      }
 146  
 147  	function setProperty($property, $value) {
 148          global $manager;
 149          $manager->setParserProperty($property, $value);
 150      }
 151  
 152  	function getProperty($name) {
 153          global $manager;
 154          return $manager->getParserProperty($name);
 155      }
 156  
 157  
 158  }
 159  
 160  ?>


Generated: Sun Aug 1 03:56:06 2010
Open Source related documentation for developers.