OSDN Git Service

FIX:MANAGER::instance()をstaticに
[nucleus-jp/nucleus-next.git] / nucleus / libs / MANAGER.php
index 0c55d27..ea9a5ad 100644 (file)
@@ -20,7 +20,7 @@
  *\r
  * @license http://nucleuscms.org/license.txt GNU General Public License\r
  * @copyright Copyright (C) 2002-2009 The Nucleus Group\r
- * @version $Id: MANAGER.php 1731 2012-04-08 15:10:35Z sakamocchi $\r
+ * @version $Id: MANAGER.php 1878 2012-06-17 07:42:07Z sakamocchi $\r
  */\r
 class Manager\r
 {\r
@@ -32,12 +32,13 @@ class Manager
         * The $items, $blogs, ... arrays map an id to an object (for plugins, the name is used\r
         * rather than an ID)\r
         */\r
-       var $items;\r
-       var $blogs;\r
-       var $plugins;\r
-       var $karma;\r
-       var $templates;\r
-       var $members;\r
+       private $items;\r
+       private $blogs;\r
+       private $plugins;\r
+       private $karma;\r
+       private $templates;\r
+       private $members;\r
+       private $skins;\r
        \r
        /**\r
         * cachedInfo to avoid repeated SQL queries (see pidInstalled/pluginInstalled/getPidFromName)\r
@@ -71,7 +72,7 @@ class Manager
         * $manager =& Manager::instance(); to get a reference to the object\r
         * instead of a copy\r
         */\r
-       public function &instance()\r
+       public static function &instance()\r
        {\r
                static $instance = array();\r
                if ( empty($instance) )\r
@@ -90,44 +91,41 @@ class Manager
                $this->blogs = array();\r
                $this->plugins = array();\r
                $this->karma = array();\r
+               $this->templates = array();\r
+               $this->skins = array();\r
                $this->parserPrefs = array();\r
                $this->cachedInfo = array();\r
+               $this->members = array();\r
                return;\r
        }\r
        \r
        /**\r
         * Returns the requested item object. If it is not in the cache, it will\r
         * first be loaded and then placed in the cache.\r
-        * Intended use: $item =& $manager->getItem(1234)\r
+        * Intended use: $item =& $manager->getItem(1234, 0, 0)\r
         */\r
        public function &getItem($itemid, $allowdraft, $allowfuture)\r
        {\r
-               $item =& $this->items[$itemid];\r
+               /* confirm to cached */\r
+               if ( !array_key_exists($itemid, $this->items) )\r
+               {\r
+                       $this->loadClass('ITEM');\r
+                       $item = Item::getitem($itemid, $allowdraft, $allowfuture);\r
+                       $this->items[$itemid] = $item;\r
+               }\r
                \r
-               // check the draft and future rules if the item was already cached\r
-               if ( $item )\r
+               $item =& $this->items[$itemid];\r
+               if ( !$allowdraft && ($item['draft']) )\r
                {\r
-                       if ( (!$allowdraft) && ($item['draft']) )\r
-                       {\r
-                               return 0;\r
-                       }\r
-                       \r
-                       $blog =& $this->getBlog(getBlogIDFromItemID($itemid));\r
-                       \r
-                       if ( (!$allowfuture) && ($item['timestamp'] > $blog->getCorrectTime()) )\r
-                       {\r
-                               return 0;\r
-                       }\r
+                       return 0;\r
                }\r
                \r
-               if ( !$item )\r
+               $blog =& $this->getBlog($item['blogid']);\r
+               if ( !$allowfuture && ($item['timestamp'] > $blog->getCorrectTime()) )\r
                {\r
-                       // load class if needed\r
-                       $this->loadClass('ITEM');\r
-                       // load item object\r
-                       $item = Item::getitem($itemid, $allowdraft, $allowfuture);\r
-                       $this->items[$itemid] = $item;\r
+                       return 0;\r
                }\r
+               \r
                return $item;\r
        }\r
        \r
@@ -162,17 +160,12 @@ class Manager
         */\r
        public function &getBlog($blogid)\r
        {\r
-               $blog =& $this->blogs[$blogid];\r
-               \r
-               if ( !$blog )\r
+               if ( !array_key_exists($blogid, $this->blogs) )\r
                {\r
-                       // load class if needed\r
                        $this->_loadClass('BLOG','BLOG.php');\r
-                       // load blog object\r
-                       $blog = new Blog($blogid);\r
-                       $this->blogs[$blogid] =& $blog;\r
+                       $this->blogs[$blogid] = new Blog($blogid);\r
                }\r
-               return $blog;\r
+               return $this->blogs[$blogid];\r
        }\r
        \r
        /**\r
@@ -198,14 +191,12 @@ class Manager
         */\r
        public function &getTemplate($templateName)\r
        {\r
-               $template =& $this->templates[$templateName];\r
-               \r
-               if ( !$template )\r
+               if ( !array_key_exists($templateName, $this->templates) )\r
                {\r
-                       $template = Template::read($templateName);\r
-                       $this->templates[$templateName] =& $template;\r
+                       $this->_loadClass('Template','TEMPLATE.php');\r
+                       $this->templates[$templateName] =& Template::read($templateName);\r
                }\r
-               return $template;\r
+               return $this->templates[$templateName];\r
        }\r
        \r
        /**\r
@@ -213,17 +204,12 @@ class Manager
         */\r
        public function &getKarma($itemid)\r
        {\r
-               $karma =& $this->karma[$itemid];\r
-               \r
-               if ( !$karma )\r
+               if ( !array_key_exists($itemid, $this->karma) )\r
                {\r
-                       // load class if needed\r
-                       $this->_loadClass('KARMA','KARMA.php');\r
-                       // create KARMA object\r
-                       $karma = new Karma($itemid);\r
-                       $this->karma[$itemid] =& $karma;\r
+                       $this->_loadClass('Karma','KARMA.php');\r
+                       $this->karma[$itemid] = new Karma($itemid);\r
                }\r
-               return $karma;\r
+               return $this->karma[$itemid];\r
        }\r
        \r
        /**\r
@@ -231,17 +217,31 @@ class Manager
         */\r
        public function &getMember($memberid)\r
        {\r
-               $mem =& $this->members[$memberid];\r
-               \r
-               if ( !$mem )\r
+               if ( !array_key_exists($memberid, $this->members) )\r
                {\r
-                       // load class if needed\r
-                       $this->_loadClass('MEMBER','MEMBER.php');\r
-                       // create MEMBER object\r
-                       $mem =& Member::createFromID($memberid);\r
-                       $this->members[$memberid] =& $mem;\r
+                       $this->_loadClass('Member','MEMBER.php');\r
+                       $this->members[$memberid] =& Member::createFromID($memberid);;\r
+               }\r
+               return $this->members[$memberid];\r
+       }\r
+       \r
+       /**\r
+        * Manager::getSkin()\r
+        * \r
+        * @param       integer $skinid                         ID for skin\r
+        * @param       string  $action_class           action class for handling skin variables\r
+        * @param       string  $event_identifier       identifier for event name\r
+        * @return      object  instance of Skin class\r
+        */\r
+       public function &getSkin($skinid, $action_class='Actions', $event_identifier='Skin')\r
+       {\r
+               if ( !array_key_exists($skinid, $this->skins) )\r
+               {\r
+                       $this->_loadClass('Skin', 'SKIN.php');\r
+                       $this->skins[$skinid] = new Skin($skinid, $action_class, $event_identifier);\r
                }\r
-               return $mem;\r
+               \r
+               return $this->skins[$skinid];\r
        }\r
        \r
        /**\r
@@ -268,10 +268,11 @@ class Manager
         */\r
        private function _loadClass($name, $filename)\r
        {\r
+               global $DIR_LIBS;\r
+               \r
                if ( !class_exists($name) )\r
                {\r
-                               global $DIR_LIBS;\r
-                               include($DIR_LIBS . $filename);\r
+                       include($DIR_LIBS . $filename);\r
                }\r
                return;\r
        }\r
@@ -569,7 +570,7 @@ class Manager
                                  && !empty($this->plugins[$listener])\r
                                  && method_exists($this->plugins[$listener], 'event_' . $eventName) )\r
                                {\r
-                                       call_user_func(array(&$this->plugins[$listener],'event_' . $eventName), $data);\r
+                                       call_user_func(array(&$this->plugins[$listener], 'event_' . $eventName), array(&$data));\r
                                }\r
                        }\r
                }\r