1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
26:
27: 28: 29: 30: 31:
32: class Mage_Wishlist_Model_Observer extends Mage_Core_Model_Abstract
33: {
34: 35: 36: 37: 38: 39:
40: protected function _getWishlist($customerId)
41: {
42: if (!$customerId) {
43: return false;
44: }
45: return Mage::getModel('wishlist/wishlist')->loadByCustomer($customerId, true);
46: }
47:
48: 49: 50: 51: 52: 53:
54: public function processCartUpdateBefore($observer)
55: {
56: $cart = $observer->getEvent()->getCart();
57: $data = $observer->getEvent()->getInfo();
58: $productIds = array();
59:
60: $wishlist = $this->_getWishlist($cart->getQuote()->getCustomerId());
61: if (!$wishlist) {
62: return $this;
63: }
64:
65: 66: 67:
68: foreach ($data as $itemId => $itemInfo) {
69: if (!empty($itemInfo['wishlist'])) {
70: if ($item = $cart->getQuote()->getItemById($itemId)) {
71: $productId = $item->getProductId();
72: $buyRequest = $item->getBuyRequest();
73:
74: if (isset($itemInfo['qty']) && is_numeric($itemInfo['qty'])) {
75: $buyRequest->setQty($itemInfo['qty']);
76: }
77: $wishlist->addNewItem($productId, $buyRequest);
78:
79: $productIds[] = $productId;
80: $cart->getQuote()->removeItem($itemId);
81: }
82: }
83: }
84:
85: if (!empty($productIds)) {
86: $wishlist->save();
87: Mage::helper('wishlist')->calculate();
88: }
89: return $this;
90: }
91:
92: public function processAddToCart($observer)
93: {
94: $request = $observer->getEvent()->getRequest();
95: $sharedWishlist = Mage::getSingleton('checkout/session')->getSharedWishlist();
96: $messages = Mage::getSingleton('checkout/session')->getWishlistPendingMessages();
97: $urls = Mage::getSingleton('checkout/session')->getWishlistPendingUrls();
98: $wishlistIds = Mage::getSingleton('checkout/session')->getWishlistIds();
99: $singleWishlistId = Mage::getSingleton('checkout/session')->getSingleWishlistId();
100:
101: if ($singleWishlistId) {
102: $wishlistIds = array($singleWishlistId);
103: }
104:
105: if (count($wishlistIds) && $request->getParam('wishlist_next')){
106: $wishlistId = array_shift($wishlistIds);
107:
108: if (Mage::getSingleton('customer/session')->isLoggedIn()) {
109: $wishlist = Mage::getModel('wishlist/wishlist')
110: ->loadByCustomer(Mage::getSingleton('customer/session')->getCustomer(), true);
111: } else if ($sharedWishlist) {
112: $wishlist = Mage::getModel('wishlist/wishlist')->loadByCode($sharedWishlist);
113: } else {
114: return;
115: }
116:
117:
118: $wishlist->getItemCollection()->load();
119:
120: foreach($wishlist->getItemCollection() as $wishlistItem){
121: if ($wishlistItem->getId() == $wishlistId)
122: $wishlistItem->delete();
123: }
124: Mage::getSingleton('checkout/session')->setWishlistIds($wishlistIds);
125: Mage::getSingleton('checkout/session')->setSingleWishlistId(null);
126: }
127:
128: if ($request->getParam('wishlist_next') && count($urls)) {
129: $url = array_shift($urls);
130: $message = array_shift($messages);
131:
132: Mage::getSingleton('checkout/session')->setWishlistPendingUrls($urls);
133: Mage::getSingleton('checkout/session')->setWishlistPendingMessages($messages);
134:
135: Mage::getSingleton('checkout/session')->addError($message);
136:
137: $observer->getEvent()->getResponse()->setRedirect($url);
138: Mage::getSingleton('checkout/session')->setNoCartRedirect(true);
139: }
140: }
141:
142: 143: 144: 145: 146: 147:
148: public function customerLogin(Varien_Event_Observer $observer)
149: {
150: Mage::helper('wishlist')->calculate();
151:
152: return $this;
153: }
154:
155: 156: 157: 158: 159: 160:
161: public function customerLogout(Varien_Event_Observer $observer)
162: {
163: Mage::getSingleton('customer/session')->setWishlistItemCount(0);
164:
165: return $this;
166: }
167:
168: }
169: