Ignore:
Timestamp:
2011/11/26 12:15:56 (12 years ago)
Author:
Seasoft
Message:

#1324 (LC_Page_Admin_Products_Category をカスタマイズしやすくする)
#1565 (カテゴリ名の重複チェックで論理削除を考慮していない)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php

    r21317 r21356  
    8282        // カテゴリ登録/編集実行 
    8383        case 'edit': 
    84             $category_id = $objFormParam->getValue('category_id'); 
    85             if ($category_id == '') { 
    86                 $this->doRegister($objFormParam); 
    87             } else { 
    88                 $this->doEdit($objFormParam); 
     84            $this->doEdit($objFormParam); 
     85            // エラーがあるときは入力値の再表示 
     86            if (!empty($this->arrErr)) { 
     87                $this->arrForm = $objFormParam->getHashArray(); 
    8988            } 
    9089            break; 
     
    105104            $this->doDown($objFormParam); 
    106105            break; 
    107         // XXX 使われていないコード? 
     106        // FIXME r19909 によってテンプレートが削除されている 
    108107        case 'moveByDnD': 
    109108            // DnDしたカテゴリと移動先のセットを分解する 
     
    241240        // 編集対象のカテゴリ名をDBより取得する 
    242241        $where = "category_id = ?"; 
    243         $category_name = $objQuery->get("category_name", "dtb_category", $where, array($category_id)); 
    244  
    245         // 入力ボックスへカテゴリ名を保持する. 
    246         $this->arrForm['category_name'] = $category_name; 
    247         // カテゴリIDを保持する. 
    248         $this->arrForm['category_id']   = $category_id; 
    249     } 
    250  
    251     /** 
    252      * カテゴリの編集を実行する. 
    253      * 
    254      * 下記の場合は, 編集を実行せず、エラーメッセージを表示する 
     242        $arrRes = $objQuery->getRow("*", "dtb_category", $where, array($category_id)); 
     243 
     244        $objFormParam->setParam($arrRes); 
     245 
     246        $this->arrForm = $objFormParam->getHashArray(); 
     247    } 
     248 
     249    /** 
     250     * カテゴリの登録・編集を実行する. 
     251     * 
     252     * 下記の場合は, 登録・編集を実行せず、エラーメッセージを表示する 
    255253     * 
    256254     * - カテゴリ名がすでに使用されている場合 
     255     * - 階層登録数の上限を超える場合 (登録時のみ評価) 
     256     * - カテゴリ名がすでに使用されている場合 (登録時のみ評価) 
    257257     * 
    258258     * @param SC_FormParam $objFormParam 
     
    260260     */ 
    261261    function doEdit(&$objFormParam) { 
     262        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     263 
    262264        // 入力項目チェック 
    263265        $arrErr = $objFormParam->checkError(); 
    264266        if (count($arrErr) > 0) { 
    265267            $this->arrErr = $arrErr; 
    266             $this->arrForm['category_id']   = $objFormParam->getValue('category_id'); 
    267             $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
    268268            return; 
    269269        } 
    270270 
     271        $category_id = $objFormParam->getValue('category_id'); 
     272        $parent_category_id = $objFormParam->getValue('parent_category_id'); 
     273        $category_name = $objFormParam->getValue('category_name'); 
     274 
     275        // 追加か 
     276        $add = strlen($category_id) === 0; 
     277 
     278        // 追加の場合に固有のチェック 
     279        if ($add) { 
     280            // 登録数上限チェック 
     281            $where = "del_flg = 0"; 
     282            $count = $objQuery->count("dtb_category", $where); 
     283            if ($count >= CATEGORY_MAX) { 
     284                $this->arrErr['category_name']  = "※ カテゴリの登録最大数を超えました。<br/>"; 
     285                return; 
     286            } 
     287 
     288            // 階層上限チェック 
     289            if ($this->isOverLevel($parent_category_id)) { 
     290                $this->arrErr['category_name']  = "※ " . LEVEL_MAX . "階層以上の登録はできません。<br/>"; 
     291                return; 
     292            } 
     293        } 
     294 
    271295        // 重複チェック 
    272         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    273         $where = "parent_category_id = ? AND category_id <> ? AND category_name = ?"; 
    274         $count = $objQuery->count("dtb_category", 
    275                                   $where, 
    276                                   array($objFormParam->getValue('parent_category_id'), 
    277                                         $objFormParam->getValue('category_id'), 
    278                                         $objFormParam->getValue('category_name'))); 
     296        $arrWhereVal = array(); 
     297        $where = 'del_flg = 0 AND parent_category_id = ? AND category_name = ?'; 
     298        $arrWhereVal[] = $parent_category_id; 
     299        $arrWhereVal[] = $category_name; 
     300        // 更新の場合、抽出対象から自己を除外する 
     301        if (!$add) { 
     302            $where .= ' AND category_id <> ?'; 
     303            $arrWhereVal[] = $category_id; 
     304        } 
     305        $count = $objQuery->count('dtb_category', $where, $arrWhereVal); 
    279306        if ($count > 0) { 
    280307            $this->arrErr['category_name']  = "※ 既に同じ内容の登録が存在します。<br/>"; 
    281             $this->arrForm['category_id']   = $objFormParam->getValue('category_id'); 
    282             $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
    283308            return; 
    284309        } 
    285310 
    286         // カテゴリ更新 
    287         $arrCategory = array(); 
    288         $arrCategory['category_name'] = $objFormParam->getValue('category_name'); 
    289         $arrCategory['update_date']   = 'CURRENT_TIMESTAMP'; 
    290         $this->updateCategory($objFormParam->getValue('category_id'), $arrCategory); 
    291     } 
    292  
    293     /** 
    294      * カテゴリの登録を実行する. 
    295      * 
    296      * 下記の場合は, 登録を実行せず、エラーメッセージを表示する 
    297      * 
    298      * - カテゴリ登録数の上限を超える場合 
    299      * - 階層登録数の上限を超える場合 
    300      * - カテゴリ名がすでに使用されている場合 
    301      * 
    302      * @param SC_FormParam $objFormParam 
    303      * @return void 
    304      */ 
    305     function doRegister(&$objFormParam) { 
    306         // 入力項目チェック 
    307         $arrErr = $objFormParam->checkError(); 
    308         if (count($arrErr) > 0) { 
    309             $this->arrErr = $arrErr; 
    310             $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
    311             return; 
    312         } 
    313  
    314         // 登録数上限チェック 
    315         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    316         $where = "del_flg = 0"; 
    317         $count = $objQuery->count("dtb_category", $where); 
    318         if ($count >= CATEGORY_MAX) { 
    319             $this->arrErr['category_name']  = "※ カテゴリの登録最大数を超えました。<br/>"; 
    320             $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
    321             return; 
    322         } 
    323  
    324         // 階層上限チェック 
    325         if ($this->isOverLevel($objFormParam->getValue('parent_category_id'))) { 
    326             $this->arrErr['category_name']  = "※ " . LEVEL_MAX . "階層以上の登録はできません。<br/>"; 
    327             $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
    328             return; 
    329         } 
    330  
    331         // 重複チェック 
    332         $where = "parent_category_id = ? AND category_name = ?"; 
    333         $count = $objQuery->count("dtb_category", 
    334                                   $where, 
    335                                   array($objFormParam->getValue('parent_category_id'), 
    336                                         $objFormParam->getValue('category_name'))); 
    337         if ($count > 0) { 
    338             $this->arrErr['category_name']  = "※ 既に同じ内容の登録が存在します。<br/>"; 
    339             $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
    340             return; 
    341         } 
    342  
    343         // カテゴリ登録 
    344         $this->registerCategory($objFormParam->getValue('parent_category_id'), 
    345                                 $objFormParam->getValue('category_name'), 
    346                                 $_SESSION['member_id']); 
     311        $arrCategory = $objFormParam->getDbArray(); 
     312 
     313        // 追加 
     314        if ($add) { 
     315            $this->registerCategory($arrCategory); 
     316        } 
     317        // 更新 
     318        else { 
     319            unset($arrCategory['category_id']); 
     320            $this->updateCategory($category_id, $arrCategory); 
     321        } 
    347322    } 
    348323 
     
    437412     * カテゴリを更新する 
    438413     * 
    439      * @param integer $category_id 更新対象のカテゴリID 
    440      * @param array 更新する カラム名 => 値 の連想配列 
     414     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
    441415     * @return void 
    442416     */ 
    443417    function updateCategory($category_id, $arrCategory) { 
    444418        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     419 
     420        $arrCategory['update_date']   = 'CURRENT_TIMESTAMP'; 
     421 
    445422        $objQuery->begin(); 
    446423        $where = "category_id = ?"; 
     
    452429     * カテゴリを登録する 
    453430     * 
    454      * @param integer 親カテゴリID 
    455      * @param string カテゴリ名 
    456      * @param integer 作成者のID 
    457      * @return void 
    458      */ 
    459     function registerCategory($parent_category_id, $category_name, $creator_id) { 
    460         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     431     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     432     * @return void 
     433     */ 
     434    function registerCategory($arrCategory) { 
     435        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     436 
     437        $parent_category_id = $arrCategory['parent_category_id']; 
     438 
    461439        $objQuery->begin(); 
    462440 
     
    479457        $level = $objQuery->get('level', "dtb_category", $where, array($parent_category_id)) + 1; 
    480458 
    481         $arrCategory = array(); 
    482         $arrCategory['category_name'] = $category_name; 
    483         $arrCategory['parent_category_id'] = $parent_category_id; 
    484459        $arrCategory['create_date'] = 'CURRENT_TIMESTAMP'; 
    485460        $arrCategory['update_date'] = 'CURRENT_TIMESTAMP'; 
    486         $arrCategory['creator_id']  = $creator_id; 
     461        $arrCategory['creator_id']  = $_SESSION['member_id']; 
    487462        $arrCategory['rank']        = $rank; 
    488463        $arrCategory['level']       = $level; 
    489464        $arrCategory['category_id'] = $objQuery->nextVal('dtb_category_category_id'); 
     465 
    490466        $objQuery->insert("dtb_category", $arrCategory); 
    491467 
Note: See TracChangeset for help on using the changeset viewer.