OSDN Git Service

FIXED: When inclusion tried to do the special skin type by skin of error types, ...
authorshizuki <shizuki@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Sat, 21 Mar 2009 14:42:13 +0000 (14:42 +0000)
committershizuki <shizuki@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Sat, 21 Mar 2009 14:42:13 +0000 (14:42 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/nucleus-jp/trunk/utf8@990 1ca29b6e-896d-4ea0-84a5-967f57386b96

nucleus/documentation/history.html
nucleus/libs/BaseActions.php

index cc796b1..b36c52e 100755 (executable)
@@ -64,6 +64,7 @@
                        <li>CHANGED: NP_SkinFilesオプション用言語定義追加(NP_SkinFiles option word update via language file)(shizuki)</li>\r
                        <li>UPDATED: NP_SkinFiles 2.03に差し替え(code:yama/commit:shizuki)(NP_SkinFiles update to 2.03)(code:yama,katsumi/commit:shizuki)</li>\r
                        <li>FIXED: 「General」カテゴリのUPDATE漏れ修正(install.php)(preinstall default category name is not localize)(shizuki)</li>\r
+                       <li>FIXED: When inclusion tried to do the special skin type by skin of error types, $skinid wasn't set.(yu/shizuki)</li>\r
                        <li>FIXED: Reduce PHP Notices caused by undefined variables and wrong offsets (shizuki, kaigreve)</li>\r
                        <li>FIXED: additional changes in the language files english.php and english-utf8.php to reflect modifications since version 3.30 (kaigreve)</li>\r
                        <li>FIXED: SQL error in MEMBER::write() where mautosave not forced to be integer. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18575">Problem with 3.40</a>. (ftruscot)\r
index 7035a8a..efa8bb7 100644 (file)
  * @version $NucleusJP: BaseActions.php,v 1.2 2006/07/20 08:01:52 kimitake Exp $
  */
 
-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
-       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
-       // include file (no parsing of php)\r
-       function parse_include($filename) {\r
-               @readfile($this->getIncludeFileName($filename));\r
-       }\r
-\r
-       // php-include file\r
-       function parse_phpinclude($filename) {\r
-               includephp($this->getIncludeFileName($filename));\r
-       }\r
-\r
-       // parsed include\r
-       function parse_parsedinclude($filename) {\r
-               // check current level\r
-               if ($this->level > 3) return;   // max. depth reached (avoid endless loop)\r
-               global $skinid;\r
-               $skin = new SKIN($skinid);\r
-               $file = $this->getIncludeFileName($filename);\r
-               if (!$skin->isValid && !file_exists($file)) {\r
-                       return;\r
-               }\r
-               $parts = explode('|', $filename, 2);\r
-               if ($skin->getContent($parts[0])) {\r
-                       $contents = $skin->getContent($parts[0]);\r
-               } else {\r
-                       $filename = $this->getIncludeFileName($filename);\r
-                       if (!file_exists($filename)) return '';\r
-\r
-                       $fsize = filesize($filename);\r
-\r
-                       // nothing to include\r
-                       if ($fsize <= 0) return;\r
-\r
-                       $this->level = $this->level + 1;\r
-\r
-                       // read file\r
-                       $fd = fopen ($filename, 'r');\r
-                       $contents = fread ($fd, $fsize);\r
-                       fclose ($fd);\r
-               }\r
-\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
-       function getIncludeFileName($filename) {\r
-               // leave absolute filenames and http urls as they are\r
-               if (\r
-                               (substr($filename,0,1) == '/')\r
-                       ||      (substr($filename,0,7) == 'http://')\r
-                       ||      (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
-       function _updateTopIfCondition() {\r
-               if (sizeof($this->if_conditions) == 0)\r
-                       $this->if_currentlevel = 1;\r
-               else\r
-                       $this->if_currentlevel = $this->if_conditions[sizeof($this->if_conditions) - 1];\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
-        * @param &$data\r
-        *              Data that needs to be highlighted\r
-        * @see setHighlight\r
-        */\r
-       function highlight(&$data) {\r
-               if ($this->aHighlight)\r
-                       return highlight($data,$this->aHighlight,$this->template['SEARCH_HIGHLIGHT']);\r
-               else\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
+class BaseActions {
+
+       // depth level for includes (max. level is 3)
+       var $level;
+
+       // array of evaluated conditions (true/false). The element at the end is the one for the most nested
+       // if block.
+       var $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.
+       var $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.
+       var $if_currentlevel;
+
+       // contains a search string with keywords that need to be highlighted. These get parsed into $aHighlight
+       var $strHighlight;
+
+       // array of keywords that need to be highlighted in search results (see the highlight()
+       // and parseHighlight() methods)
+       var $aHighlight;
+
+       // reference to the parser object that is using this object as actions-handler
+       var $parser;
+
+       function BaseActions() {
+               $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
+
+       }
+
+       // include file (no parsing of php)
+       function parse_include($filename) {
+               @readfile($this->getIncludeFileName($filename));
+       }
+
+       // php-include file
+       function parse_phpinclude($filename) {
+               includephp($this->getIncludeFileName($filename));
+       }
+
+       // parsed include
+       function parse_parsedinclude($filename) {
+               // check current level
+               if ($this->level > 3) return;   // max. depth reached (avoid endless loop)
+               global $skinid;
+               if (!$skinid) {
+                       global $manager, $blogid;
+                       if (!$blogid) {
+                               global $CONF;
+                               $blogid = $CONF['DefaultBlog'];
+                       }
+                       $blog   = &$manager->getBlog($blogid);
+                       $skinid =  $blog->getDefaultSkin();
+               }
+               $skin = new SKIN($skinid);
+               $file = $this->getIncludeFileName($filename);
+               if (!$skin->isValid && !file_exists($file)) {
+                       return;
+               }
+               $parts = explode('|', $filename, 2);
+               if ($skin->getContent($parts[0])) {
+                       $contents = $skin->getContent($parts[0]);
+               } else {
+                       $filename = $this->getIncludeFileName($filename);
+                       if (!file_exists($filename)) return '';
+
+                       $fsize = filesize($filename);
+
+                       // nothing to include
+                       if ($fsize <= 0) return;
+
+                       $this->level = $this->level + 1;
+
+                       // read file
+                       $fd = fopen ($filename, 'r');
+                       $contents = fread ($fd, $fsize);
+                       fclose ($fd);
+               }
+
+               // parse file contents
+               $this->parser->parse($contents);
+
+               $this->level = $this->level - 1;
+       }
+
+       /**
+        * Returns the correct location of the file to be included, according to
+        * parser properties
+        *
+        * IF IncludeMode = 'skindir' => use skindir
+        */
+       function getIncludeFileName($filename) {
+               // leave absolute filenames and http urls as they are
+               if (
+                               (substr($filename,0,1) == '/')
+                       ||      (substr($filename,0,7) == 'http://')
+                       ||      (substr($filename,0,6) == 'ftp://')
+                       )
+                       return $filename;
+
+               $filename = PARSER::getProperty('IncludePrefix') . $filename;
+               if (PARSER::getProperty('IncludeMode') == 'skindir') {
+                       global $DIR_SKINS;
+                       return $DIR_SKINS . $filename;
+               } else {
+                       return $filename;
+               }
+       }
+
+       /**
+        * Inserts an url relative to the skindir (useful when doing import/export)
+        *
+        * e.g. <skinfile(default/myfile.sth)>
+        */
+       function parse_skinfile($filename) {
+               global $CONF;
+
+               echo $CONF['SkinsURL'] . PARSER::getProperty('IncludePrefix') . $filename;
+       }
+
+       /**
+        * Sets a property for the parser
+        */
+       function parse_set($property, $value) {
+               PARSER::setProperty($property, $value);
+       }
+
+       /**
+        * Helper function: add if condition
+        */
+       function _addIfCondition($condition) {
+
+               array_push($this->if_conditions,$condition);
+
+               $this->_updateTopIfCondition();
+
+               ob_start();
+       }
+
+       function _updateTopIfCondition() {
+               if (sizeof($this->if_conditions) == 0)
+                       $this->if_currentlevel = 1;
+               else
+                       $this->if_currentlevel = $this->if_conditions[sizeof($this->if_conditions) - 1];
+       }
+
+       /**
+        * Helper function for elseif / elseifnot
+        */
+       function _addIfExecute() {
+               array_push($this->if_execute, 0);
+       }
+
+       /**
+        * Helper function for elseif / elseifnot
+        * @param string condition to be fullfilled
+        */
+       function _updateIfExecute($condition) {
+               $index = sizeof($this->if_execute) - 1;
+               $this->if_execute[$index] = $this->if_execute[$index] || $condition;
+       }
+
+       /**
+        * returns the currently top if condition
+        */
+       function _getTopIfCondition() {
+               return $this->if_currentlevel;
+       }
+
+       /**
+        * Sets the search terms to be highlighted
+        *
+        * @param $highlight
+        *              A series of search terms
+        */
+       function setHighlight($highlight) {
+               $this->strHighlight = $highlight;
+               if ($highlight) {
+                       $this->aHighlight = parseHighlight($highlight);
+               }
+       }
+
+       /**
+        * Applies the highlight to the given piece of text
+        *
+        * @param &$data
+        *              Data that needs to be highlighted
+        * @see setHighlight
+        */
+       function highlight(&$data) {
+               if ($this->aHighlight)
+                       return highlight($data,$this->aHighlight,$this->template['SEARCH_HIGHLIGHT']);
+               else
+                       return $data;
+       }
+
+       /**
+        * Parses <%if%> statements
+        */
+       function parse_if() {
+               $this->_addIfExecute();
+
+               $args = func_get_args();
+               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+               $this->_addIfCondition($condition);
+       }
+
+       /**
+        * Parses <%else%> statements
+        */
+       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);
+               }
+       }
+
+       /**
+        * Parses <%elseif%> statements
+        */
+       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();
+                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+                       $this->_addIfCondition($condition);
+               }
+       }
+
+       /**
+        * Parses <%ifnot%> statements
+        */
+       function parse_ifnot() {
+               $this->_addIfExecute();
+
+               $args = func_get_args();
+               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+               $this->_addIfCondition(!$condition);
+       }
+
+       /**
+        * Parses <%elseifnot%> statements
+        */
+       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();
+                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+                       $this->_addIfCondition(!$condition);
+               }
+       }
+
+       /**
+        * Ends a conditional if-block
+        * see e.g. ifcat (BLOG), ifblogsetting (PAGEFACTORY)
+        */
+       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();
+       }
+}
 ?>
\ No newline at end of file