_getCart()->getQuote(); } /** * Set back redirect url to response * * @return Mage_Checkout_CartController */ protected function _goBack() { $returnUrl = $this->getRequest()->getParam('return_url'); if ($returnUrl) { // clear layout messages in case of external url redirect if ($this->_isUrlInternal($returnUrl)) { $this->_getSession()->getMessages(true); } $this->getResponse()->setRedirect($returnUrl); } elseif (!Mage::getStoreConfig('checkout/cart/redirect_to_cart') && !$this->getRequest()->getParam('in_cart') && $backUrl = $this->_getRefererUrl() ) { $this->getResponse()->setRedirect($backUrl); } else { if (($this->getRequest()->getActionName() == 'add') && !$this->getRequest()->getParam('in_cart')) { $this->_getSession()->setContinueShoppingUrl($this->_getRefererUrl()); } $this->_redirect('checkout/cart'); } return $this; } /** * Initialize product instance from request data * * @return Mage_Catalog_Model_Product || false */ protected function _initProduct() { $productId = (int) $this->getRequest()->getParam('product'); if ($productId) { $product = Mage::getModel('catalog/product') ->setStoreId(Mage::app()->getStore()->getId()) ->load($productId); if ($product->getId()) { return $product; } } return false; } /** * Shopping cart display action */ public function indexAction() { $cart = $this->_getCart(); if ($cart->getQuote()->getItemsCount()) { $cart->init(); $cart->save(); if (!$this->_getQuote()->validateMinimumAmount()) { $warning = Mage::getStoreConfig('sales/minimum_order/description'); $cart->getCheckoutSession()->addNotice($warning); } } foreach ($cart->getQuote()->getMessages() as $message) { if ($message) { $cart->getCheckoutSession()->addMessage($message); } } /** * if customer enteres shopping cart we should mark quote * as modified bc he can has checkout page in another window. */ $this->_getSession()->setCartWasUpdated(true); Varien_Profiler::start(__METHOD__ . 'cart_display'); $this ->loadLayout() ->_initLayoutMessages('checkout/session') ->_initLayoutMessages('catalog/session') ->getLayout()->getBlock('head')->setTitle($this->__('Shopping Cart')); $this->renderLayout(); Varien_Profiler::stop(__METHOD__ . 'cart_display'); } /** * Add product to shopping cart action */ public function addAction() { $cart = $this->_getCart(); $params = $this->getRequest()->getParams(); try { if (isset($params['qty'])) { $filter = new Zend_Filter_LocalizedToNormalized( array('locale' => Mage::app()->getLocale()->getLocaleCode()) ); $params['qty'] = $filter->filter($params['qty']); } $product = $this->_initProduct(); $related = $this->getRequest()->getParam('related_product'); /** * Check product availability */ if (!$product) { $this->_goBack(); return; } $cart->addProduct($product, $params); if (!empty($related)) { $cart->addProductsByIds(explode(',', $related)); } $cart->save(); $this->_getSession()->setCartWasUpdated(true); /** * @todo remove wishlist observer processAddToCart */ Mage::dispatchEvent('checkout_cart_add_product_complete', array('product' => $product, 'request' => $this->getRequest(), 'response' => $this->getResponse()) ); if (!$this->_getSession()->getNoCartRedirect(true)) { if (!$cart->getQuote()->getHasError()){ $message = $this->__('%s was added to your shopping cart.', Mage::helper('core')->htmlEscape($product->getName())); $this->_getSession()->addSuccess($message); } $this->_goBack(); } } catch (Mage_Core_Exception $e) { if ($this->_getSession()->getUseNotice(true)) { $this->_getSession()->addNotice($e->getMessage()); } else { $messages = array_unique(explode("\n", $e->getMessage())); foreach ($messages as $message) { $this->_getSession()->addError($message); } } $url = $this->_getSession()->getRedirectUrl(true); if ($url) { $this->getResponse()->setRedirect($url); } else { $this->_redirectReferer(Mage::helper('checkout/cart')->getCartUrl()); } } catch (Exception $e) { $this->_getSession()->addException($e, $this->__('Cannot add the item to shopping cart.')); Mage::logException($e); $this->_goBack(); } } public function addgroupAction() { $orderItemIds = $this->getRequest()->getParam('order_items', array()); if (is_array($orderItemIds)) { $itemsCollection = Mage::getModel('sales/order_item') ->getCollection() ->addIdFilter($orderItemIds) ->load(); /* @var $itemsCollection Mage_Sales_Model_Mysql4_Order_Item_Collection */ $cart = $this->_getCart(); foreach ($itemsCollection as $item) { try { $cart->addOrderItem($item, 1); } catch (Mage_Core_Exception $e) { if ($this->_getSession()->getUseNotice(true)) { $this->_getSession()->addNotice($e->getMessage()); } else { $this->_getSession()->addError($e->getMessage()); } } catch (Exception $e) { $this->_getSession()->addException($e, $this->__('Cannot add the item to shopping cart.')); Mage::logException($e); $this->_goBack(); } } $cart->save(); $this->_getSession()->setCartWasUpdated(true); } $this->_goBack(); } /** * Action to reconfigure cart item */ public function configureAction() { // Extract item and product to configure $id = (int) $this->getRequest()->getParam('id'); $quoteItem = null; $cart = $this->_getCart(); if ($id) { $quoteItem = $cart->getQuote()->getItemById($id); } if (!$quoteItem) { $this->_getSession()->addError($this->__('Quote item is not found.')); $this->_goBack(); return; } try { $params = new Varien_Object(); $params->setCategoryId(false); $params->setConfigureMode(true); $params->setBuyRequest($quoteItem->getBuyRequest()); Mage::helper('catalog/product_view')->prepareAndRender($quoteItem->getProduct()->getId(), $this, $params); } catch (Exception $e) { $this->_getSession()->addError($this->__('Cannot configure product.')); Mage::logException($e); $this->_goBack(); return; } } /** * Update product configuration for a cart item */ public function updateItemOptionsAction() { $cart = $this->_getCart(); $id = (int) $this->getRequest()->getParam('id'); $params = $this->getRequest()->getParams(); if (!isset($params['options'])) { $params['options'] = array(); } try { if (isset($params['qty'])) { $filter = new Zend_Filter_LocalizedToNormalized( array('locale' => Mage::app()->getLocale()->getLocaleCode()) ); $params['qty'] = $filter->filter($params['qty']); } $quoteItem = $cart->getQuote()->getItemById($id); if (!$quoteItem) { Mage::throwException($this->__('Quote item is not found.')); } $item = $cart->updateItem($id, new Varien_Object($params)); if (is_string($item)) { Mage::throwException($item); } $related = $this->getRequest()->getParam('related_product'); if (!empty($related)) { $cart->addProductsByIds(explode(',', $related)); } $cart->save(); $this->_getSession()->setCartWasUpdated(true); Mage::dispatchEvent('checkout_cart_update_item_complete', array('item' => $item, 'request' => $this->getRequest(), 'response' => $this->getResponse()) ); if (!$this->_getSession()->getNoCartRedirect(true)) { if (!$cart->getQuote()->getHasError()){ $message = $this->__('%s was updated in your shopping cart.', Mage::helper('core')->htmlEscape($item->getProduct()->getName())); $this->_getSession()->addSuccess($message); } $this->_goBack(); } } catch (Mage_Core_Exception $e) { if ($this->_getSession()->getUseNotice(true)) { $this->_getSession()->addNotice($e->getMessage()); } else { $messages = array_unique(explode("\n", $e->getMessage())); foreach ($messages as $message) { $this->_getSession()->addError($message); } } $url = $this->_getSession()->getRedirectUrl(true); if ($url) { $this->getResponse()->setRedirect($url); } else { $this->_redirectReferer(Mage::helper('checkout/cart')->getCartUrl()); } } catch (Exception $e) { $this->_getSession()->addException($e, $this->__('Cannot update the item.')); Mage::logException($e); $this->_goBack(); } $this->_redirect('*/*'); } /** * Update shoping cart data action */ public function updatePostAction() { try { $cartData = $this->getRequest()->getParam('cart'); if (is_array($cartData)) { $filter = new Zend_Filter_LocalizedToNormalized( array('locale' => Mage::app()->getLocale()->getLocaleCode()) ); foreach ($cartData as $index => $data) { if (isset($data['qty'])) { $cartData[$index]['qty'] = $filter->filter($data['qty']); } } $cart = $this->_getCart(); if (! $cart->getCustomerSession()->getCustomer()->getId() && $cart->getQuote()->getCustomerId()) { $cart->getQuote()->setCustomerId(null); } $cartData = $cart->suggestItemsQty($cartData); $cart->updateItems($cartData) ->save(); } $this->_getSession()->setCartWasUpdated(true); } catch (Mage_Core_Exception $e) { $this->_getSession()->addError($e->getMessage()); } catch (Exception $e) { $this->_getSession()->addException($e, $this->__('Cannot update shopping cart.')); Mage::logException($e); } $this->_goBack(); } /** * Delete shoping cart item action */ public function deleteAction() { $id = (int) $this->getRequest()->getParam('id'); if ($id) { try { $this->_getCart()->removeItem($id) ->save(); } catch (Exception $e) { $this->_getSession()->addError($this->__('Cannot remove the item.')); Mage::logException($e); } } $this->_redirectReferer(Mage::getUrl('*/*')); } /** * Initialize shipping information */ public function estimatePostAction() { $country = (string) $this->getRequest()->getParam('country_id'); $postcode = (string) $this->getRequest()->getParam('estimate_postcode'); $city = (string) $this->getRequest()->getParam('estimate_city'); $regionId = (string) $this->getRequest()->getParam('region_id'); $region = (string) $this->getRequest()->getParam('region'); $this->_getQuote()->getShippingAddress() ->setCountryId($country) ->setCity($city) ->setPostcode($postcode) ->setRegionId($regionId) ->setRegion($region) ->setCollectShippingRates(true); $this->_getQuote()->save(); $this->_goBack(); } public function estimateUpdatePostAction() { $code = (string) $this->getRequest()->getParam('estimate_method'); if (!empty($code)) { $this->_getQuote()->getShippingAddress()->setShippingMethod($code)/*->collectTotals()*/->save(); } $this->_goBack(); } /** * Initialize coupon */ public function couponPostAction() { /** * No reason continue with empty shopping cart */ if (!$this->_getCart()->getQuote()->getItemsCount()) { $this->_goBack(); return; } $couponCode = (string) $this->getRequest()->getParam('coupon_code'); if ($this->getRequest()->getParam('remove') == 1) { $couponCode = ''; } $oldCouponCode = $this->_getQuote()->getCouponCode(); if (!strlen($couponCode) && !strlen($oldCouponCode)) { $this->_goBack(); return; } try { $this->_getQuote()->getShippingAddress()->setCollectShippingRates(true); $this->_getQuote()->setCouponCode(strlen($couponCode) ? $couponCode : '') ->collectTotals() ->save(); if ($couponCode) { if ($couponCode == $this->_getQuote()->getCouponCode()) { $this->_getSession()->addSuccess( $this->__('Coupon code "%s" was applied.', Mage::helper('core')->htmlEscape($couponCode)) ); } else { $this->_getSession()->addError( $this->__('Coupon code "%s" is not valid. If the code you are using looks like this: 12-ABCDEFGH, then you have a gift card - scroll down for gift card entry.', Mage::helper('core')->htmlEscape($couponCode)) ); } } else { $this->_getSession()->addSuccess($this->__('Coupon code was canceled.')); } } catch (Mage_Core_Exception $e) { $this->_getSession()->addError($e->getMessage()); } catch (Exception $e) { $this->_getSession()->addError($this->__('Cannot apply the coupon code.')); Mage::logException($e); } $this->_goBack(); } }