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

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