OSDN Git Service

Merge branch 'skinnable-master'
[nucleus-jp/nucleus-next.git] / nucleus / libs / BaseActions.php
index 2766229..6ae996b 100644 (file)
-<?php\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2009 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * This class contains parse actions that are available in all ACTION classes\r
- * e.g. include, phpinclude, parsedinclude, skinfile, ...\r
- *\r
- * It should never be used on it's own\r
- *\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2009 The Nucleus Group\r
- * @version $Id: BaseActions.php 1527 2011-06-21 10:43:44Z sakamocchi $\r
- */\r
-\r
-class BaseActions\r
-{\r
-       // depth level for includes (max. level is 3)\r
-       var $level;\r
-\r
-       // array of evaluated conditions (true/false). The element at the end is the one for the most nested\r
-       // if block.\r
-       var $if_conditions;\r
-\r
-       // in the "elseif" / "elseifnot" sequences, if one of the conditions become "true" remained conditions should not\r
-       // be tested. this variable (actually a stack) holds this information.\r
-       var $if_execute;\r
-\r
-       // at all times, can be evaluated to either true if the current block needs to be displayed. This\r
-       // variable is used to decide to skip skinvars in parts that will never be outputted.\r
-       var $if_currentlevel;\r
-\r
-       // contains a search string with keywords that need to be highlighted. These get parsed into $aHighlight\r
-       var $strHighlight;\r
-\r
-       // array of keywords that need to be highlighted in search results (see the highlight()\r
-       // and parseHighlight() methods)\r
-       var $aHighlight;\r
-\r
-       // reference to the parser object that is using this object as actions-handler\r
-       var $parser;\r
-\r
-       /**\r
-        *  Constructor for a new BaseAction object\r
-        */\r
-       function BaseActions() {\r
-               $this->level = 0;\r
-\r
-               // if nesting level\r
-               $this->if_conditions = array(); // array on which condition values are pushed/popped\r
-               $this->if_execute = array();    // array on which condition values are pushed/popped\r
-               $this->if_currentlevel = 1;             // 1 = current level is displayed; 0 = current level not displayed\r
-\r
-               // highlights\r
-               $this->strHighlight = '';                       // full highlight\r
-               $this->aHighlight = array();            // parsed highlight\r
-\r
-       }\r
-\r
-       /**\r
-        * include file (no parsing of php)\r
-        * \r
-        * ToDo: function returns nothing and refering to the cross reference it\r
-        *       isn't called from anywhere   \r
-        * \r
-        * @param $filename\r
-        */\r
-       function parse_include($filename) {\r
-               @readfile($this->getIncludeFileName($filename));\r
-       }\r
-\r
-       /**\r
-        * php-include file\r
-        * \r
-        * @param $filename\r
-        */\r
-       function parse_phpinclude($filename) {\r
-               includephp($this->getIncludeFileName($filename));\r
-       }\r
-\r
-       \r
-       /**\r
-        * parsed include\r
-        * \r
-        * @param $filename\r
-        */\r
-       function parse_parsedinclude($filename) {\r
-               // check current level\r
-               if ($this->level > 3) return;   // max. depth reached (avoid endless loop)\r
-               $file = $this->getIncludeFileName($filename);\r
-               if (!file_exists($file)) return;\r
-        $contents = file_get_contents($file);\r
-        if (empty($contents)) return;\r
-               \r
-               $this->level = $this->level + 1;\r
-               // parse file contents\r
-               $this->parser->parse($contents);\r
-\r
-               $this->level = $this->level - 1;\r
-       }\r
-\r
-       /**\r
-        * Returns the correct location of the file to be included, according to\r
-        * parser properties\r
-        *\r
-        * IF IncludeMode = 'skindir' => use skindir\r
-        * \r
-        * @param $filename\r
-        */\r
-       function getIncludeFileName($filename) {\r
-               // leave absolute filenames and http urls as they are\r
-               if (\r
-                               (i18n::substr($filename,0,1) == '/')\r
-                       ||      (i18n::substr($filename,0,7) == 'http://')\r
-                       ||      (i18n::substr($filename,0,6) == 'ftp://')\r
-                       )\r
-                       return $filename;\r
-\r
-               $filename = Parser::getProperty('IncludePrefix') . $filename;\r
-               if (Parser::getProperty('IncludeMode') == 'skindir') {\r
-                       global $DIR_SKINS;\r
-                       return $DIR_SKINS . $filename;\r
-               } else {\r
-                       return $filename;\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Inserts an url relative to the skindir (useful when doing import/export)\r
-        *\r
-        * e.g. <skinfile(default/myfile.sth)>\r
-        */\r
-       function parse_skinfile($filename) {\r
-               global $CONF;\r
-\r
-               echo $CONF['SkinsURL'] . Parser::getProperty('IncludePrefix') . $filename;\r
-       }\r
-\r
-       /**\r
-        * Sets a property for the parser\r
-        */\r
-       function parse_set($property, $value) {\r
-               Parser::setProperty($property, $value);\r
-       }\r
-\r
-       /**\r
-        * Helper function: add if condition\r
-        */\r
-       function _addIfCondition($condition) {\r
-\r
-               array_push($this->if_conditions,$condition);\r
-\r
-               $this->_updateTopIfCondition();\r
-\r
-               ob_start();\r
-       }\r
-\r
-       /**\r
-        * Helper function: update the Top of the If Conditions Array\r
-        */\r
-       function _updateTopIfCondition() {\r
-               if (sizeof($this->if_conditions) == 0) {\r
-                       $this->if_currentlevel = 1;\r
-               }\r
-               else {\r
-                       $this->if_currentlevel = $this->if_conditions[sizeof($this->if_conditions) - 1];\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Helper function for elseif / elseifnot\r
-        */\r
-       function _addIfExecute() {\r
-               array_push($this->if_execute, 0);\r
-       }\r
-\r
-       /**\r
-        * Helper function for elseif / elseifnot\r
-        * @param string condition to be fullfilled\r
-        */\r
-       function _updateIfExecute($condition) {\r
-               $index = sizeof($this->if_execute) - 1;\r
-               $this->if_execute[$index] = $this->if_execute[$index] || $condition;\r
-       }\r
-\r
-       /**\r
-        * returns the currently top if condition\r
-        */\r
-       function _getTopIfCondition() {\r
-               return $this->if_currentlevel;\r
-       }\r
-\r
-       /**\r
-        * Sets the search terms to be highlighted\r
-        *\r
-        * @param $highlight\r
-        *              A series of search terms\r
-        */\r
-       function setHighlight($highlight) {\r
-               $this->strHighlight = $highlight;\r
-               if ($highlight) {\r
-                       $this->aHighlight = parseHighlight($highlight);\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Applies the highlight to the given piece of text\r
-        *\r
-        * @see setHighlight\r
-        * @param String        $data   Data that needs to be highlighted\r
-        * @return      String  hilighted data\r
-        */\r
-       function highlight($data)\r
-       {\r
-               if ( $this->aHighlight )\r
-               {\r
-                       $data = Entity::highlight($data, $this->aHighlight, $this->template['SEARCH_HIGHLIGHT']);\r
-               }\r
-               return $data;\r
-       }\r
-       \r
-       /**\r
-        * Parses <%if%> statements\r
-        */\r
-       function parse_if() {\r
-               $this->_addIfExecute();\r
-\r
-               $args = func_get_args();\r
-               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);\r
-               $this->_addIfCondition($condition);\r
-       }\r
-\r
-       /**\r
-        * Parses <%else%> statements\r
-        */\r
-       function parse_else() {\r
-               if (sizeof($this->if_conditions) == 0) return;\r
-               array_pop($this->if_conditions);\r
-               if ($this->if_currentlevel) {\r
-                       ob_end_flush();\r
-                       $this->_updateIfExecute(1);\r
-                       $this->_addIfCondition(0);\r
-               } elseif ($this->if_execute[sizeof($this->if_execute) - 1]) {\r
-                       ob_end_clean();\r
-                       $this->_addIfCondition(0);\r
-               } else {\r
-                       ob_end_clean();\r
-                       $this->_addIfCondition(1);\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Parses <%elseif%> statements\r
-        */\r
-       function parse_elseif() {\r
-               if (sizeof($this->if_conditions) == 0) return;\r
-               array_pop($this->if_conditions);\r
-               if ($this->if_currentlevel) {\r
-                       ob_end_flush();\r
-                       $this->_updateIfExecute(1);\r
-                       $this->_addIfCondition(0);\r
-               } elseif ($this->if_execute[sizeof($this->if_execute) - 1]) {\r
-                       ob_end_clean();\r
-                       $this->_addIfCondition(0);\r
-               } else {\r
-                       ob_end_clean();\r
-                       $args = func_get_args();\r
-                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);\r
-                       $this->_addIfCondition($condition);\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Parses <%ifnot%> statements\r
-        */\r
-       function parse_ifnot() {\r
-               $this->_addIfExecute();\r
-\r
-               $args = func_get_args();\r
-               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);\r
-               $this->_addIfCondition(!$condition);\r
-       }\r
-\r
-       /**\r
-        * Parses <%elseifnot%> statements\r
-        */\r
-       function parse_elseifnot() {\r
-               if (sizeof($this->if_conditions) == 0) return;\r
-               array_pop($this->if_conditions);\r
-               if ($this->if_currentlevel) {\r
-                       ob_end_flush();\r
-                       $this->_updateIfExecute(1);\r
-                       $this->_addIfCondition(0);\r
-               } elseif ($this->if_execute[sizeof($this->if_execute) - 1]) {\r
-                       ob_end_clean();\r
-                       $this->_addIfCondition(0);\r
-               } else {\r
-                       ob_end_clean();\r
-                       $args = func_get_args();\r
-                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);\r
-                       $this->_addIfCondition(!$condition);\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Ends a conditional if-block\r
-        * see e.g. ifcat (BLOG), ifblogsetting (PAGEFACTORY)\r
-        */\r
-       function parse_endif() {\r
-               // we can only close what has been opened\r
-               if (sizeof($this->if_conditions) == 0) return;\r
-\r
-               if ($this->if_currentlevel) {\r
-                       ob_end_flush();\r
-               } else {\r
-                       ob_end_clean();\r
-               }\r
-               array_pop($this->if_conditions);\r
-               array_pop($this->if_execute);\r
-\r
-               $this->_updateTopIfCondition();\r
-       }\r
-}\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2009 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This class contains parse actions that are available in all ACTION classes
+ * e.g. include, phpinclude, parsedinclude, skinfile, ...
+ *
+ * It should never be used on it's own
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2009 The Nucleus Group
+<<<<<<< HEAD
+ * @version $Id: BaseActions.php 1848 2012-05-16 12:17:00Z sakamocchi $
+=======
+ * @version $Id: BaseActions.php 1882 2012-06-17 07:52:43Z sakamocchi $
+>>>>>>> skinnable-master
+ */
+
+class BaseActions
+{
+       /**
+        * BaseActions::$parser
+        * Skin class calls parser with action classes succeeded to this class
+        */
+       protected $parser;
+       
+       
+       // depth level for includes (max. level is 3)
+       private $level;
+       
+       // array of evaluated conditions (true/false). The element at the end is the one for the most nested
+       // if block.
+       private $if_conditions;
+       
+       // in the "elseif" / "elseifnot" sequences, if one of the conditions become "true" remained conditions should not
+       // be tested. this variable (actually a stack) holds this information.
+       private $if_execute;
+       
+       // at all times, can be evaluated to either true if the current block needs to be displayed. This
+       // variable is used to decide to skip skinvars in parts that will never be outputted.
+       private $if_currentlevel;
+       
+       
+       // contains a search string with keywords that need to be highlighted. These get parsed into $aHighlight
+       protected $strHighlight;
+       
+       // array of keywords that need to be highlighted in search results (see the highlight()
+       // and parseHighlight() methods)
+       private $aHighlight;
+       
+       /* NOTE: defined actions for this base class */
+       static private $defined_actions = array(
+               'benchmark',
+               'charset',
+               'else',
+               'elseif',
+               'elseifnot',
+               'endif',
+               'if',
+               'ifnot',
+               'include',
+               'locale',
+               'parsedinclude',
+               'phpinclude',
+               'set',
+               'skinfile',
+               'text'
+       );
+       
+       /**
+        * BaseActions::__construct()
+        *  Constructor for a new BaseAction object
+        */
+       protected function __construct()
+       {
+               $this->level = 0;
+               
+               // if nesting level
+               $this->if_conditions = array(); // array on which condition values are pushed/popped
+               $this->if_execute = array();    // array on which condition values are pushed/popped
+               $this->if_currentlevel = 1;             // 1 = current level is displayed; 0 = current level not displayed
+               
+               // highlights
+               $this->strHighlight = '';               // full highlight
+               $this->aHighlight = array();    // parsed highlight
+               return;
+       }
+       
+       /**
+        * BaseActions::getAvailableActions()
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function getAvailableActions()
+       {
+               return self::$defined_actions;
+       }
+       
+       /**
+        * BaseActions::setParser()
+        * Set the parser
+        * 
+        * @param       object  $parser an instance of Parser class
+        * @return      void
+        */
+       public function setParser(&$parser)
+       {
+               $this->parser =& $parser;
+               return;
+       }
+       
+       /**
+        * BaseActions::parse_charset()
+        * Parse charset to appropriate character set name registered to IANA
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_charset()
+       {
+               global $member;
+               
+               if ( i18n::get_forced_charset() !== '' )
+               {
+                       echo i18n::get_forced_charset();
+               }
+               else
+               {
+                       echo i18n::get_current_charset();
+               }
+               
+               return;
+       }
+       
+       /**
+        * BaseActions::parse_locale()
+<<<<<<< HEAD
+        * Parse locale to language-script-region according to RFC 4646
+=======
+        * Parse locale to language-region according to RFC 4646
+>>>>>>> skinnable-master
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_locale()
+       {
+<<<<<<< HEAD
+               echo preg_replace('#_#', '-', i18n::get_current_locale());
+=======
+               echo preg_replace('#(.+)_(.+)_(.+)#', '$1-$3', i18n::get_current_locale());
+>>>>>>> skinnable-master
+               return;
+       }
+       
+       /**
+        * BaseActions::parse_include()
+        * include file (no parsing of php)
+        * 
+        * ToDo: function returns nothing and refering to the cross reference it
+        *       isn't called from anywhere   
+        * 
+        * @param       string  $filename       filename to be included
+        * @return      void
+        */
+       public function parse_include($filename)
+       {
+               @readfile($this->getIncludeFileName($filename));
+               return;
+       }
+       
+       /**
+        * BaseActions::parse_phpinclude()
+        * php-include file
+        * 
+        * @param       string  $filename       filename to be included
+        * @return      void
+        */
+       public function parse_phpinclude($filename)
+       {
+               includephp($this->getIncludeFileName($filename));
+               return;
+       }
+       
+       
+       /**
+        * BaseActions::parse_parsedinclude()
+        * parsed include
+        * 
+        * @param       string  $name   filename to be included
+        * @return      void
+        */
+       public function parse_parsedinclude($name)
+       {
+               // check current level
+               if ( $this->level > 3 )
+               {
+                       // max. depth reached (avoid endless loop)
+                       return;
+               }
+               
+               $file = $this->getIncludeFileName($name);
+               if ( !file_exists($file) && $this->parser->skin != NULL)
+               {
+                       $contents = $this->parser->skin->getContentFromDB($name);
+               }
+               else
+               {
+                       $contents = file_get_contents($file);
+               }
+               
+               if ( empty($contents) )
+               {
+                       return;
+               }
+               
+               $this->level = $this->level + 1;
+               // parse file contents
+               $this->parser->parse($contents);
+               
+               $this->level = $this->level - 1;
+               return;
+       }
+       
+       /**
+        * BaseActions::getIncludeFileName()
+        * Returns the correct location of the file to be included, according to
+        * parser properties
+        *
+        * IF IncludeMode = 'skindir' => use skindir
+        * 
+        * @param       string  $filename       name of file to be inclluded
+        * @return      string  name of file with relative path
+        */
+       private function getIncludeFileName($filename)
+       {
+               // leave absolute filenames and http urls as they are
+               if (
+                               (i18n::substr($filename,0,1) == '/')
+                       ||      (i18n::substr($filename,0,7) == 'http://')
+                       ||      (i18n::substr($filename,0,6) == 'ftp://')
+                       )
+               {
+                       return $filename;
+               }
+               
+               $filename = Parser::getProperty('IncludePrefix') . $filename;
+               
+               if ( Parser::getProperty('IncludeMode') == 'skindir' )
+               {
+                       global $DIR_SKINS;
+                       return $DIR_SKINS . $filename;
+               }
+               return $filename;
+       }
+       
+       /**
+        * BaseActions::parse_skinfile()
+        * Inserts an url relative to the skindir (useful when doing import/export)
+        *
+        * e.g. <skinfile(default/myfile.sth)>
+        * 
+        * @param       string  $filename       name of file to be inclluded
+        * @return      void
+        */
+       public function parse_skinfile($filename)
+       {
+               global $CONF;
+               echo $CONF['SkinsURL'] . Parser::getProperty('IncludePrefix') . $filename;
+               return;
+       }
+
+       /**
+        * BaseActions::parse_set()
+        * Sets a property for the parser
+        * 
+        * @param       string  $property       name of property
+        * @param       string  $value          value of property
+        * @return      void
+        */
+       public function parse_set($property, $value)
+       {
+               Parser::setProperty($property, $value);
+               return;
+       }
+       
+       /**
+        * BaseActions::parse_text()
+        * Parse text
+        * 
+        * @param       string  $constant       named constant
+        * @return      void
+        */
+       public function parse_text($constant)
+       {
+               if ( !defined($constant) )
+               {
+                       echo $constant;
+               }
+               else
+               {
+                       echo constant($constant);
+               }
+               return;
+       }
+       
+       /**
+        * BaseActions::addIfCondition()
+        * Helper function: add if condition
+        * 
+        * @param       string  $condition      condition for if context
+        * @return      void
+        */
+       private function addIfCondition($condition)
+       {
+               array_push($this->if_conditions,$condition);
+               $this->updateTopIfCondition();
+               ob_start();
+               return;
+       }
+       
+       /**
+        * BaseActions::updateTopIfCondition()
+        * Helper function: update the Top of the If Conditions Array
+        * 
+        * @param       void
+        * @return      void
+        */
+       private function updateTopIfCondition()
+       {
+               if ( sizeof($this->if_conditions) == 0 )
+               {
+                       $this->if_currentlevel = 1;
+               }
+               else
+               {
+                       $this->if_currentlevel = $this->if_conditions[sizeof($this->if_conditions) - 1];
+               }
+               return;
+       }
+       
+       /**
+        * BaseActions::addIfExecute()
+        * Helper function for elseif / elseifnot
+        * 
+        * @param       void
+        * @return      void
+        */
+       private function addIfExecute()
+       {
+               array_push($this->if_execute, 0);
+               return;
+       }
+       
+       /**
+        * BaseActions::updateIfExecute()
+        * Helper function for elseif / elseifnot
+        * 
+        * @param       string  $condition      condition to be fullfilled
+        * @return      void
+        */
+       private function updateIfExecute($condition)
+       {
+               $index = sizeof($this->if_execute) - 1;
+               $this->if_execute[$index] = $this->if_execute[$index] || $condition;
+               return;
+       }
+
+       /**
+        * BaseActions::getTopIfCondition()()
+        * returns the currently top if condition
+        * 
+        * @param       void
+        * @return      string  level
+        */
+       public function getTopIfCondition()
+       {
+               return $this->if_currentlevel;
+       }
+       
+       /**
+        * BaseActions::setHighlight(()
+        * Sets the search terms to be highlighted
+        *
+        * @param       string  $highlight      A series of search terms
+        * @return      void
+        */
+       public function setHighlight($highlight)
+       {
+               $this->strHighlight = $highlight;
+               if ( $highlight )
+               {
+                       $this->aHighlight = parseHighlight($highlight);
+               }
+               return;
+       }
+       
+       /**
+        * BaseActions::highlight()
+        * Applies the highlight to the given piece of text
+        *
+        * @see setHighlight
+        * @param       string  $data           Data that needs to be highlighted
+        * @return      string  hilighted data
+        */
+       public function highlight($data)
+       {
+               if ( $this->aHighlight )
+               {
+                       $data = Entity::highlight($data, $this->aHighlight, $this->template['SEARCH_HIGHLIGHT']);
+               }
+               return $data;
+       }
+       
+       /**
+        * BaseActions::parse_benchmark()
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_benchmark()
+       {
+               global $StartTime;
+               $loadtime = microtime(TRUE) - $StartTime;
+               printf("%.3F sec/%d queries", $loadtime, DB::getExecCount());
+               return;
+       }
+       
+       /**
+        * BaseActions::parse_if()
+        * Parses <%if%> statements
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_if()
+       {
+               $this->addIfExecute();
+               $args = func_get_args();
+<<<<<<< HEAD
+               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+=======
+               $condition = call_user_func_array(array($this,'checkCondition'), $args);
+>>>>>>> skinnable-master
+               $this->addIfCondition($condition);
+               return;
+       }
+
+       /**
+        * BaseActions::parse_else()
+        * Parses <%else%> statements
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_else()
+       {
+               if ( sizeof($this->if_conditions) == 0 )
+               {
+                       return;
+               }
+               
+               array_pop($this->if_conditions);
+               
+               if ( $this->if_currentlevel )
+               {
+                       ob_end_flush();
+                       $this->updateIfExecute(1);
+                       $this->addIfCondition(0);
+               }
+               elseif ( $this->if_execute[sizeof($this->if_execute) - 1] )
+               {
+                       ob_end_clean();
+                       $this->addIfCondition(0);
+               }
+               else
+               {
+                       ob_end_clean();
+                       $this->addIfCondition(1);
+               }
+               return;
+       }
+       
+       /**
+        * BaseActions::parse_elseif()
+        * Parses <%elseif%> statements
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_elseif()
+       {
+               if ( sizeof($this->if_conditions) == 0 )
+               {
+                       return;
+               }
+               
+               array_pop($this->if_conditions);
+               
+               if ( $this->if_currentlevel )
+               {
+                       ob_end_flush();
+                       $this->updateIfExecute(1);
+                       $this->addIfCondition(0);
+               }
+               elseif ( $this->if_execute[sizeof($this->if_execute) - 1] )
+               {
+                       ob_end_clean();
+                       $this->addIfCondition(0);
+               }
+               else
+               {
+                       ob_end_clean();
+                       $args = func_get_args();
+<<<<<<< HEAD
+                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+=======
+                       $condition = call_user_func_array(array($this,'checkCondition'), $args);
+>>>>>>> skinnable-master
+                       $this->addIfCondition($condition);
+               }
+               return;
+       }
+       
+       /**
+        * BaseActions::parse_ifnot()
+        * Parses <%ifnot%> statements
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_ifnot()
+       {
+               $this->addIfExecute();
+               
+               $args = func_get_args();
+<<<<<<< HEAD
+               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+=======
+               $condition = call_user_func_array(array($this,'checkCondition'), $args);
+>>>>>>> skinnable-master
+               $this->addIfCondition(!$condition);
+               return;
+       }
+       
+       /**
+        * BaseActions::parse_elseifnot()
+        * Parses <%elseifnot%> statements
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_elseifnot()
+       {
+               if ( sizeof($this->if_conditions) == 0 )
+               {
+                       return;
+               }
+               
+               array_pop($this->if_conditions);
+               
+               if ( $this->if_currentlevel )
+               {
+                       ob_end_flush();
+                       $this->updateIfExecute(1);
+                       $this->addIfCondition(0);
+               }
+               elseif ( $this->if_execute[sizeof($this->if_execute) - 1] )
+               {
+                       ob_end_clean();
+                       $this->addIfCondition(0);
+               }
+               else
+               {
+                       ob_end_clean();
+                       $args = func_get_args();
+<<<<<<< HEAD
+                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+=======
+                       $condition = call_user_func_array(array($this,'checkCondition'), $args);
+>>>>>>> skinnable-master
+                       $this->addIfCondition(!$condition);
+               }
+               return;
+       }
+
+       /**
+        * BaseActions::parse_endif()
+        * Ends a conditional if-block
+        * see e.g. ifcat (BLOG), ifblogsetting (PAGEFACTORY)
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_endif()
+       {
+               // we can only close what has been opened
+               if ( sizeof($this->if_conditions) == 0 )
+               {
+                       return;
+               }
+               
+               if ( $this->if_currentlevel )
+               {
+                       ob_end_flush();
+               }
+               else
+               {
+                       ob_end_clean();
+               }
+               
+               array_pop($this->if_conditions);
+               array_pop($this->if_execute);
+               
+               $this->updateTopIfCondition();
+               return;
+       }
+}