add product to cart
/**
* Action list where need check enabled cookie
*
* @var array
*/
protected $_cookieCheckActions = array('add');
/**
* Retrieve shopping cart model object
*
* @return Mage_Checkout_Model_Cart
*/
protected function _getCart()
{
return Mage::getSingleton('checkout/cart');
}
/**
* Get checkout session model instance
*
* @return Mage_Checkout_Model_Session
*/
protected function _getSession()
{
return Mage::getSingleton('checkout/session');
}
/**
* Get current active quote instance
*
* @return Mage_Sales_Model_Quote
*/
protected function _getQuote()
{
return $this->_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($ajax = null)
{
if($ajax == 'true')
$productId = $this->getRequest()->getParam('product');
else
{
$ref = $this->getRequest()->getParam('ref');
$productId = (int) Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('sku',$ref)
->getFirstItem()->getId();
}
if ($productId) {
$product = Mage::getModel('catalog/product')
->setStoreId(Mage::app()->getStore()->getId())
->load($productId);
if ($product->getId()) {
$status = $product->getStatus();
if ($status==2){
$message = $this->__("product %s is disabled",$product->getName());
$this->_getSession()->addError($message);
return false;
}
return $product;
}
}
else
$this->_getSession()->addError($this->__('No product added.'));
return false;
}
protected function _getCartInfo()
{
$cartInfo = array();
$cart = $this->_getCart();
$cartInfo['qty'] = $cart->getSummaryQty().$this->__(' item(s)');
$cartInfo['totals'] = Mage::helper('checkout')->formatPrice($cart->getQuote()->getGrandTotal());
return $cartInfo;
}
/**
* check the quote whether from quotation
* @return bloor
*/
protected function _checkQuotation()
{
$is_quotation = $this->_getCart()->getQuote()->getIsQuotation();
$this->_getCart()->getQuote()->setIsQuotation(0)->save();
if($is_quotation=='1')
return true;
return false;
}
/**
* Add product to shopping cart action
*/
public function addAction()
{
$cart = $this->_getCart();
//check quote whether from quotation
if($this->_checkQuotation())
$cart->truncate();
$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']);
}
//for ajax cart
$ajax = $this->getRequest()->getParam('ajax');
$product = $this->_initProduct($ajax);
$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();
//when a grouped product is added to cart set each item is_from_group=1
$tablePrefix = (string)Mage::getConfig()->getTablePrefix();
$db = Mage::getSingleton('core/resource')->getConnection('core_write');
if($product->getTypeId()=='grouped')
foreach($cart->getQuote()->getItemsCollection() as $item)
{
$sql = "update ".$tablePrefix."sales_flat_quote_item set is_from_group=1,group_id=".$product->getId()." where item_id=".$item->getItemId();
if($item->getItemId())
$db->query($sql);
}
$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()){
if($ajax=='true')
{
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($this->_getCartInfo()));
return;
}
else
{
$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();
}
}