/**
  * 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);
 }
Ejemplo n.º 3
0
 /**
  * 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);
 }