source: branches/feature-module-update/data/class/pages/shopping/LC_Page_Shopping_Deliv.php @ 16527

Revision 16527, 21.9 KB checked in by nanasess, 14 years ago (diff)

モバイルメールアドレスが未登録の場合に, 登録先住所への配送が空白になるデグレ修正

  • Property svn:keywords set to Id Revision Date
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
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:LC_Page_Shopping_Deliv.php 15532 2007-08-31 14:39:46Z nanasess $
17 */
18class LC_Page_Shopping_Deliv extends LC_Page {
19
20    // {{{ properties
21
22    /** フォームパラメータの配列 */
23    var $objFormParam;
24
25    /** ログインフォームパラメータ配列 */
26    var $objLoginFormParam;
27
28    // }}}
29    // {{{ functions
30
31    /**
32     * Page を初期化する.
33     *
34     * @return void
35     */
36    function init() {
37        parent::init();
38        $this->tpl_mainpage = 'shopping/deliv.tpl';
39        $this->tpl_column_num = 1;
40        $this->tpl_css = URL_DIR.'css/layout/shopping/index.css';
41        $masterData = new SC_DB_MasterData();
42        $this->arrPref = $masterData->getMasterData("mtb_pref", array("pref_id", "pref_name", "rank"));
43        $this->tpl_title = "お届け先指定";
44
45        $this->allowClientCache();
46    }
47
48    /**
49     * Page のプロセス.
50     *
51     * @return void
52     */
53    function process() {
54        global $objCampaignSess;
55
56        $objView = new SC_SiteView();
57        $objSiteSess = new SC_SiteSession();
58        $objCartSess = new SC_CartSession();
59        $objCampaignSess = new SC_CampaignSession();
60        $objCustomer = new SC_Customer();
61        // クッキー管理クラス
62        $objCookie = new SC_Cookie(COOKIE_EXPIRE);
63        // パラメータ管理クラス
64        $this->objFormParam = new SC_FormParam();
65        // パラメータ情報の初期化
66        $this->lfInitParam();
67        // POST値の取得
68        $this->objFormParam->setParam($_POST);
69
70        $this->objLoginFormParam = new SC_FormParam();  // ログインフォーム用
71        $this->lfInitLoginFormParam();                      // 初期設定
72        $this->objLoginFormParam->setParam($_POST);     // POST値の取得
73
74        // ユーザユニークIDの取得と購入状態の正当性をチェック
75        $uniqid = SC_Utils_Ex::sfCheckNormalAccess($objSiteSess, $objCartSess);
76        $this->tpl_uniqid = $uniqid;
77
78        if (!isset($_POST['mode'])) $_POST['mode'] = "";
79
80        // ログインチェック
81        if($_POST['mode'] != 'login' && !$objCustomer->isLoginSuccess()) {
82            // 不正アクセスとみなす
83            SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
84        }
85
86        switch($_POST['mode']) {
87        case 'login':
88            $this->objLoginFormParam->toLower('login_email');
89            $this->arrErr = $this->objLoginFormParam->checkError();
90            $arrForm =  $this->objLoginFormParam->getHashArray();
91            // クッキー保存判定
92            if($arrForm['login_memory'] == "1" && $arrForm['login_email'] != "") {
93                $objCookie->setCookie('login_email', $_POST['login_email']);
94            } else {
95                $objCookie->setCookie('login_email', '');
96            }
97
98            if(count($this->arrErr) == 0) {
99                // ログイン判定
100                if(!$objCustomer->getCustomerDataFromEmailPass($arrForm['login_pass'], $arrForm['login_email'])) {
101                    // 仮登録の判定
102                    $objQuery = new SC_Query;
103                    $where = "email = ? AND status = 1 AND del_flg = 0";
104                    $ret = $objQuery->count("dtb_customer", $where, array($arrForm['login_email']));
105
106                    if($ret > 0) {
107                        SC_Utils_Ex::sfDispSiteError(TEMP_LOGIN_ERROR);
108                    } else {
109                        SC_Utils_Ex::sfDispSiteError(SITE_LOGIN_ERROR);
110                    }
111                }
112            } else {
113                // ログインページに戻る
114                $this->sendRedirect(URL_SHOP_TOP);
115                exit;
116            }
117            break;
118        // 削除
119        case 'delete':
120            if (SC_Utils_Ex::sfIsInt($_POST['other_deliv_id'])) {
121                $objQuery = new SC_Query();
122                $where = "other_deliv_id = ?";
123                $arrRet = $objQuery->delete("dtb_other_deliv", $where, array($_POST['other_deliv_id']));
124                $this->objFormParam->setValue('select_addr_id', '');
125            }
126            break;
127        // 会員登録住所に送る
128        case 'customer_addr':
129            // 会員登録住所がチェックされている場合
130            if ($_POST['deliv_check'] == '-1') {
131                // 会員情報の住所を受注一時テーブルに書き込む
132                $this->lfRegistDelivData($uniqid, $objCustomer);
133                // 正常に登録されたことを記録しておく
134                $objSiteSess->setRegistFlag();
135                // お支払い方法選択ページへ移動
136                $this->sendRedirect($this->getLocation(URL_SHOP_PAYMENT, array(), true));
137                exit;
138            // 別のお届け先がチェックされている場合
139            } elseif($_POST['deliv_check'] >= 1) {
140                if (SC_Utils_Ex::sfIsInt($_POST['deliv_check'])) {
141                    // 登録済みの別のお届け先を受注一時テーブルに書き込む
142                    $this->lfRegistOtherDelivData($uniqid, $objCustomer, $_POST['deliv_check']);
143                    // 正常に登録されたことを記録しておく
144                    $objSiteSess->setRegistFlag();
145                    // お支払い方法選択ページへ移動
146                    $this->sendRedirect($this->getLocation(URL_SHOP_PAYMENT, array(), true));
147                    exit;
148                }
149            }else{
150                // エラーを返す
151                $arrErr['deli'] = '※ お届け先を選択してください。';
152            }
153            break;
154        // 前のページに戻る
155        case 'return':
156            // 確認ページへ移動
157            $this->sendRedirect($this->getLocation(URL_CART_TOP, array(), true));
158            exit;
159            break;
160        default:
161            $objQuery = new SC_Query();
162            $where = "order_temp_id = ?";
163            $arrRet = $objQuery->select("*", "dtb_order_temp", $where, array($uniqid));
164            if (empty($arrRet)) $arrRet = array("");
165            $this->objFormParam->setParam($arrRet[0]);
166            break;
167        }
168
169        /** 表示処理 **/
170
171        // 会員登録住所の取得
172        $col = "name01, name02, pref, addr01, addr02";
173        $where = "customer_id = ?";
174        $objQuery = new SC_Query();
175        $arrCustomerAddr = $objQuery->select($col, "dtb_customer", $where, array($_SESSION['customer']['customer_id']));
176        // 別のお届け先住所の取得
177        $col = "other_deliv_id, name01, name02, pref, addr01, addr02";
178        $objQuery->setorder("other_deliv_id DESC");
179        $objOtherAddr = $objQuery->select($col, "dtb_other_deliv", $where, array($_SESSION['customer']['customer_id']));
180        $this->arrAddr = $arrCustomerAddr;
181        $this->tpl_addrmax = count($objOtherAddr);
182        $cnt = 1;
183        foreach($objOtherAddr as $val) {
184            $this->arrAddr[$cnt] = $val;
185            $cnt++;
186        }
187
188        // 入力値の取得
189        if (!isset($arrErr)) $arrErr = array();
190        $this->arrForm = $this->objFormParam->getFormParamList();
191        $this->arrErr = $arrErr;
192
193        $objView->assignobj($this);
194        // フレームを選択(キャンペーンページから遷移なら変更)
195        $objCampaignSess->pageView($objView);
196    }
197
198    /**
199     * モバイルページを初期化する.
200     *
201     * @return void
202     */
203    function mobileInit() {
204        $this->init();
205    }
206
207    /**
208     * Page のプロセス(モバイル).
209     *
210     * @return void
211     */
212    function mobileProcess() {
213        $objView = new SC_MobileView();
214        $objSiteSess = new SC_SiteSession();
215        $objCartSess = new SC_CartSession();
216        $objCustomer = new SC_Customer();
217        // クッキー管理クラス
218        $objCookie = new SC_Cookie(COOKIE_EXPIRE);
219        // パラメータ管理クラス
220        $this->objFormParam = new SC_FormParam();
221        // パラメータ情報の初期化
222        $this->lfInitParam();
223        // POST値の取得
224        $this->objFormParam->setParam($_POST);
225
226        $this->objLoginFormParam = new SC_FormParam();  // ログインフォーム用
227        $this->lfInitLoginFormParam();                      // 初期設定
228        $this->objLoginFormParam->setParam($_POST);     // POST値の取得
229
230        // ユーザユニークIDの取得と購入状態の正当性をチェック
231        $uniqid = SC_Utils_Ex::sfCheckNormalAccess($objSiteSess, $objCartSess);
232        $this->tpl_uniqid = $uniqid;
233
234        if (!isset($_POST['mode'])) $_POST['mode'] = "";
235
236        // ログインチェック
237        if($_POST['mode'] != 'login' && !$objCustomer->isLoginSuccess(true)) {
238            // 不正アクセスとみなす
239            SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR, "", false, "", true);
240        }
241
242        switch($_POST['mode']) {
243        case 'login':
244            $this->objLoginFormParam->toLower('login_email');
245            $this->arrErr = $this->objLoginFormParam->checkError();
246            $arrForm =  $this->objLoginFormParam->getHashArray();
247            // クッキー保存判定
248            if($arrForm['login_memory'] == "1" && $arrForm['login_email'] != "") {
249                $objCookie->setCookie('login_email', $_POST['login_email']);
250            } else {
251                $objCookie->setCookie('login_email', '');
252            }
253
254            if(count($this->arrErr) == 0) {
255                // ログイン判定
256                if(!$objCustomer->getCustomerDataFromMobilePhoneIdPass($arrForm['login_pass']) &&
257                   !$objCustomer->getCustomerDataFromEmailPass($arrForm['login_pass'], $arrForm['login_email'], true)) {
258                    // 仮登録の判定
259                    $objQuery = new SC_Query;
260                    $where = "(email = ? OR email_mobile = ?) AND status = 1 AND del_flg = 0";
261                    $ret = $objQuery->count("dtb_customer", $where, array($arrForm['login_email'], $arrForm['login_email']));
262
263                    if($ret > 0) {
264                        SC_Utils_Ex::sfDispSiteError(TEMP_LOGIN_ERROR, "", false, "", true);
265                    } else {
266                        SC_Utils_Ex::sfDispSiteError(SITE_LOGIN_ERROR, "", false, "", true);
267                    }
268                }
269            } else {
270                // ログインページに戻る
271                $this->sendRedirect($this->getLocation(MOBILE_URL_SHOP_TOP), true);
272                exit;
273            }
274
275            // ログインが成功した場合は携帯端末IDを保存する。
276            $objCustomer->updateMobilePhoneId();
277
278            /*
279             * 携帯メールアドレスが登録されていない場合は,
280             * 携帯メールアドレス登録画面へ遷移
281             */
282            $objMobile = new SC_Helper_Mobile_Ex();
283            if (!$objMobile->gfIsMobileMailAddress($objCustomer->getValue('email'))) {
284                if (!$objCustomer->hasValue('email_mobile')) {
285                    $this->sendRedirect($this->getLocation("../entry/email_mobile.php"), true);
286                }
287            }
288            break;
289            // 削除
290        case 'delete':
291            if (SC_Utils_Ex::sfIsInt($_POST['other_deliv_id'])) {
292                $objQuery = new SC_Query();
293                $where = "other_deliv_id = ?";
294                $arrRet = $objQuery->delete("dtb_other_deliv", $where, array($_POST['other_deliv_id']));
295                $this->objFormParam->setValue('select_addr_id', '');
296            }
297            break;
298            // 会員登録住所に送る
299        case 'customer_addr':
300            // お届け先がチェックされている場合には更新処理を行う
301            if ($_POST['deli'] != "") {
302                // 会員情報の住所を受注一時テーブルに書き込む
303                $this->lfRegistDelivData($uniqid, $objCustomer);
304                // 正常に登録されたことを記録しておく
305                $objSiteSess->setRegistFlag();
306                // お支払い方法選択ページへ移動
307                $this->sendRedirect($this->getLocation(MOBILE_URL_SHOP_PAYMENT), true);
308                exit;
309            }else{
310                // エラーを返す
311                $arrErr['deli'] = '※ お届け先を選択してください。';
312            }
313            break;
314
315            // 登録済みの別のお届け先に送る
316        case 'other_addr':
317            // お届け先がチェックされている場合には更新処理を行う
318            if ($_POST['deli'] != "") {
319                if (SC_Utils_Ex::sfIsInt($_POST['other_deliv_id'])) {
320                    // 登録済みの別のお届け先を受注一時テーブルに書き込む
321                    $this->lfRegistOtherDelivData($uniqid, $objCustomer, $_POST['other_deliv_id']);
322                    // 正常に登録されたことを記録しておく
323                    $objSiteSess->setRegistFlag();
324                    // お支払い方法選択ページへ移動
325                    $this->sendRedirect($this->getLocation(MOBILE_URL_SHOP_PAYMENT), true);
326                    exit;
327                }
328            }else{
329                // エラーを返す
330                $arrErr['deli'] = '※ お届け先を選択してください。';
331            }
332            break;
333
334            /*
335            // 別のお届け先を指定
336            case 'new_addr':
337            // 入力値の変換
338            $this->objFormParam->convParam();
339            $this->arrErr = lfCheckError($arrRet);
340            // 入力エラーなし
341            if(count($this->arrErr) == 0) {
342            // DBへお届け先を登録
343            lfRegistNewAddrData($uniqid, $objCustomer);
344            // 正常に登録されたことを記録しておく
345            $objSiteSess->setRegistFlag();
346            // お支払い方法選択ページへ移動
347            header("Location: " . URL_SHOP_PAYMENT);
348            exit;
349            }
350            break;
351            */
352
353            // 前のページに戻る
354        case 'return':
355            // 確認ページへ移動
356            $this->sendRedirect($this->getLocation(MOBILE_URL_CART_TOP), true);
357            exit;
358            break;
359        default:
360            $objQuery = new SC_Query();
361            $where = "order_temp_id = ?";
362            $arrRet = $objQuery->select("*", "dtb_order_temp", $where, array($uniqid));
363            $this->objFormParam->setParam($arrRet[0]);
364            break;
365        }
366
367        /** 表示処理 **/
368
369        // 会員登録住所の取得
370        $col = "name01, name02, pref, addr01, addr02, zip01, zip02";
371        $where = "customer_id = ?";
372        $objQuery = new SC_Query();
373        $arrCustomerAddr = $objQuery->select($col, "dtb_customer", $where, array($_SESSION['customer']['customer_id']));
374        // 別のお届け先住所の取得
375        $col = "other_deliv_id, name01, name02, pref, addr01, addr02, zip01, zip02";
376        $objQuery->setorder("other_deliv_id DESC");
377        $objOtherAddr = $objQuery->select($col, "dtb_other_deliv", $where, array($_SESSION['customer']['customer_id']));
378        $this->arrAddr = $arrCustomerAddr;
379        $cnt = 1;
380        foreach($objOtherAddr as $val) {
381            $this->arrAddr[$cnt] = $val;
382            $cnt++;
383        }
384
385        // 入力値の取得
386        if (!isset($arrErr)) $arrErr = array();
387        $this->arrForm = $this->objFormParam->getFormParamList();
388        $this->arrErr = $arrErr;
389        $objView->assignobj($this);
390        $objView->display(SITE_FRAME);
391    }
392
393    /**
394     * デストラクタ.
395     *
396     * @return void
397     */
398    function destroy() {
399        parent::destroy();
400    }
401
402    /* パラメータ情報の初期化 */
403    function lfInitParam() {
404        $this->objFormParam->addParam("お名前1", "deliv_name01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
405        $this->objFormParam->addParam("お名前2", "deliv_name02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
406        $this->objFormParam->addParam("フリガナ1", "deliv_kana01", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
407        $this->objFormParam->addParam("フリガナ2", "deliv_kana02", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
408        $this->objFormParam->addParam("郵便番号1", "deliv_zip01", ZIP01_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
409        $this->objFormParam->addParam("郵便番号2", "deliv_zip02", ZIP02_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
410        $this->objFormParam->addParam("都道府県", "deliv_pref", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
411        $this->objFormParam->addParam("住所1", "deliv_addr01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
412        $this->objFormParam->addParam("住所2", "deliv_addr02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
413        $this->objFormParam->addParam("電話番号1", "deliv_tel01", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
414        $this->objFormParam->addParam("電話番号2", "deliv_tel02", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
415        $this->objFormParam->addParam("電話番号3", "deliv_tel03", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
416        $this->objFormParam->addParam("", "deliv_check");
417    }
418
419    function lfInitLoginFormParam() {
420        $this->objLoginFormParam->addParam("記憶する", "login_memory", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
421        $this->objLoginFormParam->addParam("メールアドレス", "login_email", STEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
422        $this->objLoginFormParam->addParam("パスワード", "login_pass", STEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
423    }
424
425    /* DBへデータの登録 */
426    function lfRegistNewAddrData($uniqid, $objCustomer) {
427        $arrRet = $this->objFormParam->getHashArray();
428        $sqlval = $this->objFormParam->getDbArray();
429        // 登録データの作成
430        $sqlval['deliv_check'] = '1';
431        $sqlval['order_temp_id'] = $uniqid;
432        $sqlval['update_date'] = 'Now()';
433        $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
434        $sqlval['order_birth'] = $objCustomer->getValue('birth');
435
436        $objDb = new SC_Helper_DB_Ex();
437        $objDb->sfRegistTempOrder($uniqid, $sqlval);
438    }
439
440    /* 会員情報の住所を一時受注テーブルへ */
441    function lfRegistDelivData($uniqid, $objCustomer) {
442        // 登録データの作成
443        $sqlval['order_temp_id'] = $uniqid;
444        $sqlval['update_date'] = 'Now()';
445        $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
446        $sqlval['deliv_check'] = '-1';
447        $sqlval['deliv_name01'] = $objCustomer->getValue('name01');
448        $sqlval['deliv_name02'] = $objCustomer->getValue('name02');
449        $sqlval['deliv_kana01'] = $objCustomer->getValue('kana01');
450        $sqlval['deliv_kana02'] = $objCustomer->getValue('kana02');
451        $sqlval['deliv_zip01'] = $objCustomer->getValue('zip01');
452        $sqlval['deliv_zip02'] = $objCustomer->getValue('zip02');
453        $sqlval['deliv_pref'] = $objCustomer->getValue('pref');
454        $sqlval['deliv_addr01'] = $objCustomer->getValue('addr01');
455        $sqlval['deliv_addr02'] = $objCustomer->getValue('addr02');
456        $sqlval['deliv_tel01'] = $objCustomer->getValue('tel01');
457        $sqlval['deliv_tel02'] = $objCustomer->getValue('tel02');
458        $sqlval['deliv_tel03'] = $objCustomer->getValue('tel03');
459
460        $sqlval['deliv_fax01'] = $objCustomer->getValue('fax01');
461        $sqlval['deliv_fax02'] = $objCustomer->getValue('fax02');
462        $sqlval['deliv_fax03'] = $objCustomer->getValue('fax03');
463
464        $objDb = new SC_Helper_DB_Ex();
465        $objDb->sfRegistTempOrder($uniqid, $sqlval);
466    }
467
468    /* 別のお届け先住所を一時受注テーブルへ */
469    function lfRegistOtherDelivData($uniqid, $objCustomer, $other_deliv_id) {
470        // 登録データの作成
471        $sqlval['order_temp_id'] = $uniqid;
472        $sqlval['update_date'] = 'Now()';
473        $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
474        $sqlval['order_birth'] = $objCustomer->getValue('birth');
475
476        $objQuery = new SC_Query();
477        $where = "other_deliv_id = ?";
478        $arrRet = $objQuery->select("*", "dtb_other_deliv", $where, array($other_deliv_id));
479
480        $sqlval['deliv_check'] = $other_deliv_id;
481        $sqlval['deliv_name01'] = $arrRet[0]['name01'];
482        $sqlval['deliv_name02'] = $arrRet[0]['name02'];
483        $sqlval['deliv_kana01'] = $arrRet[0]['kana01'];
484        $sqlval['deliv_kana02'] = $arrRet[0]['kana02'];
485        $sqlval['deliv_zip01'] = $arrRet[0]['zip01'];
486        $sqlval['deliv_zip02'] = $arrRet[0]['zip02'];
487        $sqlval['deliv_pref'] = $arrRet[0]['pref'];
488        $sqlval['deliv_addr01'] = $arrRet[0]['addr01'];
489        $sqlval['deliv_addr02'] = $arrRet[0]['addr02'];
490        $sqlval['deliv_tel01'] = $arrRet[0]['tel01'];
491        $sqlval['deliv_tel02'] = $arrRet[0]['tel02'];
492        $sqlval['deliv_tel03'] = $arrRet[0]['tel03'];
493        $objDb = new SC_Helper_DB_Ex();
494        $objDb->sfRegistTempOrder($uniqid, $sqlval);
495    }
496
497    /* 入力内容のチェック */
498    function lfCheckError() {
499        // 入力データを渡す。
500        $arrRet =  $this->objFormParam->getHashArray();
501        $objErr = new SC_CheckError($arrRet);
502        $objErr->arrErr = $this->objFormParam->checkError();
503        // 複数項目チェック
504        if ($_POST['mode'] == 'login'){
505            $objErr->doFunc(array("メールアドレス", "login_email", STEXT_LEN), array("EXIST_CHECK"));
506            $objErr->doFunc(array("パスワード", "login_pass", STEXT_LEN), array("EXIST_CHECK"));
507        }
508        $objErr->doFunc(array("TEL", "deliv_tel01", "deliv_tel02", "deliv_tel03", TEL_ITEM_LEN), array("TEL_CHECK"));
509        return $objErr->arrErr;
510    }
511}
512?>
Note: See TracBrowser for help on using the repository browser.