Changeset 20282


Ignore:
Timestamp:
2011/02/21 02:18:18 (13 years ago)
Author:
tao
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/pages/cart/LC_Page_Cart.php

    r20116 r20282  
    4848    var $arrData; 
    4949 
     50    /** 動作モード */ 
     51    var $mode; 
     52 
     53 
    5054    // }}} 
    5155    // {{{ functions 
     
    8589        $objSiteInfo = $objView->objSiteInfo; 
    8690        $objCustomer = new SC_Customer(); 
     91         
     92        $objFormParam = $this->lfInitParam($_REQUEST); 
     93        $this->mode = $this->getMode(); 
    8794 
    8895        $this->cartKeys = $objCartSess->getKeys(); 
     
    95102        $this->cartItems =& $objCartSess->getAllCartList(); 
    96103 
    97         //TODO: 要リファクタリング(MODE switch 2か所で行われている) 
    98         switch($this->getMode()) { 
     104        $cart_no = $objFormParam->getValue('cart_no'); 
     105        $cartKey = $objFormParam->getValue('cartKey'); 
     106         
     107        switch($this->mode) { 
    99108        case 'confirm': 
    100109            // カート内情報の取得 
    101             $cartKey = $_POST['cartKey']; 
    102110            $cartList = $objCartSess->getCartList($cartKey); 
    103111            // カート商品が1件以上存在する場合 
    104112            if(count($cartList) > 0) { 
    105                 // 正常に登録されたことを記録しておく 
    106                 $objSiteSess->setRegistFlag(); 
    107                 $pre_uniqid = $objSiteSess->getUniqId(); 
    108                 // 注文一時IDの発行 
    109                 $objSiteSess->setUniqId(); 
    110                 $uniqid = $objSiteSess->getUniqId(); 
    111                 // エラーリトライなどで既にuniqidが存在する場合は、設定を引き継ぐ 
    112                 if($pre_uniqid != "") { 
    113                     $sqlval['order_temp_id'] = $uniqid; 
    114                     $where = "order_temp_id = ?"; 
    115                     $objQuery = new SC_Query(); 
    116                     $objQuery->update("dtb_order_temp", $sqlval, $where, array($pre_uniqid)); 
    117                 } 
    118113                // カートを購入モードに設定 
    119                 $objCartSess->saveCurrentCart($uniqid, $cartKey); 
     114                $this->lfSetCurrentCart($objSiteSess,$objCartSess); 
    120115                // 購入ページへ 
    121116                SC_Response_Ex::sendRedirect(SHOPPING_URL); 
     
    123118            } 
    124119            break; 
    125         default: 
    126             break; 
    127         } 
    128  
    129         // 商品の個数変更、削除処理 
    130         /* 
    131          * FIXME モバイルの場合 sfReload() ではなく sendRedirect() を使った方が良いが無限ループしてしまう... 
    132          */ 
    133         //TODO: 要リファクタリング(MODE switch 2か所で行われている) 
    134         switch($this->getMode()) { 
    135         case 'up': 
    136             if(Net_UserAgent_Mobile::isMobile() === true) { 
    137                 $objCartSess->upQuantity($_GET['cart_no'], $_GET['cartKey']); 
    138                 SC_Utils_Ex::sfReload(session_name() . "=" . session_id()); 
    139             } else { 
    140                 $objCartSess->upQuantity($_POST['cart_no'], $_POST['cartKey']); 
    141                 $this->objDisplay->reload(); // PRG pattern 
    142             } 
    143             break; 
    144         case 'down': 
    145             if(Net_UserAgent_Mobile::isMobile() === true) { 
    146                 $objCartSess->downQuantity($_GET['cart_no'], $_GET['cartKey']); 
    147                 SC_Utils_Ex::sfReload(session_name() . "=" . session_id()); 
    148             } else { 
    149                 $objCartSess->downQuantity($_POST['cart_no'], $_POST['cartKey']); 
    150                 $this->objDisplay->reload(); // PRG pattern 
    151             } 
    152             break; 
    153         case 'delete': 
    154             if(Net_UserAgent_Mobile::isMobile() === true) { 
    155                 $objCartSess->delProduct($_GET['cart_no'], $_GET['cartKey']); 
    156                 SC_Utils_Ex::sfReload(session_name() . "=" . session_id()); 
    157             } else { 
    158                 $objCartSess->delProduct($_POST['cart_no'], $_POST['cartKey']); 
    159                 $this->objDisplay->reload(); // PRG pattern 
    160             } 
     120        case 'up'://1個追加 
     121            $objCartSess->upQuantity($cart_no, $cartKey); 
     122            //SC_Response_Ex::reload(); 
     123            $this->lfReload(); 
     124            break; 
     125        case 'down'://1個減らす 
     126            $objCartSess->downQuantity($cart_no, $cartKey); 
     127            //SC_Response_Ex::reload(); 
     128            $this->lfReload(); 
     129            break; 
     130        case 'delete'://カートから削除 
     131            $objCartSess->delProduct($cart_no, $cartKey); 
     132            //SC_Response_Ex::reload(); 
     133            $this->lfReload(); 
    161134            break; 
    162135        default: 
     
    188161        // 前頁のURLを取得 
    189162        // TODO: SC_CartSession::setPrevURL()利用不可。 
    190         if (!preg_match("/cart/", $_SERVER['HTTP_REFERER'])) { 
    191             if (!empty($_SESSION['cart_referer_url'])) { 
    192                 $_SESSION['cart_prev_url'] = $_SESSION['cart_referer_url']; 
    193                 unset($_SESSION['cart_referer_url']); 
     163        $this->lfGetCartPrevUrl($_SESSION,$_SERVER['HTTP_REFERER']); 
     164 
     165        $this->tpl_prev_url = (isset($_SESSION['cart_prev_url'])) ? $_SESSION['cart_prev_url'] : ''; 
     166    } 
     167 
     168    /** 
     169     * デストラクタ. 
     170     * 
     171     * @return void 
     172     */ 
     173    function destroy() { 
     174        parent::destroy(); 
     175    } 
     176     
     177 
     178    /** 
     179     * ユーザ入力値の処理 
     180     * 
     181     * @return object 
     182     */ 
     183    function lfInitParam($arrRequest) { 
     184        $objFormParam = new SC_FormParam(); 
     185        $objFormParam->addParam("カートキー", "cartKey", INT_LEN, "n", array('NUM_CHECK',"MAX_LENGTH_CHECK")); 
     186        $objFormParam->addParam("カートナンバー", "cart_no", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     187        // 値の取得 
     188        $objFormParam->setParam($arrRequest); 
     189        // 入力値の変換 
     190        $objFormParam->convParam(); 
     191        return $objFormParam;         
     192    } 
     193 
     194    /** 
     195     * order_temp_id の更新 
     196     * 
     197     * @return  
     198     */     
     199    function lfUpdateOrderTempid($pre_uniqid,$uniqid){ 
     200        $sqlval['order_temp_id'] = $uniqid; 
     201        $where = "order_temp_id = ?"; 
     202        $objQuery =& SC_Query::getSingletonInstance(); 
     203        $res = $objQuery->update("dtb_order_temp", $sqlval, $where, array($pre_uniqid)); 
     204        if($res != 1){ 
     205            return false; 
     206        } 
     207        return true; 
     208    } 
     209 
     210    /** 
     211     * 前頁のURLを取得 
     212     * 
     213     * @return void 
     214     */         
     215    function lfGetCartPrevUrl(&$session,$referer){ 
     216        if (!preg_match("/cart/", $referer)) { 
     217            if (!empty($session['cart_referer_url'])) { 
     218                $session['cart_prev_url'] = $session['cart_referer_url']; 
     219                unset($session['cart_referer_url']); 
    194220            } else { 
    195                 if (preg_match("/entry/", $_SERVER['HTTP_REFERER'])) { 
    196                     $_SESSION['cart_prev_url'] = HTTPS_URL . 'entry/kiyaku.php'; 
     221                if (preg_match("/entry/", $referer)) { 
     222                    $session['cart_prev_url'] = HTTPS_URL . 'entry/kiyaku.php'; 
    197223                } else { 
    198                     $_SESSION['cart_prev_url'] = $_SERVER['HTTP_REFERER']; 
     224                    $session['cart_prev_url'] = $referer; 
    199225                } 
    200226            } 
    201227        } 
    202228        // 妥当性チェック 
    203         if (!SC_Utils_Ex::sfIsInternalDomain($_SESSION['cart_prev_url'])) { 
    204             $_SESSION['cart_prev_url'] = ''; 
    205         } 
    206  
    207         $this->tpl_prev_url = (isset($_SESSION['cart_prev_url'])) ? $_SESSION['cart_prev_url'] : ''; 
    208     } 
    209  
    210     /** 
    211      * デストラクタ. 
    212      * 
    213      * @return void 
    214      */ 
    215     function destroy() { 
    216         parent::destroy(); 
     229        if (!SC_Utils_Ex::sfIsInternalDomain($session['cart_prev_url'])) { 
     230            $session['cart_prev_url'] = ''; 
     231        }   
     232    } 
     233     
     234    /** 
     235     * カートを購入モードに設定 
     236     * 
     237     * @return void 
     238     */             
     239    function lfSetCurrentCart(&$objSiteSess,&$objCartSess){ 
     240        // 正常に登録されたことを記録しておく 
     241        $objSiteSess->setRegistFlag(); 
     242        $pre_uniqid = $objSiteSess->getUniqId(); 
     243        // 注文一時IDの発行 
     244        $objSiteSess->setUniqId(); 
     245        $uniqid = $objSiteSess->getUniqId(); 
     246        // エラーリトライなどで既にuniqidが存在する場合は、設定を引き継ぐ 
     247        if($pre_uniqid != "") { 
     248            $this->lfUpdateOrderTempid($pre_uniqid,$uniqid); 
     249        } 
     250        // カートを購入モードに設定 
     251        $objCartSess->saveCurrentCart($uniqid, $cartKey); 
     252    } 
     253 
     254    /** 
     255     * 端末ごとのリロード処理 
     256     * 
     257     * @return void 
     258     */                 
     259    function lfReload(){ 
     260        //FIXME SC_Response_Ex::reload()だと携帯で無限リダイレクト 
     261        if(SC_Display::detectDevice() == DEVICE_TYPE_MOBILE){ 
     262            $_SERVER['REQUEST_URI'] = str_replace("mode=delete","",$_SERVER['REQUEST_URI']); 
     263            $_SERVER['REQUEST_URI'] = str_replace("mode=up","",$_SERVER['REQUEST_URI']); 
     264            $_SERVER['REQUEST_URI'] = str_replace("mode=down","",$_SERVER['REQUEST_URI']); 
     265            $_SERVER['REQUEST_URI'] = str_replace("&&","&",$_SERVER['REQUEST_URI']); 
     266            $this->objDisplay->reload(); 
     267            exit; 
     268        } 
     269        SC_Response_Ex::reload(); 
    217270    } 
    218271} 
Note: See TracChangeset for help on using the changeset viewer.