Page
[ class tree: Page ] [ index: Page ] [ all elements ]

Source for file LC_Page_Mypage_DeliveryAddr.php

Documentation is available at LC_Page_Mypage_DeliveryAddr.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2011 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
  25. require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Ex.php';
  26.  
  27. /**
  28.  * お届け先追加 のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id: LC_Page_Mypage_DeliveryAddr.php 21012 2011-07-04 05:46:12Z shutta $
  33.  */
  34. class LC_Page_Mypage_DeliveryAddr extends LC_Page_Ex {
  35.  
  36.     // }}}
  37.     // {{{ functions
  38.  
  39.     /**
  40.      * Page を初期化する.
  41.      *
  42.      * @return void 
  43.      */
  44.     function init() {
  45.         parent::init();
  46.         $this->tpl_title    = "お届け先の追加・変更";
  47.         $masterData         = new SC_DB_MasterData_Ex();
  48.         $this->arrPref      = $masterData->getMasterData('mtb_pref');
  49.         $this->httpCacheControl('nocache');
  50.         $this->validUrl = array(MYPAGE_DELIVADDR_URLPATH,
  51.                                 DELIV_URLPATH,
  52.                                 MULTIPLE_URLPATH);
  53.     }
  54.  
  55.     /**
  56.      * Page のプロセス.
  57.      *
  58.      * @return void 
  59.      */
  60.     function process() {
  61.         parent::process();
  62.         $this->action();
  63.         $this->sendResponse();
  64.     }
  65.  
  66.     /**
  67.      * Page のAction.
  68.      *
  69.      * @return void 
  70.      */
  71.     function action() {
  72.         $objCustomer = new SC_Customer_Ex();
  73.         $ParentPage  = MYPAGE_DELIVADDR_URLPATH;
  74.  
  75.         // GETでページを指定されている場合には指定ページに戻す
  76.         if (isset($_GET['page'])) {
  77.             $ParentPage = htmlspecialchars($_GET['page'], ENT_QUOTES);
  78.         } else if (isset($_POST['ParentPage'])) {
  79.             $ParentPage = htmlspecialchars($_POST['ParentPage'], ENT_QUOTES);
  80.         }
  81.         $this->ParentPage = $ParentPage;
  82.  
  83.         /*
  84.          * ログイン判定 及び 退会判定
  85.          * 未ログインでも, 複数配送設定ページからのアクセスの場合は表示する
  86.          *
  87.          * TODO 購入遷移とMyPageで別クラスにすべき
  88.          */
  89.         if (!$objCustomer->isLoginSuccess(true) && $ParentPage != MULTIPLE_URLPATH){
  90.             $this->tpl_onload = "fnUpdateParent('". $this->getLocation($_POST['ParentPage']) ."'); window.close();";
  91.         }
  92.  
  93.         // other_deliv_id のあるなしで追加か編集か判定しているらしい
  94.         $_SESSION['other_deliv_id'] = $_REQUEST['other_deliv_id'];
  95.  
  96.         // パラメーター管理クラス,パラメーター情報の初期化
  97.         $objFormParam   = new SC_FormParam_Ex();
  98.         SC_Helper_Customer_Ex::sfCustomerOtherDelivParam($objFormParam);
  99.         $objFormParam->setParam($_POST);
  100.         $this->arrForm  = $objFormParam->getHashArray();
  101.  
  102.         switch ($this->getMode()) {
  103.             // 入力は必ずedit
  104.             case 'edit':
  105.                 $this->arrErr = SC_Helper_Customer_Ex::sfCustomerOtherDelivErrorCheck($objFormParam);
  106.                 // 入力エラーなし
  107.                 if(empty($this->arrErr)) {
  108.  
  109.                     // TODO ここでやるべきではない
  110.                     if (in_array($_POST['ParentPage'], $this->validUrl)) {
  111.                         $this->tpl_onload = "fnUpdateParent('". $this->getLocation($_POST['ParentPage']) ."'); window.close();";
  112.                     } else {
  113.                         SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
  114.                     }
  115.  
  116.                     if ($objCustomer->isLoginSuccess(true)) {
  117.                         $this->lfRegistData($objFormParam, $objCustomer->getValue("customer_id"));
  118.                     } else {
  119.                         $this->lfRegistDataNonMember($objFormParam);
  120.                     }
  121.  
  122.                     if(SC_Display_Ex::detectDevice() === DEVICE_TYPE_MOBILE) {
  123.                         // モバイルの場合、元のページに遷移
  124.                         SC_Response_Ex::sendRedirect($this->getLocation($_POST['ParentPage']));
  125.                         exit;
  126.                     }
  127.                 }
  128.                 break;
  129.             case 'multiple':
  130.                 // 複数配送先用
  131.                 break;
  132.             default :
  133.  
  134.                 if ($_GET['other_deliv_id'] != ""){
  135.                     $arrOtherDeliv = $this->lfGetOtherDeliv($objCustomer->getValue("customer_id"), $_SESSION['other_deliv_id']);
  136.  
  137.                     //不正アクセス判定
  138.                     if (!$objCustomer->isLoginSuccess(true)
  139.                         || count($arrOtherDeliv) == 0){
  140.                         SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
  141.                     }
  142.  
  143.                     //別のお届け先情報取得
  144.                     $this->arrForm = $arrOtherDeliv[0];
  145.                 }
  146.                 break;
  147.         }
  148.  
  149.         if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_MOBILE) {
  150.             $this->tpl_mainpage = 'mypage/delivery_addr.tpl';
  151.         } else {
  152.             $this->setTemplate('mypage/delivery_addr.tpl');
  153.         }
  154.     }
  155.  
  156.     /**
  157.      * デストラクタ.
  158.      *
  159.      * @return void 
  160.      */
  161.     function destroy() {
  162.         parent::destroy();
  163.     }
  164.  
  165.     /**
  166.      * ほかのお届け先を取得する
  167.      *
  168.      * @param mixed $customer_id 
  169.      * @param mixed $other_deliv_id 
  170.      * @access private
  171.      * @return array() 
  172.      */
  173.     function lfGetOtherDeliv($customer_id, $other_deliv_id) {
  174.         $objQuery =& SC_Query_Ex::getSingletonInstance();
  175.         return $objQuery->select("*", "dtb_other_deliv", "customer_id = ? AND other_deliv_id = ?", array($customer_id, $other_deliv_id));
  176.  
  177.          $arrOtherDeliv[0];
  178.     }
  179.  
  180.     /* 登録実行 */
  181.     function lfRegistData($objFormParam, $customer_id) {
  182.         $objQuery   =& SC_Query_Ex::getSingletonInstance();
  183.  
  184.         $arrRet     = $objFormParam->getHashArray();
  185.         $sqlval     = $objFormParam->getDbArray();
  186.  
  187.         $sqlval['customer_id'] = $customer_id;
  188.  
  189.         // 追加
  190.         if (strlen($arrRet['other_deliv_id'] == 0)) {
  191.             // 別のお届け先登録数の取得
  192.             $deliv_count = $objQuery->count("dtb_other_deliv", "customer_id = ?", array($customer_id));
  193.             // 別のお届け先最大登録数に達している場合、エラー
  194.             if ($deliv_count >= DELIV_ADDR_MAX) {
  195.                 SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG, "", false, '別のお届け先最大登録数に達しています。');
  196.             }
  197.  
  198.             // 実行
  199.             $sqlval['other_deliv_id'] = $objQuery->nextVal('dtb_other_deliv_other_deliv_id');
  200.             $objQuery->insert("dtb_other_deliv", $sqlval);
  201.  
  202.         // 変更
  203.         } else {
  204.             $deliv_count = $objQuery->count("dtb_other_deliv","customer_id = ? AND other_deliv_id = ?" ,array($customer_id, $arrRet['other_deliv_id']));
  205.             if ($deliv_count != 1) {
  206.                 SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG, "", false, '一致する別のお届け先がありません。');
  207.             }
  208.  
  209.             // 実行
  210.             $objQuery->update("dtb_other_deliv", $sqlval, "other_deliv_id = ?", array($arrRet['other_deliv_id']));
  211.         }
  212.     }
  213.  
  214.     function lfRegistDataNonMember($objFormParam) {
  215.         $arrRegistColumn = $objFormParam->getDbArray();
  216.         foreach ($arrRegistColumn as $key => $val) {
  217.             $arrRegist['shipping_' . $key ] = $val;
  218.         }
  219.         if (count($_SESSION['shipping']) >= DELIV_ADDR_MAX) {
  220.             SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG, "", false, '別のお届け先最大登録数に達しています。');
  221.         } else {
  222.             $_SESSION['shipping'][] = $arrRegist;
  223.         }
  224.     }
  225. }
  226. ?>

Documentation generated on Fri, 24 Feb 2012 14:02:06 +0900 by Seasoft