[Svn-src-all:1278] [version-2_5-dev 20167] #981([フロント]MYページ)

nanasess admin @ mail.ec-cube.net
2011年 2月 15日 (火) 16:43:52 JST


Subversion committed to /home/svn/open 20167
http://svn.ec-cube.net/open_trac/changeset/20167
┌────────────────────────────┐
│更新者 :  nanasess                                     │
│更新日時:  2011-02-15 16:43:52 +0900 (火, 15  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
#981([フロント]MYページ)
 * 受注取得処理を抽象化
#642(共通ロジックの機能向上)
 * SC_Query::extractOnlyColsOf() を追加
#628(未使用処理・定義などの削除)
 * SC_Helper_DB クラスの未使用関数を削除


Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/class/SC_Query.php
U   branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php
U   branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php
U   branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php
U   branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php
U   branches/version-2_5-dev/data/class/pages/mypage/LC_Page_Mypage_History.php
U   branches/version-2_5-dev/data/plugin/bingo/SC_Plugin_bingo.php

変更: branches/version-2_5-dev/data/class/SC_Query.php
===================================================================
--- branches/version-2_5-dev/data/class/SC_Query.php	2011-02-15 05:42:28 UTC (rev 20166)
+++ branches/version-2_5-dev/data/class/SC_Query.php	2011-02-15 07:43:52 UTC (rev 20167)
@@ -837,6 +837,24 @@
     }
 
     /**
+     * パラメータの連想配列から, テーブルに存在する列のみを取得する.
+     *
+     * @param string $table テーブル名
+     * @param array ブレースホルダの連想配列
+     * @return array テーブルに存在する列のみ抽出した連想配列
+     */
+    function extractOnlyColsOf($table, $arrParams) {
+        $arrCols = $this->listTableFields($table);
+        $arrResults = array();
+        foreach ($arrParams as $key => $val) {
+            if (in_array($key, $arrCols)) {
+                $arrResults[$key] = $val;
+            }
+        }
+        return $arrResults;
+    }
+
+    /**
      * プリペアドステートメントを構築する.
      *
      * @access private

変更: branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php
===================================================================
--- branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php	2011-02-15 05:42:28 UTC (rev 20166)
+++ branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php	2011-02-15 07:43:52 UTC (rev 20167)
@@ -143,8 +143,8 @@
      * @param string $dtb_order_alias
      * @return string 検索条件の SQL
      */
-    function getDownloadableDaysWhereSql() {
-        return "(SELECT IF((SELECT d1.downloadable_days_unlimited FROM dtb_baseinfo d1)=1, 1, DATE(NOW()) <= DATE(DATE_ADD(o.payment_date, INTERVAL (SELECT downloadable_days FROM dtb_baseinfo) DAY))))";
+    function getDownloadableDaysWhereSql($dtb_order_alias = 'dtb_order') {
+        return "(SELECT IF((SELECT d1.downloadable_days_unlimited FROM dtb_baseinfo d1)=1, 1, DATE(NOW()) <= DATE(DATE_ADD(" . $dtb_order_alias . ".payment_date, INTERVAL (SELECT downloadable_days FROM dtb_baseinfo) DAY))))";
     }
 
 

変更: branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php
===================================================================
--- branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php	2011-02-15 05:42:28 UTC (rev 20166)
+++ branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php	2011-02-15 07:43:52 UTC (rev 20167)
@@ -121,12 +121,12 @@
      * @param string $dtb_order_alias
      * @return string 検索条件の SQL
      */
-    function getDownloadableDaysWhereSql() {
+    function getDownloadableDaysWhereSql($dtb_order_alias = 'dtb_order') {
         $baseinfo = SC_Helper_DB_Ex::sfGetBasisData();
         //downloadable_daysにNULLが入っている場合(無期限ダウンロード可能時)もあるので、NULLの場合は0日に補正
         $downloadable_days = $baseinfo['downloadable_days'];
         if($downloadable_days ==null || $downloadable_days == "")$downloadable_days=0;
-        return "(SELECT CASE WHEN (SELECT d1.downloadable_days_unlimited FROM dtb_baseinfo d1) = 1 AND o.payment_date IS NOT NULL THEN 1 WHEN DATE(NOW()) <= DATE(o.payment_date + '". $downloadable_days ." days') THEN 1 ELSE 0 END)";
+        return "(SELECT CASE WHEN (SELECT d1.downloadable_days_unlimited FROM dtb_baseinfo d1) = 1 AND " . $dtb_order_alias . ".payment_date IS NOT NULL THEN 1 WHEN DATE(NOW()) <= DATE(" . $dtb_order_alias . ".payment_date + '". $downloadable_days ." days') THEN 1 ELSE 0 END)";
     }
 
     /**

変更: branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php	2011-02-15 05:42:28 UTC (rev 20166)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php	2011-02-15 07:43:52 UTC (rev 20167)
@@ -182,257 +182,6 @@
     }
 
     /**
-     * 商品規格情報を取得する.
-     *
-     * TODO SC_Product クラスへ移動
-     *
-     * @param array $arrID 規格ID
-     * @param boolean $includePrivateProducts 非公開商品を含むか
-     * @return array 規格情報の配列
-     */
-    function sfGetProductsClass($arrID, $includePrivateProducts = false) {
-        list($product_id, $classcategory_id1, $classcategory_id2) = $arrID;
-
-        if (strlen($classcategory_id1) == 0) {
-            $classcategory_id1 = null;
-        }
-        if (strlen($classcategory_id2) == 0) {
-            $classcategory_id2 = null;
-        }
-
-        // 商品規格取得
-        $objProduct = new SC_Product();
-        $detail = $objProduct->getDetail($product_id);
-        $productsClass = $objProduct->getProductsClassFullByProductId($product_id);
-        foreach ($productsClass as $val) {
-
-            if ($val['classcategory_id1'] == $classcategory_id1
-                && $val['classcategory_id2'] == $classcategory_id2) {
-
-                $detail = array_merge($val, $detail);
-                if (!$includePrivateProducts) {
-                    if ($detail['status'] == 1) {
-                        return $detail;
-                    }
-                }
-                return $detail;
-            }
-        }
-    }
-
-    /**
-     * 支払い方法を取得する.
-     *
-     * @return void
-     */
-    function sfGetPayment() {
-        $objQuery =& SC_Query::getSingletonInstance();
-        // 購入金額が条件額以下の項目を取得
-        $where = "del_flg = 0";
-        $objQuery->setOrder("fix, rank DESC");
-        $arrRet = $objQuery->select("payment_id, payment_method, rule", "dtb_payment", $where);
-        return $arrRet;
-    }
-
-    /**
-     * カート内商品の集計処理を行う.
-     *
-     * 管理機能での利用は想定していないので注意。(非公開商品は除外される。)
-     *
-     * @param LC_Page $objPage ページクラスのインスタンス
-     * @param SC_CartSession $objCartSess カートセッションのインスタンス
-     * @param null $dummy1 互換性確保用(決済モジュール互換のため)
-     * @return LC_Page 集計処理後のページクラスインスタンス
-     *
-     * @deprecated SC_CartSession::checkProducts(),
-     *             SC_CartSession::getAllProductsTotal(),
-     *             SC_CartSession::getAllProductsTax(),
-     *             SC_CartSession::getAllProductsPoint() を使用して下さい
-     */
-    function sfTotalCart(&$objPage, $objCartSess, $dummy1 = null, $key = "") {
-
-        $objPage->tpl_total_inctax[$key] = 0;     // 費用合計(税込み)
-        $objPage->tpl_total_tax[$key] = 0;        // 消費税合計
-        $objPage->tpl_total_point[$key] = 0;      // ポイント合計
-
-        $objProduct = new SC_Product();
-        // カート内情報の取得
-        $arrQuantityInfo_by_product = array();
-        $cnt = 0;
-        foreach ($objCartSess->getCartList() as $arrCart) {
-            // 商品規格情報の取得
-            $arrData = $objProduct->getDetailAndProductsClass($arrCart['id']);
-            $limit = null;
-            // DBに存在する商品
-            if (count($arrData) > 0) {
-
-                // 購入制限数を求める。
-                if ($arrData['stock_unlimited'] != '1' && SC_Utils_Ex::sfIsInt($arrData['sale_limit'])) {
-                    $limit = min($arrData['sale_limit'], $arrData['stock']);
-                } elseif (SC_Utils_Ex::sfIsInt($arrData['sale_limit'])) {
-                    $limit = $arrData['sale_limit'];
-                } elseif ($arrData['stock_unlimited'] != '1') {
-                    $limit = $arrData['stock'];
-                }
-
-                if (!is_null($limit) && $arrCart['quantity'] > $limit) {
-                    if ($limit > 0) {
-                        // カート内商品数を制限に合わせる
-                        $objCartSess->setProductValue($arrCart['id'], 'quantity', $limit);
-                        $quantity = $limit;
-                        $objPage->tpl_message .= "※「" . $arrData['name'] . "」は販売制限(または在庫が不足)しております。一度に数量{$limit}以上の購入はできません。\n";
-                    } else {
-                        // 売り切れ商品をカートから削除する
-                        $objCartSess->delProduct($arrCart['cart_no']);
-                        $objPage->tpl_message .= "※「" . $arrData['name'] . "」は売り切れました。\n";
-                        continue;
-                    }
-                } else {
-                    $quantity = $arrCart['quantity'];
-                }
-
-                // (商品規格単位でなく)商品単位での評価のための準備
-                $product_id = $arrData['product_id'];
-                $arrQuantityInfo_by_product[$product_id]['quantity'] += $quantity;
-                $arrQuantityInfo_by_product[$product_id]['sale_limit'] = $arrData['sale_limit'];
-                $arrQuantityInfo_by_product[$product_id]['name'] = $arrData['name'];
-
-                $objPage->arrProductsClass[$cnt][$key] = $arrData;
-                $objPage->arrProductsClass[$cnt]['quantity'][$key] = $quantity;
-                $objPage->arrProductsClass[$cnt]['cart_no'][$key] = $arrCart['cart_no'];
-                $objPage->arrProductsClass[$cnt]['class_name1'][$key] =
-                    isset($arrData['class_name1'])
-                        ? $arrData['class_name1'] : "";
-
-                $objPage->arrProductsClass[$cnt]['class_name2'][$key] =
-                    isset($arrData['class_name2'])
-                        ? $arrData['class_name2'] : "";
-
-                $objPage->arrProductsClass[$cnt]['classcategory_name1'][$key] = $arrData['name1'];
-
-                $objPage->arrProductsClass[$cnt]['classcategory_name2'][$key] = $arrData['name2'];
-                // 価格の登録
-                $objCartSess->setProductValue($arrCart['id'], 'price', $arrData['price02']);
-                $objPage->arrProductsClass[$cnt]['uniq_price'][$key] = $arrData['price02'];
-                // ポイント付与率の登録
-                if (USE_POINT !== false) {
-                    $objCartSess->setProductValue($arrCart['id'], 'point_rate', $arrData['point_rate']);
-                }
-                // 商品ごとの合計金額
-                $objPage->arrProductsClass[$cnt]['total_inctax'][$key] = $objCartSess->getProductTotal($arrCart['id']);
-                // 送料の合計を計算する
-                $objPage->tpl_total_deliv_fee[$key] += ($arrData['deliv_fee'] * $arrCart['quantity']);
-                $cnt++;
-            } else { // DBに商品が見つからない場合、
-                $objPage->tpl_message .= "※ 現時点で販売していない商品が含まれておりました。該当商品をカートから削除しました。\n";
-                // カート商品の削除
-                $objCartSess->delProduct($arrCart['cart_no']);
-            }
-        }
-
-        foreach ($arrQuantityInfo_by_product as $product_id => $quantityInfo) {
-            if (SC_Utils_Ex::sfIsInt($quantityInfo['sale_limit']) && $quantityInfo['quantity'] > $quantityInfo['sale_limit']) {
-                $objPage->tpl_error = "※「{$quantityInfo['name']}」は数量「{$quantityInfo['sale_limit']}」以下に販売制限しております。一度にこれ以上の購入はできません。\n";
-                // 販売制限に引っかかった商品をマークする
-                foreach (array_keys($objPage->arrProductsClass) as $k) {
-                    $ProductsClass =& $objPage->arrProductsClass[$k];
-                    if ($ProductsClass['product_id'] == $product_id) {
-                        $ProductsClass['error'] = true;
-                    }
-                }
-            }
-        }
-
-        // 全商品合計金額(税込み)
-        $objPage->tpl_total_inctax[$key] = $objCartSess->getAllProductsTotal();
-        // 全商品合計消費税
-        $objPage->tpl_total_tax[$key] = $objCartSess->getAllProductsTax();
-        // 全商品合計ポイント
-        if (USE_POINT !== false) {
-            $objPage->tpl_total_point[$key] = $objCartSess->getAllProductsPoint();
-        }
-
-        return $objPage;
-    }
-
-    /**
-     * 受注一時テーブルへの書き込み処理を行う.
-     *
-     * @param string $uniqid ユニークID
-     * @param array $sqlval SQLの値の配列
-     * @return void
-     * @deprecated SC_Helper_Purchase::saveOrderTemp() を使用して下さい
-     */
-    function sfRegistTempOrder($uniqid, $sqlval) {
-        if($uniqid != "") {
-            $sqlval['session'] = serialize($_SESSION);
-            // 既存データのチェック
-            $objQuery =& SC_Query::getSingletonInstance();
-            $where = "order_temp_id = ?";
-            $cnt = $objQuery->count("dtb_order_temp", $where, array($uniqid));
-            // 既存データがない場合
-            if ($cnt == 0) {
-                // 初回書き込み時に会員の登録済み情報を取り込む
-                $sqlval = $this->sfGetCustomerSqlVal($uniqid, $sqlval);
-                $sqlval['order_temp_id'] = $uniqid;
-                $sqlval['create_date'] = "now()";
-                $objQuery->insert("dtb_order_temp", $sqlval);
-            } else {
-                $objQuery->update("dtb_order_temp", $sqlval, $where, array($uniqid));
-            }
-
-            // 受注_Tempテーブルの名称列を更新
-            // ・決済モジュールに対応するため、static メソッドとして扱う
-            //SC_Helper_DB_Ex::sfUpdateOrderNameCol($uniqid, true);
-        }
-    }
-
-    /**
-     * 会員情報から SQL文の値を生成する.
-     *
-     * @param string $uniqid ユニークID
-     * @param array $sqlval SQL の値の配列
-     * @return array 会員情報を含んだ SQL の値の配列
-     * @deprecated SC_Helper_Purchase::copyFromCustomer() を使用して下さい
-     */
-    function sfGetCustomerSqlVal($uniqid, $sqlval) {
-
-        $objCustomer = new SC_Customer();
-        // 会員情報登録処理
-        if ($objCustomer->isLoginSuccess(true)) {
-            // 登録データの作成
-            $sqlval['update_date'] = 'Now()';
-            $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
-            $sqlval['order_name01'] = $objCustomer->getValue('name01');
-            $sqlval['order_name02'] = $objCustomer->getValue('name02');
-            $sqlval['order_kana01'] = $objCustomer->getValue('kana01');
-            $sqlval['order_kana02'] = $objCustomer->getValue('kana02');
-            $sqlval['order_sex'] = $objCustomer->getValue('sex');
-            $sqlval['order_zip01'] = $objCustomer->getValue('zip01');
-            $sqlval['order_zip02'] = $objCustomer->getValue('zip02');
-            $sqlval['order_pref'] = $objCustomer->getValue('pref');
-            $sqlval['order_addr01'] = $objCustomer->getValue('addr01');
-            $sqlval['order_addr02'] = $objCustomer->getValue('addr02');
-            $sqlval['order_tel01'] = $objCustomer->getValue('tel01');
-            $sqlval['order_tel02'] = $objCustomer->getValue('tel02');
-            $sqlval['order_tel03'] = $objCustomer->getValue('tel03');
-            if (defined('MOBILE_SITE')) {
-                $email_mobile = $objCustomer->getValue('email_mobile');
-                if (empty($email_mobile)) {
-                    $sqlval['order_email'] = $objCustomer->getValue('email');
-                } else {
-                    $sqlval['order_email'] = $email_mobile;
-                }
-            } else {
-                $sqlval['order_email'] = $objCustomer->getValue('email');
-            }
-            $sqlval['order_job'] = $objCustomer->getValue('job');
-            $sqlval['order_birth'] = $objCustomer->getValue('birth');
-        }
-        return $sqlval;
-    }
-
-    /**
      * 受注番号、最終ポイント、加算ポイント、利用ポイントから「オーダー前ポイント」を取得する
      *
      * @param integer $order_id 受注番号
@@ -1165,20 +914,6 @@
     }
 
     /**
-     * 受注一時テーブルから情報を取得する.
-     *
-     * @param integer $order_temp_id 受注一時ID
-     * @return array 受注一時情報の配列
-     * @deprecated SC_Helper_Purchase::getOrderTemp() を使用して下さい
-     */
-    function sfGetOrderTemp($order_temp_id) {
-        $objQuery =& SC_Query::getSingletonInstance();
-        $where = "order_temp_id = ?";
-        $arrRet = $objQuery->select("*", "dtb_order_temp", $where, array($order_temp_id));
-        return $arrRet[0];
-    }
-
-    /**
      * SELECTボックス用リストを作成する.
      *
      * @param string $table テーブル名
@@ -1448,34 +1183,6 @@
     }
 
     /**
-     * FIXME 商品種別からお届け時間を取得する.
-     *
-     * @param integer $productTypeId 商品種別ID
-     * @return array お届け時間の配列
-     * @deprecated SC_Purchase::getDelivTime() を使用して下さい
-     */
-    function sfGetDelivTime($productTypeId) {
-        $objQuery =& SC_Query::getSingletonInstance();
-
-        $deliv_id = "";
-        $arrRet = array();
-
-        if($payment_id != "") {
-            $where = "del_flg = 0 AND product_type_id = ?";
-            $arrRet = $objQuery->select("deliv_id", "dtb_payment", $where, array($productTypeId));
-            $deliv_id = $arrRet[0]['deliv_id'];
-        }
-
-        if($deliv_id != "") {
-            $objQuery->setOrder("time_id");
-            $where = "deliv_id = ?";
-            $arrRet= $objQuery->select("time_id, deliv_time", "dtb_delivtime", $where, array($deliv_id));
-        }
-
-        return $arrRet;
-    }
-
-    /**
      * 都道府県から配送料金を取得する.
      *
      * @param integer|array $pref_id 都道府県ID 又は都道府県IDの配列
@@ -1510,99 +1217,10 @@
     }
 
     /**
-     * 集計情報を元に最終計算を行う.
-     *
-     * @param array $arrData 各種情報
-     * @param LC_Page $objPage LC_Page インスタンス
-     * @param SC_CartSession $objCartSess SC_CartSession インスタンス
-     * @param null $dummy1 互換性確保用(決済モジュール互換のため)
-     * @param SC_Customer $objCustomer SC_Customer インスタンス
-     * @return array 最終計算後の配列
-     * @deprecated SC_CartSession::calculate() を使用して下さい
-     */
-    function sfTotalConfirm($arrData, &$objPage, &$objCartSess, $dummy1 = null, $objCustomer = "", $key = "") {
-        // 店舗基本情報を取得する
-        $arrInfo = SC_Helper_DB_Ex::sfGetBasisData();
-
-        // 未定義変数を定義
-        if (!isset($arrData['deliv_pref'])) $arrData['deliv_pref'] = "";
-        if (!isset($arrData['payment_id'])) $arrData['payment_id'] = "";
-        if (!isset($arrData['charge'])) $arrData['charge'] = "";
-        if (!isset($arrData['use_point'])) $arrData['use_point'] = "";
-        if (!isset($arrData['add_point'])) $arrData['add_point'] = 0;
-
-        // 税金の取得
-        $arrData['tax'] = $objPage->tpl_total_tax[$key];
-        // 小計の取得
-        $arrData['subtotal'] = $objPage->tpl_total_inctax[$key];
-
-        // 合計送料の取得
-        $arrData['deliv_fee'] = 0;
-
-        // 商品ごとの送料が有効の場合
-        if (OPTION_PRODUCT_DELIV_FEE == 1) {
-            // 全商品の合計送料を加算する
-            $this->lfAddAllProductsDelivFee($arrData, $objPage, $objCartSess);
-        }
-
-        // 配送業者の送料が有効の場合
-        if (OPTION_DELIV_FEE == 1) {
-            // 都道府県、支払い方法から配送料金を加算する
-            // FIXME ここでしか使ってない
-            $this->lfAddDelivFee($arrData);
-        }
-
-        // 送料無料の購入数が設定されている場合
-        if (DELIV_FREE_AMOUNT > 0) {
-            // 商品の合計数量
-            $total_quantity = $objCartSess->getTotalQuantity(true);
-
-            if($total_quantity >= DELIV_FREE_AMOUNT) {
-                $arrData['deliv_fee'] = 0;
-            }
-        }
-
-        // ダウンロード商品のみの場合は送料無料
-        if($this->chkCartDown($objCartSess)==2){
-            $arrData['deliv_fee'] = 0;
-        }
-
-        // 送料無料条件が設定されている場合
-        if($arrInfo['free_rule'] > 0) {
-            // 小計が無料条件を超えている場合
-            if($arrData['subtotal'] >= $arrInfo['free_rule']) {
-                $arrData['deliv_fee'] = 0;
-            }
-        }
-
-        // 合計の計算
-        $arrData['total'] = $objPage->tpl_total_inctax[$key]; // 商品合計
-        $arrData['total']+= $arrData['deliv_fee'];      // 送料
-        $arrData['total']+= $arrData['charge'];         // 手数料
-        // お支払い合計
-        $arrData['payment_total'] = $arrData['total'] - ($arrData['use_point'] * POINT_VALUE);
-        // 加算ポイントの計算
-        if (USE_POINT !== false) {
-            $arrData['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($objPage->tpl_total_point[$key], $arrData['use_point']);
-
-            if($objCustomer != "") {
-                // 誕生日月であった場合
-                if($objCustomer->isBirthMonth()) {
-                    $arrData['birth_point'] = BIRTH_MONTH_POINT;
-                    $arrData['add_point'] += $arrData['birth_point'];
-                }
-            }
-        }
-
-        if($arrData['add_point'] < 0) {
-            $arrData['add_point'] = 0;
-        }
-        return $arrData;
-    }
-
-    /**
      * レコードの存在チェックを行う.
      *
+     * TODO SC_Query に移行するべきか?
+     *
      * @param string $table テーブル名
      * @param string $col カラム名
      * @param array $arrval 要素の配列
@@ -1732,40 +1350,6 @@
     }
 
     /**
-     * 全商品の合計送料を加算する
-     */
-    function lfAddAllProductsDelivFee(&$arrData, &$objPage, &$objCartSess) {
-        $arrData['deliv_fee'] += $this->lfCalcAllProductsDelivFee($arrData, $objCartSess);
-    }
-
-    /**
-     * 全商品の合計送料を計算する
-     */
-    function lfCalcAllProductsDelivFee(&$arrData, &$objCartSess) {
-        $objQuery =& SC_Query::getSingletonInstance();
-        $deliv_fee_total = 0;
-        $max = $objCartSess->getMax();
-        for ($i = 0; $i <= $max; $i++) {
-            // 商品送料
-            $deliv_fee = $objQuery->getOne('SELECT deliv_fee FROM dtb_products WHERE product_id = ?', array($_SESSION[$objCartSess->key][$i]['id'][0]));
-            // 数量
-            $quantity = $_SESSION[$objCartSess->key][$i]['quantity'];
-            // 累積
-            $deliv_fee_total += $deliv_fee * $quantity;
-        }
-        return $deliv_fee_total;
-    }
-
-    /**
-     * 都道府県、支払い方法から配送料金を加算する.
-     *
-     * @param array $arrData 各種情報
-     */
-    function lfAddDelivFee(&$arrData) {
-        $arrData['deliv_fee'] += $this->sfGetDelivFee($arrData);
-    }
-
-    /**
      * 受注の名称列を更新する
      *
      * FIXME
@@ -2000,108 +1584,5 @@
 
         return $count >= 1;
     }
-    /**
-     * カート内の商品の販売方法判定処理
-     *
-     * @param $objCartSess  SC_CartSession  カートセッション
-     * @return  bool        0:実商品のみ 1:ダウンロード販売と実商品混在 2:全てダウンロード販売
-     */
-    function chkCartDown(&$objCartSess, $cartKey = 1) {
-        $objQuery =& SC_Query::getSingletonInstance();
-        $down = false;
-        $nodown = false;
-        $ret = 0;
-        $arrID = $objCartSess->getAllProductID();
-        $table = "dtb_products_class pc";
-        $where = "pc.product_class_id = ?";
-        if(!is_null($arrID)){
-            //カート内のIDから販売方法を取得
-            foreach ($arrID as $rec) {
-                $arrRet = $objQuery->select("pc.down AS down", $table, $where, array($rec));
-                if ($arrRet[0]['down'] == "2"){
-                    $down = true;
-                }else{
-                    $nodown = true;
-                }
-            }
-        }
-        //混在
-        if($nodown && $down){
-            $ret = 1;
-        //全てダウンロード商品
-        }else if(!$nodown && $down){
-            $ret = 2;
-        }
-        return $ret;
-    }
-
-    /* 会員情報の住所を一時受注テーブルへ */
-    function sfRegistDelivData($uniqid, $objCustomer) {
-
-        // 登録データの作成
-        $sqlval['order_temp_id'] = $uniqid;
-        $sqlval['update_date'] = 'Now()';
-        $sqlval['customer_id'] = $objCustomer->getValue('customer_id');
-        $sqlval['deliv_check'] = '-1';
-        $sqlval['order_name01'] = $objCustomer->getValue('name01');
-        $sqlval['order_name02'] = $objCustomer->getValue('name02');
-        $sqlval['order_kana01'] = $objCustomer->getValue('kana01');
-        $sqlval['order_kana02'] = $objCustomer->getValue('kana02');
-        $sqlval['order_zip01'] = $objCustomer->getValue('zip01');
-        $sqlval['order_zip02'] = $objCustomer->getValue('zip02');
-        $sqlval['order_pref'] = $objCustomer->getValue('pref');
-        $sqlval['order_addr01'] = $objCustomer->getValue('addr01');
-        $sqlval['order_addr02'] = $objCustomer->getValue('addr02');
-        $sqlval['order_tel01'] = $objCustomer->getValue('tel01');
-        $sqlval['order_tel02'] = $objCustomer->getValue('tel02');
-        $sqlval['order_tel03'] = $objCustomer->getValue('tel03');
-        $sqlval['order_fax01'] = $objCustomer->getValue('fax01');
-        $sqlval['order_fax02'] = $objCustomer->getValue('fax02');
-        $sqlval['order_fax03'] = $objCustomer->getValue('fax03');
-        $sqlval['deliv_name01'] = $objCustomer->getValue('name01');
-        $sqlval['deliv_name02'] = $objCustomer->getValue('name02');
-        $sqlval['deliv_kana01'] = $objCustomer->getValue('kana01');
-        $sqlval['deliv_kana02'] = $objCustomer->getValue('kana02');
-        $sqlval['deliv_zip01'] = $objCustomer->getValue('zip01');
-        $sqlval['deliv_zip02'] = $objCustomer->getValue('zip02');
-        $sqlval['deliv_pref'] = $objCustomer->getValue('pref');
-        $sqlval['deliv_addr01'] = $objCustomer->getValue('addr01');
-        $sqlval['deliv_addr02'] = $objCustomer->getValue('addr02');
-        $sqlval['deliv_tel01'] = $objCustomer->getValue('tel01');
-        $sqlval['deliv_tel02'] = $objCustomer->getValue('tel02');
-        $sqlval['deliv_tel03'] = $objCustomer->getValue('tel03');
-        $sqlval['deliv_fax01'] = $objCustomer->getValue('fax01');
-        $sqlval['deliv_fax02'] = $objCustomer->getValue('fax02');
-        $sqlval['deliv_fax03'] = $objCustomer->getValue('fax03');
-
-        $this->sfRegistTempOrder($uniqid, $sqlval);
-    }
-
-
-    /**
-     * 配送情報の取得.
-     * TODO リファクタリング
-     */
-    function sfGetShippingData($orderId) {
-        $objQuery =& SC_Query::getSingletonInstance();
-        $objProduct = new SC_Product();
-        $objQuery->setOrder('shipping_id');
-        $arrRet = $objQuery->select("*", "dtb_shipping", "order_id = ?", array($orderId));
-
-        foreach (array_keys($arrRet) as $key) {
-            $objQuery->setOrder('shipping_id');
-            $arrItems = $objQuery->select("*", "dtb_shipment_item", "order_id = ? AND shipping_id = ?",
-                                       array($orderId, $arrRet[$key]['shipping_id']));
-            foreach ($arrItems as $itemKey => $arrDetail) {
-                foreach ($arrDetail as $detailKey => $detailVal) {
-                    $arrRet[$key]['shipment_item'][$arrDetail['product_class_id']][$detailKey] = $detailVal;
-                }
-
-                $arrRet[$key]['shipment_item'][$arrDetail['product_class_id']]['productsClass'] =& $objProduct->getDetailAndProductsClass($arrDetail['product_class_id']);
-            }
-        }
-        return $arrRet;
-    }
-
 }
 ?>

変更: 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-15 05:42:28 UTC (rev 20166)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_Purchase.php	2011-02-15 07:43:52 UTC (rev 20167)
@@ -106,6 +106,7 @@
         // カート内が空でないか
         if (SC_Utils_Ex::isBlank($cartKeys)) {
             SC_Response_Ex::sendRedirect(CART_URLPATH);
+            exit;
         }
 
         foreach ($cartKeys as $cartKey) {
@@ -118,6 +119,7 @@
              */
             if(!SC_SiteSession::checkUniqId()) {
                 SC_Utils_Ex::sfDispSiteError(CANCEL_PURCHASE);
+                exit;
             }
 
             // 購入ボタンを押してから変化がないか
@@ -189,34 +191,44 @@
 
     /**
      * 配送商品を設定する.
+     *
+     * @param integer $shipping_id 配送先ID
+     * @param integer $product_class_id 商品規格ID
+     * @param integer $quantity 数量
+     * @return void
      */
-    function setShipmentItemTemp($otherDelivId, $productClassId, $quantity) {
-        $_SESSION['shipping'][$otherDelivId]['shipment_item'][$productClassId]['shipping_id'] = $otherDelivId;
-        $_SESSION['shipping'][$otherDelivId]['shipment_item'][$productClassId]['product_class_id'] = $productClassId;
-        $_SESSION['shipping'][$otherDelivId]['shipment_item'][$productClassId]['quantity'] += $quantity;
+    function setShipmentItemTemp($shipping_id, $product_class_id, $quantity) {
+        // 配列が長くなるので, リファレンスを使用する
+        $arrItems =& $_SESSION['shipping'][$shipping_id]['shipment_item'];
 
+        $arrItems[$product_class_id]['shipping_id'] = $shipping_id;
+        $arrItems[$product_class_id]['product_class_id'] = $product_class_id;
+        $arrItems[$product_class_id]['quantity'] += $quantity;
+
         $objProduct = new SC_Product();
-        if (empty($_SESSION['shipping'][$otherDelivId]['shipment_item'][$productClassId]['productsClass'])) {
-            $product =& $objProduct->getDetailAndProductsClass($productClassId);
-            $_SESSION['shipping'][$otherDelivId]['shipment_item'][$productClassId]['productsClass'] = $product;
+        if (empty($arrItems[$product_class_id]['productsClass'])) {
+            $product =& $objProduct->getDetailAndProductsClass($product_class_id);
+            $arrItems[$product_class_id]['productsClass'] = $product;
         }
-        $incTax = SC_Helper_DB_Ex::sfCalcIncTax($_SESSION['shipping'][$otherDelivId]['shipment_item'][$productClassId]['productsClass']['price02']);
-        $_SESSION['shipping'][$otherDelivId]['shipment_item'][$productClassId]['total_inctax'] = $incTax * $_SESSION['shipping'][$otherDelivId]['shipment_item'][$productClassId]['quantity'];
+        $incTax = SC_Helper_DB_Ex::sfCalcIncTax($arrItems[$product_class_id]['productsClass']['price02']);
+        $arrItems[$product_class_id]['total_inctax'] = $incTax * $arrItems[$product_class_id]['quantity'];
     }
 
     /**
      * 配送商品の情報でカートを更新する.
+     *
+     * @param SC_CartSession $objCartSession SC_CartSession インスタンス
      */
     function shippingItemTempToCart(&$objCartSession) {
-        $shipmentItems = array();
+        $arrShipmentItems = array();
 
-        foreach (array_keys($_SESSION['shipping']) as $otherDelivId) {
-            foreach (array_keys($_SESSION['shipping'][$otherDelivId]['shipment_item']) as $productClassId) {
-                $shipmentItems[$productClassId] += $_SESSION['shipping'][$otherDelivId]['shipment_item'][$productClassId]['quantity'];
+        foreach (array_keys($_SESSION['shipping']) as $shipping_id) {
+            foreach (array_keys($_SESSION['shipping'][$shipping_id]['shipment_item']) as $product_class_id) {
+                $arrShipmentItems[$product_class_id] += $_SESSION['shipping'][$shipping_id]['shipment_item'][$product_class_id]['quantity'];
            }
         }
-        foreach ($shipmentItems as $productClassId => $quantity) {
-            $objCartSession->setProductValue($productClassId, 'quantity',
+        foreach ($arrShipmentItems as $product_class_id => $quantity) {
+            $objCartSession->setProductValue($product_class_id, 'quantity',
                                              $quantity,$objCartSession->getKey());
         }
     }
@@ -243,12 +255,18 @@
 
     /**
      * 配送情報をセッションに保存する.
+     *
+     * @param array $arrSrc 配送情報の連想配列
+     * @param integer $shipping_id 配送先ID
+     * @return void
      */
-    function saveShippingTemp(&$src, $otherDelivId = 0) {
-        if (empty($_SESSION['shipping'][$otherDelivId])) {
-            $_SESSION['shipping'][$otherDelivId] = $src;
+    function saveShippingTemp(&$arrSrc, $shipping_id = 0) {
+        if (empty($_SESSION['shipping'][$shipping_id])) {
+            $_SESSION['shipping'][$shipping_id] = $arrSrc;
+            $_SESSION['shipping'][$shipping_id]['shipping_id'] = $shipping_id;
         } else {
-            $_SESSION['shipping'][$otherDelivId] = array_merge($_SESSION['shipping'][$otherDelivId], $src);
+            $_SESSION['shipping'][$shipping_id] = array_merge($_SESSION['shipping'][$shipping_id], $arrSrc);
+            $_SESSION['shipping'][$shipping_id]['shipping_id'] = $shipping_id;
         }
     }
 
@@ -506,39 +524,44 @@
     }
 
     /**
-     * 配送情報を登録する.
+     * 配送情報の登録を行う.
+     *
+     * $arrParam のうち, dtb_shipping テーブルに存在するカラムのみを登録する.
+     *
+     * @param integer $order_id 受注ID
+     * @param array $arrParams 配送情報の連想配列
+     * @return void
      */
-    function registerShipping($orderId, $params) {
+    function registerShipping($order_id, $arrParams) {
         $objQuery =& SC_Query::getSingletonInstance();
+        $table = 'dtb_shipping';
 
-        $cols = $objQuery->listTableFields('dtb_shipping');
+         foreach ($arrParams as $arrShipping) {
 
-        foreach ($params as $shipping_id => $shipping_val) {
-            // 存在するカラムのみ INSERT
-            foreach ($shipping_val as $key => $val) {
-                if (in_array($key, $cols)) {
-                    $sqlval[$key] = $val;
-                }
-            }
+            $arrValues = $objQuery->extractOnlyColsOf($table, $arrShipping);
 
             // 配送日付を timestamp に変換
-            if (!SC_Utils_Ex::isBlank($sqlval['shipping_date'])) {
-                $d = mb_strcut($sqlval["shipping_date"], 0, 10);
+            if (!SC_Utils_Ex::isBlank($arrValues['shipping_date'])) {
+                $d = mb_strcut($arrValues["shipping_date"], 0, 10);
                 $arrDate = split("/", $d);
                 $ts = mktime(0, 0, 0, $arrDate[1], $arrDate[2], $arrDate[0]);
-                $sqlval['shipping_date'] = date("Y-m-d", $ts);
+                $arrValues['shipping_date'] = date("Y-m-d", $ts);
             }
 
-            $sqlval['order_id'] = $orderId;
-            $sqlval['shipping_id'] = $shipping_id;
-            $sqlval['create_date'] = 'Now()';
-            $sqlval['update_date'] = 'Now()';
-            $objQuery->insert("dtb_shipping", $sqlval);
+            $arrValues['order_id'] = $order_id;
+            $arrValues['create_date'] = 'Now()';
+            $arrValues['update_date'] = 'Now()';
+            $objQuery->insert($table, $arrValues);
         }
     }
 
     /**
      * 配送商品を登録する.
+     *
+     * @param integer $order_id 受注ID
+     * @param integer $shipping_id 配送先ID
+     * @param array $arrParams 配送商品の配列
+     * @return void
      */
     function registerShipmentItem($orderId, $shippingId, $params) {
         $objQuery =& SC_Query::getSingletonInstance();
@@ -640,6 +663,126 @@
     }
 
     /**
+     * 受注情報を取得する.
+     *
+     * @param integer $order_id 受注ID
+     * @param integer $customer_id 顧客ID
+     * @return array 受注情報の配列
+     */
+    function getOrder($order_id, $customer_id = null) {
+        $objQuery =& SC_Query::getSingletonInstance();
+        $where = 'order_id = ?';
+        $arrValues = array($order_id);
+        if (!SC_Utils_Ex::isBlank($customer_id)) {
+            $where .= ' AND customer_id = ?';
+            $arrValues[] = $customer_id;
+        }
+        return $objQuery->getRow('*', 'dtb_order', $where, $arrValues);
+    }
+
+    /**
+     * 受注詳細を取得する.
+     *
+     * @param integer $order_id 受注ID
+     * @return array 受注詳細の配列
+     */
+    function getOrderDetail($order_id) {
+        $objQuery =& SC_Query::getSingletonInstance();
+        $dbFactory  = SC_DB_DBFactory_Ex::getInstance();
+        $col = <<< __EOS__
+            T3.product_id,
+            T3.product_class_id as product_class_id,
+            T3.product_type_id AS product_type_id,
+            T2.product_code,
+            T2.product_name,
+            T2.classcategory_name1 AS classcategory_name1,
+            T2.classcategory_name2 AS classcategory_name2,
+            T2.price,
+            T2.quantity,
+            T2.point_rate,
+            T1.status AS status,
+            T1.payment_date AS payment_date,
+            CASE WHEN EXISTS(
+                    SELECT 1 FROM dtb_products
+                     WHERE product_id = T3.product_id
+                       AND del_flg = 0
+                       AND status = 1)
+                 THEN '1' ELSE '0'
+                  END AS enable,
+__EOS__;
+        $col .= $dbFactory->getDownloadableDaysWhereSql('T1') . ' AS effective';
+        $from = <<< __EOS__
+                 dtb_order T1
+            JOIN dtb_order_detail T2
+              ON T1.order_id = T2.order_id
+            JOIN dtb_products_class T3
+              ON T2.product_class_id = T3.product_class_id
+__EOS__;
+        return $objQuery->select($col, $from, 'T1.order_id = ?', array($order_id));
+    }
+
+    /**
+     * 配送情報を取得する.
+     *
+     * @param integer $order_id 受注ID
+     * @param boolean $has_items 結果に配送商品も含める場合 true
+     * @return array 配送情報の配列
+     */
+    function getShippings($order_id, $has_items = true) {
+        $objQuery =& SC_Query::getSingletonInstance();
+        $arrResults = array();
+        $objQuery->setOrder('shipping_id');
+        $arrShippings = $objQuery->select("*", "dtb_shipping", "order_id = ?",
+                                          array($order_id));
+        // shipping_id ごとの配列を生成する
+        foreach ($arrShippings as $shipping) {
+            foreach ($shipping as $key => $val) {
+                $arrResults[$shipping['shipping_id']][$key] = $val;
+            }
+        }
+
+        if ($has_items) {
+            $objProduct = new SC_Product();
+            foreach (array_keys($arrResults) as $shipping_id) {
+                $arrResults[$shipping_id]['shipment_item']
+                        =& $this->getShipmentItems($order_id, $shipping_id);
+            }
+        }
+        return $arrResults;
+    }
+
+    /**
+     * 配送商品を取得する.
+     *
+     * @param integer $order_id 受注ID
+     * @param integer $shipping_id 配送先ID
+     * @param boolean $has_detail 商品詳細も取得する場合 true
+     * @return array 商品規格IDをキーにした配送商品の配列
+     */
+    function getShipmentItems($order_id, $shipping_id, $has_detail = true) {
+        $objQuery =& SC_Query::getSingletonInstance();
+        $objProduct = new SC_Product();
+        $arrResults = array();
+        $arrItems = $objQuery->select("*", "dtb_shipment_item",
+                                      "order_id = ? AND shipping_id = ?",
+                                      array($order_id, $shipping_id));
+
+        foreach ($arrItems as $key => $arrItem) {
+            $product_class_id = $arrItem['product_class_id'];
+
+            foreach ($arrItem as $detailKey => $detailVal) {
+                $arrResults[$product_class_id][$detailKey] = $detailVal;
+            }
+            // 商品詳細を関連づける
+            if ($has_detail) {
+                $arrResults[$product_class_id]['productsClass']
+                    =& $objProduct->getDetailAndProductsClass($product_class_id);
+            }
+        }
+        return $arrResults;
+    }
+
+    /**
      * 受注完了メールを送信する.
      *
      * HTTP_USER_AGENT の種別により, 携帯電話の場合は携帯用の文面,

変更: branches/version-2_5-dev/data/class/pages/mypage/LC_Page_Mypage_History.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/mypage/LC_Page_Mypage_History.php	2011-02-15 05:42:28 UTC (rev 20166)
+++ branches/version-2_5-dev/data/class/pages/mypage/LC_Page_Mypage_History.php	2011-02-15 07:43:52 UTC (rev 20167)
@@ -69,31 +69,30 @@
     function action() {
         $objCustomer    = new SC_Customer();
         $objDb          = new SC_Helper_DB_Ex();
+        $objPurchase = new SC_Helper_Purchase_Ex();
 
         if (!SC_Utils_Ex::sfIsInt($_GET['order_id'])) {
             SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
         }
 
         $order_id        = $_GET['order_id'];
-        $arrOrderData   = $this->lfGetOrderData($objCustomer->getValue('customer_id'), $order_id);
 
-        if (empty($arrOrderData)){
+        //受注データの取得
+        $this->tpl_arrOrderData = $objPurchase->getOrder($order_id, $objCustomer->getValue('customer_id'));
+
+        if (empty($this->tpl_arrOrderData)){
             SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR);
         }
 
-        //受注詳細データの取得
-        $this->tpl_arrOrderData = $arrOrderData[0];
+        $this->arrShipping      = $objPurchase->getShippings($order_id);
 
-        $this->arrShipping      = $objDb->sfGetShippingData($order_id);
         $this->isMultiple       = count($this->arrShipping) > 1;
         // 支払い方法の取得
         $this->arrPayment       = $objDb->sfGetIDValueList("dtb_payment", "payment_id", "payment_method");
-        // お届け時間の取得
-        $this->arrDelivTime     = SC_Utils_Ex::sfArrKeyValue($objDb->sfGetDelivTime($this->tpl_arrOrderData['payment_id']),
-                                                            'time_id',
-                                                            'deliv_time');
+        // FIXME お届け時間の取得
+        //$this->arrDelivTime     = $objPurchase->getDelivTime($this->tpl_arrOrderData['deliv_id']);
         // 受注商品明細の取得
-        $this->tpl_arrOrderDetail = $this->lfGetOrderDetail($order_id);
+        $this->tpl_arrOrderDetail = $objPurchase->getOrderDetail($order_id);
         // 受注メール送信履歴の取得
         $this->tpl_arrMailHistory = $this->lfGetMailHistory($order_id);
 
@@ -109,53 +108,6 @@
     }
 
     /**
-     * 受注の取得
-     *
-     * @param integer $orderId 注文番号
-     * @return array 受注の内容
-     */
-    function lfGetOrderData($customer_id, $order_id) {
-        // DBから受注情報を読み込む
-        $objQuery   =& SC_Query::getSingletonInstance();
-        $from       = "dtb_order";
-        $where      = "del_flg = 0 AND customer_id = ? AND order_id = ?";
-        return $objQuery->select("*", $from, $where, array($customer_id, $order_id));
-    }
-
-    /**
-     * 受注商品明細の取得
-     *
-     * @param integer $orderId 注文番号
-     * @return array 受注商品明細の内容
-     */
-    function lfGetOrderDetail($order_id) {
-        $objQuery   =& SC_Query::getSingletonInstance();
-        $dbFactory  = SC_DB_DBFactory_Ex::getInstance();
-
-        $col    = "
-            od.product_id AS product_id,
-            od.product_code AS product_code,
-            od.product_name AS product_name,
-            od.classcategory_name1 AS classcategory_name1,
-            od.classcategory_name2 AS classcategory_name2,
-            od.price AS price,
-            od.quantity AS quantity,
-            od.point_rate AS point_rate
-            ,CASE WHEN EXISTS(SELECT * FROM dtb_products WHERE product_id = od.product_id AND del_flg = 0 AND status = 1) THEN '1' ELSE '0' END AS enable
-            ,o.status AS status,
-            pc.product_type_id AS product_type_id,
-            o.payment_date AS payment_date,
-            od.product_class_id as product_class_id,
-            ".$dbFactory->getDownloadableDaysWhereSql()."
-            AS effective";
-
-        $from   = "dtb_products p, dtb_products_class pc, dtb_order_detail od, dtb_order o";
-        $where  = "p.product_id = od.product_id AND pc.product_id = od.product_id AND pc.product_class_id = od.product_class_id AND od.order_id = o.order_id AND od.order_id = ?";
-
-        return $objQuery->select($col, $from, $where, array($order_id));
-    }
-
-    /**
      * 受注メール送信履歴の取得
      *
      * @param integer $order_id 注文番号

変更: branches/version-2_5-dev/data/plugin/bingo/SC_Plugin_bingo.php
===================================================================
--- branches/version-2_5-dev/data/plugin/bingo/SC_Plugin_bingo.php	2011-02-15 05:42:28 UTC (rev 20166)
+++ branches/version-2_5-dev/data/plugin/bingo/SC_Plugin_bingo.php	2011-02-15 07:43:52 UTC (rev 20167)
@@ -95,8 +95,9 @@
             $objCartSess = new SC_CartSession();
             $objCustomer = new SC_Customer();
             $objSiteSess = new SC_SiteSession();
+            $objPurchase = new SC_Helper_Purchase_Ex();
 
-            $tmpData = $objDb->sfGetOrderTemp($uniqid);
+            $tmpData = $objPurchase->getOrderTemp($uniqid);
 
             // 当たりなので、使用ポイントを未使用にする。
             $tmpData['use_point'] = 0;
@@ -111,7 +112,7 @@
             $tmpData['note'] = '当たり';
 
             $uniqid = $objSiteSess->getUniqId();
-            $objDb->sfRegistTempOrder($uniqid, $tmpData);
+            $objPurchase->saveOrderTemp($uniqid, $tmpData, $objCustomer);
 
             // is_bingoセット
             $_SESSION['plugin_bingo'] = array('is_bingo'=>true);




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