[Svn-src-all:1226] [version-2_5-dev 20114] #984([フロント]商品購入 リファクタリング)

nanasess admin @ mail.ec-cube.net
2011年 2月 8日 (火) 22:18:07 JST


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

Log:
--------------------------------------------------------
#984([フロント]商品購入 リファクタリング)
 * /shopping/payment.php


Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/Smarty/templates/default/shopping/payment.tpl
U   branches/version-2_5-dev/data/Smarty/templates/mobile/shopping/payment.tpl
U   branches/version-2_5-dev/data/Smarty/templates/sphone/shopping/payment.tpl
U   branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php
U   branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Payment.php

変更: branches/version-2_5-dev/data/Smarty/templates/default/shopping/payment.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/default/shopping/payment.tpl	2011-02-08 05:13:01 UTC (rev 20113)
+++ branches/version-2_5-dev/data/Smarty/templates/default/shopping/payment.tpl	2011-02-08 13:18:07 UTC (rev 20114)
@@ -251,8 +251,8 @@
                         <p><span class="attention">1ポイントを1円</span>として使用する事ができます。<br />
                             使用する場合は、「ポイントを使用する」にチェックを入れた後、使用するポイントをご記入ください。</p>
                     <div>
-                        <p><!--{$objCustomer->getValue('name01')|h}--> <!--{$objCustomer->getValue('name02')|h}-->様の、現在の所持ポイントは「<em><!--{$tpl_user_point|default:0}-->Pt</em>」です。</p>
-                        <p>今回ご購入合計金額:<span class="price"><!--{$arrData.subtotal|number_format}-->円</span> <span class="attention">(送料、手数料を含みません。)</span></p>
+                        <p><!--{$name01|h}--> <!--{$name02|h}-->様の、現在の所持ポイントは「<em><!--{$tpl_user_point|default:0}-->Pt</em>」です。</p>
+                        <p>今回ご購入合計金額:<span class="price"><!--{$arrPrices.subtotal|number_format}-->円</span> <span class="attention">(送料、手数料を含みません。)</span></p>
                         <ul>
                             <li><input type="radio" id="point_on" name="point_check" value="1" <!--{$arrForm.point_check.value|sfGetChecked:1}--> onclick="fnCheckInputPoint();" /><label for="point_on">ポイントを使用する</label></li>
                              <!--{assign var=key value="use_point"}-->

変更: branches/version-2_5-dev/data/Smarty/templates/mobile/shopping/payment.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/mobile/shopping/payment.tpl	2011-02-08 05:13:01 UTC (rev 20113)
+++ branches/version-2_5-dev/data/Smarty/templates/mobile/shopping/payment.tpl	2011-02-08 13:18:07 UTC (rev 20114)
@@ -86,9 +86,9 @@
 ■ポイント使用の指定<br>
 1ポイントを<!--{$smarty.const.POINT_VALUE}-->円として使用する事ができます。<br>
 <br>
-<!--{$objCustomer->getValue('name01')|h}--> <!--{$objCustomer->getValue('name02')|h}-->様の、現在の所持ポイントは「<!--{$tpl_user_point|number_format|default:0}-->Pt」です。<br>
+<!--{$name01|h}--> <!--{$name02|h}-->様の、現在の所持ポイントは「<!--{$tpl_user_point|number_format|default:0}-->Pt」です。<br>
 <br>
-今回ご購入合計金額: <!--{$arrData.subtotal|number_format}-->円<br>
+今回ご購入合計金額: <!--{$arrPrices.subtotal|number_format}-->円<br>
 (送料、手数料を含みません。)<br>
 <br>
 <input type="radio" name="point_check" value="1" <!--{$arrForm.point_check.value|sfGetChecked:1}-->>ポイントを使用する<br>

変更: branches/version-2_5-dev/data/Smarty/templates/sphone/shopping/payment.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/sphone/shopping/payment.tpl	2011-02-08 05:13:01 UTC (rev 20113)
+++ branches/version-2_5-dev/data/Smarty/templates/sphone/shopping/payment.tpl	2011-02-08 13:18:07 UTC (rev 20114)
@@ -254,8 +254,8 @@
                         <p><span class="attention">1ポイントを1円</span>として使用する事ができます。<br />
                             使用する場合は、「ポイントを使用する」にチェックを入れた後、使用するポイントをご記入ください。</p>
                     <div>
-                        <p><!--{$objCustomer->getValue('name01')|h}--> <!--{$objCustomer->getValue('name02')|h}-->様の、現在の所持ポイントは「<em><!--{$tpl_user_point|default:0}-->Pt</em>」です。</p>
-                        <p>今回ご購入合計金額:<span class="price"><!--{$arrData.subtotal|number_format}-->円</span> <span class="attention">(送料、手数料を含みません。)</span></p>
+                        <p><!--{$name01|h}--> <!--{$name02|h}-->様の、現在の所持ポイントは「<em><!--{$tpl_user_point|default:0}-->Pt</em>」です。</p>
+                        <p>今回ご購入合計金額:<span class="price"><!--{$arrPrices.subtotal|number_format}-->円</span> <span class="attention">(送料、手数料を含みません。)</span></p>
                         <ul>
                             <li><input type="radio" id="point_on" name="point_check" value="1" <!--{$arrForm.point_check.value|sfGetChecked:1}--> onclick="fnCheckInputPoint();" /><label for="point_on">ポイントを使用する</label></li>
                              <!--{assign var=key value="use_point"}-->

変更: branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php	2011-02-08 05:13:01 UTC (rev 20113)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php	2011-02-08 13:18:07 UTC (rev 20114)
@@ -349,7 +349,7 @@
         // 削除されていない支払方法を取得
         $where = 'del_flg = 0 AND payment_id IN (' . implode(', ', array_pad(array(), count($arrPaymentIds), '?')) . ')';
         $objQuery->setOrder("rank DESC");
-        $payments = $objQuery->select("payment_id, payment_method, rule, upper_rule, note, payment_image", "dtb_payment", $where, $arrPaymentIds);
+        $payments = $objQuery->select("payment_id, payment_method, rule, upper_rule, note, payment_image, charge", "dtb_payment", $where, $arrPaymentIds);
 
         foreach ($payments as $data) {
             // 下限と上限が設定されている

変更: branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Payment.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Payment.php	2011-02-08 05:13:01 UTC (rev 20113)
+++ branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Payment.php	2011-02-08 13:18:07 UTC (rev 20114)
@@ -77,131 +77,108 @@
         $objSiteSess = new SC_SiteSession();
         $objCartSess = new SC_CartSession();
         $objPurchase = new SC_Helper_Purchase_Ex();
-        $this->objCustomer = new SC_Customer();
-        $this->objFormParam = new SC_FormParam();
+        $objCustomer = new SC_Customer();
+        $objFormParam = new SC_FormParam();
 
+        // カートの情報を取得
         $this->arrShipping =& $objPurchase->getShippingTemp();
+        $shipping_vol = count($this->arrShipping);
+
         $this->is_multiple = $objPurchase->isMultiple();
         $this->tpl_uniqid = $objSiteSess->getUniqId();
+        $cart_key = $objCartSess->getKey();
         $objPurchase->verifyChangeCart($this->tpl_uniqid, $objCartSess);
 
-        $this->cartKey = $objCartSess->getKey();
-
         // 配送業者を取得
-        $this->arrDeliv = $objPurchase->getDeliv($this->cartKey);
-        if (count($this->arrDeliv) == 1) {
-            $this->is_single_deliv = true;
-            $deliv_id = $this->arrDeliv[0]['deliv_id'];
-        } else {
-            $this->is_single_deliv = false;
-        }
+        $this->arrDeliv = $objPurchase->getDeliv($cart_key);
+        $this->is_single_deliv = $this->isSingleDeliv($this->arrDeliv);
 
-        // 会員ログインチェック
-        if($this->objCustomer->isLoginSuccess(true)) {
+        // 会員情報の取得
+        if ($objCustomer->isLoginSuccess(true)) {
             $this->tpl_login = '1';
-            $this->tpl_user_point = $this->objCustomer->getValue('point');
-            //戻り先URL
-            if ($this->cartKey == PRODUCT_TYPE_DOWNLOAD) {
-                // ダウンロード商品のみの場合はカート画面へ戻る
-                $this->tpl_back_url = CART_URLPATH;
-            } else {
-                $this->tpl_back_url = DELIV_URLPATH;
-            }
-        } else {
-            $this->tpl_back_url = SHOPPING_URL . "?from=nonmember";
+            $this->tpl_user_point = $objCustomer->getValue('point');
+            $this->name01 = $objCustomer->getValue('name01');
+            $this->name02 = $objCustomer->getValue('name02');
         }
 
-        // 一時受注テーブルの読込
+        // 戻り URL の設定
+        $this->tpl_back_url = $this->getPreviousURL($objCustomer->isLoginSuccess(true), $cart_key);
+
         $arrOrderTemp = $objPurchase->getOrderTemp($this->tpl_uniqid);
-        //不正遷移チェック(正常に受注情報が格納されていない場合は一旦カート画面まで戻す)
-        if (!$arrOrderTemp) {
+        // 正常に受注情報が格納されていない場合はカート画面へ戻す
+        if (SC_Utils_Ex::isBlank($arrOrderTemp)) {
             SC_Response_Ex::sendRedirect(CART_URLPATH);
             exit;
         }
 
-        // カート内商品の集計処理を行う
-        $this->cartItems = $objCartSess->getCartList($this->cartKey);
-        $this->tpl_message = $objCartSess->checkProducts($this->cartKey);
-
+        // カート内商品の妥当性チェック
+        $this->tpl_message = $objCartSess->checkProducts($cart_key);
         if (strlen($this->tpl_message) >= 1) {
             SC_Response_Ex::sendRedirect(CART_URLPATH);
             exit;
         }
-        // FIXME 使用ポイント, 手数料の扱い
-        $this->arrData = $objCartSess->calculate($this->cartKey, $objCustomer, 0, $objPurchase->getShippingPref());
 
         // 購入金額の取得
-        $total_inctax = $objCartSess->getAllProductsTotal($this->cartKey);
+        $this->arrPrices = $objCartSess->calculate($cart_key, $objCustomer, 0, $objPurchase->getShippingPref());
 
         // お届け日一覧の取得
-        $this->arrDelivDate = $objPurchase->getDelivDate($objCartSess, $this->cartKey);
+        $this->arrDelivDate = $objPurchase->getDelivDate($objCartSess, $cart_key);
 
         switch($this->getMode()) {
+        /*
+         * 配送業者選択時のアクション
+         * モバイル端末以外の場合は, JSON 形式のデータを出力し, ajax で取得する.
+         */
         case 'select_deliv':
-            $this->objFormParam->convParam();
-            $this->lfInitParam(true);
-            $this->objFormParam->setParam($_POST);
-            $arrErr = $this->objFormParam->checkError();
+            $this->setFormParams($objFormParam, $_POST, true, $shipping_vol);
+
+            $arrErr = $objFormParam->checkError();
             if (SC_Utils_Ex::isBlank($arrErr)) {
-                $deliv_id = $this->objFormParam->getValue('deliv_id');
-                $this->arrPayment = $objPurchase->getPaymentsByPrice($total_inctax, $deliv_id);
-                $this->img_show = $this->lfGetImgShow($this->arrPayment);
-                // 配送時間を取得
-                $this->arrDelivTime = $objPurchase->getDelivTime($deliv_id);
-                $arrSelectDeliv = array('error' => false,
-                                        'arrPayment' => $this->arrPayment,
-                                        'arrDelivTime' => $this->arrDelivTime,
-                                        'img_show' => $this->img_show);
+                $deliv_id = $objFormParam->getValue('deliv_id');
+                $arrSelectedDeliv = $this->getSelectedDeliv($objPurchase, $objCartSess, $deliv_id);
+                $arrSelectedDeliv['error'] = false;
             } else {
-                $arrSelectDeliv = array('error' => true);
+                $arrSelectedDeliv = array('error' => true);
             }
 
             if (SC_Display::detectDevice() != DEVICE_TYPE_MOBILE) {
                 $objJson = new Services_JSON();
-                echo $objJson->encode($arrSelectDeliv);
+                echo $objJson->encode($arrSelectedDeliv);
                 exit;
+            } else {
+                $this->arrPayment = $arrSelectedDeliv['arrPayment'];
+                $this->arrDelivTime = $arrSelectedDeliv['arrDelivTime'];
             }
             break;
 
+        // 登録処理
         case 'confirm':
             // パラメータ情報の初期化
-            $this->lfInitParam();
-            // POST値の取得
-            $this->objFormParam->setParam($_POST);
-            // 入力値の変換
-            $this->objFormParam->convParam();
-            $deliv_id = $this->objFormParam->getValue('deliv_id');
-            $this->arrPayment = $objPurchase->getPaymentsByPrice($total_inctax, $deliv_id);
-            $this->arrDelivTime = $objPurchase->getDelivTime($deliv_id);
-            $this->arrErr = $this->lfCheckError($this->arrData, $this->arrPayment);
-            // 入力エラーなし
-            if(count($this->arrErr) == 0) {
+            $this->setFormParams($objFormParam, $_POST, false, $shipping_vol);
 
-                foreach (array_keys($_SESSION['shipping']) as $key) {
-                    $timeId = $this->objFormParam->getValue('deliv_time_id' . $key);
+            $deliv_id = $objFormParam->getValue('deliv_id');
+            $arrSelectedDeliv = $this->getSelectedDeliv($objPurchase, $objCartSess, $deliv_id);
+            $this->arrPayment = $arrSelectedDeliv['arrPayment'];
+            $this->arrDelivTime = $arrSelectedDeliv['arrDelivTime'];
 
-                    /* TODO
-                     * SC_Purchase::getShippingTemp() で取得して,
-                     * リファレンスで代入すると, セッションに添字を追加できない?
-                     */
-                    $_SESSION['shipping'][$key]['deliv_id'] = $deliv_id;
-                    $_SESSION['shipping'][$key]['time_id'] = $timeId;
-                    $_SESSION['shipping'][$key]['shipping_time'] = $this->arrDelivTime[$timeId];
-                    $_SESSION['shipping'][$key]['shipping_date'] = $this->objFormParam->getValue('deliv_date' . $key);
-                }
-                $this->lfRegistData($this->tpl_uniqid, $objPurchase);
+            $this->arrErr = $this->lfCheckError($objFormParam, $this->arrPrices['subtotal'], $this->tpl_user_point);
 
+            if (SC_Utils_Ex::isBlank($this->arrErr)) {
+                $this->saveShippings($objFormParam, $this->arrDelivTime);
+                $this->lfRegistData($this->tpl_uniqid, $objFormParam->getDbArray(), $objPurchase, $this->arrPayment);
+
                 // 正常に登録されたことを記録しておく
                 $objSiteSess->setRegistFlag();
                 // 確認ページへ移動
                 SC_Response_Ex::sendRedirect(SHOPPING_CONFIRM_URLPATH);
                 exit;
-            }else{
+            } else {
                 // 受注一時テーブルからの情報を格納
-                $this->img_show = $this->lfGetImgShow($this->arrPayment);
-                $this->objFormParam->setParam($objPurchase->getOrderTemp($this->tpl_uniqid));
+                $this->img_show = $arrSelectedDeliv['img_show'];
+                $objFormParam->setParam($objPurchase->getOrderTemp($this->tpl_uniqid));
             }
             break;
+
         // 前のページに戻る
         case 'return':
 
@@ -212,45 +189,30 @@
             break;
 
         default:
-
             // 前のページから戻ってきた場合の初期値を設定
-            $this->lfInitParam();
-            $this->objFormParam->setParam($arrOrderTemp);
-            $this->objFormParam->convParam();
+            $this->setFormParams($objFormParam, $arrOrderTemp, true, $shipping_vol);
 
             if (!$this->is_single_deliv) {
-                $deliv_id = $this->objFormParam->getValue('deliv_id');
+                $deliv_id = $objFormParam->getValue('deliv_id');
             }
 
             if (!SC_Utils_Ex::isBlank($deliv_id)) {
-                $this->objFormParam->setValue('deliv_id', $deliv_id);
-                $this->arrPayment = $objPurchase->getPaymentsByPrice($total_inctax, $deliv_id);
+                $objFormParam->setValue('deliv_id', $deliv_id);
+                $arrSelectedDeliv = $this->getSelectedDeliv($objPurchase, $objCartSess, $deliv_id);
+                $this->arrPayment = $arrSelectedDeliv['arrPayment'];
                 // XXX セッションからデフォルト値を取得する必要あり
-                $this->arrDelivTime = $objPurchase->getDelivTime($deliv_id);
-                $this->img_show = $this->lfGetImgShow($this->arrPayment);
+                $this->arrDelivTime = $arrSelectedDeliv['arrDelivTime'];
+                $this->img_show = $arrSelectedDeliv['img_show'];
             }
             break;
         }
 
         // モバイル用 ポストバック処理
         if (SC_Display::detectDevice() == DEVICE_TYPE_MOBILE) {
-            switch($this->getMode()) {
-            case 'select_deliv':
-                $this->tpl_mainpage = 'shopping/payment.tpl';
-                break;
-
-            case 'confirm':
-            case 'return':
-            default:
-                if ($this->is_single_deliv) {
-                    $this->tpl_mainpage = 'shopping/payment.tpl';
-                } else {
-                    $this->tpl_mainpage = 'shopping/select_deliv.tpl';
-                }
-            }
+            $this->tpl_mainpage = $this->getMobileMainpage($this->is_single_deliv, $this->getMode());
         }
 
-        $this->arrForm = $this->objFormParam->getFormParamList();
+        $this->arrForm = $objFormParam->getFormParamList();
     }
 
     /**
@@ -262,116 +224,228 @@
         parent::destroy();
     }
 
-    /* パラメータ情報の初期化 */
-    function lfInitParam($deliv_only = false) {
-        $this->objFormParam->addParam("配送業者", "deliv_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
+    /**
+     * パラメータの初期化を行い, 初期値を設定する.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @param array $arrParam 設定する値の配列
+     * @param boolean $deliv_only deliv_id チェックのみの場合 true
+     * @param integer $shipping_vol 配送数
+     */
+    function setFormParams(&$objFormParam, $arrParam, $deliv_only = false, $shipping_vol) {
+        $this->lfInitParam($objFormParam, $deliv_only, $shipping_vol);
+        $objFormParam->setParam($arrParam);
+        $objFormParam->convParam();
+    }
 
+    /**
+     * パラメータ情報の初期化を行う.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @param boolean $deliv_only deliv_id チェックのみの場合 true
+     * @param integer $shipping_vol 配送数
+     * @return void
+     */
+    function lfInitParam(&$objFormParam, $deliv_only = false, $shipping_vol) {
+        $objFormParam->addParam("配送業者", "deliv_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
+
         if (!$deliv_only) {
-            $this->objFormParam->addParam("お支払い方法", "payment_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
-            $this->objFormParam->addParam("ポイント", "use_point", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK", "ZERO_START"));
-            $this->objFormParam->addParam("その他お問い合わせ", "message", LTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
-            $this->objFormParam->addParam("ポイントを使用する", "point_check", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), '2');
+            $objFormParam->addParam("お支払い方法", "payment_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
+            $objFormParam->addParam("ポイント", "use_point", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK", "ZERO_START"));
+            $objFormParam->addParam("その他お問い合わせ", "message", LTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+            $objFormParam->addParam("ポイントを使用する", "point_check", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), '2');
 
-            for ($i = 0; $i < count($this->shipping); $i++) {
-                $this->objFormParam->addParam("お届け時間", "deliv_time_id" . $i, INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
-                $this->objFormParam->addParam("お届け日", "deliv_date" . $i, STEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
+            for ($i = 0; $i < $shipping_vol; $i++) {
+                $objFormParam->addParam("お届け時間", "deliv_time_id" . $i, INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+                $objFormParam->addParam("お届け日", "deliv_date" . $i, STEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
             }
         }
+
+        $objFormParam->setParam($arrParam);
+        $objFormParam->convParam();
     }
 
-
-    /* 入力内容のチェック */
-    function lfCheckError($arrData, $arrPayment) {
+    /**
+     * 入力内容のチェックを行なう.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @param integer $subtotal 購入金額の小計
+     * @param integer $max_point 会員の保持ポイント
+     * @return array 入力チェック結果の配列
+     */
+    function lfCheckError(&$objFormParam, $subtotal, $max_point) {
         // 入力データを渡す。
-        $arrRet =  $this->objFormParam->getHashArray();
-        $objErr = new SC_CheckError($arrRet);
-        $objErr->arrErr = $this->objFormParam->checkError();
+        $arrForm =  $objFormParam->getHashArray();
+        $objErr = new SC_CheckError($arrForm);
+        $objErr->arrErr = $objFormParam->checkError();
 
         if (USE_POINT === false) {
-            $_POST['point_check'] = "";
-            $_POST['use_point'] = "0";
+            return $objErr->arrErr;
         }
 
-        if (!isset($_POST['point_check'])) $_POST['point_check'] = "";
-
-        if($_POST['point_check'] == '1') {
+        if($arrForm['point_check'] == '1') {
             $objErr->doFunc(array("ポイントを使用する", "point_check"), array("EXIST_CHECK"));
             $objErr->doFunc(array("ポイント", "use_point"), array("EXIST_CHECK"));
-            $max_point = $this->objCustomer->getValue('point');
             if($max_point == "") {
                 $max_point = 0;
             }
             // FIXME mobile 互換のため br は閉じない...
-            if($arrRet['use_point'] > $max_point) {
+            if($arrForm['use_point'] > $max_point) {
                 $objErr->arrErr['use_point'] = "※ ご利用ポイントが所持ポイントを超えています。<br>";
             }
-            if(($arrRet['use_point'] * POINT_VALUE) > $arrData['subtotal']) {
+            if(($arrForm['use_point'] * POINT_VALUE) > $subtotal) {
                 $objErr->arrErr['use_point'] = "※ ご利用ポイントがご購入金額を超えています。<br>";
             }
         }
-
-        $objCartSess = new SC_CartSession();
-        // 購入金額の取得得
-        $total_inctax = $objCartSess->getAllProductsTotal($this->cartKey);
-        $pay_flag = true;
-        foreach ($arrPayment as $key => $payment) {
-            if ($payment['payment_id'] == $arrRet['payment_id']) {
-                $pay_flag = false;
-                break;
-            }
-        }
-        if ($pay_flag && $arrRet['payment_id'] != "") {
-            SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
-        }
-
         return $objErr->arrErr;
     }
 
-    /* 支払い方法文字列の取得 */
-    function lfGetPaymentInfo($payment_id) {
-        $objQuery = new SC_Query();
-        $where = "payment_id = ?";
-        $arrRet = $objQuery->getRow("charge, payment_method", "dtb_payment", $where, array($payment_id));
-        return (array($arrRet['charge'], $arrRet['payment_method']));
+    /**
+     * 配送情報を保存する.
+     *
+     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @param array $arrDelivTime 配送時間の配列
+     */
+    function saveShippings(&$objFormParam, $arrDelivTime) {
+        $deliv_id = $objFormParam->getValue('deliv_id');
+
+        /* TODO
+         * SC_Purchase::getShippingTemp() で取得して,
+         * リファレンスで代入すると, セッションに添字を追加できない?
+         */
+        foreach (array_keys($_SESSION['shipping']) as $key) {
+
+            $time_id = $objFormParam->getValue('deliv_time_id' . $key);
+
+            $_SESSION['shipping'][$key]['deliv_id'] = $deliv_id;
+            $_SESSION['shipping'][$key]['time_id'] = $time_id;
+            $_SESSION['shipping'][$key]['shipping_time'] = $arrDelivTime[$time_id];
+            $_SESSION['shipping'][$key]['shipping_date'] = $objFormParam->getValue('deliv_date' . $key);
+        }
     }
 
-    /* DBへデータの登録 */
-    function lfRegistData($uniqid, &$objPurchase) {
+    /**
+     * 受注一時テーブルへ登録を行う.
+     *
+     * @param integer $uniqid 受注一時テーブルのユニークID
+     * @param array $arrForm フォームの入力値
+     * @param SC_Helper_Purchase $objPurchase SC_Helper_Purchase インスタンス
+     * @param array $arrPayment お支払い方法の配列
+     * @return void
+     */
+    function lfRegistData($uniqid, $arrForm, &$objPurchase, $arrPayment) {
 
-        $sqlval = $this->objFormParam->getDbArray();
-        // 登録データの作成
-        $sqlval['order_temp_id'] = $uniqid;
-        $sqlval['update_date'] = 'Now()';
+        $arrForm['order_temp_id'] = $uniqid;
+        $arrForm['update_date'] = 'Now()';
 
-        if (strlen($sqlval['payment_id']) >= 1) {
-            list($sqlval['charge'], $sqlval['payment_method']) = $this->lfGetPaymentInfo($sqlval['payment_id']);
+        if($arrForm['point_check'] != '1') {
+            $arrForm['use_point'] = 0;
         }
 
-        // 使用ポイントの設定
-        if($sqlval['point_check'] != '1') {
-            $sqlval['use_point'] = 0;
+        foreach ($arrPayment as $payment) {
+            if ($arrForm['payment_id'] == $payment['payment_id']) {
+                $arrForm['charge'] = $payment['charge'];
+                $arrForm['payment_method'] = $payment['payment_method'];
+                break;
+            }
         }
+        $objPurchase->saveOrderTemp($uniqid, $arrForm);
+    }
 
-        $objPurchase->saveOrderTemp($uniqid, $sqlval);
+    /**
+     * 配送業者IDから, 支払い方法, お届け時間の配列を取得する.
+     *
+     * 結果の連想配列の添字の値は以下の通り
+     * - 'arrDelivTime' - お届け時間の配列
+     * - 'arrPayment' - 支払い方法の配列
+     * - 'img_show' - 支払い方法の画像の有無
+     *
+     * @param SC_Helper_Purchase $objPurchase SC_Helper_Purchase インスタンス
+     * @param SC_CartSession $objCartSess SC_CartSession インスタンス
+     * @param integer $deliv_id 配送業者ID
+     * @return array 支払い方法, お届け時間を格納した配列
+     */
+    function getSelectedDeliv(&$objPurchase, &$objCartSess, $deliv_id) {
+        $arrResults = array();
+        $arrResults['arrDelivTime'] = $objPurchase->getDelivTime($deliv_id);
+        $total = $objCartSess->getAllProductsTotal($objCartSess->getKey(),
+                                                   $deliv_id);
+        $arrResults['arrPayment'] = $objPurchase->getPaymentsByPrice($total,
+                                                                     $deliv_id);
+        $arrResults['img_show'] = $this->hasPaymentImage($arrResults['arrPayment']);
+        return $arrResults;
     }
 
-    //一時受注テーブルからの情報を格納する
-    function lfSetOrderTempData($uniqid, &$objPurchase) {
-        $arrOrderTemp = $objPurchase->getOrderTemp($uniqid);
-        $this->objFormParam->setParam($arrOrderTemp);
-        return $this->objFormParam;
+    /**
+     * 支払い方法の画像があるかどうか.
+     *
+     * @param array $arrPayment 支払い方法の配列
+     * @return boolean 支払い方法の画像がある場合 true
+     */
+    function hasPaymentImage($arrPayment) {
+        foreach ($arrPayment as $val) {
+            if (!SC_Utils_Ex::isBlank($val['payment_image'])) {
+                return true;
+            }
+        }
+        return false;
     }
 
-    /* 支払い方法の画像があるなしを取得($img_show true:ある false:なし) */
-    function lfGetImgShow($arrPayment) {
-        $img_show = false;
-        foreach ($arrPayment as $payment) {
-            if (strlen($payment["payment_image"]) > 0 ){
-                $img_show = true;
-                break;
+    /**
+     * 配送業者が1社のみかどうか.
+     *
+     * @param array $arrDeliv 配送業者の配列
+     * @return boolean 配送業者が1社のみの場合 true
+     */
+    function isSingleDeliv($arrDeliv) {
+        if (count($arrDeliv) == 1) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 前に戻るボタンの URL を取得する.
+     *
+     * @param boolean $is_login ユーザーがログインしている場合 true
+     * @param $product_type_id 商品種別ID
+     * @return string 前に戻るボタンの URL
+     */
+    function getPreviousURL($is_login = false, $product_type_id) {
+        if ($is_login) {
+            if ($product_type_id == PRODUCT_TYPE_DOWNLOAD) {
+                return CART_URLPATH;
+            } else {
+                return DELIV_URLPATH;
             }
+        } else {
+            return SHOPPING_URL . "?from=nonmember";
         }
-        return $img_show;
     }
+
+    /**
+     * モバイル用テンプレートのパスを取得する.
+     *
+     * @param boolean $is_single_deliv 配送業者が1社の場合 true
+     * @param string $mode フォームパラメータ "mode" の文字列
+     * @return string モバイル用テンプレートのパス
+     */
+    function getMobileMainpage($is_single_deliv = true, $mode) {
+        switch($mode) {
+        case 'select_deliv':
+            return 'shopping/payment.tpl';
+            break;
+
+        case 'confirm':
+        case 'return':
+        default:
+            if ($is_single_deliv) {
+                return 'shopping/payment.tpl';
+            } else {
+                return 'shopping/select_deliv.tpl';
+            }
+        }
+    }
 }
 ?>




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