[Svn-src-all:1392] [version-2_5-dev 20282] refs #982 繝ェ繝輔ぃ繧ッ繧ソ繝ェ繝ウ繧ッ繧呻シ壹き繝シ繝育判髱「

tao admin @ mail.ec-cube.net
2011年 2月 21日 (月) 02:18:18 JST


Subversion committed to /home/svn/open 20282
http://svn.ec-cube.net/open_trac/changeset/20282
┌────────────────────────────┐
│更新者 :  tao                                          │
│更新日時:  2011-02-21 02:18:18 +0900 (月, 21  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
refs #982 リファクタリンク:カート画面

Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/class/pages/cart/LC_Page_Cart.php

変更: branches/version-2_5-dev/data/class/pages/cart/LC_Page_Cart.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/cart/LC_Page_Cart.php	2011-02-20 17:13:44 UTC (rev 20281)
+++ branches/version-2_5-dev/data/class/pages/cart/LC_Page_Cart.php	2011-02-20 17:18:18 UTC (rev 20282)
@@ -47,6 +47,10 @@
     /** 商品規格情報の配列 */
     var $arrData;
 
+    /** 動作モード */
+    var $mode;
+
+
     // }}}
     // {{{ functions
 
@@ -84,6 +88,9 @@
         $objSiteSess = new SC_SiteSession();
         $objSiteInfo = $objView->objSiteInfo;
         $objCustomer = new SC_Customer();
+        
+        $objFormParam = $this->lfInitParam($_REQUEST);
+        $this->mode = $this->getMode();
 
         $this->cartKeys = $objCartSess->getKeys();
         foreach ($this->cartKeys as $key) {
@@ -94,71 +101,37 @@
         }
         $this->cartItems =& $objCartSess->getAllCartList();
 
-        //TODO: 要リファクタリング(MODE switch 2か所で行われている)
-        switch($this->getMode()) {
+        $cart_no = $objFormParam->getValue('cart_no');
+        $cartKey = $objFormParam->getValue('cartKey');
+        
+        switch($this->mode) {
         case 'confirm':
             // カート内情報の取得
-            $cartKey = $_POST['cartKey'];
             $cartList = $objCartSess->getCartList($cartKey);
             // カート商品が1件以上存在する場合
             if(count($cartList) > 0) {
-                // 正常に登録されたことを記録しておく
-                $objSiteSess->setRegistFlag();
-                $pre_uniqid = $objSiteSess->getUniqId();
-                // 注文一時IDの発行
-                $objSiteSess->setUniqId();
-                $uniqid = $objSiteSess->getUniqId();
-                // エラーリトライなどで既にuniqidが存在する場合は、設定を引き継ぐ
-                if($pre_uniqid != "") {
-                    $sqlval['order_temp_id'] = $uniqid;
-                    $where = "order_temp_id = ?";
-                    $objQuery = new SC_Query();
-                    $objQuery->update("dtb_order_temp", $sqlval, $where, array($pre_uniqid));
-                }
                 // カートを購入モードに設定
-                $objCartSess->saveCurrentCart($uniqid, $cartKey);
+                $this->lfSetCurrentCart($objSiteSess,$objCartSess);
                 // 購入ページへ
                 SC_Response_Ex::sendRedirect(SHOPPING_URL);
                 exit;
             }
             break;
-        default:
+        case 'up'://1個追加
+            $objCartSess->upQuantity($cart_no, $cartKey);
+            //SC_Response_Ex::reload();
+            $this->lfReload();
             break;
-        }
-
-        // 商品の個数変更、削除処理
-        /*
-         * FIXME モバイルの場合 sfReload() ではなく sendRedirect() を使った方が良いが無限ループしてしまう...
-         */
-        //TODO: 要リファクタリング(MODE switch 2か所で行われている)
-        switch($this->getMode()) {
-        case 'up':
-            if(Net_UserAgent_Mobile::isMobile() === true) {
-                $objCartSess->upQuantity($_GET['cart_no'], $_GET['cartKey']);
-                SC_Utils_Ex::sfReload(session_name() . "=" . session_id());
-            } else {
-                $objCartSess->upQuantity($_POST['cart_no'], $_POST['cartKey']);
-                $this->objDisplay->reload(); // PRG pattern
-            }
+        case 'down'://1個減らす
+            $objCartSess->downQuantity($cart_no, $cartKey);
+            //SC_Response_Ex::reload();
+            $this->lfReload();
             break;
-        case 'down':
-            if(Net_UserAgent_Mobile::isMobile() === true) {
-                $objCartSess->downQuantity($_GET['cart_no'], $_GET['cartKey']);
-                SC_Utils_Ex::sfReload(session_name() . "=" . session_id());
-            } else {
-                $objCartSess->downQuantity($_POST['cart_no'], $_POST['cartKey']);
-                $this->objDisplay->reload(); // PRG pattern
-            }
+        case 'delete'://カートから削除
+            $objCartSess->delProduct($cart_no, $cartKey);
+            //SC_Response_Ex::reload();
+            $this->lfReload();
             break;
-        case 'delete':
-            if(Net_UserAgent_Mobile::isMobile() === true) {
-                $objCartSess->delProduct($_GET['cart_no'], $_GET['cartKey']);
-                SC_Utils_Ex::sfReload(session_name() . "=" . session_id());
-            } else {
-                $objCartSess->delProduct($_POST['cart_no'], $_POST['cartKey']);
-                $this->objDisplay->reload(); // PRG pattern
-            }
-            break;
         default:
             break;
         }
@@ -187,33 +160,113 @@
 
         // 前頁のURLを取得
         // TODO: SC_CartSession::setPrevURL()利用不可。
-        if (!preg_match("/cart/", $_SERVER['HTTP_REFERER'])) {
-            if (!empty($_SESSION['cart_referer_url'])) {
-                $_SESSION['cart_prev_url'] = $_SESSION['cart_referer_url'];
-                unset($_SESSION['cart_referer_url']);
+        $this->lfGetCartPrevUrl($_SESSION,$_SERVER['HTTP_REFERER']);
+
+        $this->tpl_prev_url = (isset($_SESSION['cart_prev_url'])) ? $_SESSION['cart_prev_url'] : '';
+    }
+
+    /**
+     * デストラクタ.
+     *
+     * @return void
+     */
+    function destroy() {
+        parent::destroy();
+    }
+    
+
+    /**
+     * ユーザ入力値の処理
+     *
+     * @return object
+     */
+    function lfInitParam($arrRequest) {
+        $objFormParam = new SC_FormParam();
+        $objFormParam->addParam("カートキー", "cartKey", INT_LEN, "n", array('NUM_CHECK',"MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("カートナンバー", "cart_no", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK"));
+        // 値の取得
+        $objFormParam->setParam($arrRequest);
+        // 入力値の変換
+        $objFormParam->convParam();
+        return $objFormParam;        
+    }
+
+    /**
+     * order_temp_id の更新
+     *
+     * @return 
+     */    
+    function lfUpdateOrderTempid($pre_uniqid,$uniqid){
+        $sqlval['order_temp_id'] = $uniqid;
+        $where = "order_temp_id = ?";
+        $objQuery =& SC_Query::getSingletonInstance();
+        $res = $objQuery->update("dtb_order_temp", $sqlval, $where, array($pre_uniqid));
+        if($res != 1){
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 前頁のURLを取得
+     *
+     * @return void
+     */        
+    function lfGetCartPrevUrl(&$session,$referer){
+        if (!preg_match("/cart/", $referer)) {
+            if (!empty($session['cart_referer_url'])) {
+                $session['cart_prev_url'] = $session['cart_referer_url'];
+                unset($session['cart_referer_url']);
             } else {
-                if (preg_match("/entry/", $_SERVER['HTTP_REFERER'])) {
-                    $_SESSION['cart_prev_url'] = HTTPS_URL . 'entry/kiyaku.php';
+                if (preg_match("/entry/", $referer)) {
+                    $session['cart_prev_url'] = HTTPS_URL . 'entry/kiyaku.php';
                 } else {
-                    $_SESSION['cart_prev_url'] = $_SERVER['HTTP_REFERER'];
+                    $session['cart_prev_url'] = $referer;
                 }
             }
         }
         // 妥当性チェック
-        if (!SC_Utils_Ex::sfIsInternalDomain($_SESSION['cart_prev_url'])) {
-            $_SESSION['cart_prev_url'] = '';
+        if (!SC_Utils_Ex::sfIsInternalDomain($session['cart_prev_url'])) {
+            $session['cart_prev_url'] = '';
+        }  
+    }
+    
+    /**
+     * カートを購入モードに設定
+     *
+     * @return void
+     */            
+    function lfSetCurrentCart(&$objSiteSess,&$objCartSess){
+        // 正常に登録されたことを記録しておく
+        $objSiteSess->setRegistFlag();
+        $pre_uniqid = $objSiteSess->getUniqId();
+        // 注文一時IDの発行
+        $objSiteSess->setUniqId();
+        $uniqid = $objSiteSess->getUniqId();
+        // エラーリトライなどで既にuniqidが存在する場合は、設定を引き継ぐ
+        if($pre_uniqid != "") {
+            $this->lfUpdateOrderTempid($pre_uniqid,$uniqid);
         }
-
-        $this->tpl_prev_url = (isset($_SESSION['cart_prev_url'])) ? $_SESSION['cart_prev_url'] : '';
+        // カートを購入モードに設定
+        $objCartSess->saveCurrentCart($uniqid, $cartKey);
     }
 
     /**
-     * デストラクタ.
+     * 端末ごとのリロード処理
      *
      * @return void
-     */
-    function destroy() {
-        parent::destroy();
+     */                
+    function lfReload(){
+        //FIXME SC_Response_Ex::reload()だと携帯で無限リダイレクト
+        if(SC_Display::detectDevice() == DEVICE_TYPE_MOBILE){
+            $_SERVER['REQUEST_URI'] = str_replace("mode=delete","",$_SERVER['REQUEST_URI']);
+            $_SERVER['REQUEST_URI'] = str_replace("mode=up","",$_SERVER['REQUEST_URI']);
+            $_SERVER['REQUEST_URI'] = str_replace("mode=down","",$_SERVER['REQUEST_URI']);
+            $_SERVER['REQUEST_URI'] = str_replace("&&","&",$_SERVER['REQUEST_URI']);
+            $this->objDisplay->reload();
+            exit;
+        }
+        SC_Response_Ex::reload();
     }
 }
 ?>




Svn-src-all メーリングリストの案内