[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 メーリングリストの案内