Changeset 23649


Ignore:
Timestamp:
2014/10/12 15:02:46 (6 years ago)
Author:
kim
Message:

#2554 r23439 をリバート

検証不十分、既存関数の削除が行われているため、2.13.3での実装は見送り。
一部コメントの修正などは採用

Location:
branches/version-2_13_3/data/class
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_13_3/data/class/helper/SC_Helper_Category.php

    r23546 r23649  
    178178     * 
    179179     * @param array $data 
    180      * @return int|bool 
     180     * @return void 
    181181     */ 
    182182    public function save($data) 
     
    185185 
    186186        $category_id = $data['category_id']; 
    187         // ミリ秒付きの時間文字列を取得. CSVへの対応. 
    188         // トランザクション内のCURRENT_TIMESTAMPは全てcommit()時の時間に統一されてしまう為. 
    189         $query = array('update_date' => SC_Utils_Ex::getFormattedDateWithMicroSecond()); 
     187        $query = array('update_date' => 'CURRENT_TIMESTAMP'); 
    190188        $objQuery->begin(); 
    191189 
     
    217215            $query['category_name'] = $data['category_name']; 
    218216            $query['parent_category_id'] = $data['parent_category_id']; 
    219             $query['create_date'] = $query['update_date']; 
     217            $query['create_date'] = 'CURRENT_TIMESTAMP'; 
    220218            $query['creator_id']  = $_SESSION['member_id']; 
    221219            $query['rank']        = $rank; 
    222220            $query['level']       = $level; 
    223221 
    224             $result = $objQuery->insert('dtb_category', $query); 
     222            $objQuery->insert('dtb_category', $query); 
    225223        } else { 
    226224            // 既存編集 
    227             $query['category_id'] = $category_id; 
    228225            $query['parent_category_id'] = $data['parent_category_id']; 
    229226            $query['category_name'] = $data['category_name']; 
    230227            $where = 'category_id = ?'; 
    231             $result = $objQuery->update('dtb_category', $query, $where, array($category_id)); 
     228            $objQuery->update('dtb_category', $query, $where, array($category_id)); 
    232229        } 
    233230 
    234231        $objQuery->commit(); 
    235         return ($result) ? $query['category_id'] : FALSE; 
    236232    } 
    237233 
  • branches/version-2_13_3/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSVCategory.php

    r23605 r23649  
    5555    /** 登録フォームカラム情報 **/ 
    5656    public $arrFormKeyList; 
    57     /** @var string メインタイトル */ 
    58     public $tpl_maintitle; 
    59     /** @var string サブタイトル */ 
    60     public $tpl_subtitle; 
    61     /** @var string サブテンプレートナンバー */ 
    62     public $tpl_subno; 
    63  
    64     /** @var array 許可タグ情報 */ 
    65     private $arrAllowedTag; 
    66     /** @var int CSV ID */ 
    67     private $csv_id; 
    68     /** @var  bool */ 
    69     private $tpl_is_format_default; 
    70     /** @var  bool */ 
    71     private $tpl_is_update; 
    72     /** @var  int */ 
    73     private $max_upload_csv_size; 
    7457 
    7558    /** 
     
    251234            } 
    252235 
    253             $category_id = $this->lfRegisterCategory($line_count, $objFormParam); 
     236            $category_id = $this->lfRegistCategory($objQuery, $line_count, $objFormParam); 
    254237            $this->addRowResult($line_count, 'カテゴリID:'.$category_id . ' / カテゴリ名:' . $objFormParam->getValue('category_name')); 
    255238        } 
     
    374357     * FIXME: 登録の実処理自体は、LC_Page_Admin_Products_Categoryと共通化して欲しい。 
    375358     * 
    376      * @param  integer $line 処理中の行数 
    377      * @param SC_FormParam $objFormParam 
     359     * @param  SC_Query       $objQuery SC_Queryインスタンス 
     360     * @param  string|integer $line     処理中の行数 
    378361     * @return integer        カテゴリID 
    379362     */ 
    380     public function lfRegisterCategory($line, SC_FormParam &$objFormParam) 
     363    public function lfRegistCategory($objQuery, $line, &$objFormParam) 
    381364    { 
    382365        // 登録データ対象取得 
    383366        $arrList = $objFormParam->getDbArray(); 
     367        // 登録時間を生成(DBのCURRENT_TIMESTAMPだとcommitした際、全て同一の時間になってしまう) 
     368        $arrList['update_date'] = $this->lfGetDbFormatTimeWithLine($line); 
    384369 
    385370        // 登録情報を生成する。 
     
    390375        $sqlval = $this->lfSetCategoryDefaultData($sqlval); 
    391376 
    392         $objCategory = new SC_Helper_Category_Ex(); 
    393         $category_id = $objCategory->save($sqlval); 
     377        if ($sqlval['category_id'] != '') { 
     378            // 同じidが存在すればupdate存在しなければinsert 
     379            $where = 'category_id = ?'; 
     380            $category_exists = $objQuery->exists('dtb_category', $where, array($sqlval['category_id'])); 
     381            if ($category_exists) { 
     382                // UPDATEの実行 
     383                $where = 'category_id = ?'; 
     384                $objQuery->update('dtb_category', $sqlval, $where, array($sqlval['category_id'])); 
     385            } else { 
     386                $sqlval['create_date'] = $arrList['update_date']; 
     387                // 新規登録 
     388                $category_id = $this->registerCategory($sqlval['parent_category_id'], 
     389                                        $sqlval['category_name'], 
     390                                        $_SESSION['member_id'], 
     391                                        $sqlval['category_id']); 
     392            } 
     393            $category_id = $sqlval['category_id']; 
     394            // TODO: 削除時処理 
     395        } else { 
     396            // 新規登録 
     397            $category_id = $this->registerCategory($sqlval['parent_category_id'], 
     398                                        $sqlval['category_name'], 
     399                                        $_SESSION['member_id']); 
     400        } 
    394401 
    395402        return $category_id; 
     
    450457    public function lfCheckErrorDetail($item, $arrErr) 
    451458    { 
    452         $objCategory = new SC_Helper_Category_Ex(); 
    453         // スタティック変数を初期化 
    454         $objCategory->getTree(true); 
     459        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    455460        /* 
    456461        // カテゴリIDの存在チェック 
     
    463468            && $item['parent_category_id'] != '' 
    464469            && $item['parent_category_id'] != '0' 
    465             && !$objCategory->get($item['parent_category_id']) 
     470            && !SC_Helper_DB_Ex::sfIsRecord('dtb_category', 'category_id', array($item['parent_category_id'])) 
    466471        ) { 
    467472            $arrErr['parent_category_id'] = '※ 指定の親カテゴリID(' . $item['parent_category_id'] . ')は、存在しません。'; 
     
    479484            && $item['category_name'] != '' 
    480485        ) { 
    481             $exists = false; 
    482             $arrBrother = $objCategory->getTreeBranch($item['parent_category_id']); 
    483             foreach ($arrBrother as $brother) { 
    484                 if ($brother['category_name'] == $item['category_name'] && $brother['category_id'] != $item['category_id']) { 
    485                     $exists = true; 
    486                 } 
    487             } 
     486            $parent_category_id = $item['parent_category_id']; 
     487            if ($parent_category_id == '') { 
     488                $parent_category_id = (string) '0'; 
     489            } 
     490            $where = 'parent_category_id = ? AND category_id <> ? AND category_name = ?'; 
     491            $exists = $objQuery->exists('dtb_category', 
     492                        $where, 
     493                        array($parent_category_id, 
     494                                $item['category_id'], 
     495                                $item['category_name'])); 
    488496            if ($exists) { 
    489497                $arrErr['category_name'] = '※ 既に同名のカテゴリが存在します。'; 
     
    491499        } 
    492500        // 登録数上限チェック 
    493         $count = count($objCategory->getList()); 
     501        $where = 'del_flg = 0'; 
     502        $count = $objQuery->count('dtb_category', $where); 
    494503        if ($count >= CATEGORY_MAX) { 
    495504            $item['category_name'] = '※ カテゴリの登録最大数を超えました。'; 
     
    498507        if (array_search('parent_category_id', $this->arrFormKeyList) !== FALSE 
    499508                and $item['parent_category_id'] != '') { 
    500             // 階層上限チェック 
    501             $arrParent = $objCategory->get($item['parent_category_id']); 
    502             if ($arrParent['level'] >= LEVEL_MAX) { 
     509            $level = $objQuery->get('level', 'dtb_category', 'category_id = ?', array($parent_category_id)); 
     510            if ($level >= LEVEL_MAX) { 
    503511                $arrErr['parent_category_id'] = '※ ' . LEVEL_MAX . '階層以上の登録はできません。'; 
    504512            } 
     
    518526        return $arrErr; 
    519527    } 
     528 
     529    /** 
     530     * カテゴリを登録する 
     531     * 
     532     * @param integer 親カテゴリID 
     533     * @param string カテゴリ名 
     534     * @param integer 作成者のID 
     535     * @param integer 指定カテゴリID 
     536     * @return integer カテゴリID 
     537     */ 
     538    public function registerCategory($parent_category_id, $category_name, $creator_id, $category_id = null) 
     539    { 
     540        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     541 
     542        $rank = null; 
     543        if ($parent_category_id == 0) { 
     544            // ROOT階層で最大のランクを取得する。 
     545            $where = 'parent_category_id = ?'; 
     546            $rank = $objQuery->max('rank', 'dtb_category', $where, array($parent_category_id)) + 1; 
     547        } else { 
     548            // 親のランクを自分のランクとする。 
     549            $where = 'category_id = ?'; 
     550            $rank = $objQuery->get('rank', 'dtb_category', $where, array($parent_category_id)); 
     551            // 追加レコードのランク以上のレコードを一つあげる。 
     552            $where = 'rank >= ?'; 
     553            $arrRawSql = array( 
     554                'rank' => '(rank + 1)', 
     555            ); 
     556            $objQuery->update('dtb_category', array(), $where, array($rank), $arrRawSql); 
     557        } 
     558 
     559        $where = 'category_id = ?'; 
     560        // 自分のレベルを取得する(親のレベル + 1) 
     561        $level = $objQuery->get('level', 'dtb_category', $where, array($parent_category_id)) + 1; 
     562 
     563        $arrCategory = array(); 
     564        $arrCategory['category_name'] = $category_name; 
     565        $arrCategory['parent_category_id'] = $parent_category_id; 
     566        $arrCategory['create_date'] = 'CURRENT_TIMESTAMP'; 
     567        $arrCategory['update_date'] = 'CURRENT_TIMESTAMP'; 
     568        $arrCategory['creator_id']  = $creator_id; 
     569        $arrCategory['rank']        = $rank; 
     570        $arrCategory['level']       = $level; 
     571        //カテゴリIDが指定されていればそれを利用する 
     572        if (isset($category_id)) { 
     573            $arrCategory['category_id'] = $category_id; 
     574            // シーケンスの調整 
     575            $seq_count = $objQuery->currVal('dtb_category_category_id'); 
     576            if ($seq_count < $arrCategory['category_id']) { 
     577                $objQuery->setVal('dtb_category_category_id', $arrCategory['category_id'] + 1); 
     578            } 
     579        } else { 
     580            $arrCategory['category_id'] = $objQuery->nextVal('dtb_category_category_id'); 
     581        } 
     582        $objQuery->insert('dtb_category', $arrCategory); 
     583 
     584        return $arrCategory['category_id']; 
     585    } 
     586 
     587    /** 
     588     * 指定された行番号をmicrotimeに付与してDB保存用の時間を生成する。 
     589     * トランザクション内のCURRENT_TIMESTAMPは全てcommit()時の時間に統一されてしまう為。 
     590     * 
     591     * @param  string $line_no 行番号 
     592     * @return string $time DB保存用の時間文字列 
     593     */ 
     594    public function lfGetDbFormatTimeWithLine($line_no = '') 
     595    { 
     596        $time = date('Y-m-d H:i:s'); 
     597        // 秒以下を生成 
     598        if ($line_no != '') { 
     599            $microtime = sprintf('%06d', $line_no); 
     600            $time .= ".$microtime"; 
     601        } 
     602 
     603        return $time; 
     604    } 
     605 
     606    /** 
     607     * 指定されたキーと値の有効性のDB確認 
     608     * 
     609     * @param  string  $table   テーブル名 
     610     * @param  string  $keyname キー名 
     611     * @param  array   $item    入力データ配列 
     612     * @return boolean true:有効なデータがある false:有効ではない 
     613     */ 
     614    public function lfIsDbRecord($table, $keyname, $item) 
     615    { 
     616        if (array_search($keyname, $this->arrFormKeyList) !== FALSE  //入力対象である 
     617            && $item[$keyname] != ''   // 空ではない 
     618            && !SC_Helper_DB_Ex::sfIsRecord($table, $keyname, (array) $item[$keyname]) //DBに存在するか 
     619        ) { 
     620            return false; 
     621        } 
     622 
     623        return true; 
     624    } 
    520625} 
Note: See TracChangeset for help on using the changeset viewer.