Changeset 20210


Ignore:
Timestamp:
2011/02/19 21:48:28 (13 years ago)
Author:
adachi
Message:

#1010 カテゴリ登録リファクタリング

File:
1 edited

Legend:

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

    r20116 r20210  
    2424// {{{ requires 
    2525require_once(CLASS_REALDIR . "pages/admin/LC_Page_Admin.php"); 
     26require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php"); 
    2627 
    2728/** 
     
    3637    // {{{ properties 
    3738 
    38     /** フォームパラメータ */ 
    39     var $objFormParam; 
    40  
    4139    // }}} 
    4240    // {{{ functions 
     
    5149        $this->tpl_subtitle = 'カテゴリー登録'; 
    5250        $this->tpl_mainpage = 'products/category.tpl'; 
    53         $this->tpl_subnavi = 'products/subnavi.tpl'; 
     51        $this->tpl_subnavi  = 'products/subnavi.tpl'; 
    5452        $this->tpl_mainno = 'products'; 
    55         $this->tpl_subno = 'category'; 
     53        $this->tpl_subno  = 'category'; 
    5654        $this->tpl_onload = " fnSetFocus('category_name'); "; 
    5755    } 
     
    7371     */ 
    7472    function action() { 
    75         $objSess = new SC_Session(); 
    76         $objDb = new SC_Helper_DB_Ex(); 
     73        $objSession = new SC_Session(); 
     74        $objDb      = new SC_Helper_DB_Ex(); 
     75        $objFormParam = new SC_FormParam(); 
    7776 
    7877        // 認証可否の判定 
    79         SC_Utils_Ex::sfIsSuccess($objSess); 
    80  
    81         // パラメータ管理クラス 
    82         $this->objFormParam = new SC_FormParam(); 
    83         // パラメータ情報の初期化 
    84         $this->lfInitParam(); 
    85         // POST値の取得 
    86         $this->objFormParam->setParam($_POST); 
    87  
    88         // 通常時は親カテゴリを0に設定する。 
    89         $this->arrForm['parent_category_id'] = 
    90             isset($_POST['parent_category_id']) ? $_POST['parent_category_id'] : ""; 
     78        SC_Utils_Ex::sfIsSuccess($objSession); 
     79         
     80        // 入力パラメータ初期化 
     81        $this->initParam($objFormParam); 
     82        $objFormParam->setParam($_POST); 
     83        $objFormParam->convParam(); 
    9184 
    9285        switch($this->getMode()) { 
     86        // カテゴリ登録/編集実行 
    9387        case 'edit': 
    94             $this->objFormParam->convParam(); 
    95             $arrRet =  $this->objFormParam->getHashArray(); 
    96             $this->arrErr = $this->lfCheckError($arrRet); 
    97  
    98             if(count($this->arrErr) == 0) { 
    99                 if($_POST['category_id'] == "") { 
    100                     $objQuery = new SC_Query(); 
    101                     $count = $objQuery->count("dtb_category"); 
    102                     if($count < CATEGORY_MAX) { 
    103                         $this->lfInsertCat($_POST['parent_category_id']); 
    104                     } else { 
    105                         print("カテゴリの登録最大数を超えました。"); 
    106                     } 
    107                 } else { 
    108                     $this->lfUpdateCat($_POST['category_id']); 
    109                 } 
     88            $category_id = $objFormParam->getValue('category_id'); 
     89            if ($category_id == '') { 
     90                $this->doRegister($objFormParam); 
    11091            } else { 
    111                 $this->arrForm = array_merge($this->arrForm, $this->objFormParam->getHashArray()); 
    112                 $this->arrForm['category_id'] = $_POST['category_id']; 
     92                $this->doEdit($objFormParam); 
    11393            } 
    11494            break; 
     95        // 入力ボックスへ編集対象のカテゴリ名をセット 
    11596        case 'pre_edit': 
    116             // 編集項目のカテゴリ名をDBより取得する。 
    117             $objQuery = new SC_Query(); 
    118             $where = "category_id = ?"; 
    119             $cat_name = $objQuery->get("category_name", "dtb_category", $where, array($_POST['category_id'])); 
    120             // 入力項目にカテゴリ名を入力する。 
    121             $this->arrForm['category_name'] = $cat_name; 
    122             // POSTデータを引き継ぐ 
    123             $this->arrForm['category_id'] = $_POST['category_id']; 
    124             break; 
     97            $this->doPreEdit($objFormParam); 
     98            break; 
     99        // カテゴリ削除 
    125100        case 'delete': 
    126             $objQuery = new SC_Query(); 
    127             // 子カテゴリのチェック 
    128             $where = "parent_category_id = ? AND del_flg = 0"; 
    129             $count = $objQuery->count("dtb_category", $where, array($_POST['category_id'])); 
    130             if($count != 0) { 
    131                 $this->arrErr['category_name'] = "※ 子カテゴリが存在するため削除できません。<br>"; 
    132             } 
    133             // 登録商品のチェック 
    134             $table = "dtb_product_categories AS T1 LEFT JOIN dtb_products AS T2 ON T1.product_id = T2.product_id"; 
    135             $where = "T1.category_id = ? AND T2.del_flg = 0"; 
    136             $count = $objQuery->count($table, $where, array($_POST['category_id'])); 
    137             if($count != 0) { 
    138                 $this->arrErr['category_name'] = "※ カテゴリ内に商品が存在するため削除できません。<br>"; 
    139             } 
    140  
    141             if(!isset($this->arrErr['category_name'])) { 
    142                 // ランク付きレコードの削除(※処理負荷を考慮してレコードごと削除する。) 
    143                 $objDb->sfDeleteRankRecord("dtb_category", "category_id", $_POST['category_id'], "", true); 
    144             } 
    145             break; 
     101            $this->doDelete($objFormParam, $objDb); 
     102            break; 
     103        // 表示順を上へ 
    146104        case 'up': 
    147             $objQuery = new SC_Query(); 
    148             $objQuery->begin(); 
    149             $up_id = $this->lfGetUpRankID($objQuery, "dtb_category", "parent_category_id", "category_id", $_POST['category_id']); 
    150             if($up_id != "") { 
    151                 // 上のグループのrankから減算する数 
    152                 $my_count = $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $_POST['category_id']); 
    153                 // 自分のグループのrankに加算する数 
    154                 $up_count = $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $up_id); 
    155                 if($my_count > 0 && $up_count > 0) { 
    156                     // 自分のグループに加算 
    157                     $this->lfUpRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $_POST['category_id'], $up_count); 
    158                     // 上のグループから減算 
    159                     $this->lfDownRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $up_id, $my_count); 
    160                 } 
    161             } 
    162             $objQuery->commit(); 
    163             break; 
     105            $this->doUp($objFormParam); 
     106            break; 
     107        // 表示順を下へ 
    164108        case 'down': 
    165             $objQuery = new SC_Query(); 
    166             $objQuery->begin(); 
    167             $down_id = $this->lfGetDownRankID($objQuery, "dtb_category", "parent_category_id", "category_id", $_POST['category_id']); 
    168             if($down_id != "") { 
    169                 // 下のグループのrankに加算する数 
    170                 $my_count = $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $_POST['category_id']); 
    171                 // 自分のグループのrankから減算する数 
    172                 $down_count = $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $down_id); 
    173                 if($my_count > 0 && $down_count > 0) { 
    174                     // 自分のグループから減算 
    175                     $this->lfUpRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $down_id, $my_count); 
    176                     // 下のグループに加算 
    177                     $this->lfDownRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $_POST['category_id'], $down_count); 
    178                 } 
    179             } 
    180             $objQuery->commit(); 
    181             break; 
     109            $this->doDown($objFormParam); 
     110            break; 
     111        // XXX 使われていないコード? 
    182112        case 'moveByDnD': 
    183113            // DnDしたカテゴリと移動先のセットを分解する 
     
    233163            } 
    234164            break; 
     165        // カテゴリツリークリック時 
    235166        case 'tree': 
    236167            break; 
     168         // CSVダウンロード 
    237169        case 'csv': 
    238             require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php"); 
    239  
     170            // CSVを送信する。正常終了の場合、終了。 
    240171            $objCSV = new SC_Helper_CSV_Ex(); 
    241  
    242             // CSVを送信する。正常終了の場合、終了。 
    243172            $objCSV->sfDownloadCategoryCsv() && exit; 
    244  
    245173            break; 
    246174        default: 
    247             $this->arrForm['parent_category_id'] = 0; 
    248             break; 
    249         } 
    250  
    251         $this->arrList = $this->lfGetCat($this->arrForm['parent_category_id']); 
    252         $this->arrTree = $objDb->sfGetCatTree($this->arrForm['parent_category_id']); 
     175            break; 
     176        } 
     177 
     178        $parent_category_id = $objFormParam->getValue('parent_category_id'); 
     179        // 空の場合は親カテゴリを0にする 
     180        if (empty($parent_category_id)) { 
     181            $parent_category_id = 0; 
     182        } 
     183        // 親カテゴリIDの保持 
     184        $this->arrForm['parent_category_id'] = $parent_category_id; 
     185        // カテゴリ一覧を取得 
     186        $this->arrList = $this->findCategoiesByParentCategoryId($parent_category_id); 
     187        // カテゴリツリーを取得 
     188        $this->arrTree = $objDb->sfGetCatTree($parent_category_id); 
     189        // ぱんくずの生成 
    253190        $arrBread = array(); 
    254         $objDb->findTree($this->arrTree, $this->arrForm['parent_category_id'], $arrBread); 
    255         $this->breadcrumbs = "ホーム"; 
     191        $objDb->findTree($this->arrTree, $parent_category_id, $arrBread); 
     192        $this->breadcrumbs = "ホーム" . $this->createBreaCrumbs($arrBread); 
     193    } 
     194 
     195    /** 
     196     * カテゴリの削除を実行する. 
     197     * 
     198     * 下記の場合は削除を実施せず、エラーメッセージを表示する. 
     199     * 
     200     * - 削除対象のカテゴリに、子カテゴリが1つ以上ある場合 
     201     * - 削除対象のカテゴリを、登録商品が使用している場合 
     202     * 
     203     * カテゴリの削除は、物理削除で行う. 
     204     * 
     205     * @param SC_FormParam $objFormParam 
     206     * @param SC_Helper_Db $objDb 
     207     * @return void 
     208     */ 
     209    function doDelete(&$objFormParam, &$objDb) { 
     210        $category_id = $objFormParam->getValue('category_id'); 
     211        $objQuery =& SC_Query::getSingletonInstance(); 
     212 
     213        // 子カテゴリのチェック 
     214        $where = "parent_category_id = ? AND del_flg = 0"; 
     215        $count = $objQuery->count("dtb_category", $where, array($category_id)); 
     216        if ($count > 0) { 
     217             $this->arrErr['category_name'] = "※ 子カテゴリが存在するため削除できません。<br/>"; 
     218             return; 
     219        } 
     220        // 登録商品のチェック 
     221        $table = "dtb_product_categories AS T1 LEFT JOIN dtb_products AS T2 ON T1.product_id = T2.product_id"; 
     222        $where = "T1.category_id = ? AND T2.del_flg = 0"; 
     223        $count = $objQuery->count($table, $where, array($category_id)); 
     224        if ($count > 0) { 
     225            $this->arrErr['category_name'] = "※ カテゴリ内に商品が存在するため削除できません。<br/>"; 
     226            return; 
     227        } 
     228 
     229        // ランク付きレコードの削除(※処理負荷を考慮してレコードごと削除する。) 
     230        $objDb->sfDeleteRankRecord("dtb_category", "category_id", $category_id, "", true); 
     231    } 
     232 
     233    /** 
     234     * 編集対象のカテゴリ名を, 入力ボックスへ表示する. 
     235     * 
     236     * @param SC_FormParam $objFormParam 
     237     * @return void 
     238     */ 
     239    function doPreEdit(&$objFormParam) { 
     240        $category_id = $objFormParam->getValue('category_id'); 
     241 
     242        $objQuery =& SC_Query::getSingletonInstance(); 
     243 
     244        // 編集対象のカテゴリ名をDBより取得する 
     245        $where = "category_id = ?"; 
     246        $category_name = $objQuery->get("category_name", "dtb_category", $where, array($category_id)); 
     247 
     248        // 入力ボックスへカテゴリ名を保持する. 
     249        $this->arrForm['category_name'] = $category_name; 
     250        // カテゴリIDを保持する. 
     251        $this->arrForm['category_id']   = $category_id; 
     252    } 
     253 
     254    /** 
     255     * カテゴリの編集を実行する. 
     256     * 
     257     * 下記の場合は, 編集を実行せず、エラーメッセージを表示する 
     258     * 
     259     * - カテゴリ名がすでに使用されている場合 
     260     * 
     261     * @param SC_FormParam $objFormParam 
     262     * @return void 
     263     */ 
     264    function doEdit(&$objFormParam) { 
     265        // 入力項目チェック 
     266        $arrErr = $objFormParam->checkError(); 
     267        if (count($arrErr) > 0) { 
     268            $this->arrErr = $arrErr; 
     269            $this->arrForm['category_id']   = $objFormParam->getValue('category_id'); 
     270            $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
     271            return; 
     272        } 
     273 
     274        // 重複チェック 
     275        $objQuery =& SC_Query::getSingletonInstance(); 
     276        $where = "parent_category_id = ? AND category_id <> ? AND category_name = ?"; 
     277        $count = $objQuery->count("dtb_category", 
     278                                  $where, 
     279                                  array($objFormParam->getValue('parent_category_id'), 
     280                                        $objFormParam->getValue('category_id'), 
     281                                        $objFormParam->getValue('category_name'))); 
     282        if ($count > 0) { 
     283            $this->arrErr['category_name']  = "※ 既に同じ内容の登録が存在します。<br/>"; 
     284            $this->arrForm['category_id']   = $objFormParam->getValue('category_id'); 
     285            $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
     286            return; 
     287        } 
     288 
     289        // カテゴリ更新 
     290        $arrCategory = array(); 
     291        $arrCategory['category_name'] = $objFormParam->getValue('category_name'); 
     292        $arrCategory['update_date']   = 'NOW()'; 
     293        $this->updateCategory($objFormParam->getValue('category_id'), $arrCategory); 
     294    } 
     295 
     296    /** 
     297     * カテゴリの登録を実行する. 
     298     * 
     299     * 下記の場合は, 登録を実行せず、エラーメッセージを表示する 
     300     * 
     301     * - カテゴリ登録数の上限を超える場合 
     302     * - 階層登録数の上限を超える場合 
     303     * - カテゴリ名がすでに使用されている場合 
     304     * 
     305     * @param SC_FormParam $objFormParam 
     306     * @return void 
     307     */ 
     308    function doRegister(&$objFormParam) { 
     309        // 入力項目チェック 
     310        $arrErr = $objFormParam->checkError(); 
     311        if (count($arrErr) > 0) { 
     312            $this->arrErr = $arrErr; 
     313            $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
     314            return; 
     315        } 
     316 
     317        // 登録数上限チェック 
     318        $objQuery =& SC_Query::getSingletonInstance(); 
     319        $where = "del_flg = 0"; 
     320        $count = $objQuery->count("dtb_category", $where); 
     321        if ($count >= CATEGORY_MAX) { 
     322            $this->arrErr['category_name']  = "※ カテゴリの登録最大数を超えました。<br/>"; 
     323            $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
     324            return; 
     325        } 
     326 
     327        // 階層上限チェック 
     328        if ($this->isOverLevel()) { 
     329            $this->arrErr['category_name']  = "※ " . LEVEL_MAX . "階層以上の登録はできません。<br/>"; 
     330            $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
     331            return; 
     332        } 
     333 
     334        // 重複チェック 
     335        $where = "parent_category_id = ? AND category_name = ?"; 
     336        $count = $objQuery->count("dtb_category", 
     337                                  $where, 
     338                                  array($objFormParam->getValue('parent_category_id'), 
     339                                        $objFormParam->getValue('category_name'))); 
     340        if ($count > 0) { 
     341            $this->arrErr['category_name']  = "※ 既に同じ内容の登録が存在します。<br/>"; 
     342            $this->arrForm['category_name'] = $objFormParam->getValue('category_name'); 
     343            return; 
     344        } 
     345 
     346        // カテゴリ登録 
     347        $this->registerCategory($objFormParam->getValue('parent_category_id'), 
     348                                $objFormParam->getValue('category_name'), 
     349                                $_SESSION['member_id']); 
     350    } 
     351     
     352    /** 
     353     * カテゴリの表示順序を上へ移動する. 
     354     * 
     355     * @param SC_FormParam $objFormParam 
     356     * @return void 
     357     */ 
     358    function doUp(&$objFormParam) { 
     359        $category_id = $objFormParam->getValue('category_id'); 
     360 
     361        $objQuery =& SC_Query::getSingletonInstance(); 
     362        $objQuery->begin(); 
     363        $up_id = $this->lfGetUpRankID($objQuery, "dtb_category", "parent_category_id", "category_id", $category_id); 
     364        if ($up_id != "") { 
     365            // 上のグループのrankから減算する数 
     366            $my_count = $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $category_id); 
     367                // 自分のグループのrankに加算する数 
     368                $up_count = $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $up_id); 
     369                if ($my_count > 0 && $up_count > 0) { 
     370                    // 自分のグループに加算 
     371                    $this->lfUpRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $category_id, $up_count); 
     372                    // 上のグループから減算 
     373                    $this->lfDownRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $up_id, $my_count); 
     374                } 
     375        } 
     376        $objQuery->commit(); 
     377    } 
     378 
     379    /** 
     380     * カテゴリの表示順序を下へ移動する. 
     381     * 
     382     * @param SC_FormParam $objFormParam 
     383     * @return void 
     384     */ 
     385    function doDown(&$objFormParam) { 
     386        $category_id = $objFormParam->getValue('category_id'); 
     387 
     388        $objQuery =& SC_Query::getSingletonInstance(); 
     389        $objQuery->begin(); 
     390        $down_id = $this->lfGetDownRankID($objQuery, "dtb_category", "parent_category_id", "category_id", $category_id); 
     391        if ($down_id != "") { 
     392            // 下のグループのrankに加算する数 
     393            $my_count = $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $category_id); 
     394            // 自分のグループのrankから減算する数 
     395            $down_count = $this->lfCountChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $down_id); 
     396            if ($my_count > 0 && $down_count > 0) { 
     397                // 自分のグループから減算 
     398                $this->lfUpRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $down_id, $my_count); 
     399                // 下のグループに加算 
     400                $this->lfDownRankChilds($objQuery, "dtb_category", "parent_category_id", "category_id", $category_id, $down_count); 
     401            } 
     402        } 
     403        $objQuery->commit(); 
     404    } 
     405 
     406    /** 
     407     * パラメータの初期化を行う 
     408     * 
     409     * @param SC_FormParam $objFormParam 
     410     * @return void 
     411     */ 
     412    function initParam(&$objFormParam) { 
     413        $objFormParam->addParam("親カテゴリID", "parent_category_id", null, null, array()); 
     414        $objFormParam->addParam("カテゴリID", "category_id", null, null, array()); 
     415        $objFormParam->addParam("カテゴリ名", "category_name", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     416    } 
     417     
     418    /** 
     419     * ぱんくず文字列を生成する. 
     420     * 
     421     * @param array $arrBread カテゴリ配列 
     422     * @return string ぱんくず文字列 
     423     */ 
     424    function createBreaCrumbs($arrBread) { 
     425        $breadcrumbs = ''; 
    256426        // TODO JSON で投げて, フロント側で処理した方が良い? 
    257         for ($i = count($arrBread) - 1; $i >= 0; $i--) { 
     427        $count = count($arrBread) - 1; 
     428        for ($i = $count; $i >= 0; $i--) { 
    258429            // フロント側で &gt; へエスケープするため, ここでは > を使用 
    259             if ($i === count($arrBread) - 1) { 
    260                 $this->breadcrumbs .= ' > '; 
     430            if ($i === $count) { 
     431                $breadcrumbs .= ' > '; 
    261432            } 
    262             $this->breadcrumbs .= $arrBread[$i]['category_name']; 
     433            $breadcrumbs .= $arrBread[$i]['category_name']; 
    263434            if ($i > 0) { 
    264                 $this->breadcrumbs .= ' > '; 
     435                $breadcrumbs .= ' > '; 
    265436            } 
    266437        } 
    267     } 
    268  
    269     /** 
    270      * デストラクタ. 
    271      * 
    272      * @return void 
    273      */ 
    274     function destroy() { 
    275         parent::destroy(); 
    276     } 
    277  
    278  
    279  
    280     // カテゴリの新規追加 
    281     function lfInsertCat($parent_category_id) { 
    282  
    283         $objQuery = new SC_Query(); 
    284         $objQuery->begin(); // トランザクションの開始 
    285  
    286  
    287         if($parent_category_id == 0) { 
     438        return $breadcrumbs; 
     439    } 
     440 
     441    /** 
     442     * 親カテゴリIDでカテゴリを検索する. 
     443     * 
     444     * - 表示順の降順でソートする 
     445     * - 有効なカテゴリを返す(del_flag = 0) 
     446     * 
     447     * @param SC_Query $objQuery 
     448     * @param int $parent_category_id 親カテゴリID 
     449     * @return array カテゴリの配列 
     450     */ 
     451    function findCategoiesByParentCategoryId($parent_category_id) { 
     452        if (!$parent_category_id) { 
     453            $parent_category_id = 0; 
     454        } 
     455        $objQuery =& SC_Query::getSingletonInstance(); 
     456        $col   = "category_id, category_name, level, rank"; 
     457        $where = "del_flg = 0 AND parent_category_id = ?"; 
     458        $objQuery->setOption("ORDER BY rank DESC"); 
     459        return $objQuery->select($col, "dtb_category", $where, array($parent_category_id)); 
     460    } 
     461 
     462    /** 
     463     * カテゴリを更新する 
     464     * 
     465     * @param integer $category_id 更新対象のカテゴリID 
     466     * @param array 更新する カラム名 => 値 の連想配列 
     467     * @return void 
     468     */ 
     469    function updateCategory($category_id, $arrCategory) { 
     470        $objQuery =& SC_Query::getSingletonInstance(); 
     471        $objQuery->begin(); 
     472        $where = "category_id = ?"; 
     473        $objQuery->update("dtb_category", $arrCategory, $where, array($category_id)); 
     474        $objQuery->commit(); 
     475    } 
     476 
     477    /** 
     478     * カテゴリを登録する 
     479     * 
     480     * @param integer 親カテゴリID 
     481     * @param string カテゴリ名 
     482     * @param integer 作成者のID 
     483     * @return void 
     484     */ 
     485    function registerCategory($parent_category_id, $category_name, $creator_id) { 
     486        $objQuery =& SC_Query::getSingletonInstance(); 
     487        $objQuery->begin(); 
     488 
     489        $rank = null; 
     490        if ($parent_category_id == 0) { 
    288491            // ROOT階層で最大のランクを取得する。 
    289492            $where = "parent_category_id = ?"; 
     
    302505        $level = $objQuery->get("level", "dtb_category", $where, array($parent_category_id)) + 1; 
    303506 
    304         // 入力データを渡す。 
    305         $sqlval = $this->objFormParam->getHashArray(); 
    306         $sqlval['create_date'] = "Now()"; 
    307         $sqlval['update_date'] = "Now()"; 
    308         $sqlval['creator_id'] = $_SESSION['member_id']; 
    309         $sqlval['parent_category_id'] = $parent_category_id; 
    310         $sqlval['rank'] = $rank; 
    311         $sqlval['level'] = $level; 
    312  
    313         // INSERTの実行 
    314         $sqlval['category_id'] = $objQuery->nextVal('dtb_category_category_id'); 
    315         $objQuery->insert("dtb_category", $sqlval); 
     507        $arrCategory = array(); 
     508        $arrCategory['category_name'] = $category_name; 
     509        $arrCategory['parent_category_id'] = $parent_category_id; 
     510        $arrCategory['create_date'] = "Now()"; 
     511        $arrCategory['update_date'] = "Now()"; 
     512        $arrCategory['creator_id']  = $creator_id; 
     513        $arrCategory['rank']        = $rank; 
     514        $arrCategory['level']       = $level; 
     515        $arrCategory['category_id'] = $objQuery->nextVal('dtb_category_category_id'); 
     516        $objQuery->insert("dtb_category", $arrCategory); 
    316517 
    317518        $objQuery->commit();    // トランザクションの終了 
    318519    } 
    319  
    320     // カテゴリの編集 
    321     function lfUpdateCat($category_id) { 
    322         $objQuery = new SC_Query(); 
    323         // 入力データを渡す。 
    324         $sqlval = $this->objFormParam->getHashArray(); 
    325         $sqlval['update_date'] = "Now()"; 
    326         $where = "category_id = ?"; 
    327         $objQuery->update("dtb_category", $sqlval, $where, array($category_id)); 
    328     } 
    329  
    330     // カテゴリの取得 
    331     function lfGetCat($parent_category_id) { 
    332         $objQuery = new SC_Query(); 
    333  
    334         if($parent_category_id == "") { 
    335             $parent_category_id = '0'; 
    336         } 
    337  
    338         $col = "category_id, category_name, level, rank"; 
    339         $where = "del_flg = 0 AND parent_category_id = ?"; 
    340         $objQuery->setOption("ORDER BY rank DESC"); 
    341         $arrRet = $objQuery->select($col, "dtb_category", $where, array($parent_category_id)); 
    342         return $arrRet; 
    343     } 
    344  
    345     /* パラメータ情報の初期化 */ 
    346     function lfInitParam() { 
    347         $this->objFormParam->addParam("カテゴリ名", "category_name", STEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK")); 
    348     } 
    349  
    350     /* 入力内容のチェック */ 
    351     function lfCheckError($array) { 
    352  
    353         $objErr = new SC_CheckError($array); 
    354         $objErr->arrErr = $this->objFormParam->checkError(); 
    355  
    356         // 階層チェック 
    357         if(!isset($objErr->arrErr['category_name'])) { 
    358             $objQuery = new SC_Query(); 
    359             $level = $objQuery->get("level", "dtb_category", "category_id = ?", array($_POST['parent_category_id'])); 
    360  
    361             if($level >= LEVEL_MAX) { 
    362                 $objErr->arrErr['category_name'] = "※ ".LEVEL_MAX."階層以上の登録はできません。<br>"; 
    363             } 
    364         } 
    365  
    366         if (!isset($_POST['category_id'])) $_POST['category_id'] = ""; 
    367  
    368         // 
    369  
    370         // 重複チェック 
    371         if(!isset($objErr->arrErr['category_name'])) { 
    372             $objQuery = new SC_Query(); 
    373             $where = "parent_category_id = ? AND category_name = ?"; 
    374             $arrRet = $objQuery->select("category_id, category_name", "dtb_category", $where, array($_POST['parent_category_id'], $array['category_name'])); 
    375  
    376             if (empty($arrRet)) { 
    377                 $arrRet = array(array("category_id" => "", "category_name" => "")); 
    378             } 
    379  
    380             // 編集中のレコード以外に同じ名称が存在する場合 
    381             if ($arrRet[0]['category_id'] != $_POST['category_id'] 
    382                 && $arrRet[0]['category_name'] == $_POST['category_name']) { 
    383                 $objErr->arrErr['category_name'] = "※ 既に同じ内容の登録が存在します。<br>"; 
    384             } 
    385         } 
    386  
    387         return $objErr->arrErr; 
    388     } 
    389  
     520     
     521    /** 
     522     * カテゴリの階層が上限を超えているかを判定する 
     523     * 
     524     * @param integer 親カテゴリID 
     525     * @param 超えている場合 true 
     526     */ 
     527    function isOverLevel($parent_category_id) { 
     528        $objQuery =& SC_Query::getSingletonInstance(); 
     529        $level = $objQuery->get("level", "dtb_category", "category_id = ?", array($parent_category_id)); 
     530        return $level >= LEVEL_MAX; 
     531    } 
     532 
     533    /** 
     534     * デストラクタ. 
     535     * 
     536     * @return void 
     537     */ 
     538    function destroy() { 
     539        parent::destroy(); 
     540    } 
    390541 
    391542    // 並びが1つ下のIDを取得する。 
     
    460611    } 
    461612} 
    462 ?> 
Note: See TracChangeset for help on using the changeset viewer.