[Svn-src-all:1271] [version-2_5-dev 20160] #965 (リファクタリング [管理画面]顧客管理) LC_Page_Admin_Customer.php 修正
AMUAMU
admin @ mail.ec-cube.net
2011年 2月 14日 (月) 01:31:45 JST
Subversion committed to /home/svn/open 20160
http://svn.ec-cube.net/open_trac/changeset/20160
┌────────────────────────────┐
│更新者 : AMUAMU │
│更新日時: 2011-02-14 01:31:44 +0900 (月, 14 2月 2011)│
└────────────────────────────┘
Log:
--------------------------------------------------------
#965 (リファクタリング [管理画面]顧客管理) LC_Page_Admin_Customer.php 修正
#850 (顧客CSV 列追加時にロジックの変更を不要に) の対応
#657 (CSVダウンロードの改善) に関するリファクタリング
#812 (管理画面でトランザクションIDを使用する)に対応
SC_Helper_mail::sfSendRegistMail() の追加(登録/仮登録メール送信)
SC_Helper_Customer::sfGetCustomerDataFromId() の追加(ただし他のリファクタリングと被ったので後日再リファクタリング必要)
Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
U branches/version-2_5-dev/data/Smarty/templates/admin/customer/index.tpl
U branches/version-2_5-dev/data/class/SC_FormParam.php
U branches/version-2_5-dev/data/class/helper/SC_Helper_Customer.php
U branches/version-2_5-dev/data/class/helper/SC_Helper_Mail.php
U branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer.php
U branches/version-2_5-dev/html/install/sql/create_table_mysql.sql
U branches/version-2_5-dev/html/install/sql/create_table_pgsql.sql
U branches/version-2_5-dev/html/install/sql/insert_data.sql
変更: branches/version-2_5-dev/data/Smarty/templates/admin/customer/index.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/customer/index.tpl 2011-02-12 10:44:52 UTC (rev 20159)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/customer/index.tpl 2011-02-13 16:31:44 UTC (rev 20160)
@@ -74,6 +74,7 @@
<div id="customer" class="contents-main">
<form name="search_form" id="search_form" method="post" action="?">
<input type="hidden" name="mode" value="search" />
+<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<h2>検索条件設定</h2>
<!--検索条件設定テーブルここから-->
@@ -282,20 +283,18 @@
<input type="hidden" name="del_customer_id" value="" />
<input type="hidden" name="search_pageno" value="<!--{$smarty.post.search_pageno|h}-->" />
<input type="hidden" name="csv_mode" value="" />
+<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<h2>検索結果一覧</h2>
<div class="btn">
<span class="attention"><!--検索結果数--><!--{$tpl_linemax}-->件</span> が該当しました。
<!--検索結果-->
- <!--{if $smarty.const.ADMIN_MODE == '1'}-->
- <a class="btn-normal" href="javascript:;" onclick="fnModeSubmit('delete_all','',''); return false;">検索結果をすべて削除</a>
- <!--{/if}-->
<a class="btn-normal" href="javascript:;" onclick="fnModeSubmit('csv','',''); return false;">CSV ダウンロード</a>
<a class="btn-normal" href="javascript:;" onclick="location.href='../contents/csv.php?tpl_subno_csv=customer'">CSV 出力項目設定</a>
</div>
<!--{include file=$tpl_pager}-->
- <!--{if count($search_data) > 0}-->
+ <!--{if count($arrData) > 0}-->
<!--検索結果表示テーブル-->
<table class="list" id="customer-search-result">
@@ -319,7 +318,7 @@
<th>都道府県</th>
<th>メールアドレス</th>
</tr>
- <!--{foreach from=$search_data item=row}-->
+ <!--{foreach from=$arrData item=row}-->
<tr>
<td class="center" rowspan="2"><!--{if $row.status eq 1}-->仮<!--{else}-->本<!--{/if}--></td>
<td><!--{$row.customer_id|h}--></td>
変更: branches/version-2_5-dev/data/class/SC_FormParam.php
===================================================================
--- branches/version-2_5-dev/data/class/SC_FormParam.php 2011-02-12 10:44:52 UTC (rev 20159)
+++ branches/version-2_5-dev/data/class/SC_FormParam.php 2011-02-13 16:31:44 UTC (rev 20160)
@@ -203,6 +203,7 @@
case 'MAX_LENGTH_CHECK':
case 'MIN_LENGTH_CHECK':
case 'NUM_COUNT_CHECK':
+ case 'KANABLANK_CHECK':
$this->recursionCheck($this->disp_name[$cnt], $func,
$this->param[$cnt], $objErr->arrErr,
$val, $this->length[$cnt]);
変更: branches/version-2_5-dev/data/class/helper/SC_Helper_Customer.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_Customer.php 2011-02-12 10:44:52 UTC (rev 20159)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_Customer.php 2011-02-13 16:31:44 UTC (rev 20160)
@@ -249,6 +249,32 @@
}
/**
+ * 顧客ID指定またはwhere条件指定での顧客情報取得(単一行データ)
+ *
+ * TODO: sfGetCustomerDataと統合したい
+ *
+ * @param integer $customer_id 顧客ID (指定無しでも構わないが、Where条件を入れる事)
+ * @param string $add_where 追加WHERE条件
+ * @param array $arrAddVal 追加WHEREパラメーター
+ * @access public
+ * @return array 対象顧客データ
+ */
+ function sfGetCustomerDataFromId($customer_id, $add_where = '', $arrAddVal = array()) {
+ $objQuery =& SC_Query::getSingletonInstance();
+ if($where == '') {
+ $where = 'customer_id = ?';
+ $arrData = $objQuery->getRow("*", "dtb_customer", $where, array($customer_id));
+ }else{
+ if(SC_Utils_Ex::sfIsInt($customer_id)) {
+ $where .= ' AND customer_id = ?';
+ $arrAddVal[] = $customer_id;
+ }
+ $arrData = $objQuery->getRow("*", "dtb_customer", $where, $arrAddVal);
+ }
+ return $arrData;
+ }
+
+ /**
* sfGetUniqSecretKey
*
* 重複しない会員登録キーを発行する。
@@ -460,5 +486,4 @@
return $objErr;
}
-
}
変更: branches/version-2_5-dev/data/class/helper/SC_Helper_Mail.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_Mail.php 2011-02-12 10:44:52 UTC (rev 20159)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_Mail.php 2011-02-13 16:31:44 UTC (rev 20160)
@@ -264,5 +264,68 @@
}
return false;
}
+
+ /**
+ * 登録メールを送信する。
+ *
+ * @param string $secret_key 顧客固有キー
+ * @param integer $customer_id 顧客ID
+ * @param boolean $is_mobile false(default):PCアドレスにメールを送る true:携帯アドレスにメールを送る
+ * @return boolean true:成功 false:失敗
+ */
+ function sfSendRegistMail($secret_key, $customer_id = '', $is_mobile = false) {
+ // 顧客データの取得
+ if(SC_Utils_Ex::sfIsInt($customer_id)) {
+ $arrCustomerData = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id);
+ }else{
+ $arrCustomerData = SC_Helper_Customer_Ex::sfGetCustomerDataFromId('', "secret_key = ?", array($secret_key));
+ }
+ if(SC_Utils_Ex::isBlank($arrCustomerData)) {
+ return false;
+ }
+
+ $CONF = SC_Helper_DB_Ex::sfGetBasisData();
+
+ $objMailText = new SC_SiteView();
+ $objMailText->assign("CONF", $CONF);
+ $objMailText->assign("name", $arrCustomerData['name01'] . $arrCustomerData['name02']);
+ $objMailText->assign("uniqid", $arrCustomerData['secret_key']);
+ $objMailText->assignobj($arrCustomerData);
+ $objMailText->assignobj($this);
+
+ $objHelperMail = new SC_Helper_Mail_Ex();
+
+ // 仮会員が有効の場合
+ if(CUSTOMER_CONFIRM_MAIL == true and $arrCustomerData['status'] == 1) {
+ $subject = $objHelperMail->sfMakeSubject('会員登録のご確認');
+ $toCustomerMail = $objMailText->fetch("mail_templates/customer_mail.tpl");
+ } else {
+ $subject = $objHelperMail->sfMakeSubject('会員登録のご完了');
+ $toCustomerMail = $objMailText->fetch("mail_templates/customer_regist_mail.tpl");
+ }
+
+ $objMail = new SC_SendMail();
+ $objMail->setItem(
+ '' // 宛先
+ , $subject // サブジェクト
+ , $toCustomerMail // 本文
+ , $CONF["email03"] // 配送元アドレス
+ , $CONF["shop_name"] // 配送元 名前
+ , $CONF["email03"] // reply_to
+ , $CONF["email04"] // return_path
+ , $CONF["email04"] // Errors_to
+ , $CONF["email01"] // Bcc
+ );
+ // 宛先の設定
+ if($is_mobile) {
+ $to_addr = $arrCustomerData["email_mobile"];
+ }else{
+ $to_addr = $arrCustomerData["email"];
+ }
+ $objMail->setTo($to_addr, $arrCustomerData["name01"] . $arrCustomerData["name02"] ." 様");
+
+ $objMail->sendMail();
+ return true;
+ }
}
?>
変更: branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer.php 2011-02-12 10:44:52 UTC (rev 20159)
+++ branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer.php 2011-02-13 16:31:44 UTC (rev 20160)
@@ -52,157 +52,23 @@
$masterData = new SC_DB_MasterData_Ex();
$this->arrPref = $masterData->getMasterData('mtb_pref');
-
$this->arrJob = $masterData->getMasterData("mtb_job");
$this->arrJob["不明"] = "不明";
$this->arrSex = $masterData->getMasterData("mtb_sex");
$this->arrPageRows = $masterData->getMasterData("mtb_page_rows");
- $this->arrMAILMAGATYPE = $masterData->getMasterData("mtb_mail_magazine_type");
- $this->arrHtmlmail[''] = "すべて";
- $this->arrHtmlmail[1] = $this->arrMAILMAGATYPE[1];
- $this->arrHtmlmail[2] = $this->arrMAILMAGATYPE[2];
+ $this->arrStatus = $masterData->getMasterData("mtb_customer_status");
- $this->arrStatus[1] = "仮会員";
- $this->arrStatus[2] = "本会員";
+ // 日付プルダウン設定
+ $objDate = new SC_Date(BIRTH_YEAR);
+ $this->arrYear = $objDate->getYear();
+ $this->arrMonth = $objDate->getMonth();
+ $this->arrDay = $objDate->getDay();
+ $this->objDate = $objDate;
- //---- CSVダウンロード用
- $this->arrColumnCSV = array(
- array(
- "sql" => "customer_id",
- "csv" => "customer_id",
- "header" => "顧客ID"
- ),
- array(
- "sql" => "name01",
- "csv" => "name01",
- "header" => "名前1"
- ),
- array(
- "sql" => "name02",
- "csv" => "name02",
- "header" => "名前2"
- ),
- array(
- "sql" => "kana01",
- "csv" => "kana01",
- "header" => "お名前(フリガナ・姓)"
- ),
- array(
- "sql" => "kana02",
- "csv" => "kana02",
- "header" => "お名前(フリガナ・名)"
- ),
- array(
- "sql" => "zip01",
- "csv" => "zip01",
- "header" => "郵便番号1"
- ),
- array(
- "sql" => "zip02",
- "csv" => "zip02",
- "header" => "郵便番号2"
- ),
- array(
- "sql" => "pref",
- "csv" => "pref",
- "header" => "都道府県"
- ),
- array(
- "sql" => "addr01",
- "csv" => "addr01",
- "header" => "住所1"
- ),
- array(
- "sql" => "addr02",
- "csv" => "addr02",
- "header" => "住所2"
- ),
- array(
- "sql" => "email",
- "csv" => "email",
- "header" => "E-MAIL"
- ),
- array(
- "sql" => "tel01",
- "csv" => "tel01",
- "header" => "TEL1"
- ),
- array(
- "sql" => "tel02",
- "csv" => "tel02",
- "header" => "TEL2"
- ),
- array(
- "sql" => "tel03",
- "csv" => "tel03",
- "header" => "TEL3"
- ),
- array(
- "sql" => "fax01",
- "csv" => "fax01",
- "header" => "FAX1"
- ),
- array(
- "sql" => "fax02",
- "csv" => "fax02",
- "header" => "FAX2"
- ),
- array(
- "sql" => "fax03",
- "csv" => "fax03",
- "header" => "FAX3"
- ),
- array(
- "sql" => "CASE WHEN sex = 1 THEN '男性' ELSE '女性' END AS sex",
- "csv" => "sex",
- "header" => "性別"
- ),
- array(
- "sql" => "job",
- "csv" => "job",
- "header" => "職業"
- ),
- array(
- "sql" => "cast(birth as date) AS birth",
- "csv" => "birth",
- "header" => "誕生日"
- ),
- array(
- "sql" => "cast(first_buy_date as date) AS first_buy_date",
- "csv" => "first_buy_date",
- "header" => "初回購入日"
- ),
- array(
- "sql" => "cast(last_buy_date as date) AS last_buy_date",
- "csv" => "last_buy_date",
- "header" => "最終購入日"
- ),
- array(
- "sql" => "buy_times",
- "csv" => "buy_times",
- "header" => "購入回数"
- ),
- array(
- "sql" => "point",
- "csv" => "point",
- "header" => "ポイント残高"
- ),
- array(
- "sql" => "note",
- "csv" => "note",
- "header" => "備考"
- ),
- array(
- "sql" => "cast(create_date as date) AS create_date",
- "csv" => "create_date",
- "header" => "登録日"
- ),
- array(
- "sql" => "cast(update_date as date) AS update_date",
- "csv" => "update_date",
- "header" => "更新日"
- ),
- );
+ // カテゴリ一覧設定
+ $objDb = new SC_Helper_DB_Ex();
+ $this->arrCatList = $objDb->sfGetCategoryList();
+
$this->httpCacheControl('nocache');
}
@@ -222,223 +88,58 @@
* @return void
*/
function action() {
- //---- ページ初期設定
- $objQuery = new SC_Query();
- $objView = new SC_AdminView();
- $objDate = new SC_Date(1901);
- $objDb = new SC_Helper_DB_Ex();
- $this->arrYear = $objDate->getYear(); // 日付プルダウン設定
- $this->arrMonth = $objDate->getMonth();
- $this->arrDay = $objDate->getDay();
- $this->objDate = $objDate;
-
// 認証可否の判定
- $objSess = new SC_Session();
- SC_Utils_Ex::sfIsSuccess($objSess);
+ SC_Utils_Ex::sfIsSuccess(new SC_Session());
- // POST値の引き継ぎ
- $this->arrForm = $_POST;
+ // 不正アクセスチェック
+ if ($_SERVER["REQUEST_METHOD"] == "POST") {
+ if (!SC_Helper_Session_Ex::isValidToken()) {
+ SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
+ }
+ }
- // ページ送り用
- $this->arrHidden['search_pageno'] =
- isset($_POST['search_pageno']) ? $_POST['search_pageno'] : "";
-
+ // パラメータ管理クラス
+ $objFormParam = new SC_FormParam();
+ // パラメータ設定
+ $this->lfInitParam($objFormParam);
+ $objFormParam->setParam($_POST);
+ $objFormParam->convParam();
+ // パラメーター読み込み
+ $this->arrForm = $this->lfGetFormParam($objFormParam);
// 検索ワードの引き継ぎ
- foreach ($_POST as $key => $val) {
- switch($key) {
- case 'sex':
- case '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 = $this->lfGetSearchWords($objFormParam);
+ // 入力パラメーターチェック
+ $this->arrErr = $this->lfCheckError($objFormParam);
+ if(!SC_Utils_Ex::isBlank($this->arrErr)) {
+ return;
}
- //TODO: 要リファクタリング(MODE switch 2か所で行われている)
+
+ // モードによる処理切り替え
switch ($this->getMode()) {
case 'delete':
- // 顧客削除
- $sql = "SELECT status,email FROM dtb_customer WHERE customer_id = ? AND del_flg = 0";
- $result_customer = $objQuery->getAll($sql, array($_POST["edit_customer_id"]));
-
- if ($result_customer[0]["status"] == 2) { //本会員削除
- $objQuery->update("dtb_customer", array('del_flg' => 1, "update_date" => "now"), "customer_id = ?", array($_POST["edit_customer_id"]));
- } elseif ($result_customer[0]["status"] == 1) { //仮会員削除
- $sql = "DELETE FROM dtb_customer WHERE customer_id = ?";
- $objQuery->query($sql, array($_POST["edit_customer_id"]));
- }
+ $this->is_delete = $this->lfDoDeleteCustomer($objFormParam->getValue('edit_customer_id'));
+ list($this->tpl_linemax, $this->arrData, $this->objNavi) = $this->lfDoSearch($this->arrForm);
+ $this->arrPagenavi = $this->objNavi->arrPagenavi;
break;
case 'resend_mail':
- // 登録メール再送
- $arrRet = $objQuery->select("name01, name02, secret_key, email, email_mobile", "dtb_customer","customer_id = ? AND del_flg <> 1 AND status = 1", array($_POST["edit_customer_id"]));
- if( is_array($arrRet) === true && count($arrRet) > 0 ){
-
- $this->name01 = $arrRet[0]['name01'];
- $this->name02 = $arrRet[0]['name02'];
- $this->uniqid = $arrRet[0]['secret_key'];
-
- $CONF = $objDb->sfGetBasisData();
- $this->CONF = $CONF;
- /**
- * 携帯メールアドレスが登録されていれば携帯サイトから仮会員登録したものと判定する。
- * TODO: とりあえずの簡易的な判定なので、将来的には判定ルーチンを修正した方が良い。
- */
- if (!empty($arrRet[0]['email_mobile'])) {
- $objMailText = new SC_MobileView(false);
- $this->to_name01 = $arrRet[0]['name01'];
- $this->to_name02 = $arrRet[0]['name02'];
- } else {
- $objMailText = new SC_SiteView(false);
- }
- $objMailText->assignobj($this);
- $mailHelper = new SC_Helper_Mail_Ex();
-
- $subject = $mailHelper->sfMakesubject('会員登録のご確認');
- $toCustomerMail = $objMailText->fetch("mail_templates/customer_mail.tpl");
-
- $objMail = new SC_SendMail();
- $objMail->setItem(
- '' // 宛先
- , $subject // サブジェクト
- , $toCustomerMail // 本文
- , $CONF["email03"] // 配送元アドレス
- , $CONF["shop_name"]// 配送元 名前
- , $CONF["email03"] // reply_to
- , $CONF["email04"] // return_path
- , $CONF["email04"] // Errors_to
- );
- // 宛先の設定
- $name = $this->name01 . $this->name02 ." 様";
- $objMail->setTo($arrRet[0]["email"], $name);
- $objMail->sendMail();
- }
+ $this->is_resendmail = $this->lfDoResendMail($objFormParam->getValue('edit_customer_id'));
+ list($this->tpl_linemax, $this->arrData, $this->objNavi) = $this->lfDoSearch($this->arrForm);
+ $this->arrPagenavi = $this->objNavi->arrPagenavi;
break;
- default:
- break;
- }
-
- //TODO: 要リファクタリング(MODE switch 2か所で行われている)
- switch ($this->getMode()) {
case 'search':
+ list($this->tpl_linemax, $this->arrData, $this->objNavi) = $this->lfDoSearch($this->arrForm);
+ $this->arrPagenavi = $this->objNavi->arrPagenavi;
+ break;
case 'csv':
- case 'delete':
- case 'delete_all':
- case 'resend_mail':
- // 入力文字の強制変換
- $this->lfConvertParam();
- // エラーチェック
- $this->arrErr = $this->lfCheckError($this->arrForm);
-
- $where = "del_flg = 0";
-
- /* 入力エラーなし */
- if (count($this->arrErr) == 0) {
-
- //-- 検索データ取得
- $objSelect = new SC_CustomerList($this->arrForm, "customer");
-
- // 表示件数設定
- $page_rows = $this->arrForm['page_rows'];
- if(is_numeric($page_rows)) {
- $page_max = $page_rows;
- } else {
- $page_max = SEARCH_PMAX;
- }
-
- if (!isset($this->arrForm['search_pageno'])) $this->arrForm['search_pageno'] = "";
-
- if ($this->arrForm['search_pageno'] == 0){
- $this->arrForm['search_pageno'] = 1;
- }
-
- $offset = $page_max * ($this->arrForm['search_pageno'] - 1);
- $objSelect->setLimitOffset($page_max, $offset);
- //TODO 要リファクタリング(MODE if利用)
- if ($this->getMode() == 'csv') {
- $searchSql = $objSelect->getListCSV($this->arrColumnCSV);
- }else{
- $searchSql = $objSelect->getList();
- }
-
- $this->search_data = $objQuery->getAll($searchSql, $objSelect->arrVal);
- //TODO: 要リファクタリング(MODE switch 入れ子)
- switch($this->getMode()) {
- case 'csv':
- require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php");
-
- $objCSV = new SC_Helper_CSV_Ex();
- $i = 0;
- $header = "";
-
- // CSVカラム取得
- $arrCsvOutput = ($objCSV->sfGetCsvOutput(2, 'status = 1'));
-
- if (count($arrCsvOutput) <= 0) break;
-
- foreach($arrCsvOutput as $data) {
- $arrColumn[] = $data["col"];
- if ($i != 0) $header .= ", ";
- $header .= $data["disp_name"];
- $i ++;
- }
- $header .= "\n";
-
- //- 都道府県/職業の変換
- for($i = 0; $i < count($this->search_data); $i ++) {
- $this->search_data[$i]["pref"] = $this->arrPref[ $this->search_data[$i]["pref"] ];
- $this->search_data[$i]["job"] = $this->arrJob[ $this->search_data[$i]["job"] ];
- }
-
- //- CSV出力
- $data = SC_Utils_Ex::getCSVData($this->search_data, $arrColumn);
-
-
- // CSVを送信する。
- list($fime_name, $data) = SC_Utils_Ex::sfGetCSVData($head.$data);
- $this->sendResponseCSV($fime_name, $data);
- exit;
- break;
- case 'delete_all':
- // 検索結果をすべて削除
- $where = "product_id IN (SELECT product_id FROM SC_Product::alldtlSQL() WHERE $where)";
- $sqlval['del_flg'] = 1;
- $objQuery->update("dtb_products", $sqlval, $where, $arrval);
-
- $sql = "SELECT status,email FROM dtb_customer WHERE customer_id = ? AND del_flg = 0";
- $result_customer = $objQuery->getAll($sql, array($_POST["del_customer_id"]));
-
- if ($result_customer[0]["status"] == 2) { //本会員削除
- $objQuery->update("dtb_customer", array('del_flg' => 1, "update_date" => "now"), "customer_id = ?", array($_POST["edit_customer_id"]));
- } elseif ($result_customer[0]["status"] == 1) { //仮会員削除
- $sql = "DELETE FROM dtb_customer WHERE customer_id = ?";
- $objQuery->query($sql, array($_POST["del_customer_id"]));
- }
-
- break;
- default:
-
- // 行数の取得
- $linemax = $objQuery->getOne( $objSelect->getListCount(), $objSelect->arrVal);
- $this->tpl_linemax = $linemax; // 何件が該当しました。表示用
-
- // ページ送りの取得
- $objNavi = new SC_PageNavi($this->arrHidden['search_pageno'],
- $linemax, $page_max,
- "fnCustomerPage", NAVI_PMAX);
- $startno = $objNavi->start_row;
- $this->arrPagenavi = $objNavi->arrPagenavi;
- }
- }
+ $this->lfDoCSV($this->arrForm);
+ exit;
break;
default:
break;
}
- $this->arrCatList = $objDb->sfGetCategoryList();
+ // トランザクションID
+ $this->transactionid = SC_Helper_Session_Ex::getToken();
}
/**
@@ -450,94 +151,217 @@
parent::destroy();
}
- //---- 取得文字列の変換
- function lfConvertParam() {
- /*
- * 文字列の変換
- * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換
- * C : 「全角ひら仮名」を「全角かた仮名」に変換
- * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します
- * n : 「全角」数字を「半角(ハンカク)」に変換
- * a : 全角英数字を半角英数字に変換する
- */
- // カラム名とコンバート情報
- $arrConvList['customer_id'] = "n" ;
- $arrConvList['name'] = "aKV" ;
- $arrConvList['pref'] = "n" ;
- $arrConvList['kana'] = "CKV" ;
- $arrConvList['b_start_year'] = "n" ;
- $arrConvList['b_start_month'] = "n" ;
- $arrConvList['b_start_day'] = "n" ;
- $arrConvList['b_end_year'] = "n" ;
- $arrConvList['b_end_month'] = "n" ;
- $arrConvList['b_end_day'] = "n" ;
- $arrConvList['tel'] = "n" ;
- $arrConvList['birth_month'] = "n" ;
- $arrConvList['email'] = "a" ;
- $arrConvList['buy_total_from'] = "n" ;
- $arrConvList['buy_total_to'] = "n" ;
- $arrConvList['buy_times_from'] = "n" ;
- $arrConvList['buy_times_to'] = "n" ;
- $arrConvList['start_year'] = "n" ;
- $arrConvList['start_month'] = "n" ;
- $arrConvList['start_day'] = "n" ;
- $arrConvList['end_year'] = "n" ;
- $arrConvList['end_month'] = "n" ;
- $arrConvList['end_day'] = "n" ;
- $arrConvList['page_rows'] = "n" ;
- $arrConvList['buy_start_year'] = "n" ; // 最終購入日 START 年
- $arrConvList['buy_start_month'] = "n" ; // 最終購入日 START 月
- $arrConvList['buy_start_day'] = "n" ; // 最終購入日 START 日
- $arrConvList['buy_end_year'] = "n" ; // 最終購入日 END 年
- $arrConvList['buy_end_month'] = "n" ; // 最終購入日 END 月
- $arrConvList['buy_end_day'] = "n" ; // 最終購入日 END 日
- $arrConvList['buy_product_name'] = "aKV" ; // 購入商品名
- $arrConvList['buy_product_code'] = "aKV" ; // 購入商品コード
- $arrConvList['category_id'] = "" ; // カテゴリ
+ /**
+ * パラメーター情報の初期化
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return void
+ */
+ function lfInitParam(&$objFormParam) {
+ $objFormParam->addParam('顧客コード', 'customer_id', ID_MAX_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('顧客名', 'name', STEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('顧客名(カナ)', 'kana', STEXT_LEN, 'CKV', array("SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANABLANK_CHECK"));
+ $objFormParam->addParam('都道府県', 'pref', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('誕生日(開始年)', 'b_start_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('誕生日(開始月)', 'b_start_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('誕生日(開始日)', 'b_start_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
- // 文字変換
- foreach ($arrConvList as $key => $val) {
- // POSTされてきた値のみ変換する。
- if(isset($this->arrForm[$key])) {
- $this->arrForm[$key] = mb_convert_kana($this->arrForm[$key] ,$val);
- }
- }
+ $objFormParam->addParam('誕生日(終了年)', 'b_end_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('誕生日(終了月)', 'b_end_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('誕生日(終了日)', 'b_end_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('誕生月', 'birth_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('メールアドレス', 'email', MTEXT_LEN, 'a', array("SPTAB_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('携帯メールアドレス', 'email_mobile', MTEXT_LEN, 'a', array("SPTAB_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('電話番号', 'birth_month', TEL_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('購入金額(開始)', 'buy_total_from', PRICE_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('購入金額(終了)', 'buy_total_to', PRICE_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('購入回数(開始)', 'buy_times_from', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('購入回数(終了)', 'buy_times_to', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('登録・更新日(開始年)', 'start_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('登録・更新日(開始月)', 'start_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('登録・更新日(開始日)', 'start_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('登録・更新日(終了年)', 'end_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('登録・更新日(終了月)', 'end_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('登録・更新日(終了日)', 'end_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('表示件数', 'page_rows', 3, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('最終購入日(開始年)', 'buy_start_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('最終購入日(開始月)', 'buy_start_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('最終購入日(開始日)', 'buy_start_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('最終購入日(終了年)', 'buy_end_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('最終購入日(終了月)', 'buy_end_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('最終購入日(終了日)', 'buy_end_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('購入商品コード', 'buy_product_code', STEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('購入商品名', 'buy_product_name', STEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('カテゴリ', 'category_id', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('編集対象顧客ID', 'edit_customer_id', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('性別', 'sex');
+ $objFormParam->addParam('会員状態', 'status');
+ $objFormParam->addParam('職業', 'job');
}
- //---- 入力エラーチェック
- function lfCheckError($array) {
-
- $objErr = new SC_CheckError($array);
-
- $objErr->doFunc(array("顧客コード", "customer_id", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("都道府県", "pref", 2), array("NUM_CHECK","MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("顧客名", "name", STEXT_LEN), array("MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("顧客名(カナ)", "kana", STEXT_LEN), array("SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANABLANK_CHECK"));
+ /**
+ * エラーチェック
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return array エラー配列
+ */
+ function lfCheckError(&$objFormParam) {
+ // パラメーターの基本チェック
+ $arrErr = $objFormParam->checkError();
+ // 拡張エラーチェック初期化
+ $objErr = new SC_CheckError($objFormParam->getHashArray());
+ // 拡張エラーチェック
$objErr->doFunc(array("誕生日(開始日)", "b_start_year", "b_start_month", "b_start_day"), array("CHECK_DATE"));
$objErr->doFunc(array("誕生日(終了日)", "b_end_year", "b_end_month", "b_end_day"), array("CHECK_DATE"));
+
$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"));
- $objErr->doFunc(array("誕生月", "birth_month", 2), array("NUM_CHECK","MAX_LENGTH_CHECK"));
- $objErr->doFunc(array('メールアドレス', "email", STEXT_LEN) ,array("EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
- $objErr->doFunc(array('携帯メールアドレス', "email_mobile", STEXT_LEN) ,array("EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("電話番号", "tel", TEL_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("購入金額(開始)", "buy_total_from", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("購入金額(終了)", "buy_total_to", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
- 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"] .= "※ 購入金額の指定範囲が不正です。";
- $objErr->doFunc(array("購入回数(開始)", "buy_times_from", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("購入回数(終了)", "buy_times_to", INT_LEN), array("NUM_CHECK","MAX_LENGTH_CHECK"));
- 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"] .= "※ 購入回数の指定範囲が不正です。";
$objErr->doFunc(array("登録・更新日(開始日)", "start_year", "start_month", "start_day",), array("CHECK_DATE"));
$objErr->doFunc(array("登録・更新日(終了日)", "end_year", "end_month", "end_day"), array("CHECK_DATE"));
$objErr->doFunc(array("登録・更新日(開始日)","登録・更新日(終了日)", "start_year", "start_month", "start_day", "end_year", "end_month", "end_day"), array("CHECK_SET_TERM"));
- $objErr->doFunc(array("表示件数", "page_rows", 3), array("NUM_CHECK","MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("最終購入日(開始日)", "buy_start_year", "buy_start_month", "buy_start_day",), array("CHECK_DATE")); //最終購入日(開始日)
- $objErr->doFunc(array("最終購入(終了日)", "buy_end_year", "buy_end_month", "buy_end_day"), array("CHECK_DATE")); //最終購入日(終了日)
+ $objErr->doFunc(array("最終購入日(開始日)", "buy_start_year", "buy_start_month", "buy_start_day",), array("CHECK_DATE"));
+ $objErr->doFunc(array("最終購入(終了日)", "buy_end_year", "buy_end_month", "buy_end_day"), array("CHECK_DATE"));
//購入金額(from) > 購入金額(to) の場合はエラーとする
$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"));
- $objErr->doFunc(array("購入商品コード", "buy_product_code", STEXT_LEN), array("MAX_LENGTH_CHECK")); //購入商品コード
- $objErr->doFunc(array("購入商品名", "buy_product_name", STEXT_LEN), array("MAX_LENGTH_CHECK")); //購入商品名称
- return $objErr->arrErr;
+ if ((SC_Utils_Ex::sfIsInt($array["buy_total_from"])
+ && SC_Utils_Ex::sfIsInt($array["buy_total_to"]))
+ && ($array["buy_total_from"] > $array["buy_total_to"])) {
+ $objErr->arrErr["buy_total_from"] .= "※ 購入金額の指定範囲が不正です。";
+ }
+
+ if ((SC_Utils_Ex::sfIsInt($array["buy_times_from"])
+ && SC_Utils_Ex::sfIsInt($array["buy_times_to"]))
+ && ($array["buy_times_from"] > $array["buy_times_to"])) {
+ $objErr->arrErr["buy_times_from"] .= "※ 購入回数の指定範囲が不正です。";
+ }
+ if(!SC_Utils::isBlank($objErr->arrErr)) {
+ $arrErr = array_merge($arrErr, $objErr->arrErr);
+ }
+ return $arrErr;
}
+
+ /**
+ * 顧客を削除する処理
+ *
+ * @param integer $customer_id 顧客ID
+ * @return boolean true:成功 false:失敗
+ */
+ function lfDoDeleteCustomer($customer_id) {
+ $arrData = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id, "del_flg = 0");
+ if(SC_Utils_Ex::isBlank($arrData)) {
+ //対象となるデータが見つからない。
+ return false;
+ }
+ // XXXX: 仮会員は物理削除となっていたが論理削除に変更。
+ $arrVal["del_flg"] = "1";
+ $arrVal["update_date"] ="now()";
+ SC_Helper_Customer_Ex::sfEditCustomerData($arrVal, $customer_id);
+ return true;
+ }
+
+ /**
+ * 顧客に登録メールを再送する処理
+ *
+ * @param integer $customer_id 顧客ID
+ * @return boolean true:成功 false:失敗
+ */
+ function lfDoResendMail($cutomer_id) {
+ $arrData = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id);
+ if(SC_Utils_Ex::isBlank($arrData) or $arrData['del_flg'] == 1) {
+ //対象となるデータが見つからない、または削除済み
+ return false;
+ }
+ // 登録メール再送
+ $objHelperMail = new SC_Helper_Mail_Ex();
+ $objHelperMail->sfSendRegistMail($arrData['secret_key'], $customer_id);
+ return true;
+ }
+
+ /**
+ * 顧客一覧を検索する処理
+ *
+ * @param array $arrParam 検索パラメーター連想配列
+ * @return array( integer 全体件数, mixed 顧客データ一覧配列, mixed SC_PageNaviオブジェクト)
+ */
+ function lfDoSearch($arrParam) {
+ $objQuery =& SC_Query::getSingletonInstance();
+ $objSelect = new SC_CustomerList($arrParam, "customer");
+ $page_rows = $arrParam['page_rows'];
+ if(SC_Utils_Ex::sfIsInt($page_rows)) {
+ $page_max = $page_rows;
+ }else{
+ $page_max = SEARCH_PMAX;
+ }
+ $disp_pageno = $arrParam['search_pageno'];
+ if($disp_pageno == 0) {
+ $disp_pageno = 1;
+ }
+ $offset = $page_max * ($disp_pageno - 1);
+ $objSelect->setLimitOffset($page_max, $offset);
+ $arrData = $objQuery->getAll($objSelect->getList(), $objSelect->arrVal);
+
+ // 該当全体件数の取得
+ $linemax = $objQuery->getOne($objSelect->getListCount(), $objSelect->arrVal);
+ // ページ送りの取得
+ $objNavi = new SC_PageNavi($arrParam['search_pageno'],
+ $linemax,
+ $page_max,
+ "fnCustomerPage",
+ NAVI_PMAX);
+ return array($linemax, $arrData, $objNavi);
+ }
+
+ /**
+ * 顧客一覧CSVを検索してダウンロードする処理
+ *
+ * @param array $arrParam 検索パラメーター連想配列
+ * @return boolean true:成功 false:失敗
+ */
+ function lfDoCSV($arrParam) {
+ $objSelect = new SC_CustomerList($arrParam, "customer");
+ $order = "update_date DESC, customer_id DESC";
+ require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php");
+ $objCSV = new SC_Helper_CSV_Ex();
+ list($where, $arrVal) = $objSelect->getWhere();
+ $objCSV->sfDownloadCsv('2', $where, $arrVal);
+ }
+
+ /**
+ * 検索パラメーター引継ぎ用展開
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return array 引き継ぎ用連想配列
+ */
+ function lfGetSearchWords(&$objFormParam) {
+ $arrData = $objFormParam->getSearchArray("search_");
+ $arrData['sex'] = SC_Utils_Ex::sfMergeParamCheckBoxes($objFormParam->getValue('sex'));
+ $arrData['status'] = SC_Utils_Ex::sfMergeParamCheckBoxes($objFormParam->getValue('status'));
+ $arrData['job'] = SC_Utils_Ex::sfMergeParamCheckBoxes($objFormParam->getValue('job'));
+ }
+
+ /**
+ * 表示用パラメーター値取得処理
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return array 表示用連想配列
+ */
+ function lfGetFormParam(&$objFormParam) {
+ $arrForm = $objFormParam->getHashArray();
+ // 配列形式のデータの展開処理
+ $val_sex = $objFormParam->getValue('sex');
+ if(!is_array($val_sex) and !SC_Utils_Ex::isBlank($val_sex)) {
+ $arrForm['sex'] = explode("-", $val_sex);
+ }
+ $val_status = $objFormParam->getValue('status');
+ if(!is_array($val_status) and !SC_Utils_Ex::isBlank($val_status)) {
+ $arrForm['status'] = explode("-", $val_status);
+ }
+ $val_job = $objFormParam->getValue('job');
+ if(!is_array($val_job) and !SC_Utils_Ex::isBlank($val_job)) {
+ $arrForm['job'] = explode("-", $val_job);
+ }
+ return $arrForm;
+ }
+
}
?>
変更: branches/version-2_5-dev/html/install/sql/create_table_mysql.sql
===================================================================
--- branches/version-2_5-dev/html/install/sql/create_table_mysql.sql 2011-02-12 10:44:52 UTC (rev 20159)
+++ branches/version-2_5-dev/html/install/sql/create_table_mysql.sql 2011-02-13 16:31:44 UTC (rev 20160)
@@ -1055,6 +1055,13 @@
PRIMARY KEY (id)
) ENGINE=InnoDB;
+CREATE TABLE mtb_customer_status (
+ id smallint,
+ name text,
+ rank smallint NOT NULL DEFAULT 0,
+ PRIMARY KEY (id)
+) ENGINE=InnoDB;
+
CREATE TABLE mtb_page_rows (
id smallint,
name text,
変更: branches/version-2_5-dev/html/install/sql/create_table_pgsql.sql
===================================================================
--- branches/version-2_5-dev/html/install/sql/create_table_pgsql.sql 2011-02-12 10:44:52 UTC (rev 20159)
+++ branches/version-2_5-dev/html/install/sql/create_table_pgsql.sql 2011-02-13 16:31:44 UTC (rev 20160)
@@ -1055,6 +1055,13 @@
PRIMARY KEY (id)
);
+CREATE TABLE mtb_customer_status (
+ id smallint,
+ name text,
+ rank smallint NOT NULL DEFAULT 0,
+ PRIMARY KEY (id)
+);
+
CREATE TABLE mtb_page_rows (
id smallint,
name text,
変更: branches/version-2_5-dev/html/install/sql/insert_data.sql
===================================================================
--- branches/version-2_5-dev/html/install/sql/insert_data.sql 2011-02-12 10:44:52 UTC (rev 20159)
+++ branches/version-2_5-dev/html/install/sql/insert_data.sql 2011-02-13 16:31:44 UTC (rev 20160)
@@ -927,6 +927,9 @@
INSERT INTO mtb_sex (id, name, rank) VALUES (1, '男性', 0);
INSERT INTO mtb_sex (id, name, rank) VALUES (2, '女性', 1);
+INSERT INTO mtb_customer_status (id, name, rank) VALUES (1, '仮会員', 0);
+INSERT INTO mtb_customer_status (id, name, rank) VALUES (2, '本会員', 1);
+
INSERT INTO mtb_status (id, name, rank) VALUES (1, 'NEW', 0);
INSERT INTO mtb_status (id, name, rank) VALUES (2, '残りわずか', 1);
INSERT INTO mtb_status (id, name, rank) VALUES (3, 'ポイント2倍', 2);
Svn-src-all メーリングリストの案内