/** * フォーム入力パラメーターのエラーチェック * * @param object $objFormParam FormParamインスタンス * @param UploadFile $objUpFile UploadFileインスタンス * @param UploadFile $objDownFile UploadFileインスタンス * @param array $arrForm フォーム入力パラメーター配列 * @return array エラー情報を格納した連想配列 */ public function lfCheckError_Edit(&$objFormParam, &$objUpFile, &$objDownFile, $arrForm) { /* @var $objErr CheckError */ $objErr = Application::alias('eccube.check_error', $arrForm); $arrErr = array(); // 入力パラメーターチェック $arrErr = $objFormParam->checkError(); // アップロードファイル必須チェック $arrErr = array_merge((array) $arrErr, (array) $objUpFile->checkExists()); // HTMLタグ許可チェック $objErr->doFunc(array('詳細-メインコメント', 'main_comment', $this->arrAllowedTag), array('HTML_TAG_CHECK')); for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { $objErr->doFunc(array('詳細-サブコメント' . $cnt, 'sub_comment' . $cnt, $this->arrAllowedTag), array('HTML_TAG_CHECK')); } // 規格情報がない商品の場合のチェック if ($arrForm['has_product_class'] != true) { // 在庫必須チェック(在庫無制限ではない場合) if ($arrForm['stock_unlimited'] != UNLIMITED_FLG_UNLIMITED) { $objErr->doFunc(array('在庫数', 'stock'), array('EXIST_CHECK')); } // ダウンロード商品ファイル必須チェック(ダウンロード商品の場合) if ($arrForm['product_type_id'] == PRODUCT_TYPE_DOWNLOAD) { $arrErr = array_merge((array) $arrErr, (array) $objDownFile->checkExists()); $objErr->doFunc(array('ダウンロード商品ファイル名', 'down_filename'), array('EXIST_CHECK')); } } $arrErr = array_merge((array) $arrErr, (array) $objErr->arrErr); return $arrErr; }
/** * CSVアップロードを実行する * * @param FormParam $objFormParam * @param UploadFile $objUpFile * @return void */ public function doUploadCsv(&$objFormParam, &$objUpFile) { // ファイルアップロードのチェック $objUpFile->makeTempFile('csv_file'); $arrErr = $objUpFile->checkExists(); if (count($arrErr) > 0) { $this->arrErr = $arrErr; return; } // 一時ファイル名の取得 $filepath = $objUpFile->getTempFilePath('csv_file'); // CSVファイルの文字コード変換 $enc_filepath = Utils::sfEncodeFile($filepath, CHAR_CODE, CSV_TEMP_REALDIR); // CSVファイルのオープン $fp = fopen($enc_filepath, 'r'); // 失敗した場合はエラー表示 if (!$fp) { Utils::sfDispError(''); } // 登録先テーブル カラム情報の初期化 $this->lfInitTableInfo(); // 登録フォーム カラム情報 $this->arrFormKeyList = $objFormParam->getKeyList(); // 登録対象の列数 $col_max_count = $objFormParam->getCount(); // 行数 $line_count = 0; $objQuery = Application::alias('eccube.query'); $objQuery->begin(); $errFlag = false; while (!feof($fp)) { $arrCSV = fgetcsv($fp, CSV_LINE_MAX); // 行カウント $line_count++; // ヘッダ行はスキップ if ($line_count == 1) { continue; } // 空行はスキップ if (empty($arrCSV)) { continue; } // 列数が異なる場合はエラー $col_count = count($arrCSV); if ($col_max_count != $col_count) { $this->addRowErr($line_count, '※ 項目数が' . $col_count . '個検出されました。項目数は' . $col_max_count . '個になります。'); $errFlag = true; break; } // シーケンス配列を格納する。 $objFormParam->setParam($arrCSV, true); // 入力値の変換 $objFormParam->convParam(); // <br>なしでエラー取得する。 $arrCSVErr = $this->lfCheckError($objFormParam); // 入力エラーチェック if (count($arrCSVErr) > 0) { foreach ($arrCSVErr as $err) { $this->addRowErr($line_count, $err); } $errFlag = true; break; } $category_id = $this->lfRegisterCategory($line_count, $objFormParam); $this->addRowResult($line_count, 'カテゴリID:' . $category_id . ' / カテゴリ名:' . $objFormParam->getValue('category_name')); } // 実行結果画面を表示 $this->tpl_mainpage = 'products/upload_csv_category_complete.tpl'; fclose($fp); if ($errFlag) { $objQuery->rollback(); return; } $objQuery->commit(); // カテゴリ件数を更新 /* @var $objDb DbHelper */ $objDb = Application::alias('eccube.helper.db'); $objDb->countCategory($objQuery); return; }