/** * 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); }
/** * カート内商品の集計処理を行う. * * @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; }
/** * 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; }
/** * 受注登録を完了する. * * 引数の受注情報を受注テーブル及び受注詳細テーブルに登録する. * 登録後, 受注一時テーブルに削除フラグを立てる. * * @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']; }