/** * @param Varien_Event_Observer $observer * @event sales_quote_merge_before */ public function observe(Varien_Event_Observer $observer) { /** @var Aleron75_UnmergedCart_Helper_Data $h */ $h = Mage::helper('aleron75_unmergedcart'); if (!$h->isActive()) { return; } /** @var Mage_Sales_Model_Quote $customerQuote */ $customerQuote = $observer->getQuote(); /** @var Mage_Sales_Model_Quote $sessionQuote */ $sessionQuote = $observer->getSource(); if ($customerQuote->getId() && $sessionQuote->getId() != $customerQuote->getId()) { /** @var Mage_Sales_Model_Quote $discardableQuote */ $discardableQuote = $h->isKeepSessionCart() ? $customerQuote : $sessionQuote; /** @var Mage_Sales_Model_Quote_Item $item */ foreach ($discardableQuote->getAllItems() as $item) { $item->isDeleted(true); if ($item->getHasChildren()) { /** @var Mage_Sales_Model_Quote_Item_Abstract $child */ foreach ($item->getChildren() as $child) { $child->isDeleted(true); } } } } }
/** * Truncate the customer's cart if active * @access public * @return void */ public function truncateCustomerCart(Varien_Event_Observer $observer) { if (Mage::helper('jbh_cartmerge')->isActive()) { if ($observer->getSource()->hasItems() || Mage::helper('jbh_cartmerge')->cleanIfEmpty()) { if (is_object($observer->getQuote()) && $observer->getQuote()->getId()) { $observer->getQuote()->removeAllItems(); } } } }
/** * Remove products that are in the cart that where not hidden while logged out * but are hidden to the customer once logged in. * * @param Varien_Event_Observer $observer */ public function salesQuoteMergeBefore(Varien_Event_Observer $observer) { /** @var Mage_Sales_Model_Quote $guestQuote */ $guestQuote = $observer->getSource(); // If a hidden product is loaded, it's entity_id is set to null. // So all we need to do here is set the deleted property to true, // and then they will not be merged into the customer quote. foreach ($guestQuote->getItemsCollection() as $quoteItem) { if (!$quoteItem->getProductId()) { $quoteItem->isDeleted(true); } } }