Changeset 15342 for branches/feature-module-update
- Timestamp:
- 2007/08/24 12:48:44 (17 years ago)
- Location:
- branches/feature-module-update
- Files:
-
- 6 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/feature-module-update/html/admin/products/index.php
r15080 r15342 5 5 * http://www.lockon.co.jp/ 6 6 */ 7 8 // {{{ requires 7 9 require_once("../require.php"); 8 10 require_once("./index_csv.php"); 11 require_once(CLASS_PATH . "page_extends/admin/products/LC_Page_Admin_Products_Ex.php"); 9 12 10 class LC_Page { 11 var $arrForm; 12 var $arrHidden; 13 var $arrProducts; 14 var $arrPageMax; 15 function LC_Page() { 16 $this->tpl_mainpage = 'products/index.tpl'; 17 $this->tpl_mainno = 'products'; 18 $this->tpl_subnavi = 'products/subnavi.tpl'; 19 $this->tpl_subno = 'index'; 20 $this->tpl_pager = DATA_PATH . 'Smarty/templates/admin/pager.tpl'; 21 $this->tpl_subtitle = '商品マスタ'; 13 // }}} 14 // {{{ generate page 22 15 23 global $arrPageMax; 24 $this->arrPageMax = $arrPageMax; 25 global $arrDISP; 26 $this->arrDISP = $arrDISP; 27 global $arrSTATUS; 28 $this->arrSTATUS = $arrSTATUS; 29 global $arrPRODUCTSTATUS_COLOR; 30 $this->arrPRODUCTSTATUS_COLOR = $arrPRODUCTSTATUS_COLOR; 31 /* 32 session_start時のno-cacheヘッダーを抑制することで 33 「戻る」ボタン使用時の有効期限切れ表示を抑制する。 34 private-no-expire:クライアントのキャッシュを許可する。 35 */ 36 session_cache_limiter('private-no-expire'); 37 } 38 } 39 40 //$conn = new SC_DBConn(); 41 $objPage = new LC_Page(); 42 $objView = new SC_AdminView(); 43 44 $objDate = new SC_Date(); 45 46 // 登録・更新検索開始年 47 $objDate->setStartYear(RELEASE_YEAR); 48 $objDate->setEndYear(DATE("Y")); 49 $objPage->arrStartYear = $objDate->getYear(); 50 $objPage->arrStartMonth = $objDate->getMonth(); 51 $objPage->arrStartDay = $objDate->getDay(); 52 // 登録・更新検索終了年 53 $objDate->setStartYear(RELEASE_YEAR); 54 $objDate->setEndYear(DATE("Y")); 55 $objPage->arrEndYear = $objDate->getYear(); 56 $objPage->arrEndMonth = $objDate->getMonth(); 57 $objPage->arrEndDay = $objDate->getDay(); 58 59 // 認証可否の判定 60 $objSess = new SC_Session(); 61 sfIsSuccess($objSess); 62 63 //キャンペーンの編集時 64 if(sfIsInt($_POST['campaign_id']) && $_POST['mode'] == "camp_search") { 65 $objQuery = new SC_Query(); 66 $search_data = $objQuery->get("dtb_campaign", "search_condition", "campaign_id = ? ", array($_POST['campaign_id'])); 67 $arrSearch = unserialize($search_data); 68 foreach ($arrSearch as $key => $val) { 69 $_POST[$key] = $val; 70 } 71 } 72 73 // POST値の引き継ぎ 74 $objPage->arrForm = $_POST; 75 76 // 検索ワードの引き継ぎ 77 foreach ($_POST as $key => $val) { 78 if (ereg("^search_", $key) || ereg("^campaign_", $key)) { 79 switch($key) { 80 case 'search_product_flag': 81 case 'search_status': 82 $objPage->arrHidden[$key] = sfMergeParamCheckBoxes($val); 83 if(!is_array($val)) { 84 $objPage->arrForm[$key] = split("-", $val); 85 } 86 break; 87 default: 88 $objPage->arrHidden[$key] = $val; 89 break; 90 } 91 } 92 } 93 94 // ページ送り用 95 $objPage->arrHidden['search_pageno'] = $_POST['search_pageno']; 96 97 // 商品削除 98 if ($_POST['mode'] == "delete") { 99 100 if($_POST['category_id'] != "") { 101 // ランク付きレコードの削除 102 $where = "category_id = " . addslashes($_POST['category_id']); 103 sfDeleteRankRecord("dtb_products", "product_id", $_POST['product_id'], $where); 104 } else { 105 sfDeleteRankRecord("dtb_products", "product_id", $_POST['product_id']); 106 } 107 // 子テーブル(商品規格)の削除 108 $objQuery = new SC_Query(); 109 $objQuery->delete("dtb_products_class", "product_id = ?", array($_POST['product_id'])); 110 111 // 件数カウントバッチ実行 112 sfCategory_Count($objQuery); 113 } 114 115 116 if ($_POST['mode'] == "search" || $_POST['mode'] == "csv" || $_POST['mode'] == "delete" || $_POST['mode'] == "delete_all" || $_POST['mode'] == "camp_search") { 117 // 入力文字の強制変換 118 lfConvertParam(); 119 // エラーチェック 120 $objPage->arrErr = lfCheckError(); 121 122 $where = "del_flg = 0"; 123 $view_where = "del_flg = 0"; 124 125 // 入力エラーなし 126 if (count($objPage->arrErr) == 0) { 127 128 $arrval = array(); 129 foreach ($objPage->arrForm as $key => $val) { 130 $val = sfManualEscape($val); 131 132 if($val == "") { 133 continue; 134 } 135 136 switch ($key) { 137 case 'search_product_id': // 商品ID 138 $where .= " AND product_id = ?"; 139 $view_where .= " AND product_id = ?"; 140 $arrval[] = $val; 141 break; 142 case 'search_product_class_name': //規格名称 143 $where_in = " (SELECT classcategory_id FROM dtb_classcategory WHERE class_id IN (SELECT class_id FROM dtb_class WHERE name LIKE ?)) "; 144 $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE classcategory_id1 IN " . $where_in; 145 $where .= " OR classcategory_id2 IN" . $where_in . ")"; 146 $view_where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE classcategory_id1 IN " . $where_in; 147 $view_where .= " OR classcategory_id2 IN" . $where_in . ")"; 148 $arrval[] = "%$val%"; 149 $arrval[] = "%$val%"; 150 $view_where = $where; 151 break; 152 case 'search_name': // 商品名 153 $where .= " AND name ILIKE ?"; 154 $view_where .= " AND name ILIKE ?"; 155 $arrval[] = "%$val%"; 156 break; 157 case 'search_category_id': // カテゴリー 158 list($tmp_where, $tmp_arrval) = sfGetCatWhere($val); 159 if($tmp_where != "") { 160 $where.= " AND $tmp_where"; 161 $view_where.= " AND $tmp_where"; 162 $arrval = array_merge((array)$arrval, (array)$tmp_arrval); 163 } 164 break; 165 case 'search_product_code': // 商品コード 166 $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)"; 167 $view_where .= " AND EXISTS (SELECT product_id FROM dtb_products_class as cls WHERE cls.product_code ILIKE ? AND dtb_products.product_id = cls.product_id GROUP BY cls.product_id )"; 168 $arrval[] = "%$val%"; 169 break; 170 case 'search_startyear': // 登録更新日(FROM) 171 $date = sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']); 172 $where.= " AND update_date >= '" . $_POST['search_startyear'] . "/" . $_POST['search_startmonth']. "/" .$_POST['search_startday'] . "'"; 173 $view_where.= " AND update_date >= '" . $_POST['search_startyear'] . "/" . $_POST['search_startmonth']. "/" .$_POST['search_startday'] . "'"; 174 break; 175 case 'search_endyear': // 登録更新日(TO) 176 $date = sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']); 177 $date = date('Y/m/d', strtotime($date) + 86400); 178 $where.= " AND update_date < date('" . $date . "')"; 179 $view_where.= " AND update_date < date('" . $date . "')"; 180 break; 181 case 'search_product_flag': //種別 182 global $arrSTATUS; 183 $search_product_flag = sfSearchCheckBoxes($val); 184 if($search_product_flag != "") { 185 $where.= " AND product_flag LIKE ?"; 186 $view_where.= " AND product_flag LIKE ?"; 187 $arrval[] = $search_product_flag; 188 } 189 break; 190 case 'search_status': // ステータス 191 $tmp_where = ""; 192 foreach ($val as $element){ 193 if ($element != ""){ 194 if ($tmp_where == ""){ 195 $tmp_where.="AND (status LIKE ? "; 196 }else{ 197 $tmp_where.="OR status LIKE ? "; 198 } 199 $arrval[]=$element; 200 } 201 } 202 if ($tmp_where != ""){ 203 $tmp_where.=")"; 204 $where.= " $tmp_where"; 205 $view_where.= " $tmp_where"; 206 } 207 break; 208 default: 209 break; 210 } 211 } 212 213 $order = "update_date DESC, product_id DESC"; 214 $objQuery = new SC_Query(); 215 216 switch($_POST['mode']) { 217 case 'csv': 218 // オプションの指定 219 $option = "ORDER BY $order"; 220 // CSV出力タイトル行の作成 221 $arrOutput = sfSwapArray(sfgetCsvOutput(1, " WHERE csv_id = 1 AND status = 1")); 222 223 if (count($arrOutput) <= 0) break; 224 225 $arrOutputCols = $arrOutput['col']; 226 $arrOutputTitle = $arrOutput['disp_name']; 227 228 $head = sfGetCSVList($arrOutputTitle); 229 230 $data = lfGetProductsCSV($where, $option, $arrval, $arrOutputCols); 231 232 // CSVを送信する。 233 sfCSVDownload($head.$data); 234 exit; 235 break; 236 case 'delete_all': 237 // 検索結果をすべて削除 238 $where = "product_id IN (SELECT product_id FROM vw_products_nonclass AS noncls WHERE $where)"; 239 $sqlval['del_flg'] = 1; 240 $objQuery->update("dtb_products", $sqlval, $where, $arrval); 241 break; 242 default: 243 // 読み込む列とテーブルの指定 244 $col = "product_id, name, category_id, main_list_image, status, product_code, price01, price02, stock, stock_unlimited"; 245 $from = "vw_products_nonclass AS noncls "; 246 247 // 行数の取得 248 $linemax = $objQuery->count("dtb_products", $view_where, $arrval); 249 $objPage->tpl_linemax = $linemax; // 何件が該当しました。表示用 250 251 // ページ送りの処理 252 if(is_numeric($_POST['search_page_max'])) { 253 $page_max = $_POST['search_page_max']; 254 } else { 255 $page_max = SEARCH_PMAX; 256 } 257 258 // ページ送りの取得 259 $objNavi = new SC_PageNavi($_POST['search_pageno'], $linemax, $page_max, "fnNaviSearchPage", NAVI_PMAX); 260 $startno = $objNavi->start_row; 261 $objPage->arrPagenavi = $objNavi->arrPagenavi; 262 263 //キャンペーン商品検索時は、全結果の商品IDを変数に格納する 264 if($_POST['search_mode'] == 'campaign') { 265 $arrRet = $objQuery->select($col, $from, $where, $arrval); 266 if(count($arrRet) > 0) { 267 $arrRet = sfSwapArray($arrRet); 268 $pid = implode("-", $arrRet['product_id']); 269 $objPage->arrHidden['campaign_product_id'] = $pid; 270 } 271 } 272 273 // 取得範囲の指定(開始行番号、行数のセット) 274 if(DB_TYPE != "mysql") $objQuery->setlimitoffset($page_max, $startno); 275 // 表示順序 276 $objQuery->setorder($order); 277 278 // viewも絞込みをかける(mysql用) 279 sfViewWhere("&&noncls_where&&", $view_where, $arrval, $objQuery->order . " " . $objQuery->setlimitoffset($page_max, $startno, true)); 280 281 // 検索結果の取得 282 $objPage->arrProducts = $objQuery->select($col, $from, $where, $arrval); 283 284 break; 285 } 286 } 287 } 288 289 // カテゴリの読込 290 $objPage->arrCatList = sfGetCategoryList(); 291 $objPage->arrCatIDName = lfGetIDName($objPage->arrCatList); 292 293 // 画面の表示 294 $objView->assignobj($objPage); 295 $objView->display(MAIN_FRAME); 296 297 //--------------------------------------------------------------------------------------------------------------------------------------------------------- 298 299 // 取得文字列の変換 300 function lfConvertParam() { 301 global $objPage; 302 /* 303 * 文字列の変換 304 * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換 305 * C : 「全角ひら仮名」を「全角かた仮名」に変換 306 * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します 307 * n : 「全角」数字を「半角(ハンカク)」に変換 308 */ 309 $arrConvList['search_name'] = "KVa"; 310 $arrConvList['search_product_code'] = "KVa"; 311 312 // 文字変換 313 foreach ($arrConvList as $key => $val) { 314 // POSTされてきた値のみ変換する。 315 if(isset($objPage->arrForm[$key])) { 316 $objPage->arrForm[$key] = mb_convert_kana($objPage->arrForm[$key] ,$val); 317 } 318 } 319 } 320 321 // エラーチェック 322 // 入力エラーチェック 323 function lfCheckError() { 324 $objErr = new SC_CheckError(); 325 $objErr->doFunc(array("商品ID", "search_product_id"), array("NUM_CHECK")); 326 $objErr->doFunc(array("開始日", "search_startyear", "search_startmonth", "search_startday"), array("CHECK_DATE")); 327 $objErr->doFunc(array("終了日", "search_endyear", "search_endmonth", "search_endday"), array("CHECK_DATE")); 328 $objErr->doFunc(array("開始日", "終了日", "search_startyear", "search_startmonth", "search_startday", "search_endyear", "search_endmonth", "search_endday"), array("CHECK_SET_TERM")); 329 return $objErr->arrErr; 330 } 331 332 // チェックボックス用WHERE文作成 333 function lfGetCBWhere($key, $max) { 334 $str = ""; 335 $find = false; 336 for ($cnt = 1; $cnt <= $max; $cnt++) { 337 if ($_POST[$key . $cnt] == "1") { 338 $str.= "1"; 339 $find = true; 340 } else { 341 $str.= "_"; 342 } 343 } 344 if (!$find) { 345 $str = ""; 346 } 347 return $str; 348 } 349 350 // カテゴリIDをキー、カテゴリ名を値にする配列を返す。 351 function lfGetIDName($arrCatList) { 352 $max = count($arrCatList); 353 for ($cnt = 0; $cnt < $max; $cnt++ ) { 354 $key = $arrCatList[$cnt]['category_id']; 355 $val = $arrCatList[$cnt]['category_name']; 356 $arrRet[$key] = $val; 357 } 358 return $arrRet; 359 } 360 16 $objPage = new LC_Page_Admin_Products_Ex(); 17 $objPage->init(); 18 $objPage->process(); 19 register_shutdown_function(array($objPage, "destroy")); 361 20 ?> -
branches/feature-module-update/html/admin/products/product.php
r15080 r15342 5 5 * http://www.lockon.co.jp/ 6 6 */ 7 8 // {{{ requires 7 9 require_once("../require.php"); 10 require_once(CLASS_PATH . "page_extends/admin/products/LC_Page_Admin_Products_Product_Ex.php"); 8 11 9 class LC_Page { 10 var $arrCatList; 11 var $arrSRANK; 12 var $arrForm; 13 var $arrSubList; 14 var $arrHidden; 15 var $arrTempImage; 16 var $arrSaveImage; 17 var $tpl_mode; 18 function LC_Page() { 19 $this->tpl_mainpage = 'products/product.tpl'; 20 $this->tpl_subnavi = 'products/subnavi.tpl'; 21 $this->tpl_mainno = 'products'; 22 $this->tpl_subno = 'product'; 23 $this->tpl_subtitle = '商品登録'; 24 global $arrSRANK; 25 $this->arrSRANK = $arrSRANK; 26 global $arrDISP; 27 $this->arrDISP = $arrDISP; 28 global $arrCLASS; 29 $this->arrCLASS = $arrCLASS; 30 global $arrSTATUS; 31 $this->arrSTATUS = $arrSTATUS; 32 global $arrSTATUS_VALUE; 33 $this->arrSTATUS_VALUE = $arrSTATUS_VALUE; 34 global $arrSTATUS_IMAGE; 35 $this->arrSTATUS_IMAGE = $arrSTATUS_IMAGE; 36 global $arrDELIVERYDATE; 37 $this->arrDELIVERYDATE = $arrDELIVERYDATE; 38 $this->tpl_nonclass = true; 39 } 40 } 12 // }}} 13 // {{{ generate page 41 14 42 $objPage = new LC_Page(); 43 $objView = new SC_AdminView(); 44 $objSiteInfo = new SC_SiteInfo(); 45 $objQuery = new SC_Query(); 46 47 // 認証可否の判定 48 $objSess = new SC_Session(); 49 sfIsSuccess($objSess); 50 51 // ファイル管理クラス 52 $objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR); 53 54 // ファイル情報の初期化 55 lfInitFile(); 56 // Hiddenからのデータを引き継ぐ 57 $objUpFile->setHiddenFileList($_POST); 58 59 // 検索パラメータの引き継ぎ 60 foreach ($_POST as $key => $val) { 61 if (ereg("^search_", $key)) { 62 $objPage->arrSearchHidden[$key] = $val; 63 } 64 } 65 66 // FORMデータの引き継ぎ 67 $objPage->arrForm = $_POST; 68 69 switch($_POST['mode']) { 70 // 検索画面からの編集 71 case 'pre_edit': 72 case 'copy' : 73 // 編集時 74 if(sfIsInt($_POST['product_id'])){ 75 // DBから商品情報の読込 76 $arrForm = lfGetProduct($_POST['product_id']); 77 // DBデータから画像ファイル名の読込 78 $objUpFile->setDBFileList($arrForm); 79 80 if($_POST['mode'] == "copy"){ 81 $arrForm["copy_product_id"] = $arrForm["product_id"]; 82 $arrForm["product_id"] = ""; 83 // 画像ファイルのコピー 84 $arrKey = $objUpFile->keyname; 85 $arrSaveFile = $objUpFile->save_file; 86 87 foreach($arrSaveFile as $key => $val){ 88 lfMakeScaleImage($arrKey[$key], $arrKey[$key], true); 89 } 90 } 91 $objPage->arrForm = $arrForm; 92 93 // 商品ステータスの変換 94 $arrRet = sfSplitCBValue($objPage->arrForm['product_flag'], "product_flag"); 95 $objPage->arrForm = array_merge($objPage->arrForm, $arrRet); 96 // DBからおすすめ商品の読み込み 97 $objPage->arrRecommend = lfPreGetRecommendProducts($_POST['product_id']); 98 99 // 規格登録ありなし判定 100 $objPage->tpl_nonclass = lfCheckNonClass($_POST['product_id']); 101 lfProductPage(); // 商品登録ページ 102 } 103 break; 104 // 商品登録・編集 105 case 'edit': 106 // 規格登録ありなし判定 107 $tpl_nonclass = lfCheckNonClass($_POST['product_id']); 108 109 if($_POST['product_id'] == "" and sfIsInt($_POST['copy_product_id'])){ 110 $tpl_nonclass = lfCheckNonClass($_POST['copy_product_id']); 111 } 112 $objPage->tpl_nonclass = $tpl_nonclass; 113 114 // 入力値の変換 115 $objPage->arrForm = lfConvertParam($objPage->arrForm); 116 // エラーチェック 117 $objPage->arrErr = lfErrorCheck($objPage->arrForm); 118 // ファイル存在チェック 119 $objPage->arrErr = array_merge((array)$objPage->arrErr, (array)$objUpFile->checkEXISTS()); 120 // エラーなしの場合 121 if(count($objPage->arrErr) == 0) { 122 lfProductConfirmPage(); // 確認ページ 123 } else { 124 lfProductPage(); // 商品登録ページ 125 } 126 break; 127 // 確認ページから完了ページへ 128 case 'complete': 129 $objPage->tpl_mainpage = 'products/complete.tpl'; 130 131 $objPage->tpl_product_id = lfRegistProduct($_POST); // データ登録 132 133 $objQuery = new SC_Query(); 134 // 件数カウントバッチ実行 135 sfCategory_Count($objQuery); 136 // 一時ファイルを本番ディレクトリに移動する 137 $objUpFile->moveTempFile(); 138 139 break; 140 // 画像のアップロード 141 case 'upload_image': 142 // ファイル存在チェック 143 $objPage->arrErr = array_merge((array)$objPage->arrErr, (array)$objUpFile->checkEXISTS($_POST['image_key'])); 144 // 画像保存処理 145 $objPage->arrErr[$_POST['image_key']] = $objUpFile->makeTempFile($_POST['image_key']); 146 147 // 中、小画像生成 148 lfSetScaleImage(); 149 150 lfProductPage(); // 商品登録ページ 151 break; 152 // 画像の削除 153 case 'delete_image': 154 $objUpFile->deleteFile($_POST['image_key']); 155 lfProductPage(); // 商品登録ページ 156 break; 157 // 確認ページからの戻り 158 case 'confirm_return': 159 // 規格登録ありなし判定 160 $objPage->tpl_nonclass = lfCheckNonClass($_POST['product_id']); 161 lfProductPage(); // 商品登録ページ 162 break; 163 // おすすめ商品選択 164 case 'recommend_select' : 165 lfProductPage(); // 商品登録ページ 166 break; 167 default: 168 // 公開・非公開のデフォルト値 169 $objPage->arrForm['status'] = DEFAULT_PRODUCT_DISP; 170 lfProductPage(); // 商品登録ページ 171 break; 172 } 173 174 if($_POST['mode'] != 'pre_edit') { 175 // おすすめ商品の読み込み 176 $objPage->arrRecommend = lfGetRecommendProducts(); 177 } 178 179 // 基本情報を渡す 180 $objPage->arrInfo = $objSiteInfo->data; 181 182 // サブ情報の入力があるかどうかチェックする 183 $sub_find = false; 184 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 185 if( $objPage->arrForm['sub_title'.$cnt] != "" || 186 $objPage->arrForm['sub_comment'.$cnt] != "" || 187 $objPage->arrForm['sub_image'.$cnt] != "" || 188 $objPage->arrForm['sub_large_image'.$cnt] != "" || 189 is_array($objPage->arrFile['sub_image'.$cnt]) || 190 is_array($objPage->arrFile['sub_large_image'.$cnt])) { 191 $sub_find = true; 192 break; 193 } 194 } 195 // サブ情報表示・非表示のチェックに使用する。 196 $objPage->sub_find = $sub_find; 197 198 $objView->assignobj($objPage); 199 $objView->display(MAIN_FRAME); 200 //----------------------------------------------------------------------------------------------------------------------------- 201 202 /* おすすめ商品の読み込み */ 203 function lfGetRecommendProducts() { 204 global $objPage; 205 $objQuery = new SC_Query(); 206 207 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 208 $keyname = "recommend_id" . $i; 209 $delkey = "recommend_delete" . $i; 210 $commentkey = "recommend_comment" . $i; 211 212 if($_POST[$keyname] != "" && $_POST[$delkey] != 1) { 213 $arrRet = $objQuery->select("main_list_image, product_code_min, name", "vw_products_allclass AS allcls", "product_id = ?", array($_POST[$keyname])); 214 $arrRecommend[$i] = $arrRet[0]; 215 $arrRecommend[$i]['product_id'] = $_POST[$keyname]; 216 $arrRecommend[$i]['comment'] = $objPage->arrForm[$commentkey]; 217 } 218 } 219 return $arrRecommend; 220 } 221 222 /* おすすめ商品の登録 */ 223 function lfInsertRecommendProducts($objQuery, $arrList, $product_id) { 224 // 一旦オススメ商品をすべて削除する 225 $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id)); 226 $sqlval['product_id'] = $product_id; 227 $rank = RECOMMEND_PRODUCT_MAX; 228 for($i = 1; $i <= RECOMMEND_PRODUCT_MAX; $i++) { 229 $keyname = "recommend_id" . $i; 230 $commentkey = "recommend_comment" . $i; 231 $deletekey = "recommend_delete" . $i; 232 if($arrList[$keyname] != "" && $arrList[$deletekey] != '1') { 233 $sqlval['recommend_product_id'] = $arrList[$keyname]; 234 $sqlval['comment'] = $arrList[$commentkey]; 235 $sqlval['rank'] = $rank; 236 $sqlval['creator_id'] = $_SESSION['member_id']; 237 $sqlval['create_date'] = "now()"; 238 $sqlval['update_date'] = "now()"; 239 $objQuery->insert("dtb_recommend_products", $sqlval); 240 $rank--; 241 } 242 } 243 } 244 245 /* 登録済みおすすめ商品の読み込み */ 246 function lfPreGetRecommendProducts($product_id) { 247 $objQuery = new SC_Query(); 248 $objQuery->setorder("rank DESC"); 249 $arrRet = $objQuery->select("recommend_product_id, comment", "dtb_recommend_products", "product_id = ?", array($product_id)); 250 $max = count($arrRet); 251 $no = 1; 252 253 for($i = 0; $i < $max; $i++) { 254 $arrProductInfo = $objQuery->select("main_list_image, product_code_min, name", "vw_products_allclass AS allcls", "product_id = ?", array($arrRet[$i]['recommend_product_id'])); 255 $arrRecommend[$no] = $arrProductInfo[0]; 256 $arrRecommend[$no]['product_id'] = $arrRet[$i]['recommend_product_id']; 257 $arrRecommend[$no]['comment'] = $arrRet[$i]['comment']; 258 $no++; 259 } 260 return $arrRecommend; 261 } 262 263 /* 商品情報の読み込み */ 264 function lfGetProduct($product_id) { 265 $objQuery = new SC_Query(); 266 $col = "*"; 267 $table = "vw_products_nonclass AS noncls "; 268 $where = "product_id = ?"; 269 270 // viewも絞込み(mysql対応) 271 sfViewWhere("&&noncls_where&&", $where, array($product_id)); 272 273 $arrRet = $objQuery->select($col, $table, $where, array($product_id)); 274 275 return $arrRet[0]; 276 } 277 278 /* 商品登録ページ表示用 */ 279 function lfProductPage() { 280 global $objPage; 281 global $objUpFile; 282 283 // カテゴリの読込 284 list($objPage->arrCatVal, $objPage->arrCatOut) = sfGetLevelCatList(false); 285 286 if($objPage->arrForm['status'] == "") { 287 $objPage->arrForm['status'] = 1; 288 } 289 290 if(!is_array($objPage->arrForm['product_flag'])) { 291 // 商品ステータスの分割読込 292 $objPage->arrForm['product_flag'] = sfSplitCheckBoxes($objPage->arrForm['product_flag']); 293 } 294 295 // HIDDEN用に配列を渡す。 296 $objPage->arrHidden = array_merge((array)$objPage->arrHidden, (array)$objUpFile->getHiddenFileList()); 297 // Form用配列を渡す。 298 $objPage->arrFile = $objUpFile->getFormFileList(IMAGE_TEMP_URL, IMAGE_SAVE_URL); 299 300 301 // アンカーを設定 302 if($_POST['image_key'] != ""){ 303 $anchor_hash = "location.hash='#" . $_POST['image_key'] . "'"; 304 }elseif($_POST['anchor_key'] != ""){ 305 $anchor_hash = "location.hash='#" . $_POST['anchor_key'] . "'"; 306 } 307 308 $objPage->tpl_onload = "fnCheckSaleLimit('" . DISABLED_RGB . "'); fnCheckStockLimit('" . DISABLED_RGB . "'); " . $anchor_hash; 309 } 310 311 /* ファイル情報の初期化 */ 312 function lfInitFile() { 313 global $objUpFile; 314 $objUpFile->addFile("一覧-メイン画像", 'main_list_image', array('jpg', 'gif', 'png'),IMAGE_SIZE, true, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); 315 $objUpFile->addFile("詳細-メイン画像", 'main_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, true, NORMAL_IMAGE_WIDTH, NORMAL_IMAGE_HEIGHT); 316 $objUpFile->addFile("詳細-メイン拡大画像", 'main_large_image', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_IMAGE_WIDTH, LARGE_IMAGE_HEIGHT); 317 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 318 $objUpFile->addFile("詳細-サブ画像$cnt", "sub_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, NORMAL_SUBIMAGE_WIDTH, NORMAL_SUBIMAGE_HEIGHT); 319 $objUpFile->addFile("詳細-サブ拡大画像$cnt", "sub_large_image$cnt", array('jpg', 'gif', 'png'), IMAGE_SIZE, false, LARGE_SUBIMAGE_WIDTH, LARGE_SUBIMAGE_HEIGHT); 320 } 321 $objUpFile->addFile("商品比較画像", 'file1', array('jpg', 'gif', 'png'), IMAGE_SIZE, false, OTHER_IMAGE1_WIDTH, OTHER_IMAGE1_HEIGHT); 322 $objUpFile->addFile("商品詳細ファイル", 'file2', array('pdf'), PDF_SIZE, false, 0, 0, false); 323 } 324 325 /* 商品の登録 */ 326 function lfRegistProduct($arrList) { 327 global $objUpFile; 328 global $arrSTATUS; 329 $objQuery = new SC_Query(); 330 $objQuery->begin(); 331 332 // INSERTする値を作成する。 333 $sqlval['name'] = $arrList['name']; 334 $sqlval['category_id'] = $arrList['category_id']; 335 $sqlval['status'] = $arrList['status']; 336 $sqlval['product_flag'] = $arrList['product_flag']; 337 $sqlval['main_list_comment'] = $arrList['main_list_comment']; 338 $sqlval['main_comment'] = $arrList['main_comment']; 339 $sqlval['point_rate'] = $arrList['point_rate']; 340 $sqlval['deliv_fee'] = $arrList['deliv_fee']; 341 $sqlval['comment1'] = $arrList['comment1']; 342 $sqlval['comment2'] = $arrList['comment2']; 343 $sqlval['comment3'] = $arrList['comment3']; 344 $sqlval['comment4'] = $arrList['comment4']; 345 $sqlval['comment5'] = $arrList['comment5']; 346 $sqlval['comment6'] = $arrList['comment6']; 347 $sqlval['main_list_comment'] = $arrList['main_list_comment']; 348 $sqlval['sale_limit'] = $arrList['sale_limit']; 349 $sqlval['sale_unlimited'] = $arrList['sale_unlimited']; 350 $sqlval['deliv_date_id'] = $arrList['deliv_date_id']; 351 $sqlval['update_date'] = "Now()"; 352 $sqlval['creator_id'] = $_SESSION['member_id']; 353 $arrRet = $objUpFile->getDBFileList(); 354 $sqlval = array_merge($sqlval, $arrRet); 355 356 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 357 $sqlval['sub_title'.$cnt] = $arrList['sub_title'.$cnt]; 358 $sqlval['sub_comment'.$cnt] = $arrList['sub_comment'.$cnt]; 359 } 360 361 if($arrList['product_id'] == "") { 362 if (DB_TYPE == "pgsql") { 363 $product_id = $objQuery->nextval("dtb_products", "product_id"); 364 $sqlval['product_id'] = $product_id; 365 } 366 // カテゴリ内で最大のランクを割り当てる 367 $sqlval['rank'] = $objQuery->max("dtb_products", "rank", "category_id = ?", array($arrList['category_id'])) + 1; 368 // INSERTの実行 369 $sqlval['create_date'] = "Now()"; 370 $objQuery->insert("dtb_products", $sqlval); 371 372 if (DB_TYPE == "mysql") { 373 $product_id = $objQuery->nextval("dtb_products", "product_id"); 374 $sqlval['product_id'] = $product_id; 375 } 376 377 // コピー商品の場合には規格もコピーする 378 if($_POST["copy_product_id"] != "" and sfIsInt($_POST["copy_product_id"])){ 379 // dtb_products_class のカラムを取得 380 $arrColList = sfGetColumnList("dtb_products_class", $objQuery); 381 $arrColList_tmp = array_flip($arrColList); 382 383 // コピーしない列 384 unset($arrColList[$arrColList_tmp["product_class_id"]]); //規格ID 385 unset($arrColList[$arrColList_tmp["product_id"]]); //商品ID 386 387 $col = sfGetCommaList($arrColList); 388 389 $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"])); 390 391 } 392 393 } else { 394 $product_id = $arrList['product_id']; 395 // 削除要求のあった既存ファイルの削除 396 $arrRet = lfGetProduct($arrList['product_id']); 397 $objUpFile->deleteDBFile($arrRet); 398 399 // カテゴリ内ランクの調整処理 400 $old_catid = $objQuery->get("dtb_products", "category_id", "product_id = ?", array($arrList['product_id'])); 401 sfMoveCatRank($objQuery, "dtb_products", "product_id", "category_id", $old_catid, $arrList['category_id'], $arrList['product_id']); 402 403 // UPDATEの実行 404 $where = "product_id = ?"; 405 $objQuery->update("dtb_products", $sqlval, $where, array($arrList['product_id'])); 406 } 407 408 // 規格登録 409 sfInsertProductClass($objQuery, $arrList, $product_id); 410 411 // おすすめ商品登録 412 lfInsertRecommendProducts($objQuery, $arrList, $product_id); 413 414 $objQuery->commit(); 415 return $product_id; 416 } 417 418 419 /* 取得文字列の変換 */ 420 function lfConvertParam($array) { 421 /* 422 * 文字列の変換 423 * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換 424 * C : 「全角ひら仮名」を「全角かた仮名」に変換 425 * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します 426 * n : 「全角」数字を「半角(ハンカク)」に変換 427 */ 428 // 人物基本情報 429 430 // スポット商品 431 $arrConvList['name'] = "KVa"; 432 $arrConvList['main_list_comment'] = "KVa"; 433 $arrConvList['main_comment'] = "KVa"; 434 $arrConvList['price01'] = "n"; 435 $arrConvList['price02'] = "n"; 436 $arrConvList['stock'] = "n"; 437 $arrConvList['sale_limit'] = "n"; 438 $arrConvList['point_rate'] = "n"; 439 $arrConvList['product_code'] = "KVna"; 440 $arrConvList['comment1'] = "a"; 441 //ホネケーキ:送料の指定なし 442 $arrConvList['deliv_fee'] = "n"; 443 444 // 詳細-サブ 445 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 446 $arrConvList["sub_title$cnt"] = "KVa"; 447 } 448 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 449 $arrConvList["sub_comment$cnt"] = "KVa"; 450 } 451 452 // おすすめ商品 453 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 454 $arrConvList["recommend_comment$cnt"] = "KVa"; 455 } 456 457 // 文字変換 458 foreach ($arrConvList as $key => $val) { 459 // POSTされてきた値のみ変換する。 460 if(isset($array[$key])) { 461 $array[$key] = mb_convert_kana($array[$key] ,$val); 462 } 463 } 464 465 global $arrSTATUS; 466 $array['product_flag'] = sfMergeCheckBoxes($array['product_flag'], count($arrSTATUS)); 467 468 return $array; 469 } 470 471 // 入力エラーチェック 472 function lfErrorCheck($array) { 473 global $objPage; 474 global $arrAllowedTag; 475 476 $objErr = new SC_CheckError($array); 477 $objErr->doFunc(array("商品名", "name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 478 $objErr->doFunc(array("商品カテゴリ", "category_id", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 479 $objErr->doFunc(array("一覧-メインコメント", "main_list_comment", MTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 480 $objErr->doFunc(array("詳細-メインコメント", "main_comment", LLTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 481 $objErr->doFunc(array("詳細-メインコメント", "main_comment", $arrAllowedTag), array("HTML_TAG_CHECK")); 482 $objErr->doFunc(array("ポイント付与率", "point_rate", PERCENTAGE_LEN), array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 483 $objErr->doFunc(array("商品送料", "deliv_fee", PRICE_LEN), array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 484 $objErr->doFunc(array("検索ワード", "comment3", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 485 $objErr->doFunc(array("メーカーURL", "comment1", URL_LEN), array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK")); 486 $objErr->doFunc(array("発送日目安", "deliv_date_id", INT_LEN), array("NUM_CHECK")); 487 488 if($objPage->tpl_nonclass) { 489 $objErr->doFunc(array("商品コード", "product_code", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK","MAX_LENGTH_CHECK")); 490 $objErr->doFunc(array("通常価格", "price01", PRICE_LEN), array("ZERO_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 491 $objErr->doFunc(array("商品価格", "price02", PRICE_LEN), array("EXIST_CHECK", "NUM_CHECK", "ZERO_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 492 493 if($array['stock_unlimited'] != "1") { 494 $objErr->doFunc(array("在庫数", "stock", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 495 } 496 } 497 498 if($array['sale_unlimited'] != "1") { 499 $objErr->doFunc(array("購入制限", "sale_limit", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 500 } 501 502 if(isset($objErr->arrErr['category_id'])) { 503 // 自動選択を防ぐためにダミー文字を入れておく 504 $objPage->arrForm['category_id'] = "#"; 505 } 506 507 for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { 508 $objErr->doFunc(array("詳細-サブタイトル$cnt", "sub_title$cnt", STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 509 $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 510 $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", $arrAllowedTag), array("HTML_TAG_CHECK")); 511 } 512 513 for ($cnt = 1; $cnt <= RECOMMEND_PRODUCT_MAX; $cnt++) { 514 if($_POST["recommend_id$cnt"] != "" && $_POST["recommend_delete$cnt"] != 1) { 515 $objErr->doFunc(array("おすすめ商品コメント$cnt", "recommend_comment$cnt", LTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 516 } 517 } 518 519 return $objErr->arrErr; 520 } 521 522 /* 確認ページ表示用 */ 523 function lfProductConfirmPage() { 524 global $objPage; 525 global $objUpFile; 526 $objPage->tpl_mainpage = 'products/confirm.tpl'; 527 $objPage->arrForm['mode'] = 'complete'; 528 // カテゴリの読込 529 $objPage->arrCatList = sfGetCategoryList(); 530 // Form用配列を渡す。 531 $objPage->arrFile = $objUpFile->getFormFileList(IMAGE_TEMP_URL, IMAGE_SAVE_URL); 532 } 533 534 /* 規格あり判定用(規格が登録されていない場合:TRUE) */ 535 function lfCheckNonClass($product_id) { 536 if(sfIsInt($product_id)) { 537 $objQuery = new SC_Query(); 538 $where = "product_id = ? AND classcategory_id1 <> 0 AND classcategory_id1 <> 0"; 539 $count = $objQuery->count("dtb_products_class", $where, array($product_id)); 540 if($count > 0) { 541 return false; 542 } 543 } 544 return true; 545 } 546 547 // 縮小した画像をセットする 548 function lfSetScaleImage(){ 549 550 $subno = str_replace("sub_large_image", "", $_POST['image_key']); 551 switch ($_POST['image_key']){ 552 case "main_large_image": 553 // 詳細メイン画像 554 lfMakeScaleImage($_POST['image_key'], "main_image"); 555 case "main_image": 556 // 一覧メイン画像 557 lfMakeScaleImage($_POST['image_key'], "main_list_image"); 558 break; 559 case "sub_large_image" . $subno: 560 // サブメイン画像 561 lfMakeScaleImage($_POST['image_key'], "sub_image" . $subno); 562 break; 563 default: 564 break; 565 } 566 } 567 568 // 縮小画像生成 569 function lfMakeScaleImage($from_key, $to_key, $forced = false){ 570 global $objUpFile; 571 $arrImageKey = array_flip($objUpFile->keyname); 572 573 if($objUpFile->temp_file[$arrImageKey[$from_key]]){ 574 $from_path = $objUpFile->temp_dir . $objUpFile->temp_file[$arrImageKey[$from_key]]; 575 }elseif($objUpFile->save_file[$arrImageKey[$from_key]]){ 576 $from_path = $objUpFile->save_dir . $objUpFile->save_file[$arrImageKey[$from_key]]; 577 }else{ 578 return ""; 579 } 580 581 if(file_exists($from_path)){ 582 // 元画像サイズを取得 583 list($from_w, $from_h) = getimagesize($from_path); 584 585 // 生成先の画像サイズを取得 586 $to_w = $objUpFile->width[$arrImageKey[$to_key]]; 587 $to_h = $objUpFile->height[$arrImageKey[$to_key]]; 588 589 590 if($forced) $objUpFile->save_file[$arrImageKey[$to_key]] = ""; 591 592 if(($objUpFile->temp_file[$arrImageKey[$to_key]] == "" and $objUpFile->save_file[$arrImageKey[$to_key]] == "")){ 593 $path = $objUpFile->makeThumb($from_path, $to_w, $to_h); 594 $objUpFile->temp_file[$arrImageKey[$to_key]] = basename($path); 595 } 596 }else{ 597 return ""; 598 } 599 } 600 15 $objPage = new LC_Page_Admin_Products_Product_Ex(); 16 $objPage->init(); 17 $objPage->process(); 18 register_shutdown_function(array($objPage, "destroy")); 601 19 ?>
Note: See TracChangeset
for help on using the changeset viewer.