123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <?php
- /**
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Wishlist\Model;
- use Magento\Catalog\Model\Product\Exception as ProductException;
- use Magento\Checkout\Helper\Cart as CartHelper;
- use Magento\Checkout\Model\Cart;
- use Magento\Customer\Model\Session;
- use Magento\Framework\App\Response\RedirectInterface;
- use Magento\Framework\Exception\LocalizedException;
- use Psr\Log\LoggerInterface as Logger;
- use Magento\Framework\Message\ManagerInterface as MessageManager;
- use Magento\Framework\UrlInterface;
- use Magento\Wishlist\Helper\Data as WishlistHelper;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class ItemCarrier
- {
- /**
- * @var \Magento\Customer\Model\Session
- */
- protected $customerSession;
- /**
- * @var LocaleQuantityProcessor
- */
- protected $quantityProcessor;
- /**
- * @var \Magento\Checkout\Model\Cart
- */
- protected $cart;
- /**
- * @var \Psr\Log\LoggerInterface
- */
- protected $logger;
- /**
- * @var \Magento\Wishlist\Helper\Data
- */
- protected $helper;
- /**
- * @var \Magento\Checkout\Helper\Cart
- */
- protected $cartHelper;
- /**
- * @var \Magento\Framework\UrlInterface
- */
- protected $urlBuilder;
- /**
- * @var \Magento\Framework\Message\ManagerInterface
- */
- protected $messageManager;
- /**
- * @var \Magento\Framework\App\Response\RedirectInterface
- */
- protected $redirector;
- /**
- * @param Session $customerSession
- * @param LocaleQuantityProcessor $quantityProcessor
- * @param Cart $cart
- * @param Logger $logger
- * @param WishlistHelper $helper
- * @param CartHelper $cartHelper
- * @param UrlInterface $urlBuilder
- * @param MessageManager $messageManager
- * @param RedirectInterface $redirector
- */
- public function __construct(
- Session $customerSession,
- LocaleQuantityProcessor $quantityProcessor,
- Cart $cart,
- Logger $logger,
- WishlistHelper $helper,
- CartHelper $cartHelper,
- UrlInterface $urlBuilder,
- MessageManager $messageManager,
- RedirectInterface $redirector
- ) {
- $this->customerSession = $customerSession;
- $this->quantityProcessor = $quantityProcessor;
- $this->cart = $cart;
- $this->logger = $logger;
- $this->helper = $helper;
- $this->cartHelper = $cartHelper;
- $this->urlBuilder = $urlBuilder;
- $this->messageManager = $messageManager;
- $this->redirector = $redirector;
- }
- /**
- * Move all wishlist item to cart
- *
- * @param Wishlist $wishlist
- * @param array $qtys
- * @return string
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- * @SuppressWarnings(PHPMD.NPathComplexity)
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function moveAllToCart(Wishlist $wishlist, $qtys)
- {
- $isOwner = $wishlist->isOwner($this->customerSession->getCustomerId());
- $messages = [];
- $addedProducts = [];
- $notSalable = [];
- $cart = $this->cart;
- $collection = $wishlist->getItemCollection()->setVisibilityFilter();
- foreach ($collection as $item) {
- /** @var $item \Magento\Wishlist\Model\Item */
- try {
- $disableAddToCart = $item->getProduct()->getDisableAddToCart();
- $item->unsProduct();
- // Set qty
- if (isset($qtys[$item->getId()])) {
- $qty = $this->quantityProcessor->process($qtys[$item->getId()]);
- if ($qty) {
- $item->setQty($qty);
- }
- }
- $item->getProduct()->setDisableAddToCart($disableAddToCart);
- // Add to cart
- if ($item->addToCart($cart, $isOwner)) {
- $addedProducts[] = $item->getProduct();
- }
- } catch (LocalizedException $e) {
- if ($e instanceof ProductException) {
- $notSalable[] = $item;
- } else {
- $messages[] = __('%1 for "%2".', trim($e->getMessage(), '.'), $item->getProduct()->getName());
- }
- $cartItem = $cart->getQuote()->getItemByProduct($item->getProduct());
- if ($cartItem) {
- $cart->getQuote()->deleteItem($cartItem);
- }
- } catch (\Exception $e) {
- $this->logger->critical($e);
- $messages[] = __('We can\'t add this item to your shopping cart right now.');
- }
- }
- if ($isOwner) {
- $indexUrl = $this->helper->getListUrl($wishlist->getId());
- } else {
- $indexUrl = $this->urlBuilder->getUrl('wishlist/shared', ['code' => $wishlist->getSharingCode()]);
- }
- if ($this->cartHelper->getShouldRedirectToCart()) {
- $redirectUrl = $this->cartHelper->getCartUrl();
- } elseif ($this->redirector->getRefererUrl()) {
- $redirectUrl = $this->redirector->getRefererUrl();
- } else {
- $redirectUrl = $indexUrl;
- }
- if ($notSalable) {
- $products = [];
- foreach ($notSalable as $item) {
- $products[] = '"' . $item->getProduct()->getName() . '"';
- }
- $messages[] = __(
- 'We couldn\'t add the following product(s) to the shopping cart: %1.',
- join(', ', $products)
- );
- }
- if ($messages) {
- foreach ($messages as $message) {
- $this->messageManager->addError($message);
- }
- $redirectUrl = $indexUrl;
- }
- if ($addedProducts) {
- // save wishlist model for setting date of last update
- try {
- $wishlist->save();
- } catch (\Exception $e) {
- $this->messageManager->addError(__('We can\'t update the Wish List right now.'));
- $redirectUrl = $indexUrl;
- }
- $products = [];
- foreach ($addedProducts as $product) {
- /** @var $product \Magento\Catalog\Model\Product */
- $products[] = '"' . $product->getName() . '"';
- }
- $this->messageManager->addSuccess(
- __('%1 product(s) have been added to shopping cart: %2.', count($addedProducts), join(', ', $products))
- );
- // save cart and collect totals
- $cart->save()->getQuote()->collectTotals();
- }
- $this->helper->calculate();
- return $redirectUrl;
- }
- }
|