- Timestamp:
- 2007/09/03 20:16:26 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/feature-module-update/html/admin/customer/index.php
r15532 r15568 5 5 * http://www.lockon.co.jp/ 6 6 */ 7 require_once("../require.php");8 require_once(DATA_PATH . "include/csv_output.inc");9 7 10 //---- ページ表示用クラス 11 class 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; 8 // {{{ requires 9 require_once("../../require.php"); 10 require_once(CLASS_PATH . "page_extends/admin/customer/LC_Page_Admin_Customer_Ex.php"); 29 11 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 } 12 // }}} 13 // {{{ generate page 55 14 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(); 99 sfIsSuccess($objSess); 100 101 // POST値の引き継ぎ 102 $objPage->arrForm = $_POST; 103 104 // ページ送り用 105 $objPage->arrHidden['search_pageno'] = $_POST['search_pageno']; 106 107 // 検索ワードの引き継ぎ 108 foreach ($_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 // 顧客削除 123 if ($_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 } 135 if ($_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 //---- 取得文字列の変換 244 function 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 //---- 入力エラーチェック 301 function 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 336 function 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出力用データ取得 409 function 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 15 $objPage = new LC_Page_Admin_Customer_Ex(); 16 $objPage->init(); 17 $objPage->process(); 18 register_shutdown_function(array($objPage, "destroy")); 429 19 ?>
Note: See TracChangeset
for help on using the changeset viewer.