123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Persistent\Model;
- /**
- * Class QuoteManager
- */
- class QuoteManager
- {
- /**
- * Persistent session
- *
- * @var \Magento\Persistent\Helper\Session
- */
- protected $persistentSession;
- /**
- * Checkout session
- *
- * @var \Magento\Checkout\Model\Session
- */
- protected $checkoutSession;
- /**
- * Persistent data
- *
- * @var \Magento\Persistent\Helper\Data
- */
- protected $persistentData;
- /**
- * Whether set quote to be persistent in workflow
- *
- * @var bool
- */
- protected $_setQuotePersistent = true;
- /**
- * @var \Magento\Quote\Api\CartRepositoryInterface
- */
- protected $quoteRepository;
- /**
- * @param \Magento\Persistent\Helper\Session $persistentSession
- * @param \Magento\Persistent\Helper\Data $persistentData
- * @param \Magento\Checkout\Model\Session $checkoutSession
- * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
- */
- public function __construct(
- \Magento\Persistent\Helper\Session $persistentSession,
- \Magento\Persistent\Helper\Data $persistentData,
- \Magento\Checkout\Model\Session $checkoutSession,
- \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
- ) {
- $this->persistentSession = $persistentSession;
- $this->persistentData = $persistentData;
- $this->checkoutSession = $checkoutSession;
- $this->quoteRepository = $quoteRepository;
- }
- /**
- * Clear cart of customer data if exists and reset guest information, remove persistent session
- *
- * @param bool $checkQuote Check quote to be persistent (not stolen)
- * @return void
- */
- public function setGuest($checkQuote = false)
- {
- /** @var $quote \Magento\Quote\Model\Quote */
- $quote = $this->checkoutSession->getQuote();
- if ($quote && $quote->getId()) {
- if ($checkQuote && !$this->persistentData->isShoppingCartPersist() && !$quote->getIsPersistent()) {
- $this->checkoutSession->clearQuote()->clearStorage();
- return;
- }
- $quote->getPaymentsCollection()->walk('delete');
- $quote->getAddressesCollection()->walk('delete');
- $this->_setQuotePersistent = false;
- $quote->setIsActive(true)
- ->setCustomerId(null)
- ->setCustomerEmail(null)
- ->setCustomerFirstname(null)
- ->setCustomerLastname(null)
- ->setCustomerGroupId(\Magento\Customer\Api\Data\GroupInterface::NOT_LOGGED_IN_ID)
- ->setIsPersistent(false)
- ->removeAllAddresses();
- //Create guest addresses
- $quote->getShippingAddress();
- $quote->getBillingAddress();
- $quote->collectTotals();
- $this->quoteRepository->save($quote);
- }
- $this->persistentSession->getSession()->removePersistentCookie();
- }
- /**
- * Emulate guest cart with persistent cart
- *
- * Converts persistent cart tied to logged out customer to a guest cart, retaining customer information required for
- * checkout
- *
- * @return void
- */
- public function convertCustomerCartToGuest()
- {
- $quoteId = $this->checkoutSession->getQuoteId();
- /** @var $quote \Magento\Quote\Model\Quote */
- $quote = $this->quoteRepository->get($quoteId);
- if ($quote && $quote->getId()) {
- $this->_setQuotePersistent = false;
- $quote->setIsActive(true)
- ->setCustomerId(null)
- ->setCustomerEmail(null)
- ->setCustomerFirstname(null)
- ->setCustomerLastname(null)
- ->setCustomerGroupId(\Magento\Customer\Api\Data\GroupInterface::NOT_LOGGED_IN_ID)
- ->setIsPersistent(false);
- $quote->getAddressesCollection()->walk('setCustomerAddressId', ['customerAddressId' => null]);
- $quote->getAddressesCollection()->walk('setCustomerId', ['customerId' => null]);
- $quote->getAddressesCollection()->walk('setEmail', ['email' => null]);
- $quote->collectTotals();
- $this->persistentSession->getSession()->removePersistentCookie();
- $this->quoteRepository->save($quote);
- }
- }
- /**
- * Expire persistent quote
- *
- * @return void
- */
- public function expire()
- {
- $quote = $this->checkoutSession->setLoadInactive()->getQuote();
- if ($quote->getIsActive() && $quote->getCustomerId()) {
- $this->checkoutSession->setCustomerData(null)->clearQuote()->clearStorage();
- } else {
- $quote->setIsActive(true)
- ->setIsPersistent(false)
- ->setCustomerId(null)
- ->setCustomerGroupId(\Magento\Customer\Api\Data\GroupInterface::NOT_LOGGED_IN_ID);
- }
- }
- /**
- * Is quote persistent
- *
- * @return bool
- */
- public function isPersistent()
- {
- return $this->_setQuotePersistent;
- }
- }
|