Changeset 23439


Ignore:
Timestamp:
2014/05/22 10:58:08 (6 years ago)
Author:
pineray
Message:

#2554 カテゴリ登録CSVに対応.

Location:
branches/version-2_13-dev/data/class
Files:
3 edited

Legend:

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

    r23438 r23439  
    178178     * 
    179179     * @param array $data 
    180      * @return void 
     180     * @return int|bool 
    181181     */ 
    182182    public function save($data) 
     
    185185 
    186186        $category_id = $data['category_id']; 
    187         $query = array('update_date' => 'CURRENT_TIMESTAMP'); 
     187        // ミリ秒付きの時間文字列を取得. CSVへの対応. 
     188        // トランザクション内のCURRENT_TIMESTAMPは全てcommit()時の時間に統一されてしまう為. 
     189        $query = array('update_date' => SC_Utils_Ex::getFormattedDateWithMicroSecond()); 
    188190        $objQuery->begin(); 
    189191 
     
    215217            $query['category_name'] = $data['category_name']; 
    216218            $query['parent_category_id'] = $data['parent_category_id']; 
    217             $query['create_date'] = 'CURRENT_TIMESTAMP'; 
     219            $query['create_date'] = $query['update_date']; 
    218220            $query['creator_id']  = $_SESSION['member_id']; 
    219221            $query['rank']        = $rank; 
    220222            $query['level']       = $level; 
    221223 
    222             $objQuery->insert('dtb_category', $query); 
     224            $result = $objQuery->insert('dtb_category', $query); 
    223225        } else { 
    224226            // 既存編集 
     227            $query['category_id'] = $category_id; 
    225228            $query['parent_category_id'] = $data['parent_category_id']; 
    226229            $query['category_name'] = $data['category_name']; 
    227230            $where = 'category_id = ?'; 
    228             $objQuery->update('dtb_category', $query, $where, array($category_id)); 
     231            $result = $objQuery->update('dtb_category', $query, $where, array($category_id)); 
    229232        } 
    230233 
    231234        $objQuery->commit(); 
     235        return ($result) ? $query['category_id'] : FALSE; 
    232236    } 
    233237 
  • branches/version-2_13-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSVCategory.php

    r23366 r23439  
    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; 
    5774 
    5875    /** 
     
    135152     * 
    136153     * @param  integer $line_count 行数 
    137      * @param  stirng  $message    メッセージ 
     154     * @param  string  $message    メッセージ 
    138155     * @return void 
    139156     */ 
     
    147164     * 
    148165     * @param  integer $line_count 行数 
    149      * @param  stirng  $message    メッセージ 
     166     * @param  string  $message    メッセージ 
    150167     * @return void 
    151168     */ 
     
    234251            } 
    235252 
    236             $category_id = $this->lfRegistCategory($objQuery, $line_count, $objFormParam); 
     253            $category_id = $this->lfRegisterCategory($line_count, $objFormParam); 
    237254            $this->addRowResult($line_count, 'カテゴリID:'.$category_id . ' / カテゴリ名:' . $objFormParam->getValue('category_name')); 
    238255        } 
     
    261278     * ファイル情報の初期化を行う. 
    262279     * 
    263      * @return void 
    264      */ 
    265     public function lfInitFile(&$objUpFile) 
     280     * @param SC_UploadFile $objUpFile 
     281     * @return void 
     282     */ 
     283    public function lfInitFile(SC_UploadFile &$objUpFile) 
    266284    { 
    267285        $objUpFile->addFile('CSVファイル', 'csv_file', array('csv'), CSV_SIZE, true, 0, 0, false); 
     
    271289     * 入力情報の初期化を行う. 
    272290     * 
    273      * @param array CSV構造設定配列 
    274      * @return void 
    275      */ 
    276     public function lfInitParam(&$objFormParam, &$arrCSVFrame) 
     291     * @param SC_FormParam $objFormParam 
     292     * @param array $arrCSVFrame CSV構造設定配列 
     293     * @return void 
     294     */ 
     295    public function lfInitParam(SC_FormParam &$objFormParam, &$arrCSVFrame) 
    277296    { 
    278297        // 固有の初期値調整 
     
    318337     * 入力チェックを行う. 
    319338     * 
    320      * @return void 
    321      */ 
    322     public function lfCheckError(&$objFormParam) 
     339     * @param SC_FormParam $objFormParam 
     340     * @return array 
     341     */ 
     342    public function lfCheckError(SC_FormParam &$objFormParam) 
    323343    { 
    324344        // 入力データを渡す。 
     
    354374     * FIXME: 登録の実処理自体は、LC_Page_Admin_Products_Categoryと共通化して欲しい。 
    355375     * 
    356      * @param  SC_Query       $objQuery SC_Queryインスタンス 
    357      * @param  string|integer $line     処理中の行数 
     376     * @param  string|integer $line 処理中の行数 
     377     * @param SC_FormParam $objFormParam 
    358378     * @return integer        カテゴリID 
    359379     */ 
    360     public function lfRegistCategory($objQuery, $line, &$objFormParam) 
     380    public function lfRegisterCategory($line, SC_FormParam &$objFormParam) 
    361381    { 
    362382        // 登録データ対象取得 
    363383        $arrList = $objFormParam->getDbArray(); 
    364         // 登録時間を生成(DBのCURRENT_TIMESTAMPだとcommitした際、全て同一の時間になってしまう) 
    365         $arrList['update_date'] = $this->lfGetDbFormatTimeWithLine($line); 
    366384 
    367385        // 登録情報を生成する。 
     
    372390        $sqlval = $this->lfSetCategoryDefaultData($sqlval); 
    373391 
    374         if ($sqlval['category_id'] != '') { 
    375             // 同じidが存在すればupdate存在しなければinsert 
    376             $where = 'category_id = ?'; 
    377             $category_exists = $objQuery->exists('dtb_category', $where, array($sqlval['category_id'])); 
    378             if ($category_exists) { 
    379                 // UPDATEの実行 
    380                 $where = 'category_id = ?'; 
    381                 $objQuery->update('dtb_category', $sqlval, $where, array($sqlval['category_id'])); 
    382             } else { 
    383                 $sqlval['create_date'] = $arrList['update_date']; 
    384                 // 新規登録 
    385                 $category_id = $this->registerCategory($sqlval['parent_category_id'], 
    386                                         $sqlval['category_name'], 
    387                                         $_SESSION['member_id'], 
    388                                         $sqlval['category_id']); 
    389             } 
    390             $category_id = $sqlval['category_id']; 
    391             // TODO: 削除時処理 
    392         } else { 
    393             // 新規登録 
    394             $category_id = $this->registerCategory($sqlval['parent_category_id'], 
    395                                         $sqlval['category_name'], 
    396                                         $_SESSION['member_id']); 
    397         } 
     392        $objCategory = new SC_Helper_Category_Ex(); 
     393        $category_id = $objCategory->save($sqlval); 
    398394 
    399395        return $category_id; 
     
    428424     * 
    429425     * @param array $sqlval 商品登録情報配列 
    430      * @return $sqlval 登録情報配列 
     426     * @return array $sqlval 登録情報配列 
    431427     */ 
    432428    public function lfSetCategoryDefaultData(&$sqlval) 
     
    448444     * このフォーム特有の複雑な入力チェックを行う. 
    449445     * 
    450      * @param array 確認対象データ 
    451      * @param array エラー配列 
     446     * @param array $item 確認対象データ 
     447     * @param array $arrErr エラー配列 
    452448     * @return array エラー配列 
    453449     */ 
    454450    public function lfCheckErrorDetail($item, $arrErr) 
    455451    { 
    456         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     452        $objCategory = new SC_Helper_Category_Ex(); 
     453        // スタティック変数を初期化 
     454        $objCategory->getTree(true); 
    457455        /* 
    458456        // カテゴリIDの存在チェック 
     
    465463            && $item['parent_category_id'] != '' 
    466464            && $item['parent_category_id'] != '0' 
    467             && !SC_Helper_DB_Ex::sfIsRecord('dtb_category', 'category_id', array($item['parent_category_id'])) 
     465            && !$objCategory->get($item['parent_category_id']) 
    468466        ) { 
    469467            $arrErr['parent_category_id'] = '※ 指定の親カテゴリID(' . $item['parent_category_id'] . ')は、存在しません。'; 
     
    481479            && $item['category_name'] != '' 
    482480        ) { 
    483             $parent_category_id = $item['parent_category_id']; 
    484             if ($parent_category_id == '') { 
    485                 $parent_category_id = (string) '0'; 
    486             } 
    487             $where = 'parent_category_id = ? AND category_id <> ? AND category_name = ?'; 
    488             $exists = $objQuery->exists('dtb_category', 
    489                         $where, 
    490                         array($parent_category_id, 
    491                                 $item['category_id'], 
    492                                 $item['category_name'])); 
     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            } 
    493488            if ($exists) { 
    494489                $arrErr['category_name'] = '※ 既に同名のカテゴリが存在します。'; 
     
    496491        } 
    497492        // 登録数上限チェック 
    498         $where = 'del_flg = 0'; 
    499         $count = $objQuery->count('dtb_category', $where); 
     493        $count = count($objCategory->getList()); 
    500494        if ($count >= CATEGORY_MAX) { 
    501495            $item['category_name'] = '※ カテゴリの登録最大数を超えました。'; 
     
    504498        if (array_search('parent_category_id', $this->arrFormKeyList) !== FALSE 
    505499                and $item['parent_category_id'] != '') { 
    506             $level = $objQuery->get('level', 'dtb_category', 'category_id = ?', array($parent_category_id)); 
    507             if ($level >= LEVEL_MAX) { 
     500            $arrParent = $objCategory->get($item['parent_category_id']); 
     501            if ($arrParent['level'] >= LEVEL_MAX) { 
    508502                $arrErr['parent_category_id'] = '※ ' . LEVEL_MAX . '階層以上の登録はできません。'; 
    509503            } 
     
    512506        return $arrErr; 
    513507    } 
    514  
    515     /** 
    516      * カテゴリを登録する 
    517      * 
    518      * @param integer 親カテゴリID 
    519      * @param string カテゴリ名 
    520      * @param integer 作成者のID 
    521      * @param integer 指定カテゴリID 
    522      * @return integer カテゴリID 
    523      */ 
    524     public function registerCategory($parent_category_id, $category_name, $creator_id, $category_id = null) 
    525     { 
    526         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    527  
    528         $rank = null; 
    529         if ($parent_category_id == 0) { 
    530             // ROOT階層で最大のランクを取得する。 
    531             $where = 'parent_category_id = ?'; 
    532             $rank = $objQuery->max('rank', 'dtb_category', $where, array($parent_category_id)) + 1; 
    533         } else { 
    534             // 親のランクを自分のランクとする。 
    535             $where = 'category_id = ?'; 
    536             $rank = $objQuery->get('rank', 'dtb_category', $where, array($parent_category_id)); 
    537             // 追加レコードのランク以上のレコードを一つあげる。 
    538             $where = 'rank >= ?'; 
    539             $arrRawSql = array( 
    540                 'rank' => '(rank + 1)', 
    541             ); 
    542             $objQuery->update('dtb_category', array(), $where, array($rank), $arrRawSql); 
    543         } 
    544  
    545         $where = 'category_id = ?'; 
    546         // 自分のレベルを取得する(親のレベル + 1) 
    547         $level = $objQuery->get('level', 'dtb_category', $where, array($parent_category_id)) + 1; 
    548  
    549         $arrCategory = array(); 
    550         $arrCategory['category_name'] = $category_name; 
    551         $arrCategory['parent_category_id'] = $parent_category_id; 
    552         $arrCategory['create_date'] = 'CURRENT_TIMESTAMP'; 
    553         $arrCategory['update_date'] = 'CURRENT_TIMESTAMP'; 
    554         $arrCategory['creator_id']  = $creator_id; 
    555         $arrCategory['rank']        = $rank; 
    556         $arrCategory['level']       = $level; 
    557         //カテゴリIDが指定されていればそれを利用する 
    558         if (isset($category_id)) { 
    559             $arrCategory['category_id'] = $category_id; 
    560             // シーケンスの調整 
    561             $seq_count = $objQuery->currVal('dtb_category_category_id'); 
    562             if ($seq_count < $arrCategory['category_id']) { 
    563                 $objQuery->setVal('dtb_category_category_id', $arrCategory['category_id'] + 1); 
    564             } 
    565         } else { 
    566             $arrCategory['category_id'] = $objQuery->nextVal('dtb_category_category_id'); 
    567         } 
    568         $objQuery->insert('dtb_category', $arrCategory); 
    569  
    570         return $arrCategory['category_id']; 
    571     } 
    572  
    573     /** 
    574      * 指定された行番号をmicrotimeに付与してDB保存用の時間を生成する。 
    575      * トランザクション内のCURRENT_TIMESTAMPは全てcommit()時の時間に統一されてしまう為。 
    576      * 
    577      * @param  string $line_no 行番号 
    578      * @return string $time DB保存用の時間文字列 
    579      */ 
    580     public function lfGetDbFormatTimeWithLine($line_no = '') 
    581     { 
    582         $time = date('Y-m-d H:i:s'); 
    583         // 秒以下を生成 
    584         if ($line_no != '') { 
    585             $microtime = sprintf('%06d', $line_no); 
    586             $time .= ".$microtime"; 
    587         } 
    588  
    589         return $time; 
    590     } 
    591  
    592     /** 
    593      * 指定されたキーと値の有効性のDB確認 
    594      * 
    595      * @param  string  $table   テーブル名 
    596      * @param  string  $keyname キー名 
    597      * @param  array   $item    入力データ配列 
    598      * @return boolean true:有効なデータがある false:有効ではない 
    599      */ 
    600     public function lfIsDbRecord($table, $keyname, $item) 
    601     { 
    602         if (array_search($keyname, $this->arrFormKeyList) !== FALSE  //入力対象である 
    603             && $item[$keyname] != ''   // 空ではない 
    604             && !SC_Helper_DB_Ex::sfIsRecord($table, $keyname, (array) $item[$keyname]) //DBに存在するか 
    605         ) { 
    606             return false; 
    607         } 
    608  
    609         return true; 
    610     } 
    611508} 
  • branches/version-2_13-dev/data/class/util/SC_Utils.php

    r23436 r23439  
    963963     * @return string 変換後のテキストファイルのパス 
    964964     */ 
    965     public function sfEncodeFile($filepath, $enc_type, $out_dir) 
     965    public static function sfEncodeFile($filepath, $enc_type, $out_dir) 
    966966    { 
    967967        $ifp = fopen($filepath, 'r'); 
     
    13491349     * @return array 
    13501350     */ 
    1351     public function sfArrayIntersectKeys($arrSrc, $arrKey) 
     1351    public static function sfArrayIntersectKeys($arrSrc, $arrKey) 
    13521352    { 
    13531353        $arrRet = array(); 
     
    18521852    } 
    18531853 
    1854    /** 
     1854    /** 
    18551855     * コンパイルファイルを削除します. 
    18561856     * @return void 
     
    19771977     * @return string 
    19781978     */ 
    1979     public function getUnitDataSize($data) 
     1979    public static function getUnitDataSize($data) 
    19801980    { 
    19811981        if ($data < 1000) { 
     
    21062106        return file_exists(realpath(str_replace('..','',$base_path . $path_diff))) ? true : false; 
    21072107    } 
     2108 
     2109    /** 
     2110     * マイクロ秒付きの時間文字列を取得する. 
     2111     * 
     2112     * @return bool|string 
     2113     */ 
     2114    public static function getFormattedDateWithMicroSecond() 
     2115    { 
     2116        $micro = explode(" ", microtime()); 
     2117        $micro_string = explode('.',$micro[0]); 
     2118        return date('Y-m-d H:i:s') . "." . substr($micro_string[1],0,5); 
     2119    } 
    21082120} 
Note: See TracChangeset for help on using the changeset viewer.