Changeset 19752
- Timestamp:
- 2010/12/20 08:53:26 (12 years ago)
- Location:
- branches/version-2_5-dev/data/class
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/class/SC_FormParam.php
r18777 r19752 105 105 106 106 if($find) { 107 $this->html_disp_name[$cnt] = $this->disp_name[$cnt] . "<span class='red'>(※ 必須)</span>";107 $this->html_disp_name[$cnt] = $this->disp_name[$cnt] . '<span class="red">(※ 必須)</span>'; 108 108 } else { 109 109 $this->html_disp_name[$cnt] = $this->disp_name[$cnt]; 110 } 111 if($this->default[$cnt] != "") { 112 $this->html_disp_name[$cnt] .= ' [省略時初期値: ' . $this->default[$cnt] . ']'; 113 } 114 if($this->input_db[$cnt] == false) { 115 $this->html_disp_name[$cnt] .= ' [登録・更新不可] '; 110 116 } 111 117 $cnt++; -
branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php
r19746 r19752 62 62 * @param string $where SQL の WHERE 句 63 63 * @param array $arrVal WHERE 句の要素 64 * @param array $order SQL の ORDER BY 句 64 65 * @return array CSV 項目の配列 65 66 */ 66 function sfgetCsvOutput($csv_id = "", $where = '0=0', $arrVal = array()){ 67 $objQuery = new SC_Query(); 68 $ret = array(); 69 70 $sql = <<< __EOS__ 71 SELECT 72 no, 73 csv_id, 74 col, 75 disp_name, 76 rank, 77 status, 78 create_date, 79 update_date, 80 mb_convert_kana_option 81 FROM 82 dtb_csv 83 __EOS__; 84 85 if (strlen($csv_id) >= 1) { 86 $where = "($where) AND csv_id = ?"; 67 function sfgetCsvOutput($csv_id = "", $where = '', $arrVal = array(), $order = 'rank, no'){ 68 $objQuery =& SC_Query::getSingletonInstance(); 69 70 $cols = 'no, csv_id, col, disp_name, rank, status, rw_flg, mb_convert_kana_option, size_const_type, error_check_types'; 71 $table = 'dtb_csv'; 72 73 if(SC_Utils_Ex::sfIsInt($csv_id)){ 74 if($where == "") { 75 $where = "csv_id = ?"; 76 }else{ 77 $where = "$where AND csv_id = ?"; 78 } 87 79 $arrVal[] = $csv_id; 88 80 } 89 90 if (strlen($where) >= 1) { 91 $sql .= " WHERE $where"; 92 } 93 94 $sql .= " ORDER BY "; 95 $sql .= " rank , no"; 96 $sql .= " "; 97 98 $ret = $objQuery->getAll($sql, $arrVal); 99 100 return $ret; 81 $objQuery->setOrder($order); 82 83 $arrRet = $objQuery->select($cols, $table, $where, $arrVal); 84 return $arrRet; 101 85 } 102 86 … … 121 105 } 122 106 107 /** 108 * CSVが出力設定でインポート可能かのチェック 109 * 110 * @param array sfgetCsvOutputで取得した内容(またはそれと同等の配列) 111 * @return boolean true:インポート可能、false:インポート不可 112 */ 113 function sfIsImportCSVFrame(&$arrCSVFrame) { 114 $result = true; 115 foreach($arrCSVFrame as $key => $val) { 116 if($val['status'] != "1" 117 and $val['rw_flg'] == "1" 118 and $val['error_check_types'] != "" 119 and stripos($val['error_check_types'], "EXIST_CHECK") !== FALSE) { 120 //必須フィールド 121 $result = false; 122 } 123 } 124 return $result; 125 } 126 127 /** 128 * CSVが出力設定で更新可能かのチェック 129 * 130 * @param array sfgetCsvOutputで取得した内容(またはそれと同等の配列) 131 * @return boolean true:更新可能、false:新規追加のみ不可 132 */ 133 function sfIsUpdateCSVFrame(&$arrCSVFrame) { 134 $result = true; 135 foreach($arrCSVFrame as $key => $val) { 136 if($val['status'] != "1" 137 and $val['rw_flg'] == "3") { 138 //キーフィールド 139 $result = false; 140 } 141 } 142 return $result; 143 } 144 145 /** 146 * CSVファイルのカウント数を得る. 147 * 148 * @param resource $fp fopenを使用して作成したファイルポインタ 149 * @return integer CSV のカウント数 150 */ 151 function sfGetCSVRecordCount($fp) { 152 153 $count = 0; 154 while(!feof($fp)) { 155 $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 156 $count++; 157 } 158 // ファイルポインタを戻す 159 if (rewind($fp)) { 160 return $count-1; 161 } else { 162 return FALSE; 163 } 164 } 165 123 166 // CSV作成 コールバック関数 124 167 function cbOutputProductCSV($data) { … … 140 183 $arrOutputCols = $arrOutput['col']; 141 184 142 $objQuery = new SC_Query();185 $objQuery =& SC_Query::getSingletonInstance(); 143 186 $objQuery->setOrder($order); 144 187 145 188 $objProduct = new SC_Product(); 146 189 $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols, true); 147 $sql = $objQuery->getSql($cols, $objProduct->prdclsSQL(),$where); 190 // このWhereを足さないと無効な規格も出力される。現行仕様と合わせる為追加。 191 $inner_where = 'dtb_products_class.del_flg = 0'; 192 $sql = $objQuery->getSql($cols, $objProduct->prdclsSQL($inner_where),$where); 148 193 $header = $this->sfArrayToCSV($arrOutput['disp_name']); 149 194 $header = mb_convert_encoding($header, 'SJIS-Win'); … … 182 227 $cols = SC_Utils_Ex::sfGetCommaList($this->arrREVIEW_CVSCOL); 183 228 184 $objQuery = new SC_Query();229 $objQuery =& SC_Query::getSingletonInstance(); 185 230 $objQuery->setOption($option); 186 231 … … 201 246 $cols = SC_Utils_Ex::sfGetCommaList($this->arrTRACKBACK_CVSCOL); 202 247 203 $objQuery = new SC_Query();248 $objQuery =& SC_Query::getSingletonInstance(); 204 249 $objQuery->setOption($option); 205 250 … … 223 268 $arrOutputCols = $arrOutput['col']; 224 269 225 $objQuery = new SC_Query();270 $objQuery =& SC_Query::getSingletonInstance(); 226 271 $objQuery->setOrder('rank DESC'); 227 272 … … 254 299 $cols = SC_Utils_Ex::sfGetCommaList($arrCsvOutputCols); 255 300 256 $objQuery = new SC_Query();301 $objQuery =& SC_Query::getSingletonInstance(); 257 302 $objQuery->setOption($option); 258 303 -
branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php
r19670 r19752 24 24 // {{{ requires 25 25 require_once(CLASS_PATH . "pages/admin/LC_Page_Admin.php"); 26 require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_CSV_Ex.php"); 26 27 27 28 /** … … 44 45 /** SC_UploadFile インスタンス */ 45 46 var $objUpfile; 47 48 /** TAGエラーチェックフィールド情報 */ 49 var $arrTagCheckItem; 50 51 /** 商品テーブルカラム情報 (登録処理用) **/ 52 var $arrProductColumn; 53 54 /** 商品規格テーブルカラム情報 (登録処理用) **/ 55 var $arrProductClassColumn; 56 57 /** 登録フォームカラム情報 **/ 58 var $arrFormKeyList; 46 59 47 60 /** … … 57 70 $this->tpl_subno = 'upload_csv'; 58 71 $this->tpl_subtitle = '商品登録CSV'; 72 $this->csv_id = '1'; 73 74 $masterData = new SC_DB_MasterData_Ex(); 75 $this->arrDISP = $masterData->getMasterData("mtb_disp"); 76 $this->arrSTATUS = $masterData->getMasterData("mtb_status"); 77 $this->arrDELIVERYDATE = $masterData->getMasterData("mtb_delivery_date"); 78 $this->arrProductType = $masterData->getMasterData("mtb_product_type"); 79 $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"); 81 $this->arrTagCheckItem = array(); 59 82 } 60 83 … … 76 99 function action() { 77 100 $objSess = new SC_Session(); 78 $ objDb = new SC_Helper_DB_Ex();101 $this->objDb = new SC_Helper_DB_Ex(); 79 102 $objView = new SC_SiteView(); 80 103 … … 84 107 // ファイル管理クラス 85 108 $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR); 86 // ファイル情報の初期化 109 // サイト基本情報 (ポイントレート初期値用) 110 $this->arrInfo = $this->objDb->sfGetBasisData(); 111 // CSV管理ヘルパー 112 $this->objCSV = new SC_Helper_CSV(); 113 // CSV構造読み込み 114 $arrCSVFrame = $this->objCSV->sfgetCsvOutput($this->csv_id); 115 116 // CSV構造がインポート可能かのチェック 117 if( !$this->objCSV->sfIsImportCSVFrame($arrCSVFrame) ) { 118 // 無効なフォーマットなので初期状態に強制変更 119 $arrCSVFram = $this->objCSV->sfgetCsvOutput($this->csv_id, '', array(), $order ='no'); 120 $this->tpl_is_format_default = true; 121 } 122 // CSV構造は更新可能なフォーマットかのフラグ取得 123 $this->tpl_is_update = $this->objCSV->sfIsUpdateCSVFrame($arrCSVFrame); 124 125 // CSVファイルアップロード情報の初期化 87 126 $this->lfInitFile(); 88 127 // パラメータ管理クラス 89 128 $this->objFormParam = new SC_FormParam(); 90 129 // パラメータ情報の初期化 91 $this->lfInitParam(); 130 $this->lfInitParam($arrCSVFrame); 131 92 132 $colmax = $this->objFormParam->getCount(); 93 133 $this->objFormParam->setHtmlDispNameArray(); … … 98 138 switch($_POST['mode']) { 99 139 case 'csv_upload': 140 // 登録先テーブル カラム情報の初期化 141 $this->lfInitTableInfo(); 142 // 登録フォーム カラム情報 143 $this->arrFormKeyList = $this->objFormParam->getKeyList(); 144 100 145 $err = false; 101 // エラーチェック146 // CSVファイルアップロード エラーチェック 102 147 $arrErr['csv_file'] = $this->objUpFile->makeTempFile('csv_file'); 103 148 … … 132 177 133 178 // レコード数を得る 134 $rec_count = $this->lfCSVRecordCount($fp); 179 $rec_count = $this->objCSV->sfGetCSVRecordCount($fp); 180 if($rec_count === FALSE) { 181 SC_Utils_Ex::sfDispError(""); 182 } 135 183 136 184 $line = 0; // 行数 137 185 $regist = 0; // 登録数 138 186 139 $objQuery = new SC_Query();187 $objQuery =& SC_Query::getSingletonInstance(); 140 188 $objQuery->begin(); 141 189 … … 175 223 } 176 224 177 //販売方法チェックを行う178 $this->checkSalesKind( $this->objFormParam->keyname ,$arrCSV , $arrCSVErr );179 180 225 // 入力エラーチェック 181 226 if(count($arrCSVErr) > 0) { … … 202 247 echo "■" . $regist . "件のレコードを登録しました。"; 203 248 // 商品件数カウント関数の実行 204 $ objDb->sfCategory_Count($objQuery);205 $ objDb->sfMaker_Count($objQuery);249 $this->objDb->sfCategory_Count($objQuery); 250 $this->objDb->sfMaker_Count($objQuery); 206 251 } else { 207 252 $objQuery->rollback(); … … 233 278 } 234 279 235 236 280 /** 237 281 * ファイル情報の初期化を行う. … … 247 291 * 入力情報の初期化を行う. 248 292 * 249 * @return void 250 */ 251 function lfInitParam() { 252 253 // 商品ステータスの上限文字数の算出 254 $masterData = new SC_DB_MasterData_Ex(); 255 $arrSTATUS = $masterData->getMasterData("mtb_status"); 256 $product_flag_maxlen = max(array_keys($arrSTATUS)); 257 unset($arrSTATUS); 258 unset($masterData); 259 260 $this->objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK")); 261 $this->objFormParam->addParam("商品規格ID", "product_class_id", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK")); 262 263 $this->objFormParam->addParam("規格名1", "dummy1"); 264 $this->objFormParam->addParam("規格名2", "dummy2"); 265 266 $this->objFormParam->addParam("商品名", "name", STEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK")); 267 $this->objFormParam->addParam("公開フラグ(1:公開 2:非公開)", "status", INT_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK")); 268 $this->objFormParam->addParam("商品ステータス", "product_flag", $product_flag_maxlen, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK")); 269 $this->objFormParam->addParam("商品コード", "product_code", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 270 $this->objFormParam->addParam(NORMAL_PRICE_TITLE, "price01", PRICE_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK")); 271 $this->objFormParam->addParam(SALE_PRICE_TITLE, "price02", PRICE_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK")); 272 $this->objFormParam->addParam("在庫数", "stock", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK")); 273 $this->objFormParam->addParam("送料", "deliv_fee", PRICE_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK")); 274 $this->objFormParam->addParam("ポイント付与率", "point_rate", PERCENTAGE_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK")); 275 $this->objFormParam->addParam("購入制限", "sale_limit", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK")); 276 $this->objFormParam->addParam("メーカーURL", "comment1", URL_LEN, "KVa", array("SPTAB_CHECK","URL_CHECK","MAX_LENGTH_CHECK")); 277 $this->objFormParam->addParam("検索ワード", "comment3", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 278 $this->objFormParam->addParam("備考欄(SHOP専用)", "note", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 279 $this->objFormParam->addParam("一覧-メインコメント", "main_list_comment", MTEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK")); 280 $this->objFormParam->addParam("一覧-メイン画像", "main_list_image", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 281 $this->objFormParam->addParam("メインコメント", "main_comment", LLTEXT_LEN, "KVa", array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK")); 282 $this->objFormParam->addParam("メイン画像", "main_image", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 283 $this->objFormParam->addParam("メイン拡大画像", "main_large_image", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 284 $this->objFormParam->addParam("詳細-サブタイトル(1)", "sub_title1", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 285 $this->objFormParam->addParam("詳細-サブコメント(1)", "sub_comment1", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 286 $this->objFormParam->addParam("詳細-サブ画像(1)", "sub_image1", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 287 $this->objFormParam->addParam("詳細-サブ拡大画像(1)", "sub_large_image1", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 288 289 $this->objFormParam->addParam("詳細-サブタイトル(2)", "sub_title2", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 290 $this->objFormParam->addParam("詳細-サブコメント(2)", "sub_comment2", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 291 $this->objFormParam->addParam("詳細-サブ画像(2)", "sub_image2", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 292 $this->objFormParam->addParam("詳細-サブ拡大画像(2)", "sub_large_image2", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 293 294 $this->objFormParam->addParam("詳細-サブタイトル(3)", "sub_title3", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 295 $this->objFormParam->addParam("詳細-サブコメント(3)", "sub_comment3", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 296 $this->objFormParam->addParam("詳細-サブ画像(3)", "sub_image3", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 297 $this->objFormParam->addParam("詳細-サブ拡大画像(3)", "sub_large_image3", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 298 299 $this->objFormParam->addParam("詳細-サブタイトル(4)", "sub_title4", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 300 $this->objFormParam->addParam("詳細-サブコメント(4)", "sub_comment4", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 301 $this->objFormParam->addParam("詳細-サブ画像(4)", "sub_image4", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 302 $this->objFormParam->addParam("詳細-サブ拡大画像(4)", "sub_large_image4", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 303 304 $this->objFormParam->addParam("詳細-サブタイトル(5)", "sub_title5", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 305 $this->objFormParam->addParam("詳細-サブコメント(5)", "sub_comment5", LLTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 306 $this->objFormParam->addParam("詳細-サブ画像(5)", "sub_image5", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 307 $this->objFormParam->addParam("詳細-サブ拡大画像(5)", "sub_large_image5", LTEXT_LEN, "KVa", array("FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 308 309 $this->objFormParam->addParam("発送日目安", "deliv_date_id", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK")); 310 311 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 312 $this->objFormParam->addParam("関連商品($cnt)", "recommend_product_id$cnt", INT_LEN, "n", array("MAX_LENGTH_CHECK","NUM_CHECK")); 313 $this->objFormParam->addParam("関連商品コメント($cnt)", "recommend_comment$cnt", LTEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 314 } 315 316 $this->objFormParam->addParam("実商品・ダウンロード(1:実商品 2:ダウンロード)", "down", INT_LEN, "n", array("EXIST_CHECK","MAX_LENGTH_CHECK","NUM_CHECK")); 317 $this->objFormParam->addParam("ダウンロードファイル名", "down_filename", STEXT_LEN, "KVa", array("SPTAB_CHECK","MAX_LENGTH_CHECK")); 318 $this->objFormParam->addParam("ダウンロード商品用ファイル", "down_realfilename", LTEXT_LEN, "KVa", array("DOWN_FILE_EXISTS","SPTAB_CHECK","MAX_LENGTH_CHECK")); 319 320 $this->objFormParam->addParam("商品カテゴリ", "category_id", STEXT_LEN, "n", array("EXIST_CHECK", "SPTAB_CHECK")); 321 } 322 293 * @param array CSV構造設定配列 294 * @return void 295 */ 296 function lfInitParam(&$arrCSVFrame) { 297 // 固有の初期値調整 298 $arrCSVFrame = $this->lfSetParamDefaultValue($arrCSVFrame); 299 // CSV項目毎の処理 300 foreach($arrCSVFrame as $item) { 301 if($item['status'] == '2') continue; 302 //サブクエリ構造の場合は AS名 を使用 303 if(preg_match_all('/\(.+\) as (.+)$/i', $item['col'], $match, PREG_SET_ORDER)) { 304 $col = $match[0][1]; 305 }else{ 306 $col = $item['col']; 307 } 308 // HTML_TAG_CHECKは別途実行なので除去し、別保存しておく 309 if(stripos($item['error_check_types'], 'HTML_TAG_CHECK') !== FALSE) { 310 $this->arrTagCheckItem[] = $item; 311 $error_check_types = str_replace('HTML_TAG_CHECK', '', $item['error_check_types']); 312 }else{ 313 $error_check_types = $item['error_check_types']; 314 } 315 $arrErrorCheckTypes = explode(',', $error_check_types); 316 foreach($arrErrorCheckTypes as $key => $val) { 317 if(trim($val) == "") { 318 unset($arrErrorCheckTypes[$key]); 319 }else{ 320 $arrErrorCheckTypes[$key] = trim($val); 321 } 322 } 323 // パラメーター登録 324 $this->objFormParam->addParam( 325 $item['disp_name'] 326 , $col 327 , constant($item['size_const_type']) 328 , $item['mb_convert_kana_option'] 329 , $arrErrorCheckTypes 330 , $item['default'] 331 , ($item['rw_flg'] != 2) ? true : false 332 ); 333 } 334 } 335 336 /** 337 * 入力チェックを行う. 338 * 339 * @return void 340 */ 341 function lfCheckError() { 342 // 入力データを渡す。 343 $arrRet = $this->objFormParam->getHashArray(); 344 $objErr = new SC_CheckError($arrRet); 345 $objErr->arrErr = $this->objFormParam->checkError(false); 346 // HTMLタグチェックの実行 347 foreach($this->arrTagCheckItem as $item) { 348 $objErr->doFunc(array( $item['disp_name'], $item['col'], $this->arrAllowedTag), array("HTML_TAG_CHECK")); 349 } 350 // このフォーム特有の複雑系のエラーチェックを行う 351 if(count($objErr->arrErr) == 0) { 352 $objErr->arrErr = $this->lfCheckErrorDetail($arrRet, $objErr->arrErr); 353 } 354 return $objErr->arrErr; 355 } 356 357 /** 358 * 保存先テーブル情報の初期化を行う. 359 * 360 * @return void 361 */ 362 function lfInitTableInfo() { 363 $objQuery =& SC_Query::getSingletonInstance(); 364 $this->arrProductColumn = $objQuery->listTableFields('dtb_products'); 365 $this->arrProductClassColumn = $objQuery->listTableFields('dtb_products_class'); 366 } 367 323 368 /** 324 369 * 商品登録を行う. 370 * 371 * FIXME: 商品登録の実処理自体は、LC_Page_Admin_Products_Productと共通化して欲しい。 325 372 * 326 373 * @param SC_Query $objQuery SC_Queryインスタンス … … 329 376 */ 330 377 function lfRegistProduct($objQuery, $line = "") { 331 332 $objDb = new SC_Helper_DB_Ex(); 333 334 $arrRet = $this->objFormParam->getHashArray(); 335 336 // dtb_products以外に登録される値を除外する。 337 foreach($arrRet as $key => $val) { 338 switch($key) { 339 case 'product_code': 340 case 'price01': 341 case 'price02': 342 case 'stock': 343 case 'product_class_id': 344 case 'recommend_product_id1': 345 case 'recommend_product_id2': 346 case 'recommend_product_id3': 347 case 'recommend_product_id4': 348 case 'recommend_product_id5': 349 case 'recommend_product_id6': 350 case 'recommend_comment1': 351 case 'recommend_comment2': 352 case 'recommend_comment3': 353 case 'recommend_comment4': 354 case 'recommend_comment5': 355 case 'recommend_comment6': 356 case 'category_id': 357 break; 358 default: 359 if(!ereg("^dummy", $key)) { 360 $sqlval[$key] = $val; 361 } 362 break; 363 } 364 } 365 378 $objProduct = new SC_Product(); 379 // 登録データ対象取得 380 $arrList = $this->objFormParam->getHashArray(); 366 381 // 登録時間を生成(DBのnow()だとcommitした際、すべて同一の時間になってしまう) 367 $time = date("Y-m-d H:i:s"); 368 // 秒以下を生成 369 if($line != "") { 370 $microtime = sprintf("%06d", $line); 371 $time .= ".$microtime"; 372 } 373 $sqlval['update_date'] = $time; 374 $sqlval['creator_id'] = $_SESSION['member_id']; 375 376 if($sqlval['status'] == "") { 377 $sqlval['status'] = 2; 378 } 382 $arrList['update_date'] = $this->lfGetDbFormatTimeWithLine($line); 383 384 // 商品登録情報を生成する。 385 // 商品テーブルのカラムに存在しているもののうち、Form投入設定されていないデータは上書きしない。 386 $sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $this->arrProductColumn); 387 388 // 必須入力では無い項目だが、空文字では問題のある特殊なカラム値の初期値設定 389 $sqlval = $this->lfSetProductDefaultData($sqlval); 379 390 380 391 if($sqlval['product_id'] != "") { 381 382 392 // UPDATEの実行 383 393 $where = "product_id = ?"; 384 394 $objQuery->update("dtb_products", $sqlval, $where, array($sqlval['product_id'])); 385 386 395 $product_id = $sqlval['product_id']; 387 396 } else { 388 397 // 新規登録 389 390 398 $sqlval['product_id'] = $objQuery->nextVal('dtb_products_product_id'); 391 399 $product_id = $sqlval['product_id']; 392 $sqlval['create_date'] = $time; 393 400 $sqlval['create_date'] = $arrList['update_date']; 394 401 // INSERTの実行 395 402 $objQuery->insert("dtb_products", $sqlval); … … 397 404 398 405 // カテゴリ登録 399 $arrCategory_id = explode("|", $arrRet["category_id"]); 400 $objDb->updateProductCategories($arrCategory_id, $product_id); 401 402 // 規格登録 403 $this->lfRegistProductClass($objQuery, $arrRet, $product_id, $arrRet['product_class_id']); 406 if($arrList['category_ids'] != "") { 407 $arrCategory_id = explode(',', $arrList['category_ids']); 408 $this->objDb->updateProductCategories($arrCategory_id, $product_id); 409 } 410 // ステータス登録 411 if($arrList['product_statuses'] != "") { 412 $arrStatus_id = explode(',', $arrList['product_statuses']); 413 $objProduct->setProductStatus($product_id, $arrStatus_id); 414 } 415 416 // 商品規格情報を登録する 417 $this->lfRegistProductClass($objQuery, $arrList, $product_id, $arrList['product_class_id']); 404 418 405 419 // 関連商品登録 420 $this->lfRegistReccomendProducts($objQuery, $arrList, $product_id); 421 } 422 423 /** 424 * 商品規格登録を行う. 425 * 426 * FIXME: 商品規格登録の実処理自体は、LC_Page_Admin_Products_Productと共通化して欲しい。 427 * 428 * @param SC_Query $objQuery SC_Queryインスタンス 429 * @param array $arrList 商品規格情報配列 430 * @param integer $product_id 商品ID 431 * @param integer $product_class_id 商品規格ID 432 * @return void 433 */ 434 function lfRegistProductClass($objQuery, $arrList, $product_id, $product_class_id) { 435 $objProduct = new SC_Product(); 436 // 商品規格登録情報を生成する。 437 // 商品規格テーブルのカラムに存在しているもののうち、Form投入設定されていないデータは上書きしない。 438 $sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $this->arrProductClassColumn); 439 // 必須入力では無い項目だが、空文字では問題のある特殊なカラム値の初期値設定 440 $sqlval = $this->lfSetProductClassDefaultData($sqlval); 441 442 if($product_class_id == "") { 443 // 新規登録 444 $sqlval['product_id'] = $product_id; 445 $sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id'); 446 $sqlval['create_date'] = $arrList['update_date']; 447 // INSERTの実行 448 $objQuery->insert("dtb_products_class", $sqlval); 449 $product_class_id = $sqlval['product_class_id']; 450 } else { 451 // UPDATEの実行 452 $where = "product_class_id = ?"; 453 $objQuery->update("dtb_products_class", $sqlval, $where, array($product_class_id)); 454 } 455 // 支払い方法登録 456 if($arrList['product_payment_ids'] != "") { 457 $arrPayment_id = explode(',', $arrList['product_payment_ids']); 458 $objProduct->setPaymentOptions($product_class_id, $arrPayment_id); 459 } 460 } 461 462 /** 463 * 関連商品登録を行う. 464 * 465 * FIXME: 商品規格登録の実処理自体は、LC_Page_Admin_Products_Productと共通化して欲しい。 466 * DELETE/INSERT ではなく UPDATEへの変更も・・・ 467 * 468 * @param SC_Query $objQuery SC_Queryインスタンス 469 * @param array $arrList 商品規格情報配列 470 * @param integer $product_id 商品ID 471 * @return void 472 */ 473 function lfRegistReccomendProducts($objQuery, $arrList, $product_id) { 406 474 $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id)); 407 475 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 408 476 $keyname = "recommend_product_id" . $i; 409 477 $comment_key = "recommend_comment" . $i; 410 if($arr Ret[$keyname] != "") {411 $arrProduct = $objQuery->select("product_id", "dtb_products", "product_id = ?", array($arr Ret[$keyname]));478 if($arrList[$keyname] != "") { 479 $arrProduct = $objQuery->select("product_id", "dtb_products", "product_id = ?", array($arrList[$keyname])); 412 480 if($arrProduct[0]['product_id'] != "") { 413 481 $arrval['product_id'] = $product_id; 414 482 $arrval['recommend_product_id'] = $arrProduct[0]['product_id']; 415 $arrval['comment'] = $arr Ret[$comment_key];416 $arrval['update_date'] = "Now()";417 $arrval['create_date'] = "Now()";483 $arrval['comment'] = $arrList[$comment_key]; 484 $arrval['update_date'] = $arrList['update_date']; 485 $arrval['create_date'] = $arrList['update_date']; 418 486 $arrval['creator_id'] = $_SESSION['member_id']; 419 487 $arrval['rank'] = RECOMMEND_PRODUCT_MAX - $i + 1; … … 425 493 426 494 /** 427 * 商品規格登録を行う. 428 * 429 * @param SC_Query $objQuery SC_Queryインスタンス 430 * @param array $arrList 商品規格情報配列 431 * @param integer $product_id 商品ID 432 * @param integer $product_class_id 商品規格ID 433 * @return void 434 */ 435 function lfRegistProductClass($objQuery, $arrList, $product_id, $product_class_id) { 436 $sqlval['product_code'] = $arrList["product_code"]; 437 $sqlval['stock'] = $arrList["stock"]; 438 if($sqlval['stock'] == "") { 439 $sqlval['stock_unlimited'] = '1'; 440 } else { 441 $sqlval['stock_unlimited'] = '0'; 442 } 443 $sqlval['price01'] = $arrList['price01']; 444 $sqlval['price02'] = $arrList['price02']; 445 $sqlval['creator_id'] = $_SESSION['member_id']; 446 447 // TODO $sqlval['member_id'] は何処から出てくる? 448 if($sqlval['member_id'] == "") { 449 $sqlval['creator_id'] = '0'; 450 } 451 452 if($product_class_id == "") { 453 // 新規登録 454 $where = "product_id = ?"; 455 // 念のために既存の規格を削除 456 $objQuery->delete("dtb_products_class", $where, array($product_id)); 457 $sqlval['product_id'] = $product_id; 458 $sqlval['classcategory_id1'] = '0'; 459 $sqlval['classcategory_id2'] = '0'; 460 $sqlval['create_date'] = "now()"; 461 $sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id'); 462 $objQuery->insert("dtb_products_class", $sqlval); 463 } else { 464 // 既存編集 465 $where = "product_id = ? AND product_class_id = ?"; 466 $objQuery->update("dtb_products_class", $sqlval, $where, array($product_id, $product_class_id)); 467 } 468 } 469 470 /** 471 * 入力チェックを行う. 472 * 473 * @return void 474 */ 475 function lfCheckError() { 476 477 // 入力データを渡す。 478 $arrRet = $this->objFormParam->getHashArray(); 479 $objErr = new SC_CheckError($arrRet); 480 $objErr->arrErr = $this->objFormParam->checkError(false); 481 482 if(count($objErr->arrErr) == 0) { 483 $objQuery = new SC_Query(); 484 // 商品ID、規格IDの存在チェック 485 if($arrRet['product_id'] != "") { 486 $count = $objQuery->count("dtb_products", "product_id = ?", array($arrRet['product_id'])); 487 if($count == 0) { 488 $objErr->arrErr['product_id'] = "※ 指定の商品IDは、登録されていません。"; 495 * 初期値の設定 496 * 497 * @param array $arrCSVFrame CSV構造配列 498 * @return array $arrCSVFrame CSV構造配列 499 */ 500 function lfSetParamDefaultValue(&$arrCSVFrame) { 501 foreach($arrCSVFrame as $key => $val) { 502 switch($val['col']) { 503 case 'status': 504 $arrCSVFrame[$key]['default'] = DEFAULT_PRODUCT_DISP; 505 break; 506 case 'del_flg': 507 $arrCSVFrame[$key]['default'] = '0'; 508 break; 509 case 'point_rate': 510 $arrCSVFrame[$key]['default'] = $this->arrInfo['point_rate']; 511 break; 512 case 'product_type_id': 513 $arrCSVFrame[$key]['default'] = DEFAULT_PRODUCT_DOWN; 514 break; 515 case 'product_payment_ids': 516 $arrCSVFrame[$key]['default'] = implode(',',array_keys($this->arrPayments)); 517 break; 518 default: 519 break; 520 } 521 } 522 return $arrCSVFrame; 523 } 524 525 /** 526 * 商品データ登録前に特殊な値の持ち方をする部分のデータ部分の初期値補正を行う 527 * 528 * @param array $sqlval 商品登録情報配列 529 * @return $sqlval 登録情報配列 530 */ 531 function lfSetProductDefaultData(&$sqlval) { 532 //新規登録時のみ設定する項目 533 if( $sqlval['product_id'] == "") { 534 if($sqlval['status'] == "") { 535 $sqlval['status'] = DEFAULT_PRODUCT_DISP; 536 } 537 } 538 //共通で空欄時に上書きする項目 539 if($sqlval['del_flg'] == ""){ 540 $sqlval['del_flg'] = '0'; //有効 541 } 542 if($sqlval['creator_id'] == "") { 543 $sqlval['creator_id'] = $_SESSION['member_id']; 544 } 545 return $sqlval; 546 } 547 548 /** 549 * 商品規格データ登録前に特殊な値の持ち方をする部分のデータ部分の初期値補正を行う 550 * 551 * @param array $sqlval 商品登録情報配列 552 * @return $sqlval 登録情報配列 553 */ 554 function lfSetProductClassDefaultData(&$sqlval) { 555 //新規登録時のみ設定する項目 556 if($sqlval['product_class_id'] == "") { 557 if($sqlval['point_rate'] == "") { 558 $sqlval['point_rate'] = $this->arrInfo['point_rate']; 559 } 560 if($sqlval['product_type_id'] == "") { 561 $sqlval['product_type_id'] = DEFAULT_PRODUCT_DOWN; 562 } 563 // TODO: 在庫数、無制限フラグの扱いについて仕様がぶれているので要調整 564 if($sqlval['stock'] == "" and $sqlval['stock_unlimited'] != '1') { 565 //在庫数設定がされておらず、かつ無制限フラグが設定されていない場合、強制無制限 566 $sqlval['stock_unlimited'] = '1'; 567 }elseif($sqlval['stock'] != "" and $sqlval['stock_unlimited'] != '1') { 568 //在庫数設定時は在庫無制限フラグをクリア 569 $sqlval['stock_unlimited'] = '0'; 570 }elseif($sqlval['stock'] != "" and $sqlval['stock_unlimited'] == '1') { 571 //在庫無制限フラグ設定時は在庫数をクリア 572 $sqlval['stock'] = ''; 573 } 574 }else{ 575 //更新時のみ設定する項目 576 if(array_key_exists('stock_unlimited', $sqlval) and $sqlval['stock_unlimited'] == '1') { 577 $sqlval['stock'] = ''; 578 } 579 } 580 //共通で設定する項目 581 if($sqlval['del_flg'] == ""){ 582 $sqlval['del_flg'] = '0'; //有効 583 } 584 if($sqlval['creator_id'] == "") { 585 $sqlval['creator_id'] = $_SESSION['member_id']; 586 } 587 return $sqlval; 588 } 589 590 /** 591 * このフォーム特有の複雑な入力チェックを行う. 592 * 593 * @param array 確認対象データ 594 * @param array エラー配列 595 * @return array エラー配列 596 */ 597 function lfCheckErrorDetail($item, $arrErr) { 598 // 商品IDの存在チェック 599 if(!$this->lfIsDbRecord('dtb_products', 'product_id', $item)) { 600 $arrErr['product_id'] = "※ 指定の商品IDは、登録されていません。"; 601 } 602 // 規格IDの存在チェック 603 if(!$this->lfIsDbRecord('dtb_products_class', 'product_class_id', $item)) { 604 $arrErr['product_class_id'] = "※ 指定の商品規格IDは、登録されていません。"; 605 } 606 // 商品ID、規格IDの組合せチェック 607 if(array_search('product_class_id', $this->arrFormKeyList) !== FALSE 608 and $item['product_class_id'] != "") { 609 if($item['product_id'] == "") { 610 $arrErr['product_class_id'] = "※ 商品規格ID指定時には商品IDの指定が必須です。"; 611 }else{ 612 if(!$this->objDb->sfIsRecord('dtb_products_class', 'product_id, product_class_id' 613 , array($item['product_id'], $item['product_class_id']))) { 614 $arrErr['product_class_id'] = "※ 指定の商品IDと商品規格IDの組合せは正しくありません。"; 489 615 } 490 616 } 491 492 if($arrRet['product_class_id'] != "") { 493 $count = 0; 494 if($arrRet['product_id'] != "") { 495 $count = $objQuery->count("dtb_products_class", "product_id = ? AND product_class_id = ?", array($arrRet['product_id'], $arrRet['product_class_id'])); 496 } 497 if($count == 0) { 498 $objErr->arrErr['product_class_id'] = "※ 指定の規格IDは、登録されていません。"; 499 } 500 } 501 502 // 存在するカテゴリIDかチェック 503 $arrCategory_id = explode("|", $arrRet['category_id']); 504 foreach ($arrCategory_id as $category_id) { 505 $count = $objQuery->count("dtb_category", "category_id = ?", array($category_id)); 506 if($count == 0) { 507 $objErr->arrErr['product_id'] = "※ 指定のカテゴリIDは、登録されていません。"; 508 } 509 } 510 } 511 return $objErr->arrErr; 512 } 513 514 /** 515 * CSVのカウント数を得る. 516 * 517 * @param resource $fp fopenを使用して作成したファイルポインタ 518 * @return integer CSV のカウント数 519 */ 520 function lfCSVRecordCount($fp) { 521 522 $count = 0; 523 while(!feof($fp)) { 524 $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 525 $count++; 526 } 527 // ファイルポインタを戻す 528 if (rewind($fp)) { 529 return $count-1; 530 } else { 531 SC_Utils_Ex::sfDispError(""); 532 } 617 } 618 // 規格組合せIDの存在チェック 619 // if(!$this->lfIsDbRecord('dtb_class_combination', 'class_combination_id', $item)) { 620 // SC_Utils::sfIsRecord が del_flg が無いと使えない為、個別処理 621 if(array_search('class_combination_id', $this->arrFormKeyList) !== FALSE 622 and $item['class_combination_id'] != "" ) { 623 $objQuery =& SC_Query::getSingletonInstance(); 624 $ret = $objQuery->get('class_combination_id', 'dtb_class_combination', 'class_combination_id = ?', array($item['class_combination_id'])); 625 if($ret == "") { 626 $arrErr['class_combination_id'] = "※ 指定の規格組合せIDは、登録されていません。"; 627 } 628 } 629 // 表示ステータスの存在チェック 630 if(!$this->lfIsArrayRecord($this->arrDISP, 'status', $item)) { 631 $arrErr['status'] = "※ 指定の表示ステータスは、登録されていません。"; 632 } 633 // メーカーIDの存在チェック 634 if(!$this->lfIsArrayRecord($this->arrMaker, 'maker_id', $item)) { 635 $arrErr['maker_id'] = "※ 指定のメーカーIDは、登録されていません。"; 636 } 637 // 発送日目安IDの存在チェック 638 if(!$this->lfIsArrayRecord($this->arrDELIVERYDATE, 'deliv_date_id', $item)) { 639 $arrErr['deliv_date_id'] = "※ 指定の発送日目安IDは、登録されていません。"; 640 } 641 // 発送日目安IDの存在チェック 642 if(!$this->lfIsArrayRecord($this->arrProductType, 'product_type_id', $item)) { 643 $arrErr['product_type_id'] = "※ 指定の商品種別IDは、登録されていません。"; 644 } 645 // 関連商品IDの存在チェック 646 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 647 if(array_search('recommend_product_id' . $i, $this->arrFormKeyList) !== FALSE 648 and $item['recommend_product_id' . $i] != "" 649 and !$this->objDb->sfIsRecord('dtb_products', 'product_id', (array)$item['recommend_product_id' . $i]) ) { 650 $arrErr['recommend_product_id' . $i] = "※ 指定の関連商品ID($i)は、登録されていません。"; 651 } 652 } 653 // カテゴリIDの存在チェック 654 if(!$this->lfIsDbRecordMulti('dtb_category', 'category_id', 'category_ids', $item, ',')) { 655 $arrErr['category_ids'] = "※ 指定のカテゴリIDは、登録されていません。"; 656 } 657 // ステータスIDの存在チェック 658 if(!$this->lfIsArrayRecordMulti($this->arrSTATUS, 'product_statuses', $item, ',')) { 659 $arrErr['product_statuses'] = "※ 指定のステータスIDは、登録されていません。"; 660 } 661 // 支払い方法IDの存在チェック 662 if(!$this->lfIsArrayRecordMulti($this->arrPayments, 'product_payment_ids', $item, ',')) { 663 $arrErr['product_payment_ids'] = "※ 指定の支払い方法IDは、登録されていません。"; 664 } 665 // 削除フラグのチェック 666 if(array_search('del_flg', $this->arrFormKeyList) !== FALSE 667 and $item['del_flg'] != "") { 668 if(!($item['del_flg'] == "0" or $item['del_flg'] == "1")) { 669 $arrErr['del_flg'] = "※ 削除フラグは「0」(有効)、「1」(削除)のみが有効な値です。"; 670 } 671 } 672 /* 673 TODO: 在庫数の扱いが2.4仕様ではぶれているのでどうするか・・ 674 // 在庫数/在庫無制限フラグの有効性に関するチェック 675 if($item['stock'] == "") { 676 if(array_search('stock_unlimited', $this->arrFormKeyList) === FALSE) { 677 $arrErr['stock'] = "※ 在庫数は必須です(無制限フラグ項目がある場合のみ空欄許可)。"; 678 }else if($item['stock_unlimited'] != "1") { 679 $arrErr['stock'] = "※ 在庫数または在庫無制限フラグのいずれかの入力が必須です。"; 680 } 681 } 682 */ 683 // ダウンロード商品チェック 684 if(array_search('product_type_id', $this->arrFormKeyList) !== FALSE 685 and $item['product_type_id'] == PRODUCT_TYPE_NORMAL) { 686 //実商品の場合 687 if( $item['down_filename'] != "") { 688 $arrErr['down_filename'] = "※ 実商品の場合はダウンロードファイル名は入力できません。"; 689 } 690 if( $item['down_realfilename'] != "") { 691 $arrErr['down_realfilename'] = "※ 実商品の場合はダウンロード商品用ファイルアップロードは入力できません。"; 692 } 693 }elseif(array_search('product_type_id', $this->arrFormKeyList) !== FALSE 694 and $item['product_type_id'] == PRODUCT_TYPE_DOWNLOAD) { 695 //ダウンロード商品の場合 696 if( $item['down_filename'] == "") { 697 $arrErr['down_filename'] = "※ ダウンロード商品の場合はダウンロードファイル名は必須です。"; 698 } 699 if( $item['down_realfilename'] == "") { 700 $arrErr['down_realfilename'] = "※ ダウンロード商品の場合はダウンロード商品用ファイルアップロードは必須です。"; 701 } 702 } 703 return $arrErr; 704 } 705 706 // TODO: ここから下のルーチンは汎用ルーチンとして移動が望ましい 707 708 /** 709 * 指定された行番号をmicrotimeに付与してDB保存用の時間を生成する。 710 * トランザクション内のnow()は全てcommit()時の時間に統一されてしまう為。 711 * 712 * @param string $line_no 行番号 713 * @return string $time DB保存用の時間文字列 714 */ 715 function lfGetDbFormatTimeWithLine($line_no = '') { 716 $time = date("Y-m-d H:i:s"); 717 // 秒以下を生成 718 if($line != '') { 719 $microtime = sprintf("%06d", $line_no); 720 $time .= ".$microtime"; 721 } 722 return $time; 723 } 724 725 /** 726 * 指定されたキーと複数値の有効性の配列内確認 727 * 728 * @param string $arr チェック対象配列 729 * @param string $keyname フォームキー名 730 * @param array $item 入力データ配列 731 * @param string $delimiter 分割文字 732 * @return boolean true:有効なデータがある false:有効ではない 733 */ 734 function lfIsArrayRecordMulti($arr, $keyname, $item, $delimiter = ',') { 735 if(array_search($keyname, $this->arrFormKeyList) === FALSE) { 736 return true; 737 } 738 if($item[$keyname] == "") { 739 return true; 740 } 741 $arrItems = explode($delimiter, $item[$keyname]); 742 //空項目のチェック 1つでも空指定があったら不正とする。 743 if(array_search("", $arrItems) !== FALSE) { 744 return false; 745 } 746 //キー項目への存在チェック 747 foreach($arrItems as $item) { 748 if(!array_key_exists($item, $arr)) { 749 return false; 750 } 751 } 752 return true; 753 } 754 755 /** 756 * 指定されたキーと複数値の有効性のDB確認 757 * 758 * @param string $table テーブル名 759 * @param string $tblkey テーブルキー名 760 * @param string $keyname フォームキー名 761 * @param array $item 入力データ配列 762 * @param string $delimiter 分割文字 763 * @return boolean true:有効なデータがある false:有効ではない 764 */ 765 function lfIsDbRecordMulti($table, $tblkey, $keyname, $item, $delimiter = ',') { 766 if(array_search($keyname, $this->arrFormKeyList) === FALSE) { 767 return true; 768 } 769 if($item[$keyname] == "") { 770 return true; 771 } 772 $arrItems = explode($delimiter, $item[$keyname]); 773 //空項目のチェック 1つでも空指定があったら不正とする。 774 if(array_search("", $arrItems) !== FALSE) { 775 return false; 776 } 777 $count = count($arrItems); 778 $where = $tblkey ." IN (" . implode(",", array_fill(0, $count, "?")) . ")"; 779 780 $objQuery =& SC_Query::getSingletonInstance(); 781 $db_count = $objQuery->count($table, $where, $arrItems); 782 if($count != $db_count) { 783 return false; 784 } 785 return true; 786 } 787 788 /** 789 * 指定されたキーと値の有効性のDB確認 790 * 791 * @param string $table テーブル名 792 * @param string $keyname キー名 793 * @param array $item 入力データ配列 794 * @return boolean true:有効なデータがある false:有効ではない 795 */ 796 function lfIsDbRecord($table, $keyname, $item) { 797 if(array_search($keyname, $this->arrFormKeyList) !== FALSE //入力対象である 798 and $item[$keyname] != "" // 空ではない 799 and !$this->objDb->sfIsRecord($table, $keyname, (array)$item[$keyname]) //DBに存在するか 800 ) { 801 return false; 802 } 803 return true; 804 } 805 806 /** 807 * 指定されたキーと値の有効性の配列内確認 808 * 809 * @param string $arr チェック対象配列 810 * @param string $keyname キー名 811 * @param array $item 入力データ配列 812 * @return boolean true:有効なデータがある false:有効ではない 813 */ 814 function lfIsArrayRecord($arr, $keyname, $item) { 815 if(array_search($keyname, $this->arrFormKeyList) !== FALSE //入力対象である 816 and $item[$keyname] != "" // 空ではない 817 and !array_key_exists($item[$keyname], $arr) //配列に存在するか 818 ) { 819 return false; 820 } 821 return true; 533 822 } 534 823 … … 544 833 echo "<font color=\"red\">" 545 834 . htmlspecialchars($val, ENT_QUOTES) 546 . "</font></br>\n"; 547 } 548 549 /** 550 * 実商品・ダウンロード判定チェック処理 551 * 552 * @param $p_keyname csv項目番号配列 553 * @param $p_arrCSV csv入力データ配列 554 * @param $p_arrCSVErr エラー格納配列 555 */ 556 function checkSalesKind( $p_keyname , $p_arrCSV , &$p_arrCSVErr ){ 557 558 //実商品・ダウンロードカラムの値を取得する 559 $sDownFlg_Key = array_search('down', $p_keyname ); 560 if( $sDownFlg_Key != '' ){ 561 //実商品・ダウンロードカラムが存在する場合 562 //実商品・ダウンロードカラムの値を取得する 563 $sDownFlg = $p_arrCSV[$sDownFlg_Key]; 564 565 //ダウンロードファイル名を取得する 566 $sFilename_Key = array_search('down_filename', $p_keyname ); 567 $sFilename = $p_arrCSV[$sFilename_Key]; 568 569 //ダウンロード商品用ファイルアップロードを取得する 570 $sRealdown_filename_Key = array_search('down_realfilename', $p_keyname ); 571 $sRealdown_filename = $p_arrCSV[$sRealdown_filename_Key]; 572 573 if( $sDownFlg == 1 ){ 574 //実商品の場合 575 if( mb_strlen($sFilename) > 0 ){ 576 $p_arrCSVErr["down_filename"] = "※ 実商品の場合はダウンロードファイル名は入力できません。\n"; 577 } 578 if( mb_strlen($sRealdown_filename) > 0 ){ 579 $p_arrCSVErr["down_realfilename"] = "※ 実商品の場合はダウンロード商品用ファイルアップロードは入力できません。\n"; 580 } 581 }else if( $sDownFlg == 2 ){ 582 //ダウンロード商品の場合 583 if( mb_strlen($sFilename) <= 0 ){ 584 $p_arrCSVErr["down_filename"] = "※ ダウンロード商品の場合はダウンロードファイル名は必須です。\n"; 585 } 586 if( mb_strlen($sRealdown_filename) <= 0 ){ 587 $p_arrCSVErr["down_realfilename"] = "※ ダウンロード商品の場合はダウンロード商品用ファイルアップロードは必須です。\n"; 588 } 589 }else{ 590 //その他 591 $p_arrCSVErr["down"] = "※ 実商品・ダウンロード(1:実商品 2:ダウンロード)の設定が不正です。\n"; 592 } 593 } 835 . "</font><br />\n"; 594 836 } 595 837 }
Note: See TracChangeset
for help on using the changeset viewer.