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

Revision 15080, 16.7 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(DATA_PATH . "include/csv_output.inc");
9
10//---- ページ表示用クラス
11class LC_Page {
12    var $arrSession;
13    var $tpl_mode;
14    var $list_data;
15    var $search_data;
16    var $arrErr;
17    var $arrYear;
18    var $arrMonth;
19    var $arrDay;
20    var $arrJob;
21    var $arrSex;
22    var $arrPageMax;
23    var $count;
24    var $search_SQL;
25   
26    var $tpl_strnavi;
27   
28    var $arrHtmlmail;
29
30    function LC_Page() {
31        $this->tpl_mainpage = 'customer/index.tpl';
32        $this->tpl_mainno = 'customer';
33        $this->tpl_subnavi = 'customer/subnavi.tpl';
34        $this->tpl_subno = 'index';
35        $this->tpl_pager = DATA_PATH . 'Smarty/templates/admin/pager.tpl';
36        $this->tpl_subtitle = '顧客マスタ';
37       
38        global $arrPref;
39        $this->arrPref = $arrPref;
40        global $arrJob;
41        $arrJob["不明"] = "不明";
42        $this->arrJob = $arrJob;
43        global $arrSex;     
44        $this->arrSex = $arrSex;
45        global $arrPageRows;
46        $this->arrPageRows = $arrPageRows;
47       
48        global $arrMAILMAGATYPE;
49        $this->arrMAILMAGATYPE = $arrMAILMAGATYPE;
50        $this->arrHtmlmail[''] = "すべて";
51        $this->arrHtmlmail[1] = $arrMAILMAGATYPE[1];
52        $this->arrHtmlmail[2] = $arrMAILMAGATYPE[2];       
53    }
54}
55
56//---- CSVダウンロード用
57$arrColumnCSV= array(
58                        0  => array("sql" => "customer_id", "csv" => "customer_id", "header" => "顧客ID"),
59                        1  => array("sql" => "name01", "csv" => "name01", "header" => "名前1"),
60                        2  => array("sql" => "name02", "csv" => "name02", "header" => "名前2"),
61                        3  => array("sql" => "kana01", "csv" => "kana01", "header" => "フリガナ1"),
62                        4  => array("sql" => "kana02", "csv" => "kana02", "header" => "フリガナ2"),
63                        5  => array("sql" => "zip01", "csv" => "zip01", "header" => "郵便番号1"),
64                        6  => array("sql" => "zip02", "csv" => "zip02", "header" => "郵便番号2"),
65                        7  => array("sql" => "pref", "csv" => "pref", "header" => "都道府県"),
66                        8  => array("sql" => "addr01", "csv" => "addr01", "header" => "住所1"),
67                        9  => array("sql" => "addr02", "csv" => "addr02", "header" => "住所2"),
68                        10 => array("sql" => "email", "csv" => "email", "header" => "E-MAIL"),
69                        11 => array("sql" => "tel01", "csv" => "tel01", "header" => "TEL1"),
70                        12 => array("sql" => "tel02", "csv" => "tel02", "header" => "TEL2"),
71                        13 => array("sql" => "tel03", "csv" => "tel03", "header" => "TEL3"),
72                        14 => array("sql" => "fax01", "csv" => "fax01", "header" => "FAX1"),
73                        15 => array("sql" => "fax02", "csv" => "fax02", "header" => "FAX2"),
74                        16 => array("sql" => "fax03", "csv" => "fax03", "header" => "FAX3"),
75                        17 => array("sql" => "CASE WHEN sex = 1 THEN '男性' ELSE '女性' END AS sex", "csv" => "sex", "header" => "性別"),
76                        18 => array("sql" => "job", "csv" => "job", "header" => "職業"),
77                        19 => array("sql" => "cast(birth as date) AS birth", "csv" => "birth", "header" => "誕生日"),
78                        20 => array("sql" => "cast(first_buy_date as date) AS first_buy_date", "csv" => "first_buy_date", "header" => "初回購入日"),
79                        21 => array("sql" => "cast(last_buy_date as date) AS last_buy_date", "csv" => "last_buy_date", "header" => "最終購入日"),
80                        22 => array("sql" => "buy_times", "csv" => "buy_times", "header" => "購入回数"),
81                        23 => array("sql" => "point", "csv" => "point", "header" => "ポイント残高"),
82                        24 => array("sql" => "note", "csv" => "note", "header" => "備考"),
83                        25 => array("sql" => "cast(create_date as date) AS create_date", "csv" => "create_date", "header" => "登録日"),
84                        26 => array("sql" => "cast(update_date as date) AS update_date", "csv" => "update_date", "header" => "更新日")
85                    );
86
87//---- ページ初期設定
88$objQuery = new SC_Query();
89$objPage = new LC_Page();
90$objView = new SC_AdminView();
91$objDate = new SC_Date(1901);
92$objPage->arrYear = $objDate->getYear();    // 日付プルダウン設定
93$objPage->arrMonth = $objDate->getMonth();
94$objPage->arrDay = $objDate->getDay();
95$objPage->objDate = $objDate;
96
97// 認証可否の判定
98$objSess = new SC_Session();
99sfIsSuccess($objSess);
100
101// POST値の引き継ぎ
102$objPage->arrForm = $_POST;
103
104// ページ送り用
105$objPage->arrHidden['search_pageno'] = $_POST['search_pageno'];
106
107// 検索ワードの引き継ぎ
108foreach ($_POST as $key => $val) {
109    switch($key) {
110        case 'sex':
111            $objPage->arrHidden[$key] = sfMergeParamCheckBoxes($val);
112            if(!is_array($val)) {
113                $objPage->arrForm[$key] = split("-", $val);
114            }
115            break;
116        default:
117            $objPage->arrHidden[$key] = $val;
118            break;
119    }
120}
121
122// 顧客削除
123if ($_POST['mode'] == "delete") {
124    $sql = "SELECT status,email FROM dtb_customer WHERE customer_id = ? AND del_flg = 0";
125    $result_customer = $objQuery->conn->getAll($sql, array($_POST["edit_customer_id"]));
126
127    if ($result_customer[0]["status"] == 2) {           //本会員削除
128        $arrDel = array("del_flg" => 1, "update_date" => "NOW()");
129        $objQuery->conn->autoExecute("dtb_customer", $arrDel, "customer_id = " .addslashes($_POST["edit_customer_id"]) );
130    } elseif ($result_customer[0]["status"] == 1) {     //仮会員削除
131        $sql = "DELETE FROM dtb_customer WHERE customer_id = ?";
132        $objQuery->conn->query($sql, array($_POST["edit_customer_id"]));
133    }
134}
135if ($_POST['mode'] == "search" || $_POST['mode'] == "csv"  || $_POST['mode'] == "delete" || $_POST['mode'] == "delete_all") {
136    // 入力文字の強制変換
137    lfConvertParam();
138    // エラーチェック
139    $objPage->arrErr = lfCheckError($objPage->arrForm);
140
141    $where = "del_flg = 0";
142
143    /* 入力エラーなし */
144    if (count($objPage->arrErr) == 0) {
145       
146        //-- 検索データ取得
147        $objSelect = new SC_CustomerList($objPage->arrForm, "customer");
148       
149        // 表示件数設定
150        $page_rows = $objPage->arrForm['page_rows'];
151        if(is_numeric($page_rows)) {   
152            $page_max = $page_rows;
153        } else {
154            $page_max = SEARCH_PMAX;
155        }
156       
157        if ($objPage->arrForm['search_pageno'] == 0){
158            $objPage->arrForm['search_pageno'] = 1;
159        }
160       
161        $offset = $page_max * ($objPage->arrForm['search_pageno'] - 1);
162        $objSelect->setLimitOffset($page_max, $offset);     
163       
164        if ($_POST["mode"] == 'csv') {
165            $searchSql = $objSelect->getListCSV($arrColumnCSV);
166        }else{
167            $searchSql = $objSelect->getList();
168        }
169       
170        $objPage->search_data = $objQuery->conn->getAll($searchSql, $objSelect->arrVal);
171       
172        switch($_POST['mode']) {
173        case 'csv':
174            $i = 0;
175            $header = "";
176           
177            // CSVカラム取得
178            $arrCsvOutput = (sfgetCsvOutput(2, " WHERE csv_id = 2 AND status = 1"));
179
180            if (count($arrCsvOutput) <= 0) break;
181
182            foreach($arrCsvOutput as $data) {
183                $arrColumn[] = $data["col"];
184                if ($i != 0) $header .= ", ";
185                $header .= $data["disp_name"];
186                $i ++;
187            }
188            $header .= "\n";
189
190            //- 都道府県/職業の変換
191            for($i = 0; $i < count($objPage->search_data); $i ++) {
192                $objPage->search_data[$i]["pref"] = $arrPref[ $objPage->search_data[$i]["pref"] ];
193                $objPage->search_data[$i]["job"]  = $arrJob[ $objPage->search_data[$i]["job"] ];
194            }
195
196            //- CSV出力
197            $data = lfGetCSVData($objPage->search_data, $arrColumn);
198           
199            sfCSVDownload($header.$data);
200            exit;
201            break;
202        case 'delete_all':
203            // 検索結果をすべて削除
204            $where = "product_id IN (SELECT product_id FROM vw_products_nonclass AS noncls WHERE $where)";
205            $sqlval['del_flg'] = 1;
206            $objQuery->update("dtb_products", $sqlval, $where, $arrval);
207
208            $sql = "SELECT status,email FROM dtb_customer WHERE customer_id = ? AND del_flg = 0";
209            $result_customer = $objQuery->conn->getAll($sql, array($_POST["del_customer_id"]));
210
211            if ($result_customer[0]["status"] == 2) {           //本会員削除
212                $arrDel = array("del_flg" => 1, "update_date" => "NOW()");
213                $objQuery->conn->autoExecute("dtb_customer", $arrDel, "customer_id = " .addslashes($_POST["del_customer_id"]) );
214            } elseif ($result_customer[0]["status"] == 1) {     //仮会員削除
215                $sql = "DELETE FROM dtb_customer WHERE customer_id = ?";
216                $objQuery->conn->query($sql, array($_POST["del_customer_id"]));
217            }
218           
219            break;
220        default:
221
222            // 行数の取得
223            $linemax = $objQuery->conn->getOne( $objSelect->getListCount(), $objSelect->arrVal);
224            $objPage->tpl_linemax = $linemax;               // 何件が該当しました。表示用
225
226            // ページ送りの取得
227            $objNavi = new SC_PageNavi($_POST['search_pageno'], $linemax, $page_max, "fnCustomerPage", NAVI_PMAX);
228            $startno = $objNavi->start_row;
229            $objPage->arrPagenavi = $objNavi->arrPagenavi;     
230        }
231    }
232}
233
234$objPage->arrCatList = sfGetCategoryList();
235
236//---- ページ表示
237$objView->assignobj($objPage);
238$objView->display(MAIN_FRAME);
239
240
241//--------------------------------------------------------------------------------------------------------------------------------------
242
243//---- 取得文字列の変換
244function lfConvertParam() {
245    global $objPage;
246   
247    /*
248     *  文字列の変換
249     *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
250     *  C :  「全角ひら仮名」を「全角かた仮名」に変換
251     *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
252     *  n :  「全角」数字を「半角(ハンカク)」に変換
253     *  a :  全角英数字を半角英数字に変換する
254     */
255    // カラム名とコンバート情報
256    $arrConvList['customer_id'] = "n" ;
257    $arrConvList['name'] = "aKV" ;
258    $arrConvList['pref'] = "n" ;
259    $arrConvList['kana'] = "CKV" ;
260    $arrConvList['b_start_year'] = "n" ;
261    $arrConvList['b_start_month'] = "n" ;
262    $arrConvList['b_start_day'] = "n" ;
263    $arrConvList['b_end_year'] = "n" ;
264    $arrConvList['b_end_month'] = "n" ;
265    $arrConvList['b_end_day'] = "n" ;
266    $arrConvList['tel'] = "n" ;
267    $arrConvList['birth_month'] = "n" ;
268    $arrConvList['email'] = "a" ;
269    $arrConvList['buy_total_from'] = "n" ;
270    $arrConvList['buy_total_to'] = "n" ;
271    $arrConvList['buy_times_from'] = "n" ;
272    $arrConvList['buy_times_to'] = "n" ;
273    $arrConvList['start_year'] = "n" ;
274    $arrConvList['start_month'] = "n" ;
275    $arrConvList['start_day'] = "n" ;
276    $arrConvList['end_year'] = "n" ;
277    $arrConvList['end_month'] = "n" ;
278    $arrConvList['end_day'] = "n" ;
279    $arrConvList['page_rows'] = "n" ;
280    $arrConvList['buy_start_year'] = "n" ;      // 最終購入日 START 年
281    $arrConvList['buy_start_month'] = "n" ;     // 最終購入日 START 月
282    $arrConvList['buy_start_day'] = "n" ;       // 最終購入日 START 日
283    $arrConvList['buy_end_year'] = "n" ;            // 最終購入日 END 年
284    $arrConvList['buy_end_month'] = "n" ;       // 最終購入日 END 月
285    $arrConvList['buy_end_day'] = "n" ;         // 最終購入日 END 日
286    $arrConvList['buy_product_name'] = "aKV" ;  // 購入商品名
287    $arrConvList['buy_product_code'] = "aKV" ;  // 購入商品コード
288    $arrConvList['category_id'] = "" ;          // カテゴリ
289       
290    // 文字変換
291    foreach ($arrConvList as $key => $val) {
292        // POSTされてきた値のみ変換する。
293        if(isset($objPage->arrForm[$key])) {
294            $objPage->arrForm[$key] = mb_convert_kana($objPage->arrForm[$key] ,$val);
295        }
296    }
297}
298
299
300//---- 入力エラーチェック
301function lfCheckError($array) {
302
303    $objErr = new SC_CheckError($array);
304   
305    $objErr->doFunc(array("顧客コード", "customer_id", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
306    $objErr->doFunc(array("都道府県", "pref", 2), array("NUM_CHECK","MAX_LENGTH_CHECK"));
307    $objErr->doFunc(array("顧客名", "name", STEXT_LEN), array("MAX_LENGTH_CHECK"));
308    $objErr->doFunc(array("顧客名(カナ)", "kana", STEXT_LEN), array("SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANABLANK_CHECK"));
309    $objErr->doFunc(array("誕生日(開始日)", "b_start_year", "b_start_month", "b_start_day"), array("CHECK_DATE"));
310    $objErr->doFunc(array("誕生日(終了日)", "b_end_year", "b_end_month", "b_end_day"), array("CHECK_DATE"));
311    $objErr->doFunc(array("誕生日(開始日)","誕生日(終了日)", "b_start_year", "b_start_month", "b_start_day", "b_end_year", "b_end_month", "b_end_day"), array("CHECK_SET_TERM"));
312    $objErr->doFunc(array("誕生月", "birth_month", 2), array("NUM_CHECK","MAX_LENGTH_CHECK"));
313    $objErr->doFunc(array('メールアドレス', "email", STEXT_LEN) ,array("EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
314    $objErr->doFunc(array('携帯メールアドレス', "email_mobile", STEXT_LEN) ,array("EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK")); 
315    $objErr->doFunc(array("電話番号", "tel", TEL_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
316    $objErr->doFunc(array("購入金額(開始)", "buy_total_from", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
317    $objErr->doFunc(array("購入金額(終了)", "buy_total_to", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
318    if ( (is_numeric($array["buy_total_from"]) && is_numeric($array["buy_total_to"]) ) && ($array["buy_total_from"] > $array["buy_total_to"]) ) $objErr->arrErr["buy_total_from"] .= "※ 購入金額の指定範囲が不正です。";
319    $objErr->doFunc(array("購入回数(開始)", "buy_times_from", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
320    $objErr->doFunc(array("購入回数(終了)", "buy_times_to", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
321    if ( (is_numeric($array["buy_times_from"]) && is_numeric($array["buy_times_to"]) ) && ($array["buy_times_from"] > $array["buy_times_to"]) ) $objErr->arrErr["buy_times_from"] .= "※ 購入回数の指定範囲が不正です。";
322    $objErr->doFunc(array("登録・更新日(開始日)", "start_year", "start_month", "start_day",), array("CHECK_DATE"));
323    $objErr->doFunc(array("登録・更新日(終了日)", "end_year", "end_month", "end_day"), array("CHECK_DATE"));
324    $objErr->doFunc(array("登録・更新日(開始日)","登録・更新日(終了日)", "start_year", "start_month", "start_day", "end_year", "end_month", "end_day"), array("CHECK_SET_TERM"));
325    $objErr->doFunc(array("表示件数", "page_rows", 3), array("NUM_CHECK","MAX_LENGTH_CHECK")); 
326    $objErr->doFunc(array("最終購入日(開始日)", "buy_start_year", "buy_start_month", "buy_start_day",), array("CHECK_DATE"));   //最終購入日(開始日)
327    $objErr->doFunc(array("最終購入(終了日)", "buy_end_year", "buy_end_month", "buy_end_day"), array("CHECK_DATE"));           //最終購入日(終了日)
328    //購入金額(from) > 購入金額(to) の場合はエラーとする
329    $objErr->doFunc(array("最終購入日(開始日)","登録・更新日(終了日)", "buy_start_year", "buy_start_month", "buy_start_day", "buy_end_year", "buy_end_month", "buy_end_day"), array("CHECK_SET_TERM")); 
330    $objErr->doFunc(array("購入商品コード", "buy_product_code", STEXT_LEN), array("MAX_LENGTH_CHECK"));                        //購入商品コード
331    $objErr->doFunc(array("購入商品名", "buy_product_name", STEXT_LEN), array("MAX_LENGTH_CHECK"));                          //購入商品名称
332
333    return $objErr->arrErr;
334}
335
336function lfSetWhere($arrForm){
337    foreach ($arrForm as $key => $val) {
338       
339        $val = sfManualEscape($val);
340       
341        if($val == "") continue;
342       
343        switch ($key) {
344            case 'product_id':
345                $where .= " AND product_id = ?";
346                $arrval[] = $val;
347                break;
348            case 'product_class_id':
349                $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_class_id = ?)";
350                $arrval[] = $val;
351                break;
352            case 'name':
353                $where .= " AND name ILIKE ?";
354                $arrval[] = "%$val%";
355                break;
356            case 'category_id':
357                list($tmp_where, $tmp_arrval) = sfGetCatWhere($val);
358                if($tmp_where != "") {
359                    $where.= " AND $tmp_where";
360                    $arrval = array_merge($arrval, $tmp_arrval);
361                }
362                break;
363            case 'product_code':
364                $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)";
365                $arrval[] = "%$val%";
366                break;
367            case 'startyear':
368                $date = sfGetTimestamp($_POST['startyear'], $_POST['startmonth'], $_POST['startday']);
369                $where.= " AND update_date >= ?";
370                $arrval[] = $date;
371                break;
372            case 'endyear':
373                $date = sfGetTimestamp($_POST['endyear'], $_POST['endmonth'], $_POST['endday']);
374                $where.= " AND update_date <= ?";
375                $arrval[] = $date;
376                break;
377            case 'product_flag':
378                global $arrSTATUS;
379                $product_flag = sfSearchCheckBoxes($val);
380                if($product_flag != "") {
381                    $where.= " AND product_flag LIKE ?";
382                    $arrval[] = $product_flag;                 
383                }
384                break;
385            case 'status':
386                $tmp_where = "";
387                foreach ($val as $element){
388                    if ($element != ""){
389                        if ($tmp_where == ""){
390                            $tmp_where.="AND (status LIKE ? ";
391                        }else{
392                            $tmp_where.="OR status LIKE ? ";
393                        }
394                        $arrval[]=$element;
395                    }
396                }
397                if ($tmp_where != ""){
398                    $tmp_where.=")";
399                    $where.= "$tmp_where";
400                }   
401                break;
402            default:
403                break;
404        }
405    }
406}
407
408//---- CSV出力用データ取得
409function lfGetCSVData( $array, $arrayIndex){   
410   
411    for ($i=0; $i<count($array); $i++){
412       
413        for ($j=0; $j<count($array[$i]); $j++ ){
414            if ( $j > 0 ) $return .= ",";
415            $return .= "\"";           
416            if ( $arrayIndex ){
417                $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$arrayIndex[$j]] )) ."\"";   
418            } else {
419                $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$j] )) ."\"";
420            }
421        }
422        $return .= "\n";           
423    }
424   
425    return $return;
426}
427
428
429?>
Note: See TracBrowser for help on using the repository browser.