Index: /branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
===================================================================
--- /branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php	(revision 21317)
+++ /branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php	(revision 21356)
@@ -82,9 +82,8 @@
         // カテゴリ登録/編集実行
         case 'edit':
-            $category_id = $objFormParam->getValue('category_id');
-            if ($category_id == '') {
-                $this->doRegister($objFormParam);
-            } else {
-                $this->doEdit($objFormParam);
+            $this->doEdit($objFormParam);
+            // エラーがあるときは入力値の再表示
+            if (!empty($this->arrErr)) {
+                $this->arrForm = $objFormParam->getHashArray();
             }
             break;
@@ -105,5 +104,5 @@
             $this->doDown($objFormParam);
             break;
-        // XXX 使われていないコード？
+        // FIXME r19909 によってテンプレートが削除されている
         case 'moveByDnD':
             // DnDしたカテゴリと移動先のセットを分解する
@@ -241,18 +240,19 @@
         // 編集対象のカテゴリ名をDBより取得する
         $where = "category_id = ?";
-        $category_name = $objQuery->get("category_name", "dtb_category", $where, array($category_id));
-
-        // 入力ボックスへカテゴリ名を保持する.
-        $this->arrForm['category_name'] = $category_name;
-        // カテゴリIDを保持する.
-        $this->arrForm['category_id']   = $category_id;
-    }
-
-    /**
-     * カテゴリの編集を実行する.
-     *
-     * 下記の場合は, 編集を実行せず、エラーメッセージを表示する
+        $arrRes = $objQuery->getRow("*", "dtb_category", $where, array($category_id));
+
+        $objFormParam->setParam($arrRes);
+
+        $this->arrForm = $objFormParam->getHashArray();
+    }
+
+    /**
+     * カテゴリの登録・編集を実行する.
+     *
+     * 下記の場合は, 登録・編集を実行せず、エラーメッセージを表示する
      *
      * - カテゴリ名がすでに使用されている場合
+     * - 階層登録数の上限を超える場合 (登録時のみ評価)
+     * - カテゴリ名がすでに使用されている場合 (登録時のみ評価)
      *
      * @param SC_FormParam $objFormParam
@@ -260,89 +260,64 @@
      */
     function doEdit(&$objFormParam) {
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+
         // 入力項目チェック
         $arrErr = $objFormParam->checkError();
         if (count($arrErr) > 0) {
             $this->arrErr = $arrErr;
-            $this->arrForm['category_id']   = $objFormParam->getValue('category_id');
-            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
             return;
         }
 
+        $category_id = $objFormParam->getValue('category_id');
+        $parent_category_id = $objFormParam->getValue('parent_category_id');
+        $category_name = $objFormParam->getValue('category_name');
+
+        // 追加か
+        $add = strlen($category_id) === 0;
+
+        // 追加の場合に固有のチェック
+        if ($add) {
+            // 登録数上限チェック
+            $where = "del_flg = 0";
+            $count = $objQuery->count("dtb_category", $where);
+            if ($count >= CATEGORY_MAX) {
+                $this->arrErr['category_name']  = "※ カテゴリの登録最大数を超えました。<br/>";
+                return;
+            }
+
+            // 階層上限チェック
+            if ($this->isOverLevel($parent_category_id)) {
+                $this->arrErr['category_name']  = "※ " . LEVEL_MAX . "階層以上の登録はできません。<br/>";
+                return;
+            }
+        }
+
         // 重複チェック
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
-        $where = "parent_category_id = ? AND category_id <> ? AND category_name = ?";
-        $count = $objQuery->count("dtb_category",
-                                  $where,
-                                  array($objFormParam->getValue('parent_category_id'),
-                                        $objFormParam->getValue('category_id'),
-                                        $objFormParam->getValue('category_name')));
+        $arrWhereVal = array();
+        $where = 'del_flg = 0 AND parent_category_id = ? AND category_name = ?';
+        $arrWhereVal[] = $parent_category_id;
+        $arrWhereVal[] = $category_name;
+        // 更新の場合、抽出対象から自己を除外する
+        if (!$add) {
+            $where .= ' AND category_id <> ?';
+            $arrWhereVal[] = $category_id;
+        }
+        $count = $objQuery->count('dtb_category', $where, $arrWhereVal);
         if ($count > 0) {
             $this->arrErr['category_name']  = "※ 既に同じ内容の登録が存在します。<br/>";
-            $this->arrForm['category_id']   = $objFormParam->getValue('category_id');
-            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
             return;
         }
 
-        // カテゴリ更新
-        $arrCategory = array();
-        $arrCategory['category_name'] = $objFormParam->getValue('category_name');
-        $arrCategory['update_date']   = 'CURRENT_TIMESTAMP';
-        $this->updateCategory($objFormParam->getValue('category_id'), $arrCategory);
-    }
-
-    /**
-     * カテゴリの登録を実行する.
-     *
-     * 下記の場合は, 登録を実行せず、エラーメッセージを表示する
-     *
-     * - カテゴリ登録数の上限を超える場合
-     * - 階層登録数の上限を超える場合
-     * - カテゴリ名がすでに使用されている場合
-     *
-     * @param SC_FormParam $objFormParam
-     * @return void
-     */
-    function doRegister(&$objFormParam) {
-        // 入力項目チェック
-        $arrErr = $objFormParam->checkError();
-        if (count($arrErr) > 0) {
-            $this->arrErr = $arrErr;
-            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
-            return;
-        }
-
-        // 登録数上限チェック
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
-        $where = "del_flg = 0";
-        $count = $objQuery->count("dtb_category", $where);
-        if ($count >= CATEGORY_MAX) {
-            $this->arrErr['category_name']  = "※ カテゴリの登録最大数を超えました。<br/>";
-            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
-            return;
-        }
-
-        // 階層上限チェック
-        if ($this->isOverLevel($objFormParam->getValue('parent_category_id'))) {
-            $this->arrErr['category_name']  = "※ " . LEVEL_MAX . "階層以上の登録はできません。<br/>";
-            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
-            return;
-        }
-
-        // 重複チェック
-        $where = "parent_category_id = ? AND category_name = ?";
-        $count = $objQuery->count("dtb_category",
-                                  $where,
-                                  array($objFormParam->getValue('parent_category_id'),
-                                        $objFormParam->getValue('category_name')));
-        if ($count > 0) {
-            $this->arrErr['category_name']  = "※ 既に同じ内容の登録が存在します。<br/>";
-            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
-            return;
-        }
-
-        // カテゴリ登録
-        $this->registerCategory($objFormParam->getValue('parent_category_id'),
-                                $objFormParam->getValue('category_name'),
-                                $_SESSION['member_id']);
+        $arrCategory = $objFormParam->getDbArray();
+
+        // 追加
+        if ($add) {
+            $this->registerCategory($arrCategory);
+        }
+        // 更新
+        else {
+            unset($arrCategory['category_id']);
+            $this->updateCategory($category_id, $arrCategory);
+        }
     }
 
@@ -437,10 +412,12 @@
      * カテゴリを更新する
      *
-     * @param integer $category_id 更新対象のカテゴリID
-     * @param array 更新する カラム名 => 値 の連想配列
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
      * @return void
      */
     function updateCategory($category_id, $arrCategory) {
         $objQuery =& SC_Query_Ex::getSingletonInstance();
+
+        $arrCategory['update_date']   = 'CURRENT_TIMESTAMP';
+
         $objQuery->begin();
         $where = "category_id = ?";
@@ -452,11 +429,12 @@
      * カテゴリを登録する
      *
-     * @param integer 親カテゴリID
-     * @param string カテゴリ名
-     * @param integer 作成者のID
-     * @return void
-     */
-    function registerCategory($parent_category_id, $category_name, $creator_id) {
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @return void
+     */
+    function registerCategory($arrCategory) {
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+
+        $parent_category_id = $arrCategory['parent_category_id'];
+
         $objQuery->begin();
 
@@ -479,13 +457,11 @@
         $level = $objQuery->get('level', "dtb_category", $where, array($parent_category_id)) + 1;
 
-        $arrCategory = array();
-        $arrCategory['category_name'] = $category_name;
-        $arrCategory['parent_category_id'] = $parent_category_id;
         $arrCategory['create_date'] = 'CURRENT_TIMESTAMP';
         $arrCategory['update_date'] = 'CURRENT_TIMESTAMP';
-        $arrCategory['creator_id']  = $creator_id;
+        $arrCategory['creator_id']  = $_SESSION['member_id'];
         $arrCategory['rank']        = $rank;
         $arrCategory['level']       = $level;
         $arrCategory['category_id'] = $objQuery->nextVal('dtb_category_category_id');
+
         $objQuery->insert("dtb_category", $arrCategory);
 
