Changeset 22254 for branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php
- Timestamp:
- 2013/01/16 12:18:03 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php
r22251 r22254 160 160 161 161 /** 162 * CSVファイルを読み込んで、保存処理を行う 163 * 164 * @param $objFormParam 165 * @param $fp CSVファイルポインタ 166 * @param $objQuery 保存を行うためのクエリ(指定がない場合、テストのみを行う) 167 * @return boolean errFlag. 読み込みに失敗した場合true 168 */ 169 function lfReadCSVFile(&$objFormParam, &$fp, $objQuery = null) { 170 $dry_run = ($objQuery===null) ? true : false; 171 // 登録対象の列数 172 $col_max_count = $objFormParam->getCount(); 173 // 行数 174 $line_count = 0; 175 // 処理に失敗した場合にtrue 176 $errFlag = false; 177 178 while (!feof($fp)) { 179 $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 180 181 // 行カウント 182 $line_count++; 183 // ヘッダ行はスキップ 184 if ($line_count == 1) { 185 continue; 186 } 187 // 空行はスキップ 188 if (empty($arrCSV)) { 189 continue; 190 } 191 // 列数が多すぎる場合はエラー、列数が少ない場合は未設定として配列を補う 192 $col_count = count($arrCSV); 193 if ($col_count > $col_max_count) { 194 $this->addRowErr($line_count, '※ 項目数が' . $col_count . '個検出されました。項目数は' . $col_max_count . '個になります。'); 195 $errFlag = true; 196 break; 197 } elseif ($col_count < $col_max_count) { 198 $arrCSV = array_pad($arrCSV, $col_max_count, ""); 199 if (!$dry_run) { 200 $this->addRowResult($line_count, ($col_count + 1) . "項目以降を空欄として読み込みました"); 201 } 202 } 203 204 // シーケンス配列を格納する。 205 $objFormParam->setParam($arrCSV, true); 206 $arrRet = $objFormParam->getHashArray(); 207 $objFormParam->setParam($arrRet); 208 // 入力値の変換 209 $objFormParam->convParam(); 210 211 // <br>なしでエラー取得する。 212 $arrCSVErr = $this->lfCheckError($objFormParam); 213 if (count($arrCSVErr) > 0) { 214 foreach ($arrCSVErr as $err) { 215 $this->addRowErr($line_count, $err); 216 } 217 $errFlag = true; 218 break; 219 } 220 221 if (!$dry_run) { 222 $this->lfRegistProduct($objQuery, $line_count, $objFormParam); 223 $arrParam = $objFormParam->getHashArray(); 224 225 $this->addRowResult($line_count, '商品ID:'.$arrParam['product_id'] . ' / 商品名:' . $arrParam['name']); 226 } 227 SC_Utils_Ex::extendTimeOut(); 228 } 229 return $errFlag; 230 } 231 232 /** 162 233 * CSVアップロードを実行します. 163 234 * … … 192 263 $this->arrFormKeyList = $objFormParam->getKeyList(); 193 264 194 // 登録対象の列数195 $col_max_count = $objFormParam->getCount();196 // 行数197 $line_count = 0;198 199 265 $objQuery =& SC_Query_Ex::getSingletonInstance(); 200 266 $objQuery->begin(); 201 267 202 $errFlag = false; 203 $all_line_checked = false; 204 205 while (!feof($fp)) { 206 $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 207 208 // 全行入力チェック後に、ファイルポインターを先頭に戻す 209 if (feof($fp) && !$all_line_checked) { 210 rewind($fp); 211 $line_count = 0; 212 $all_line_checked = true; 213 continue; 214 } 215 216 // 行カウント 217 $line_count++; 218 // ヘッダ行はスキップ 219 if ($line_count == 1) { 220 continue; 221 } 222 // 空行はスキップ 223 if (empty($arrCSV)) { 224 continue; 225 } 226 // 列数が多すぎる場合はエラー、列数が少ない場合は未設定として配列を補う 227 $col_count = count($arrCSV); 228 if ($col_count > $col_max_count) { 229 $this->addRowErr($line_count, '※ 項目数が' . $col_count . '個検出されました。項目数は' . $col_max_count . '個になります。'); 230 $errFlag = true; 231 break; 232 } elseif ($col_count < $col_max_count) { 233 $arrCSV = array_pad($arrCSV, $col_max_count, ""); 234 $this->addRowResult($line_count, ($col_count + 1) . "項目以降を空欄として読み込みました"); 235 } 236 // シーケンス配列を格納する。 237 $objFormParam->setParam($arrCSV, true); 238 $arrRet = $objFormParam->getHashArray(); 239 $objFormParam->setParam($arrRet); 240 // 入力値の変換 241 $objFormParam->convParam(); 242 // <br>なしでエラー取得する。 243 $arrCSVErr = $this->lfCheckError($objFormParam); 244 245 // 入力エラーチェック 246 if (count($arrCSVErr) > 0) { 247 foreach ($arrCSVErr as $err) { 248 $this->addRowErr($line_count, $err); 249 } 250 $errFlag = true; 251 break; 252 } 253 254 if ($all_line_checked) { 255 $this->lfRegistProduct($objQuery, $line_count, $objFormParam); 256 $arrParam = $objFormParam->getHashArray(); 257 258 $this->addRowResult($line_count, '商品ID:'.$arrParam['product_id'] . ' / 商品名:' . $arrParam['name']); 259 } 260 SC_Utils_Ex::extendTimeOut(); 268 // CSVからの読み込み、入力エラーチェック 269 $errFlag = $this->lfReadCSVFile($objFormParam, $fp); 270 if (!$errFlag) { 271 rewind($fp); 272 // CSVからの読み込み、保存 273 $errFlag = $this->lfReadCSVFile($objFormParam, $fp, $objQuery); 261 274 } 262 275
Note: See TracChangeset
for help on using the changeset viewer.