OSDN Git Service

CHANGE:プラグインの管理画面の出力をいったんバッファする形に変更
authorshizuki <shizuki@kinezumi.net>
Sun, 20 May 2012 01:47:47 +0000 (10:47 +0900)
committershizuki <shizuki@kinezumi.net>
Sun, 20 May 2012 01:47:47 +0000 (10:47 +0900)
管理画面の出力をバッファしてスキンのコンテンツとしてSkin::parse()に渡すようにすることで、プラグインイベントが二重に発生していた現象を回避

nucleus/libs/ADMIN.php
nucleus/libs/PLUGINADMIN.php
nucleus/libs/SKIN.php

index d271b35..ff66e92 100644 (file)
@@ -4747,31 +4747,19 @@ class Admin
                self::error(_ERROR_DISALLOWED);\r
                return;\r
        }\r
-       \r
+\r
        /**\r
-        * Admin::PluninAdminPagehead()\r
-        * Output pluginadmin page head\r
+        * Admin::action_PluginAdmin()\r
+        * Output pluginadmin\r
         *\r
+        * @param       string  $skinContents\r
         * @param       string  $extrahead\r
         * @return      void\r
         */\r
-       static public function PluninAdminPagehead($extrahead = '')\r
+       static public function action_PluginAdmin($skinContents, $extrahead = '')\r
        {\r
                self::$extrahead .= $extrahead;\r
-               self::$skin->parse('pagehead');\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Admin::PluninAdminPagefoot()\r
-        * Output pluginadmin page foot\r
-        *\r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       static public function PluninAdminPagefoot()\r
-       {\r
-               self::$skin->parse('pagefoot');\r
+               self::$skin->parse('pluginadmin', $skinContents);\r
                return;\r
        }\r
        \r
index 5cdd11d..815e224 100644 (file)
@@ -24,7 +24,10 @@ class PluginAdmin
        public $plugin;         // ref. to plugin object\r
        public $bValid;         // evaluates to true when object is considered valid\r
        public $admin;                  // ref to an admin object\r
-       \r
+\r
+       private $skinContents;  // PluginAdmin contents\r
+       private $extrahead;             // extrahead\r
+\r
        public function __construct($pluginName)\r
        {\r
                global $manager, $DIR_LIBS;\r
@@ -65,8 +68,8 @@ class PluginAdmin
        public function start($extraHead = '')\r
        {\r
                global $CONF;\r
-               $extrahead = '<base href="' . Entity::hsc($CONF['AdminURL']) . '" />' . "\n";\r
-               Admin::PluninAdminPagehead($extrahead);\r
+               $this->extrahead = $extraHead . '<base href="' . Entity::hsc($CONF['AdminURL']) . '" />' . "\n";\r
+               ob_start();\r
                return;\r
        }\r
        \r
@@ -79,7 +82,10 @@ class PluginAdmin
        public function end()\r
        {\r
                $this->AddTicketByJS();\r
-               Admin::PluninAdminPagefoot();\r
+               $contents = ob_get_contents();\r
+               ob_end_clean();\r
+               $this->skinContents = '<%pagehead%>' . $contents . '<%pagefoot%>';\r
+               Admin::action_PluginAdmin($this->skinContents, $this->extrahead);\r
                return;\r
        }\r
        \r
index 48af7c3..63124c9 100644 (file)
@@ -338,13 +338,20 @@ class Skin
                \r
                // retrieve contents\r
                $contents = FALSE;\r
-               if ( $type != 'fileparse' )\r
+               if ( $type == 'pluginadmin' )\r
                {\r
-                       $contents = $this->getContentFromDB($type);\r
+                       $contents = $path;\r
                }\r
-               else if ( $path !== ''  && i18n::strpos(realpath($path), realpath("$DIR_NUCLEUS/../")) == 0 )\r
+               else\r
                {\r
-                       $contents = $this->getContentFromFile($path);\r
+                       if ( $type != 'fileparse' )\r
+                       {\r
+                               $contents = $this->getContentFromDB($type);\r
+                       }\r
+                       else if ( $path !== ''  && i18n::strpos(realpath($path), realpath("$DIR_NUCLEUS/../")) == 0 )\r
+                       {\r
+                               $contents = $this->getContentFromFile($path);\r
+                       }\r
                }\r
                // use base skin if this skin does not have contents\r
                if ( $contents === FALSE )\r