source: branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_DelivAddr.php @ 19832

Revision 19832, 14.3 KB checked in by Seasoft, 13 years ago (diff)

#714(パス指定によるリダイレクトの記述を簡潔にする) 共通処理実装、個別処理の一部を実装
#869(create_date, update_date 列の定義が、表やDBによるバラツキがある)

  • NOT NULL 制約により実装漏れに気づいたので修正

#893(SC_Response#reload を使うべきであろう箇所で SC_Response#sendRedirect を利用している)
#628(未使用処理・定義などの削除)

  • 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; charset=UTF-8
Line 
1<?php
2/*
3 * This file is part of EC-CUBE
4 *
5 * Copyright(c) 2000-2010 LOCKON CO.,LTD. All Rights Reserved.
6 *
7 * http://www.lockon.co.jp/
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22 */
23
24// {{{ requires
25require_once(CLASS_REALDIR . "pages/LC_Page.php");
26
27/**
28 * お届け先追加のページクラス
29 *
30 * @package Page
31 * @author LOCKON CO.,LTD.
32 * @version $Id$
33 */
34class LC_Page_Shopping_DelivAddr extends LC_Page {
35
36    // }}}
37    // {{{ functions
38
39    /**
40     * Page を初期化する.
41     *
42     * @return void
43     */
44    function init() {
45        parent::init();
46    }
47
48    /**
49     * Page のプロセス.
50     *
51     * @return void
52     */
53    function process() {
54        $this->action();
55        $this->sendResponse();
56    }
57
58    /**
59     * Page のアクション.
60     *
61     * @return void
62     */
63    function action() {
64    }
65
66    /**
67     * モバイルページを初期化する.
68     *
69     * @return void
70     */
71    function mobileInit() {
72        $this->tpl_mainpage = 'shopping/deliv_addr.tpl';
73        $this->tpl_title = "新しいお届け先の追加";
74        $masterData = new SC_DB_MasterData_Ex();
75        $this->arrPref = $masterData->getMasterData('mtb_pref');
76    }
77
78    /**
79     * Page のプロセス(モバイル).
80     *
81     * @return void
82     */
83    function mobileProcess() {
84        $this->mobileAction();
85        $this->sendResponse();
86    }
87
88    /**
89     * Page のアクション(モバイル).
90     *
91     * @return void
92     */
93    function mobileAction() {
94        $objView = new SC_MobileView(false);
95        $objQuery = new SC_Query();
96        $objCustomer = new SC_Customer();
97        $objSiteSess = new SC_SiteSession();
98        $objCartSess = new SC_CartSession();
99
100        //ログイン判定
101        if (!$objCustomer->isLoginSuccess(true)){
102            SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
103        }
104
105        $this->arrForm = $_POST;
106
107        //-- データ設定
108        foreach($_POST as $key => $val) {
109            if ($key != "mode" && $key != "return" && $key != "submit" && $key != session_name()) {
110                $this->list_data[ $key ] = $val;
111            }
112        }
113        // ユーザユニークIDの取得と購入状態の正当性をチェック
114        $uniqid = SC_Utils_Ex::sfCheckNormalAccess($objSiteSess, $objCartSess);
115
116        //別のお届け先DB登録用カラム配列
117        $arrRegistColumn = array(
118                                 array(  "column" => "name01",      "convert" => "aKV" ),
119                                 array(  "column" => "name02",      "convert" => "aKV" ),
120                                 array(  "column" => "kana01",      "convert" => "CKV" ),
121                                 array(  "column" => "kana02",      "convert" => "CKV" ),
122                                 array(  "column" => "zip01",       "convert" => "n" ),
123                                 array(  "column" => "zip02",       "convert" => "n" ),
124                                 array(  "column" => "pref",        "convert" => "n" ),
125                                 array(  "column" => "addr01",      "convert" => "aKV" ),
126                                 array(  "column" => "addr02",      "convert" => "aKV" ),
127                                 array(  "column" => "tel01",       "convert" => "n" ),
128                                 array(  "column" => "tel02",       "convert" => "n" ),
129                                 array(  "column" => "tel03",       "convert" => "n" ),
130                                 );
131
132        // 戻るボタン用処理
133        if (!empty($_POST["return"])) {
134            switch ($_POST["mode"]) {
135            case 'complete':
136                $_POST["mode"] = "set2";
137                break;
138            case 'set2':
139                $_POST["mode"] = "set1";
140                break;
141            default:
142                SC_Response_Ex::sendRedirect('deliv.php');
143                exit;
144            }
145        }
146
147        switch ($_POST['mode']){
148        case 'set1':
149            $this->arrErr = $this->lfErrorCheck1($this->arrForm);
150            if (count($this->arrErr) == 0 && empty($_POST["return"])) {
151                $this->tpl_mainpage = 'shopping/set1.tpl';
152
153                $checkVal = array("pref", "addr01", "addr02", "addr03", "tel01", "tel02", "tel03");
154                foreach($checkVal as $key) {
155                    unset($this->list_data[$key]);
156                }
157
158                // 郵便番号から住所の取得
159                if (@$this->arrForm['pref'] == "" && @$this->arrForm['addr01'] == "" && @$this->arrForm['addr02'] == "") {
160                    $address = SC_Utils_Ex::sfGetAddress($_REQUEST['zip01'].$_REQUEST['zip02']);
161                    $this->arrForm['pref'] = @$address[0]['state'];
162                    $this->arrForm['addr01'] = @$address[0]['city'] . @$address[0]['town'];
163                }
164            } else {
165                $checkVal = array("name01", "name02", "kana01", "kana02", "zip01", "zip02");
166                foreach($checkVal as $key) {
167                    unset($this->list_data[$key]);
168                }
169            }
170            break;
171        case 'set2':
172            $this->arrErr = $this->lfErrorCheck2($this->arrForm);
173            if (count($this->arrErr) == 0 && empty($_POST["return"])) {
174                $this->tpl_mainpage = 'shopping/set2.tpl';
175            } else {
176                $this->tpl_mainpage = 'shopping/set1.tpl';
177
178                $checkVal = array("pref", "addr01", "addr02", "addr03", "tel01", "tel02", "tel03");
179                foreach($checkVal as $key) {
180                    unset($this->list_data[$key]);
181                }
182            }
183            break;
184        case 'complete':
185            $this->arrErr = $this->lfErrorCheck($this->arrForm);
186            if (count($this->arrErr) == 0) {
187                // 登録
188                $other_deliv_id = $this->lfRegistData($_POST,$arrRegistColumn, $objCustomer);
189
190                // 登録済みの別のお届け先を受注一時テーブルに書き込む
191                $this->lfRegistOtherDelivData($uniqid, $objCustomer, $other_deliv_id);
192
193                // 正常に登録されたことを記録しておく
194                $objSiteSess->setRegistFlag();
195                // お支払い方法選択ページへ移動
196                $this->objDisplay->redirect($this->getLocation(MOBILE_URL_SHOP_PAYMENT));
197                exit;
198            } else {
199                SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
200            }
201            break;
202        default:
203            $deliv_count = $objQuery->count("dtb_other_deliv", "customer_id=?", array($objCustomer->getValue('customer_id')));
204            if ($deliv_count >= DELIV_ADDR_MAX){
205                SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG, "", false, "最大登録件数を超えています。");
206            }
207        }
208    }
209
210    /* エラーチェック */
211    function lfErrorCheck() {
212        $objErr = new SC_CheckError();
213
214        $objErr->doFunc(array("お名前(姓)", 'name01', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
215        $objErr->doFunc(array("お名前(名)", 'name02', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK"));
216        $objErr->doFunc(array("お名前(フリガナ・姓)", 'kana01', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANA_CHECK"));
217        $objErr->doFunc(array("お名前(フリガナ・名)", 'kana02', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANA_CHECK"));
218        $objErr->doFunc(array("郵便番号1", "zip01", ZIP01_LEN ) ,array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
219        $objErr->doFunc(array("郵便番号2", "zip02", ZIP02_LEN ) ,array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
220        $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK"));
221        $objErr->doFunc(array("都道府県", 'pref'), array("SELECT_CHECK","NUM_CHECK"));
222        $objErr->doFunc(array('住所1', "addr01", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
223        $objErr->doFunc(array('住所2', "addr02", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
224        $objErr->doFunc(array("電話番号1", 'tel01'), array("EXIST_CHECK","NUM_CHECK"));
225        $objErr->doFunc(array("電話番号2", 'tel02'), array("EXIST_CHECK","NUM_CHECK"));
226        $objErr->doFunc(array("電話番号3", 'tel03'), array("EXIST_CHECK","NUM_CHECK"));
227        $objErr->doFunc(array("電話番号", "tel01", "tel02", "tel03") ,array("TEL_CHECK"));
228        return $objErr->arrErr;
229
230    }
231
232    /* エラーチェック */
233    function lfErrorCheck1() {
234        $objErr = new SC_CheckError();
235
236        $objErr->doFunc(array("お名前(姓)", 'name01', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
237        $objErr->doFunc(array("お名前(名)", 'name02', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK"));
238        $objErr->doFunc(array("お名前(フリガナ・姓)", 'kana01', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANA_CHECK"));
239        $objErr->doFunc(array("お名前(フリガナ・名)", 'kana02', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANA_CHECK"));
240        $objErr->doFunc(array("郵便番号1", "zip01", ZIP01_LEN ) ,array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
241        $objErr->doFunc(array("郵便番号2", "zip02", ZIP02_LEN ) ,array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
242        $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK"));
243        return $objErr->arrErr;
244
245    }
246
247    /* エラーチェック */
248    function lfErrorCheck2() {
249        $objErr = new SC_CheckError();
250
251        $objErr->doFunc(array("都道府県", 'pref'), array("SELECT_CHECK","NUM_CHECK"));
252        $objErr->doFunc(array('住所1', "addr01", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
253        $objErr->doFunc(array('住所2', "addr02", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
254        $objErr->doFunc(array("電話番号1", 'tel01'), array("EXIST_CHECK","NUM_CHECK"));
255        $objErr->doFunc(array("電話番号2", 'tel02'), array("EXIST_CHECK","NUM_CHECK"));
256        $objErr->doFunc(array("電話番号3", 'tel03'), array("EXIST_CHECK","NUM_CHECK"));
257        $objErr->doFunc(array("電話番号", "tel01", "tel02", "tel03") ,array("TEL_CHECK"));
258        return $objErr->arrErr;
259
260    }
261
262
263
264    /* 登録実行 */
265    function lfRegistData($array, $arrRegistColumn, &$objCustomer) {
266
267        $objQuery = new SC_Query();
268        foreach ($arrRegistColumn as $data) {
269            if (strlen($array[ $data["column"] ]) > 0) {
270                $arrRegist[ $data["column"] ] = $array[ $data["column"] ];
271            }
272        }
273
274        $arrRegist['customer_id'] = $objCustomer->getvalue('customer_id');
275
276        //-- 編集登録実行
277        $objQuery->begin();
278        if ($array['other_deliv_id'] != ""){
279            $objQuery->update("dtb_other_deliv", $arrRegist, "other_deliv_id="  . SC_Utils_Ex::sfQuoteSmart($array["other_deliv_id"]));
280        }else{
281            $arrRegist['other_deliv_id'] = $objQuery->nextVal('dtb_other_deliv_other_deliv_id');
282            $objQuery->insert("dtb_other_deliv", $arrRegist);
283            $array['other_deliv_id'] = $arrRegist['other_deliv_id'];
284        }
285
286        $objQuery->commit();
287
288        return $array['other_deliv_id'];
289    }
290
291    //---- 取得文字列の変換
292    function lfConvertParam($array, $arrRegistColumn) {
293        /*
294         *  文字列の変換
295         *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
296         *  C :  「全角ひら仮名」を「全角かた仮名」に変換
297         *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
298         *  n :  「全角」数字を「半角(ハンカク)」に変換
299         *  a :  全角英数字を半角英数字に変換する
300         */
301        // カラム名とコンバート情報
302        foreach ($arrRegistColumn as $data) {
303            $arrConvList[ $data["column"] ] = $data["convert"];
304        }
305
306        // 文字変換
307        foreach ($arrConvList as $key => $val) {
308            // POSTされてきた値のみ変換する。
309            if(strlen(($array[$key])) > 0) {
310                $array[$key] = mb_convert_kana($array[$key] ,$val);
311            }
312        }
313        return $array;
314    }
315
316    /* 別のお届け先住所を一時受注テーブルへ */
317    function lfRegistOtherDelivData($uniqid, $objCustomer, $other_deliv_id) {
318        // 登録データの作成
319        $sqlval['order_temp_id'] = $uniqid;
320        $sqlval['update_date'] = 'Now()';
321        $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
322        $sqlval['order_birth'] = $objCustomer->getValue('birth');
323
324        $objQuery = new SC_Query();
325        $where = "other_deliv_id = ?";
326        $arrRet = $objQuery->select("*", "dtb_other_deliv", $where, array($other_deliv_id));
327
328        $sqlval['deliv_check'] = '1';
329        $sqlval['deliv_name01'] = $arrRet[0]['name01'];
330        $sqlval['deliv_name02'] = $arrRet[0]['name02'];
331        $sqlval['deliv_kana01'] = $arrRet[0]['kana01'];
332        $sqlval['deliv_kana02'] = $arrRet[0]['kana02'];
333        $sqlval['deliv_zip01'] = $arrRet[0]['zip01'];
334        $sqlval['deliv_zip02'] = $arrRet[0]['zip02'];
335        $sqlval['deliv_pref'] = $arrRet[0]['pref'];
336        $sqlval['deliv_addr01'] = $arrRet[0]['addr01'];
337        $sqlval['deliv_addr02'] = $arrRet[0]['addr02'];
338        $sqlval['deliv_tel01'] = $arrRet[0]['tel01'];
339        $sqlval['deliv_tel02'] = $arrRet[0]['tel02'];
340        $sqlval['deliv_tel03'] = $arrRet[0]['tel03'];
341        $objDb = new SC_Helper_DB_Ex();
342        $objDb->sfRegistTempOrder($uniqid, $sqlval);
343    }
344
345    /**
346     * デストラクタ.
347     *
348     * @return void
349     */
350    function destroy() {
351        parent::destroy();
352    }
353}
354?>
Note: See TracBrowser for help on using the repository browser.