/** * Page のプロセス. * * @return void */ function process() { $objView = new SC_AdminView(); $objSiteInfo = new SC_SiteInfo(); $objQuery = new SC_Query(); $objDb = new SC_Helper_DB_Ex(); // 認証可否の判定 $objSess = new SC_Session(); SC_Utils_Ex::sfIsSuccess($objSess); // ファイル管理クラス $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR); // ファイル情報の初期化 $this->lfInitFile(); // Hiddenからのデータを引き継ぐ $this->objUpFile->setHiddenFileList($_POST); // 規格の有り無し判定 $this->tpl_nonclass = $this->lfCheckNonClass($_POST['product_id']); // 検索パラメータの引き継ぎ foreach ($_POST as $key => $val) { if (ereg("^search_", $key)) { $this->arrSearchHidden[$key] = $val; } } // FORMデータの引き継ぎ $this->arrForm = $_POST; if (!isset($_POST['mode'])) { $_POST['mode'] = ""; } switch ($_POST['mode']) { // 検索画面からの編集 case 'pre_edit': case 'copy': // 編集時 if (SC_Utils_Ex::sfIsInt($_POST['product_id'])) { // DBから商品情報の読込 $arrForm = $this->lfGetProduct($_POST['product_id']); // DBデータから画像ファイル名の読込 $this->objUpFile->setDBFileList($arrForm); if ($_POST['mode'] == "copy") { $arrForm["copy_product_id"] = $arrForm["product_id"]; $arrForm["product_id"] = ""; // 画像ファイルのコピー $arrKey = $this->objUpFile->keyname; $arrSaveFile = $this->objUpFile->save_file; foreach ($arrSaveFile as $key => $val) { $this->lfMakeScaleImage($arrKey[$key], $arrKey[$key], true); } } $this->arrForm = $arrForm; // 商品ステータスの変換 $arrRet = SC_Utils_Ex::sfSplitCBValue($this->arrForm['product_flag'], "product_flag"); $this->arrForm = array_merge($this->arrForm, $arrRet); // DBからおすすめ商品の読み込み $this->arrRecommend = $this->lfPreGetRecommendProducts($_POST['product_id']); $this->lfProductPage(); // 商品登録ページ } break; // 商品登録・編集 // 商品登録・編集 case 'edit': if ($_POST['product_id'] == "" and SC_Utils_Ex::sfIsInt($_POST['copy_product_id'])) { $this->tpl_nonclass = $this->lfCheckNonClass($_POST['copy_product_id']); } // 入力値の変換 $this->arrForm = $this->lfConvertParam($this->arrForm); // エラーチェック $this->arrErr = $this->lfErrorCheck($this->arrForm); // ファイル存在チェック $this->arrErr = array_merge((array) $this->arrErr, (array) $this->objUpFile->checkEXISTS()); // エラーなしの場合 if (count($this->arrErr) == 0) { $this->lfProductConfirmPage(); // 確認ページ } else { $this->lfProductPage(); // 商品登録ページ } break; // 確認ページから完了ページへ // 確認ページから完了ページへ case 'complete': $this->tpl_mainpage = 'products/complete.tpl'; $this->arrForm['product_id'] = $this->lfRegistProduct($_POST); // データ登録 // 件数カウントバッチ実行 $objDb->sfCategory_Count($objQuery); // 一時ファイルを本番ディレクトリに移動する $this->objUpFile->moveTempFile(); break; // 画像のアップロード // 画像のアップロード case 'upload_image': // ファイル存在チェック $this->arrErr = array_merge((array) $this->arrErr, (array) $this->objUpFile->checkEXISTS($_POST['image_key'])); // 画像保存処理 $this->arrErr[$_POST['image_key']] = $this->objUpFile->makeTempFile($_POST['image_key'], IMAGE_RENAME); // 中、小画像生成 $this->lfSetScaleImage(); $this->lfProductPage(); // 商品登録ページ break; // 画像の削除 // 画像の削除 case 'delete_image': $this->objUpFile->deleteFile($_POST['image_key']); $this->lfProductPage(); // 商品登録ページ break; // 確認ページからの戻り // 確認ページからの戻り case 'confirm_return': $this->lfProductPage(); // 商品登録ページ break; // おすすめ商品選択 // おすすめ商品選択 case 'recommend_select': $this->lfProductPage(); // 商品登録ページ break; default: $this->lfProductPage(); // 商品登録ページ break; } if ($_POST['mode'] != 'pre_edit') { // おすすめ商品の読み込み $this->arrRecommend = $this->lfGetRecommendProducts(); } // 基本情報を渡す $this->arrInfo = $objSiteInfo->data; // サブ情報の入力があるかどうかチェックする $sub_find = false; for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) { if (isset($this->arrForm['sub_title' . $cnt]) && !empty($this->arrForm['sub_title' . $cnt]) || isset($this->arrForm['sub_comment' . $cnt]) && !empty($this->arrForm['sub_comment' . $cnt]) || isset($this->arrForm['sub_image' . $cnt]) && !empty($this->arrForm['sub_image' . $cnt]) || isset($this->arrForm['sub_large_image' . $cnt]) && !empty($this->arrForm['sub_large_image' . $cnt]) || isset($this->arrForm['sub_image' . $cnt]) && is_array($this->arrFile['sub_image' . $cnt]) || isset($this->arrForm['sub_large_image' . $cnt]) && is_array($this->arrFile['sub_large_image' . $cnt])) { $sub_find = true; break; } } // サブ情報表示・非表示のチェックに使用する。 $this->sub_find = $sub_find; $objView->assignobj($this); $objView->display(MAIN_FRAME); }
/** * Page のプロセス. * * @return void */ function process() { $conn = new SC_DBConn(); $objView = new SC_AdminView(); $objSess = new SC_Session(); $objDb = new SC_Helper_DB_Ex(); // 認証可否の判定 SC_Utils_Ex::sfIsSuccess($objSess); // ファイル管理クラス $this->objUpFile = new SC_UploadFile(IMAGE_TEMP_DIR, IMAGE_SAVE_DIR); // ファイル情報の初期化 $this->lfInitFile(); // パラメータ管理クラス $this->objFormParam = new SC_FormParam(); // パラメータ情報の初期化 $this->lfInitParam(); $colmax = $this->objFormParam->getCount(); $this->objFormParam->setHtmlDispNameArray(); $this->arrTitle = $this->objFormParam->getHtmlDispNameArray(); if (!isset($_POST['mode'])) { $_POST['mode'] = ""; } switch ($_POST['mode']) { case 'csv_upload': $err = false; // エラーチェック $arrErr['csv_file'] = $this->objUpFile->makeTempFile('csv_file'); if ($arrErr['css_file'] == "") { $arrErr = $this->objUpFile->checkEXISTS(); } // 実行時間を制限しない set_time_limit(0); // 出力をバッファリングしない(==日本語自動変換もしない) ob_end_clean(); // IEのために256バイト空文字出力 echo str_pad('', 256); if (empty($arrErr['csv_file'])) { // 一時ファイル名の取得 $filepath = $this->objUpFile->getTempFilePath('csv_file'); // エンコード $enc_filepath = SC_Utils_Ex::sfEncodeFile($filepath, CHAR_CODE, CSV_TEMP_DIR); // レコード数を得る $rec_count = $this->lfCSVRecordCount($enc_filepath); $fp = fopen($enc_filepath, "r"); $line = 0; // 行数 $regist = 0; // 登録数 $objQuery = new SC_Query(); $objQuery->begin(); echo "■ CSV登録進捗状況 <br/><br/>\n"; while (!feof($fp) && !$err) { $arrCSV = fgetcsv($fp, CSV_LINE_MAX); // 行カウント $line++; if ($line <= 1) { continue; } // 項目数カウント $max = count($arrCSV); // 項目数が1以下の場合は無視する if ($max <= 1) { continue; } // 項目数チェック if ($max != $colmax) { echo "※ 項目数が" . $max . "個検出されました。項目数は" . $colmax . "個になります。</br>\n"; $err = true; } else { // シーケンス配列を格納する。 $this->objFormParam->setParam($arrCSV, true); $arrRet = $this->objFormParam->getHashArray(); $this->objFormParam->setParam($arrRet); // 入力値の変換 $this->objFormParam->convParam(); // <br>なしでエラー取得する。 $arrCSVErr = $this->lfCheckError(); } // 入力エラーチェック if (count($arrCSVErr) > 0) { echo "<font color=\"red\">■" . $line . "行目でエラーが発生しました。</font></br>\n"; foreach ($arrCSVErr as $val) { $this->printError($val); } $err = true; } if (!$err) { $this->lfRegistProduct($objQuery, $line); $regist++; } $arrParam = $this->objFormParam->getHashArray(); if (!$err) { echo $line . " / " . $rec_count . "行目 (カテゴリID:" . $arrParam['category_id'] . " / カテゴリ名:" . $arrParam['category_name'] . ")\n<br />"; } flush(); } fclose($fp); if (!$err) { $objQuery->commit(); echo "■" . $regist . "件のレコードを登録しました。"; // カテゴリ件数カウント関数の実行 $objDb->sfCategory_Count($objQuery); } else { $objQuery->rollback(); } } else { foreach ($arrErr as $val) { $this->printError($val); } } echo "<br/><a href=\"javascript:window.close()\">→閉じる</a>"; flush(); exit; break; default: break; } $objView->assignobj($this); $objView->display(MAIN_FRAME); }
/** * Page のプロセス. * * @return void */ function process() { $objView = new SC_AdminView(); $objDb = new SC_Helper_DB_Ex(); $objDate = new SC_Date(); // 登録・更新検索開始年 $objDate->setStartYear(RELEASE_YEAR); $objDate->setEndYear(DATE("Y")); $this->arrStartYear = $objDate->getYear(); $this->arrStartMonth = $objDate->getMonth(); $this->arrStartDay = $objDate->getDay(); // 登録・更新検索終了年 $objDate->setStartYear(RELEASE_YEAR); $objDate->setEndYear(DATE("Y")); $this->arrEndYear = $objDate->getYear(); $this->arrEndMonth = $objDate->getMonth(); $this->arrEndDay = $objDate->getDay(); // 認証可否の判定 $objSess = new SC_Session(); SC_Utils_Ex::sfIsSuccess($objSess); if (!isset($_POST['mode'])) { $_POST['mode'] = ""; } //キャンペーンの編集時 if (isset($_POST['campaign_id']) && SC_Utils_Ex::sfIsInt($_POST['campaign_id']) && $_POST['mode'] == "camp_search") { $objQuery = new SC_Query(); $search_data = $objQuery->get("dtb_campaign", "search_condition", "campaign_id = ? ", array($_POST['campaign_id'])); $arrSearch = unserialize($search_data); foreach ($arrSearch as $key => $val) { $_POST[$key] = $val; } } // POST値の引き継ぎ $this->arrForm = $_POST; // 検索ワードの引き継ぎ foreach ($_POST as $key => $val) { if (ereg("^search_", $key) || ereg("^campaign_", $key)) { switch ($key) { case 'search_product_flag': case 'search_status': $this->arrHidden[$key] = SC_Utils_Ex::sfMergeParamCheckBoxes($val); if (!is_array($val)) { $this->arrForm[$key] = split("-", $val); } break; default: $this->arrHidden[$key] = $val; break; } } } // ページ送り用 $this->arrHidden['search_pageno'] = isset($_POST['search_pageno']) ? $_POST['search_pageno'] : ""; // 商品削除 if ($_POST['mode'] == "delete") { if ($_POST['category_id'] != "") { // ランク付きレコードの削除 $where = "category_id = " . SC_Utils_Ex::sfQuoteSmart($_POST['category_id']); $objDb->sfDeleteRankRecord("dtb_products", "product_id", $_POST['product_id'], $where); } else { $objDb->sfDeleteRankRecord("dtb_products", "product_id", $_POST['product_id']); } // 子テーブル(商品規格)の削除 $objQuery = new SC_Query(); $objQuery->delete("dtb_products_class", "product_id = ?", array($_POST['product_id'])); // 件数カウントバッチ実行 $objDb->sfCategory_Count($objQuery); } if ($_POST['mode'] == "search" || $_POST['mode'] == "csv" || $_POST['mode'] == "delete" || $_POST['mode'] == "delete_all" || $_POST['mode'] == "camp_search") { // 入力文字の強制変換 $this->lfConvertParam(); // エラーチェック $this->arrErr = $this->lfCheckError(); $where = "del_flg = 0"; $view_where = "del_flg = 0"; // 入力エラーなし if (count($this->arrErr) == 0) { $arrval = array(); foreach ($this->arrForm as $key => $val) { $val = SC_Utils_Ex::sfManualEscape($val); if ($val == "") { continue; } switch ($key) { case 'search_product_id': // 商品ID $where .= " AND product_id = ?"; $view_where .= " AND product_id = ?"; $arrval[] = $val; break; case 'search_product_class_name': //規格名称 $where_in = " (SELECT classcategory_id FROM dtb_classcategory WHERE class_id IN (SELECT class_id FROM dtb_class WHERE name LIKE ?)) "; $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE classcategory_id1 IN " . $where_in; $where .= " OR classcategory_id2 IN" . $where_in . ")"; $view_where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE classcategory_id1 IN " . $where_in; $view_where .= " OR classcategory_id2 IN" . $where_in . ")"; $arrval[] = "%{$val}%"; $arrval[] = "%{$val}%"; $view_where = $where; break; case 'search_name': // 商品名 $where .= " AND name ILIKE ?"; $view_where .= " AND name ILIKE ?"; $arrval[] = "%{$val}%"; break; case 'search_category_id': // カテゴリー list($tmp_where, $tmp_arrval) = $objDb->sfGetCatWhere($val); if ($tmp_where != "") { $where .= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")"; $view_where .= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")"; $arrval = array_merge((array) $arrval, (array) $tmp_arrval); } break; case 'search_product_code': // 商品コード $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)"; $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 )"; $arrval[] = "%{$val}%"; break; case 'search_startyear': // 登録更新日(FROM) $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']); $where .= " AND update_date >= '" . $_POST['search_startyear'] . "/" . $_POST['search_startmonth'] . "/" . $_POST['search_startday'] . "'"; $view_where .= " AND update_date >= '" . $_POST['search_startyear'] . "/" . $_POST['search_startmonth'] . "/" . $_POST['search_startday'] . "'"; break; case 'search_endyear': // 登録更新日(TO) $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']); $date = date('Y/m/d', strtotime($date) + 86400); $where .= " AND update_date < date('" . $date . "')"; $view_where .= " AND update_date < date('" . $date . "')"; break; case 'search_product_flag': //種別 global $arrSTATUS; $search_product_flag = SC_Utils_Ex::sfSearchCheckBoxes($val); if ($search_product_flag != "") { $where .= " AND product_flag LIKE ?"; $view_where .= " AND product_flag LIKE ?"; $arrval[] = $search_product_flag; } break; case 'search_status': // ステータス $tmp_where = ""; foreach ($val as $element) { if ($element != "") { if ($tmp_where == "") { $tmp_where .= "AND (status = ? "; } else { $tmp_where .= "OR status = ? "; } $arrval[] = $element; } } if ($tmp_where != "") { $tmp_where .= ")"; $where .= " {$tmp_where}"; $view_where .= " {$tmp_where}"; } break; default: break; } } $order = "update_date DESC, product_id DESC"; $objQuery = new SC_Query(); switch ($_POST['mode']) { case 'csv': require_once CLASS_EX_PATH . "helper_extends/SC_Helper_CSV_Ex.php"; $objCSV = new SC_Helper_CSV_Ex(); // オプションの指定 $option = "ORDER BY {$order}"; // CSV出力タイトル行の作成 $arrOutput = SC_Utils_Ex::sfSwapArray($objCSV->sfgetCsvOutput(1, " WHERE csv_id = 1 AND status = 1")); if (count($arrOutput) <= 0) { break; } $arrOutputCols = $arrOutput['col']; $arrOutputTitle = $arrOutput['disp_name']; $head = SC_Utils_Ex::sfGetCSVList($arrOutputTitle); $data = $objCSV->lfGetProductsCSV($where, $option, $arrval, $arrOutputCols); // CSVを送信する。 SC_Utils_Ex::sfCSVDownload($head . $data); exit; break; case 'delete_all': // 検索結果の取得 $col = "product_id"; $from = "vw_products_nonclass AS noncls "; $arrProducts = $objQuery->select($col, $from, $where, $arrval); // 検索結果をすべて削除 $sqlval['del_flg'] = 1; $where = "product_id = ?"; if (count($arrProducts) > 0) { foreach ($arrProducts as $key => $val) { $objQuery->update("dtb_products", $sqlval, $where, array($arrProducts[$key]["product_id"])); } } break; default: // 読み込む列とテーブルの指定 $col = "product_id, name, category_id, main_list_image, status, product_code, price01, price02, stock, stock_unlimited"; $from = "vw_products_nonclass AS noncls "; // 行数の取得 $linemax = $objQuery->count("dtb_products", $view_where, $arrval); $this->tpl_linemax = $linemax; // 何件が該当しました。表示用 // ページ送りの処理 if (is_numeric($_POST['search_page_max'])) { $page_max = $_POST['search_page_max']; } else { $page_max = SEARCH_PMAX; } // ページ送りの取得 $objNavi = new SC_PageNavi($this->arrHidden['search_pageno'], $linemax, $page_max, "fnNaviSearchPage", NAVI_PMAX); $startno = $objNavi->start_row; $this->arrPagenavi = $objNavi->arrPagenavi; //キャンペーン商品検索時は、全結果の商品IDを変数に格納する if (isset($_POST['search_mode']) && $_POST['search_mode'] == 'campaign') { $arrRet = $objQuery->select($col, $from, $where, $arrval); if (count($arrRet) > 0) { $arrRet = sfSwapArray($arrRet); $pid = implode("-", $arrRet['product_id']); $this->arrHidden['campaign_product_id'] = $pid; } } // 取得範囲の指定(開始行番号、行数のセット) // if(DB_TYPE != "mysql") $objQuery->setlimitoffset($page_max, $startno); $objQuery->setlimitoffset($page_max, $startno); // 表示順序 $objQuery->setorder($order); // 検索結果の取得 $this->arrProducts = $objQuery->select($col, $from, $where, $arrval); // 各商品ごとのカテゴリIDを取得 if (count($this->arrProducts) > 0) { foreach ($this->arrProducts as $key => $val) { $this->arrProducts[$key]["categories"] = $objDb->sfGetCategoryId($val["product_id"]); $objDb->g_category_on = false; } } } } } // カテゴリの読込 list($this->arrCatKey, $this->arrCatVal) = $objDb->sfGetLevelCatList(false); $this->arrCatList = $this->lfGetIDName($this->arrCatKey, $this->arrCatVal); // 画面の表示 $objView->assignobj($this); $objView->display(MAIN_FRAME); }