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

Revision 16375, 39.6 KB checked in by nanasess, 14 years ago (diff)

PC版会員とモバイル版会員のメールアドレス管理改善(#171)

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