source: branches/feature-module-update/data/class/pages/mypage/LC_Page_Mypage_Change.php @ 16369

Revision 16369, 39.5 KB checked in by nanasess, 14 years ago (diff)

携帯メールアドレスも登録できるように修正

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id Revision Date
  • Property svn:mime-type set to text/x-httpd-php
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8// {{{ requires
9require_once(CLASS_PATH . "pages/LC_Page.php");
10
11/**
12 * 登録内容変更 のページクラス.
13 *
14 * @package Page
15 * @author LOCKON CO.,LTD.
16 * @version $Id$
17 */
18class LC_Page_Mypage_Change extends LC_Page {
19
20
21    // }}}
22    // {{{ functions
23
24    /**
25     * Page を初期化する.
26     *
27     * @return void
28     */
29    function init() {
30        parent::init();
31        $this->tpl_mainpage = TEMPLATE_DIR . 'mypage/change.tpl';
32        $this->tpl_title = 'MYページ/会員登録内容変更(入力ページ)';
33        $this->tpl_navi = TEMPLATE_DIR . 'mypage/navi.tpl';
34        $this->tpl_mainno = 'mypage';
35        $this->tpl_mypageno = 'change';
36        $this->tpl_column_num = 1;
37
38        $masterData = new SC_DB_MasterData_Ex();
39        $this->arrReminder = $masterData->getMasterData("mtb_reminder");
40        $this->arrPref = $masterData->getMasterData("mtb_pref",
41                                 array("pref_id", "pref_name", "rank"));
42        $this->arrJob = $masterData->getMasterData("mtb_job");
43        $this->arrMAILMAGATYPE = $masterData->getMasterData("mtb_mail_magazine_type");
44        $this->arrSex = $masterData->getMasterData("mtb_sex");
45        $this->allowClientCache();
46
47    }
48
49    /**
50     * Page のプロセス.
51     *
52     * @return void
53     */
54    function process() {
55        $objView = new SC_SiteView();
56        $this->objQuery = new SC_Query();
57        $this->objCustomer = new SC_Customer();
58        $this->objFormParam = new SC_FormParam();
59
60        // レイアウトデザインを取得
61        $objLayout = new SC_Helper_PageLayout_Ex();
62        $objLayout->sfGetPageLayout($this, false, "mypage/index.php");
63
64        //日付プルダウン設定
65        $objDate = new SC_Date(1901);
66        $this->arrYear = $objDate->getYear();
67        $this->arrMonth = $objDate->getMonth();
68        $this->arrDay = $objDate->getDay();
69
70        // ログインチェック
71        if (!$this->objCustomer->isLoginSuccess()){
72            SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
73        }else {
74            //マイページトップ顧客情報表示用
75            $this->CustomerName1 = $this->objCustomer->getvalue('name01');
76            $this->CustomerName2 = $this->objCustomer->getvalue('name02');
77            $this->CustomerPoint = $this->objCustomer->getvalue('point');
78        }
79
80        //---- 登録用カラム配列
81        $arrRegistColumn = array(
82                                 array(  "column" => "name01",      "convert" => "aKV" ),
83                                 array(  "column" => "name02",      "convert" => "aKV" ),
84                                 array(  "column" => "kana01",      "convert" => "CKV" ),
85                                 array(  "column" => "kana02",      "convert" => "CKV" ),
86                                 array(  "column" => "zip01",       "convert" => "n" ),
87                                 array(  "column" => "zip02",       "convert" => "n" ),
88                                 array(  "column" => "pref",        "convert" => "n" ),
89                                 array(  "column" => "addr01",      "convert" => "aKV" ),
90                                 array(  "column" => "addr02",      "convert" => "aKV" ),
91                                 array(  "column" => "email",       "convert" => "a" ),
92                                 array(  "column" => "email_mobile", "convert" => "a" ),
93                                 array(  "column" => "tel01",       "convert" => "n" ),
94                                 array(  "column" => "tel02",       "convert" => "n" ),
95                                 array(  "column" => "tel03",       "convert" => "n" ),
96                                 array(  "column" => "fax01",       "convert" => "n" ),
97                                 array(  "column" => "fax02",       "convert" => "n" ),
98                                 array(  "column" => "fax03",       "convert" => "n" ),
99                                 array(  "column" => "sex",         "convert" => "n" ),
100                                 array(  "column" => "job",         "convert" => "n" ),
101                                 array(  "column" => "birth",       "convert" => "n" ),
102                                 array(  "column" => "password",    "convert" => "an" ),
103                                 array(  "column" => "reminder",    "convert" => "n" ),
104                                 array(  "column" => "reminder_answer", "convert" => "aKV" ),
105                                 array(  "column" => "mailmaga_flg", "convert" => "n" )
106                                 );
107
108        //メールアドレス種別
109        $arrMailType = array("email" => true, "email_mobile" => true);
110
111        if (!isset($_POST['mode'])) $_POST['mode'] = "";
112
113        switch ($_POST['mode']){
114
115        case 'confirm':
116
117            //エラーなしでかつメールアドレスが重複していない場合
118            if ($this->checkErrorTotal($arrRegistColumn, $arrMailType)) {
119
120                //確認ページへ
121                $this->tpl_mainpage = TEMPLATE_DIR . 'mypage/change_confirm.tpl';
122                $this->tpl_title = 'MYページ/会員登録内容変更(確認ページ)';
123                $passlen = strlen($this->arrForm['password']);
124                $this->passlen = $this->lfPassLen($passlen);
125            } else {
126                $this->lfFormReturn($this->arrForm,$this);
127            }
128
129            break;
130
131        case 'return':
132            $this->arrForm = $_POST;
133            $this->lfFormReturn($this->arrForm,$this);
134            break;
135
136        case 'complete':
137            //エラーなしでかつメールアドレスが重複していない場合
138            if ($this->checkErrorTotal($arrRegistColumn, $arrMailType)) {
139                $this->arrForm['customer_id'] = $this->objCustomer->getValue('customer_id');
140                //-- 編集登録
141                $objDb = new SC_Helper_DB_Ex();
142                $objDb->sfEditCustomerData($this->arrForm, $arrRegistColumn);
143                //セッション情報を最新の状態に更新する
144                $this->objCustomer->updateSession();
145                //完了ページへ
146                $this->sendRedirect($this->getLocation("./change_complete.php"));
147                exit;
148            } else {
149                SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
150            }
151            break;
152
153        default:
154            //顧客情報取得
155            $this->arrForm = $this->lfGetCustomerData();
156            $this->arrForm['password'] = DEFAULT_PASSWORD;
157            $this->arrForm['password02'] = DEFAULT_PASSWORD;
158            break;
159        }
160
161        //誕生日データ登録の有無
162        $arrCustomer = $this->lfGetCustomerData();
163        if ($arrCustomer['birth'] != ""){
164            $this->birth_check = true;
165        }
166
167        $objView->assignobj($this);             //$objpage内の全てのテンプレート変数をsmartyに格納
168        $objView->display(SITE_FRAME);              //パスとテンプレート変数の呼び出し、実行
169
170
171    }
172
173    /**
174     * モバイルページを初期化する.
175     *
176     * @return void
177     */
178    function mobileInit() {
179        $this->tpl_mainpage = 'mypage/change.tpl';      // メインテンプレート
180        $this->tpl_title .= '登録変更(1/3)';            // ページタイトル
181
182    }
183
184    /**
185     * Page のプロセス(モバイル).
186     *
187     * @return void
188     */
189    function mobileProcess() {
190        $objDb = new SC_Helper_DB_Ex();
191        $CONF = $objDb->sf_getBasisData();                  // 店舗基本情報
192        $objConn = new SC_DbConn();
193        $objView = new SC_MobileView();
194        $objDate = new SC_Date(START_BIRTH_YEAR, date("Y",strtotime("now")));
195        $objQuery = new SC_Query();
196        $this->objCustomer = new SC_Customer();
197
198        //メールアドレス種別
199        $arrMailType = array("email" => true, "email_mobile" => true);
200
201        //---- 登録用カラム配列
202        $arrRegistColumn = array(
203                                 array(  "column" => "name01", "convert" => "aKV" ),
204                                 array(  "column" => "name02", "convert" => "aKV" ),
205                                 array(  "column" => "kana01", "convert" => "CKV" ),
206                                 array(  "column" => "kana02", "convert" => "CKV" ),
207                                 array(  "column" => "zip01", "convert" => "n" ),
208                                 array(  "column" => "zip02", "convert" => "n" ),
209                                 array(  "column" => "pref", "convert" => "n" ),
210                                 array(  "column" => "addr01", "convert" => "aKV" ),
211                                 array(  "column" => "addr02", "convert" => "aKV" ),
212                                 array(  "column" => "email", "convert" => "a" ),
213                                 array(  "column" => "email_mobile", "convert" => "a" ),
214                                 array(  "column" => "tel01", "convert" => "n" ),
215                                 array(  "column" => "tel02", "convert" => "n" ),
216                                 array(  "column" => "tel03", "convert" => "n" ),
217                                 array(  "column" => "fax01", "convert" => "n" ),
218                                 array(  "column" => "fax02", "convert" => "n" ),
219                                 array(  "column" => "fax03", "convert" => "n" ),
220                                 array(  "column" => "sex", "convert" => "n" ),
221                                 array(  "column" => "job", "convert" => "n" ),
222                                 array(  "column" => "birth", "convert" => "n" ),
223                                 array(  "column" => "reminder", "convert" => "n" ),
224                                 array(  "column" => "reminder_answer", "convert" => "aKV"),
225                                 array(  "column" => "password", "convert" => "a" ),
226                                 array(  "column" => "mailmaga_flg", "convert" => "n" )
227                                 );
228
229        //---- 登録除外用カラム配列
230        $arrRejectRegistColumn = array("year", "month", "day", "email02", "email_mobile02", "password02");
231
232        $this->arrForm = $this->lfGetCustomerData();
233        $this->arrForm['password'] = DEFAULT_PASSWORD;
234
235        if ($_SERVER["REQUEST_METHOD"] == "POST") {
236
237            //-- POSTデータの引き継ぎ
238            $this->arrForm = array_merge($this->arrForm, $_POST);
239
240            if($this->arrForm['year'] == '----') {
241                $this->arrForm['year'] = '';
242            }
243
244            $this->arrForm['email'] = strtolower($this->arrForm['email']);      // emailはすべて小文字で処理
245
246            //-- 入力データの変換
247            $this->arrForm = $this->lfConvertParam($this->arrForm, $arrRegistColumn);
248
249            // 戻るボタン用処理
250            if (!empty($_POST["return"])) {
251                switch ($_POST["mode"]) {
252                case "complete":
253                    $_POST["mode"] = "set3";
254                    break;
255                case "confirm":
256                    $_POST["mode"] = "set2";
257                    break;
258                default:
259                    $_POST["mode"] = "set1";
260                    break;
261                }
262            }
263
264            //-- 入力エラーチェック
265            if ($_POST["mode"] == "set1") {
266                $this->arrErr = $this->lfErrorCheck1($this->arrForm);
267                $this->tpl_mainpage = 'mypage/change.tpl';
268                $this->tpl_title = '登録変更(1/3)';
269            } elseif ($_POST["mode"] == "set2") {
270                $this->arrErr = $this->lfErrorCheck2($this->arrForm);
271                $this->tpl_mainpage = 'mypage/set1.tpl';
272                $this->tpl_title = '登録変更(2/3)';
273            } else {
274                $this->arrErr = $this->lfErrorCheck3($this->arrForm);
275                $this->tpl_mainpage = 'mypage/set2.tpl';
276                $this->tpl_title = '登録変更(3/3)';
277            }
278
279            if ($this->arrErr || !empty($_POST["return"])) {        // 入力エラーのチェック
280                foreach($this->arrForm as $key => $val) {
281                    $this->$key = $val;
282                }
283
284                //-- データの設定
285                if ($_POST["mode"] == "set1") {
286                    $checkVal = array("email", "password", "reminder", "reminder_answer", "name01", "name02", "kana01", "kana02");
287                } elseif ($_POST["mode"] == "set2") {
288                    $checkVal = array("sex", "year", "month", "day", "zip01", "zip02");
289                } else {
290                    $checkVal = array("pref", "addr01", "addr02", "tel01", "tel02", "tel03", "mail_flag");
291                }
292
293                foreach($this->arrForm as $key => $val) {
294                    if ($key != "return" && $key != "mode" && $key != "confirm" && $key != session_name() && !in_array($key, $checkVal)) {
295                        $this->list_data[ $key ] = $val;
296                    }
297                }
298
299            } else {
300
301                //-- テンプレート設定
302                if ($_POST["mode"] == "set1") {
303                    $this->tpl_mainpage = 'mypage/set1.tpl';
304                    $this->tpl_title = '登録変更(2/3)';
305                } elseif ($_POST["mode"] == "set2") {
306                    $this->tpl_mainpage = 'mypage/set2.tpl';
307                    $this->tpl_title = '登録変更(3/3)';
308                } elseif ($_POST["mode"] == "confirm") {
309                    //パスワード表示
310                    $passlen = strlen($this->arrForm['password']);
311                    $this->passlen = lfPassLen($passlen);
312
313                    // メール受け取り
314                    if (strtolower($_POST['mailmaga_flg']) == "on") {
315                        $_POST['mailmaga_flg']  = "2";
316                    } else {
317                        $_POST['mailmaga_flg']  = "3";
318                    }
319
320                    $this->tpl_mainpage = 'mypage/change_confirm.tpl';
321                    $this->tpl_title = '登録変更(確認ページ)';
322
323                }
324
325                //-- データ設定
326                unset($this->list_data);
327                if ($_POST["mode"] == "set1") {
328                    $checkVal = array("sex", "year", "month", "day", "zip01", "zip02");
329                } elseif ($_POST["mode"] == "set2") {
330                    $checkVal = array("pref", "addr01", "addr02", "tel01", "tel02", "tel03", "mail_flag");
331                } else {
332                    $checkVal = array();
333                }
334
335                foreach($_POST as $key => $val) {
336                    if ($key != "return" && $key != "mode" && $key != "confirm" && $key != session_name() && !in_array($key, $checkVal)) {
337                        $this->list_data[ $key ] = $val;
338                    }
339                }
340
341
342                //-- 仮登録と完了画面
343                if ($_POST["mode"] == "complete") {
344                    /*
345                    //-- 入力データの変換
346                    $arrForm = $this->lfConvertParam($_POST, $arrRegistColumn);
347                    $arrForm['email'] = strtolower($arrForm['email']);      // emailはすべて小文字で処理
348
349                    //エラーチェック
350                    $this->arrErr = $this->lfErrorCheckMobile($this->arrForm);
351                    $email_flag = true;
352
353                    if($this->arrForm['email'] != $objCustomer->getValue('email_mobile')) {
354                        //メールアドレスの重複チェック
355                        $email_cnt = $objQuery->count("dtb_customer","del_flg=0 AND (email=? OR email_mobile=?)", array($this->arrForm['email'], $this->arrForm['email']));
356                        if ($email_cnt > 0){
357                            $email_flag = false;
358                        }
359                    }
360                    */
361                    //エラーなしでかつメールアドレスが重複していない場合
362                    if($this->checkErrorTotal($arrRegistColumn, $arrMailType, true)) {
363                        $this->arrForm['customer_id'] = $this->objCustomer->getValue('customer_id');
364                        //-- 編集登録
365                        $objDb->sfEditCustomerData($arrForm, $arrRegistColumn);
366                        //セッション情報を最新の状態に更新する
367                        $this->objCustomer->updateSession();
368                        //完了ページへ
369                        $this->sendRedirect($this->getLocation("./change_complete.php", array(session_name(), session_id())));
370                        exit;
371                    } else {
372                        SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR, "", false, "", true);
373                    }
374                }
375            }
376        }
377
378        $arrPrivateVariables = array('secret_key', 'first_buy_date', 'last_buy_date', 'buy_times', 'buy_total', 'point', 'note', 'status', 'create_date', 'update_date', 'del_flg', 'cell01', 'cell02', 'cell03', 'mobile_phone_id');
379        foreach ($arrPrivateVariables as $key) {
380            unset($this->list_data[$key]);
381        }
382
383        //---- ページ表示
384        $objView->assignobj($this);
385        $objView->display(SITE_FRAME);
386    }
387
388    /**
389     * デストラクタ.
390     *
391     * @return void
392     */
393    function destroy() {
394        parent::destroy();
395    }
396
397    /**
398     * すべてのエラーチェックを行う.
399     *
400     * @param array $arrRegistColumn 登録カラムの配列
401     * @param array $arrMailType メール種別とフラグを格納した配列
402     * @param bool $isMobile モバイル版登録チェックの場合 true
403     * @return bool エラーの無い場合 true
404     */
405    function checkErrorTotal(&$arrRegistColumn, &$arrMailType, $isMobile = false) {
406        //-- 入力データの変換
407        $this->arrForm = $_POST;
408        $this->arrForm = $this->lfConvertParam($this->arrForm, $arrRegistColumn);
409
410        // emailはすべて小文字で処理
411        foreach ($arrMailType as $mailType) {
412            if (!isset($this->arrForm[$mailType])) {
413                $this->arrForm[$mailType] = "";
414            }
415            $this->arrForm[$mailType] = strtolower($this->arrForm[$mailType]);
416        }
417
418        //エラーチェック
419        $this->arrErr = $isMobile
420            ? $this->lfErrorCheckMobile($this->arrForm)
421            : $this->lfErrorCheck($this->arrForm);
422
423        //メールアドレスを変更している場合、メールアドレスの重複チェック
424        $arrMailType2 = $arrMailType;
425        foreach ($arrMailType as $mailType => $mailTypeValue) {
426
427            if ($this->arrForm[$mailType]
428                != $this->objCustomer->getValue($mailType)){
429
430                $email_cnt = $this->objQuery->count("dtb_customer",
431                                 "del_flg=0 AND " . $mailType . "= ?",
432                                  array($this->arrForm[$mailType]));
433                if ($email_cnt > 0){
434                    $arrMailType2[$mailTypeValue] = false;
435                    $this->arrErr[$mailType] .= "既に使用されているメールアドレスです。";
436                }
437            }
438        }
439
440        // エラーが存在せず, メールアドレスの重複が無い場合は true
441        if (empty($this->arrErr)
442            && $arrMailType2['email'] == true
443            && $arrMailType2['email_mobile'] == true) {
444            return true;
445        } else {
446            return false;
447        }
448    }
449
450    /* パラメータ情報の初期化 */
451    function lfInitParam() {
452        $this->objFormParam->addParam("お名前(姓)", "name01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
453        $this->objFormParam->addParam("お名前(名)", "name02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
454        $this->objFormParam->addParam("フリガナ(セイ)", "kana01", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
455        $this->objFormParam->addParam("フリガナ(メイ)", "kana02", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
456        $this->objFormParam->addParam("郵便番号1", "zip01", ZIP01_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
457        $this->objFormParam->addParam("郵便番号2", "zip02", ZIP02_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
458        $this->objFormParam->addParam("都道府県", "pref", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
459        $this->objFormParam->addParam("ご住所1", "addr01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
460        $this->objFormParam->addParam("ご住所2", "addr02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
461        $this->objFormParam->addParam("お電話番号1", "tel01", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
462        $this->objFormParam->addParam("お電話番号2", "tel02", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
463        $this->objFormParam->addParam("お電話番号3", "tel03", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
464    }
465
466    //エラーチェック
467
468    function lfErrorCheck($array) {
469        $objErr = new SC_CheckError($array);
470
471        $objErr->doFunc(array("お名前(姓)", 'name01', STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
472        $objErr->doFunc(array("お名前(名)", 'name02', STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
473        $objErr->doFunc(array("フリガナ(セイ)", 'kana01', STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANA_CHECK"));
474        $objErr->doFunc(array("フリガナ(メイ)", 'kana02', STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANA_CHECK"));
475        $objErr->doFunc(array("郵便番号1", "zip01", ZIP01_LEN ) ,array("EXIST_CHECK", "SPTAB_CHECK" ,"NUM_CHECK", "NUM_COUNT_CHECK"));
476        $objErr->doFunc(array("郵便番号2", "zip02", ZIP02_LEN ) ,array("EXIST_CHECK", "SPTAB_CHECK" ,"NUM_CHECK", "NUM_COUNT_CHECK"));
477        $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK"));
478        $objErr->doFunc(array("都道府県", 'pref'), array("SELECT_CHECK","NUM_CHECK"));
479        $objErr->doFunc(array("ご住所1", "addr01", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
480        $objErr->doFunc(array("ご住所2", "addr02", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
481        $objErr->doFunc(array('メールアドレス', "email", MTEXT_LEN) ,array("EXIST_CHECK", "EMAIL_CHECK", "NO_SPTAB" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
482        $objErr->doFunc(array('メールアドレス(確認)', "email02", MTEXT_LEN) ,array("EXIST_CHECK", "EMAIL_CHECK","NO_SPTAB" , "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
483        $objErr->doFunc(array('メールアドレス', 'メールアドレス(確認)', "email", "email02") ,array("EQUAL_CHECK"));
484        $objErr->doFunc(array('携帯メールアドレス', "email_mobile", MTEXT_LEN) ,array("EXIST_CHECK", "EMAIL_CHECK", "NO_SPTAB" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK", "MOBILE_DOMAIN_CHECK"));
485        $objErr->doFunc(array('携帯メールアドレス(確認)', "email_mobile02", MTEXT_LEN) ,array("EXIST_CHECK", "EMAIL_CHECK","NO_SPTAB" , "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK", "MOBILE_DOMAIN_CHECK"));
486        $objErr->doFunc(array('携帯メールアドレス', '携帯メールアドレス(確認)', "email_mobile", "email_mobile02") ,array("EQUAL_CHECK"));
487        $objErr->doFunc(array("お電話番号1", 'tel01'), array("EXIST_CHECK","SPTAB_CHECK"));
488        $objErr->doFunc(array("お電話番号2", 'tel02'), array("EXIST_CHECK","SPTAB_CHECK"));
489        $objErr->doFunc(array("お電話番号3", 'tel03'), array("EXIST_CHECK","SPTAB_CHECK"));
490        $objErr->doFunc(array("お電話番号", "tel01", "tel02", "tel03", TEL_LEN) ,array("TEL_CHECK"));
491        $objErr->doFunc(array("FAX番号", "fax01", "fax02", "fax03", TEL_LEN) ,array("TEL_CHECK"));
492        $objErr->doFunc(array("ご性別", "sex") ,array("SELECT_CHECK", "NUM_CHECK"));
493        $objErr->doFunc(array("ご職業", "job") ,array("NUM_CHECK"));
494        $objErr->doFunc(array("生年月日", "year", "month", "day"), array("CHECK_DATE"));
495        $objErr->doFunc(array("パスワード", 'password', PASSWORD_LEN1, PASSWORD_LEN2), array("EXIST_CHECK", "ALNUM_CHECK", "NUM_RANGE_CHECK"));
496        $objErr->doFunc(array("パスワード(確認)", 'password02', PASSWORD_LEN1, PASSWORD_LEN2), array("EXIST_CHECK", "ALNUM_CHECK", "NUM_RANGE_CHECK"));
497        $objErr->doFunc(array("パスワード", 'パスワード(確認)', 'password', 'password02'), array("EQUAL_CHECK"));
498        $objErr->doFunc(array("パスワードを忘れたときの質問", "reminder") ,array("SELECT_CHECK", "NUM_CHECK"));
499        $objErr->doFunc(array("パスワードを忘れたときの答え", "reminder_answer", STEXT_LEN) ,array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
500        $objErr->doFunc(array("メールマガジン", "mailmaga_flg") ,array("SELECT_CHECK", "NUM_CHECK"));
501        return $objErr->arrErr;
502
503    }
504
505    //---- 取得文字列の変換
506    function lfConvertParam($array, $arrRegistColumn) {
507        /*
508         *  文字列の変換
509         *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
510         *  C :  「全角ひら仮名」を「全角かた仮名」に変換
511         *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
512         *  n :  「全角」数字を「半角(ハンカク)」に変換
513         *  a :  全角英数字を半角英数字に変換する
514         */
515        // カラム名とコンバート情報
516        foreach ($arrRegistColumn as $data) {
517            $arrConvList[ $data["column"] ] = $data["convert"];
518        }
519
520        // 文字変換
521        foreach ($arrConvList as $key => $val) {
522            // POSTされてきた値のみ変換する。
523            if (isset($array[$key])) {
524                if(strlen(($array[$key])) > 0) {
525                    $array[$key] = mb_convert_kana($array[$key] ,$val);
526                }
527            }
528        }
529        return $array;
530    }
531
532    //顧客情報の取得
533    function lfGetCustomerData(){
534        //顧客情報取得
535        $ret = $this->objQuery->select("*","dtb_customer","customer_id=?", array($this->objCustomer->getValue('customer_id')));
536        $arrForm = $ret[0];
537
538        //誕生日の年月日取得
539        if (isset($arrForm['birth'])){
540            $birth = split(" ", $arrForm["birth"]);
541            list($year, $month, $day) = split("-",$birth[0]);
542
543            $arrForm['year'] = $year;
544            $arrForm['month'] = $month;
545            $arrForm['day'] = $day;
546
547        }
548        return $arrForm;
549    }
550
551    // 編集登録
552    function lfRegistData($array, $arrRegistColumn) {
553
554        foreach ($arrRegistColumn as $data) {
555            if ($data["column"] != "password") {
556                if($array[ $data['column'] ] == "") {
557                    $arrRegist[ $data['column'] ] = NULL;
558                } else {
559                    $arrRegist[ $data["column"] ] = $array[ $data["column"] ];
560                }
561            }
562        }
563        if (strlen($array["year"]) > 0 && strlen($array["month"]) > 0 && strlen($array["day"]) > 0) {
564            $arrRegist["birth"] = $array["year"] ."/". $array["month"] ."/". $array["day"] ." 00:00:00";
565        } else {
566            $arrRegist["birth"] = NULL;
567        }
568
569        //-- パスワードの更新がある場合は暗号化。(更新がない場合はUPDATE文を構成しない)
570        if ($array["password"] != DEFAULT_PASSWORD) $arrRegist["password"] = sha1($array["password"] . ":" . AUTH_MAGIC);
571        $arrRegist["update_date"] = "NOW()";
572
573        //-- 編集登録実行
574        $this->objQuery->begin();
575        $this->objQuery->update("dtb_customer", $arrRegist, "customer_id = ? ", array($this->objCustomer->getValue('customer_id')));
576        $this->objQuery->commit();
577    }
578
579    //確認ページ用パスワード表示用
580
581    function lfPassLen($passlen){
582        $ret = "";
583        for ($i=0;$i<$passlen;true){
584            $ret.="*";
585            $i++;
586        }
587        return $ret;
588    }
589
590    //エラー、戻る時にフォームに入力情報を返す
591    function lfFormReturn($array, &$objPage){
592        foreach($array as $key => $val){
593            switch ($key){
594            case 'password':
595            case 'password02':
596                $objPage->$key = $val;
597                break;
598            default:
599                $array[ $key ] = $val;
600                break;
601            }
602        }
603    }
604
605
606    // }}}
607    // {{{ mobile functions
608
609    function lfRegistDataMobile ($array, $arrRegistColumn,
610                                 $arrRejectRegistColumn) {
611
612        // 仮登録
613        foreach ($arrRegistColumn as $data) {
614            if (strlen($array[ $data["column"] ]) > 0 && ! in_array($data["column"], $arrRejectRegistColumn)) {
615                $arrRegist[ $data["column"] ] = $array[ $data["column"] ];
616            }
617        }
618
619        // 誕生日が入力されている場合
620        if (strlen($array["year"]) > 0 ) {
621            $arrRegist["birth"] = $array["year"] ."/". $array["month"] ."/". $array["day"] ." 00:00:00";
622        }
623
624        // パスワードの暗号化
625        $arrRegist["password"] = sha1($arrRegist["password"] . ":" . AUTH_MAGIC);
626
627        $count = 1;
628        while ($count != 0) {
629            $uniqid = sfGetUniqRandomId("t");
630            $count = $objConn->getOne("SELECT COUNT(*) FROM dtb_customer WHERE secret_key = ?", array($uniqid));
631        }
632
633        $arrRegist["secret_key"] = $uniqid;     // 仮登録ID発行
634        $arrRegist["create_date"] = "now()";    // 作成日
635        $arrRegist["update_date"] = "now()";    // 更新日
636        $arrRegist["first_buy_date"] = "";      // 最初の購入日
637
638        // 携帯メールアドレス
639        $arrRegist['email_mobile'] = $arrRegist['email'];
640
641        //-- 仮登録実行
642        $objConn->query("BEGIN");
643
644        $objQuery = new SC_Query();
645        $objQuery->insert("dtb_customer", $arrRegist);
646        $objConn->query("COMMIT");
647
648        return $uniqid;
649    }
650
651
652    //エラーチェック
653
654    function lfErrorCheckMobile($array) {
655    $objErr = new SC_CheckError($array);
656
657    $objErr->doFunc(array("お名前(姓)", 'name01', STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
658    $objErr->doFunc(array("お名前(名)", 'name02', STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
659    $objErr->doFunc(array("お名前(カナ/姓)", 'kana01', STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANA_CHECK"));
660    $objErr->doFunc(array("お名前(カナ/名)", 'kana02', STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANA_CHECK"));
661    $objErr->doFunc(array("郵便番号1", "zip01", ZIP01_LEN ) ,array("EXIST_CHECK", "SPTAB_CHECK" ,"NUM_CHECK", "NUM_COUNT_CHECK"));
662    $objErr->doFunc(array("郵便番号2", "zip02", ZIP02_LEN ) ,array("EXIST_CHECK", "SPTAB_CHECK" ,"NUM_CHECK", "NUM_COUNT_CHECK"));
663    $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK"));
664    $objErr->doFunc(array("都道府県", 'pref'), array("SELECT_CHECK","NUM_CHECK"));
665    $objErr->doFunc(array("市区町村", "addr01", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
666    $objErr->doFunc(array("番地", "addr02", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
667    $objErr->doFunc(array('メールアドレス', "email", MTEXT_LEN) ,array("EXIST_CHECK", "EMAIL_CHECK", "NO_SPTAB" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
668    $objErr->doFunc(array("電話番号1", 'tel01'), array("EXIST_CHECK","SPTAB_CHECK"));
669    $objErr->doFunc(array("電話番号2", 'tel02'), array("EXIST_CHECK","SPTAB_CHECK"));
670    $objErr->doFunc(array("電話番号3", 'tel03'), array("EXIST_CHECK","SPTAB_CHECK"));
671    $objErr->doFunc(array("電話番号", "tel01", "tel02", "tel03", TEL_LEN) ,array("TEL_CHECK"));
672    $objErr->doFunc(array("FAX番号", "fax01", "fax02", "fax03", TEL_LEN) ,array("TEL_CHECK"));
673    $objErr->doFunc(array("性別", "sex") ,array("SELECT_CHECK", "NUM_CHECK"));
674    $objErr->doFunc(array("ご職業", "job") ,array("NUM_CHECK"));
675    $objErr->doFunc(array("生年月日", "year", "month", "day"), array("CHECK_DATE"));
676    $objErr->doFunc(array("パスワード", 'password', PASSWORD_LEN1, PASSWORD_LEN2), array("EXIST_CHECK", "ALNUM_CHECK", "NUM_RANGE_CHECK"));
677    $objErr->doFunc(array("パスワード確認用の質問", "reminder") ,array("SELECT_CHECK", "NUM_CHECK"));
678    $objErr->doFunc(array("パスワード確認用の質問の答え", "reminder_answer", STEXT_LEN) ,array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
679    return $objErr->arrErr;
680
681    }
682
683
684    //---- 入力エラーチェック
685    function lfErrorCheck1($array) {
686
687        global $objConn;
688        global $objCustomer;
689        $objErr = new SC_CheckError($array);
690
691        $objErr->doFunc(array("お名前(姓)", 'name01', STEXT_LEN), array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
692        $objErr->doFunc(array("お名前(名)", 'name02', STEXT_LEN), array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" , "MAX_LENGTH_CHECK"));
693        $objErr->doFunc(array("お名前(カナ/姓)", 'kana01', STEXT_LEN), array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANA_CHECK"));
694        $objErr->doFunc(array("お名前(カナ/名)", 'kana02', STEXT_LEN), array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANA_CHECK"));
695        $objErr->doFunc(array('メールアドレス', "email", MTEXT_LEN) ,array("NO_SPTAB", "EXIST_CHECK", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK", "MOBILE_EMAIL_CHECK"));
696
697        //現会員の判定 → 現会員もしくは仮登録中は、メアド一意が前提になってるので同じメアドで登録不可
698        $array["customer_id"] = $objCustomer->getValue('customer_id');
699        if (strlen($array["email"]) > 0) {
700            $objQuery = new SC_Query();
701            $arrRet = $objQuery->select("email, update_date, del_flg", "dtb_customer","customer_id <> ? and (email = ? OR email_mobile = ?) ORDER BY del_flg", array($array["customer_id"], $array["email"], $array["email"]));
702
703            if(count($arrRet) > 0) {
704                if($arrRet[0]['del_flg'] != '1') {
705                    // 会員である場合
706                    $objErr->arrErr["email"] .= "※ すでに会員登録で使用されているメールアドレスです。<br />";
707                } else {
708                    // 退会した会員である場合
709                    $leave_time = SC_Utils_Ex::sfDBDatetoTime($arrRet[0]['update_date']);
710                    $now_time = time();
711                    $pass_time = $now_time - $leave_time;
712                    // 退会から何時間-経過しているか判定する。
713                    $limit_time = ENTRY_LIMIT_HOUR * 3600;
714                    if($pass_time < $limit_time) {
715                        $objErr->arrErr["email"] .= "※ 退会から一定期間の間は、同じメールアドレスを使用することはできません。<br />";
716                    }
717                }
718            }
719        }
720
721        $objErr->doFunc(array("パスワード", 'password', PASSWORD_LEN1, PASSWORD_LEN2), array("EXIST_CHECK", "SPTAB_CHECK" ,"ALNUM_CHECK", "NUM_RANGE_CHECK"));
722        $objErr->doFunc(array("パスワード確認用の質問", "reminder") ,array("SELECT_CHECK", "NUM_CHECK"));
723        $objErr->doFunc(array("パスワード確認用の質問の答え", "reminder_answer", STEXT_LEN) ,array("EXIST_CHECK","SPTAB_CHECK" , "MAX_LENGTH_CHECK"));
724
725        return $objErr->arrErr;
726    }
727
728    //---- 入力エラーチェック
729    function lfErrorCheck2($array) {
730
731        global $objConn, $objDate;
732        $objErr = new SC_CheckError($array);
733
734        $objErr->doFunc(array("郵便番号1", "zip01", ZIP01_LEN ) ,array("EXIST_CHECK", "SPTAB_CHECK" ,"NUM_CHECK", "NUM_COUNT_CHECK"));
735        $objErr->doFunc(array("郵便番号2", "zip02", ZIP02_LEN ) ,array("EXIST_CHECK", "SPTAB_CHECK" ,"NUM_CHECK", "NUM_COUNT_CHECK"));
736        $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK"));
737
738        $objErr->doFunc(array("性別", "sex") ,array("SELECT_CHECK", "NUM_CHECK"));
739        $objErr->doFunc(array("生年月日 (年)", "year", 4), array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
740        if (!isset($objErr->arrErr['year'])) {
741            $objErr->doFunc(array("生年月日 (年)", "year", $objDate->getStartYear()), array("MIN_CHECK"));
742            $objErr->doFunc(array("生年月日 (年)", "year", $objDate->getEndYear()), array("MAX_CHECK"));
743        }
744        $objErr->doFunc(array("生年月日 (月日)", "month", "day"), array("SELECT_CHECK"));
745        if (!isset($objErr->arrErr['year']) && !isset($objErr->arrErr['month']) && !isset($objErr->arrErr['day'])) {
746            $objErr->doFunc(array("生年月日", "year", "month", "day"), array("CHECK_DATE"));
747        }
748
749        return $objErr->arrErr;
750    }
751
752    //---- 入力エラーチェック
753    function lfErrorCheck3($array) {
754
755        global $objConn;
756        $objErr = new SC_CheckError($array);
757
758        $objErr->doFunc(array("都道府県", 'pref'), array("SELECT_CHECK","NUM_CHECK"));
759        $objErr->doFunc(array("市区町村", "addr01", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
760        $objErr->doFunc(array("番地", "addr02", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
761        $objErr->doFunc(array("電話番号1", 'tel01'), array("EXIST_CHECK","SPTAB_CHECK" ));
762        $objErr->doFunc(array("電話番号2", 'tel02'), array("EXIST_CHECK","SPTAB_CHECK" ));
763        $objErr->doFunc(array("電話番号3", 'tel03'), array("EXIST_CHECK","SPTAB_CHECK" ));
764        $objErr->doFunc(array("電話番号", "tel01", "tel02", "tel03",TEL_ITEM_LEN) ,array("TEL_CHECK"));
765
766        return $objErr->arrErr;
767    }
768
769    // 郵便番号から住所の取得
770    function lfGetAddress($zipcode) {
771        global $arrPref;
772
773        $conn = new SC_DBconn(ZIP_DSN);
774
775        // 郵便番号検索文作成
776        $zipcode = mb_convert_kana($zipcode ,"n");
777        $sqlse = "SELECT state, city, town FROM mtb_zip WHERE zipcode = ?";
778
779        $data_list = $conn->getAll($sqlse, array($zipcode));
780
781        // インデックスと値を反転させる。
782        $arrREV_PREF = array_flip($arrPref);
783
784        /*
785          総務省からダウンロードしたデータをそのままインポートすると
786          以下のような文字列が入っているので 対策する。
787          ・(1・19丁目)
788          ・以下に掲載がない場合
789        */
790        $town =  $data_list[0]['town'];
791        $town = ereg_replace("(.*)$","",$town);
792        $town = ereg_replace("以下に掲載がない場合","",$town);
793        $data_list[0]['town'] = $town;
794        $data_list[0]['state'] = $arrREV_PREF[$data_list[0]['state']];
795
796        return $data_list;
797    }
798
799    //顧客情報の取得
800    function lfGetCustomerDataMobile(){
801        global $objQuery;
802        global $objCustomer;
803        //顧客情報取得
804        $ret = $objQuery->select("*","dtb_customer","customer_id=?", array($objCustomer->getValue('customer_id')));
805        $arrForm = $ret[0];
806        $arrForm['email'] = $arrForm['email_mobile'];
807
808        //メルマガフラグ取得
809        $arrForm['mailmaga_flg'] = $objQuery->get("dtb_customer","mailmaga_flg","email_mobile=?", array($objCustomer->getValue('email_mobile')));
810
811        //誕生日の年月日取得
812        if (isset($arrForm['birth'])){
813            $birth = split(" ", $arrForm["birth"]);
814            list($year, $month, $day) = split("-",$birth[0]);
815
816            $arrForm['year'] = $year;
817            $arrForm['month'] = $month;
818            $arrForm['day'] = $day;
819
820        }
821        return $arrForm;
822    }
823
824}
825?>
Note: See TracBrowser for help on using the repository browser.