Ignore:
Timestamp:
2011/01/18 06:06:11 (13 years ago)
Author:
AMUAMU
Message:

#704 (CSV出力で在庫無制限が0で出力されるパターンが存在する) の解決
#752 (商品登録CSV 最大カラム数($colmax)の比較の誤り) の解決

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

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php

    r19805 r19950  
    9393 
    9494        // CSV出力タイトル行の作成 
    95         $arrCsvOutput = SC_Utils_Ex::sfSwapArray($this->sfgetCsvOutput($csv_id, 'status = 1')); 
     95        $arrCsvOutput = SC_Utils_Ex::sfSwapArray($this->sfgetCsvOutput($csv_id, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE)); 
    9696 
    9797        if (count($arrCsvOutput) <= 0) break; 
     
    113113        $result = true; 
    114114        foreach($arrCSVFrame as $key => $val) { 
    115             if($val['status'] != "1" 
    116                     and $val['rw_flg'] == "1" 
     115            if($val['status'] != CSV_COLUMN_STATUS_FLG_ENABLE 
     116                    and $val['rw_flg'] == CSV_COLUMN_RW_FLG_READ_WRITE 
    117117                    and $val['error_check_types'] != "" 
    118118                    and stripos($val['error_check_types'], "EXIST_CHECK") !== FALSE) { 
     
    133133        $result = true; 
    134134        foreach($arrCSVFrame as $key => $val) { 
    135             if($val['status'] != "1" 
    136                     and $val['rw_flg'] == "3") { 
     135            if($val['status'] != CSV_COLUMN_STATUS_FLG_ENABLE 
     136                    and $val['rw_flg'] == CSV_COLUMN_RW_FLG_KEY_FIELD) { 
    137137                //キーフィールド 
    138138                $result = false; 
     
    178178 
    179179        // CSV出力タイトル行の作成 
    180         $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfgetCsvOutput(1, 'status = 1')); 
     180        $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfgetCsvOutput(1, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE)); 
    181181        if (count($arrOutput) <= 0) return false; // 失敗終了 
    182182        $arrOutputCols = $arrOutput['col']; 
     
    263263 
    264264        // CSV出力タイトル行の作成 
    265         $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfgetCsvOutput(5, 'status = 1')); 
     265        $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfgetCsvOutput(5, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE)); 
    266266        if (count($arrOutput) <= 0) return false; // 失敗終了 
    267267        $arrOutputCols = $arrOutput['col']; 
  • branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php

    r19805 r19950  
    7878        $this->arrProductType = $masterData->getMasterData("mtb_product_type"); 
    7979        $this->arrMaker = SC_Helper_DB_Ex::sfGetIDValueList("dtb_maker", "maker_id", "name"); 
    80         $this->arrPayments = SC_Helper_DB_Ex::sfGetIDValueList("dtb_payment", "payment_id", "payment_method");            $this->arrAllowedTag = $masterData->getMasterData("mtb_allowed_tag"); 
     80        $this->arrPayments = SC_Helper_DB_Ex::sfGetIDValueList("dtb_payment", "payment_id", "payment_method"); 
     81        $this->arrAllowedTag = $masterData->getMasterData("mtb_allowed_tag"); 
    8182        $this->arrTagCheckItem = array(); 
    8283    } 
     
    129130        // パラメータ情報の初期化 
    130131        $this->lfInitParam($arrCSVFrame); 
    131          
    132         $colmax = $this->objFormParam->getCount(); 
     132        // 現在のフォーマットにおける列数を取得 
     133        $col_count = $this->objFormParam->getCount(); 
    133134        $this->objFormParam->setHtmlDispNameArray(); 
    134135        $this->arrTitle = $this->objFormParam->getHtmlDispNameArray(); 
     
    176177                } 
    177178 
    178                 // レコード数を得る 
    179                 $rec_count = $this->objCSV->sfGetCSVRecordCount($fp); 
    180                 if($rec_count === FALSE) { 
     179                // レコード行数を得る 
     180                $record_count = $this->objCSV->sfGetCSVRecordCount($fp); 
     181                // ファイルが無効な場合はエラー 
     182                if($record_count === FALSE) { 
    181183                    SC_Utils_Ex::sfDispError(""); 
    182184                } 
    183185 
    184                 $line = 0;      // 行数 
     186                $line = 0;      // 現在行数 
    185187                $regist = 0;    // 登録数 
    186188 
     
    192194                while(!feof($fp) && !$err) { 
    193195                    $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 
    194  
    195196                    // 行カウント 
    196197                    $line++; 
    197  
    198198                    if($line <= 1) { 
    199199                        continue; 
    200200                    } 
    201  
    202                     // 項目数カウント 
    203                     $max = count($arrCSV); 
    204  
     201                    // 現在行の項目数カウント 
     202                    $line_col_count = count($arrCSV); 
    205203                    // 項目数が1以下の場合は無視する 
    206                     if($max <= 1) { 
     204                    if($line_col_count <= 1) { 
    207205                        continue; 
    208206                    } 
    209207 
    210208                    // 項目数チェック 
    211                     if($max != $colmax) { 
    212                         echo "※ 項目数が" . $max . "個検出されました。項目数は" . $colmax . "個になります。</br>\n"; 
     209                    if($line_col_count != $col_count) { 
     210                        echo "※ 項目数が" . $line_col_count . "個検出されました。項目数は" . $col_count . "個になります。</br>\n"; 
    213211                        $err = true; 
    214212                    } else { 
     
    225223                    // 入力エラーチェック 
    226224                    if(count($arrCSVErr) > 0) { 
    227                         echo "<font color=\"red\">■" . $line . "行目でエラーが発生しました。</font></br>\n"; 
     225                        echo "<font color=\"red\">■ $line / $record_count 行目でエラーが発生しました。</font></br>\n"; 
    228226                        foreach($arrCSVErr as $val) { 
    229227                            $this->printError($val); 
     
    238236                    $arrParam = $this->objFormParam->getHashArray(); 
    239237 
    240                     if(!$err) echo $line." / ".$rec_count. "行目 (商品ID:".$arrParam['product_id']." / 商品名:".$arrParam['name'].")\n<br />"; 
     238                    if(!$err) echo $line. "行目 (商品ID:".$arrParam['product_id']." / 商品名:".$arrParam['name'].")\n<br />"; 
    241239                    flush(); 
    242240                } 
     
    299297        // CSV項目毎の処理 
    300298        foreach($arrCSVFrame as $item) { 
    301             if($item['status'] == '2') continue; 
     299            if($item['status'] == CSV_COLUMN_STATUS_FLG_DISABLE) continue; 
    302300            //サブクエリ構造の場合は AS名 を使用 
    303301            if(preg_match_all('/\(.+\) as (.+)$/i', $item['col'], $match, PREG_SET_ORDER)) { 
     
    329327                    , $arrErrorCheckTypes 
    330328                    , $item['default'] 
    331                     , ($item['rw_flg'] != 2) ? true : false 
     329                    , ($item['rw_flg'] != CSV_COLUMN_RW_FLG_READ_ONLY) ? true : false 
    332330                    ); 
    333331        } 
     
    516514                    $arrCSVFrame[$key]['default'] = implode(',',array_keys($this->arrPayments)); 
    517515                    break; 
     516                case 'stock_unlimited': 
     517                    $arrCSVFrame[$key]['default'] = UNLIMITED_FLG_LIMITED; 
    518518                default: 
    519519                    break; 
     
    562562            } 
    563563            // TODO: 在庫数、無制限フラグの扱いについて仕様がぶれているので要調整 
    564             if($sqlval['stock'] == "" and $sqlval['stock_unlimited'] != '1') { 
     564            if($sqlval['stock'] == "" and $sqlval['stock_unlimited'] != UNLIMITED_FLG_UNLIMITED) { 
    565565                //在庫数設定がされておらず、かつ無制限フラグが設定されていない場合、強制無制限 
    566                 $sqlval['stock_unlimited'] = '1'; 
    567             }elseif($sqlval['stock'] != "" and $sqlval['stock_unlimited'] != '1') { 
     566                $sqlval['stock_unlimited'] = UNLIMITED_FLG_UNLIMITED; 
     567            }elseif($sqlval['stock'] != "" and $sqlval['stock_unlimited'] != UNLIMITED_FLG_UNLIMITED) { 
    568568                //在庫数設定時は在庫無制限フラグをクリア 
    569                 $sqlval['stock_unlimited'] = '0'; 
    570             }elseif($sqlval['stock'] != "" and $sqlval['stock_unlimited'] == '1') { 
     569                $sqlval['stock_unlimited'] = UNLIMITED_FLG_LIMITED; 
     570            }elseif($sqlval['stock'] != "" and $sqlval['stock_unlimited'] == UNLIMITED_FLG_UNLIMITED) { 
    571571                //在庫無制限フラグ設定時は在庫数をクリア 
    572572                $sqlval['stock'] = ''; 
     
    574574        }else{ 
    575575            //更新時のみ設定する項目 
    576             if(array_key_exists('stock_unlimited', $sqlval) and $sqlval['stock_unlimited'] == '1') { 
     576            if(array_key_exists('stock_unlimited', $sqlval) and $sqlval['stock_unlimited'] == UNLIMITED_FLG_UNLIMITED) { 
    577577                $sqlval['stock'] = ''; 
    578578            } 
     
    676676            if(array_search('stock_unlimited', $this->arrFormKeyList) === FALSE) { 
    677677                $arrErr['stock'] = "※ 在庫数は必須です(無制限フラグ項目がある場合のみ空欄許可)。"; 
    678             }else if($item['stock_unlimited'] != "1") { 
     678            }else if($item['stock_unlimited'] != UNLIMITED_FLG_UNLIMITED) { 
    679679                $arrErr['stock'] = "※ 在庫数または在庫無制限フラグのいずれかの入力が必須です。"; 
    680680            } 
  • branches/version-2_5-dev/data/mtb_constants_init.php

    r19943 r19950  
    603603/** 配置ID: HeaderInternalNavi */ 
    604604define('TARGET_ID_HEADER_INTERNAL', 10); 
     605/** CSV入出力列設定有効無効フラグ: 有効 */ 
     606define('CSV_COLUMN_STATUS_FLG_ENABLE', 1); 
     607/** CSV入出力列設定有効無効フラグ: 無効 */ 
     608define('CSV_COLUMN_STATUS_FLG_DISABLE', 2); 
     609/** CSV入出力列設定読み書きフラグ: 読み書き可能 */ 
     610define('CSV_COLUMN_RW_FLG_READ_WRITE', 1); 
     611/** CSV入出力列設定読み書きフラグ: 読み込みのみ可能 */ 
     612define('CSV_COLUMN_RW_FLG_READ_ONLY', 2); 
     613/** CSV入出力列設定読み書きフラグ: キー列 */ 
     614define('CSV_COLUMN_RW_FLG_KEY_FIELD', 3); 
     615/** 無制限フラグ: 無制限 */ 
     616define('UNLIMITED_FLG_UNLIMITED', "1"); 
     617/** 無制限フラグ: 制限有り */ 
     618define('UNLIMITED_FLG_LIMITED', "0"); 
    605619?> 
Note: See TracChangeset for help on using the changeset viewer.