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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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            } 
Note: See TracChangeset for help on using the changeset viewer.