source: branches/feature-module-update/html/admin/products/index.php @ 15080

Revision 15080, 11.8 KB checked in by nanasess, 17 years ago (diff)

svn properties 設定

  • svn:mime-type - application/x-httpd-php; charset=UTF-8
  • svn:keywords - Id
  • Property svn:keywords set to Id
  • Property svn:mime-type set to application/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7require_once("../require.php");
8require_once("./index_csv.php");
9
10class 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 = '商品マスタ';
22
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();
61sfIsSuccess($objSess);
62
63//キャンペーンの編集時
64if(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// 検索ワードの引き継ぎ
77foreach ($_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// 商品削除
98if ($_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
116if ($_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// 取得文字列の変換
300function 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// 入力エラーチェック
323function 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文作成
333function 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をキー、カテゴリ名を値にする配列を返す。
351function 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
361?>
Note: See TracBrowser for help on using the repository browser.