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

Revision 18684, 15.1 KB checked in by nanasess, 12 years ago (diff)

電話番号2, 3に数字以外を入力すると重複してエラーが表示される不具合修正(#756)

  • 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 * This file is part of EC-CUBE
4 *
5 * Copyright(c) 2000-2007 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_PATH . "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    }
55
56    /**
57     * モバイルページを初期化する.
58     *
59     * @return void
60     */
61    function mobileInit() {
62        $this->tpl_mainpage = 'shopping/deliv_addr.tpl';
63        $this->tpl_title = "新しいお届け先の追加";
64        $masterData = new SC_DB_MasterData_Ex();
65        $this->arrPref = $masterData->getMasterData("mtb_pref", array("pref_id", "pref_name", "rank"));
66    }
67
68    /**
69     * Page のプロセス(モバイル).
70     *
71     * @return void
72     */
73    function mobileProcess() {
74        $objView = new SC_MobileView(false);
75        $objQuery = new SC_Query();
76        $objCustomer = new SC_Customer();
77        $objSiteSess = new SC_SiteSession();
78        $objCartSess = new SC_CartSession();
79
80        //ログイン判定
81        if (!$objCustomer->isLoginSuccess(true)){
82            SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR, "", false, "", true);
83        }
84
85        $this->arrForm = $_POST;
86
87        //-- データ設定
88        foreach($_POST as $key => $val) {
89            if ($key != "mode" && $key != "return" && $key != "submit" && $key != session_name()) {
90                $this->list_data[ $key ] = $val;
91            }
92        }
93        // ユーザユニークIDの取得と購入状態の正当性をチェック
94        $uniqid = SC_Utils_Ex::sfCheckNormalAccess($objSiteSess, $objCartSess);
95
96        //別のお届け先DB登録用カラム配列
97        $arrRegistColumn = array(
98                                 array(  "column" => "name01",      "convert" => "aKV" ),
99                                 array(  "column" => "name02",      "convert" => "aKV" ),
100                                 array(  "column" => "kana01",      "convert" => "CKV" ),
101                                 array(  "column" => "kana02",      "convert" => "CKV" ),
102                                 array(  "column" => "zip01",       "convert" => "n" ),
103                                 array(  "column" => "zip02",       "convert" => "n" ),
104                                 array(  "column" => "pref",        "convert" => "n" ),
105                                 array(  "column" => "addr01",      "convert" => "aKV" ),
106                                 array(  "column" => "addr02",      "convert" => "aKV" ),
107                                 array(  "column" => "tel01",       "convert" => "n" ),
108                                 array(  "column" => "tel02",       "convert" => "n" ),
109                                 array(  "column" => "tel03",       "convert" => "n" ),
110                                 );
111
112        // 戻るボタン用処理
113        if (!empty($_POST["return"])) {
114            switch ($_POST["mode"]) {
115            case 'complete':
116                $_POST["mode"] = "set2";
117                break;
118            case 'set2':
119                $_POST["mode"] = "set1";
120                break;
121            default:
122                $this->sendRedirect($this->getLocation("./deliv.php"), true);
123                exit;
124            }
125        }
126
127        switch ($_POST['mode']){
128        case 'set1':
129            $this->arrErr = $this->lfErrorCheck1($this->arrForm);
130            if (count($this->arrErr) == 0 && empty($_POST["return"])) {
131                $this->tpl_mainpage = 'shopping/set1.tpl';
132
133                $checkVal = array("pref", "addr01", "addr02", "addr03", "tel01", "tel02", "tel03");
134                foreach($checkVal as $key) {
135                    unset($this->list_data[$key]);
136                }
137
138                // 郵便番号から住所の取得
139                if (@$this->arrForm['pref'] == "" && @$this->arrForm['addr01'] == "" && @$this->arrForm['addr02'] == "") {
140                    $address = $this->lfGetAddress($_REQUEST['zip01'].$_REQUEST['zip02']);
141                    $this->arrForm['pref'] = @$address[0]['state'];
142                    $this->arrForm['addr01'] = @$address[0]['city'] . @$address[0]['town'];
143                }
144            } else {
145                $checkVal = array("name01", "name02", "kana01", "kana02", "zip01", "zip02");
146                foreach($checkVal as $key) {
147                    unset($this->list_data[$key]);
148                }
149            }
150            break;
151        case 'set2':
152            $this->arrErr = $this->lfErrorCheck2($this->arrForm);
153            if (count($this->arrErr) == 0 && empty($_POST["return"])) {
154                $this->tpl_mainpage = 'shopping/set2.tpl';
155            } else {
156                $this->tpl_mainpage = 'shopping/set1.tpl';
157
158                $checkVal = array("pref", "addr01", "addr02", "addr03", "tel01", "tel02", "tel03");
159                foreach($checkVal as $key) {
160                    unset($this->list_data[$key]);
161                }
162            }
163            break;
164        case 'complete':
165            $this->arrErr = $this->lfErrorCheck($this->arrForm);
166            if (count($this->arrErr) == 0) {
167                // 登録
168                $other_deliv_id = $this->lfRegistData($_POST,$arrRegistColumn, $objCustomer);
169
170                // 登録済みの別のお届け先を受注一時テーブルに書き込む
171                $this->lfRegistOtherDelivData($uniqid, $objCustomer, $other_deliv_id);
172
173                // 正常に登録されたことを記録しておく
174                $objSiteSess->setRegistFlag();
175                // お支払い方法選択ページへ移動
176                $this->sendRedirect($this->getLocation(MOBILE_URL_SHOP_PAYMENT), true);
177                exit;
178            } else {
179                SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR, "", false, "", true);
180            }
181            break;
182        default:
183            $deliv_count = $objQuery->count("dtb_other_deliv", "customer_id=?", array($objCustomer->getValue('customer_id')));
184            if ($deliv_count >= DELIV_ADDR_MAX){
185                SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG, "", false, "最大登録件数を超えています。");
186            }
187        }
188
189        $objView->assignobj($this);
190        $objView->display(SITE_FRAME);
191    }
192
193    /* エラーチェック */
194    function lfErrorCheck() {
195        $objErr = new SC_CheckError();
196
197        $objErr->doFunc(array("お名前(姓)", 'name01', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
198        $objErr->doFunc(array("お名前(名)", 'name02', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK"));
199        $objErr->doFunc(array("お名前(カナ/姓)", 'kana01', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANA_CHECK"));
200        $objErr->doFunc(array("お名前(カナ/名)", 'kana02', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANA_CHECK"));
201        $objErr->doFunc(array("郵便番号1", "zip01", ZIP01_LEN ) ,array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
202        $objErr->doFunc(array("郵便番号2", "zip02", ZIP02_LEN ) ,array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
203        $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK"));
204        $objErr->doFunc(array("都道府県", 'pref'), array("SELECT_CHECK","NUM_CHECK"));
205        $objErr->doFunc(array("市区町村", "addr01", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
206        $objErr->doFunc(array("番地", "addr02", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
207        $objErr->doFunc(array("電話番号1", 'tel01'), array("EXIST_CHECK","NUM_CHECK"));
208        $objErr->doFunc(array("電話番号2", 'tel02'), array("EXIST_CHECK","NUM_CHECK"));
209        $objErr->doFunc(array("電話番号3", 'tel03'), array("EXIST_CHECK","NUM_CHECK"));
210        $objErr->doFunc(array("電話番号", "tel01", "tel02", "tel03", TEL_LEN) ,array("TEL_CHECK"));
211        return $objErr->arrErr;
212
213    }
214
215    /* エラーチェック */
216    function lfErrorCheck1() {
217        $objErr = new SC_CheckError();
218
219        $objErr->doFunc(array("お名前(姓)", 'name01', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
220        $objErr->doFunc(array("お名前(名)", 'name02', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK"));
221        $objErr->doFunc(array("お名前(カナ/姓)", 'kana01', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANA_CHECK"));
222        $objErr->doFunc(array("お名前(カナ/名)", 'kana02', STEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANA_CHECK"));
223        $objErr->doFunc(array("郵便番号1", "zip01", ZIP01_LEN ) ,array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
224        $objErr->doFunc(array("郵便番号2", "zip02", ZIP02_LEN ) ,array("EXIST_CHECK", "NUM_CHECK", "NUM_COUNT_CHECK"));
225        $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK"));
226        return $objErr->arrErr;
227
228    }
229
230    /* エラーチェック */
231    function lfErrorCheck2() {
232        $objErr = new SC_CheckError();
233
234        $objErr->doFunc(array("都道府県", 'pref'), array("SELECT_CHECK","NUM_CHECK"));
235        $objErr->doFunc(array("市区町村", "addr01", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
236        $objErr->doFunc(array("番地", "addr02", MTEXT_LEN), array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
237        $objErr->doFunc(array("電話番号1", 'tel01'), array("EXIST_CHECK"));
238        $objErr->doFunc(array("電話番号2", 'tel02'), array("EXIST_CHECK"));
239        $objErr->doFunc(array("電話番号3", 'tel03'), array("EXIST_CHECK"));
240        $objErr->doFunc(array("電話番号", "tel01", "tel02", "tel03", TEL_LEN) ,array("TEL_CHECK"));
241        return $objErr->arrErr;
242
243    }
244
245
246
247    /* 登録実行 */
248    function lfRegistData($array, $arrRegistColumn, &$objCustomer) {
249
250        $objConn = new SC_DBConn();
251        foreach ($arrRegistColumn as $data) {
252            if (strlen($array[ $data["column"] ]) > 0) {
253                $arrRegist[ $data["column"] ] = $array[ $data["column"] ];
254            }
255        }
256
257        $arrRegist['customer_id'] = $objCustomer->getvalue('customer_id');
258
259        //-- 編集登録実行
260        $objConn->query("BEGIN");
261        if ($array['other_deliv_id'] != ""){
262            $objConn->autoExecute("dtb_other_deliv", $arrRegist, "other_deliv_id="  . SC_Utils_Ex::sfQuoteSmart($array["other_deliv_id"]));
263        }else{
264            $objConn->autoExecute("dtb_other_deliv", $arrRegist);
265
266            $sqlse = "SELECT max(other_deliv_id) FROM dtb_other_deliv WHERE customer_id = ?";
267            $array['other_deliv_id'] = $objConn->getOne($sqlse, array($arrRegist['customer_id']));
268        }
269
270        $objConn->query("COMMIT");
271
272        return $array['other_deliv_id'];
273    }
274
275    //---- 取得文字列の変換
276    function lfConvertParam($array, $arrRegistColumn) {
277        /*
278         *  文字列の変換
279         *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
280         *  C :  「全角ひら仮名」を「全角かた仮名」に変換
281         *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
282         *  n :  「全角」数字を「半角(ハンカク)」に変換
283         *  a :  全角英数字を半角英数字に変換する
284         */
285        // カラム名とコンバート情報
286        foreach ($arrRegistColumn as $data) {
287            $arrConvList[ $data["column"] ] = $data["convert"];
288        }
289
290        // 文字変換
291        foreach ($arrConvList as $key => $val) {
292            // POSTされてきた値のみ変換する。
293            if(strlen(($array[$key])) > 0) {
294                $array[$key] = mb_convert_kana($array[$key] ,$val);
295            }
296        }
297        return $array;
298    }
299
300    // 郵便番号から住所の取得
301    function lfGetAddress($zipcode) {
302
303        $conn = new SC_DBconn(ZIP_DSN);
304
305        // 郵便番号検索文作成
306        $zipcode = mb_convert_kana($zipcode ,"n");
307        $sqlse = "SELECT state, city, town FROM mtb_zip WHERE zipcode = ?";
308
309        $data_list = $conn->getAll($sqlse, array($zipcode));
310
311        // インデックスと値を反転させる。
312        $arrREV_PREF = array_flip($this->arrPref);
313
314        /*
315          総務省からダウンロードしたデータをそのままインポートすると
316          以下のような文字列が入っているので 対策する。
317          ・(1・19丁目)
318          ・以下に掲載がない場合
319        */
320        $town =  $data_list[0]['town'];
321        $town = ereg_replace("(.*)$","",$town);
322        $town = ereg_replace("以下に掲載がない場合","",$town);
323        $data_list[0]['town'] = $town;
324        $data_list[0]['state'] = $arrREV_PREF[$data_list[0]['state']];
325
326        return $data_list;
327    }
328
329    /* 別のお届け先住所を一時受注テーブルへ */
330    function lfRegistOtherDelivData($uniqid, $objCustomer, $other_deliv_id) {
331        // 登録データの作成
332        $sqlval['order_temp_id'] = $uniqid;
333        $sqlval['update_date'] = 'Now()';
334        $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
335        $sqlval['order_birth'] = $objCustomer->getValue('birth');
336
337        $objQuery = new SC_Query();
338        $where = "other_deliv_id = ?";
339        $arrRet = $objQuery->select("*", "dtb_other_deliv", $where, array($other_deliv_id));
340
341        $sqlval['deliv_check'] = '1';
342        $sqlval['deliv_name01'] = $arrRet[0]['name01'];
343        $sqlval['deliv_name02'] = $arrRet[0]['name02'];
344        $sqlval['deliv_kana01'] = $arrRet[0]['kana01'];
345        $sqlval['deliv_kana02'] = $arrRet[0]['kana02'];
346        $sqlval['deliv_zip01'] = $arrRet[0]['zip01'];
347        $sqlval['deliv_zip02'] = $arrRet[0]['zip02'];
348        $sqlval['deliv_pref'] = $arrRet[0]['pref'];
349        $sqlval['deliv_addr01'] = $arrRet[0]['addr01'];
350        $sqlval['deliv_addr02'] = $arrRet[0]['addr02'];
351        $sqlval['deliv_tel01'] = $arrRet[0]['tel01'];
352        $sqlval['deliv_tel02'] = $arrRet[0]['tel02'];
353        $sqlval['deliv_tel03'] = $arrRet[0]['tel03'];
354        $objDb = new SC_Helper_DB_Ex();
355        $objDb->sfRegistTempOrder($uniqid, $sqlval);
356    }
357
358    /**
359     * デストラクタ.
360     *
361     * @return void
362     */
363    function destroy() {
364        parent::destroy();
365    }
366}
367?>
Note: See TracBrowser for help on using the repository browser.