123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Wishlist\Observer;
- use Magento\Framework\Event\Observer;
- use Magento\Framework\Event\ObserverInterface;
- use Magento\Wishlist\Helper\Data;
- use Magento\Wishlist\Model\Wishlist;
- use Magento\Wishlist\Model\WishlistFactory;
- /**
- * Class CartUpdateBefore
- * @package Magento\Wishlist\Observer
- */
- class CartUpdateBefore implements ObserverInterface
- {
- /**
- * Wishlist data
- *
- * @var Data
- */
- protected $wishlistData;
- /**
- * @var WishlistFactory
- */
- protected $wishlistFactory;
- /**
- * @param Data $wishlistData
- * @param WishlistFactory $wishlistFactory
- */
- public function __construct(
- Data $wishlistData,
- WishlistFactory $wishlistFactory
- ) {
- $this->wishlistData = $wishlistData;
- $this->wishlistFactory = $wishlistFactory;
- }
- /**
- * Get customer wishlist model instance
- *
- * @param int $customerId
- * @return Wishlist|false
- */
- protected function getWishlist($customerId)
- {
- if (!$customerId) {
- return false;
- }
- return $this->wishlistFactory->create()->loadByCustomerId($customerId, true);
- }
- /**
- * Check move quote item to wishlist request
- *
- * @param Observer $observer
- * @return $this
- */
- public function execute(Observer $observer)
- {
- $cart = $observer->getEvent()->getCart();
- $data = $observer->getEvent()->getInfo()->toArray();
- $productIds = [];
- $wishlist = $this->getWishlist($cart->getQuote()->getCustomerId());
- if (!$wishlist) {
- return $this;
- }
- /**
- * Collect product ids marked for move to wishlist
- */
- foreach ($data as $itemId => $itemInfo) {
- if (!empty($itemInfo['wishlist']) && ($item = $cart->getQuote()->getItemById($itemId))) {
- $productId = $item->getProductId();
- $buyRequest = $item->getBuyRequest();
- if (array_key_exists('qty', $itemInfo) && is_numeric($itemInfo['qty'])) {
- $buyRequest->setQty($itemInfo['qty']);
- }
- $wishlist->addNewItem($productId, $buyRequest);
- $productIds[] = $productId;
- $cart->getQuote()->removeItem($itemId);
- }
- }
- if (count($productIds)) {
- $wishlist->save();
- $this->wishlistData->calculate();
- }
- return $this;
- }
- }
|