OSDN Git Service

ADD/FIX/CHANGE/REMOVE: スキン・テンプレート表示処理の改良
[nucleus-jp/nucleus-next.git] / nucleus / libs / ACTIONS.php
index eaef5a5..15ea24c 100644 (file)
  * This class contains the functions that get called by using\r
  * the special tags in the skins\r
  *\r
- * The allowed tags for a type of skinpart are defined by the\r
- * Skin::getAllowedActionsForType($type) method\r
- *\r
  * @license http://nucleuscms.org/license.txt GNU General Public License\r
  * @copyright Copyright (C) 2002-2012 The Nucleus Group\r
- * @version $Id: ACTIONS.php 1725 2012-04-07 02:21:32Z sakamocchi $\r
+ * @version $Id: ACTIONS.php 1863 2012-05-19 10:50:27Z sakamocchi $
  */\r
 \r
 class Actions extends BaseActions\r
 {\r
        // part of the skin currently being parsed ('index', 'item', 'archive',\r
        // 'archivelist', 'member', 'search', 'error', 'imagepopup')\r
-       var $skintype;\r
+       private $skintype;\r
        \r
        // contains an assoc array with parameters that need to be included when\r
        // generating links to items/archives/... (e.g. catid)\r
-       var $linkparams;\r
-       \r
-       // reference to the skin object for which a part is being parsed\r
-       var $skin;\r
+       private $linkparams;\r
        \r
        // used when including templated forms from the include/ dir. The $formdata var\r
        // contains the values to fill out in there (assoc array name -> value)\r
-       var $formdata;\r
+       private $formdata;\r
        \r
        // filled out with the number of displayed items after calling one of the\r
        // (other)blog/(other)searchresults skinvars.\r
-       var $amountfound;\r
+       private $amountfound;\r
+       \r
+       /**\r
+        * Actions::$default_actions\r
+        * list of whole action names with which this class can deal\r
+        */\r
+       static private $default_actions = array(\r
+               'addlink',\r
+               'addpopupcode',\r
+               'adminurl',\r
+               'archivelink',\r
+               'bloglist',\r
+               'category',\r
+               'loginform',\r
+               'member',\r
+               'nucleusbutton',\r
+               'otherarchivedaylist',\r
+               'otherarchivelist',\r
+               'otherarchiveyearlist',\r
+               'otherblog',\r
+               'plugin',\r
+               'referer',\r
+               'searchform',\r
+               'self',\r
+               'sitevar',\r
+               'skinname',\r
+               'sticky',\r
+               'todaylink',\r
+               'version',\r
+               // deprecated (Nucleus v2.0)\r
+               /* TODO: remove this */\r
+               'ifcat'\r
+       );\r
+       \r
+       /**\r
+        * Actions::$skin_type_friendly_names\r
+        * friendly name for wrapped page types\r
+        */\r
+       static public $default_skin_types = array(\r
+               'index'                 => _SKIN_PART_MAIN,\r
+               'item'                  => _SKIN_PART_ITEM,\r
+               'archivelist'   => _SKIN_PART_ALIST,\r
+               'archive'               => _SKIN_PART_ARCHIVE,\r
+               'search'                => _SKIN_PART_SEARCH,\r
+               'error'                 => _SKIN_PART_ERROR,\r
+               'member'                => _SKIN_PART_MEMBER,\r
+               'imagepopup'    => _SKIN_PART_POPUP\r
+       );\r
+       \r
+       /**\r
+        * Actions::getAvailableSkinTypes()\r
+        * \r
+        * @static\r
+        * @param       void\r
+        * @return      array   list of friendly names for page actions\r
+        */\r
+       static public function getAvailableSkinTypes()\r
+       {\r
+               return self::$default_skin_types;\r
+       }\r
        \r
        /**\r
         * Actions::__construct()\r
@@ -54,7 +107,7 @@ class Actions extends BaseActions
                global $catid;\r
                \r
                // call constructor of superclass first\r
-               $this->BaseActions();\r
+               parent::__construct();\r
                $this->skintype = $type;\r
                \r
                if ( $catid )\r
@@ -65,28 +118,141 @@ class Actions extends BaseActions
        }\r
        \r
        /**\r
-        * Actions::setSkin()\r
-        * Set the skin\r
-        * @param       object  $skin   an instance of Skin class\r
-        * @return      void\r
-        */\r
-       public function setSkin(&$skin)\r
-       {\r
-               $this->skin =& $skin;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::setParser()\r
-        * Set the parser\r
+        * Actions::getAvailableActions()\r
         * \r
-        * @param       object  $parser an instance of Parser class\r
-        * @return      void\r
-        */\r
-       public function setParser(&$parser)\r
-       {\r
-               $this->parser =& $parser;\r
-               return;\r
+        * @param       void\r
+        * @return      array   allowed actions for the page type\r
+        */\r
+       public function getAvailableActions()\r
+       {\r
+               $extra_actions = array();\r
+               \r
+               switch ( $this->skintype )\r
+               {\r
+                       case 'index':\r
+                               $extra_actions = array(\r
+                                       'blog',\r
+                                       'blogsetting',\r
+                                       'preview',\r
+                                       'additemform',\r
+                                       'categorylist',\r
+                                       'archivelist',\r
+                                       'archivedaylist',\r
+                                       'archiveyearlist',\r
+                                       'nextlink',\r
+                                       'prevlink'\r
+                               );\r
+                               break;\r
+                       case 'archive':\r
+                               $extra_actions = array(\r
+                                       'blog',\r
+                                       'archive',\r
+                                       'otherarchive',\r
+                                       'categorylist',\r
+                                       'archivelist',\r
+                                       'archivedaylist',\r
+                                       'archiveyearlist',\r
+                                       'blogsetting',\r
+                                       'archivedate',\r
+                                       'nextarchive',\r
+                                       'prevarchive',\r
+                                       'nextlink',\r
+                                       'prevlink',\r
+                                       'archivetype'\r
+                               );\r
+                               break;\r
+                       case 'archivelist':\r
+                               $extra_actions = array(\r
+                                       'blog',\r
+                                       'archivelist',\r
+                                       'archivedaylist',\r
+                                       'archiveyearlist',\r
+                                       'categorylist',\r
+                                       'blogsetting'\r
+                               );\r
+                               break;\r
+                       case 'search':\r
+                               $extra_actions = array(\r
+                                       'blog',\r
+                                       'archivelist',\r
+                                       'archivedaylist',\r
+                                       'archiveyearlist',\r
+                                       'categorylist',\r
+                                       'searchresults',\r
+                                       'othersearchresults',\r
+                                       'blogsetting',\r
+                                       'query',\r
+                                       'nextlink',\r
+                                       'prevlink'\r
+                               );\r
+                               break;\r
+                       case 'imagepopup':\r
+                               $extra_actions = array(\r
+                                       'image',\r
+                                       // deprecated (Nucleus v2.0)\r
+                                       /* TODO: remove this */\r
+                                       'imagetext'\r
+                               );\r
+                               break;\r
+                       case 'member':\r
+                               $extra_actions = array(\r
+                                       'membermailform',\r
+                                       'blogsetting',\r
+                                       'nucleusbutton',\r
+                                       'categorylist'\r
+                               );\r
+                               break;\r
+                       case 'item':\r
+                               $extra_actions = array(\r
+                                       'blog',\r
+                                       'item',\r
+                                       'comments',\r
+                                       'commentform',\r
+                                       'vars',\r
+                                       'blogsetting',\r
+                                       'nextitem',\r
+                                       'previtem',\r
+                                       'nextlink',\r
+                                       'prevlink',\r
+                                       'nextitemtitle',\r
+                                       'previtemtitle',\r
+                                       'categorylist',\r
+                                       'archivelist',\r
+                                       'archivedaylist',\r
+                                       'archiveyearlist',\r
+                                       'itemtitle',\r
+                                       'itemid',\r
+                                       'itemlink'\r
+                               );\r
+                               break;\r
+                       case 'error':\r
+                               $extra_actions = array(\r
+                                       'errormessage',\r
+                                       'categorylist'\r
+                               );\r
+                               break;\r
+                       default:\r
+                                       $extra_actions = array(\r
+                                               'blog',\r
+                                               'blogsetting',\r
+                                               'preview',\r
+                                               'additemform',\r
+                                               'categorylist',\r
+                                               'archivelist',\r
+                                               'archivedaylist',\r
+                                               'archiveyearlist',\r
+                                               'nextlink',\r
+                                               'prevlink',\r
+                                               'membermailform',\r
+                                               'nucleusbutton',\r
+                                               'categorylist'\r
+                                       );\r
+                               break;\r
+               }\r
+               \r
+               $defined_actions = array_merge(self::$default_actions, $extra_actions);\r
+               \r
+               return array_merge($defined_actions, parent::getAvailableActions());\r
        }\r
        \r
        /**\r
@@ -99,7 +265,7 @@ class Actions extends BaseActions
        public function doForm($filename)\r
        {\r
                global $DIR_NUCLEUS;\r
-               array_push($this->parser->actions,'formdata','text','callback','errordiv','ticket');\r
+               array_push($this->parser->actions,'formdata', 'callback','errordiv','ticket');\r
                \r
                $oldIncludeMode = Parser::getProperty('IncludeMode');\r
                $oldIncludePrefix = Parser::getProperty('IncludePrefix');\r
@@ -112,7 +278,6 @@ class Actions extends BaseActions
                \r
                array_pop($this->parser->actions);      // errordiv\r
                array_pop($this->parser->actions);      // callback\r
-               array_pop($this->parser->actions);      // text\r
                array_pop($this->parser->actions);      // formdata\r
                array_pop($this->parser->actions);      // ticket\r
                return;\r
@@ -127,7 +292,7 @@ class Actions extends BaseActions
         * @param       string  $value  value of property\r
         * @return      boolean condition\r
         */\r
-       public function checkCondition($field, $name='', $value = '')\r
+       protected function checkCondition($field, $name='', $value = '')\r
        {\r
                global $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists;\r
                \r
@@ -149,12 +314,6 @@ class Actions extends BaseActions
                        case 'admin':\r
                                $condition = $member->isLoggedIn() && $this->ifAdmin($name);\r
                                break;\r
-                       case 'superadmin':\r
-                               $condition = $member->isLoggedIn() && $member->isAdmin();\r
-                               break;\r
-                       case 'allowloginedit':\r
-                               $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());\r
-                               break;\r
                        case 'nextitem':\r
                                $condition = ($itemidnext != '');\r
                                break;\r
@@ -173,27 +332,6 @@ class Actions extends BaseActions
                        case 'hasplugin':\r
                                $condition = $this->ifHasPlugin($name, $value);\r
                                break;\r
-                       case 'adminaction':\r
-                               $condition = ($this->objAdmin->action == $name);\r
-                               break;\r
-                       case 'adminoldaction':\r
-                               $condition = ($this->objAdmin->action == $name);\r
-                               break;\r
-                       case 'addresschange':\r
-                               $condition = ($this->_ifAddresscange());\r
-                               break;\r
-                       case 'bechangepass':\r
-                               $condition = ($this->_beChangePassword());\r
-                               break;\r
-                       case 'skincandidates':\r
-                               $condition = ($this->_ifSkincandidates());\r
-                               break;\r
-                       case 'nameclashes':\r
-                               $condition = requestVar('nameclashes');\r
-                               break;\r
-                       case 'existsnewplugin':\r
-                               $condition = ($this->_existsNewPlugin());\r
-                               break;\r
                        default:\r
                                $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);\r
                                break;\r
@@ -289,7 +427,7 @@ class Actions extends BaseActions
                }\r
                \r
                // check category name\r
-               if ( $name == 'catname' )\r
+               else if ( $name == 'catname' )
                {\r
                        $value = $blog->getCategoryIdFromName($value);\r
                        if ( $value == $catid )\r
@@ -299,7 +437,7 @@ class Actions extends BaseActions
                }\r
                \r
                // check category id\r
-               if ( ($name == 'catid') && ($value == $catid) )\r
+               else if ( ($name == 'catid') && ($value == $catid) )
                {\r
                        return $blog->isValidCategory($catid);\r
                }\r
@@ -416,8 +554,8 @@ class Actions extends BaseActions
                // TODO: Move request uri to linkparams. this is ugly. sorry for that.\r
                $startpos       = (integer) $startpos;\r
                $parsed         = parse_url(serverVar('REQUEST_URI'));\r
-               $path           = $parsed['path'];\r
-               $parsed         = $parsed['query'];\r
+               $path           = ( in_array('path', $parsed) ) ? $parsed['path'] : '';\r
+               $parsed         = ( in_array('query', $parsed) ) ? $parsed['query'] : '';\r
                $url            = '';\r
                \r
                if ( $direction == 'prev' )\r
@@ -434,7 +572,7 @@ class Actions extends BaseActions
                                {\r
                                        $url = $CONF['SearchURL'];\r
                                }\r
-                               $url .= '?' . alterQueryStr($parsed,'startpos',$startpos);\r
+                               $url .= '?' . alterQueryStr($parsed, 'startpos', $startpos);\r
                        }\r
                }\r
                else if ( $direction == 'next' )\r
@@ -477,7 +615,7 @@ class Actions extends BaseActions
                                }\r
                                if ( $sqlquery )\r
                                {\r
-                                       $iAmountOnPage = intval(quickQuery($sqlquery)) - intval($startpos);\r
+                                       $iAmountOnPage = intval(DB::getValue($sqlquery)) - intval($startpos);\r
                                }\r
                        }\r
                        \r
@@ -975,19 +1113,6 @@ class Actions extends BaseActions
        }\r
        \r
        /**\r
-        * Actions::parse_charset()\r
-        * Parse skinvar charset\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_charset()\r
-       {\r
-               echo i18n::get_current_charset();\r
-               return;\r
-       }\r
-       \r
-       /**\r
         * Actions::parse_commentform()\r
         * Parse skinvar commentform\r
         * \r
@@ -1095,19 +1220,20 @@ class Actions extends BaseActions
         */\r
        public function parse_comments($template)\r
        {\r
-               global $itemid, $manager, $blog, $highlight;\r
+               global $manager, $blog, $highlight, $itemid;\r
+               \r
                $template =& $manager->getTemplate($template);\r
+               $item =& $manager->getitem($itemid, 0, 0);\r
                \r
                // create parser object & action handler\r
-               $actions = new ItemActions($blog);\r
-               $parser = new Parser($actions->getDefinedActions(),$actions);\r
-               $actions->setTemplate($template);\r
-               $actions->setParser($parser);\r
-               $item = Item::getitem($itemid, 0, 0);\r
-               $actions->setCurrentItem($item);\r
+               $handler = new ItemActions($blog);\r
+               $handler->setTemplate($template);\r
+               $handler->setCurrentItem($item);\r
+               \r
+               $parser = new Parser($handler);\r
                \r
                $comments = new Comments($itemid);\r
-               $comments->setItemActions($actions);\r
+               $comments->setItemActions($handler);\r
                // shows ALL comments\r
                $comments->showComments($template, -1, 1, $highlight);\r
                return;\r
@@ -1990,7 +2116,7 @@ class Actions extends BaseActions
         */\r
        public function parse_skinname()\r
        {\r
-               echo $this->skin->getName();\r
+               echo $this->parser->skin->getName();\r
                return;\r
        }\r
        \r
@@ -2008,23 +2134,6 @@ class Actions extends BaseActions
        }\r
        \r
        /**\r
-        * Actions::parse_text()\r
-        * Parse text\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_text($which)\r
-       {\r
-               // constant($which) only available from 4.0.4 :(\r
-               if ( defined($which) )\r
-               {\r
-                       eval("echo $which;");\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
         * Actions::parse_ticket()\r
         * Parse ticket\r
         * \r