OSDN Git Service

CHANGE: Adminクラスのスキン関係メソッドの整理・統合
authorsakamocchi <o-takashi@sakamocchi.jp>
Thu, 7 Jun 2012 15:53:55 +0000 (00:53 +0900)
committersakamocchi <o-takashi@sakamocchi.jp>
Thu, 7 Jun 2012 15:53:55 +0000 (00:53 +0900)
管理画面/通常画面用ページアクションにおいて同じ処理をしている箇所がある。
コードのメンテナンスを簡便にするため、それらの処理を独立した以下のメソッドに集約した。

Admin::skinclone()
Admin::skindeleteconfirm()
Admin::skineditgeneral()Admin::skiniedoimport()
Admin::skinieexport()
Admin::skinieimport()
Admin::skinremovetypeconfirm()

nucleus/libs/ADMIN.php
nucleus/libs/AdminActions.php

index 766b4ed..839a8db 100644 (file)
@@ -2905,54 +2905,14 @@ class Admin
         */\r
        static private function action_skinieimport()\r
        {\r
-               global $member, $DIR_LIBS, $DIR_SKINS, $manager;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
-               // load skinie class\r
-               include_once($DIR_LIBS . 'skinie.php');\r
-               \r
-               $skinFileRaw    = postVar('skinfile');\r
-               $mode                   = postVar('mode');\r
-               \r
-               $importer = new SkinImport();\r
-               \r
-               // get full filename\r
-               if ( $mode == 'file' )\r
-               {\r
-                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
-                       \r
-                       /* TODO: remove this\r
-                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)\r
-                       if ( !file_exists($skinFile) )\r
-                       {\r
-                               $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';\r
-                       }\r
-                        */\r
-               }\r
-               else\r
-               {\r
-                       $skinFile = $skinFileRaw;\r
-               }\r
-               \r
-               // read only metadata\r
-               $error = $importer->readFile($skinFile, 1);\r
-               \r
-               /* TODO: we should consider to use the other way insterad of this */\r
-               $_REQUEST['skininfo']   = $importer->getInfo();\r
-               $_REQUEST['skinnames']  = $importer->getSkinNames();\r
-               $_REQUEST['tpltnames']  = $importer->getTemplateNames();\r
-               \r
-               // clashes\r
-               $skinNameClashes                = $importer->checkSkinNameClashes();\r
-               $templateNameClashes    = $importer->checkTemplateNameClashes();\r
-               $hasNameClashes                 = (count($skinNameClashes) > 0) || (count($templateNameClashes) > 0);\r
-               \r
-               /* TODO: we should consider to use the other way insterad of this */\r
-               $_REQUEST['skinclashes'] = $skinNameClashes;\r
-               $_REQUEST['tpltclashes'] = $templateNameClashes;\r
-               $_REQUEST['nameclashes'] = $hasNameClashes ? 1 : 0;\r
+               $skinFileRaw = postVar('skinfile');\r
+               $mode = postVar('mode');\r
                \r
+               $error = self::skinieimport($mode, $skinFileRaw);\r
                if ( $error )\r
                {\r
                        self::error($error);\r
@@ -2978,56 +2938,21 @@ class Admin
                // load skinie class\r
                include_once($DIR_LIBS . 'skinie.php');\r
                \r
-               $skinFileRaw    = postVar('skinfile');\r
-               $mode                   = postVar('mode');\r
-               \r
+               $mode = postVar('mode');\r
+               $skinFileRaw = postVar('skinfile');\r
                $allowOverwrite = intPostVar('overwrite');\r
                \r
-               // get full filename\r
-               if ( $mode == 'file' )\r
-               {\r
-                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
-                       \r
-                       /* TODO: remove this\r
-                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)\r
-                       if ( !file_exists($skinFile) )\r
-                       {\r
-                               $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';\r
-                       }\r
-                       */\r
-               }\r
-               else\r
-               {\r
-                       $skinFile = $skinFileRaw;\r
-               }\r
-               \r
-               $importer = new SkinImport();\r
-               \r
-               $error = $importer->readFile($skinFile);\r
-               \r
+               $error = self::skinieedoimport($mode, $skinFileRaw, $allowOverwrite);\r
                if ( $error )\r
                {\r
-                       self::error($error);\r
+                       self::error($msg);\r
                        return;\r
                }\r
                \r
-               $error = $importer->writeToDatabase($allowOverwrite);\r
-               \r
-               if ( $error )\r
-               {\r
-                       self::error($error);\r
-                       return;\r
-               }\r
-               \r
-               /* TODO: we should consider to use the other way insterad of this */\r
-               $_REQUEST['skininfo']  = $importer->getInfo();\r
-               $_REQUEST['skinnames'] = $importer->getSkinNames();\r
-               $_REQUEST['tpltnames'] = $importer->getTemplateNames();\r
-               \r
                self::$skin->parse('skiniedoimport');\r
                return;\r
        }\r
-\r
+       \r
        /**\r
         * Admin::action_skinieexport()\r
         * \r
@@ -3036,42 +2961,16 @@ class Admin
         */\r
        static private function action_skinieexport()\r
        {\r
-               global $member, $DIR_LIBS;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
-               // load skinie class\r
-               include_once($DIR_LIBS . 'skinie.php');\r
-               \r
-               $aSkins         = requestIntArray('skin');\r
-               $aTemplates     = requestIntArray('template');\r
-               \r
-               if ( !is_array($aTemplates) )\r
-               {\r
-                       $aTemplates = array();\r
-               }\r
-               if ( !is_array($aSkins) )\r
-               {\r
-                       $aSkins = array();\r
-               }\r
-               \r
-               $skinList               = array_keys($aSkins);\r
-               $templateList   = array_keys($aTemplates);\r
-               \r
+               $aSkins = requestIntArray('skin');\r
+               $aTemplates = requestIntArray('template');\r
                $info = postVar('info');\r
                \r
-               $exporter = new SkinExport();\r
-               foreach ( $skinList as $skinId )\r
-               {\r
-                       $exporter->addSkin($skinId);\r
-               }\r
-               foreach ($templateList as $templateId)\r
-               {\r
-                       $exporter->addTemplate($templateId);\r
-               }\r
-               $exporter->setInfo($info);\r
+               self::skinieexport($aSkins, $aTemplates, $info);\r
                \r
-               $exporter->export();\r
                return;\r
        }\r
        \r
@@ -3751,14 +3650,13 @@ class Admin
                        self::error(_ERROR_BADSKINNAME);\r
                        return;\r
                }\r
-               \r
-               if ( SKIN::exists($name) )\r
+               else if ( SKIN::exists($name) )\r
                {\r
                        self::error(_ERROR_DUPSKINNAME);\r
                        return;\r
                }\r
                \r
-               $newId = SKIN::createNew($name, $desc);\r
+               SKIN::createNew($name, $desc);\r
                \r
                self::action_skinoverview();\r
                return;\r
@@ -3772,7 +3670,7 @@ class Admin
         */\r
        static private function action_skinedit()\r
        {\r
-               global $member, $manager;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
@@ -3788,52 +3686,26 @@ class Admin
         */\r
        static private function action_skineditgeneral()\r
        {\r
-               global $manager, $member;\r
+               global $member;\r
                \r
                $skinid = intRequestVar('skinid');\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
-               $name           = postVar('name');\r
-               $desc           = postVar('desc');\r
-               $type           = postVar('type');\r
-               $inc_mode       = postVar('inc_mode');\r
-               $inc_prefix     = postVar('inc_prefix');\r
-               \r
-               $skin =& $manager->getSkin($skinid);\r
-               \r
-               // 1. Some checks\r
-               if ( !isValidSkinName($name) )\r
-               {\r
-                       self::error(_ERROR_BADSKINNAME);\r
-                       return;\r
-               }\r
-               \r
-               if ( ($skin->getName() != $name) && SKIN::exists($name) )\r
+               $error = self::skineditgeneral($skinid);\r
+               if ( $error )\r
                {\r
-                       self::error(_ERROR_DUPSKINNAME);\r
+                       self::error($error);\r
                        return;\r
                }\r
                \r
-               if ( !$type )\r
-               {\r
-                       $type = 'text/html';\r
-               }\r
-               if ( !$inc_mode )\r
-               {\r
-                       $inc_mode = 'normal';\r
-               }\r
-               \r
-               // 2. Update description\r
-               $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix);\r
-               \r
                self::action_skinedit();\r
                return;\r
        }\r
        \r
        static private function action_skinedittype($msg = '')\r
        {\r
-               global $member, $manager;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
@@ -3842,10 +3714,9 @@ class Admin
                        self::$headMess = $msg;\r
                }\r
                \r
-               $skinid = intRequestVar('skinid');\r
-               $type   = requestVar('type');\r
-               $type   = trim($type);\r
-               $type   = strtolower($type);\r
+               $type = requestVar('type');\r
+               $type = trim($type);\r
+               $type = strtolower($type);\r
                \r
                if ( !isValidShortName($type) )\r
                {\r
@@ -3888,12 +3759,12 @@ class Admin
         */\r
        static private function action_skindelete()\r
        {\r
-               global $manager, $member, $CONF;\r
-               \r
-               $skinid = intRequestVar('skinid');\r
+               global $CONF, $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
+               $skinid = intRequestVar('skinid');\r
+               \r
                // don't allow default skin to be deleted\r
                if ( $skinid == $CONF['BaseSkin'] )\r
                {\r
@@ -3924,12 +3795,12 @@ class Admin
         */\r
        static private function action_skindeleteconfirm()\r
        {\r
-               global $member, $CONF, $manager;\r
-               \r
-               $skinid = intRequestVar('skinid');\r
+               global $member, $CONF;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
+               $skinid = intRequestVar('skinid');\r
+               \r
                // don't allow default skin to be deleted\r
                if ( $skinid == $CONF['BaseSkin'] )\r
                {\r
@@ -3948,21 +3819,7 @@ class Admin
                        return;\r
                }\r
                \r
-               $data = array('skinid' => $skinid);\r
-               $manager->notify('PreDeleteSkin', $data);\r
-               \r
-               // 1. delete description\r
-               $query = "DELETE FROM %s WHERE sdnumber=%d;";\r
-               $query = sprintf($query, sql_table('skin_desc'), (integer) $skinid);\r
-               DB::execute($query);\r
-               \r
-               // 2. delete parts\r
-               $query = "DELETE FROM %s WHERE sdesc=%d;";\r
-               $query = sprintf($query, sql_table('skin'), (integer) $skinid);\r
-               DB::execute($query);\r
-               \r
-               $data = array('skinid' => $skinid);\r
-               $manager->notify('PostDeleteSkin', $data);\r
+               self::skindeleteconfirm($skinid);\r
                \r
                self::action_skinoverview();\r
                return;\r
@@ -3976,7 +3833,7 @@ class Admin
         */\r
        static private function action_skinremovetype()\r
        {\r
-               global $member, $manager, $CONF;\r
+               global $member, $CONF;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
@@ -3989,14 +3846,6 @@ class Admin
                        return;\r
                }\r
                \r
-               // don't allow default skinparts to be deleted\r
-               /* TODO: this array should be retrieved from Action class */\r
-               if ( in_array($skintype, array('index', 'item', 'archivelist', 'archive', 'search', 'error', 'member', 'imagepopup')) )\r
-               {\r
-                       self::error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);\r
-                       return;\r
-               }\r
-               \r
                self::$skin->parse('skinremovetype');\r
                return;\r
        }\r
@@ -4009,47 +3858,24 @@ class Admin
         */\r
        static private function action_skinremovetypeconfirm()\r
        {\r
-               global $member, $CONF, $manager;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
                $skinid = intRequestVar('skinid');\r
                $skintype = requestVar('type');\r
                \r
-               if ( !isValidShortName($skintype) )\r
-               {\r
-                       self::error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);\r
-                       return;\r
-               }\r
-               \r
-               // don't allow default skinparts to be deleted\r
-               /* TODO: this array should be retrieved from Action class */\r
-               if ( in_array($skintype, array('index', 'item', 'archivelist', 'archive', 'search', 'error', 'member', 'imagepopup')) )\r
+               $error = self::skinremovetypeconfirm($skinid, $skintype);\r
+               if ( $error )\r
                {\r
-                       self::error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);\r
+                       self::error($error);\r
                        return;\r
                }\r
                \r
-               $data = array(\r
-                       'skinid'   => $skinid,\r
-                       'skintype' => $skintype\r
-               );\r
-               $manager->notify('PreDeleteSkinPart', $data);\r
-               // delete part\r
-               $query = "DELETE FROM %s WHERE sdesc=%d AND stype=%s;";\r
-               $query = sprintf($query, sql_table('skin'), (integer) $skinid, DB::quoteValue($skintype) );\r
-               DB::execute($query);\r
-               \r
-               $data = array(\r
-                       'skinid'   => $skinid,\r
-                       'skintype' => $skintype\r
-               );\r
-               $manager->notify('PostDeleteSkinPart', $data);\r
-               \r
                self::action_skinedit();\r
                return;\r
        }\r
-\r
+       \r
        /**\r
         * Admin::action_skinclone()\r
         * \r
@@ -4058,74 +3884,19 @@ class Admin
         */\r
        static private function action_skinclone()\r
        {\r
-               global $manager, $member;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
                $skinid = intRequestVar('skinid');\r
                \r
-               // 1. read skin to clone\r
-               $skin =& $manager->getSkin($skinid);\r
-               \r
-               $name = "{$skin->getName()}_clone";\r
-               \r
-               // if a skin with that name already exists:\r
-               if ( Skin::exists($name) )\r
-               {\r
-                       $i = 1;\r
-                       while ( Skin::exists($name . $i) )\r
-                       {\r
-                               $i++;\r
-                       }\r
-                       $name .= $i;\r
-               }\r
-               \r
-               // 2. create skin desc\r
-               $newid = Skin::createNew(\r
-                       $name,\r
-                       $skin->getDescription(),\r
-                       $skin->getContentType(),\r
-                       $skin->getIncludeMode(),\r
-                       $skin->getIncludePrefix()\r
-               );\r
-               \r
-               // 3. clone\r
-               $query = "SELECT stype FROM %s WHERE sdesc=%d;";\r
-               $query = sprintf($query, sql_table('skin'), (integer) $skinid);\r
-               \r
-               $res = DB::getResult($query);\r
-               foreach ( $res as $row )\r
-               {\r
-                       self::skinclonetype($skin, $newid, $row['stype']);\r
-               }\r
+               self::skinclone($skinid);\r
                \r
                self::action_skinoverview();\r
                return;\r
        }\r
        \r
        /**\r
-        * Admin::skinclonetype()\r
-        * \r
-        * @param       String  $skin   Skin object\r
-        * @param       Integer $newid  ID for this clone\r
-        * @param       String  $type   type of skin\r
-        * @return      Void\r
-        */\r
-       static private function skinclonetype($skin, $newid, $type)\r
-       {\r
-               $newid = intval($newid);\r
-               $content = $skin->getContentFromDB($type);\r
-               \r
-               if ( $content )\r
-               {\r
-                       $query = "INSERT INTO %s (sdesc, scontent, stype) VALUES (%d, %s, %s)";\r
-                       $query = sprintf($query, sql_table('skin'), (integer) $newid, DB::quoteValue($content), DB::quoteValue($type));\r
-                       DB::execute($query);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
         * Admin::action_adminskinoverview()\r
         * \r
         * @param       void\r
@@ -4133,7 +3904,7 @@ class Admin
         */\r
        static private function action_adminskinoverview()\r
        {\r
-               global $member, $manager;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
@@ -4150,7 +3921,9 @@ class Admin
        static private function action_adminskinnew()\r
        {\r
                global $member;\r
+               \r
                $member->isAdmin() or self::disallow();\r
+               \r
                $name = trim(postVar('name'));\r
                $desc = trim(postVar('desc'));\r
                \r
@@ -4169,8 +3942,9 @@ class Admin
                        self::error(_ERROR_DUPSKINNAME);\r
                        return;\r
                }\r
-               /* TODO: $newId is not reused... */\r
-               $newId = Skin::createNew($name, $desc);\r
+               \r
+               Skin::createNew($name, $desc);\r
+               \r
                self::action_adminskinoverview();\r
                return;\r
        }\r
@@ -4183,10 +3957,12 @@ class Admin
         */\r
        static private function action_adminskinedit()\r
        {\r
-               global $member, $manager;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
+               \r
                self::$skin->parse('adminskinedit');\r
+               \r
                return;\r
        }\r
        \r
@@ -4198,41 +3974,19 @@ class Admin
         */\r
        static private function action_adminskineditgeneral()\r
        {\r
-               global $manager, $member;\r
+               global $member;\r
                \r
                $skinid = intRequestVar('skinid');\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
-               $name           = postVar('name');\r
-               $desc           = postVar('desc');\r
-               $type           = postVar('type');\r
-               $inc_mode       = postVar('inc_mode');\r
-               $inc_prefix     = postVar('inc_prefix');\r
-               \r
-               $skin =& $manager->getSkin($skinid, 'AdminActions', 'AdminSkin');\r
-               \r
-               // 1. Some checks\r
-               if ( !isValidSkinName($name) )\r
-               {\r
-                       self::error(_ERROR_BADSKINNAME);\r
-                       return;\r
-               }\r
-               if ( ($skin->getName() != $name) && Skin::exists($name) )\r
+               $error = self::skineditgeneral($skinid, 'AdminActions');\r
+               if ( $error )\r
                {\r
-                       self::error(_ERROR_DUPSKINNAME);\r
+                       self::error($error);\r
                        return;\r
                }\r
-               if ( !$type )\r
-               {\r
-                       $type = 'text/html';\r
-               }\r
-               if ( !$inc_mode )\r
-               {\r
-                       $inc_mode = 'normal';\r
-               }\r
-               // 2. Update description\r
-               $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix);\r
+               \r
                self::action_adminskinedit();\r
                return;\r
        }\r
@@ -4245,7 +3999,7 @@ class Admin
         */\r
        static private function action_adminskinedittype($msg = '')\r
        {\r
-               global $member, $manager;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
@@ -4285,6 +4039,7 @@ class Admin
                \r
                $skin =& $manager->getSkin($skinid, 'AdminActions', 'AdminSkin');\r
                $skin->update($type, $content);\r
+               \r
                self::action_adminskinedittype(_SKIN_UPDATED);\r
                return;\r
        }\r
@@ -4297,11 +4052,33 @@ class Admin
         */\r
        static private function action_adminskindelete()\r
        {\r
-               global $member, $manager, $CONF;\r
+               global $CONF, $member;\r
+               \r
                $member->isAdmin() or self::disallow();\r
                \r
-               /* TODO: needless variable $skinid... */\r
                $skinid = intRequestVar('skinid');\r
+               \r
+               // don't allow default skin to be deleted\r
+               if ( $skinid == $CONF['AdminSkin'] || $skinid == $CONF['BookmarkletSkin'] )\r
+               {\r
+                       self::error(_ERROR_DEFAULTSKIN);\r
+                       return;\r
+               }\r
+               \r
+               /* don't allow if someone use it as a default*/\r
+               $query = 'SELECT * FROM %s WHERE madminskin = %d or mbkmklt = %d;';\r
+               $res = DB::getResult(sprintf($query, sql_table('member'), $skinid, $skinid));\r
+               \r
+               $members = array();\r
+               while ( $row = $res->fetch() ) {\r
+                       $members[] = $row['mrealname'];\r
+               }\r
+               if ( count($members) )\r
+               {\r
+                       self::error(_ERROR_SKINDEFDELETE . implode(' ' . _AND . ' ', $members));\r
+                       return;\r
+               }\r
+               \r
                self::$skin->parse('adminskindelete');\r
                return;\r
        }\r
@@ -4314,25 +4091,24 @@ class Admin
         */\r
        static private function action_adminskindeleteconfirm()\r
        {\r
-               global $member, $CONF, $manager;\r
+               global $member, $CONF;\r
                \r
                $member->isAdmin() or self::disallow();\r
+               \r
                $skinid = intRequestVar('skinid');\r
                \r
                // don't allow default skin to be deleted\r
-               if ( $skinid == $CONF['AdminSkin'] )\r
+               if ( $skinid == $CONF['AdminSkin'] || $skinid == $CONF['BookmarkletSkin'] )\r
                {\r
                        self::error(_ERROR_DEFAULTSKIN);\r
                        return;\r
                }\r
                \r
-               /*\r
-                * TODO: NOT Implemented\r
-                *  don't allow deletion of default skins for members\r
-                */\r
-               $query          = 'SELECT * FROM %s WHERE madminskin = %d or mbkmklt = %d';\r
-               $res            = DB::getResult(sprintf($query, sql_table('member'), $skinid, $skinid));\r
-               $members        = array();\r
+               /* don't allow if someone use it as a default*/\r
+               $query = 'SELECT * FROM %s WHERE madminskin = %d or mbkmklt = %d;';\r
+               $res = DB::getResult(sprintf($query, sql_table('member'), $skinid, $skinid));\r
+               \r
+               $members = array();\r
                while ( $row = $res->fetch() ) {\r
                        $members[] = $row['mrealname'];\r
                }\r
@@ -4342,20 +4118,8 @@ class Admin
                        return;\r
                }\r
                \r
-               $manager->notify('PreDeleteAdminSkin', array('skinid' => (integer) $skinid));\r
-               \r
-               // 1. delete description\r
-               $query = "DELETE FROM %s WHERE sdnumber=%d;";\r
-               $query = sprintf($query, sql_table('skin_desc'), (integer) $skinid);\r
-               DB::execute($query);\r
-               \r
-               // 2. delete parts\r
-               $query = "DELETE FROM %s WHERE sdesc=%d;";\r
-               $query = sprintf($query, sql_table('skin'), (integer) $skinid);\r
+               self::skindeleteconfirm($skinid);\r
                \r
-               DB::execute($query);\r
-               \r
-               $manager->notify('PostDeleteAdminSkin', array('skinid' => (integer) $skinid));\r
                self::action_adminskinoverview();\r
                return;\r
        }\r
@@ -4368,12 +4132,12 @@ class Admin
         */\r
        static private function action_adminskinremovetype()\r
        {\r
-               global $member, $manager, $CONF;\r
+               global $member, $CONF;\r
 \r
                $member->isAdmin() or self::disallow();\r
                \r
-               $skinid         = intRequestVar('skinid');\r
-               $skintype       = requestVar('type');\r
+               $skinid = intRequestVar('skinid');\r
+               $skintype = requestVar('type');\r
                \r
                if ( !isValidShortName($skintype) )\r
                {\r
@@ -4393,36 +4157,20 @@ class Admin
         */\r
        static private function action_adminskinremovetypeconfirm()\r
        {\r
-               global $member, $CONF, $manager;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
-               $skinid         = intRequestVar('skinid');\r
-               $skintype       = requestVar('type');\r
+               $skinid = intRequestVar('skinid');\r
+               $skintype = requestVar('type');\r
                \r
-               if ( !isValidShortName($skintype) )\r
+               $error = self::skinremovetypeconfirm($skinid, $skintype);\r
+               if ( $error )\r
                {\r
-                       self::error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);\r
+                       self::error($error);\r
                        return;\r
                }\r
                \r
-               $data =array(\r
-                       'skinid'        => $skinid,\r
-                       'skintype'      => $skintype\r
-               );\r
-               $manager->notify('PreDeleteAdminSkinPart', $data);\r
-\r
-               // delete part\r
-               $query = 'DELETE FROM %s WHERE sdesc = %d AND stype = %s ;';\r
-               $query = sprintf($query, sql_table('skin'), (integer) $skinid, DB::quoteValue($skintype) );\r
-               DB::execute($query);\r
-               \r
-               $data = array(\r
-                       'skinid'        => $skinid,\r
-                       'skintype'      => $skintype\r
-               );\r
-               $manager->notify('PostDeleteAdminSkinPart', $data);\r
-               \r
                self::action_adminskinedit();\r
                return;\r
        }\r
@@ -4435,71 +4183,19 @@ class Admin
         */\r
        static private function action_adminskinclone()\r
        {\r
-               global $manager, $member;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
                $skinid = intRequestVar('skinid');\r
                \r
-               // 1. read skin to clone\r
-               $skin =& $manager->getSkin($skinid, 'AdminActions', 'AdminSkin');\r
-               $name = "{$skin->getName()}_clone";\r
+               self::skinclone($skinid, 'AdminActions');\r
                \r
-               // if a skin with that name already exists:\r
-               if ( Skin::exists($name) )\r
-               {\r
-                       $i = 1;\r
-                       while ( Skin::exists($name . $i) )\r
-                       {\r
-                               $i++;\r
-                       }\r
-                       $name .= $i;\r
-               }\r
-               \r
-               // 2. create skin desc\r
-               $newid = Skin::createNew(\r
-                       $name,\r
-                       $skin->getDescription(),\r
-                       $skin->getContentType(),\r
-                       $skin->getIncludeMode(),\r
-                       $skin->getIncludePrefix()\r
-               );\r
-               \r
-               // 3. clone\r
-               $query = "SELECT stype FROM %s WHERE sdesc=%d;";\r
-               $query = sprintf($query, sql_table('skin'), (integer) $skinid);\r
-               \r
-               $res = DB::getResult($query);\r
-               foreach ( $res as $row )\r
-               {\r
-                       self::skinclonetype($skin, $newid, $row['stype']);\r
-               }\r
                self::action_adminskinoverview();\r
                return;\r
        }\r
        \r
        /**\r
-        * Admin::adminskinclonetype()\r
-        * \r
-        * @param       string  $skin   an instance of Skin class\r
-        * @param       integer $newid  ID for new skin\r
-        * @param       string  $type   skin type\r
-        * @return      void\r
-        */\r
-       static private function adminskinclonetype($skin, $newid, $type)\r
-       {\r
-               $content = $skin->getContentFromDB($type);\r
-               \r
-               if ( $content )\r
-               {\r
-                       $query = "INSERT INTO %s (sdesc, scontent, stype) VALUES (%d, %s, %s)";\r
-                       $query = sprintf($query, sql_table('skin'), (integer) $newid, DB::quoteValue($content), DB::quoteValue($type));\r
-                       DB::execute($query);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
         * Admin::action_adminskinieoverview()\r
         * \r
         * @param       void\r
@@ -4507,19 +4203,15 @@ class Admin
         */\r
        static private function action_adminskinieoverview()\r
        {\r
-               global $member, $DIR_LIBS, $manager;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
-               // load skinie class\r
-               include_once($DIR_LIBS . 'skinie.php');\r
-               \r
                self::$skin->parse('adminskinieoverview');\r
                return;\r
        }\r
 \r
        /**\r
-        * FIXME: DUPLICATION, NO NEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEED!!!!!!\r
         * Admin::action_adminskinieimport()\r
         * \r
         * @param       void\r
@@ -4527,56 +4219,20 @@ class Admin
         */\r
        static private function action_adminskinieimport()\r
        {\r
-               global $DIR_LIBS, $DIR_SKINS, $manager, $member;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
-               // load skinie class\r
-               include_once($DIR_LIBS . 'skinie.php');\r
-               \r
-               $skinFileRaw    = postVar('skinfile');\r
-               $mode                   = postVar('mode');\r
-               \r
-               $importer = new SKINIMPORT();\r
-               \r
-               // get full filename\r
-               if ( $mode == 'file' )\r
-               {\r
-                       $skinFile = "{$DIR_SKINS}admin/{$skinFileRaw}/skinbackup.xml";\r
-                       \r
-                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)\r
-                       if ( !file_exists($skinFile) )\r
-                       {\r
-                               $skinFile = "{$DIR_SKINS}admin/{$skinFileRaw}/skindata.xml";\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       $skinFile = $skinFileRaw;\r
-               }\r
+               $skinFileRaw = postVar('skinfile');\r
+               $mode = postVar('mode');\r
                \r
-               // read only metadata\r
-               $error = $importer->readFile($skinFile, 1);\r
+               $error = self::skinieimport($mode, $skinFileRaw);\r
                if ( $error )\r
                {\r
                        self::error($error);\r
                        return;\r
                }\r
                \r
-               /* TODO: we should consider to use the other way instead of this */\r
-               $_REQUEST['skininfo']   = $importer->getInfo();\r
-               $_REQUEST['skinnames']  = $importer->getSkinNames();\r
-               $_REQUEST['tpltnames']  = $importer->getTemplateNames();\r
-               \r
-               // clashes\r
-               $skinNameClashes                        = $importer->checkSkinNameClashes();\r
-               $templateNameClashes            = $importer->checkTemplateNameClashes();\r
-               $hasNameClashes                         = (count($skinNameClashes) > 0) || (count($templateNameClashes) > 0);\r
-               /* TODO: we should consider to use the other way instead of this */\r
-               $_REQUEST['skinclashes']        = $skinNameClashes;\r
-               $_REQUEST['tpltclashes']        = $templateNameClashes;\r
-               $_REQUEST['nameclashes']        = $hasNameClashes ? 1 : 0;\r
-\r
                if ( !is_object(self::$skin) )\r
                {\r
                        self::action_adminskiniedoimport();\r
@@ -4589,7 +4245,6 @@ class Admin
        }\r
        \r
        /**\r
-        * FIXME: DUPLICATION, NO NEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEED!!!!!!\r
         * Admin::action_adminskiniedoimport()\r
         * \r
         * @param       void\r
@@ -4597,53 +4252,21 @@ class Admin
         */\r
        static private function action_adminskiniedoimport()\r
        {\r
-               global $DIR_LIBS, $DIR_SKINS, $manager, $member;\r
+               global $DIR_SKINS, $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
-               // load skinie class\r
-               include_once($DIR_LIBS . 'skinie.php');\r
-               \r
-               $skinFileRaw    = postVar('skinfile');\r
-               $mode                   = postVar('mode');\r
+               $mode = postVar('mode');\r
+               $skinFileRaw = postVar('skinfile');\r
                $allowOverwrite = intPostVar('overwrite');\r
                \r
-               // get full filename\r
-               if ( $mode == 'file' )\r
-               {\r
-                       $skinFile = "{$DIR_SKINS}admin/{$skinFileRaw}/skinbackup.xml";\r
-                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)\r
-                       if ( !file_exists($skinFile) )\r
-                       {\r
-                               $skinFile = "{$DIR_SKINS}admin/{$skinFileRaw}/skindata.xml";\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       $skinFile = $skinFileRaw;\r
-               }\r
-               \r
-               $importer = new SKINIMPORT();\r
-               \r
-               $error = $importer->readFile($skinFile);\r
-               if ( $error )\r
-               {\r
-                       self::error($error);\r
-                       return;\r
-               }\r
-               \r
-               $error = $importer->writeToDatabase($allowOverwrite);\r
+               $error = self::skiniedoimport($mode, $skinFileRaw, $allowOverwrite);\r
                if ( $error )\r
                {\r
                        self::error($error);\r
                        return;\r
                }\r
                \r
-               /* TODO: we should consider to use the other way instead of this */\r
-               $_REQUEST['skininfo']   = $importer->getInfo();\r
-               $_REQUEST['skinnames']  = $importer->getSkinNames();\r
-               $_REQUEST['tpltnames']  = $importer->getTemplateNames();\r
-               \r
                if ( !is_object(self::$skin) )\r
                {\r
                        global $DIR_SKINS;\r
@@ -4671,38 +4294,17 @@ class Admin
         */\r
        static private function action_adminskinieexport()\r
        {\r
-               global $member, $DIR_PLUGINS;\r
+               global $member;\r
                \r
                $member->isAdmin() or self::disallow();\r
                \r
                // load skinie class\r
                $aSkins = requestIntArray('skin');\r
-               if (!is_array($aSkins)) {\r
-                       $aSkins = array();\r
-               }\r
-               $skinList = array_keys($aSkins);\r
-               \r
                $aTemplates = requestIntArray('template');\r
-               if (!is_array($aTemplates))\r
-               {\r
-                       $aTemplates = array();\r
-               }\r
-               $templateList = array_keys($aTemplates);\r
-               \r
                $info = postVar('info');\r
                \r
-               include_libs('skinie.php');\r
-               $exporter = new SkinExport();\r
-               foreach ( $skinList as $skinId )\r
-               {\r
-                       $exporter->addSkin($skinId);\r
-               }\r
-               foreach ( $templateList as $templateId )\r
-               {\r
-                       $exporter->addTemplate($templateId);\r
-               }\r
-               $exporter->setInfo($info);\r
-               $exporter->export();\r
+               self::skinieexport($aSkins, $aTemplates, $info);\r
+               \r
                return;\r
        }\r
        \r
@@ -5650,6 +5252,327 @@ class Admin
        }\r
        \r
        /**\r
+        * Admin::skineditgeneral()\r
+        * \r
+        * @param       integer $skinid\r
+        * @param       string  $handler\r
+        * @return      string  empty or message if failed\r
+        */\r
+       static private function skineditgeneral($skinid, $handler='')\r
+       {\r
+               $name = postVar('name');\r
+               $desc = postVar('desc');\r
+               $type = postVar('type');\r
+               $inc_mode = postVar('inc_mode');\r
+               $inc_prefix = postVar('inc_prefix');\r
+               \r
+               $skin =& $manager->getSkin($skinid, $handler);\r
+               \r
+               // 1. Some checks\r
+               if ( !isValidSkinName($name) )\r
+               {\r
+                       return _ERROR_BADSKINNAME;\r
+               }\r
+               \r
+               if ( ($skin->getName() != $name) && SKIN::exists($name) )\r
+               {\r
+                       return _ERROR_DUPSKINNAME;\r
+               }\r
+               \r
+               if ( !$type )\r
+               {\r
+                       $type = 'text/html';\r
+               }\r
+               \r
+               if ( !$inc_mode )\r
+               {\r
+                       $inc_mode = 'normal';\r
+               }\r
+               \r
+               // 2. Update description\r
+               $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix);\r
+               \r
+               return '';\r
+       }\r
+       /**\r
+        * Admin::skindeleteconfirm()\r
+        * \r
+        * @param       integer $skinid\r
+        * @return      void\r
+        */\r
+       static private function skindeleteconfirm($skinid)\r
+       {\r
+               global $manager;\r
+               \r
+               if ( !preg_match('#^admin/#', self::$action) )\r
+               {\r
+                       $event_identifier = 'Skin';\r
+               }\r
+               else\r
+               {\r
+                       $event_identifier = 'AdminSkin';\r
+               }\r
+               \r
+               $manager->notify("PreDelete{$event_identifier}", array('skinid' => $skinid));\r
+               \r
+               // 1. delete description\r
+               $query = "DELETE FROM %s WHERE sdnumber=%d;";\r
+               $query = sprintf($query, sql_table('skin_desc'), (integer) $skinid);\r
+               DB::execute($query);\r
+               \r
+               // 2. delete parts\r
+               $query = "DELETE FROM %s WHERE sdesc=%d;";\r
+               $query = sprintf($query, sql_table('skin'), (integer) $skinid);\r
+               DB::execute($query);\r
+               \r
+               $manager->notify("PostDelete{$event_identifier}", array('skinid' => $skinid));\r
+               \r
+               return;\r
+       }\r
+       \r
+       /**\r
+        * Admin::skinremovetypeconfirm()\r
+        * \r
+        * @param       integer $skinid\r
+        * @param       string  $skintype\r
+        * @return      string  empty or message if failed\r
+        */\r
+       static private function skinremovetypeconfirm($skinid, $skintype)\r
+       {\r
+               if ( !preg_match('#^admin/#', self::$action) )\r
+               {\r
+                       $event_identifier = 'Skin';\r
+               }\r
+               else\r
+               {\r
+                       $event_identifier = 'AdminSkin';\r
+               }\r
+               \r
+               if ( !isValidShortName($skintype) )\r
+               {\r
+                       return _ERROR_SKIN_PARTS_SPECIAL_DELETE;\r
+               }\r
+               \r
+               $data =array(\r
+                       'skinid'        => $skinid,\r
+                       'skintype'      => $skintype\r
+               );\r
+               $manager->notify("PreDelete{$event_identifier}Part", $data);\r
+               \r
+               // delete part\r
+               $query = 'DELETE FROM %s WHERE sdesc = %d AND stype = %s;';\r
+               $query = sprintf($query, sql_table('skin'), (integer) $skinid, DB::quoteValue($skintype) );\r
+               DB::execute($query);\r
+               \r
+               $data = array(\r
+                       'skinid'        => $skinid,\r
+                       'skintype'      => $skintype\r
+               );\r
+               $manager->notify("PostDelete{$event_identifier}Part", $data);\r
+               \r
+               return '';\r
+       }\r
+       \r
+       /**\r
+        * Admin::skinclone()\r
+        * \r
+        * @param       integer $skinid\r
+        * @param       string  $handler\r
+        * @return      void\r
+        */\r
+       static private function skinclone($skinid, $handler='')\r
+       {\r
+               global $manager;\r
+               \r
+               // 1. read skin to clone\r
+               $skin =& $manager->getSkin($skinid, $handler);\r
+               $name = "{$skin->getName()}_clone";\r
+               \r
+               // if a skin with that name already exists:\r
+               if ( Skin::exists($name) )\r
+               {\r
+                       $i = 1;\r
+                       while ( Skin::exists($name . $i) )\r
+                       {\r
+                               $i++;\r
+                       }\r
+                       $name .= $i;\r
+               }\r
+               \r
+               // 2. create skin desc\r
+               $newid = Skin::createNew(\r
+                       $name,\r
+                       $skin->getDescription(),\r
+                       $skin->getContentType(),\r
+                       $skin->getIncludeMode(),\r
+                       $skin->getIncludePrefix()\r
+               );\r
+               \r
+               // 3. clone\r
+               $query = "SELECT stype FROM %s WHERE sdesc=%d;";\r
+               $query = sprintf($query, sql_table('skin'), (integer) $skinid);\r
+               \r
+               $res = DB::getResult($query);\r
+               foreach ( $res as $row )\r
+               {\r
+                       $content = $skin->getContentFromDB($row['stype']);\r
+                       if ( $content )\r
+                       {\r
+                               $query = "INSERT INTO %s (sdesc, scontent, stype) VALUES (%d, %s, %s)";\r
+                               $query = sprintf($query, sql_table('skin'), (integer) $newid, DB::quoteValue($content), DB::quoteValue($type));\r
+                               DB::execute($query);\r
+                       }\r
+               }\r
+               return;\r
+       }\r
+       \r
+       /**\r
+        * Admin::skinieimport()\r
+        * \r
+        * @param       string  $mode\r
+        * @param       string  $skinFileRaw\r
+        * @return      string  empty or message if failed\r
+        */\r
+       static private function skinieimport($mode, $skinFileRaw)\r
+       {\r
+               global $DIR_LIBS, $DIR_SKINS;\r
+               \r
+               // load skinie class\r
+               include_once($DIR_LIBS . 'skinie.php');\r
+               \r
+               $importer = new SkinImport();\r
+               \r
+               // get full filename\r
+               if ( $mode == 'file' )\r
+               {\r
+                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
+               }\r
+               else\r
+               {\r
+                       $skinFile = $skinFileRaw;\r
+               }\r
+               \r
+               // read only metadata\r
+               $error = $importer->readFile($skinFile, 1);\r
+               if ( $error )\r
+               {\r
+                       unset($importer);\r
+                       return $error;\r
+               }\r
+               \r
+               /* TODO: we should consider to use the other way insterad of this */\r
+               $_REQUEST['skininfo']   = $importer->getInfo();\r
+               $_REQUEST['skinnames']  = $importer->getSkinNames();\r
+               $_REQUEST['tpltnames']  = $importer->getTemplateNames();\r
+               \r
+               // clashes\r
+               $skinNameClashes                = $importer->checkSkinNameClashes();\r
+               $templateNameClashes    = $importer->checkTemplateNameClashes();\r
+               $hasNameClashes                 = (count($skinNameClashes) > 0) || (count($templateNameClashes) > 0);\r
+               \r
+               /* TODO: we should consider to use the other way insterad of this */\r
+               $_REQUEST['skinclashes'] = $skinNameClashes;\r
+               $_REQUEST['tpltclashes'] = $templateNameClashes;\r
+               $_REQUEST['nameclashes'] = $hasNameClashes ? 1 : 0;\r
+               \r
+               unset($importer);\r
+               return '';\r
+       }\r
+       \r
+       /**\r
+        * Admin::skinieedoimport()\r
+        * \r
+        * @param       string  $mode\r
+        * @param       string  $skinFileRaw\r
+        * @param       boolean $allowOverwrite\r
+        * @return      string  empty   or message if failed\r
+        */\r
+       static private function skiniedoimport($mode, $skinFileRaw, $allowOverwrite)\r
+       {\r
+               global $DIR_LIBS, $DIR_SKINS;\r
+               \r
+               // load skinie class\r
+               include_once($DIR_LIBS . 'skinie.php');\r
+               \r
+               $importer = new SkinImport();\r
+               \r
+               // get full filename\r
+               if ( $mode == 'file' )\r
+               {\r
+                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
+               }\r
+               else\r
+               {\r
+                       $skinFile = $skinFileRaw;\r
+               }\r
+               \r
+               $error = $importer->readFile($skinFile);\r
+               if ( $error )\r
+               {\r
+                       unset($importer);\r
+                       return $error;\r
+               }\r
+               \r
+               $error = $importer->writeToDatabase($allowOverwrite);\r
+               if ( $error )\r
+               {\r
+                       unset($importer);\r
+                       return $error;\r
+               }\r
+               \r
+               /* TODO: we should consider to use the other way insterad of this */\r
+               $_REQUEST['skininfo']  = $importer->getInfo();\r
+               $_REQUEST['skinnames'] = $importer->getSkinNames();\r
+               $_REQUEST['tpltnames'] = $importer->getTemplateNames();\r
+               \r
+               unset($importer);\r
+               return '';\r
+       }\r
+       \r
+       /**\r
+        * Admin::skinieexport()\r
+        * \r
+        * @param       array   $aSkins\r
+        * @param       array   $aTemplates\r
+        * @param       string  $info\r
+        * @return      void\r
+        */\r
+       static private function skinieexport($aSkins, $aTemplates, $info)\r
+       {\r
+               global $DIR_LIBS;\r
+               \r
+               // load skinie class\r
+               include_once($DIR_LIBS . 'skinie.php');\r
+               \r
+               if ( !is_array($aSkins) )\r
+               {\r
+                       $aSkins = array();\r
+               }\r
+               \r
+               if (!is_array($aTemplates))\r
+               {\r
+                       $aTemplates = array();\r
+               }\r
+               \r
+               $skinList = array_keys($aSkins);\r
+               $templateList = array_keys($aTemplates);\r
+               \r
+               $exporter = new SkinExport();\r
+               foreach ( $skinList as $skinId )\r
+               {\r
+                       $exporter->addSkin($skinId);\r
+               }\r
+               foreach ( $templateList as $templateId )\r
+               {\r
+                       $exporter->addTemplate($templateId);\r
+               }\r
+               $exporter->setInfo($info);\r
+               $exporter->export();\r
+               \r
+               return;\r
+       }\r
+       \r
+       /**\r
         * Admin::action_parseSpecialskin()\r
         * \r
         * @param       void\r
@@ -5778,9 +5701,9 @@ class Admin
                $member->isAdmin() or self::disallow();\r
                \r
                include_once($DIR_LIBS . 'Skinie.php');\r
-               $skinFileRaw    = postVar('skinfile');\r
-               $mode                   = postVar('mode');\r
-               $allowOverwrite = intPostVar('overwrite');\r
+               $skinFileRaw = postVar('skinfile');\r
+               $mode = postVar('mode');\r
+               $allowOverwrite = intPostVar('overwrite');\r
                \r
                if ( $mode == 'file' )\r
                {\r
index 4977d78..c3f2da1 100644 (file)
@@ -1974,7 +1974,7 @@ class AdminActions extends BaseActions
                }
                
                $template['tabindex'] = 10;
-               $template['skinid'] = $skin->getID();
+               $template['skinid'] = intRequestVar('skinid');
                $template['skinname'] = $skin->getName();
                $this->parser->parse(showlist($normal_skintype, 'list_normalskinlist', $template, $template_name));
                
@@ -4033,7 +4033,7 @@ class AdminActions extends BaseActions
                {
                        include_libs('skinie.php');
                }
-
+               
                if ( !preg_match('#^admin#', $this->skintype) && $this->skintype != 'importAdmin' )
                {
                        $skindir = $DIR_SKINS;
@@ -4046,8 +4046,15 @@ class AdminActions extends BaseActions
                $candidates = SkinImport::searchForCandidates($skindir);
                foreach ( $candidates as $skinname => $skinfile )
                {
-                       $skinfile = Entity::hsc($skinfile);
                        $skinname = Entity::hsc($skinname);
+                       if ( !preg_match('#^admin#', $this->skintype) && $this->skintype != 'importAdmin' )
+                       {
+                               $skinfile = Entity::hsc($skinfile);
+                       }
+                       else
+                       {
+                               $skinfile = Entity::hsc("admin/$skinfile");
+                       }
                        echo "<option value=\"{$skinfile}\">{$skinname}</option>\n";
                }