コード例 #1
0
ファイル: Index.php プロジェクト: ChigusaYasoda/ec-cube
 /**
  * 入力済みの購入情報をフォームに設定する.
  *
  * 受注一時テーブル, セッションの配送情報から入力済みの購入情報を取得し,
  * フォームに設定する.
  *
  * @param  FormParam       $objFormParam FormParam インスタンス
  * @param  PurchaseHelper $objPurchase  PurchaseHelper インスタンス
  * @param  integer            $uniqid       購入一時情報のユニークID
  * @return void
  */
 public function setFormParams(&$objFormParam, &$objPurchase, $uniqid)
 {
     $arrOrderTemp = $objPurchase->getOrderTemp($uniqid);
     if (Utils::isBlank($arrOrderTemp)) {
         $arrOrderTemp = array('order_email' => '', 'order_birth' => '');
     }
     $arrShippingTemp = $objPurchase->getShippingTemp();
     $objFormParam->setParam($arrOrderTemp);
     /*
      * count($arrShippingTemp) > 1 は複数配送であり,
      * $arrShippingTemp[0] は注文者が格納されている
      */
     if (count($arrShippingTemp) > 1) {
         $objFormParam->setParam($arrShippingTemp[1]);
     } else {
         if ($arrOrderTemp['deliv_check'] == 1) {
             $objFormParam->setParam($arrShippingTemp[1]);
         } else {
             $objFormParam->setParam($arrShippingTemp[0]);
         }
     }
     $objFormParam->setValue('order_email02', $arrOrderTemp['order_email']);
     $objFormParam->setDBDate($arrOrderTemp['order_birth'], 'order_year', 'order_month', 'order_day');
 }
コード例 #2
0
ファイル: Multiple.php プロジェクト: ChigusaYasoda/ec-cube
 /**
  * 複数配送情報を一時保存する.
  *
  * 会員ログインしている場合は, その他のお届け先から住所情報を取得する.
  *
  * @param   integer         $uniqid       一時受注テーブルのユニークID
  * @param   FormParam       $objFormParam FormParam インスタンス
  * @param   Customer        $objCustomer  Customer インスタンス
  * @param   PurchaseHelper  $objPurchase  PurchaseHelper インスタンス
  * @param   AddressHelper   $objAddress
  * @return  void
  */
 public function saveMultipleShippings($uniqid, FormParam &$objFormParam, Customer &$objCustomer, PurchaseHelper &$objPurchase, AddressHelper &$objAddress)
 {
     $arrValues = array();
     $arrItemTemp = array();
     $arrParams = $objFormParam->getSwapArray();
     foreach ($arrParams as $arrParam) {
         $other_deliv_id = $arrParam['shipping'];
         if ($objCustomer->isLoginSuccess(true)) {
             if ($other_deliv_id != 0) {
                 $otherDeliv = $objAddress->getAddress($other_deliv_id, $objCustomer->getValue('customer_id'));
                 if (!$otherDeliv) {
                     Utils::sfDispSiteError(FREE_ERROR_MSG, '', false, "入力値が不正です。<br />正しい値を入力してください。");
                     Application::alias('eccube.response')->actionExit();
                 }
                 foreach ($otherDeliv as $key => $val) {
                     $arrValues[$other_deliv_id]['shipping_' . $key] = $val;
                 }
             } else {
                 $objPurchase->copyFromCustomer($arrValues[0], $objCustomer, 'shipping');
             }
         } else {
             $arrValues = $objPurchase->getShippingTemp();
         }
         if (!isset($arrItemTemp[$other_deliv_id])) {
             $arrItemTemp[$other_deliv_id] = array();
         }
         if (!isset($arrItemTemp[$other_deliv_id][$arrParam['product_class_id']])) {
             $arrItemTemp[$other_deliv_id][$arrParam['product_class_id']] = 0;
         }
         $arrItemTemp[$other_deliv_id][$arrParam['product_class_id']] += $arrParam['quantity'];
     }
     $objPurchase->clearShipmentItemTemp();
     foreach ($arrValues as $shipping_id => $arrVal) {
         $objPurchase->saveShippingTemp($arrVal, $shipping_id);
     }
     foreach ($arrItemTemp as $other_deliv_id => $arrProductClassIds) {
         foreach ($arrProductClassIds as $product_class_id => $quantity) {
             if ($quantity == 0) {
                 continue;
             }
             $objPurchase->setShipmentItemTemp($other_deliv_id, $product_class_id, $quantity);
         }
     }
     //不必要な配送先を削除
     foreach ($_SESSION['shipping'] as $id => $arrShipping) {
         if (!isset($arrShipping['shipment_item'])) {
             $objPurchase->unsetOneShippingTemp($id);
         }
     }
     // $arrValues[0] には, 購入者の情報が格納されている
     $objPurchase->saveOrderTemp($uniqid, $arrValues[0], $objCustomer);
 }
コード例 #3
0
ファイル: Edit.php プロジェクト: ChigusaYasoda/ec-cube
 /**
  * DB更新処理
  *
  * @param  integer            $order_id        受注ID
  * @param  PurchaseHelper $objPurchase     PurchaseHelper インスタンス
  * @param  FormParam       $objFormParam    FormParam インスタンス
  * @param  string             $message         通知メッセージ
  * @param  array              $arrValuesBefore 更新前の受注情報
  * @return integer            $order_id 受注ID
  *
  * エラー発生時は負数を返す。
  */
 public function doRegister($order_id, PurchaseHelper &$objPurchase, &$objFormParam, &$message, &$arrValuesBefore)
 {
     $objQuery = Application::alias('eccube.query');
     $arrValues = $objFormParam->getDbArray();
     $where = 'order_id = ?';
     $objQuery->begin();
     // 支払い方法が変更されたら、支払い方法名称も更新
     if ($arrValues['payment_id'] != $arrValuesBefore['payment_id']) {
         $arrValues['payment_method'] = $this->arrPayment[$arrValues['payment_id']];
         $arrValuesBefore['payment_id'] = NULL;
     }
     // 生年月日の調整
     $arrValues['order_birth'] = Utils::sfGetTimestamp($arrValues['order_birth_year'], $arrValues['order_birth_month'], $arrValues['order_birth_day']);
     // 受注テーブルの更新
     $order_id = $objPurchase->registerOrder($order_id, $arrValues);
     $arrDetail = $objFormParam->getSwapArray(array('product_id', 'product_class_id', 'product_code', 'product_name', 'price', 'quantity', 'point_rate', 'classcategory_name1', 'classcategory_name2', 'tax_rate', 'tax_rule'));
     // 変更しようとしている商品情報とDBに登録してある商品情報を比較することで、更新すべき数量を計算
     $max = count($arrDetail);
     $k = 0;
     $arrStockData = array();
     for ($i = 0; $i < $max; $i++) {
         if (!empty($arrDetail[$i]['product_id'])) {
             $arrPreDetail = $objQuery->select('*', 'dtb_order_detail', 'order_id = ? AND product_class_id = ?', array($order_id, $arrDetail[$i]['product_class_id']));
             if (!empty($arrPreDetail) && $arrPreDetail[0]['quantity'] != $arrDetail[$i]['quantity']) {
                 // 数量が変更された商品
                 $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id'];
                 $arrStockData[$k]['quantity'] = $arrPreDetail[0]['quantity'] - $arrDetail[$i]['quantity'];
                 ++$k;
             } elseif (empty($arrPreDetail)) {
                 // 新しく追加された商品 もしくは 違う商品に変更された商品
                 $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id'];
                 $arrStockData[$k]['quantity'] = -$arrDetail[$i]['quantity'];
                 ++$k;
             }
             $objQuery->delete('dtb_order_detail', 'order_id = ? AND product_class_id = ?', array($order_id, $arrDetail[$i]['product_class_id']));
         }
     }
     // 上記の新しい商品のループでDELETEされなかった商品は、注文より削除された商品
     $arrPreDetail = $objQuery->select('*', 'dtb_order_detail', 'order_id = ?', array($order_id));
     foreach ($arrPreDetail as $key => $val) {
         $arrStockData[$k]['product_class_id'] = $val['product_class_id'];
         $arrStockData[$k]['quantity'] = $val['quantity'];
         ++$k;
     }
     // 受注詳細データの更新
     $objPurchase->registerOrderDetail($order_id, $arrDetail);
     // 在庫数調整
     if (ORDER_DELIV != $arrValues['status'] && ORDER_CANCEL != $arrValues['status']) {
         foreach ($arrStockData as $stock) {
             $objQuery->update('dtb_products_class', array(), 'product_class_id = ?', array($stock['product_class_id']), array('stock' => 'stock + ?'), array($stock['quantity']));
         }
     }
     $arrAllShipping = $objFormParam->getSwapArray($this->arrShippingKeys);
     $arrAllShipmentItem = $objFormParam->getSwapArray($this->arrShipmentItemKeys);
     $arrDelivTime = Application::alias('eccube.helper.delivery')->getDelivTime($objFormParam->getValue('deliv_id'));
     //商品単価を複数配送にも適応
     $arrShippingValues = array();
     $arrIsNotQuantityUp = array();
     foreach ($arrAllShipping as $shipping_index => $arrShipping) {
         $shipping_id = $arrShipping['shipping_id'];
         $arrShippingValues[$shipping_index] = $arrShipping;
         $arrShippingValues[$shipping_index]['shipping_date'] = Utils::sfGetTimestamp($arrShipping['shipping_date_year'], $arrShipping['shipping_date_month'], $arrShipping['shipping_date_day']);
         //商品単価を複数配送にも反映する
         foreach ($arrDetail as $product_detail) {
             foreach ($arrAllShipmentItem[$shipping_index]['shipment_product_class_id'] as $relation_index => $shipment_product_class_id) {
                 if ($product_detail['product_class_id'] == $shipment_product_class_id) {
                     $arrAllShipmentItem[$shipping_index]['shipment_price'][$relation_index] = $product_detail['price'];
                 }
             }
         }
         // 配送業者IDを取得
         $arrShippingValues[$shipping_index]['deliv_id'] = $objFormParam->getValue('deliv_id');
         // お届け時間名称を取得
         $arrShippingValues[$shipping_index]['shipping_time'] = $arrDelivTime[$arrShipping['time_id']];
         // 複数配送の場合は配送商品を登録
         if (!Utils::isBlank($arrAllShipmentItem)) {
             $arrShipmentValues = array();
             foreach ($arrAllShipmentItem[$shipping_index] as $key => $arrItem) {
                 // TODO $arrItemが配列でない場合があるのを見直した方が良いかもしれない
                 if (is_array($arrItem)) {
                     $i = 0;
                     foreach ($arrItem as $item) {
                         $arrShipmentValues[$shipping_index][$i][str_replace('shipment_', '', $key)] = $item;
                         $i++;
                     }
                 }
             }
             $objPurchase->registerShipmentItem($order_id, $shipping_id, $arrShipmentValues[$shipping_index]);
         }
     }
     $objPurchase->registerShipping($order_id, $arrShippingValues, false);
     $objQuery->commit();
     return $order_id;
 }
コード例 #4
0
ファイル: Payment.php プロジェクト: ChigusaYasoda/ec-cube
 /**
  * 受注一時テーブルへ登録を行う.
  *
  * @param  integer            $uniqid      受注一時テーブルのユニークID
  * @param  array              $arrForm     フォームの入力値
  * @param  PurchaseHelper $objPurchase PurchaseHelper インスタンス
  * @param  array              $arrPayment  お支払い方法の配列
  * @return void
  */
 public function lfRegistData($uniqid, $arrForm, &$objPurchase, $arrPayment)
 {
     $arrForm['order_temp_id'] = $uniqid;
     $arrForm['update_date'] = 'CURRENT_TIMESTAMP';
     if ($arrForm['point_check'] != '1') {
         $arrForm['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);
 }
コード例 #5
0
ファイル: History.php プロジェクト: ChigusaYasoda/ec-cube
 /**
  * 受注お届け先情報の取得
  *
  * @param PurchaseHelper $objPurchase object PurchaseHelperクラス
  * @param $order_id integer 注文番号
  * @param $arrWDAY array 曜日データの配列
  * @return array お届け先情報
  */
 public function lfGetShippingDate(&$objPurchase, $order_id, $arrWDAY)
 {
     $arrShipping = $objPurchase->getShippings($order_id);
     foreach ($arrShipping as $shipping_index => $shippingData) {
         foreach ($shippingData as $key => $val) {
             if ($key == 'shipping_date' && Utils::isBlank($val) == false) {
                 // お届け日を整形
                 list($y, $m, $d, $w) = explode(' ', date('Y m d w', strtotime($val)));
                 $arrShipping[$shipping_index]['shipping_date'] = sprintf('%04d/%02d/%02d(%s)', $y, $m, $d, $arrWDAY[$w]);
             }
         }
     }
     return $arrShipping;
 }
コード例 #6
0
ファイル: Customer.php プロジェクト: ChigusaYasoda/ec-cube
 public function EndSession()
 {
     // セッション情報破棄の前にcustomer_idを保存
     $customer_id = $_SESSION['customer']['customer_id'];
     // $_SESSION['customer']の解放
     unset($_SESSION['customer']);
     // セッションの配送情報を全て破棄する
     PurchaseHelper::unsetAllShippingTemp(true);
     // トランザクショントークンの破棄
     SessionHelper::destroyToken();
     /* @var $objSiteSess SiteSession */
     $objSiteSess = Application::alias('eccube.site_session');
     $objSiteSess->unsetUniqId();
     // ログに記録する
     $log = sprintf("logout : user=%d\tip=%s", $customer_id, $this->getRemoteHost());
     GcUtils::gfPrintLog($log, CUSTOMER_LOG_REALFILE, false);
 }
コード例 #7
0
 /**
  * セッションの配送情報を破棄する.
  *
  * @deprecated 2.12.0 から EC-CUBE 本体では使用していない。
  * @return void
  */
 public function unsetShippingTemp()
 {
     PurchaseHelper::unsetAllShippingTemp(true);
 }
コード例 #8
0
ファイル: DbHelper.php プロジェクト: ChigusaYasoda/ec-cube
 /**
  * 受注番号、最終ポイント、加算ポイント、利用ポイントから「オーダー前ポイント」を取得する
  *
  * @param  integer $order_id     受注番号
  * @param  integer $use_point    利用ポイント
  * @param  integer $add_point    加算ポイント
  * @param  integer $order_status 対応状況
  * @return array   オーダー前ポイントの配列
  */
 public function getRollbackPoint($order_id, $use_point, $add_point, $order_status)
 {
     /* @var $objQuery Query */
     $objQuery = Application::alias('eccube.query');
     $arrRet = $objQuery->select('customer_id', 'dtb_order', 'order_id = ?', array($order_id));
     $customer_id = $arrRet[0]['customer_id'];
     if ($customer_id != '' && $customer_id >= 1) {
         $arrRet = $objQuery->select('point', 'dtb_customer', 'customer_id = ?', array($customer_id));
         $point = $arrRet[0]['point'];
         $rollback_point = $arrRet[0]['point'];
         // 対応状況がポイント利用対象の場合、使用ポイント分を戻す
         if (PurchaseHelper::isUsePoint($order_status)) {
             $rollback_point += $use_point;
         }
         // 対応状況がポイント加算対象の場合、加算ポイント分を戻す
         if (PurchaseHelper::isAddPoint($order_status)) {
             $rollback_point -= $add_point;
         }
     } else {
         $rollback_point = '';
         $point = '';
     }
     return array($point, $rollback_point);
 }
コード例 #9
0
ファイル: Confirm.php プロジェクト: ChigusaYasoda/ec-cube
 /**
  * Page のアクション.
  *
  * @return void
  */
 public function action()
 {
     //決済処理中ステータスのロールバック
     /* @var $objPurchase PurchaseHelper */
     $objPurchase = Application::alias('eccube.helper.purchase');
     $objPurchase->cancelPendingOrder(PENDING_ORDER_CANCEL_FLAG);
     /* @var $objCartSess CartSession */
     $objCartSess = Application::alias('eccube.cart_session');
     /* @var $objSiteSess SiteSession */
     $objSiteSess = Application::alias('eccube.site_session');
     /* @var $objCustomer Customer */
     $objCustomer = Application::alias('eccube.customer');
     $this->is_multiple = $objPurchase->isMultiple();
     // 前のページで正しく登録手続きが行われた記録があるか判定
     if (!$objSiteSess->isPrePage()) {
         Utils::sfDispSiteError(PAGE_ERROR, $objSiteSess);
     }
     // ユーザユニークIDの取得と購入状態の正当性をチェック
     $this->tpl_uniqid = $objSiteSess->getUniqId();
     $objPurchase->verifyChangeCart($this->tpl_uniqid, $objCartSess);
     $this->cartKey = $objCartSess->getKey();
     // カート内商品のチェック
     $this->tpl_message = $objCartSess->checkProducts($this->cartKey);
     if (!Utils::isBlank($this->tpl_message)) {
         Application::alias('eccube.response')->sendRedirect(CART_URL);
         Application::alias('eccube.response')->actionExit();
     }
     $this->is_download = $this->cartKey == PRODUCT_TYPE_DOWNLOAD;
     // カートの商品を取得
     $this->arrShipping = $objPurchase->getShippingTemp($this->is_multiple);
     $this->arrCartItems = $objCartSess->getCartList($this->cartKey);
     // 合計金額
     $this->tpl_total_inctax = $objCartSess->getAllProductsTotal($this->cartKey);
     // 税額
     $this->tpl_total_tax = $objCartSess->getAllProductsTax($this->cartKey);
     $this->tpl_total_tax = $objCartSess->getAllProductsTax($this->cartKey);
     $objFormParam = new FormParam();
     $this->lfInitParam($objFormParam, $this->arrShipping);
     $objFormParam->setParam($_POST);
     $objFormParam->convParam();
     $objFormParam->trimParam();
     // 一時受注テーブルの読込
     $arrOrderTemp = $objPurchase->getOrderTemp($this->tpl_uniqid);
     // 配送業者を取得
     $objDelivery = new DeliveryHelper();
     $this->arrDeliv = $objDelivery->getList($this->cartKey, false, true);
     $this->tpl_is_single_deliv = $objDelivery->isSingleDeliv($this->cartKey);
     // お届け日一覧の取得
     $this->arrDelivDate = $objPurchase->getDelivDate($objCartSess, $this->cartKey);
     if (Utils::sfIsInt($arrOrderTemp['deliv_id'])) {
         $this->arrPayment = $objPurchase->getSelectablePayment($objCartSess, $arrOrderTemp['deliv_id'], true);
         $this->arrDelivTime = DeliveryHelper::getDelivTime($arrOrderTemp['deliv_id']);
     }
     // カート集計を元に最終計算
     $arrCalcResults = $objCartSess->calculate($this->cartKey, $objCustomer, $arrOrderTemp['use_point'], $objPurchase->getShippingPref($this->is_multiple), $arrOrderTemp['charge'], $arrOrderTemp['discount'], $arrOrderTemp['deliv_id'], $arrOrderTemp['order_pref'], $arrOrderTemp['order_country_id']);
     $this->arrForm = array_merge($arrOrderTemp, $arrCalcResults);
     foreach ($objFormParam->getHashArray() as $key => $param) {
         if (!Utils::isBlank($param) && Utils::isBlank($this->arrForm[$key])) {
             $this->arrForm[$key] = $param;
         }
     }
     // 会員ログインチェック
     if ($objCustomer->isLoginSuccess(true)) {
         $this->tpl_login = '******';
         $this->tpl_user_point = $objCustomer->getValue('point');
     }
     // 決済モジュールを使用するかどうか
     $this->use_module = Application::alias('eccube.helper.payment')->useModule($this->arrForm['payment_id']);
     switch ($this->getMode()) {
         case 'select_deliv':
             $sqlval = $objFormParam->getHashArray();
             if (Utils::isBlank($sqlval['use_point'])) {
                 $sqlval['use_point'] = '0';
             }
             $deliv_id = $objFormParam->getValue('deliv_id');
             $arrPayment = $objPurchase->getSelectablePayment($objCartSess, $deliv_id);
             $sqlval['payment_id'] = $arrPayment[0]['payment_id'];
             $sqlval['payment_method'] = $arrPayment[0]['payment_method'];
             $objPurchase->saveOrderTemp($this->tpl_uniqid, $sqlval);
             Response::reload();
             break;
             // 前のページに戻る
         // 前のページに戻る
         case 'return':
             // 正常な推移であることを記録しておく
             $objSiteSess->setRegistFlag();
             Application::alias('eccube.response')->sendRedirect(SHOPPING_PAYMENT_URLPATH);
             Application::alias('eccube.response')->actionExit();
             break;
         case 'confirm':
             $this->saveShippings($objFormParam, $this->arrDelivTime);
             $deliv_id = $objFormParam->getValue('deliv_id');
             $arrPayment = $objPurchase->getSelectablePayment($objCartSess, $deliv_id);
             $this->lfRegistPayment($this->tpl_uniqid, $objFormParam->getHashArray(), $objPurchase, $arrPayment);
             /*
              * 決済モジュールで必要なため, 受注番号を取得
              */
             $this->arrForm['order_id'] = $objPurchase->getNextOrderID();
             $_SESSION['order_id'] = $this->arrForm['order_id'];
             // 集計結果を受注一時テーブルに反映
             $objPurchase->saveOrderTemp($this->tpl_uniqid, $this->arrForm, $objCustomer);
             // 正常に登録されたことを記録しておく
             $objSiteSess->setRegistFlag();
             // 決済モジュールを使用する場合
             if ($this->use_module) {
                 $objPurchase->completeOrder(ORDER_PENDING);
                 Application::alias('eccube.response')->sendRedirect(SHOPPING_MODULE_URLPATH);
                 // 購入完了ページ
             } else {
                 $objPurchase->completeOrder(ORDER_NEW);
                 PurchaseHelper::sendOrderMail($this->arrForm['order_id'], $this);
                 Application::alias('eccube.response')->sendRedirect(SHOPPING_COMPLETE_URLPATH);
             }
             Application::alias('eccube.response')->actionExit();
             break;
         default:
             break;
     }
 }
コード例 #10
0
ファイル: Deliv.php プロジェクト: ChigusaYasoda/ec-cube
 /**
  * お届け先チェックの値に応じて, お届け先情報を保存する.
  *
  * 会員住所がチェックされている場合は, 会員情報からお届け先を取得する.
  * その他のお届け先がチェックされている場合は, その他のお届け先からお届け先を取得する.
  * お届け先チェックの値が不正な場合は false を返す.
  *
  * @param  integer            $other_deliv_id
  * @param  string             $uniqid         受注一時テーブルのユニークID
  * @param  PurchaseHelper $objPurchase    PurchaseHelper インスタンス
  * @param  Customer        $objCustomer    Customer インスタンス
  * @param AddressHelper $objAddress
  * @return boolean            お届け先チェックの値が妥当な場合 true
  */
 public function registerDeliv($other_deliv_id, $uniqid, PurchaseHelper &$objPurchase, Customer &$objCustomer, AddressHelper $objAddress)
 {
     $arrValues = array();
     // 会員登録住所がチェックされている場合
     if ($other_deliv_id == 0) {
         $objPurchase->copyFromCustomer($arrValues, $objCustomer, 'shipping');
         // 別のお届け先がチェックされている場合
     } else {
         $arrOtherDeliv = $objAddress->getAddress($other_deliv_id, $objCustomer->getValue('customer_id'));
         if (!$arrOtherDeliv) {
             return false;
         }
         $objPurchase->copyFromOrder($arrValues, $arrOtherDeliv, 'shipping', '');
     }
     $objPurchase->saveShippingTemp($arrValues, $other_deliv_id);
     $objPurchase->saveOrderTemp($uniqid, $arrValues, $objCustomer);
     return true;
 }