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

Revision 16497, 22.0 KB checked in by nanasess, 14 years ago (diff)

SC_CampaignSession を global に追加

  • 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 = ? AND status = 1 AND del_flg = 0";
261                    $ret = $objQuery->count("dtb_customer", $where, array($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             * email がモバイルドメインでは無く,
280             * 携帯メールアドレスが登録されていない場合
281             *
282             * XXX 携帯メールアドレスの登録が無いと,
283             *     配送先が空欄になってしまう場合がある
284             */
285            $objMobile = new SC_Helper_Mobile_Ex();
286            if (!$objMobile->gfIsMobileMailAddress($objCustomer->getValue('email'))) {
287                if (!$objCustomer->hasValue('email_mobile')) {
288                    $this->sendRedirect($this->getLocation("../entry/email_mobile.php"), true);
289                }
290            }
291            break;
292            // 削除
293        case 'delete':
294            if (SC_Utils_Ex::sfIsInt($_POST['other_deliv_id'])) {
295                $objQuery = new SC_Query();
296                $where = "other_deliv_id = ?";
297                $arrRet = $objQuery->delete("dtb_other_deliv", $where, array($_POST['other_deliv_id']));
298                $this->objFormParam->setValue('select_addr_id', '');
299            }
300            break;
301            // 会員登録住所に送る
302        case 'customer_addr':
303            // お届け先がチェックされている場合には更新処理を行う
304            if ($_POST['deli'] != "") {
305                // 会員情報の住所を受注一時テーブルに書き込む
306                $this->lfRegistDelivData($uniqid, $objCustomer);
307                // 正常に登録されたことを記録しておく
308                $objSiteSess->setRegistFlag();
309                // お支払い方法選択ページへ移動
310                $this->sendRedirect($this->getLocation(MOBILE_URL_SHOP_PAYMENT), true);
311                exit;
312            }else{
313                // エラーを返す
314                $arrErr['deli'] = '※ お届け先を選択してください。';
315            }
316            break;
317
318            // 登録済みの別のお届け先に送る
319        case 'other_addr':
320            // お届け先がチェックされている場合には更新処理を行う
321            if ($_POST['deli'] != "") {
322                if (SC_Utils_Ex::sfIsInt($_POST['other_deliv_id'])) {
323                    // 登録済みの別のお届け先を受注一時テーブルに書き込む
324                    $this->lfRegistOtherDelivData($uniqid, $objCustomer, $_POST['other_deliv_id']);
325                    // 正常に登録されたことを記録しておく
326                    $objSiteSess->setRegistFlag();
327                    // お支払い方法選択ページへ移動
328                    $this->sendRedirect($this->getLocation(MOBILE_URL_SHOP_PAYMENT), true);
329                    exit;
330                }
331            }else{
332                // エラーを返す
333                $arrErr['deli'] = '※ お届け先を選択してください。';
334            }
335            break;
336
337            /*
338            // 別のお届け先を指定
339            case 'new_addr':
340            // 入力値の変換
341            $this->objFormParam->convParam();
342            $this->arrErr = lfCheckError($arrRet);
343            // 入力エラーなし
344            if(count($this->arrErr) == 0) {
345            // DBへお届け先を登録
346            lfRegistNewAddrData($uniqid, $objCustomer);
347            // 正常に登録されたことを記録しておく
348            $objSiteSess->setRegistFlag();
349            // お支払い方法選択ページへ移動
350            header("Location: " . URL_SHOP_PAYMENT);
351            exit;
352            }
353            break;
354            */
355
356            // 前のページに戻る
357        case 'return':
358            // 確認ページへ移動
359            $this->sendRedirect($this->getLocation(MOBILE_URL_CART_TOP), true);
360            exit;
361            break;
362        default:
363            $objQuery = new SC_Query();
364            $where = "order_temp_id = ?";
365            $arrRet = $objQuery->select("*", "dtb_order_temp", $where, array($uniqid));
366            $this->objFormParam->setParam($arrRet[0]);
367            break;
368        }
369
370        /** 表示処理 **/
371
372        // 会員登録住所の取得
373        $col = "name01, name02, pref, addr01, addr02, zip01, zip02";
374        $where = "customer_id = ?";
375        $objQuery = new SC_Query();
376        $arrCustomerAddr = $objQuery->select($col, "dtb_customer", $where, array($_SESSION['customer']['customer_id']));
377        // 別のお届け先住所の取得
378        $col = "other_deliv_id, name01, name02, pref, addr01, addr02, zip01, zip02";
379        $objQuery->setorder("other_deliv_id DESC");
380        $objOtherAddr = $objQuery->select($col, "dtb_other_deliv", $where, array($_SESSION['customer']['customer_id']));
381        $this->arrAddr = $arrCustomerAddr;
382        $cnt = 1;
383        foreach($objOtherAddr as $val) {
384            $this->arrAddr[$cnt] = $val;
385            $cnt++;
386        }
387
388        // 入力値の取得
389        if (!isset($arrErr)) $arrErr = array();
390        $this->arrForm = $this->objFormParam->getFormParamList();
391        $this->arrErr = $arrErr;
392        $objView->assignobj($this);
393        $objView->display(SITE_FRAME);
394    }
395
396    /**
397     * デストラクタ.
398     *
399     * @return void
400     */
401    function destroy() {
402        parent::destroy();
403    }
404
405    /* パラメータ情報の初期化 */
406    function lfInitParam() {
407        $this->objFormParam->addParam("お名前1", "deliv_name01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
408        $this->objFormParam->addParam("お名前2", "deliv_name02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
409        $this->objFormParam->addParam("フリガナ1", "deliv_kana01", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
410        $this->objFormParam->addParam("フリガナ2", "deliv_kana02", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
411        $this->objFormParam->addParam("郵便番号1", "deliv_zip01", ZIP01_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
412        $this->objFormParam->addParam("郵便番号2", "deliv_zip02", ZIP02_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
413        $this->objFormParam->addParam("都道府県", "deliv_pref", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
414        $this->objFormParam->addParam("住所1", "deliv_addr01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
415        $this->objFormParam->addParam("住所2", "deliv_addr02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
416        $this->objFormParam->addParam("電話番号1", "deliv_tel01", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
417        $this->objFormParam->addParam("電話番号2", "deliv_tel02", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
418        $this->objFormParam->addParam("電話番号3", "deliv_tel03", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
419        $this->objFormParam->addParam("", "deliv_check");
420    }
421
422    function lfInitLoginFormParam() {
423        $this->objLoginFormParam->addParam("記憶する", "login_memory", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
424        $this->objLoginFormParam->addParam("メールアドレス", "login_email", STEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
425        $this->objLoginFormParam->addParam("パスワード", "login_pass", STEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
426    }
427
428    /* DBへデータの登録 */
429    function lfRegistNewAddrData($uniqid, $objCustomer) {
430        $arrRet = $this->objFormParam->getHashArray();
431        $sqlval = $this->objFormParam->getDbArray();
432        // 登録データの作成
433        $sqlval['deliv_check'] = '1';
434        $sqlval['order_temp_id'] = $uniqid;
435        $sqlval['update_date'] = 'Now()';
436        $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
437        $sqlval['order_birth'] = $objCustomer->getValue('birth');
438
439        $objDb = new SC_Helper_DB_Ex();
440        $objDb->sfRegistTempOrder($uniqid, $sqlval);
441    }
442
443    /* 会員情報の住所を一時受注テーブルへ */
444    function lfRegistDelivData($uniqid, $objCustomer) {
445        // 登録データの作成
446        $sqlval['order_temp_id'] = $uniqid;
447        $sqlval['update_date'] = 'Now()';
448        $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
449        $sqlval['deliv_check'] = '-1';
450        $sqlval['deliv_name01'] = $objCustomer->getValue('name01');
451        $sqlval['deliv_name02'] = $objCustomer->getValue('name02');
452        $sqlval['deliv_kana01'] = $objCustomer->getValue('kana01');
453        $sqlval['deliv_kana02'] = $objCustomer->getValue('kana02');
454        $sqlval['deliv_zip01'] = $objCustomer->getValue('zip01');
455        $sqlval['deliv_zip02'] = $objCustomer->getValue('zip02');
456        $sqlval['deliv_pref'] = $objCustomer->getValue('pref');
457        $sqlval['deliv_addr01'] = $objCustomer->getValue('addr01');
458        $sqlval['deliv_addr02'] = $objCustomer->getValue('addr02');
459        $sqlval['deliv_tel01'] = $objCustomer->getValue('tel01');
460        $sqlval['deliv_tel02'] = $objCustomer->getValue('tel02');
461        $sqlval['deliv_tel03'] = $objCustomer->getValue('tel03');
462
463        $sqlval['deliv_fax01'] = $objCustomer->getValue('fax01');
464        $sqlval['deliv_fax02'] = $objCustomer->getValue('fax02');
465        $sqlval['deliv_fax03'] = $objCustomer->getValue('fax03');
466
467        $objDb = new SC_Helper_DB_Ex();
468        $objDb->sfRegistTempOrder($uniqid, $sqlval);
469    }
470
471    /* 別のお届け先住所を一時受注テーブルへ */
472    function lfRegistOtherDelivData($uniqid, $objCustomer, $other_deliv_id) {
473        // 登録データの作成
474        $sqlval['order_temp_id'] = $uniqid;
475        $sqlval['update_date'] = 'Now()';
476        $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
477        $sqlval['order_birth'] = $objCustomer->getValue('birth');
478
479        $objQuery = new SC_Query();
480        $where = "other_deliv_id = ?";
481        $arrRet = $objQuery->select("*", "dtb_other_deliv", $where, array($other_deliv_id));
482
483        $sqlval['deliv_check'] = $other_deliv_id;
484        $sqlval['deliv_name01'] = $arrRet[0]['name01'];
485        $sqlval['deliv_name02'] = $arrRet[0]['name02'];
486        $sqlval['deliv_kana01'] = $arrRet[0]['kana01'];
487        $sqlval['deliv_kana02'] = $arrRet[0]['kana02'];
488        $sqlval['deliv_zip01'] = $arrRet[0]['zip01'];
489        $sqlval['deliv_zip02'] = $arrRet[0]['zip02'];
490        $sqlval['deliv_pref'] = $arrRet[0]['pref'];
491        $sqlval['deliv_addr01'] = $arrRet[0]['addr01'];
492        $sqlval['deliv_addr02'] = $arrRet[0]['addr02'];
493        $sqlval['deliv_tel01'] = $arrRet[0]['tel01'];
494        $sqlval['deliv_tel02'] = $arrRet[0]['tel02'];
495        $sqlval['deliv_tel03'] = $arrRet[0]['tel03'];
496        $objDb = new SC_Helper_DB_Ex();
497        $objDb->sfRegistTempOrder($uniqid, $sqlval);
498    }
499
500    /* 入力内容のチェック */
501    function lfCheckError() {
502        // 入力データを渡す。
503        $arrRet =  $this->objFormParam->getHashArray();
504        $objErr = new SC_CheckError($arrRet);
505        $objErr->arrErr = $this->objFormParam->checkError();
506        // 複数項目チェック
507        if ($_POST['mode'] == 'login'){
508            $objErr->doFunc(array("メールアドレス", "login_email", STEXT_LEN), array("EXIST_CHECK"));
509            $objErr->doFunc(array("パスワード", "login_pass", STEXT_LEN), array("EXIST_CHECK"));
510        }
511        $objErr->doFunc(array("TEL", "deliv_tel01", "deliv_tel02", "deliv_tel03", TEL_ITEM_LEN), array("TEL_CHECK"));
512        return $objErr->arrErr;
513    }
514}
515?>
Note: See TracBrowser for help on using the repository browser.