source: branches/feature-module-update/data/class/pages/shopping/LC_Page_Shopping.php @ 16170

Revision 16170, 19.8 KB checked in by nanasess, 15 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.php 15532 2007-08-31 14:39:46Z nanasess $
17 */
18class LC_Page_Shopping extends LC_Page {
19
20    // {{{ properties
21
22    /** フォームパラメータ */
23    var $objFormParam;
24
25    /** 年 */
26    var $year;
27
28    // }}}
29    // {{{ functions
30
31    /**
32     * Page を初期化する.
33     *
34     * @return void
35     */
36    function init() {
37        parent::init();
38        $this->tpl_mainpage = 'shopping/index.tpl';
39        $masterData = new SC_DB_MasterData();
40        $this->arrPref = $masterData->getMasterData("mtb_pref", array("pref_id", "pref_name", "rank"));
41        $this->arrSex = $masterData->getMasterData("mtb_sex");
42        $this->arrJob = $masterData->getMasterData("mtb_job");
43        $this->tpl_onload = 'fnCheckInputDeliv();';
44
45        $this->allowClientCache();
46    }
47
48    /**
49     * Page のプロセス.
50     *
51     * @return void
52     */
53    function process() {
54        $conn = new SC_DBConn();
55        $objView = new SC_SiteView();
56        $objSiteSess = new SC_SiteSession();
57        $objCartSess = new SC_CartSession();
58        $objCampaignSess = new SC_CampaignSession();
59        $objCustomer = new SC_Customer();
60        $objCookie = new SC_Cookie();
61        $this->objFormParam = new SC_FormParam();           // フォーム用
62        $this->lfInitParam();                               // パラメータ情報の初期化
63        $this->objFormParam->setParam($_POST);          // POST値の取得
64
65        // ユーザユニークIDの取得と購入状態の正当性をチェック
66        $this->tpl_uniqid = SC_Utils_Ex::sfCheckNormalAccess($objSiteSess, $objCartSess);
67
68        // ログインチェック
69        if($objCustomer->isLoginSuccess()) {
70            // すでにログインされている場合は、お届け先設定画面に転送
71            $this->sendRedirect($this->getLocation("./deliv.php"), array());
72            exit;
73        }
74
75        if ($_SERVER["REQUEST_METHOD"] == "POST") {
76            if (!$this->isValidToken()) {
77                SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true);
78            }
79        }
80
81        if (!isset($_POST['mode'])) $_POST['mode'] = "";
82
83        switch($_POST['mode']) {
84        case 'nonmember_confirm':
85            $this->lfSetNonMember($this);
86            // ※breakなし
87        case 'confirm':
88            // 入力値の変換
89            $this->objFormParam->convParam();
90            $this->objFormParam->toLower('order_mail');
91            $this->objFormParam->toLower('order_mail_check');
92
93            $this->arrErr = $this->lfCheckError();
94
95            // 入力エラーなし
96            if(count($this->arrErr) == 0) {
97                // DBへのデータ登録
98                $this->lfRegistData($uniqid);
99
100                // お届け先のコピー
101                $this->lfCopyDeliv($uniqid, $_POST);
102
103                // 正常に登録されたことを記録しておく
104                $objSiteSess->setRegistFlag();
105                // お支払い方法選択ページへ移動
106                $this->sendRedirect($this->getLocation(URL_SHOP_PAYMENT));
107                exit;
108            }
109
110            break;
111        // 前のページに戻る
112        case 'return':
113            // 確認ページへ移動
114            $this->sendRedirect($this->getLocation(URL_CART_TOP));
115            exit;
116            break;
117        case 'nonmember':
118            $this->lfSetNonMember($this);
119            // ※breakなし
120        default:
121            if(isset($_GET['form']) && $_GET['from'] == 'nonmember') {
122                $this->lfSetNonMember($this);
123            }
124            // ユーザユニークIDの取得
125            $uniqid = $objSiteSess->getUniqId();
126            $objQuery = new SC_Query();
127            $where = "order_temp_id = ?";
128            $arrRet = $objQuery->select("*", "dtb_order_temp", $where, array($uniqid));
129            if (empty($arrRet)) $arrRet = array(
130                                                array('order_email' => "",
131                                                      'order_birth' => ""));
132
133            // DB値の取得
134            $this->objFormParam->setParam($arrRet[0]);
135            $this->objFormParam->setValue('order_email_check', $arrRet[0]['order_email']);
136            $this->objFormParam->setDBDate($arrRet[0]['order_birth']);
137            break;
138        }
139
140        // クッキー判定
141        $this->tpl_login_email = $objCookie->getCookie('login_email');
142        if($this->tpl_login_email != "") {
143            $this->tpl_login_memory = "1";
144        }
145
146        // 選択用日付の取得
147        $objDate = new SC_Date(START_BIRTH_YEAR);
148        $this->arrYear = $objDate->getYear('', 1950);   // 日付プルダウン設定
149        $this->arrMonth = $objDate->getMonth();
150        $this->arrDay = $objDate->getDay();
151
152        if($this->year == '') {
153            $this->year = '----';
154        }
155
156        // 入力値の取得
157        $this->arrForm = $this->objFormParam->getFormParamList();
158
159        if(empty($this->arrForm['year']['value'])){
160            $this->arrForm['year']['value'] = '----';
161        }
162
163        $this->transactionid = $this->getToken();
164        $objView->assignobj($this);
165        // フレームを選択(キャンペーンページから遷移なら変更)
166        $objCampaignSess->pageView($objView);
167    }
168
169    /**
170     * モバイルページを初期化する.
171     *
172     * @return void
173     */
174    function mobileInit() {
175        $this->init();
176        $this->tpl_mainpage = MOBILE_TEMPLATE_DIR . 'shopping/index.tpl';
177    }
178
179    /**
180     * Page のプロセス(モバイル).
181     *
182     * @return void
183     */
184    function mobileProcess() {
185        $conn = new SC_DBConn();
186        $objView = new SC_MobileView();
187        $objSiteSess = new SC_SiteSession();
188        $objCartSess = new SC_CartSession();
189        $objCustomer = new SC_Customer();
190        $objCookie = new SC_Cookie();
191        $this->objFormParam = new SC_FormParam();           // フォーム用
192        $helperMobile = new SC_Helper_Mobile_Ex();
193        $this->lfInitParam();                               // パラメータ情報の初期化
194        $this->objFormParam->setParam($_POST);          // POST値の取得
195
196        // ユーザユニークIDの取得と購入状態の正当性をチェック
197        $uniqid = SC_Utils_Ex::sfCheckNormalAccess($objSiteSess, $objCartSess);
198
199        $this->tpl_uniqid = $uniqid;
200
201        // ログインチェック
202        if($objCustomer->isLoginSuccess()) {
203            // すでにログインされている場合は、お届け先設定画面に転送
204            $this->sendRedirect($this->getLocation($helperMobile->gfAddSessionId('./deliv.php')));
205            exit;
206        }
207
208        // 携帯端末IDが一致する会員が存在するかどうかをチェックする。
209        $this->tpl_valid_phone_id = $objCustomer->checkMobilePhoneId();
210
211        switch($_POST['mode']) {
212        case 'nonmember_confirm':
213            $this->lfSetNonMember($this);
214            // ※breakなし
215        case 'confirm':
216            // 入力値の変換
217            $this->objFormParam->convParam();
218            $this->objFormParam->toLower('order_mail');
219            $this->objFormParam->toLower('order_mail_check');
220
221            $this->arrErr = $this->lfCheckError();
222
223            // 入力エラーなし
224            if(count($this->arrErr) == 0) {
225                // DBへのデータ登録
226                $this->lfRegistData($uniqid);
227                // 正常に登録されたことを記録しておく
228                $objSiteSess->setRegistFlag();
229                // お支払い方法選択ページへ移動
230                $this->sendRedirect($this->getLocation(SC_Helper_Mobile_Ex::gfAddSessionId(MOBILE_URL_SHOP_PAYMENT)));
231                exit;
232            }
233
234            break;
235            // 前のページに戻る
236        case 'return':
237            // 確認ページへ移動
238            $this->sendRedirect($this->getLocation(SC_Helper_Mobile_Ex::gfAddSessionId(MOBILE_URL_CART_TOP)));
239            exit;
240            break;
241        case 'nonmember':
242            $this->lfSetNonMember($this);
243            // ※breakなし
244        default:
245            if($_GET['from'] == 'nonmember') {
246                $this->lfSetNonMember($this);
247            }
248            // ユーザユニークIDの取得
249            $uniqid = $objSiteSess->getUniqId();
250            $objQuery = new SC_Query();
251            $where = "order_temp_id = ?";
252            $arrRet = $objQuery->select("*", "dtb_order_temp", $where, array($uniqid));
253            // DB値の取得
254            $this->objFormParam->setParam($arrRet[0]);
255            $this->objFormParam->setValue('order_email_check', $arrRet[0]['order_email']);
256            $this->objFormParam->setDBDate($arrRet[0]['order_birth']);
257            break;
258        }
259
260        // クッキー判定
261        $this->tpl_login_email = $objCookie->getCookie('login_email');
262        if($this->tpl_login_email != "") {
263            $this->tpl_login_memory = "1";
264        }
265
266        // 選択用日付の取得
267        $objDate = new SC_Date(START_BIRTH_YEAR);
268        $this->arrYear = $objDate->getYear('', 1950);   // 日付プルダウン設定
269        $this->arrMonth = $objDate->getMonth();
270        $this->arrDay = $objDate->getDay();
271
272        if($this->year == '') {
273            $this->year = '----';
274        }
275
276        // 入力値の取得
277        $this->arrForm = $this->objFormParam->getFormParamList();
278
279        if($this->arrForm['year']['value'] == ""){
280            $this->arrForm['year']['value'] = '----';
281        }
282
283        $objView->assignobj($this);
284        $objView->display(SITE_FRAME);
285    }
286
287    /**
288     * デストラクタ.
289     *
290     * @return void
291     */
292    function destroy() {
293        parent::destroy();
294    }
295
296    /* 非会員入力ページのセット */
297    function lfSetNonMember(&$objPage) {
298        $objPage->tpl_mainpage = 'shopping/nonmember_input.tpl';
299        $objPage->tpl_css = array();
300        $objPage->tpl_css[] = URL_DIR.'css/layout/login/nonmember.css';
301    }
302
303    /* パラメータ情報の初期化 */
304    function lfInitParam() {
305        $this->objFormParam->addParam("お名前(姓)", "order_name01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
306        $this->objFormParam->addParam("お名前(名)", "order_name02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
307        $this->objFormParam->addParam("フリガナ(セイ)", "order_kana01", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
308        $this->objFormParam->addParam("フリガナ(メイ)", "order_kana02", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
309        $this->objFormParam->addParam("郵便番号1", "order_zip01", ZIP01_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
310        $this->objFormParam->addParam("郵便番号2", "order_zip02", ZIP02_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
311        $this->objFormParam->addParam("都道府県", "order_pref", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
312        $this->objFormParam->addParam("住所1", "order_addr01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
313        $this->objFormParam->addParam("住所2", "order_addr02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
314        $this->objFormParam->addParam("電話番号1", "order_tel01", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
315        $this->objFormParam->addParam("電話番号2", "order_tel02", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
316        $this->objFormParam->addParam("電話番号3", "order_tel03", TEL_ITEM_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK" ,"NUM_CHECK"));
317        $this->objFormParam->addParam("FAX番号1", "order_fax01", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
318        $this->objFormParam->addParam("FAX番号2", "order_fax02", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
319        $this->objFormParam->addParam("FAX番号3", "order_fax03", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
320        $this->objFormParam->addParam("メールアドレス", "order_email", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "NO_SPTAB", "MAX_LENGTH_CHECK", "EMAIL_CHECK", "EMAIL_CHAR_CHECK"));
321        $this->objFormParam->addParam("メールアドレス(確認)", "order_email_check", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "NO_SPTAB", "MAX_LENGTH_CHECK", "EMAIL_CHECK", "EMAIL_CHAR_CHECK"), "", false);
322        $this->objFormParam->addParam("年", "year", INT_LEN, "n", array("MAX_LENGTH_CHECK"), "", false);
323        $this->objFormParam->addParam("月", "month", INT_LEN, "n", array("MAX_LENGTH_CHECK"), "", false);
324        $this->objFormParam->addParam("日", "day", INT_LEN, "n", array("MAX_LENGTH_CHECK"), "", false);
325        $this->objFormParam->addParam("性別", "order_sex", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
326        $this->objFormParam->addParam("職業", "order_job", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
327        $this->objFormParam->addParam("別のお届け先", "deliv_check", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
328        $this->objFormParam->addParam("お名前(姓)", "deliv_name01", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
329        $this->objFormParam->addParam("お名前(名)", "deliv_name02", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
330        $this->objFormParam->addParam("フリガナ(セイ)", "deliv_kana01", STEXT_LEN, "KVCa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
331        $this->objFormParam->addParam("フリガナ(メイ)", "deliv_kana02", STEXT_LEN, "KVCa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
332        $this->objFormParam->addParam("郵便番号1", "deliv_zip01", ZIP01_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
333        $this->objFormParam->addParam("郵便番号2", "deliv_zip02", ZIP02_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
334        $this->objFormParam->addParam("都道府県", "deliv_pref", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
335        $this->objFormParam->addParam("住所1", "deliv_addr01", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
336        $this->objFormParam->addParam("住所2", "deliv_addr02", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
337        $this->objFormParam->addParam("電話番号1", "deliv_tel01", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
338        $this->objFormParam->addParam("電話番号2", "deliv_tel02", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
339        $this->objFormParam->addParam("電話番号3", "deliv_tel03", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
340        $this->objFormParam->addParam("メールマガジン", "mail_flag", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
341    }
342
343    /* DBへデータの登録 */
344    function lfRegistData($uniqid) {
345        $arrRet = $this->objFormParam->getHashArray();
346        $sqlval = $this->objFormParam->getDbArray();
347        // 登録データの作成
348        $sqlval['order_temp_id'] = $uniqid;
349        $sqlval['order_birth'] = SC_Utils_Ex::sfGetTimestamp($arrRet['year'], $arrRet['month'], $arrRet['day']);
350        $sqlval['update_date'] = 'Now()';
351        $sqlval['customer_id'] = '0';
352
353        // 既存データのチェック
354        $objQuery = new SC_Query();
355        $where = "order_temp_id = ?";
356        $cnt = $objQuery->count("dtb_order_temp", $where, array($uniqid));
357        // 既存データがない場合
358        if ($cnt == 0) {
359            $sqlval['create_date'] = 'Now()';
360            $objQuery->insert("dtb_order_temp", $sqlval);
361        } else {
362            $objQuery->update("dtb_order_temp", $sqlval, $where, array($uniqid));
363        }
364
365    }
366
367    /* 入力内容のチェック */
368    function lfCheckError() {
369        // 入力データを渡す。
370        $arrRet = $this->objFormParam->getHashArray();
371        $objErr = new SC_CheckError($arrRet);
372        $objErr->arrErr = $this->objFormParam->checkError();
373
374        // 別のお届け先チェック
375        if($_POST['deliv_check'] == "1") {
376            $objErr->doFunc(array("お名前(姓)", "deliv_name01"), array("EXIST_CHECK"));
377            $objErr->doFunc(array("お名前(名)", "deliv_name02"), array("EXIST_CHECK"));
378            $objErr->doFunc(array("フリガナ(セイ)", "deliv_kana01"), array("EXIST_CHECK"));
379            $objErr->doFunc(array("フリガナ(メイ)", "deliv_kana02"), array("EXIST_CHECK"));
380            $objErr->doFunc(array("郵便番号1", "deliv_zip01"), array("EXIST_CHECK"));
381            $objErr->doFunc(array("郵便番号2", "deliv_zip02"), array("EXIST_CHECK"));
382            $objErr->doFunc(array("都道府県", "deliv_pref"), array("EXIST_CHECK"));
383            $objErr->doFunc(array("住所1", "deliv_addr01"), array("EXIST_CHECK"));
384            $objErr->doFunc(array("住所2", "deliv_addr02"), array("EXIST_CHECK"));
385            $objErr->doFunc(array("電話番号1", "deliv_tel01"), array("EXIST_CHECK"));
386            $objErr->doFunc(array("電話番号2", "deliv_tel02"), array("EXIST_CHECK"));
387            $objErr->doFunc(array("電話番号3", "deliv_tel03"), array("EXIST_CHECK"));
388        }
389
390        // 複数項目チェック
391        $objErr->doFunc(array("TEL", "order_tel01", "order_tel02", "order_tel03", TEL_ITEM_LEN), array("TEL_CHECK"));
392        $objErr->doFunc(array("FAX", "order_fax01", "order_fax02", "order_fax03", TEL_ITEM_LEN), array("TEL_CHECK"));
393        $objErr->doFunc(array("郵便番号", "order_zip01", "order_zip02"), array("ALL_EXIST_CHECK"));
394        $objErr->doFunc(array("TEL", "deliv_tel01", "deliv_tel02", "deliv_tel03", TEL_ITEM_LEN), array("TEL_CHECK"));
395        $objErr->doFunc(array("FAX", "deliv_fax01", "deliv_fax02", "deliv_fax03", TEL_ITEM_LEN), array("TEL_CHECK"));
396        $objErr->doFunc(array("郵便番号", "deliv_zip01", "deliv_zip02"), array("ALL_EXIST_CHECK"));
397        $objErr->doFunc(array("生年月日", "year", "month", "day"), array("CHECK_DATE"));
398        $objErr->doFunc(array("メールアドレス", "メールアドレス(確認)", "order_email", "order_email_check"), array("EQUAL_CHECK"));
399
400        // すでにメルマガテーブルに会員としてメールアドレスが登録されている場合
401        if(SC_Utils_Ex::sfCheckCustomerMailMaga($arrRet['order_email'])) {
402            $objErr->arrErr['order_email'] = "このメールアドレスはすでに登録されています。<br />";
403        }
404
405        return $objErr->arrErr;
406    }
407
408    // 受注一時テーブルのお届け先をコピーする
409    function lfCopyDeliv($uniqid, $arrData) {
410        $objQuery = new SC_Query();
411
412        // 別のお届け先を指定していない場合、配送先に登録住所をコピーする。
413        if($arrData["deliv_check"] != "1") {
414            $sqlval['deliv_name01'] = $arrData['order_name01'];
415            $sqlval['deliv_name02'] = $arrData['order_name02'];
416            $sqlval['deliv_kana01'] = $arrData['order_kana01'];
417            $sqlval['deliv_kana02'] = $arrData['order_kana02'];
418            $sqlval['deliv_pref'] = $arrData['order_pref'];
419            $sqlval['deliv_zip01'] = $arrData['order_zip01'];
420            $sqlval['deliv_zip02'] = $arrData['order_zip02'];
421            $sqlval['deliv_addr01'] = $arrData['order_addr01'];
422            $sqlval['deliv_addr02'] = $arrData['order_addr02'];
423            $sqlval['deliv_tel01'] = $arrData['order_tel01'];
424            $sqlval['deliv_tel02'] = $arrData['order_tel02'];
425            $sqlval['deliv_tel03'] = $arrData['order_tel03'];
426            $where = "order_temp_id = ?";
427            $objQuery->update("dtb_order_temp", $sqlval, $where, array($uniqid));
428        }
429    }
430}
431?>
Note: See TracBrowser for help on using the repository browser.