Changeset 17840
- Timestamp:
- 2009/02/26 16:00:42 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/comu-ver2/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
r17757 r17840 26 26 27 27 /** 28 * 商品登録 のページクラス .28 * 商品登録 のページクラス 29 29 * 30 30 * @package Page … … 34 34 class LC_Page_Admin_Products_Product extends LC_Page { 35 35 36 // {{{ properties37 38 /** ファイル管理クラスのインスタンス */39 var $objUpFile;40 41 /** hidden 項目の配列 */42 var $arrHidden;43 44 /** エラー情報 */45 var $arrErr;46 47 // }}}48 // {{{ functions49 50 /**51 * Page を初期化する.52 *53 * @return void54 */55 function init() {56 parent::init();57 $this->tpl_mainpage = 'products/product.tpl';58 $this->tpl_subnavi = 'products/subnavi.tpl';59 $this->tpl_mainno = 'products';60 $this->tpl_subno = 'product';61 $this->tpl_subtitle = '商品登録';62 $this->arrErr = array();63 64 $masterData = new SC_DB_MasterData_Ex();65 $this->arrSRANK = $masterData->getMasterData("mtb_srank");66 $this->arrDISP = $masterData->getMasterData("mtb_disp");67 $this->arrCLASS = $masterData->getMasterData("mtb_class");68 $this->arrSTATUS = $masterData->getMasterData("mtb_status");69 $this->arrSTATUS_IMAGE = $masterData->getMasterData("mtb_status_image");70 $this->arrDELIVERYDATE = $masterData->getMasterData("mtb_delivery_date");71 $this->arrAllowedTag = $masterData->getMasterData("mtb_allowed_tag");72 $this->arrMaker = SC_Helper_DB_Ex::sfGetIDValueList("dtb_maker", "maker_id", "name");73 $this->tpl_nonclass = true;74 }75 76 /**77 * Page のプロセス.78 *79 * @return void80 */81 function process() {82 $objView = new SC_AdminView();83 $objSiteInfo = new SC_SiteInfo();84 $objQuery = new SC_Query();85 $objDb = new SC_Helper_DB_Ex();86 87 // 認証可否の判定88 $objSess = new SC_Session();89 SC_Utils_Ex::sfIsSuccess($objSess);90 91 // ファイル管理クラス92 $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR);93 94 // ファイル情報の初期化95 $this->lfInitFile();96 // Hiddenからのデータを引き継ぐ97 $this->objUpFile->setHiddenFileList($_POST);98 99 // 規格の有り無し判定100 $this->tpl_nonclass = $this->lfCheckNonClass($_POST['product_id']);101 102 // 検索パラメータの引き継ぎ103 foreach ($_POST as $key => $val) {104 if (ereg("^search_", $key)) {105 $this->arrSearchHidden[$key] = $val;106 }107 }108 109 // FORMデータの引き継ぎ110 $this->arrForm['status'] = DEFAULT_PRODUCT_DISP; // 公開・非公開のデフォルト値111 $this->arrForm = $_POST;112 113 if (!isset($_POST['mode'])) $_POST['mode'] = "";114 115 switch($_POST['mode']) {116 // 検索画面からの編集117 case 'pre_edit':118 case 'copy' :119 // 編集時120 if(SC_Utils_Ex::sfIsInt($_POST['product_id'])){121 // DBから商品情報の読込122 $arrForm = $this->lfGetProduct($_POST['product_id']);123 // DBデータから画像ファイル名の読込124 $this->objUpFile->setDBFileList($arrForm);125 126 if($_POST['mode'] == "copy"){127 $arrForm["copy_product_id"] = $arrForm["product_id"];128 $arrForm["product_id"] = "";129 // 画像ファイルのコピー130 $arrKey = $this->objUpFile->keyname;131 $arrSaveFile = $this->objUpFile->save_file;132 133 foreach($arrSaveFile as $key => $val){134 $this->lfMakeScaleImage($arrKey[$key], $arrKey[$key], true);135 }136 }137 $this->arrForm = $arrForm;138 139 // 商品ステータスの変換140 $arrRet = SC_Utils_Ex::sfSplitCBValue($this->arrForm['product_flag'], "product_flag");141 $this->arrForm = array_merge($this->arrForm, $arrRet);142 // DBから関連商品の読み込み143 $this->arrRecommend = $this->lfPreGetRecommendProducts($_POST['product_id']);144 145 $this->lfProductPage(); // 商品登録ページ146 }147 break;148 // 商品登録・編集149 case 'edit':150 if($_POST['product_id'] == "" and SC_Utils_Ex::sfIsInt($_POST['copy_product_id'])){151 $this->tpl_nonclass = $this->lfCheckNonClass($_POST['copy_product_id']);152 }153 154 // 入力値の変換155 $this->arrForm = $this->lfConvertParam($this->arrForm);156 // エラーチェック157 $this->arrErr = $this->lfErrorCheck($this->arrForm);158 // ファイル存在チェック159 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objUpFile->checkEXISTS());160 // エラーなしの場合161 if(count($this->arrErr) == 0) {162 $this->lfProductConfirmPage(); // 確認ページ163 } else {164 $this->lfProductPage(); // 商品登録ページ165 }166 break;167 // 確認ページから完了ページへ168 case 'complete':169 $this->tpl_mainpage = 'products/complete.tpl';170 171 $this->arrForm['product_id'] = $this->lfRegistProduct($_POST); // データ登録172 173 // 件数カウントバッチ実行174 $objDb->sfCategory_Count($objQuery);175 $objDb->sfMaker_Count($objQuery);176 // 一時ファイルを本番ディレクトリに移動する177 $this->objUpFile->moveTempFile();178 179 break;180 // 画像のアップロード181 case 'upload_image':182 // ファイル存在チェック183 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objUpFile->checkEXISTS($_POST['image_key']));184 // 画像保存処理185 $this->arrErr[$_POST['image_key']] = $this->objUpFile->makeTempFile($_POST['image_key']);186 187 // 中、小画像生成188 $this->lfSetScaleImage();189 190 $this->lfProductPage(); // 商品登録ページ191 break;192 // 画像の削除193 case 'delete_image':194 $this->objUpFile->deleteFile($_POST['image_key']);195 $this->lfProductPage(); // 商品登録ページ196 break;197 // 確認ページからの戻り198 case 'confirm_return':199 $this->lfProductPage(); // 商品登録ページ200 break;201 // 関連商品選択202 case 'recommend_select' :203 $this->lfProductPage(); // 商品登録ページ204 break;205 default:206 $this->lfProductPage(); // 商品登録ページ207 break;208 }209 210 if($_POST['mode'] != 'pre_edit') {211 // 関連商品の読み込み212 $this->arrRecommend = $this->lfGetRecommendProducts();213 }214 215 // 基本情報を渡す216 $this->arrInfo = $objSiteInfo->data;217 218 // サブ情報の入力があるかどうかチェックする219 $sub_find = false;220 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) {221 if( (isset($this->arrForm['sub_title'.$cnt])222 && !empty($this->arrForm['sub_title'.$cnt])) ||223 (isset($this->arrForm['sub_comment'.$cnt])224 && !empty($this->arrForm['sub_comment'.$cnt])) ||225 (isset($this->arrForm['sub_image'.$cnt])226 && !empty($this->arrForm['sub_image'.$cnt])) ||227 (isset($this->arrForm['sub_large_image'.$cnt])228 && !empty($this->arrForm['sub_large_image'.$cnt])) ||229 (isset($this->arrForm['sub_image'.$cnt])230 && is_array($this->arrFile['sub_image'.$cnt])) ||231 (isset($this->arrForm['sub_large_image'.$cnt])232 && is_array($this->arrFile['sub_large_image'.$cnt]))) {233 $sub_find = true;234 break;235 }236 }237 // サブ情報表示・非表示のチェックに使用する。238 $this->sub_find = $sub_find;239 $objView->assignobj($this);240 $objView->display(MAIN_FRAME);241 }242 243 /**244 * デストラクタ.245 *246 * @return void247 */248 function destroy() {249 parent::destroy();250 }251 252 /* 関連商品の読み込み */253 function lfGetRecommendProducts() {254 $objQuery = new SC_Query();255 $arrRecommend = array();256 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) {257 $keyname = "recommend_id" . $i;258 $delkey = "recommend_delete" . $i;259 $commentkey = "recommend_comment" . $i;260 261 if (!isset($_POST[$delkey])) $_POST[$delkey] = null;262 263 if((isset($_POST[$keyname]) && !empty($_POST[$keyname])) && $_POST[$delkey] != 1) {264 $arrRet = $objQuery->select("main_list_image, product_code_min, name", "vw_products_allclass AS allcls", "product_id = ?", array($_POST[$keyname]));265 $arrRecommend[$i] = $arrRet[0];266 $arrRecommend[$i]['product_id'] = $_POST[$keyname];267 $arrRecommend[$i]['comment'] = $this->arrForm[$commentkey];268 }269 }270 return $arrRecommend;271 }272 273 /* 関連商品の登録 */274 function lfInsertRecommendProducts($objQuery, $arrList, $product_id) {275 // 一旦関連商品をすべて削除する276 $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id));277 $sqlval['product_id'] = $product_id;278 $rank = RECOMMEND_PRODUCT_MAX;279 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) {280 $keyname = "recommend_id" . $i;281 $commentkey = "recommend_comment" . $i;282 $deletekey = "recommend_delete" . $i;283 284 if (!isset($arrList[$deletekey])) $arrList[$deletekey] = null;285 286 if($arrList[$keyname] != "" && $arrList[$deletekey] != '1') {287 $sqlval['recommend_product_id'] = $arrList[$keyname];288 $sqlval['comment'] = $arrList[$commentkey];289 $sqlval['rank'] = $rank;290 $sqlval['creator_id'] = $_SESSION['member_id'];291 $sqlval['create_date'] = "now()";292 $sqlval['update_date'] = "now()";293 $objQuery->insert("dtb_recommend_products", $sqlval);294 $rank--;295 }296 }297 }298 299 /* 登録済み関連商品の読み込み */300 function lfPreGetRecommendProducts($product_id) {301 $arrRecommend = array();302 $objQuery = new SC_Query();303 $objQuery->setorder("rank DESC");304 $arrRet = $objQuery->select("recommend_product_id, comment", "dtb_recommend_products", "product_id = ?", array($product_id));305 $max = count($arrRet);306 $no = 1;307 308 for($i = 0; $i < $max; $i++) {309 $arrProductInfo = $objQuery->select("main_list_image, product_code_min, name", "vw_products_allclass AS allcls", "product_id = ?", array($arrRet[$i]['recommend_product_id']));310 $arrRecommend[$no] = $arrProductInfo[0];311 $arrRecommend[$no]['product_id'] = $arrRet[$i]['recommend_product_id'];312 $arrRecommend[$no]['comment'] = $arrRet[$i]['comment'];313 $no++;314 }315 return $arrRecommend;316 }317 318 /* 商品情報の読み込み */319 function lfGetProduct($product_id) {320 $objQuery = new SC_Query();321 $col = "*";322 $table = "vw_products_nonclass AS noncls ";323 $where = "product_id = ?";324 325 $arrRet = $objQuery->select($col, $table, $where, array($product_id));326 327 // カテゴリID を取得328 $arrRet[0]['category_id'] = $objQuery->getCol("dtb_product_categories",36 // {{{ properties 37 38 /** ファイル管理クラスのインスタンス */ 39 var $objUpFile; 40 41 /** hidden 項目の配列 */ 42 var $arrHidden; 43 44 /** エラー情報 */ 45 var $arrErr; 46 47 // }}} 48 // {{{ functions 49 50 /** 51 * Page を初期化する. 52 * 53 * @return void 54 */ 55 function init() { 56 parent::init(); 57 $this->tpl_mainpage = 'products/product.tpl'; 58 $this->tpl_subnavi = 'products/subnavi.tpl'; 59 $this->tpl_mainno = 'products'; 60 $this->tpl_subno = 'product'; 61 $this->tpl_subtitle = '商品登録'; 62 $this->arrErr = array(); 63 64 $masterData = new SC_DB_MasterData_Ex(); 65 $this->arrSRANK = $masterData->getMasterData("mtb_srank"); 66 $this->arrDISP = $masterData->getMasterData("mtb_disp"); 67 $this->arrCLASS = $masterData->getMasterData("mtb_class"); 68 $this->arrSTATUS = $masterData->getMasterData("mtb_status"); 69 $this->arrSTATUS_IMAGE = $masterData->getMasterData("mtb_status_image"); 70 $this->arrDELIVERYDATE = $masterData->getMasterData("mtb_delivery_date"); 71 $this->arrAllowedTag = $masterData->getMasterData("mtb_allowed_tag"); 72 $this->arrMaker = SC_Helper_DB_Ex::sfGetIDValueList("dtb_maker", "maker_id", "name"); 73 $this->tpl_nonclass = true; 74 } 75 76 /** 77 * Page のプロセス. 78 * 79 * @return void 80 */ 81 function process() { 82 $objView = new SC_AdminView(); 83 $objSiteInfo = new SC_SiteInfo(); 84 $objQuery = new SC_Query(); 85 $objDb = new SC_Helper_DB_Ex(); 86 87 // 認証可否の判定 88 $objSess = new SC_Session(); 89 SC_Utils_Ex::sfIsSuccess($objSess); 90 91 // ファイル管理クラス 92 $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR); 93 94 // ファイル情報の初期化 95 $this->lfInitFile(); 96 // Hiddenからのデータを引き継ぐ 97 $this->objUpFile->setHiddenFileList($_POST); 98 99 // 規格の有り無し判定 100 $this->tpl_nonclass = $this->lfCheckNonClass($_POST['product_id']); 101 102 // 検索パラメータの引き継ぎ 103 foreach ($_POST as $key => $val) { 104 if (ereg("^search_", $key)) { 105 $this->arrSearchHidden[$key] = $val; 106 } 107 } 108 109 // FORMデータの引き継ぎ 110 $this->arrForm['status'] = DEFAULT_PRODUCT_DISP; // 公開・非公開のデフォルト値 111 $this->arrForm = $_POST; 112 113 if (!isset($_POST['mode'])) $_POST['mode'] = ""; 114 115 switch($_POST['mode']) { 116 // 検索画面からの編集 117 case 'pre_edit': 118 case 'copy' : 119 // 編集時 120 if(SC_Utils_Ex::sfIsInt($_POST['product_id'])){ 121 // DBから商品情報の読込 122 $arrForm = $this->lfGetProduct($_POST['product_id']); 123 // DBデータから画像ファイル名の読込 124 $this->objUpFile->setDBFileList($arrForm); 125 126 if($_POST['mode'] == "copy"){ 127 $arrForm["copy_product_id"] = $arrForm["product_id"]; 128 $arrForm["product_id"] = ""; 129 // 画像ファイルのコピー 130 $arrKey = $this->objUpFile->keyname; 131 $arrSaveFile = $this->objUpFile->save_file; 132 133 foreach($arrSaveFile as $key => $val){ 134 $this->lfMakeScaleImage($arrKey[$key], $arrKey[$key], true); 135 } 136 } 137 $this->arrForm = $arrForm; 138 139 // 商品ステータスの変換 140 $arrRet = SC_Utils_Ex::sfSplitCBValue($this->arrForm['product_flag'], "product_flag"); 141 $this->arrForm = array_merge($this->arrForm, $arrRet); 142 // DBから関連商品の読み込み 143 $this->arrRecommend = $this->lfPreGetRecommendProducts($_POST['product_id']); 144 145 $this->lfProductPage(); // 商品登録ページ 146 } 147 break; 148 // 商品登録・編集 149 case 'edit': 150 if($_POST['product_id'] == "" and SC_Utils_Ex::sfIsInt($_POST['copy_product_id'])){ 151 $this->tpl_nonclass = $this->lfCheckNonClass($_POST['copy_product_id']); 152 } 153 154 // 入力値の変換 155 $this->arrForm = $this->lfConvertParam($this->arrForm); 156 // エラーチェック 157 $this->arrErr = $this->lfErrorCheck($this->arrForm); 158 // ファイル存在チェック 159 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objUpFile->checkEXISTS()); 160 // エラーなしの場合 161 if(count($this->arrErr) == 0) { 162 $this->lfProductConfirmPage(); // 確認ページ 163 } else { 164 $this->lfProductPage(); // 商品登録ページ 165 } 166 break; 167 // 確認ページから完了ページへ 168 case 'complete': 169 $this->tpl_mainpage = 'products/complete.tpl'; 170 171 $this->arrForm['product_id'] = $this->lfRegistProduct($_POST); // データ登録 172 173 // 件数カウントバッチ実行 174 $objDb->sfCategory_Count($objQuery); 175 $objDb->sfMaker_Count($objQuery); 176 // 一時ファイルを本番ディレクトリに移動する 177 $this->objUpFile->moveTempFile(); 178 179 break; 180 // 画像のアップロード 181 case 'upload_image': 182 // ファイル存在チェック 183 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objUpFile->checkEXISTS($_POST['image_key'])); 184 // 画像保存処理 185 $this->arrErr[$_POST['image_key']] = $this->objUpFile->makeTempFile($_POST['image_key']); 186 187 // 中、小画像生成 188 $this->lfSetScaleImage(); 189 190 $this->lfProductPage(); // 商品登録ページ 191 break; 192 // 画像の削除 193 case 'delete_image': 194 $this->objUpFile->deleteFile($_POST['image_key']); 195 $this->lfProductPage(); // 商品登録ページ 196 break; 197 // 確認ページからの戻り 198 case 'confirm_return': 199 $this->lfProductPage(); // 商品登録ページ 200 break; 201 // 関連商品選択 202 case 'recommend_select' : 203 $this->lfProductPage(); // 商品登録ページ 204 break; 205 default: 206 $this->lfProductPage(); // 商品登録ページ 207 break; 208 } 209 210 if($_POST['mode'] != 'pre_edit') { 211 // 関連商品の読み込み 212 $this->arrRecommend = $this->lfGetRecommendProducts(); 213 } 214 215 // 基本情報を渡す 216 $this->arrInfo = $objSiteInfo->data; 217 218 // サブ情報の入力があるかどうかチェックする 219 $sub_find = false; 220 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 221 if( (isset($this->arrForm['sub_title'.$cnt]) 222 && !empty($this->arrForm['sub_title'.$cnt])) || 223 (isset($this->arrForm['sub_comment'.$cnt]) 224 && !empty($this->arrForm['sub_comment'.$cnt])) || 225 (isset($this->arrForm['sub_image'.$cnt]) 226 && !empty($this->arrForm['sub_image'.$cnt])) || 227 (isset($this->arrForm['sub_large_image'.$cnt]) 228 && !empty($this->arrForm['sub_large_image'.$cnt])) || 229 (isset($this->arrForm['sub_image'.$cnt]) 230 && is_array($this->arrFile['sub_image'.$cnt])) || 231 (isset($this->arrForm['sub_large_image'.$cnt]) 232 && is_array($this->arrFile['sub_large_image'.$cnt]))) { 233 $sub_find = true; 234 break; 235 } 236 } 237 // サブ情報表示・非表示のチェックに使用する。 238 $this->sub_find = $sub_find; 239 $objView->assignobj($this); 240 $objView->display(MAIN_FRAME); 241 } 242 243 /** 244 * デストラクタ. 245 * 246 * @return void 247 */ 248 function destroy() { 249 parent::destroy(); 250 } 251 252 /* 関連商品の読み込み */ 253 function lfGetRecommendProducts() { 254 $objQuery = new SC_Query(); 255 $arrRecommend = array(); 256 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 257 $keyname = "recommend_id" . $i; 258 $delkey = "recommend_delete" . $i; 259 $commentkey = "recommend_comment" . $i; 260 261 if (!isset($_POST[$delkey])) $_POST[$delkey] = null; 262 263 if((isset($_POST[$keyname]) && !empty($_POST[$keyname])) && $_POST[$delkey] != 1) { 264 $arrRet = $objQuery->select("main_list_image, product_code_min, name", "vw_products_allclass AS allcls", "product_id = ?", array($_POST[$keyname])); 265 $arrRecommend[$i] = $arrRet[0]; 266 $arrRecommend[$i]['product_id'] = $_POST[$keyname]; 267 $arrRecommend[$i]['comment'] = $this->arrForm[$commentkey]; 268 } 269 } 270 return $arrRecommend; 271 } 272 273 /* 関連商品の登録 */ 274 function lfInsertRecommendProducts($objQuery, $arrList, $product_id) { 275 // 一旦関連商品をすべて削除する 276 $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id)); 277 $sqlval['product_id'] = $product_id; 278 $rank = RECOMMEND_PRODUCT_MAX; 279 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 280 $keyname = "recommend_id" . $i; 281 $commentkey = "recommend_comment" . $i; 282 $deletekey = "recommend_delete" . $i; 283 284 if (!isset($arrList[$deletekey])) $arrList[$deletekey] = null; 285 286 if($arrList[$keyname] != "" && $arrList[$deletekey] != '1') { 287 $sqlval['recommend_product_id'] = $arrList[$keyname]; 288 $sqlval['comment'] = $arrList[$commentkey]; 289 $sqlval['rank'] = $rank; 290 $sqlval['creator_id'] = $_SESSION['member_id']; 291 $sqlval['create_date'] = "now()"; 292 $sqlval['update_date'] = "now()"; 293 $objQuery->insert("dtb_recommend_products", $sqlval); 294 $rank--; 295 } 296 } 297 } 298 299 /* 登録済み関連商品の読み込み */ 300 function lfPreGetRecommendProducts($product_id) { 301 $arrRecommend = array(); 302 $objQuery = new SC_Query(); 303 $objQuery->setorder("rank DESC"); 304 $arrRet = $objQuery->select("recommend_product_id, comment", "dtb_recommend_products", "product_id = ?", array($product_id)); 305 $max = count($arrRet); 306 $no = 1; 307 308 for($i = 0; $i < $max; $i++) { 309 $arrProductInfo = $objQuery->select("main_list_image, product_code_min, name", "vw_products_allclass AS allcls", "product_id = ?", array($arrRet[$i]['recommend_product_id'])); 310 $arrRecommend[$no] = $arrProductInfo[0]; 311 $arrRecommend[$no]['product_id'] = $arrRet[$i]['recommend_product_id']; 312 $arrRecommend[$no]['comment'] = $arrRet[$i]['comment']; 313 $no++; 314 } 315 return $arrRecommend; 316 } 317 318 /* 商品情報の読み込み */ 319 function lfGetProduct($product_id) { 320 $objQuery = new SC_Query(); 321 $col = "*"; 322 $table = "vw_products_nonclass AS noncls "; 323 $where = "product_id = ?"; 324 325 $arrRet = $objQuery->select($col, $table, $where, array($product_id)); 326 327 // カテゴリID を取得 328 $arrRet[0]['category_id'] = $objQuery->getCol("dtb_product_categories", 329 329 "category_id", 330 330 "product_id = ?", 331 array($product_id));332 //編集時に規格IDが変わってしまうのを防ぐために規格が登録されていなければ規格IDを取得する333 if( $this->lfCheckNonClass($_POST['product_id']) ){334 $arrRet[0]['product_class_id'] = SC_Utils::sfGetProductClassId($product_id,"0","0");335 }336 return $arrRet[0];337 }338 339 /* 商品登録ページ表示用 */340 function lfProductPage() {341 $objDb = new SC_Helper_DB_Ex();342 343 // カテゴリの読込344 list($this->arrCatVal, $this->arrCatOut) = $objDb->sfGetLevelCatList(false);345 346 if (isset($this->arrForm['category_id']) && !is_array($this->arrForm['category_id'])) {347 $this->arrForm['category_id'] = unserialize($this->arrForm['category_id']);348 }349 if($this->arrForm['status'] == "") {350 $this->arrForm['status'] = 1;351 }352 353 if(isset($this->arrForm['product_flag']) && !is_array($this->arrForm['product_flag'])) {354 // 商品ステータスの分割読込355 $this->arrForm['product_flag'] = SC_Utils_Ex::sfSplitCheckBoxes($this->arrForm['product_flag']);356 }357 358 // HIDDEN用に配列を渡す。359 $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objUpFile->getHiddenFileList());360 // Form用配列を渡す。361 $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URL, IMAGE_SAVE_URL);362 363 364 // アンカーを設定365 if (isset($_POST['image_key']) && !empty($_POST['image_key'])) {366 $anchor_hash = "location.hash='#" . $_POST['image_key'] . "'";367 } elseif (isset($_POST['anchor_key']) && !empty($_POST['anchor_key'])) {368 $anchor_hash = "location.hash='#" . $_POST['anchor_key'] . "'";369 } else {370 $anchor_hash = "";371 }372 373 $this->tpl_onload = "fnCheckSaleLimit('" . DISABLED_RGB . "'); fnCheckStockLimit('" . DISABLED_RGB . "'); fnMoveSelect('category_id_unselect', 'category_id');" . $anchor_hash;374 }375 376 /* ファイル情報の初期化 */377 function lfInitFile() {378 $this->objUpFile->addFile("一覧-メイン画像", 'main_list_image', array('jpg', 'gif', 'png'),IMAGE_SIZE, true, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT);379 $this->objUpFile->addFile("詳細-メイン画像", 'main_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, true, NORMAL_IMAGE_WIDTH, NORMAL_IMAGE_HEIGHT);380 $this->objUpFile->addFile("詳細-メイン拡大画像", 'main_large_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_IMAGE_WIDTH, LARGE_IMAGE_HEIGHT);381 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) {382 $this->objUpFile->addFile("詳細-サブ画像$cnt", "sub_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_SUBIMAGE_WIDTH, NORMAL_SUBIMAGE_HEIGHT);383 $this->objUpFile->addFile("詳細-サブ拡大画像$cnt", "sub_large_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_SUBIMAGE_WIDTH, LARGE_SUBIMAGE_HEIGHT);384 }385 $this->objUpFile->addFile("商品比較画像", 'file1', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, OTHER_IMAGE1_WIDTH, OTHER_IMAGE1_HEIGHT);386 $this->objUpFile->addFile("商品詳細ファイル", 'file2', array('pdf'), PDF_SIZE, false, 0, 0, false);387 }388 389 /* 商品の登録 */390 function lfRegistProduct($arrList) {391 $objQuery = new SC_Query();392 $objDb = new SC_Helper_DB_Ex();393 $objQuery->begin();394 395 // 配列の添字を定義396 $checkArray = array("name", "status", "product_flag",331 array($product_id)); 332 //編集時に規格IDが変わってしまうのを防ぐために規格が登録されていなければ規格IDを取得する 333 if( $this->lfCheckNonClass($_POST['product_id']) ){ 334 $arrRet[0]['product_class_id'] = SC_Utils::sfGetProductClassId($product_id,"0","0"); 335 } 336 return $arrRet[0]; 337 } 338 339 /* 商品登録ページ表示用 */ 340 function lfProductPage() { 341 $objDb = new SC_Helper_DB_Ex(); 342 343 // カテゴリの読込 344 list($this->arrCatVal, $this->arrCatOut) = $objDb->sfGetLevelCatList(false); 345 346 if (isset($this->arrForm['category_id']) && !is_array($this->arrForm['category_id'])) { 347 $this->arrForm['category_id'] = unserialize($this->arrForm['category_id']); 348 } 349 if($this->arrForm['status'] == "") { 350 $this->arrForm['status'] = 1; 351 } 352 353 if(isset($this->arrForm['product_flag']) && !is_array($this->arrForm['product_flag'])) { 354 // 商品ステータスの分割読込 355 $this->arrForm['product_flag'] = SC_Utils_Ex::sfSplitCheckBoxes($this->arrForm['product_flag']); 356 } 357 358 // HIDDEN用に配列を渡す。 359 $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objUpFile->getHiddenFileList()); 360 // Form用配列を渡す。 361 $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URL, IMAGE_SAVE_URL); 362 363 364 // アンカーを設定 365 if (isset($_POST['image_key']) && !empty($_POST['image_key'])) { 366 $anchor_hash = "location.hash='#" . $_POST['image_key'] . "'"; 367 } elseif (isset($_POST['anchor_key']) && !empty($_POST['anchor_key'])) { 368 $anchor_hash = "location.hash='#" . $_POST['anchor_key'] . "'"; 369 } else { 370 $anchor_hash = ""; 371 } 372 373 $this->tpl_onload = "fnCheckSaleLimit('" . DISABLED_RGB . "'); fnCheckStockLimit('" . DISABLED_RGB . "'); fnMoveSelect('category_id_unselect', 'category_id');" . $anchor_hash; 374 } 375 376 /* ファイル情報の初期化 */ 377 function lfInitFile() { 378 $this->objUpFile->addFile("一覧-メイン画像", 'main_list_image', array('jpg', 'gif', 'png'),IMAGE_SIZE, true, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); 379 $this->objUpFile->addFile("詳細-メイン画像", 'main_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, true, NORMAL_IMAGE_WIDTH, NORMAL_IMAGE_HEIGHT); 380 $this->objUpFile->addFile("詳細-メイン拡大画像", 'main_large_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_IMAGE_WIDTH, LARGE_IMAGE_HEIGHT); 381 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 382 $this->objUpFile->addFile("詳細-サブ画像$cnt", "sub_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_SUBIMAGE_WIDTH, NORMAL_SUBIMAGE_HEIGHT); 383 $this->objUpFile->addFile("詳細-サブ拡大画像$cnt", "sub_large_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_SUBIMAGE_WIDTH, LARGE_SUBIMAGE_HEIGHT); 384 } 385 $this->objUpFile->addFile("商品比較画像", 'file1', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, OTHER_IMAGE1_WIDTH, OTHER_IMAGE1_HEIGHT); 386 $this->objUpFile->addFile("商品詳細ファイル", 'file2', array('pdf'), PDF_SIZE, false, 0, 0, false); 387 } 388 389 /* 商品の登録 */ 390 function lfRegistProduct($arrList) { 391 $objQuery = new SC_Query(); 392 $objDb = new SC_Helper_DB_Ex(); 393 $objQuery->begin(); 394 395 // 配列の添字を定義 396 $checkArray = array("name", "status", "product_flag", 397 397 "main_list_comment", "main_comment", "point_rate", 398 398 "deliv_fee", "comment1", "comment2", "comment3", 399 399 "comment4", "comment5", "comment6", "main_list_comment", 400 400 "sale_limit", "sale_unlimited", "deliv_date_id", "maker_id", "note"); 401 $arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray); 402 403 // INSERTする値を作成する。 404 $sqlval['name'] = $arrList['name']; 405 $sqlval['status'] = $arrList['status']; 406 $sqlval['product_flag'] = $arrList['product_flag']; 407 $sqlval['main_list_comment'] = $arrList['main_list_comment']; 408 $sqlval['main_comment'] = $arrList['main_comment']; 409 $sqlval['point_rate'] = $arrList['point_rate']; 410 $sqlval['deliv_fee'] = $arrList['deliv_fee']; 411 $sqlval['comment1'] = $arrList['comment1']; 412 $sqlval['comment2'] = $arrList['comment2']; 413 $sqlval['comment3'] = $arrList['comment3']; 414 $sqlval['comment4'] = $arrList['comment4']; 415 $sqlval['comment5'] = $arrList['comment5']; 416 $sqlval['comment6'] = $arrList['comment6']; 417 $sqlval['main_list_comment'] = $arrList['main_list_comment']; 418 $sqlval['sale_limit'] = $arrList['sale_limit']; 419 $sqlval['sale_unlimited'] = $arrList['sale_unlimited']; 420 $sqlval['deliv_date_id'] = $arrList['deliv_date_id']; 421 $sqlval['maker_id'] = $arrList['maker_id']; 422 $sqlval['note'] = $arrList['note']; 423 $sqlval['update_date'] = "Now()"; 424 $sqlval['creator_id'] = $_SESSION['member_id']; 425 $arrRet = $this->objUpFile->getDBFileList(); 426 $sqlval = array_merge($sqlval, $arrRet); 427 428 $arrList['category_id'] = unserialize($arrList['category_id']); 429 430 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 431 $sqlval['sub_title'.$cnt] = $arrList['sub_title'.$cnt]; 432 $sqlval['sub_comment'.$cnt] = $arrList['sub_comment'.$cnt]; 433 } 434 435 if($arrList['product_id'] == "") { 436 // product_id 取得(PostgreSQLの場合) 437 if(DB_TYPE=='pgsql'){ 438 $product_id = $objQuery->nextval("dtb_products", "product_id"); 439 $sqlval['product_id'] = $product_id; 440 } 441 442 // INSERTの実行 443 $sqlval['create_date'] = "Now()"; 444 $objQuery->insert("dtb_products", $sqlval); 445 446 // product_id 取得(MySQLの場合) 447 if(DB_TYPE=='mysql'){ 448 $product_id = $objQuery->nextval("dtb_products", "product_id"); 449 } 450 451 // カテゴリを更新 452 $objDb->updateProductCategories($arrList['category_id'], $product_id); 453 454 // コピー商品の場合には規格もコピーする 455 if($_POST["copy_product_id"] != "" and SC_Utils_Ex::sfIsInt($_POST["copy_product_id"])){ 456 // dtb_products_class のカラムを取得 457 $dbFactory = SC_DB_DBFactory_Ex::getInstance(); 458 $arrColList = $dbFactory->sfGetColumnList("dtb_products_class", $objQuery); 459 $arrColList_tmp = array_flip($arrColList); 460 461 // コピーしない列 462 unset($arrColList[$arrColList_tmp["product_class_id"]]); //規格ID 463 unset($arrColList[$arrColList_tmp["product_id"]]); //商品ID 464 unset($arrColList[$arrColList_tmp["create_date"]]); 465 466 $col = SC_Utils_Ex::sfGetCommaList($arrColList); 467 468 $objQuery->query("INSERT INTO dtb_products_class (product_id, ". $col .") SELECT ?, " . $col. " FROM dtb_products_class WHERE product_id = ? ORDER BY product_class_id", array($product_id, $_POST["copy_product_id"])); 469 470 } 471 472 } else { 473 $product_id = $arrList['product_id']; 474 // 削除要求のあった既存ファイルの削除 475 $arrRet = $this->lfGetProduct($arrList['product_id']); 476 $this->objUpFile->deleteDBFile($arrRet); 477 478 // UPDATEの実行 479 $where = "product_id = ?"; 480 $objQuery->update("dtb_products", $sqlval, $where, array($product_id)); 481 482 // カテゴリを更新 483 $objDb->updateProductCategories($arrList['category_id'], $product_id); 484 } 485 486 //商品登録の時は規格を生成する。複製の場合は規格も複製されるのでこの処理は不要。 487 if( $_POST["copy_product_id"] == "" ){ 488 // 規格登録 489 SC_Utils_Ex::sfInsertProductClass($objQuery, $arrList, $product_id , $arrList['product_class_id'] ); 490 } 491 492 // 関連商品登録 493 $this->lfInsertRecommendProducts($objQuery, $arrList, $product_id); 494 495 $objQuery->commit(); 496 return $product_id; 497 } 498 499 500 /* 取得文字列の変換 */ 501 function lfConvertParam($array) { 502 /* 503 * 文字列の変換 504 * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換 505 * C : 「全角ひら仮名」を「全角かた仮名」に変換 506 * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します 507 * n : 「全角」数字を「半角(ハンカク)」に変換 508 */ 509 510 // スポット商品 511 $arrConvList['name'] = "KVa"; 512 $arrConvList['main_list_comment'] = "KVa"; 513 $arrConvList['main_comment'] = "KVa"; 514 $arrConvList['price01'] = "n"; 515 $arrConvList['price02'] = "n"; 516 $arrConvList['stock'] = "n"; 517 $arrConvList['sale_limit'] = "n"; 518 $arrConvList['point_rate'] = "n"; 519 $arrConvList['product_code'] = "KVna"; 520 $arrConvList['comment1'] = "a"; 521 $arrConvList['deliv_fee'] = "n"; 522 523 // 詳細-サブ 524 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 525 $arrConvList["sub_title$cnt"] = "KVa"; 526 } 527 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 528 $arrConvList["sub_comment$cnt"] = "KVa"; 529 } 530 531 // 関連商品 532 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 533 $arrConvList["recommend_comment$cnt"] = "KVa"; 534 } 535 536 // 文字変換 537 foreach ($arrConvList as $key => $val) { 538 // POSTされてきた値のみ変換する。 539 if(isset($array[$key])) { 540 $array[$key] = mb_convert_kana($array[$key] ,$val); 541 } 542 } 543 544 if (!isset($array['product_flag'])) $array['product_flag'] = ""; 545 $max = max(array_keys($this->arrSTATUS)); 546 $array['product_flag'] = SC_Utils_Ex::sfMergeCheckBoxes($array['product_flag'], $max); 547 548 return $array; 549 } 550 551 // 入力エラーチェック 552 function lfErrorCheck($array) { 553 554 $objErr = new SC_CheckError($array); 555 $objErr->doFunc(array("商品名", "name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 556 $objErr->doFunc(array("一覧-メインコメント", "main_list_comment", MTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 557 $objErr->doFunc(array("詳細-メインコメント", "main_comment", LLTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 558 $objErr->doFunc(array("詳細-メインコメント", "main_comment", $this->arrAllowedTag), array("HTML_TAG_CHECK")); 559 $objErr->doFunc(array("ポイント付与率", "point_rate", PERCENTAGE_LEN), array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 560 $objErr->doFunc(array("商品送料", "deliv_fee", PRICE_LEN), array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 561 $objErr->doFunc(array("備考欄(SHOP専用)", "note", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 562 $objErr->doFunc(array("検索ワード", "comment3", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 563 $objErr->doFunc(array("メーカーURL", "comment1", URL_LEN), array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK")); 564 $objErr->doFunc(array("発送日目安", "deliv_date_id", INT_LEN), array("NUM_CHECK")); 565 $objErr->doFunc(array("メーカー", 'maker_id', INT_LEN), array("NUM_CHECK")); 566 567 if($this->tpl_nonclass) { 568 $objErr->doFunc(array("商品コード", "product_code", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK","MAX_LENGTH_CHECK")); 569 $objErr->doFunc(array(NORMAL_PRICE_TITLE, "price01", PRICE_LEN), array("NUM_CHECK", "MAX_LENGTH_CHECK")); 570 $objErr->doFunc(array(SALE_PRICE_TITLE, "price02", PRICE_LEN), array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 571 572 if(!isset($array['stock_unlimited']) && $array['stock_unlimited'] != "1") { 573 $objErr->doFunc(array("在庫数", "stock", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 574 } 575 } 576 577 if(!isset($array['sale_unlimited']) && $array['sale_unlimited'] != "1") { 578 $objErr->doFunc(array("購入制限", "sale_limit", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 579 } 580 581 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 582 $objErr->doFunc(array("詳細-サブタイトル$cnt", "sub_title$cnt", STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 583 $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 584 $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", $this->arrAllowedTag), array("HTML_TAG_CHECK")); 585 } 586 587 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 588 589 if (!isset($_POST["recommend_delete$cnt"])) $_POST["recommend_delete$cnt"] = ""; 590 591 if(isset($_POST["recommend_id$cnt"]) 592 && $_POST["recommend_id$cnt"] != "" 593 && $_POST["recommend_delete$cnt"] != 1) { 594 $objErr->doFunc(array("関連商品コメント$cnt", "recommend_comment$cnt", LTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 595 } 596 } 597 598 // カテゴリID のチェック 599 if (empty($array['category_id'])) { 600 $objErr->arrErr['category_id'] = "※ 商品カテゴリが選択されていません。<br />"; 601 } else { 602 $arrCategory_id = array(); 603 for ($i = 0; $i < count($array['category_id']); $i++) { 604 $arrCategory_id['category_id' . $i] = $array['category_id'][$i]; 605 } 606 $objCheckCategory = new SC_CheckError($arrCategory_id); 607 for ($i = 0; $i < count($array['category_id']); $i++) { 608 $objCheckCategory->doFunc(array("商品カテゴリ", "category_id" . $i, STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 609 } 610 if (!empty($objCheckCategory->arrErr)) { 611 $objErr->arrErr = array_merge($objErr->arrErr, 612 $objCheckCategory->arrErr); 613 } 614 } 615 return $objErr->arrErr; 616 } 617 618 /* 確認ページ表示用 */ 619 function lfProductConfirmPage() { 620 $this->tpl_mainpage = 'products/confirm.tpl'; 621 $this->arrForm['mode'] = 'complete'; 622 623 $objDb = new SC_Helper_DB_Ex(); 624 625 // カテゴリ表示 626 $this->arrCategory_id = $this->arrForm['category_id']; 627 $this->arrCatList = array(); 628 list($arrCatVal, $arrCatOut) = $objDb->sfGetLevelCatList(false); 629 for ($i = 0; $i < count($arrCatVal); $i++) { 630 $this->arrCatList[$arrCatVal[$i]] = $arrCatOut[$i]; 631 } 632 633 // hidden に渡す値は serialize する 634 $this->arrForm['category_id'] = serialize($this->arrForm['category_id']); 635 636 // Form用配列を渡す。 637 $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URL, IMAGE_SAVE_URL); 638 } 639 640 /* 規格あり判定用(規格が登録されていない場合:TRUE) */ 641 function lfCheckNonClass($product_id) { 642 if(SC_Utils_Ex::sfIsInt($product_id)) { 643 $objQuery = new SC_Query(); 644 $where = "product_id = ? AND classcategory_id1 <> 0 AND classcategory_id1 <> 0"; 645 $count = $objQuery->count("dtb_products_class", $where, array($product_id)); 646 if($count > 0) { 647 return false; 648 } 649 } 650 return true; 651 } 652 653 // 縮小した画像をセットする 654 function lfSetScaleImage(){ 655 656 $subno = str_replace("sub_large_image", "", $_POST['image_key']); 657 switch ($_POST['image_key']){ 658 case "main_large_image": 659 // 詳細メイン画像 660 $this->lfMakeScaleImage($_POST['image_key'], "main_image"); 661 case "main_image": 662 // 一覧メイン画像 663 $this->lfMakeScaleImage($_POST['image_key'], "main_list_image"); 664 break; 665 case "sub_large_image" . $subno: 666 // サブメイン画像 667 $this->lfMakeScaleImage($_POST['image_key'], "sub_image" . $subno); 668 break; 669 default: 670 break; 671 } 672 } 673 674 // 縮小画像生成 675 function lfMakeScaleImage($from_key, $to_key, $forced = false){ 676 $arrImageKey = array_flip($this->objUpFile->keyname); 677 678 if($this->objUpFile->temp_file[$arrImageKey[$from_key]]){ 679 $from_path = $this->objUpFile->temp_dir . $this->objUpFile->temp_file[$arrImageKey[$from_key]]; 680 }elseif($this->objUpFile->save_file[$arrImageKey[$from_key]]){ 681 $from_path = $this->objUpFile->save_dir . $this->objUpFile->save_file[$arrImageKey[$from_key]]; 682 }else{ 683 return ""; 684 } 685 686 if(file_exists($from_path)){ 687 // 元画像サイズを取得 688 list($from_w, $from_h) = getimagesize($from_path); 689 690 // 生成先の画像サイズを取得 691 $to_w = $this->objUpFile->width[$arrImageKey[$to_key]]; 692 $to_h = $this->objUpFile->height[$arrImageKey[$to_key]]; 693 694 695 if($forced) $this->objUpFile->save_file[$arrImageKey[$to_key]] = ""; 696 697 if(empty($this->objUpFile->temp_file[$arrImageKey[$to_key]]) && 698 empty($this->objUpFile->save_file[$arrImageKey[$to_key]])) { 699 700 $path = $this->objUpFile->makeThumb($from_path, $to_w, $to_h); 701 $this->objUpFile->temp_file[$arrImageKey[$to_key]] = basename($path); 702 } 703 }else{ 704 return ""; 705 } 706 } 401 $arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray); 402 403 // INSERTする値を作成する。 404 $sqlval['name'] = $arrList['name']; 405 $sqlval['status'] = $arrList['status']; 406 $sqlval['product_flag'] = $arrList['product_flag']; 407 $sqlval['main_list_comment'] = $arrList['main_list_comment']; 408 $sqlval['main_comment'] = $arrList['main_comment']; 409 $sqlval['point_rate'] = $arrList['point_rate']; 410 $sqlval['deliv_fee'] = $arrList['deliv_fee']; 411 $sqlval['comment1'] = $arrList['comment1']; 412 $sqlval['comment2'] = $arrList['comment2']; 413 $sqlval['comment3'] = $arrList['comment3']; 414 $sqlval['comment4'] = $arrList['comment4']; 415 $sqlval['comment5'] = $arrList['comment5']; 416 $sqlval['comment6'] = $arrList['comment6']; 417 $sqlval['main_list_comment'] = $arrList['main_list_comment']; 418 $sqlval['sale_limit'] = $arrList['sale_limit']; 419 $sqlval['sale_unlimited'] = $arrList['sale_unlimited']; 420 $sqlval['deliv_date_id'] = $arrList['deliv_date_id']; 421 $sqlval['maker_id'] = $arrList['maker_id']; 422 $sqlval['note'] = $arrList['note']; 423 $sqlval['update_date'] = "Now()"; 424 $sqlval['creator_id'] = $_SESSION['member_id']; 425 $arrRet = $this->objUpFile->getDBFileList(); 426 $sqlval = array_merge($sqlval, $arrRet); 427 428 $arrList['category_id'] = unserialize($arrList['category_id']); 429 430 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 431 $sqlval['sub_title'.$cnt] = $arrList['sub_title'.$cnt]; 432 $sqlval['sub_comment'.$cnt] = $arrList['sub_comment'.$cnt]; 433 } 434 435 if($arrList['product_id'] == "") { 436 // product_id 取得(PostgreSQLの場合) 437 if(DB_TYPE=='pgsql'){ 438 $product_id = $objQuery->nextval("dtb_products", "product_id"); 439 $sqlval['product_id'] = $product_id; 440 } 441 442 // INSERTの実行 443 $sqlval['create_date'] = "Now()"; 444 $objQuery->insert("dtb_products", $sqlval); 445 446 // product_id 取得(MySQLの場合) 447 if(DB_TYPE=='mysql'){ 448 $product_id = $objQuery->nextval("dtb_products", "product_id"); 449 } 450 451 // カテゴリを更新 452 $objDb->updateProductCategories($arrList['category_id'], $product_id); 453 454 // コピー商品の場合には規格もコピーする 455 if($_POST["copy_product_id"] != "" and SC_Utils_Ex::sfIsInt($_POST["copy_product_id"])){ 456 457 if($this->tpl_nonclass) 458 { 459 //規格がない場合のコピーは価格等の入力が発生しているので、その内容で追加登録 460 $arrList['product_id'] = $product_id; 461 $this->lfCopyProductClass($arrList, $objQuery); 462 } 463 else 464 { 465 //規格がある場合のコピーは複製元の内容で追加登録 466 // dtb_products_class のカラムを取得 467 $dbFactory = SC_DB_DBFactory_Ex::getInstance(); 468 $arrColList = $dbFactory->sfGetColumnList("dtb_products_class", $objQuery); 469 $arrColList_tmp = array_flip($arrColList); 470 471 // コピーしない列 472 unset($arrColList[$arrColList_tmp["product_class_id"]]); //規格ID 473 unset($arrColList[$arrColList_tmp["product_id"]]); //商品ID 474 unset($arrColList[$arrColList_tmp["create_date"]]); 475 476 $col = SC_Utils_Ex::sfGetCommaList($arrColList); 477 478 $objQuery->query("INSERT INTO dtb_products_class (product_id, ". $col .") SELECT ?, " . $col. " FROM dtb_products_class WHERE product_id = ? ORDER BY product_class_id", array($product_id, $_POST["copy_product_id"])); 479 } 480 } 481 482 } else { 483 $product_id = $arrList['product_id']; 484 // 削除要求のあった既存ファイルの削除 485 $arrRet = $this->lfGetProduct($arrList['product_id']); 486 $this->objUpFile->deleteDBFile($arrRet); 487 488 // UPDATEの実行 489 $where = "product_id = ?"; 490 $objQuery->update("dtb_products", $sqlval, $where, array($product_id)); 491 492 // カテゴリを更新 493 $objDb->updateProductCategories($arrList['category_id'], $product_id); 494 } 495 496 //商品登録の時は規格を生成する。複製の場合は規格も複製されるのでこの処理は不要。 497 if( $_POST["copy_product_id"] == "" ){ 498 // 規格登録 499 SC_Utils_Ex::sfInsertProductClass($objQuery, $arrList, $product_id , $arrList['product_class_id'] ); 500 } 501 502 // 関連商品登録 503 $this->lfInsertRecommendProducts($objQuery, $arrList, $product_id); 504 505 $objQuery->commit(); 506 return $product_id; 507 } 508 509 510 /* 取得文字列の変換 */ 511 function lfConvertParam($array) { 512 /* 513 * 文字列の変換 514 * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換 515 * C : 「全角ひら仮名」を「全角かた仮名」に変換 516 * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します 517 * n : 「全角」数字を「半角(ハンカク)」に変換 518 */ 519 520 // スポット商品 521 $arrConvList['name'] = "KVa"; 522 $arrConvList['main_list_comment'] = "KVa"; 523 $arrConvList['main_comment'] = "KVa"; 524 $arrConvList['price01'] = "n"; 525 $arrConvList['price02'] = "n"; 526 $arrConvList['stock'] = "n"; 527 $arrConvList['sale_limit'] = "n"; 528 $arrConvList['point_rate'] = "n"; 529 $arrConvList['product_code'] = "KVna"; 530 $arrConvList['comment1'] = "a"; 531 $arrConvList['deliv_fee'] = "n"; 532 533 // 詳細-サブ 534 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 535 $arrConvList["sub_title$cnt"] = "KVa"; 536 } 537 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 538 $arrConvList["sub_comment$cnt"] = "KVa"; 539 } 540 541 // 関連商品 542 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 543 $arrConvList["recommend_comment$cnt"] = "KVa"; 544 } 545 546 // 文字変換 547 foreach ($arrConvList as $key => $val) { 548 // POSTされてきた値のみ変換する。 549 if(isset($array[$key])) { 550 $array[$key] = mb_convert_kana($array[$key] ,$val); 551 } 552 } 553 554 if (!isset($array['product_flag'])) $array['product_flag'] = ""; 555 $max = max(array_keys($this->arrSTATUS)); 556 $array['product_flag'] = SC_Utils_Ex::sfMergeCheckBoxes($array['product_flag'], $max); 557 558 return $array; 559 } 560 561 // 入力エラーチェック 562 function lfErrorCheck($array) { 563 564 $objErr = new SC_CheckError($array); 565 $objErr->doFunc(array("商品名", "name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 566 $objErr->doFunc(array("一覧-メインコメント", "main_list_comment", MTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 567 $objErr->doFunc(array("詳細-メインコメント", "main_comment", LLTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 568 $objErr->doFunc(array("詳細-メインコメント", "main_comment", $this->arrAllowedTag), array("HTML_TAG_CHECK")); 569 $objErr->doFunc(array("ポイント付与率", "point_rate", PERCENTAGE_LEN), array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 570 $objErr->doFunc(array("商品送料", "deliv_fee", PRICE_LEN), array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 571 $objErr->doFunc(array("備考欄(SHOP専用)", "note", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 572 $objErr->doFunc(array("検索ワード", "comment3", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 573 $objErr->doFunc(array("メーカーURL", "comment1", URL_LEN), array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK")); 574 $objErr->doFunc(array("発送日目安", "deliv_date_id", INT_LEN), array("NUM_CHECK")); 575 $objErr->doFunc(array("メーカー", 'maker_id', INT_LEN), array("NUM_CHECK")); 576 577 if($this->tpl_nonclass) { 578 $objErr->doFunc(array("商品コード", "product_code", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK","MAX_LENGTH_CHECK")); 579 $objErr->doFunc(array(NORMAL_PRICE_TITLE, "price01", PRICE_LEN), array("NUM_CHECK", "MAX_LENGTH_CHECK")); 580 $objErr->doFunc(array(SALE_PRICE_TITLE, "price02", PRICE_LEN), array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 581 582 if(!isset($array['stock_unlimited']) && $array['stock_unlimited'] != "1") { 583 $objErr->doFunc(array("在庫数", "stock", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 584 } 585 } 586 587 if(!isset($array['sale_unlimited']) && $array['sale_unlimited'] != "1") { 588 $objErr->doFunc(array("購入制限", "sale_limit", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 589 } 590 591 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 592 $objErr->doFunc(array("詳細-サブタイトル$cnt", "sub_title$cnt", STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 593 $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 594 $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", $this->arrAllowedTag), array("HTML_TAG_CHECK")); 595 } 596 597 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 598 599 if (!isset($_POST["recommend_delete$cnt"])) $_POST["recommend_delete$cnt"] = ""; 600 601 if(isset($_POST["recommend_id$cnt"]) 602 && $_POST["recommend_id$cnt"] != "" 603 && $_POST["recommend_delete$cnt"] != 1) { 604 $objErr->doFunc(array("関連商品コメント$cnt", "recommend_comment$cnt", LTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 605 } 606 } 607 608 // カテゴリID のチェック 609 if (empty($array['category_id'])) { 610 $objErr->arrErr['category_id'] = "※ 商品カテゴリが選択されていません。<br />"; 611 } else { 612 $arrCategory_id = array(); 613 for ($i = 0; $i < count($array['category_id']); $i++) { 614 $arrCategory_id['category_id' . $i] = $array['category_id'][$i]; 615 } 616 $objCheckCategory = new SC_CheckError($arrCategory_id); 617 for ($i = 0; $i < count($array['category_id']); $i++) { 618 $objCheckCategory->doFunc(array("商品カテゴリ", "category_id" . $i, STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 619 } 620 if (!empty($objCheckCategory->arrErr)) { 621 $objErr->arrErr = array_merge($objErr->arrErr, 622 $objCheckCategory->arrErr); 623 } 624 } 625 return $objErr->arrErr; 626 } 627 628 /* 確認ページ表示用 */ 629 function lfProductConfirmPage() { 630 $this->tpl_mainpage = 'products/confirm.tpl'; 631 $this->arrForm['mode'] = 'complete'; 632 633 $objDb = new SC_Helper_DB_Ex(); 634 635 // カテゴリ表示 636 $this->arrCategory_id = $this->arrForm['category_id']; 637 $this->arrCatList = array(); 638 list($arrCatVal, $arrCatOut) = $objDb->sfGetLevelCatList(false); 639 for ($i = 0; $i < count($arrCatVal); $i++) { 640 $this->arrCatList[$arrCatVal[$i]] = $arrCatOut[$i]; 641 } 642 643 // hidden に渡す値は serialize する 644 $this->arrForm['category_id'] = serialize($this->arrForm['category_id']); 645 646 // Form用配列を渡す。 647 $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URL, IMAGE_SAVE_URL); 648 } 649 650 /* 規格あり判定用(規格が登録されていない場合:TRUE) */ 651 function lfCheckNonClass($product_id) { 652 if(SC_Utils_Ex::sfIsInt($product_id)) { 653 $objQuery = new SC_Query(); 654 $where = "product_id = ? AND classcategory_id1 <> 0 AND classcategory_id1 <> 0"; 655 $count = $objQuery->count("dtb_products_class", $where, array($product_id)); 656 if($count > 0) { 657 return false; 658 } 659 } 660 return true; 661 } 662 663 // 縮小した画像をセットする 664 function lfSetScaleImage(){ 665 666 $subno = str_replace("sub_large_image", "", $_POST['image_key']); 667 switch ($_POST['image_key']){ 668 case "main_large_image": 669 // 詳細メイン画像 670 $this->lfMakeScaleImage($_POST['image_key'], "main_image"); 671 case "main_image": 672 // 一覧メイン画像 673 $this->lfMakeScaleImage($_POST['image_key'], "main_list_image"); 674 break; 675 case "sub_large_image" . $subno: 676 // サブメイン画像 677 $this->lfMakeScaleImage($_POST['image_key'], "sub_image" . $subno); 678 break; 679 default: 680 break; 681 } 682 } 683 684 // 縮小画像生成 685 function lfMakeScaleImage($from_key, $to_key, $forced = false){ 686 $arrImageKey = array_flip($this->objUpFile->keyname); 687 688 if($this->objUpFile->temp_file[$arrImageKey[$from_key]]){ 689 $from_path = $this->objUpFile->temp_dir . $this->objUpFile->temp_file[$arrImageKey[$from_key]]; 690 }elseif($this->objUpFile->save_file[$arrImageKey[$from_key]]){ 691 $from_path = $this->objUpFile->save_dir . $this->objUpFile->save_file[$arrImageKey[$from_key]]; 692 }else{ 693 return ""; 694 } 695 696 if(file_exists($from_path)){ 697 // 元画像サイズを取得 698 list($from_w, $from_h) = getimagesize($from_path); 699 700 // 生成先の画像サイズを取得 701 $to_w = $this->objUpFile->width[$arrImageKey[$to_key]]; 702 $to_h = $this->objUpFile->height[$arrImageKey[$to_key]]; 703 704 705 if($forced) $this->objUpFile->save_file[$arrImageKey[$to_key]] = ""; 706 707 if(empty($this->objUpFile->temp_file[$arrImageKey[$to_key]]) && 708 empty($this->objUpFile->save_file[$arrImageKey[$to_key]])) { 709 710 $path = $this->objUpFile->makeThumb($from_path, $to_w, $to_h); 711 $this->objUpFile->temp_file[$arrImageKey[$to_key]] = basename($path); 712 } 713 }else{ 714 return ""; 715 } 716 } 717 /** 718 * dtb_products_classの複製 719 * 複製後、価格や商品コードを更新する 720 * 721 * @param array $arrList 722 * @param array $objQuery 723 * @return bool 724 */ 725 protected function lfCopyProductClass($arrList,$objQuery) 726 { 727 // 複製元のdtb_products_classを取得(1件しかないはず) 728 $col = "*"; 729 $table = "dtb_products_class"; 730 $where = "product_id = ?"; 731 $arrProductClass = $objQuery->select($col, $table, $where, array($arrList["copy_product_id"])); 732 733 //トランザクション開始 734 $objQuery->begin(); 735 $err_flag = false; 736 //非編集項目はコピー、編集項目は上書きして登録 737 foreach($arrProductClass as $records) 738 { 739 foreach($records as $key => $value) 740 { 741 if(isset($arrList[$key])) 742 { 743 $records[$key] = $arrList[$key]; 744 } 745 } 746 unset($records["product_class_id"]); 747 unset($records["update_date"]); 748 749 $records["create_date"] = "Now()"; 750 $objQuery->insert($table, $records); 751 //エラー発生時は中断 752 if($objQuery->isError()) 753 { 754 $err_flag = true; 755 continue; 756 } 757 } 758 //トランザクション終了 759 if($err_flag) 760 { 761 $objQuery->rollback(); 762 } 763 else 764 { 765 $objQuery->commit(); 766 } 767 return !$err_flag; 768 } 707 769 } 708 770 ?>
Note: See TracChangeset
for help on using the changeset viewer.
