/**
  * Page のプロセス.
  *
  * @return void
  */
 function process()
 {
     $objSubView = new SC_SiteView();
     $objCart = new SC_CartSession();
     $objSiteInfo = new SC_SiteInfo();
     if (count($_SESSION[$objCart->key]) > 0) {
         // カート情報を取得
         $arrCartList = $objCart->getCartList();
         // カート内の商品ID一覧を取得
         $arrAllProductID = $objCart->getAllProductID();
         // 商品が1つ以上入っている場合には商品名称を取得
         if (count($arrAllProductID) > 0) {
             $objQuery = new SC_Query();
             $arrVal = array();
             $sql = "";
             $sql = "SELECT name FROM dtb_products WHERE product_id IN ( ?";
             $arrVal = array($arrAllProductID[0]);
             for ($i = 1; $i < count($arrAllProductID); $i++) {
                 $sql .= " ,? ";
                 array_push($arrVal, $arrAllProductID[$i]);
             }
             $sql .= " )";
             $arrProduct_name = $objQuery->getAll($sql, $arrVal);
             foreach ($arrProduct_name as $key => $val) {
                 $arrCartList[$key]['product_name'] = $val['name'];
             }
         }
         // 店舗情報の取得
         $arrInfo = $objSiteInfo->data;
         // 購入金額合計
         $ProductsTotal = $objCart->getAllProductsTotal($arrInfo);
         // 合計個数
         $TotalQuantity = $objCart->getTotalQuantity();
         // 送料無料までの金額
         $arrCartList[0]['ProductsTotal'] = $ProductsTotal;
         $arrCartList[0]['TotalQuantity'] = $TotalQuantity;
         $deliv_free = $arrInfo['free_rule'] - $ProductsTotal;
         $arrCartList[0]['free_rule'] = $arrInfo['free_rule'];
         $arrCartList[0]['deliv_free'] = $deliv_free;
         $this->arrCartList = $arrCartList;
     }
     $objSubView->assignobj($this);
     $objSubView->display($this->tpl_mainpage);
 }
 /**
  * 単一配送指定用に配送商品を設定する
  *
  * @param  SC_CartSession $objCartSession カート情報のインスタンス
  * @param  integer        $shipping_id    配送先ID
  * @return void
  */
 public function setShipmentItemTempForSole(&$objCartSession, $shipping_id = 0)
 {
     $objCartSess = new SC_CartSession_Ex();
     $this->clearShipmentItemTemp();
     $arrCartList =& $objCartSession->getCartList($objCartSess->getKey());
     foreach ($arrCartList as $arrCartRow) {
         if ($arrCartRow['quantity'] == 0) {
             continue;
         }
         $this->setShipmentItemTemp($shipping_id, $arrCartRow['id'], $arrCartRow['quantity']);
     }
 }
 /**
  * Page のプロセス(モバイル).
  *
  * @return void
  */
 function mobileProcess()
 {
     $objView = new SC_MobileView();
     // カートが空かどうかを確認する。
     $objCartSess = new SC_CartSession("", false);
     $this->tpl_cart_empty = count($objCartSess->getCartList()) < 1;
     $objView->assignobj($this);
     $objView->display(SITE_FRAME);
 }
 /**
  * カートの商品を数量ごとに分割し, フォームに設定する.
  *
  * @param  SC_FormParam   $objFormParam SC_FormParam インスタンス
  * @param  SC_CartSession $objCartSess  SC_CartSession インスタンス
  * @return void
  */
 public function setParamToSplitItems(&$objFormParam, &$objCartSess)
 {
     $cartLists =& $objCartSess->getCartList($objCartSess->getKey());
     $arrItems = array();
     $index = 0;
     foreach (array_keys($cartLists) as $key) {
         $arrProductsClass = $cartLists[$key]['productsClass'];
         $quantity = (int) $cartLists[$key]['quantity'];
         for ($i = 0; $i < $quantity; $i++) {
             foreach ($arrProductsClass as $key2 => $val) {
                 $arrItems[$key2][$index] = $val;
             }
             $arrItems['quantity'][$index] = 1;
             $arrItems['price'][$index] = $cartLists[$key]['price'];
             $arrItems['price_inctax'][$index] = $cartLists[$key]['price_inctax'];
             $index++;
         }
     }
     $objFormParam->setParam($arrItems);
     $objFormParam->setValue('line_of_num', $index);
 }
Example #5
0
 /**
  * カート内商品の集計処理を行う.
  *
  * @param LC_Page $objPage ページクラスのインスタンス
  * @param SC_CartSession $objCartSess カートセッションのインスタンス
  * @param array $arrInfo 商品情報の配列
  * @return LC_Page 集計処理後のページクラスインスタンス
  */
 function sfTotalCart(&$objPage, $objCartSess, $arrInfo)
 {
     // 規格名一覧
     $arrClassName = $this->sfGetIDValueList("dtb_class", "class_id", "name");
     // 規格分類名一覧
     $arrClassCatName = $this->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
     $objPage->tpl_total_pretax = 0;
     // 費用合計(税込み)
     $objPage->tpl_total_tax = 0;
     // 消費税合計
     if (USE_POINT === true) {
         $objPage->tpl_total_point = 0;
         // ポイント合計
     }
     // カート内情報の取得
     $arrCart = $objCartSess->getCartList();
     $max = count($arrCart);
     $cnt = 0;
     for ($i = 0; $i < $max; $i++) {
         // 商品規格情報の取得
         $arrData = $this->sfGetProductsClass($arrCart[$i]['id']);
         $limit = "";
         // DBに存在する商品
         if (count($arrData) > 0) {
             // 購入制限数を求める。
             if ($arrData['stock_unlimited'] != '1' && $arrData['sale_unlimited'] != '1') {
                 if ($arrData['sale_limit'] < $arrData['stock']) {
                     $limit = $arrData['sale_limit'];
                 } else {
                     $limit = $arrData['stock'];
                 }
             } else {
                 if ($arrData['sale_unlimited'] != '1') {
                     $limit = $arrData['sale_limit'];
                 }
                 if ($arrData['stock_unlimited'] != '1') {
                     $limit = $arrData['stock'];
                 }
             }
             if ($limit != "" && $limit < $arrCart[$i]['quantity']) {
                 // カート内商品数を制限に合わせる
                 $objCartSess->setProductValue($arrCart[$i]['id'], 'quantity', $limit);
                 $quantity = $limit;
                 $objPage->tpl_message = "※「" . $arrData['name'] . "」は販売制限しております、一度にこれ以上の購入はできません。";
             } else {
                 $quantity = $arrCart[$i]['quantity'];
             }
             $objPage->arrProductsClass[$cnt] = $arrData;
             $objPage->arrProductsClass[$cnt]['quantity'] = $quantity;
             $objPage->arrProductsClass[$cnt]['cart_no'] = $arrCart[$i]['cart_no'];
             $objPage->arrProductsClass[$cnt]['class_name1'] = isset($arrClassName[$arrData['class_id1']]) ? $arrClassName[$arrData['class_id1']] : "";
             $objPage->arrProductsClass[$cnt]['class_name2'] = isset($arrClassName[$arrData['class_id2']]) ? $arrClassName[$arrData['class_id2']] : "";
             $objPage->arrProductsClass[$cnt]['classcategory_name1'] = $arrClassCatName[$arrData['classcategory_id1']];
             $objPage->arrProductsClass[$cnt]['classcategory_name2'] = $arrClassCatName[$arrData['classcategory_id2']];
             // 画像サイズ
             $main_image_path = IMAGE_SAVE_DIR . basename($objPage->arrProductsClass[$cnt]["main_image"]);
             if (file_exists($main_image_path)) {
                 list($image_width, $image_height) = getimagesize($main_image_path);
             } else {
                 $image_width = 0;
                 $image_height = 0;
             }
             $objPage->arrProductsClass[$cnt]["tpl_image_width"] = $image_width + 60;
             $objPage->arrProductsClass[$cnt]["tpl_image_height"] = $image_height + 80;
             // 価格の登録
             if ($arrData['price02'] != "") {
                 $objCartSess->setProductValue($arrCart[$i]['id'], 'price', $arrData['price02']);
                 $objPage->arrProductsClass[$cnt]['uniq_price'] = $arrData['price02'];
             } else {
                 $objCartSess->setProductValue($arrCart[$i]['id'], 'price', $arrData['price01']);
                 $objPage->arrProductsClass[$cnt]['uniq_price'] = $arrData['price01'];
             }
             // ポイント付与率の登録
             if (USE_POINT === true) {
                 $objCartSess->setProductValue($arrCart[$i]['id'], 'point_rate', $arrData['point_rate']);
             }
             // 商品ごとの合計金額
             $objPage->arrProductsClass[$cnt]['total_pretax'] = $objCartSess->getProductTotal($arrInfo, $arrCart[$i]['id']);
             // 送料の合計を計算する
             $objPage->tpl_total_deliv_fee += $arrData['deliv_fee'] * $arrCart[$i]['quantity'];
             $cnt++;
         } else {
             // DBに商品が見つからない場合はカート商品の削除
             $objCartSess->delProductKey('id', $arrCart[$i]['id']);
         }
     }
     // 全商品合計金額(税込み)
     $objPage->tpl_total_pretax = $objCartSess->getAllProductsTotal($arrInfo);
     // 全商品合計消費税
     $objPage->tpl_total_tax = $objCartSess->getAllProductsTax($arrInfo);
     // 全商品合計ポイント
     if (USE_POINT === true) {
         $objPage->tpl_total_point = $objCartSess->getAllProductsPoint();
     }
     return $objPage;
 }
Example #6
0
 /**
  * Page のプロセス(モバイル).
  *
  * @return void
  */
 function mobileProcess()
 {
     // 買い物を続ける場合
     if (!isset($_REQUEST['continue'])) {
         $_REQUEST['continue'] = "";
     }
     if ($_REQUEST['continue']) {
         $this->sendRedirect($this->getLocation(MOBILE_URL_SITE_TOP), true);
         exit;
     }
     $objView = new SC_MobileView(false);
     $objCartSess = new SC_CartSession("", false);
     $objSiteSess = new SC_SiteSession();
     $objSiteInfo = $objView->objSiteInfo;
     $objCustomer = new SC_Customer();
     $objDb = new SC_Helper_DB_Ex();
     // 基本情報の取得
     $arrInfo = $objSiteInfo->data;
     // 商品購入中にカート内容が変更された。
     if ($objCartSess->getCancelPurchase()) {
         $this->tpl_message = "商品購入中にカート内容が変更されましたので、お手数ですが購入手続きをやり直して下さい。";
     }
     if (!isset($_POST['mode'])) {
         $_POST['mode'] = "";
     }
     switch ($_POST['mode']) {
         case 'confirm':
             // カート内情報の取得
             $arrRet = $objCartSess->getCartList();
             $max = count($arrRet);
             $cnt = 0;
             for ($i = 0; $i < $max; $i++) {
                 // 商品規格情報の取得
                 $arrData = $objDb->sfGetProductsClass($arrRet[$i]['id']);
                 // DBに存在する商品
                 if ($arrData != "") {
                     $cnt++;
                 }
             }
             // カート商品が1件以上存在する場合
             if ($cnt > 0) {
                 // 正常に登録されたことを記録しておく
                 $objSiteSess->setRegistFlag();
                 $pre_uniqid = $objSiteSess->getUniqId();
                 // 注文一時IDの発行
                 $objSiteSess->setUniqId();
                 $uniqid = $objSiteSess->getUniqId();
                 // エラーリトライなどで既にuniqidが存在する場合は、設定を引き継ぐ
                 if ($pre_uniqid != "") {
                     $sqlval['order_temp_id'] = $uniqid;
                     $where = "order_temp_id = ?";
                     $objQuery = new SC_Query();
                     $objQuery->update("dtb_order_temp", $sqlval, $where, array($pre_uniqid));
                 }
                 // カートを購入モードに設定
                 $objCartSess->saveCurrentCart($uniqid);
                 // 購入ページへ
                 $this->sendRedirect(MOBILE_URL_SHOP_TOP, true);
                 exit;
             }
             break;
         default:
             break;
     }
     if (!isset($_GET['mode'])) {
         $_GET['mode'] = "";
     }
     /*
      * FIXME sendRedirect() を使った方が良いが無限ループしてしまう...
      */
     switch ($_GET['mode']) {
         case 'up':
             $objCartSess->upQuantity($_GET['cart_no']);
             SC_Utils_Ex::sfReload(session_name() . "=" . session_id());
             break;
         case 'down':
             $objCartSess->downQuantity($_GET['cart_no']);
             SC_Utils_Ex::sfReload(session_name() . "=" . session_id());
             break;
         case 'delete':
             $objCartSess->delProduct($_GET['cart_no']);
             SC_Utils_Ex::sfReload(session_name() . "=" . session_id());
             break;
     }
     // カート集計処理
     if (empty($arrData)) {
         $arrData = array();
     }
     $objDb->sfTotalCart($this, $objCartSess, $arrInfo);
     $this->arrData = $objDb->sfTotalConfirm($arrData, $this, $objCartSess, $arrInfo, $objCustomer);
     $this->arrInfo = $arrInfo;
     // ログイン判定
     if ($objCustomer->isLoginSuccess(true)) {
         $this->tpl_login = true;
         $this->tpl_user_point = $objCustomer->getValue('point');
         $this->tpl_name = $objCustomer->getValue('name01');
     }
     // 送料無料までの金額を計算
     $tpl_deliv_free = $this->arrInfo['free_rule'] - $this->tpl_total_pretax;
     $this->tpl_deliv_free = $tpl_deliv_free;
     // 前頁のURLを取得
     $this->tpl_prev_url = $objCartSess->getPrevURL();
     $objView->assignobj($this);
     $objView->display(SITE_FRAME);
 }
 /**
  * カートの情報を取得する
  *
  * @param SC_CartSession $objCart カートセッション管理クラス
  * @return array $arrCartList カートデータ配列
  */
 function lfGetCartData(&$objCart)
 {
     $arrCartKeys = $objCart->getKeys();
     foreach ($arrCartKeys as $cart_key) {
         // カート情報を取得
         $arrCartList = $objCart->getCartList($cart_key);
         // カート内の商品ID一覧を取得
         $arrAllProductID = $objCart->getAllProductID($cart_key);
         // 商品が1つ以上入っている場合には商品名称を取得
         if (!SC_Utils_Ex::isBlank($arrCartList['productsClass'])) {
             foreach ($arrCartList['productsClass'] as $key => $val) {
                 $arrCartList[$key]['product_name'] = $val['name'];
             }
         }
         // 購入金額合計
         $products_total += $objCart->getAllProductsTotal($cart_key);
         // 合計数量
         $total_quantity += $objCart->getTotalQuantity($cart_key);
         // 送料無料チェック
         if (!$this->isMultiple && !$this->hasDownload) {
             $is_deliv_free = $objCart->isDelivFree($cart_key);
         }
     }
     $arrCartList[0]['ProductsTotal'] = $products_total;
     $arrCartList[0]['TotalQuantity'] = $total_quantity;
     // 店舗情報の取得
     $arrInfo = SC_Helper_DB_Ex::sfGetBasisData();
     $arrCartList[0]['free_rule'] = $arrInfo['free_rule'];
     // 送料無料までの金額
     if ($is_deliv_free) {
         $arrCartList[0]['deliv_free'] = 0;
     } else {
         $deliv_free = $arrInfo['free_rule'] - $products_total;
         $arrCartList[0]['deliv_free'] = $deliv_free;
     }
     return $arrCartList;
 }
Example #8
0
 /**
  * 受注登録を完了する.
  *
  * 引数の受注情報を受注テーブル及び受注詳細テーブルに登録する.
  * 登録後, 受注一時テーブルに削除フラグを立てる.
  *
  * @param array $orderParams 登録する受注情報の配列
  * @param SC_CartSession $objCartSession カート情報のインスタンス
  * @param integer $cartKey 登録を行うカート情報のキー
  * @param integer 受注ID
  */
 function registerOrderComplete($orderParams, &$objCartSession, $cartKey)
 {
     $objQuery =& SC_Query_Ex::getSingletonInstance();
     // 不要な変数を unset
     $unsets = array('mailmaga_flg', 'deliv_check', 'point_check', 'password', 'reminder', 'reminder_answer', 'mail_flag', 'session');
     foreach ($unsets as $unset) {
         unset($orderParams[$unset]);
     }
     // 対応状況の指定が無い場合は新規受付
     if (SC_Utils_Ex::isBlank($orderParams['status'])) {
         $orderParams['status'] = ORDER_NEW;
     }
     $orderParams['create_date'] = 'CURRENT_TIMESTAMP';
     $orderParams['update_date'] = 'CURRENT_TIMESTAMP';
     $this->registerOrder($orderParams['order_id'], $orderParams);
     // 詳細情報を取得
     $cartItems = $objCartSession->getCartList($cartKey);
     // 詳細情報を生成
     $objProduct = new SC_Product_Ex();
     $i = 0;
     foreach ($cartItems as $item) {
         $p =& $item['productsClass'];
         $arrDetail[$i]['order_id'] = $orderParams['order_id'];
         $arrDetail[$i]['product_id'] = $p['product_id'];
         $arrDetail[$i]['product_class_id'] = $p['product_class_id'];
         $arrDetail[$i]['product_name'] = $p['name'];
         $arrDetail[$i]['product_code'] = $p['product_code'];
         $arrDetail[$i]['classcategory_name1'] = $p['classcategory_name1'];
         $arrDetail[$i]['classcategory_name2'] = $p['classcategory_name2'];
         $arrDetail[$i]['point_rate'] = $item['point_rate'];
         $arrDetail[$i]['price'] = $item['price'];
         $arrDetail[$i]['quantity'] = $item['quantity'];
         // 在庫の減少処理
         if (!$objProduct->reduceStock($p['product_class_id'], $item['quantity'])) {
             $objQuery->rollback();
             SC_Utils_Ex::sfDispSiteError(SOLD_OUT, "", true);
         }
         $i++;
     }
     $this->registerOrderDetail($orderParams['order_id'], $arrDetail);
     $objQuery->update("dtb_order_temp", array('del_flg' => 1), "order_temp_id = ?", array(SC_SiteSession_Ex::getUniqId()));
     return $orderParams['order_id'];
 }