Changeset 20386
- Timestamp:
- 2011/02/24 19:28:12 (11 years ago)
- Location:
- branches/version-2_5-dev/data
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/Smarty/templates/admin/products/confirm.tpl
r20116 r20386 23 23 *}--> 24 24 <form name="form1" id="form1" method="post" action="?" enctype="multipart/form-data"> 25 <!--{foreach key=key item=item from=$arrSearchHidden}--> 26 <input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" /> 27 <!--{/foreach}--> 28 <input type="hidden" name="mode" value="complete" /> 25 29 <!--{foreach key=key item=item from=$arrForm}--> 26 30 <!--{if $key == 'product_status'}--> … … 44 48 <th>商品カテゴリ</th> 45 49 <td> 46 <!--{section name=cnt loop=$arr Category_id}-->47 <!--{assign var=key value=$arr Category_id[cnt]}-->50 <!--{section name=cnt loop=$arrForm.arrCategoryId}--> 51 <!--{assign var=key value=$arrForm.arrCategoryId[cnt]}--> 48 52 <!--{$arrCatList[$key]|strip|sfTrim}--><br /> 49 53 <!--{/section}--> … … 65 69 </tr> 66 70 67 <!--{if $ tpl_nonclass == true}-->71 <!--{if $arrForm.has_product_class != true}--> 68 72 <tr> 69 73 <th>商品種別</th> … … 73 77 </tr> 74 78 <tr> 75 <th>ダウンロード ファイル名</th>79 <th>ダウンロード商品ファイル名</th> 76 80 <td> 77 81 <!--{$arrForm.down_filename|h}--> … … 188 192 <td> 189 193 <!--{assign var=key value="main_list_image"}--> 190 <!--{if $arrF ile[$key].filepath != ""}-->191 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br />194 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 195 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 192 196 <!--{/if}--> 193 197 </td> … … 197 201 <td> 198 202 <!--{assign var=key value="main_image"}--> 199 <!--{if $arrF ile[$key].filepath != ""}-->200 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br />203 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 204 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 201 205 <!--{/if}--> 202 206 </td> … … 206 210 <td> 207 211 <!--{assign var=key value="main_large_image"}--> 208 <!--{if $arrF ile[$key].filepath != ""}-->209 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br />212 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 213 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 210 214 <!--{/if}--> 211 215 </td> … … 237 241 <td> 238 242 <!--{assign var=key value="sub_image`$smarty.section.cnt.iteration`"}--> 239 <!--{if $arrF ile[$key].filepath != ""}-->240 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br />243 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 244 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 241 245 <!--{/if}--> 242 246 </td> … … 246 250 <td> 247 251 <!--{assign var=key value="sub_large_image`$smarty.section.cnt.iteration`"}--> 248 <!--{if $arrF ile[$key].filepath != ""}-->249 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br />252 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 253 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /><br /> 250 254 <!--{/if}--> 251 255 </td> -
branches/version-2_5-dev/data/Smarty/templates/admin/products/product.tpl
r20116 r20386 23 23 *}--> 24 24 <script type="text/javascript"> 25 // URLの表示非表示切り替え25 // 表示非表示切り替え 26 26 function lfDispSwitch(id){ 27 27 var obj = document.getElementById(id); … … 69 69 <input type="hidden" name="copy_product_id" value="<!--{$arrForm.copy_product_id}-->" /> 70 70 <input type="hidden" name="anchor_key" value="" /> 71 <!--{foreach key=key item=item from=$arrHidden}--> 71 <input type="hidden" name="has_product_class" value="<!--{$arrForm.has_product_class|h}-->" /> 72 <!--{foreach key=key item=item from=$arrForm.arrHidden}--> 72 73 <input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" /> 73 74 <!--{/foreach}--> … … 123 124 </td> 124 125 </tr> 125 <!--{if $ tpl_nonclass == true}-->126 <!--{if $arrForm.has_product_class == false}--> 126 127 <tr> 127 128 <th>商品種別<span class="attention"> *</span></th> … … 131 132 </tr> 132 133 <tr> 133 <th>ダウンロード ファイル名<span class="attention"> *</span></th>134 <th>ダウンロード商品ファイル名<span class="attention"> *</span></th> 134 135 <td> 135 136 <span class="attention"><!--{$arrErr.down_filename}--></span> … … 140 141 <tr> 141 142 <!--{assign var=key value="down_file"}--> 142 <th>ダウンロード商品用ファイルアップロード<span class="attention"> *</span></th> 143 <td> 143 <th>ダウンロード商品用<br />ファイルアップロード<span class="attention"> *</span></th> 144 <td> 145 <a name="<!--{$key}-->"></a> 144 146 <span class="attention"><!--{$arrErr[$key]}--><!--{$arrErr.down_realfilename}--></span> 145 147 <!--{if $arrForm.down_realfilename != ""}--> … … 198 200 <td> 199 201 <span class="attention"><!--{$arrErr.point_rate}--></span> 200 <input type="text" name="point_rate" value="<!--{$arrForm.point_rate|default:$arr Info.point_rate|h}-->" size="6" class="box6" maxlength="<!--{$smarty.const.PERCENTAGE_LEN}-->" style="<!--{if $arrErr.point_rate != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->"/>%202 <input type="text" name="point_rate" value="<!--{$arrForm.point_rate|default:$arrForm.arrInfo.point_rate|h}-->" size="6" class="box6" maxlength="<!--{$smarty.const.PERCENTAGE_LEN}-->" style="<!--{if $arrErr.point_rate != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->"/>% 201 203 <span class="attention"> (半角数字で入力)</span> 202 204 </td> … … 278 280 <a name="main_large_image"></a> 279 281 <span class="attention"><!--{$arrErr[$key]}--></span> 280 <!--{if $arrF ile[$key].filepath != ""}-->281 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br />282 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 283 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 282 284 <!--{/if}--> 283 285 <input type="file" name="main_list_image" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /> … … 290 292 <td> 291 293 <span class="attention"><!--{$arrErr[$key]}--></span> 292 <!--{if $arrF ile[$key].filepath != ""}-->293 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br />294 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 295 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 294 296 <!--{/if}--> 295 297 <input type="file" name="main_image" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /> … … 302 304 <td> 303 305 <span class="attention"><!--{$arrErr[$key]}--></span> 304 <!--{if $arrF ile[$key].filepath != ""}-->305 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br />306 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 307 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 306 308 <!--{/if}--> 307 309 <input type="file" name="<!--{$key}-->" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /> … … 320 322 </div> 321 323 322 <!--{if $ sub_find == true}-->324 <!--{if $arrForm.sub_find == true}--> 323 325 <div id="sub_detail" style=""> 324 326 <!--{else}--> … … 355 357 <a name="<!--{$largekey}-->"></a> 356 358 <span class="attention"><!--{$arrErr[$key]}--></span> 357 <!--{if $arrF ile[$key].filepath != ""}-->358 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br />359 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 360 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 359 361 <!--{/if}--> 360 362 <input type="file" name="<!--{$key}-->" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->"/> … … 367 369 <td> 368 370 <span class="attention"><!--{$arrErr[$key]}--></span> 369 <!--{if $arrF ile[$key].filepath != ""}-->370 <img src="<!--{$arrF ile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br />371 <!--{if $arrForm.arrFile[$key].filepath != ""}--> 372 <img src="<!--{$arrForm.arrFile[$key].filepath}-->" alt="<!--{$arrForm.name|h}-->" /> <a href="" onclick="selectAll('category_id'); fnModeSubmit('delete_image', 'image_key', '<!--{$key}-->'); return false;">[画像の取り消し]</a><br /> 371 373 <!--{/if}--> 372 374 <input type="file" name="<!--{$key}-->" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->"/> … … 383 385 </div> 384 386 387 <!--{if $smarty.const.OPTION_RECOMMEND == 1}--> 385 388 <!--{if count($arrRecommend) > 0}--> 386 389 <div id="recommend_select" style=""> … … 390 393 <h2>関連商品</h2> 391 394 <table class="form"> 392 <!--{if $smarty.const.OPTION_RECOMMEND == 1}-->393 395 <!--▼関連商品--> 394 396 <!--{section name=cnt loop=$smarty.const.RECOMMEND_PRODUCT_MAX}--> … … 418 420 <!--{/section}--> 419 421 <!--▲関連商品--> 420 <!--{/if}-->421 422 </table> 422 423 </div> 424 <!--{/if}--> 423 425 424 426 <div class="btn-area"> -
branches/version-2_5-dev/data/class/SC_Product.php
r20148 r20386 531 531 $objQuery->delete('dtb_product_status', 'product_id = ?', array($productId)); 532 532 foreach ($productStatusIds as $productStatusId) { 533 if($productStatusId == '') continue; 533 534 $val['product_status_id'] = $productStatusId; 534 535 $objQuery->insert('dtb_product_status', $val); -
branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
r20345 r20386 23 23 24 24 // {{{ requires 25 require_once(CLASS_EX_REALDIR . "page_extends/admin/ LC_Page_Admin_Ex.php");25 require_once(CLASS_EX_REALDIR . "page_extends/admin/products/LC_Page_Admin_Products_Ex.php"); 26 26 27 27 /** … … 32 32 * @version $Id$ 33 33 */ 34 class LC_Page_Admin_Products_Product extends LC_Page_Admin_Ex { 35 36 // {{{ properties 37 38 /** ファイル管理クラスのインスタンス */ 39 var $objUpFile; 40 41 /** ダウンロード用ファイル管理クラスのインスタンス */ 42 var $objDownFile; 43 44 /** hidden 項目の配列 */ 45 var $arrHidden; 46 47 /** エラー情報 */ 48 var $arrErr; 34 class LC_Page_Admin_Products_Product extends LC_Page_Admin_Products_Ex { 49 35 50 36 // }}} … … 63 49 $this->tpl_subno = 'product'; 64 50 $this->tpl_subtitle = '商品登録'; 65 $this->arrErr = array();66 51 67 52 $masterData = new SC_DB_MasterData_Ex(); 53 $this->arrProductType = $masterData->getMasterData("mtb_product_type"); 68 54 $this->arrDISP = $masterData->getMasterData("mtb_disp"); 69 55 $this->arrCLASS = $masterData->getMasterData("mtb_class"); … … 71 57 $this->arrSTATUS_IMAGE = $masterData->getMasterData("mtb_status_image"); 72 58 $this->arrDELIVERYDATE = $masterData->getMasterData("mtb_delivery_date"); 59 $this->arrMaker = SC_Helper_DB_Ex::sfGetIDValueList("dtb_maker", "maker_id", "name"); 73 60 $this->arrAllowedTag = $masterData->getMasterData("mtb_allowed_tag"); 74 $this->arrProductType = $masterData->getMasterData("mtb_product_type");75 $this->arrMaker = SC_Helper_DB_Ex::sfGetIDValueList("dtb_maker", "maker_id", "name");76 $this->tpl_nonclass = true;77 61 } 78 62 … … 93 77 */ 94 78 function action() { 95 $objSiteInfo = new SC_SiteInfo(); 96 $objQuery = new SC_Query(); 97 $objDb = new SC_Helper_DB_Ex(); 98 $objProduct = new SC_Product(); 99 100 // Downファイル管理クラス 101 $this->objDownFile = new SC_UploadFile(DOWN_TEMP_REALDIR, DOWN_SAVE_REALDIR); 102 // Downファイル情報の初期化 103 $this->lfInitDownFile(); 104 // Hiddenからのデータを引き継ぐ 105 $this->objDownFile->setHiddenFileList($_POST); 106 107 // ファイル管理クラス 108 $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_REALDIR, IMAGE_SAVE_REALDIR); 109 110 // ファイル情報の初期化 111 $this->lfInitFile(); 112 // Hiddenからのデータを引き継ぐ 113 $this->objUpFile->setHiddenFileList($_POST); 114 115 // 規格の有り無し判定 116 $this->tpl_nonclass = !$objDb->sfHasProductClass($_POST['product_id']); 117 118 // 検索パラメータの引き継ぎ 119 foreach ($_POST as $key => $val) { 120 if (ereg("^search_", $key)) { 121 $this->arrSearchHidden[$key] = $val; 122 } 123 } 124 125 // FORMデータの引き継ぎ 126 $this->arrForm = $_POST; 127 128 switch($this->getMode()) { 129 // 検索画面からの編集 130 case 'pre_edit': 131 case 'copy' : 132 if (!SC_Utils_Ex::sfIsInt($_POST['product_id'])) { 133 SC_Utils_Ex::sfDispException(); 134 } 135 136 // DBから商品情報の読込 137 $this->arrForm = $this->lfGetProduct($_POST['product_id']); 138 $productStatus= $objProduct->getProductStatus(array($_POST['product_id'])); 139 $this->arrForm['product_status'] = $productStatus[$_POST['product_id']]; 140 141 // DBデータから画像ファイル名の読込 142 $this->objUpFile->setDBFileList($this->arrForm); 143 // DBデータからダウンロードファイル名の読込 144 $this->objDownFile->setDBDownFile($this->arrForm); 145 146 // 商品ステータスの変換 147 $arrRet = SC_Utils_Ex::sfSplitCBValue($this->arrForm['product_flag'], "product_flag"); 148 $this->arrForm = array_merge($this->arrForm, $arrRet); 149 // DBから関連商品の読み込み 150 $this->lfPreGetRecommendProducts($_POST['product_id']); 151 152 $this->lfProductPage(); // 商品登録ページ 153 //TODO 要リファクタリング(MODE if利用) 154 if($this->getMode() == "copy"){ 155 $this->arrForm["copy_product_id"] = $this->arrForm["product_id"]; 156 $this->arrForm["product_id"] = ""; 157 // 画像ファイルのコピー 158 $arrKey = $this->objUpFile->keyname; 159 $arrSaveFile = $this->objUpFile->save_file; 160 161 foreach($arrSaveFile as $key => $val){ 162 $this->lfMakeScaleImage($arrKey[$key], $arrKey[$key], true); 163 } 79 $objFormParam = new SC_FormParam(); 80 81 // アップロードファイル情報の初期化 82 $objUpFile = new SC_UploadFile(IMAGE_TEMP_REALDIR, IMAGE_SAVE_REALDIR); 83 $this->lfInitFile($objUpFile); 84 $objUpFile->setHiddenFileList($_POST); 85 86 // ダウンロード販売ファイル情報の初期化 87 $objDownFile = new SC_UploadFile(DOWN_TEMP_REALDIR, DOWN_SAVE_REALDIR); 88 $this->lfInitDownFile($objDownFile); 89 $objDownFile->setHiddenFileList($_POST); 90 91 // 検索パラメータ引き継ぎ 92 $this->arrSearchHidden = $this->lfGetSearchParam($_POST); 93 94 $mode = $this->getMode(); 95 switch($mode) { 96 case 'pre_edit': 97 case 'copy' : 98 // パラメータ初期化(商品ID) 99 $this->lfInitFormParam_PreEdit($objFormParam, $_POST); 100 // エラーチェック 101 $this->arrErr = $objFormParam->checkError(); 102 if(count($this->arrErr) > 0) { 103 SC_Utils_Ex::sfDispException(); 104 } 105 106 // 商品ID取得 107 $product_id = $objFormParam->getValue('product_id'); 108 // 商品データ取得 109 $arrForm = $this->lfGetFormParam_PreEdit($objUpFile, $objDownFile, $product_id); 110 // ページ表示用パラメータ設定 111 $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 112 113 // 商品複製の場合、画像ファイルコピー 114 if($mode == "copy") { 115 $this->arrForm["copy_product_id"] = $this->arrForm["product_id"]; 116 $this->arrForm["product_id"] = ""; 117 // 画像ファイルのコピー 118 $this->lfCopyProductImageFiles($objUpFile); 119 } 120 121 // ページonload時のJavaScript設定 122 $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 123 break; 124 125 case 'edit': 126 // パラメータ初期化, 取得 127 $this->lfInitFormParam($objFormParam, $_POST); 128 $arrForm = $objFormParam->getHashArray(); 129 // エラーチェック 130 $this->arrErr = $this->lfCheckError_Edit($objFormParam, $objUpFile, $objDownFile, $arrForm); 131 if(count($this->arrErr) == 0) { 132 // 確認画面表示設定 133 $this->tpl_mainpage = 'products/confirm.tpl'; 134 $this->arrCatList = $this->lfGetCategoryList_Edit(); 135 $this->arrForm = $this->lfSetViewParam_ConfirmPage($objUpFile, $objDownFile, $arrForm); 136 } else { 137 // 入力画面表示設定 138 $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 139 // ページonload時のJavaScript設定 140 $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 141 } 142 break; 143 144 case 'complete': 145 // パラメータ初期化, 取得 146 $this->lfInitFormParam($objFormParam, $_POST); 147 $arrForm = $this->lfGetFormParam_Complete($objFormParam); 148 // エラーチェック 149 $this->arrErr = $this->lfCheckError_Edit($objFormParam, $objUpFile, $objDownFile, $arrForm); 150 if(count($this->arrErr) == 0) { 151 // DBへデータ登録 152 $product_id = $this->lfRegistProduct($objUpFile, $objDownFile, $arrForm); 153 154 // 件数カウントバッチ実行 155 $objQuery =& SC_Query::getSingletonInstance(); 156 $objDb = new SC_Helper_DB_Ex(); 157 $objDb->sfCountCategory($objQuery); 158 $objDb->sfCountMaker($objQuery); 159 160 // 一時ファイルを本番ディレクトリに移動する 161 $this->lfSaveUploadFiles($objUpFile, $objDownFile, $product_id); 162 163 $this->tpl_mainpage = 'products/complete.tpl'; 164 $this->arrForm['product_id'] = $product_id; 165 } else { 166 // 入力画面表示設定 167 $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 168 // ページonload時のJavaScript設定 169 $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 170 } 171 break; 172 173 // 画像のアップロード 174 case 'upload_image': 175 case 'delete_image': 176 // パラメータ初期化 177 $this->lfInitFormParam_UploadImage($objFormParam); 178 $this->lfInitFormParam($objFormParam, $_POST); 179 $arrForm = $objFormParam->getHashArray(); 180 181 switch($mode) { 182 case 'upload_image': 183 // ファイルを一時ディレクトリにアップロード 184 $this->arrErr[$arrForm['image_key']] = $objUpFile->makeTempFile($arrForm['image_key'], IMAGE_RENAME); 185 if($this->arrErr[$arrForm['image_key']] == "") { 186 // 縮小画像作成 187 $this->lfSetScaleImage($objUpFile, $arrForm['image_key']); 164 188 } 165 189 break; 166 // 商品登録・編集 167 case 'edit': 168 if($_POST['product_id'] == "" and SC_Utils_Ex::sfIsInt($_POST['copy_product_id'])){ 169 $this->tpl_nonclass = !$objDb->sfHasProductClass($_POST['copy_product_id']); 170 } 171 172 // 入力値の変換 173 $this->arrForm = $this->lfConvertParam($this->arrForm); 174 // エラーチェック 175 $this->arrErr = $this->lfErrorCheck($this->arrForm); 176 // ファイル存在チェック 177 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objUpFile->checkEXISTS()); 178 // エラーなしの場合 179 if(count($this->arrErr) == 0) { 180 $this->lfProductConfirmPage(); // 確認ページ 181 } else { 182 $this->lfProductPage(); // 商品登録ページ 183 } 190 case 'delete_image': 191 // ファイル削除 192 $this->lfDeleteTempFile($objUpFile, $arrForm['image_key']); 184 193 break; 185 // 確認ページから完了ページへ 186 case 'complete': 187 $this->tpl_mainpage = 'products/complete.tpl'; 188 189 $this->arrForm['product_id'] = $this->lfRegistProduct($_POST); // データ登録 190 191 // 件数カウントバッチ実行 192 $objDb->sfCountCategory($objQuery); 193 $objDb->sfCountMaker($objQuery); 194 // 一時ファイルを本番ディレクトリに移動する 195 // TODO: SC_UploadFile::moveTempFileの画像削除条件見直し要 196 $objImage = new SC_Image($this->objUpFile->temp_dir); 197 $arrKeyName = $this->objUpFile->keyname; 198 $arrTempFile = $this->objUpFile->temp_file; 199 $arrSaveFile = $this->objUpFile->save_file; 200 $arrImageKey = array(); 201 foreach ($arrTempFile as $key => $temp_file) { 202 if ($temp_file) { 203 $objImage->moveTempImage($temp_file, $this->objUpFile->save_dir); 204 $arrImageKey[] = $arrKeyName[$key]; 205 if (!empty($arrSaveFile[$key]) && !$this->lfHasSameProductImage($this->arrForm['product_id'], $arrImageKey, $arrSaveFile[$key]) && !in_array($temp_file, $arrSaveFile)) { 206 $objImage->deleteImage($arrSaveFile[$key], $this->objUpFile->save_dir); 207 } 208 } 209 } 210 $this->objDownFile->moveTempDownFile(); 211 194 } 195 196 // 入力画面表示設定 197 $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 198 // ページonload時のJavaScript設定 199 $anchor_hash = $this->getAnchorHash($arrForm['image_key']); 200 $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage($anchor_hash); 201 break; 202 203 // ダウンロード商品ファイルアップロード 204 case 'upload_down': 205 case 'delete_down': 206 // パラメータ初期化 207 $this->lfInitFormParam_UploadDown($objFormParam); 208 $this->lfInitFormParam($objFormParam, $_POST); 209 $arrForm = $objFormParam->getHashArray(); 210 211 switch($mode) { 212 case 'upload_down': 213 // ファイルを一時ディレクトリにアップロード 214 $this->arrErr[$arrForm['down_key']] = $objDownFile->makeTempDownFile(); 212 215 break; 213 // 画像のアップロード 214 case 'upload_image': 215 // ファイル存在チェック 216 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objUpFile->checkEXISTS($_POST['image_key'])); 217 // 画像保存処理 218 $this->arrErr[$_POST['image_key']] = $this->objUpFile->makeTempFile($_POST['image_key'],IMAGE_RENAME); 219 220 // 中、小画像生成 221 $this->lfSetScaleImage(); 222 223 $this->lfProductPage(); // 商品登録ページ 216 case 'delete_down': 217 // ファイル削除 218 $objDownFile->deleteFile($arrForm['down_key']); 224 219 break; 225 // 画像の削除 226 case 'delete_image': 227 // TODO: SC_UploadFile::deleteFileの画像削除条件見直し要 228 $arrTempFile = $this->objUpFile->temp_file; 229 $arrKeyName = $this->objUpFile->keyname; 230 foreach ($arrKeyName as $key => $keyname) { 231 if ($keyname != $_POST['image_key']) continue; 232 if (!empty($arrTempFile[$key])) { 233 $temp_file = $arrTempFile[$key]; 234 $arrTempFile[$key] = ''; 235 if (!in_array($temp_file, $arrTempFile)) { 236 $this->objUpFile->deleteFile($_POST['image_key']); 237 } else { 238 $this->objUpFile->temp_file[$key] = ''; 239 $this->objUpFile->save_file[$key] = ''; 240 } 241 } else { 242 $this->objUpFile->temp_file[$key] = ''; 243 $this->objUpFile->save_file[$key] = ''; 244 } 245 } 246 $this->lfProductPage(); // 商品登録ページ 247 break; 248 // ダウンロード商品ファイルアップロード 249 case 'upload_down': 250 // ファイル存在チェック 251 $this->arrErr = array_merge((array)$this->arrErr, (array)$this->objDownFile->checkEXISTS($_POST['down_key'])); 252 // 画像保存処理 253 $this->arrErr[$_POST['down_key']] = $this->objDownFile->makeTempDownFile(); 254 255 $this->lfProductPage(); // 商品登録ページ 256 break; 257 // ダウンロードファイルの削除 258 case 'delete_down': 259 $this->objDownFile->deleteFile($_POST['down_key']); 260 $this->lfProductPage(); // 商品登録ページ 261 break; 262 // 確認ページからの戻り 263 case 'confirm_return': 264 $this->lfProductPage(); // 商品登録ページ 265 break; 266 // 関連商品選択 267 case 'recommend_select' : 268 $this->lfProductPage(); // 商品登録ページ 269 break; 270 default: 271 $this->lfProductPage(); // 商品登録ページ 272 break; 220 } 221 222 // 入力画面表示設定 223 $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 224 // ページonload時のJavaScript設定 225 $anchor_hash = $this->getAnchorHash($arrForm['down_key']); 226 $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage($anchor_hash); 227 break; 228 229 // 関連商品選択 230 case 'recommend_select' : 231 // パラメータ初期化 232 $this->lfInitFormParam_RecommendSelect($objFormParam); 233 $this->lfInitFormParam($objFormParam, $_POST); 234 $arrForm = $objFormParam->getHashArray(); 235 // 入力画面表示設定 236 $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 237 // ページonload時のJavaScript設定 238 $anchor_hash = $this->getAnchorHash($arrForm['anchor_key']); 239 $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage($anchor_hash); 240 break; 241 242 // 確認ページからの戻り 243 case 'confirm_return': 244 // パラメータ初期化 245 $this->lfInitFormParam($objFormParam, $_POST); 246 $arrForm = $objFormParam->getHashArray(); 247 // 入力画面表示設定 248 $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 249 // ページonload時のJavaScript設定 250 $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 251 break; 252 253 default: 254 // 入力画面表示設定 255 $arrForm = array(); 256 $this->arrForm = $this->lfSetViewParam_InputPage($objUpFile, $objDownFile, $arrForm); 257 // ページonload時のJavaScript設定 258 $this->tpl_onload = $this->lfSetOnloadJavaScript_InputPage(); 259 break; 273 260 } 274 261 275 262 // 関連商品の読み込み 276 $this->arrRecommend = $this->lfGetRecommendProducts(); 277 278 // 基本情報を渡す 279 $this->arrInfo = $objSiteInfo->data; 280 281 // サブ情報の入力があるかどうかチェックする 282 $sub_find = false; 283 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 284 if( (isset($this->arrForm['sub_title'.$cnt]) 285 && !empty($this->arrForm['sub_title'.$cnt])) || 286 (isset($this->arrForm['sub_comment'.$cnt]) 287 && !empty($this->arrForm['sub_comment'.$cnt])) || 288 (isset($this->arrForm['sub_image'.$cnt]) 289 && !empty($this->arrForm['sub_image'.$cnt])) || 290 (isset($this->arrForm['sub_large_image'.$cnt]) 291 && !empty($this->arrForm['sub_large_image'.$cnt])) || 292 (isset($this->arrForm['sub_image'.$cnt]) 293 && is_array($this->arrFile['sub_image'.$cnt])) || 294 (isset($this->arrForm['sub_large_image'.$cnt]) 295 && is_array($this->arrFile['sub_large_image'.$cnt]))) { 296 $sub_find = true; 297 break; 298 } 299 } 300 301 // サブ情報表示・非表示のチェックに使用する。 302 $this->sub_find = $sub_find; 263 $this->arrRecommend = $this->lfGetRecommendProducts($this->arrForm); 303 264 } 304 265 … … 313 274 314 275 /** 315 * 関連商品の名称などを商品マスタから読み込み、一つの配列にまとめて返す 316 * 317 * @return array 関連商品の情報を格納した2次元配列 318 */ 319 function lfGetRecommendProducts() { 276 * パラメータ情報の初期化 277 * - 編集/複製モード 278 * 279 * @param object $objFormParam SC_FormParamインスタンス 280 * @param array $arrPost $_POSTデータ 281 * @return void 282 */ 283 function lfInitFormParam_PreEdit(&$objFormParam, $arrPost) { 284 $objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 285 $objFormParam->setParam($arrPost); 286 $objFormParam->convParam(); 287 } 288 289 /** 290 * パラメータ情報の初期化 291 * 292 * @param object $objFormParam SC_FormParamインスタンス 293 * @param array $arrPost $_POSTデータ 294 * @return void 295 */ 296 function lfInitFormParam(&$objFormParam, $arrPost) { 297 $objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 298 $objFormParam->addParam("商品名", "name", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 299 $objFormParam->addParam("商品カテゴリ", "category_id", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 300 $objFormParam->addParam("公開・非公開", "status", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 301 $objFormParam->addParam("商品ステータス", "product_status", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 302 303 if($this->lfGetProductClassFlag($arrPost['has_product_class']) == false) { 304 // 新規登録, 規格なし商品の編集の場合 305 $objFormParam->addParam("商品種別", "product_type_id", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 306 $objFormParam->addParam("ダウンロード商品ファイル名", "down_filename", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 307 $objFormParam->addParam("ダウンロード商品実ファイル名", "down_realfilename", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 308 $objFormParam->addParam("temp_down_file", "temp_down_file", '', "", array()); 309 $objFormParam->addParam("save_down_file", "save_down_file", '', "", array()); 310 $objFormParam->addParam("商品コード", "product_code", STEXT_LEN, "KVna", array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK")); 311 $objFormParam->addParam(NORMAL_PRICE_TITLE, "price01", PRICE_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 312 $objFormParam->addParam(SALE_PRICE_TITLE, "price02", PRICE_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 313 $objFormParam->addParam("在庫数", "stock", AMOUNT_LEN, "n", array("SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 314 $objFormParam->addParam("在庫無制限", "stock_unlimited", INT_LEN, "n", array("SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 315 } 316 $objFormParam->addParam("商品送料", "deliv_fee", PRICE_LEN, "n", array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 317 $objFormParam->addParam("ポイント付与率", "point_rate", PERCENTAGE_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 318 $objFormParam->addParam("発送日目安", "deliv_date_id", INT_LEN, "n", array("NUM_CHECK")); 319 $objFormParam->addParam("購入制限", "sale_limit", AMOUNT_LEN, "n", array("SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 320 $objFormParam->addParam("メーカー", "maker_id", INT_LEN, "n", array("NUM_CHECK")); 321 $objFormParam->addParam("メーカーURL", "comment1", URL_LEN, "a", array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK")); 322 $objFormParam->addParam("検索ワード", "comment3", LLTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 323 $objFormParam->addParam("備考欄(SHOP専用)", "note", LLTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 324 $objFormParam->addParam("一覧-メインコメント", "main_list_comment", MTEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 325 $objFormParam->addParam("詳細-メインコメント", "main_comment", LLTEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 326 $objFormParam->addParam("save_main_list_image", "save_main_list_image", '', "", array()); 327 $objFormParam->addParam("save_main_image", "save_main_image", '', "", array()); 328 $objFormParam->addParam("save_main_large_image", "save_main_large_image", '', "", array()); 329 $objFormParam->addParam("temp_main_list_image", "temp_main_list_image", '', "", array()); 330 $objFormParam->addParam("temp_main_image", "temp_main_image", '', "", array()); 331 $objFormParam->addParam("temp_main_large_image", "temp_main_large_image", '', "", array()); 332 333 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 334 $objFormParam->addParam("詳細-サブタイトル" . $cnt, "sub_title" . $cnt, STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 335 $objFormParam->addParam("詳細-サブコメント" . $cnt, "sub_comment" . $cnt, LLTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 336 $objFormParam->addParam("save_sub_image" . $cnt, "save_sub_image" . $cnt, '', "", array()); 337 $objFormParam->addParam("save_sub_large_image" . $cnt, "save_sub_large_image" . $cnt, '', "", array()); 338 $objFormParam->addParam("temp_sub_image" . $cnt, "temp_sub_image" . $cnt, '', "", array()); 339 $objFormParam->addParam("temp_sub_large_image" . $cnt, "temp_sub_large_image" . $cnt, '', "", array()); 340 } 341 342 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 343 $objFormParam->addParam("関連商品コメント" . $cnt, "recommend_comment" . $cnt, LTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 344 $objFormParam->addParam("関連商品ID" . $cnt, "recommend_id" . $cnt, INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 345 $objFormParam->addParam("recommend_delete" . $cnt, "recommend_delete" . $cnt, '', "n", array()); 346 } 347 348 $objFormParam->addParam("商品ID", "copy_product_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 349 350 $objFormParam->addParam("has_product_class", "has_product_class", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 351 $objFormParam->addParam("product_class_id", "product_class_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 352 353 $objFormParam->setParam($arrPost); 354 $objFormParam->convParam(); 355 } 356 357 /** 358 * パラメータ情報の初期化 359 * - 画像ファイルアップロードモード 360 * 361 * @param object $objFormParam SC_FormParamインスタンス 362 * @return void 363 */ 364 function lfInitFormParam_UploadImage(&$objFormParam) { 365 $objFormParam->addParam("image_key", "image_key", "", "", array()); 366 } 367 368 /** 369 * パラメータ情報の初期化 370 * - ダウンロード商品ファイルアップロードモード 371 * 372 * @param object $objFormParam SC_FormParamインスタンス 373 * @return void 374 */ 375 function lfInitFormParam_UploadDown(&$objFormParam) { 376 $objFormParam->addParam("down_key", "down_key", "", "", array()); 377 } 378 379 /** 380 * パラメータ情報の初期化 381 * - 関連商品追加モード 382 * 383 * @param object $objFormParam SC_FormParamインスタンス 384 * @return void 385 */ 386 function lfInitFormParam_RecommendSelect(&$objFormParam) { 387 $objFormParam->addParam("anchor_key", "anchor_key", "", "", array()); 388 } 389 390 /** 391 * アップロードファイルパラメータ情報の初期化 392 * - 画像ファイル用 393 * 394 * @param object $objUpFile SC_UploadFileインスタンス 395 * @return void 396 */ 397 function lfInitFile(&$objUpFile) { 398 $objUpFile->addFile("一覧-メイン画像", 'main_list_image', array('jpg', 'gif', 'png'),IMAGE_SIZE, false, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); 399 $objUpFile->addFile("詳細-メイン画像", 'main_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_IMAGE_WIDTH, NORMAL_IMAGE_HEIGHT); 400 $objUpFile->addFile("詳細-メイン拡大画像", 'main_large_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_IMAGE_WIDTH, LARGE_IMAGE_HEIGHT); 401 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 402 $objUpFile->addFile("詳細-サブ画像$cnt", "sub_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_SUBIMAGE_WIDTH, NORMAL_SUBIMAGE_HEIGHT); 403 $objUpFile->addFile("詳細-サブ拡大画像$cnt", "sub_large_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_SUBIMAGE_WIDTH, LARGE_SUBIMAGE_HEIGHT); 404 } 405 } 406 407 /** 408 * アップロードファイルパラメータ情報の初期化 409 * - ダウンロード商品ファイル用 410 * 411 * @param object $objDownFile SC_UploadFileインスタンス 412 * @return void 413 */ 414 function lfInitDownFile(&$objDownFile) { 415 $objDownFile->addFile("ダウンロード販売用ファイル", 'down_file', explode(",", DOWNLOAD_EXTENSION),DOWN_SIZE, true, 0, 0); 416 } 417 418 /** 419 * フォーム入力パラメータのエラーチェック 420 * 421 * @param object $objFormParam SC_FormParamインスタンス 422 * @param object $objUpFile SC_UploadFileインスタンス 423 * @param object $objDownFile SC_UploadFileインスタンス 424 * @param array $arrForm フォーム入力パラメータ配列 425 * @return array エラー情報を格納した連想配列 426 */ 427 function lfCheckError_Edit(&$objFormParam, &$objUpFile, &$objDownFile, $arrForm) { 428 $objErr = new SC_CheckError($arrForm); 429 $arrErr = array(); 430 431 // 入力パラメータチェック 432 $arrErr = $objFormParam->checkError(); 433 434 // アップロードファイル必須チェック 435 $arrErr = array_merge((array)$arrErr, (array)$objUpFile->checkEXISTS()); 436 437 // HTMLタグ許可チェック 438 $objErr->doFunc(array("詳細-メインコメント", "main_comment", $this->arrAllowedTag), array("HTML_TAG_CHECK")); 439 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 440 $objErr->doFunc(array("詳細-サブコメント" . $cnt, "sub_comment" . $cnt, $this->arrAllowedTag), array("HTML_TAG_CHECK")); 441 } 442 443 // 規格情報がない商品の場合のチェック 444 if($arrForm['has_product_class'] != true) { 445 // 在庫必須チェック(在庫無制限ではない場合) 446 if(!isset($arrForm['stock_unlimited']) && $arrForm['stock_unlimited'] != UNLIMITED_FLG_UNLIMITED) { 447 $objErr->doFunc(array("在庫数", "stock"), array("EXIST_CHECK")); 448 } 449 // ダウンロード商品ファイル必須チェック(ダウンロード商品の場合) 450 if($arrForm['product_type_id'] == PRODUCT_TYPE_DOWNLOAD) { 451 $arrErr = array_merge((array)$arrErr, (array)$objDownFile->checkEXISTS()); 452 } 453 } 454 455 $arrErr = array_merge((array)$arrErr, (array)$objErr->arrErr); 456 return $arrErr; 457 } 458 459 /** 460 * 検索パラメータ引き継ぎ用配列取得 461 * 462 * @param array $arrPost $_POSTデータ 463 * @return array 検索パラメータ配列 464 */ 465 function lfGetSearchParam($arrPost) { 466 $arrSearchParam = array(); 467 $objFormParam = new SC_FormParam(); 468 469 parent::lfInitParam($objFormParam); 470 $objFormParam->setParam($arrPost); 471 $arrSearchParam = $objFormParam->getSearchArray(); 472 473 return $arrSearchParam; 474 } 475 476 /** 477 * フォームパラメータ取得 478 * - 編集/複製モード 479 * 480 * @param object $objUpFile SC_UploadFileインスタンス 481 * @param object $objDownFile SC_UploadFileインスタンス 482 * @param integer $product_id 商品ID 483 * @return array フォームパラメータ配列 484 */ 485 function lfGetFormParam_PreEdit(&$objUpFile, &$objDownFile, $product_id) { 486 $arrForm = array(); 487 488 // DBから商品データ取得 489 $arrForm = $this->lfGetProductData_FromDB($product_id); 490 // DBデータから画像ファイル名の読込 491 $objUpFile->setDBFileList($arrForm); 492 // DBデータからダウンロードファイル名の読込 493 $objDownFile->setDBDownFile($arrForm); 494 495 return $arrForm; 496 } 497 498 /** 499 * フォームパラメータ取得 500 * - 登録モード 501 * 502 * @param object $objFormParam SC_FormParamインスタンス 503 * @return array フォームパラメータ配列 504 */ 505 function lfGetFormParam_Complete(&$objFormParam) { 506 $arrForm = $objFormParam->getHashArray(); 507 $arrForm['category_id'] = unserialize($arrForm['category_id']); 508 $objFormParam->setValue('category_id', $arrForm['category_id']); 509 510 return $arrForm; 511 } 512 513 /** 514 * 表示用フォームパラメータ取得 515 * - 入力画面 516 * 517 * @param object $objUpFile SC_UploadFileインスタンス 518 * @param object $objDownFile SC_UploadFileインスタンス 519 * @param array $arrForm フォーム入力パラメータ配列 520 * @return array 表示用フォームパラメータ配列 521 */ 522 function lfSetViewParam_InputPage(&$objUpFile, &$objDownFile, &$arrForm) { 523 // カテゴリマスタデータ取得 524 $objDb = new SC_Helper_DB_Ex(); 525 list($this->arrCatVal, $this->arrCatOut) = $objDb->sfGetLevelCatList(false); 526 527 if (isset($arrForm['category_id']) && !is_array($arrForm['category_id'])) { 528 $arrForm['category_id'] = unserialize($arrForm['category_id']); 529 } 530 if($arrForm['status'] == "") { 531 $arrForm['status'] = DEFAULT_PRODUCT_DISP; 532 } 533 if($arrForm['product_type_id'] == "") { 534 $arrForm['product_type_id'] = DEFAULT_PRODUCT_DOWN; 535 } 536 // アップロードファイル情報取得(Hidden用) 537 $arrHidden = $objUpFile->getHiddenFileList(); 538 $arrForm['arrHidden'] = array_merge((array)$arrHidden, (array)$objDownFile->getHiddenFileList()); 539 540 // 画像ファイル表示用データ取得 541 $arrForm['arrFile'] = $objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH); 542 543 // ダウンロード商品実ファイル名取得 544 $arrForm['down_realfilename'] = $objDownFile->getFormDownFile(); 545 546 // 基本情報(デフォルトポイントレート用) 547 $arrForm['arrInfo'] = SC_Helper_DB::sfGetBasisData(); 548 549 // サブ情報ありなしフラグ 550 $arrForm['sub_find'] = $this->hasSubProductData($arrForm); 551 552 return $arrForm; 553 } 554 555 /** 556 * 表示用フォームパラメータ取得 557 * - 確認画面 558 * 559 * @param object $objUpFile SC_UploadFileインスタンス 560 * @param object $objDownFile SC_UploadFileインスタンス 561 * @param array $arrForm フォーム入力パラメータ配列 562 * @return array 表示用フォームパラメータ配列 563 */ 564 function lfSetViewParam_ConfirmPage(&$objUpFile, &$objDownFile, &$arrForm) { 565 // カテゴリ表示用 566 $arrForm['arrCategoryId'] = $arrForm['category_id']; 567 // hidden に渡す値は serialize する 568 $arrForm['category_id'] = serialize($arrForm['category_id']); 569 // 画像ファイル用データ取得 570 $arrForm['arrFile'] = $objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH); 571 // ダウンロード商品実ファイル名取得 572 $arrForm['down_realfilename'] = $objDownFile->getFormDownFile(); 573 574 return $arrForm; 575 } 576 577 /** 578 * 縮小した画像をセットする 579 * 580 * @param object $objUpFile SC_UploadFileインスタンス 581 * @param string $image_key 画像ファイルキー 582 * @return void 583 */ 584 function lfSetScaleImage(&$objUpFile, $image_key){ 585 $subno = str_replace("sub_large_image", "", $image_key); 586 switch ($image_key){ 587 case "main_large_image": 588 // 詳細メイン画像 589 $this->lfMakeScaleImage($objUpFile, $image_key, "main_image"); 590 case "main_image": 591 // 一覧メイン画像 592 $this->lfMakeScaleImage($objUpFile, $image_key, "main_list_image"); 593 break; 594 case "sub_large_image" . $subno: 595 // サブメイン画像 596 $this->lfMakeScaleImage($objUpFile, $_POST['image_key'], "sub_image" . $subno); 597 break; 598 default: 599 break; 600 } 601 } 602 603 /** 604 * 画像ファイルのコピー 605 * 606 * @param object $objUpFile SC_UploadFileインスタンス 607 * @return void 608 */ 609 function lfCopyProductImageFiles(&$objUpFile) { 610 $arrKey = $objUpFile->keyname; 611 $arrSaveFile = $objUpFile->save_file; 612 613 foreach($arrSaveFile as $key => $val){ 614 $this->lfMakeScaleImage($objUpFile, $arrKey[$key], $arrKey[$key], true); 615 } 616 } 617 618 /** 619 * 縮小画像生成 620 * 621 * @param object $objUpFile SC_UploadFileインスタンス 622 * @param string $from_key 元画像ファイルキー 623 * @param string $to_key 縮小画像ファイルキー 624 * @param boolean $forced 625 * @return void 626 */ 627 function lfMakeScaleImage(&$objUpFile, $from_key, $to_key, $forced = false){ 628 $arrImageKey = array_flip($objUpFile->keyname); 629 $from_path = ""; 630 631 if($objUpFile->temp_file[$arrImageKey[$from_key]]) { 632 $from_path = $objUpFile->temp_dir . $objUpFile->temp_file[$arrImageKey[$from_key]]; 633 } elseif($objUpFile->save_file[$arrImageKey[$from_key]]){ 634 $from_path = $objUpFile->save_dir . $objUpFile->save_file[$arrImageKey[$from_key]]; 635 } 636 637 if(file_exists($from_path)) { 638 // 生成先の画像サイズを取得 639 $to_w = $objUpFile->width[$arrImageKey[$to_key]]; 640 $to_h = $objUpFile->height[$arrImageKey[$to_key]]; 641 642 if($forced) $objUpFile->save_file[$arrImageKey[$to_key]] = ""; 643 644 if(empty($objUpFile->temp_file[$arrImageKey[$to_key]]) 645 && empty($objUpFile->save_file[$arrImageKey[$to_key]])) { 646 // リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける 647 $dst_file = $objUpFile->lfGetTmpImageName(IMAGE_RENAME, "", $objUpFile->temp_file[$arrImageKey[$from_key]]) . $this->lfGetAddSuffix($to_key); 648 $path = $objUpFile->makeThumb($from_path, $to_w, $to_h, $dst_file); 649 $objUpFile->temp_file[$arrImageKey[$to_key]] = basename($path); 650 } 651 } 652 } 653 654 /** 655 * アップロードファイルパラメータ情報から削除 656 * 一時ディレクトリに保存されている実ファイルも削除する 657 * 658 * @param object $objUpFile SC_UploadFileインスタンス 659 * @param string $image_key 画像ファイルキー 660 * @return void 661 */ 662 function lfDeleteTempFile(&$objUpFile, $image_key) { 663 // TODO: SC_UploadFile::deleteFileの画像削除条件見直し要 664 $arrTempFile = $objUpFile->temp_file; 665 $arrKeyName = $objUpFile->keyname; 666 667 foreach($arrKeyName as $key => $keyname) { 668 if($keyname != $image_key) continue; 669 670 if(!empty($arrTempFile[$key])) { 671 $temp_file = $arrTempFile[$key]; 672 $arrTempFile[$key] = ''; 673 674 if(!in_array($temp_file, $arrTempFile)) { 675 $objUpFile->deleteFile($image_key); 676 } else { 677 $objUpFile->temp_file[$key] = ''; 678 $objUpFile->save_file[$key] = ''; 679 } 680 } else { 681 $objUpFile->temp_file[$key] = ''; 682 $objUpFile->save_file[$key] = ''; 683 } 684 } 685 } 686 687 /** 688 * アップロードファイルを保存する 689 * 690 * @param object $objUpFile SC_UploadFileインスタンス 691 * @param object $objDownFile SC_UploadFileインスタンス 692 * @param integer $product_id 商品ID 693 * @return void 694 */ 695 function lfSaveUploadFiles(&$objUpFile, &$objDownFile, $product_id) { 696 // TODO: SC_UploadFile::moveTempFileの画像削除条件見直し要 697 $objImage = new SC_Image($objUpFile->temp_dir); 698 $arrKeyName = $objUpFile->keyname; 699 $arrTempFile = $objUpFile->temp_file; 700 $arrSaveFile = $objUpFile->save_file; 701 $arrImageKey = array(); 702 foreach($arrTempFile as $key => $temp_file) { 703 if($temp_file) { 704 $objImage->moveTempImage($temp_file, $objUpFile->save_dir); 705 $arrImageKey[] = $arrKeyName[$key]; 706 if(!empty($arrSaveFile[$key]) 707 && !$this->lfHasSameProductImage($product_id, $arrImageKey, $arrSaveFile[$key]) 708 && !in_array($temp_file, $arrSaveFile)) { 709 $objImage->deleteImage($arrSaveFile[$key], $objUpFile->save_dir); 710 } 711 } 712 } 713 $objDownFile->moveTempDownFile(); 714 } 715 716 /** 717 * 同名画像ファイル登録の有無を確認する. 718 * 719 * 画像ファイルの削除可否判定用。 720 * 同名ファイルの登録がある場合には画像ファイルの削除を行わない。 721 * 戻り値: 同名ファイル有り(true) 同名ファイル無し(false) 722 * 723 * @param string $product_id 商品ID 724 * @param string $arrImageKey 対象としない画像カラム名 725 * @param string $image_file_name 画像ファイル名 726 * @return boolean 727 */ 728 function lfHasSameProductImage($product_id, $arrImageKey, $image_file_name) { 729 if (!SC_Utils_Ex::sfIsInt($product_id)) return false; 730 if (!$arrImageKey) return false; 731 if (!$image_file_name) return false; 732 733 $arrWhere = array(); 734 $sqlval = array('0', $product_id); 735 foreach ($arrImageKey as $image_key) { 736 $arrWhere[] = "{$image_key} = ?"; 737 $sqlval[] = $image_file_name; 738 } 739 $where = implode(" OR ", $arrWhere); 740 $where = "del_flg = ? AND ((product_id <> ? AND ({$where}))"; 741 742 $arrKeyName = $this->objUpFile->keyname; 743 foreach ($arrKeyName as $key => $keyname) { 744 if (in_array($keyname, $arrImageKey)) continue; 745 $where .= " OR {$keyname} = ?"; 746 $sqlval[] = $image_file_name; 747 } 748 $where .= ")"; 749 320 750 $objQuery = new SC_Query(); 321 $arrRecommend = array(); 322 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 323 $keyname = "recommend_id" . $i; 324 $delkey = "recommend_delete" . $i; 325 $commentkey = "recommend_comment" . $i; 326 327 if (!isset($this->arrForm[$delkey])) $this->arrForm[$delkey] = null; 328 329 if((isset($this->arrForm[$keyname]) && !empty($this->arrForm[$keyname])) && $this->arrForm[$delkey] != 1) { 330 $objProduct = new SC_Product(); 331 $arrRecommend[$i] = $objProduct->getDetail($this->arrForm[$keyname]); 332 $arrRecommend[$i]['product_id'] = $this->arrForm[$keyname]; 333 $arrRecommend[$i]['comment'] = $this->arrForm[$commentkey]; 334 } 335 } 336 return $arrRecommend; 337 } 338 339 /* 関連商品の登録 */ 340 function lfInsertRecommendProducts($objQuery, $arrList, $product_id) { 341 // 一旦関連商品をすべて削除する 342 $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id)); 343 $sqlval['product_id'] = $product_id; 344 $rank = RECOMMEND_PRODUCT_MAX; 345 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 346 $keyname = "recommend_id" . $i; 347 $commentkey = "recommend_comment" . $i; 348 $deletekey = "recommend_delete" . $i; 349 350 if (!isset($arrList[$deletekey])) $arrList[$deletekey] = null; 351 352 if($arrList[$keyname] != "" && $arrList[$deletekey] != '1') { 353 $sqlval['recommend_product_id'] = $arrList[$keyname]; 354 $sqlval['comment'] = $arrList[$commentkey]; 355 $sqlval['rank'] = $rank; 356 $sqlval['creator_id'] = $_SESSION['member_id']; 357 $sqlval['create_date'] = "now()"; 358 $sqlval['update_date'] = "now()"; 359 $objQuery->insert("dtb_recommend_products", $sqlval); 360 $rank--; 361 } 362 } 363 } 364 365 /** 366 * 指定商品の関連商品をDBから読み込む 367 * 368 * @param string $product_id 商品ID 369 * @return void 370 */ 371 function lfPreGetRecommendProducts($product_id) { 372 $objQuery = new SC_Query(); 373 $objQuery->setOrder("rank DESC"); 374 $arrRet = $objQuery->select("recommend_product_id, comment", "dtb_recommend_products", "product_id = ?", array($product_id)); 375 $no = 1; 376 377 foreach ($arrRet as $ret) { 378 $this->arrForm['recommend_id' . $no] = $ret['recommend_product_id']; 379 $this->arrForm['recommend_comment' . $no] = $ret['comment']; 380 $no++; 381 } 382 } 383 384 /* 商品情報の読み込み */ 385 function lfGetProduct($product_id) { 386 $objQuery = new SC_Query(); 387 $objDb = new SC_Helper_DB_Ex(); 388 751 $count = $objQuery->count('dtb_products', $where, $sqlval); 752 if (!$count) return false; 753 return true; 754 } 755 756 /** 757 * DBから商品データを取得する 758 * 759 * @param integer $product_id 商品ID 760 * @return array 商品データ配列 761 */ 762 function lfGetProductData_FromDB($product_id) { 763 $objQuery =& SC_Query::getSingletonInstance(); 764 $arrProduct = array(); 765 766 // 商品データ取得 389 767 $col = "*"; 390 768 $table = <<< __EOF__ … … 395 773 price01, 396 774 price02, 775 deliv_fee, 397 776 stock, 398 777 stock_unlimited, … … 402 781 down_filename, 403 782 down_realfilename 404 783 FROM dtb_products_class 405 784 WHERE class_combination_id IS NULL 406 785 ) AS T2 … … 408 787 __EOF__; 409 788 $where = "product_id = ?"; 410 789 $arrProduct = $objQuery->select($col, $table, $where, array($product_id)); 790 791 // カテゴリID取得 792 $col = "category_id"; 793 $table = "dtb_product_categories"; 794 $where = "product_id = ?"; 795 $arrProduct[0]['category_id'] = $objQuery->getCol($col, $table, $where, array($product_id)); 796 797 // 規格情報ありなしフラグ取得 798 $objDb = new SC_Helper_DB_Ex(); 799 $arrProduct[0]['has_product_class'] = $objDb->sfHasProductClass($product_id); 800 801 // 規格が登録されていなければ規格ID取得 802 if ($arrProduct[0]['has_product_class'] == false) { 803 $arrProduct[0]['product_class_id'] = SC_Utils::sfGetProductClassId($product_id,"0","0"); 804 } 805 806 // 商品ステータス取得 807 $objProduct = new SC_Product(); 808 $productStatus = $objProduct->getProductStatus(array($product_id)); 809 $arrProduct[0]['product_status'] = $productStatus[$product_id]; 810 811 // 関連商品データ取得 812 $arrRecommend = $this->lfGetRecommendProductsData_FromDB($product_id); 813 $arrProduct[0] = array_merge($arrProduct[0], $arrRecommend); 814 815 return $arrProduct[0]; 816 } 817 818 /** 819 * DBから関連商品データを取得する 820 * 821 * @param integer $product_id 商品ID 822 * @return array 関連商品データ配列 823 */ 824 function lfGetRecommendProductsData_FromDB($product_id) { 825 $objQuery =& SC_Query::getSingletonInstance(); 826 $arrRecommendProducts = array(); 827 828 $col = 'recommend_product_id,'; 829 $col.= 'comment'; 830 $table = 'dtb_recommend_products'; 831 $where = 'product_id = ?'; 832 $objQuery->setOrder("rank DESC"); 411 833 $arrRet = $objQuery->select($col, $table, $where, array($product_id)); 412 834 413 // カテゴリID を取得 414 $arrRet[0]['category_id'] = $objQuery->getCol( 415 "category_id", 416 "dtb_product_categories", 417 "product_id = ?", 418 array($product_id) 419 ); 420 //編集時に規格IDが変わってしまうのを防ぐために規格が登録されていなければ規格IDを取得する 421 if (!$objDb->sfHasProductClass($_POST['product_id'])) { 422 $arrRet[0]['product_class_id'] = SC_Utils::sfGetProductClassId($product_id,"0","0"); 423 } 424 return $arrRet[0]; 425 } 426 427 /* 商品登録ページ表示用 */ 428 function lfProductPage() { 835 $no = 1; 836 foreach ($arrRet as $arrVal) { 837 $arrRecommendProducts['recommend_id' . $no] = $arrVal['recommend_product_id']; 838 $arrRecommendProducts['recommend_comment' . $no] = $arrVal['comment']; 839 $no++; 840 } 841 842 return $arrRecommendProducts; 843 } 844 845 /** 846 * 関連商品データ表示用配列を取得する 847 * 848 * @param string $arrForm フォーム入力パラメータ配列 849 * @return array 関連商品データ配列 850 */ 851 function lfGetRecommendProducts(&$arrForm) { 852 $arrRecommend = array(); 853 854 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 855 $keyname = "recommend_id" . $i; 856 $delkey = "recommend_delete" . $i; 857 $commentkey = "recommend_comment" . $i; 858 859 if (!isset($arrForm[$delkey])) $arrForm[$delkey] = null; 860 861 if((isset($arrForm[$keyname]) && !empty($arrForm[$keyname])) && $arrForm[$delkey] != 1) { 862 $objProduct = new SC_Product(); 863 $arrRecommend[$i] = $objProduct->getDetail($arrForm[$keyname]); 864 $arrRecommend[$i]['product_id'] = $arrForm[$keyname]; 865 $arrRecommend[$i]['comment'] = $arrForm[$commentkey]; 866 } 867 } 868 return $arrRecommend; 869 } 870 871 /** 872 * 表示用カテゴリマスタデータ配列を取得する 873 * - 編集モード 874 * 875 * @param void 876 * @return array カテゴリマスタデータ配列 877 */ 878 function lfGetCategoryList_Edit() { 429 879 $objDb = new SC_Helper_DB_Ex(); 430 431 // カテゴリの読込 432 list($this->arrCatVal, $this->arrCatOut) = $objDb->sfGetLevelCatList(false); 433 434 if (isset($this->arrForm['category_id']) && !is_array($this->arrForm['category_id'])) { 435 $this->arrForm['category_id'] = unserialize($this->arrForm['category_id']); 436 } 437 if($this->arrForm['status'] == "") { 438 $this->arrForm['status'] = DEFAULT_PRODUCT_DISP; 439 } 440 if($this->arrForm['product_type_id'] == "") { 441 $this->arrForm['product_type_id'] = DEFAULT_PRODUCT_DOWN; 442 } 443 444 // HIDDEN用に配列を渡す。 445 $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objUpFile->getHiddenFileList()); 446 $this->arrHidden = array_merge((array)$this->arrHidden, (array)$this->objDownFile->getHiddenFileList()); 447 // Form用配列を渡す。 448 $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH); 449 450 $this->arrForm['down_realfilename'] = $this->objDownFile->getFormDownFile(); 451 452 // アンカーを設定 453 if (isset($_POST['image_key']) && !empty($_POST['image_key'])) { 454 $anchor_hash = "location.hash='#" . $_POST['image_key'] . "'"; 455 } elseif (isset($_POST['anchor_key']) && !empty($_POST['anchor_key'])) { 456 $anchor_hash = "location.hash='#" . $_POST['anchor_key'] . "'"; 880 $arrCategoryList = array(); 881 882 list($arrCatVal, $arrCatOut) = $objDb->sfGetLevelCatList(false); 883 for ($i = 0; $i < count($arrCatVal); $i++) { 884 $arrCategoryList[$arrCatVal[$i]] = $arrCatOut[$i]; 885 } 886 887 return $arrCategoryList; 888 } 889 890 /** 891 * 入力フォームパラメータの規格ありなしフラグを判定 892 * 893 * @param string $has_product_class 入力フォームパラメータの規格ありなしフラグ 894 * @return boolean true: 規格あり, false: 規格なし 895 */ 896 function lfGetProductClassFlag($has_product_class) { 897 if($has_product_class == '1') { 898 return true; 457 899 } else { 458 $anchor_hash = ""; 459 } 460 461 $this->tpl_onload = "fnCheckStockLimit('" . DISABLED_RGB . "'); fnMoveSelect('category_id_unselect', 'category_id');" . $anchor_hash; 462 } 463 464 /* ファイル情報の初期化 */ 465 function lfInitFile() { 466 $this->objUpFile->addFile("一覧-メイン画像", 'main_list_image', array('jpg', 'gif', 'png'),IMAGE_SIZE, false, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); 467 $this->objUpFile->addFile("詳細-メイン画像", 'main_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_IMAGE_WIDTH, NORMAL_IMAGE_HEIGHT); 468 $this->objUpFile->addFile("詳細-メイン拡大画像", 'main_large_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_IMAGE_WIDTH, LARGE_IMAGE_HEIGHT); 469 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 470 $this->objUpFile->addFile("詳細-サブ画像$cnt", "sub_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_SUBIMAGE_WIDTH, NORMAL_SUBIMAGE_HEIGHT); 471 $this->objUpFile->addFile("詳細-サブ拡大画像$cnt", "sub_large_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_SUBIMAGE_WIDTH, LARGE_SUBIMAGE_HEIGHT); 472 } 473 } 474 475 /* 商品の登録 */ 476 function lfRegistProduct($arrList) { 477 $objQuery = new SC_Query(); 900 return false; 901 } 902 } 903 904 /** 905 * ページonload用JavaScriptを取得する 906 * - 入力画面 907 * 908 * @param string $anchor_hash アンカー用ハッシュ文字列(省略可) 909 * @return string ページonload用JavaScript 910 */ 911 function lfSetOnloadJavaScript_InputPage($anchor_hash = "") { 912 return "fnCheckStockLimit('" . DISABLED_RGB . "'); fnMoveSelect('category_id_unselect', 'category_id');" . $anchor_hash; 913 } 914 915 /** 916 * DBに商品データを登録する 917 * 918 * @param object $objUpFile SC_UploadFileインスタンス 919 * @param object $objDownFile SC_UploadFileインスタンス 920 * @param array $arrList フォーム入力パラメータ配列 921 * @return integer 登録商品ID 922 */ 923 function lfRegistProduct(&$objUpFile, &$objDownFile, $arrList) { 924 $objQuery =& SC_Query::getSingletonInstance(); 478 925 $objDb = new SC_Helper_DB_Ex(); 479 $objQuery->begin();480 926 481 927 // 配列の添字を定義 … … 504 950 $sqlval['update_date'] = "Now()"; 505 951 $sqlval['creator_id'] = $_SESSION['member_id']; 506 $arrRet = $ this->objUpFile->getDBFileList();952 $arrRet = $objUpFile->getDBFileList(); 507 953 $sqlval = array_merge($sqlval, $arrRet); 508 954 509 $arrList['category_id'] = unserialize($arrList['category_id']); 510 511 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 955 for($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 512 956 $sqlval['sub_title'.$cnt] = $arrList['sub_title'.$cnt]; 513 957 $sqlval['sub_comment'.$cnt] = $arrList['sub_comment'.$cnt]; 514 958 } 515 959 960 $objQuery->begin(); 961 516 962 // 新規登録(複製時を含む) 517 if 963 if($arrList['product_id'] == "") { 518 964 $product_id = $objQuery->nextVal("dtb_products_product_id"); 519 965 $sqlval['product_id'] = $product_id; … … 529 975 530 976 // 複製商品の場合には規格も複製する 531 if($_POST["copy_product_id"] != "" and SC_Utils_Ex::sfIsInt($_POST["copy_product_id"])){ 532 533 if($this->tpl_nonclass) 534 { 977 if($arrList["copy_product_id"] != "" && SC_Utils_Ex::sfIsInt($arrList["copy_product_id"])) { 978 if($arrList["has_product_class"] == "1") { 535 979 //規格なしの場合、複製は価格等の入力が発生しているため、その内容で追加登録を行う 536 980 $this->lfCopyProductClass($arrList, $objQuery); 537 } 538 else 539 { 981 } else { 540 982 //規格がある場合の複製は複製元の内容で追加登録を行う 541 983 // dtb_products_class のカラムを取得 … … 551 993 $col = SC_Utils_Ex::sfGetCommaList($arrColList); 552 994 $product_class_id = $objQuery->nextVal('dtb_products_class_product_class_id'); 553 $objQuery->query("INSERT INTO dtb_products_class (product_class_id, product_id, create_date, ". $col .") SELECT ?, now(), " . $col. " FROM dtb_products_class WHERE product_id = ? ORDER BY product_class_id", array($product_class_id, $product_id, $ _POST["copy_product_id"]));995 $objQuery->query("INSERT INTO dtb_products_class (product_class_id, product_id, create_date, ". $col .") SELECT ?, now(), " . $col. " FROM dtb_products_class WHERE product_id = ? ORDER BY product_class_id", array($product_class_id, $product_id, $arrList["copy_product_id"])); 554 996 } 555 997 } 556 }557 998 // 更新 558 else {999 } else { 559 1000 $product_id = $arrList['product_id']; 560 1001 // 削除要求のあった既存ファイルの削除 561 $arrRet = $this->lfGetProduct ($arrList['product_id']);1002 $arrRet = $this->lfGetProductData_FromDB($arrList['product_id']); 562 1003 // TODO: SC_UploadFile::deleteDBFileの画像削除条件見直し要 563 $objImage = new SC_Image($ this->objUpFile->temp_dir);564 $arrKeyName = $ this->objUpFile->keyname;565 $arrSaveFile = $ this->objUpFile->save_file;1004 $objImage = new SC_Image($objUpFile->temp_dir); 1005 $arrKeyName = $objUpFile->keyname; 1006 $arrSaveFile = $objUpFile->save_file; 566 1007 $arrImageKey = array(); 567 1008 foreach ($arrKeyName as $key => $keyname) { … … 570 1011 $has_same_image = $this->lfHasSameProductImage($arrList['product_id'], $arrImageKey, $arrRet[$keyname]); 571 1012 if (!$has_same_image) { 572 $objImage->deleteImage($arrRet[$keyname], $ this->objUpFile->save_dir);1013 $objImage->deleteImage($arrRet[$keyname], $objUpFile->save_dir); 573 1014 } 574 1015 } 575 1016 } 576 $this->objDownFile->deleteDBDownFile($arrRet); 577 1017 $objDownFile->deleteDBDownFile($arrRet); 578 1018 // UPDATEの実行 579 1019 $where = "product_id = ?"; … … 585 1025 586 1026 //商品登録の時は規格を生成する。複製の場合は規格も複製されるのでこの処理は不要。 587 if( $_POST["copy_product_id"] == "" ){1027 if($arrList["copy_product_id"] == "") { 588 1028 // 規格登録 589 1029 $this->lfInsertDummyProductClass($arrList); … … 599 1039 $objQuery->commit(); 600 1040 return $product_id; 601 }602 603 604 /* 取得文字列の変換 */605 function lfConvertParam($array) {606 /*607 * 文字列の変換608 * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換609 * C : 「全角ひら仮名」を「全角かた仮名」に変換610 * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します611 * n : 「全角」数字を「半角(ハンカク)」に変換612 */613 614 // スポット商品615 $arrConvList['name'] = "KVa";616 $arrConvList['main_list_comment'] = "KVa";617 $arrConvList['main_comment'] = "KVa";618 $arrConvList['price01'] = "n";619 $arrConvList['price02'] = "n";620 $arrConvList['stock'] = "n";621 $arrConvList['sale_limit'] = "n";622 $arrConvList['point_rate'] = "n";623 $arrConvList['product_code'] = "KVna";624 $arrConvList['comment1'] = "a";625 $arrConvList['deliv_fee'] = "n";626 627 // 詳細-サブ628 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) {629 $arrConvList["sub_title$cnt"] = "KVa";630 }631 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) {632 $arrConvList["sub_comment$cnt"] = "KVa";633 }634 635 // 関連商品636 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) {637 $arrConvList["recommend_comment$cnt"] = "KVa";638 }639 640 // 文字変換641 foreach ($arrConvList as $key => $val) {642 // POSTされてきた値のみ変換する。643 if(isset($array[$key])) {644 $array[$key] = mb_convert_kana($array[$key] ,$val);645 }646 }647 648 if (!isset($array['product_flag'])) $array['product_flag'] = "";649 $max = max(array_keys($this->arrSTATUS));650 $array['product_flag'] = SC_Utils_Ex::sfMergeCheckBoxes($array['product_flag'], $max);651 652 return $array;653 }654 655 // 入力エラーチェック656 function lfErrorCheck($array) {657 658 $objErr = new SC_CheckError($array);659 $objErr->doFunc(array("商品名", "name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));660 $objErr->doFunc(array("一覧-メインコメント", "main_list_comment", MTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));661 $objErr->doFunc(array("詳細-メインコメント", "main_comment", LLTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));662 $objErr->doFunc(array("詳細-メインコメント", "main_comment", $this->arrAllowedTag), array("HTML_TAG_CHECK"));663 $objErr->doFunc(array("ポイント付与率", "point_rate", PERCENTAGE_LEN), array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));664 $objErr->doFunc(array("商品送料", "deliv_fee", PRICE_LEN), array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));665 $objErr->doFunc(array("備考欄(SHOP専用)", "note", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));666 $objErr->doFunc(array("検索ワード", "comment3", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));667 $objErr->doFunc(array("メーカーURL", "comment1", URL_LEN), array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK"));668 $objErr->doFunc(array("発送日目安", "deliv_date_id", INT_LEN), array("NUM_CHECK"));669 $objErr->doFunc(array("メーカー", 'maker_id', INT_LEN), array("NUM_CHECK"));670 671 if($this->tpl_nonclass) {672 $objErr->doFunc(array("商品コード", "product_code", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK"));673 $objErr->doFunc(array(NORMAL_PRICE_TITLE, "price01", PRICE_LEN), array("NUM_CHECK", "MAX_LENGTH_CHECK"));674 $objErr->doFunc(array(SALE_PRICE_TITLE, "price02", PRICE_LEN), array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));675 676 if(!isset($array['stock_unlimited']) && $array['stock_unlimited'] != UNLIMITED_FLG_UNLIMITED) {677 $objErr->doFunc(array("在庫数", "stock", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));678 }679 680 //ダウンロード商品チェック681 if($array['product_type_id'] == PRODUCT_TYPE_DOWNLOAD) {682 $objErr->doFunc(array("ダウンロードファイル名", "down_filename", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));683 if($array['down_realfilename'] == "") {684 $objErr->arrErr['down_realfilename'] = "※ ダウンロード商品の場合はダウンロード商品用ファイルをアップロードしてください。<br />";685 }686 }687 //実商品チェック688 if($array['product_type_id'] == PRODUCT_TYPE_NORMAL) {689 if($array['down_filename'] != "") {690 $objErr->arrErr['down_filename'] = "※ 通常商品の場合はダウンロードファイル名を設定できません。<br />";691 }692 if($array['down_realfilename'] != "") {693 $objErr->arrErr['down_realfilename'] = "※ 通常商品の場合はダウンロード商品用ファイルをアップロードできません。<br />ファイルを取り消してください。<br />";694 }695 }696 }697 698 $objErr->doFunc(array("購入制限", "sale_limit", AMOUNT_LEN), array("SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));699 700 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) {701 $objErr->doFunc(array("詳細-サブタイトル$cnt", "sub_title$cnt", STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));702 $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));703 $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", $this->arrAllowedTag), array("HTML_TAG_CHECK"));704 }705 706 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) {707 708 if (!isset($_POST["recommend_delete$cnt"])) $_POST["recommend_delete$cnt"] = "";709 710 if(isset($_POST["recommend_id$cnt"])711 && $_POST["recommend_id$cnt"] != ""712 && $_POST["recommend_delete$cnt"] != 1) {713 $objErr->doFunc(array("関連商品コメント$cnt", "recommend_comment$cnt", LTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));714 }715 }716 717 // カテゴリID のチェック718 if (empty($array['category_id'])) {719 $objErr->arrErr['category_id'] = "※ 商品カテゴリが選択されていません。<br />";720 } else {721 $arrCategory_id = array();722 for ($i = 0; $i < count($array['category_id']); $i++) {723 $arrCategory_id['category_id' . $i] = $array['category_id'][$i];724 }725 $objCheckCategory = new SC_CheckError($arrCategory_id);726 for ($i = 0; $i < count($array['category_id']); $i++) {727 $objCheckCategory->doFunc(array("商品カテゴリ", "category_id" . $i, STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));728 }729 if (!empty($objCheckCategory->arrErr)) {730 $objErr->arrErr = array_merge($objErr->arrErr,731 $objCheckCategory->arrErr);732 }733 }734 return $objErr->arrErr;735 }736 737 /* 確認ページ表示用 */738 function lfProductConfirmPage() {739 $this->tpl_mainpage = 'products/confirm.tpl';740 $this->arrForm['mode'] = 'complete';741 742 $objDb = new SC_Helper_DB_Ex();743 744 // カテゴリ表示745 $this->arrCategory_id = $this->arrForm['category_id'];746 $this->arrCatList = array();747 list($arrCatVal, $arrCatOut) = $objDb->sfGetLevelCatList(false);748 for ($i = 0; $i < count($arrCatVal); $i++) {749 $this->arrCatList[$arrCatVal[$i]] = $arrCatOut[$i];750 }751 752 // hidden に渡す値は serialize する753 $this->arrForm['category_id'] = serialize($this->arrForm['category_id']);754 755 // Form用配列を渡す。756 $this->arrFile = $this->objUpFile->getFormFileList(IMAGE_TEMP_URLPATH, IMAGE_SAVE_URLPATH);757 $this->arrForm['down_realfilename'] = $this->objDownFile->getFormDownFile();758 }759 760 // 縮小した画像をセットする761 function lfSetScaleImage(){762 763 $subno = str_replace("sub_large_image", "", $_POST['image_key']);764 switch ($_POST['image_key']){765 case "main_large_image":766 // 詳細メイン画像767 $this->lfMakeScaleImage($_POST['image_key'], "main_image");768 case "main_image":769 // 一覧メイン画像770 $this->lfMakeScaleImage($_POST['image_key'], "main_list_image");771 break;772 case "sub_large_image" . $subno:773 // サブメイン画像774 $this->lfMakeScaleImage($_POST['image_key'], "sub_image" . $subno);775 break;776 default:777 break;778 }779 }780 781 // 縮小画像生成782 function lfMakeScaleImage($from_key, $to_key, $forced = false){783 $arrImageKey = array_flip($this->objUpFile->keyname);784 785 if($this->objUpFile->temp_file[$arrImageKey[$from_key]]){786 $from_path = $this->objUpFile->temp_dir . $this->objUpFile->temp_file[$arrImageKey[$from_key]];787 }elseif($this->objUpFile->save_file[$arrImageKey[$from_key]]){788 $from_path = $this->objUpFile->save_dir . $this->objUpFile->save_file[$arrImageKey[$from_key]];789 }else{790 return "";791 }792 793 if(file_exists($from_path)){794 // 生成先の画像サイズを取得795 $to_w = $this->objUpFile->width[$arrImageKey[$to_key]];796 $to_h = $this->objUpFile->height[$arrImageKey[$to_key]];797 798 if($forced) $this->objUpFile->save_file[$arrImageKey[$to_key]] = "";799 800 if(empty($this->objUpFile->temp_file[$arrImageKey[$to_key]]) &&801 empty($this->objUpFile->save_file[$arrImageKey[$to_key]])) {802 803 // リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける804 $dst_file = $this->objUpFile->lfGetTmpImageName(IMAGE_RENAME, "", $this->objUpFile->temp_file[$arrImageKey[$from_key]]) . $this->lfGetAddSuffix($to_key);805 $path = $this->objUpFile->makeThumb($from_path, $to_w, $to_h, $dst_file);806 $this->objUpFile->temp_file[$arrImageKey[$to_key]] = basename($path);807 }808 }else{809 return "";810 }811 }812 813 /**814 * リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける815 */816 function lfGetAddSuffix($to_key){817 if( IMAGE_RENAME === true ){ return ; }818 819 // 自動生成される画像名820 $dist_name = "";821 switch($to_key){822 case "main_list_image":823 $dist_name = '_s';824 break;825 case "main_image":826 $dist_name = '_m';827 break;828 default:829 $arrRet = explode('sub_image', $to_key);830 $dist_name = '_sub' .$arrRet[1];831 break;832 }833 return $dist_name;834 }835 836 /**837 * dtb_products_classの複製838 * 複製後、価格や商品コードを更新する839 *840 * @param array $arrList841 * @param array $objQuery842 * @return bool843 */844 function lfCopyProductClass($arrList,$objQuery)845 {846 // 複製元のdtb_products_classを取得(規格なしのため、1件のみの取得)847 $col = "*";848 $table = "dtb_products_class";849 $where = "product_id = ?";850 $arrProductClass = $objQuery->select($col, $table, $where, array($arrList["copy_product_id"]));851 852 //トランザクション開始853 $objQuery->begin();854 $err_flag = false;855 //非編集項目は複製、編集項目は上書きして登録856 foreach($arrProductClass as $records)857 {858 foreach($records as $key => $value)859 {860 if(isset($arrList[$key]))861 {862 $records[$key] = $arrList[$key];863 }864 }865 866 $records["product_class_id"] = $objQuery->nextVal('dtb_products_class_product_class_id');867 $records["update_date"] = 'now()';868 $records["create_date"] = "Now()";869 $objQuery->insert($table, $records);870 //エラー発生時は中断871 if($objQuery->isError())872 {873 $err_flag = true;874 continue;875 }876 }877 //トランザクション終了878 if($err_flag)879 {880 $objQuery->rollback();881 }882 else883 {884 $objQuery->commit();885 }886 return !$err_flag;887 1041 } 888 1042 … … 923 1077 } 924 1078 925 /* ダウンロードファイル情報の初期化 */ 926 function lfInitDownFile() { 927 $this->objDownFile->addFile("ダウンロード販売用ファイル", 'down_file', explode(",", DOWNLOAD_EXTENSION),DOWN_SIZE, true, 0, 0); 928 } 929 930 /** 931 * 同名画像ファイル登録の有無を確認する. 932 * 933 * 画像ファイルの削除可否判定用。 934 * 同名ファイルの登録がある場合には画像ファイルの削除を行わない。 935 * 戻り値: 同名ファイル有り(true) 同名ファイル無し(false) 936 * 937 * @param string $product_id 商品ID 938 * @param string $arrImageKey 対象としない画像カラム名 939 * @param string $image_file_name 画像ファイル名 940 * @return boolean 941 */ 942 function lfHasSameProductImage($product_id, $arrImageKey, $image_file_name) { 943 if (!SC_Utils_Ex::sfIsInt($product_id)) return false; 944 if (!$arrImageKey) return false; 945 if (!$image_file_name) return false; 946 947 $arrWhere = array(); 948 $sqlval = array('0', $product_id); 949 foreach ($arrImageKey as $image_key) { 950 $arrWhere[] = "{$image_key} = ?"; 951 $sqlval[] = $image_file_name; 952 } 953 $where = implode(" OR ", $arrWhere); 954 $where = "del_flg = ? AND ((product_id <> ? AND ({$where}))"; 955 956 $arrKeyName = $this->objUpFile->keyname; 957 foreach ($arrKeyName as $key => $keyname) { 958 if (in_array($keyname, $arrImageKey)) continue; 959 $where .= " OR {$keyname} = ?"; 960 $sqlval[] = $image_file_name; 961 } 962 $where .= ")"; 963 964 $objQuery = new SC_Query(); 965 $count = $objQuery->count('dtb_products', $where, $sqlval); 966 if (!$count) return false; 967 return true; 1079 /** 1080 * DBに関連商品データを登録する 1081 * 1082 * @param object $objQuery SC_Queryインスタンス 1083 * @param string $arrList フォーム入力パラメータ配列 1084 * @param integer $product_id 登録する商品ID 1085 * @return void 1086 */ 1087 function lfInsertRecommendProducts($objQuery, $arrList, $product_id) { 1088 // 一旦関連商品をすべて削除する 1089 $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id)); 1090 $sqlval['product_id'] = $product_id; 1091 $rank = RECOMMEND_PRODUCT_MAX; 1092 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 1093 $keyname = "recommend_id" . $i; 1094 $commentkey = "recommend_comment" . $i; 1095 $deletekey = "recommend_delete" . $i; 1096 1097 if (!isset($arrList[$deletekey])) $arrList[$deletekey] = null; 1098 1099 if($arrList[$keyname] != "" && $arrList[$deletekey] != '1') { 1100 $sqlval['recommend_product_id'] = $arrList[$keyname]; 1101 $sqlval['comment'] = $arrList[$commentkey]; 1102 $sqlval['rank'] = $rank; 1103 $sqlval['creator_id'] = $_SESSION['member_id']; 1104 $sqlval['create_date'] = "now()"; 1105 $sqlval['update_date'] = "now()"; 1106 $objQuery->insert("dtb_recommend_products", $sqlval); 1107 $rank--; 1108 } 1109 } 1110 } 1111 1112 /** 1113 * 規格データをコピーする 1114 * 1115 * @param array $arrList フォーム入力パラメータ配列 1116 * @param object $objQuery SC_Queryインスタンス 1117 * @return boolean エラーフラグ 1118 */ 1119 function lfCopyProductClass($arrList, $objQuery) { 1120 // 複製元のdtb_products_classを取得(規格なしのため、1件のみの取得) 1121 $col = "*"; 1122 $table = "dtb_products_class"; 1123 $where = "product_id = ?"; 1124 $arrProductClass = $objQuery->select($col, $table, $where, array($arrList["copy_product_id"])); 1125 1126 //トランザクション開始 1127 $objQuery->begin(); 1128 $err_flag = false; 1129 //非編集項目は複製、編集項目は上書きして登録 1130 foreach($arrProductClass as $records) { 1131 foreach($records as $key => $value) { 1132 if(isset($arrList[$key])) { 1133 $records[$key] = $arrList[$key]; 1134 } 1135 } 1136 1137 $records["product_class_id"] = $objQuery->nextVal('dtb_products_class_product_class_id'); 1138 $records["update_date"] = 'now()'; 1139 $records["create_date"] = "Now()"; 1140 $objQuery->insert($table, $records); 1141 //エラー発生時は中断 1142 if($objQuery->isError()) { 1143 $err_flag = true; 1144 continue; 1145 } 1146 } 1147 //トランザクション終了 1148 if($err_flag) { 1149 $objQuery->rollback(); 1150 } else { 1151 $objQuery->commit(); 1152 } 1153 return !$err_flag; 1154 } 1155 1156 /** 1157 * リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける 1158 * 1159 * @param string $to_key 1160 * @return string 1161 */ 1162 function lfGetAddSuffix($to_key){ 1163 if( IMAGE_RENAME === true ) return ; 1164 1165 // 自動生成される画像名 1166 $dist_name = ""; 1167 switch($to_key) { 1168 case "main_list_image": 1169 $dist_name = '_s'; 1170 break; 1171 case "main_image": 1172 $dist_name = '_m'; 1173 break; 1174 default: 1175 $arrRet = explode('sub_image', $to_key); 1176 $dist_name = '_sub' .$arrRet[1]; 1177 break; 1178 } 1179 return $dist_name; 1180 } 1181 1182 /** 1183 * サブ情報の登録があるかを取得する 1184 * タイトル, コメント, 画像のいずれかに登録があれば「あり」と判定する 1185 * 1186 * @param array $arrSubProductData サブ情報配列 1187 * @return boolean true: サブ情報あり, false: サブ情報なし 1188 */ 1189 function hasSubProductData($arrSubProductData) { 1190 $has_subproduct_data = false; 1191 1192 for($i = 1; $i <= PRODUCTSUB_MAX; $i++) { 1193 if(SC_Utils_Ex::isBlank($arrSubProductData['sub_title'.$i]) == false 1194 || SC_Utils_Ex::isBlank($arrSubProductData['sub_comment'.$i]) == false 1195 || SC_Utils_Ex::isBlank($arrSubProductData['sub_image'.$i]) == false 1196 || SC_Utils_Ex::isBlank($arrSubProductData['sub_large_image'.$i]) == false 1197 || SC_Utils_Ex::isBlank($arrSubProductData['temp_sub_image'.$i]) == false 1198 || SC_Utils_Ex::isBlank($arrSubProductData['temp_sub_large_image'.$i]) == false) { 1199 $has_subproduct_data = true; 1200 break; 1201 } 1202 } 1203 1204 return $has_subproduct_data; 1205 } 1206 1207 /** 1208 * アンカーハッシュ文字列を取得する 1209 * アンカーキーをサニタイジングする 1210 * 1211 * @param string $anchor_key フォーム入力パラメータで受け取ったアンカーキー 1212 * @return <type> 1213 */ 1214 function getAnchorHash($anchor_key) { 1215 if($anchor_key != "") { 1216 return "location.hash='#" . htmlspecialchars($anchor_key) . "'"; 1217 } else { 1218 return ""; 1219 } 968 1220 } 969 1221 }
Note: See TracChangeset
for help on using the changeset viewer.