protected static function getIns() { if (!self::$ins instanceof CartHelper) { self::$ins = new CartHelper(); } return self::$ins; }
function display($tpl = null) { $cart = unserialize(JFactory::getSession()->get('cart')); CartHelper::checkCart($cart); $setting = JModel::getInstance('setting', 'enmasseModel')->getSetting(); $arData = array(); $this->payGtyList = JModel::getInstance('payGty', 'enmasseModel')->listAll(); $this->assignRef('termArticleId', $setting->article_id); $this->assignRef('theme', $setting->theme); $this->user = JModel::getInstance('user', 'enmasseModel')->getUser(); $this->assignRef('cart', $cart); //get user data was save in the session $arData = JFactory::getApplication()->getUserState('com_enmasse.checkout.data'); if (empty($arData)) { //contruct default value for the inputs $arData['name'] = $this->user->name; $arData['email'] = $this->user->email; $arData['receiver_name'] = ""; $arData['receiver_email'] = ""; $arData['receiver_msg'] = ""; $arData['receiver_address'] = ""; $arData['receiver_phone'] = ""; } $this->arData = $arData; $this->_setPath('template', JPATH_SITE . DS . "components" . DS . "com_enmasse" . DS . "theme" . DS . EnmasseHelper::getThemeFromSetting() . DS . "tmpl" . DS); $this->_layout = "shop_checkout"; parent::display($tpl); }
function _displayCart() { $comm_cart = array(0, 0); if (isset($_SESSION['cart'])) { $cartObj = CartHelper::getCart(); $comm_cart[0] = $cartObj->getItemCount(); $comm_cart[1] = $cartObj->getPrice(); } return $comm_cart; }
function onAfterRoute() { if (JFactory::getApplication()->isAdmin()) { return; } if (JRequest::getCmd('type') == 'onepage') { define('JPATH_COMPONENT', JPATH_SITE . DS . 'components' . DS . 'com_virtuemart'); require_once JPATH_SITE . DS . 'templates' . DS . JFactory::getApplication()->getTemplate() . DS . 'html' . DS . 'com_virtuemart' . DS . 'cart' . DS . 'helper.php'; $helper = new CartHelper(); switch (JRequest::getCmd('opc_task')) { case 'set_coupon': $ret = $helper->setCoupon(); echo json_encode($ret); break; case 'update_form': if (JRequest::getInt('update_address', 1) == 1) { $helper->setAddress(); } $ret = $helper->setPayment(); if (is_array($ret)) { echo json_encode(array('error' => 1, 'message' => implode($ret))); break; } $ret = $helper->setShipment(); if (is_array($ret)) { echo json_encode(array('error' => 1, 'message' => implode($ret))); break; } $helper->lSelectShipment(); $helper->lSelectPayment(); $data = array(); $data["shipments"] = $helper->shipments_shipment_rates; $data["payments"] = $helper->paymentplugins_payments; $data["price"] = $helper->getPrices(); echo json_encode($data); break; case 'update_product': $helper->setAddress(); $helper->updateProduct(); $helper->lSelectShipment(); $helper->lSelectPayment(); $data = array(); $data["shipments"] = $helper->shipments_shipment_rates; $data["payments"] = $helper->paymentplugins_payments; $data["price"] = $helper->getPrices(); echo json_encode($data); break; case 'remove_product': $helper->setAddress(); $helper->removeProduct(); $helper->lSelectShipment(); $helper->lSelectPayment(); $data = array(); $data["shipments"] = $helper->shipments_shipment_rates; $data["payments"] = $helper->paymentplugins_payments; $data["price"] = $helper->getPrices(); echo json_encode($data); break; case 'register': $ret = $helper->register(); echo json_encode($ret); break; case 'set_checkout': $helper->setAddress(); $helper->updateProduct(); $ret = $helper->setPayment(); $ret = $helper->setShipment(); echo json_encode(array()); break; } JFactory::getApplication()->close(); } }
<?php /* 购物车控制器 */ define('ACC', true); require '../system/init.php'; //实例化购物车类和商品类 $cartObj = CartHelper::getCart(); $goods = new GoodsModel(); $act = isset($_GET['act']) ? $_GET['act'] : 'buy'; //购买商品,去结算 if ($act == 'buy') { if (isset($_GET['goods_id'])) { $goods_id = $_GET['goods_id']; $goods_info = $goods->find($goods_id); $num = isset($_GET['num']) ? $_GET['num'] + 0 : 1; //商品是否存在 if (!isset($goods_info)) { $msg = "The ware is not exist<br>"; include __ROOT__ . 'view/front/msg.html'; exit; } //商品是否上架或者删除 if ($goods_info['is_delete'] || !$goods_info['is_on_sale']) { $msg = "The ware is not available<br>"; include __ROOT__ . 'view/front/msg.html'; exit; } //商品是否有库存 if ($cartObj->getNoByID($goods_id) + $num > $goods_info['goods_number']) {
function submitCheckOut() { $activeGuestBuying = EnmasseHelper::isGuestBuyingEnable(); $bBuy4friend = JRequest::getVar('buy4friend', 0); $sEmailPt = "/^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})\$/"; //save user input data into the session if (JRequest::getMethod() == "POST") { $arData = JRequest::get('post'); JFactory::getApplication()->setUserState("com_enmasse.checkout.data", $arData); } //check the permission for checkout action if (JFactory::getUser()->get('guest') && !$activeGuestBuying) { $msg = JText::_("MERCHANT_PLEASE_LOGIN_BEFORE"); $redirectUrl = base64_encode("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}"); $link = JRoute::_("index.php?option=com_users&view=login&return=" . $redirectUrl, false); JFactory::getApplication()->redirect($link, $msg, 'error'); } //validate the cart $cart = unserialize(JFactory::getSession()->get('cart')); CartHelper::checkCart($cart); foreach ($cart->getAll() as $cartItem) { $item = $cartItem->getItem(); } //get enmasse setting $setting = JModel::getInstance('setting', 'enmasseModel')->getSetting(); // check max cart Item $this->checkMaxCartItem($cart); //validate Buyer information $buyerName = JRequest::getVar('name'); $buyerEmail = JRequest::getVar('email'); if (empty($buyerName) || empty($buyerEmail)) { $msg = JText::_("SHOP_CARD_CHECKOUT_BUYER_INFORMATION_REQUIRED_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } elseif (!preg_match($sEmailPt, $buyerEmail)) { $msg = JText::_("SHOP_CARD_CHECKOUT_BUYER_EMAIL_INVALID_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } //----- If the deal permit partial payment, it mean the coupon was delivery by directly, so we need to validate address and phone number of receiver if ($item->prepay_percent < 100) { $receiverAddress = JRequest::getVar('receiver_address'); $receiverPhone = JRequest::getVar('receiver_phone'); if (empty($receiverPhone) || empty($receiverAddress)) { $msg = JText::_("SHOP_CARD_CHECKOUT_RECEIVER_INFORMATION_REQUIRED_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } else { if (!preg_match('/^[0-9 \\.,\\-\\(\\)\\+]*$/', $receiverPhone)) { $msg = JText::_("SHOP_CARD_CHECKOUT_RECEIVER_PHONE_INVALID"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } } } if ($bBuy4friend) { $receiverName = JRequest::getVar('receiver_name'); $receiverEmail = JRequest::getVar('receiver_email'); $receiverMsg = JRequest::getVar('receiver_msg'); if (empty($receiverName) || empty($receiverEmail)) { $msg = JText::_("SHOP_CARD_CHECKOUT_RECEIVER_INFORMATION_REQUIRED_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } elseif (!preg_match($sEmailPt, $receiverEmail)) { $msg = JText::_("SHOP_CARD_CHECKOUT_RECEIVER_EMAIL_INVALID_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } } //------------------------------------------------------ // to check it this deal is free for customer if ($cart->getTotalPrice() > 0) { //deal is not free $payGtyId = JRequest::getVar('payGtyId'); if ($payGtyId == null) { $msg = JText::_("SELECT_PAYMENT_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } if ($setting->article_id != 0 && JRequest::getVar('terms') == false) { $msg = JText::_("AGREE_TERM_CONDITION_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } $payGty = JModel::getInstance('payGty', 'enmasseModel')->getById($payGtyId); // checking gateway configuration if (CartHelper::checkGty($payGty) == false) { $msg = JText::_("PAYMENT_INCOMPLETE_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg); } // save gty info into session JFactory::getSession()->set('payGty', serialize($payGty)); JFactory::getSession()->set('attribute_config', json_encode($payGty->attribute_config)); //--------If admin set the prepay_percent of the deal to 0.00, set the order status to 'Paid' (with paid_amount is 0.00) if ($item->prepay_percent == 0.0) { $status = EnmasseHelper::$ORDER_STATUS_LIST['Paid']; $couponStatus = EnmasseHelper::$INVTY_STATUS_LIST['Hold']; } else { //------------------------------------ // generate name of payment gateway file and class $payGtyFile = 'PayGty' . ucfirst($payGty->class_name) . '.class.php'; $className = 'PayGty' . ucfirst($payGty->class_name); //--------------------------------------------------- // get payment gateway object require_once JPATH_SITE . DS . "components" . DS . "com_enmasse" . DS . "helpers" . DS . "payGty" . DS . $payGty->class_name . DS . $payGtyFile; $paymentClassObj = new $className(); $paymentReturnStatusObj = $paymentClassObj->returnStatus(); $status = $paymentReturnStatusObj->order; $couponStatus = $paymentReturnStatusObj->coupon; } } else { //deal is free $payGty = "Free"; $status = 'Unpaid'; $couponStatus = 'Pending'; //save the payGty as free JFactory::getSession()->set('payGty', 'Free'); } //---------------------------------------- //determine information of coupon receiver if ($bBuy4friend) { $deliveryDetail = array('name' => $receiverName, 'email' => $receiverEmail, 'msg' => $receiverMsg, 'address' => $receiverAddress, 'phone' => $receiverPhone); } else { $deliveryDetail = array('name' => $buyerName, 'email' => $buyerEmail, 'msg' => '', 'address' => $receiverAddress, 'phone' => $receiverPhone); } //-------------------------- //generate order $dvrGty = $item->prepay_percent < 100 ? 2 : 1; $deliveryGty = JModel::getInstance('deliveryGty', 'enmasseModel')->getById($dvrGty); $user = array(); $user['id'] = JFactory::getUser()->get('id', 0); $user['name'] = $buyerName; $user['email'] = $buyerEmail; $order = CartHelper::saveOrder($cart, $user, $payGty, null, $deliveryGty, $deliveryDetail, $status); $session =& JFactory::getSession(); $session->set('newOrderId', $order->id); $orderItemList = CartHelper::saveOrderItem($cart, $order, $status); //----------------------------- // if this deal is set limited the coupon to sold out, go to invty and allocate coupons for this order // if not create coupons for that order if ($item->max_coupon_qty > 0) { $now = DatetimeWrapper::getDatetimeOfNow(); $nunOfSecondtoAdd = EnmasseHelper::getMinuteReleaseInvtyFromSetting($payGty) * 60; $intvy = CartHelper::allocatedInvty($orderItemList, DatetimeWrapper::mkFutureDatetimeSecFromNow($now, $nunOfSecondtoAdd), $couponStatus); } else { JModel::getInstance('invty', 'enmasseModel')->generateForOrderItem($orderItemList[0]->pdt_id, $orderItemList[0]->id, $orderItemList[0]->qty, $couponStatus); } //------------------------ //generate integration class $isPointSystemEnabled = EnmasseHelper::isPointSystemEnabled(); if ($isPointSystemEnabled) { $integrationClass = EnmasseHelper::getPointSystemClassFromSetting(); $integrateFileName = $integrationClass . '.class.php'; require_once JPATH_SITE . DS . "components" . DS . "com_enmasse" . DS . "helpers" . DS . "pointsystem" . DS . $integrationClass . DS . $integrateFileName; $user = JFactory::getUser(); $user_id = $user->get('id'); $point = $cart->getPoint(); if ($point > 0) { $integrationObject = new $integrationClass(); $integrationObject->integration($user_id, 'paybypoint', $point); } } //validating is ok, flush user data JFactory::getApplication()->setUserState("com_enmasse.checkout.data", null); // -------------------------------- // if deal is free then directly do the notify if ($cart->getTotalPrice() > 0) { //deal is not free, check if buyer must prepay a specific amount if ($item->prepay_percent > 0) { $link = JRoute::_("index.php?option=com_enmasse&controller=payment&task=gateway&orderId=" . $order->id, false); } else { //do notify for the order that not to prepay EnmasseHelper::doNotify($order->id); $link = JRoute::_("index.php?option=com_enmasse&controller=deal&task=listing"); $msg = JText::_("PARTIAL_PAYMENT_NO_PREPAY_CHECKOUT_MSG"); JFactory::getApplication()->redirect($link, $msg); } } else { //deal is free $link = JRoute::_("index.php?option=com_enmasse&controller=payment&task=doNotify&orderId={$order->id}", false); } JFactory::getApplication()->redirect($link); }
function onAfterRoute() { if (JFactory::getApplication()->isAdmin()) { return; } if (JRequest::getCmd('type') == 'onepage') { define('JPATH_COMPONENT', JPATH_SITE . DS . 'components' . DS . 'com_virtuemart'); require_once dirname(__FILE__) . DS . 'cart' . DS . 'tmpl' . DS . 'helper.php'; $helper = new CartHelper(); switch (JRequest::getCmd('opc_task')) { case 'set_coupon': $ret = $helper->setCoupon(); echo json_encode($ret); break; case 'update_form': if (JRequest::getInt('update_address', 1) == 1) { $helper->setAddress(); } $ret = $helper->setPayment(); if (is_array($ret)) { echo json_encode(array('error' => 1, 'message' => implode($ret))); break; } $ret = $helper->setShipment(); if (is_array($ret)) { echo json_encode(array('error' => 1, 'message' => implode($ret))); break; } $helper->lSelectShipment(); $helper->lSelectPayment(); $data = array(); $data["shipments"] = $helper->shipments_shipment_rates; $data["payments"] = $helper->paymentplugins_payments; $data["paymentsnew"] = $helper->getpayments(); $data["price"] = $helper->getPrices(); echo json_encode($data); break; case 'update_product': $helper->setAddress(); $helper->updateProduct(); $helper->lSelectShipment(); $helper->lSelectPayment(); $data = array(); $data["shipments"] = $helper->shipments_shipment_rates; $data["payments"] = $helper->paymentplugins_payments; $data["paymentsnew"] = $helper->getpayments(); $data["price"] = $helper->getPrices(); echo json_encode($data); break; case 'remove_product': $helper->setAddress(); $helper->removeProduct(); $helper->lSelectShipment(); $helper->lSelectPayment(); $data = array(); $data["shipments"] = $helper->shipments_shipment_rates; $data["payments"] = $helper->paymentplugins_payments; $data["paymentsnew"] = $helper->getpayments(); $data["price"] = $helper->getPrices(); echo json_encode($data); break; case 'register': $ret = $helper->register(); echo json_encode($ret); break; case 'set_checkout': $helper->setAddress(); $ret = $helper->setPayment(); $ret = $helper->setShipment(); echo json_encode(array()); break; case 'login': if ($return = JRequest::getVar('return')) { $return = base64_decode($return); if (!JURI::isInternal($return)) { $return = ''; } } $options = array(); $options['remember'] = false; $options['return'] = $return; $credentials = array(); $credentials['username'] = JRequest::getVar('username'); $credentials['password'] = JRequest::getString('passwd'); $mainframe = JFactory::getApplication(); //preform the login action $response = $mainframe->login($credentials, $options); if ($response == false) { echo "error"; } break; } JFactory::getApplication()->close(); } $document = JFactory::getDocument(); $app = JFactory::getApplication(); $template = $app->getTemplate(true); if (!class_exists('VmConfig')) { require JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart' . DS . 'helpers' . DS . 'config.php'; } VmConfig::loadConfig(); $uri = JFactory::getURI(); $post = JRequest::get('post'); $_option = JRequest::getString('option'); $_view = JRequest::getString('view'); $_format = JRequest::getString('format', ''); $_task = JRequest::getString('task', ''); $_tmpl = JRequest::getString('tmpl', ''); if ($_option == 'com_virtuemart' && $_view == 'cart' && $_format != 'json') { require_once dirname(__FILE__) . DS . 'cart' . DS . 'cartview.html.php'; } }