123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Quote\Model;
- use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\Api\SortOrder;
- use Magento\Framework\Exception\NoSuchEntityException;
- use Magento\Quote\Api\Data\CartInterface;
- use Magento\Quote\Model\Quote;
- use Magento\Store\Model\StoreManagerInterface;
- use Magento\Framework\Api\Search\FilterGroup;
- use Magento\Quote\Model\ResourceModel\Quote\Collection as QuoteCollection;
- use Magento\Quote\Model\ResourceModel\Quote\CollectionFactory as QuoteCollectionFactory;
- use Magento\Framework\Exception\InputException;
- use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
- use Magento\Quote\Model\QuoteRepository\SaveHandler;
- use Magento\Quote\Model\QuoteRepository\LoadHandler;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class QuoteRepository implements \Magento\Quote\Api\CartRepositoryInterface
- {
- /**
- * @var Quote[]
- */
- protected $quotesById = [];
- /**
- * @var Quote[]
- */
- protected $quotesByCustomerId = [];
- /**
- * @var QuoteFactory
- */
- protected $quoteFactory;
- /**
- * @var StoreManagerInterface
- */
- protected $storeManager;
- /**
- * @var \Magento\Quote\Model\ResourceModel\Quote\Collection
- * @deprecated 101.0.0
- */
- protected $quoteCollection;
- /**
- * @var \Magento\Quote\Api\Data\CartSearchResultsInterfaceFactory
- */
- protected $searchResultsDataFactory;
- /**
- * @var JoinProcessorInterface
- */
- private $extensionAttributesJoinProcessor;
- /**
- * @var SaveHandler
- */
- private $saveHandler;
- /**
- * @var LoadHandler
- */
- private $loadHandler;
- /**
- * @var CollectionProcessorInterface
- */
- private $collectionProcessor;
- /**
- * @var \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory
- */
- private $quoteCollectionFactory;
- /**
- * Constructor
- *
- * @param QuoteFactory $quoteFactory
- * @param StoreManagerInterface $storeManager
- * @param \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteCollection
- * @param \Magento\Quote\Api\Data\CartSearchResultsInterfaceFactory $searchResultsDataFactory
- * @param JoinProcessorInterface $extensionAttributesJoinProcessor
- * @param CollectionProcessorInterface|null $collectionProcessor
- * @param \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory|null $quoteCollectionFactory
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function __construct(
- QuoteFactory $quoteFactory,
- StoreManagerInterface $storeManager,
- \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteCollection,
- \Magento\Quote\Api\Data\CartSearchResultsInterfaceFactory $searchResultsDataFactory,
- JoinProcessorInterface $extensionAttributesJoinProcessor,
- CollectionProcessorInterface $collectionProcessor = null,
- \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory $quoteCollectionFactory = null
- ) {
- $this->quoteFactory = $quoteFactory;
- $this->storeManager = $storeManager;
- $this->searchResultsDataFactory = $searchResultsDataFactory;
- $this->extensionAttributesJoinProcessor = $extensionAttributesJoinProcessor;
- $this->collectionProcessor = $collectionProcessor ?: \Magento\Framework\App\ObjectManager::getInstance()
- ->get(\Magento\Framework\Api\SearchCriteria\CollectionProcessor::class);
- $this->quoteCollectionFactory = $quoteCollectionFactory ?: \Magento\Framework\App\ObjectManager::getInstance()
- ->get(\Magento\Quote\Model\ResourceModel\Quote\CollectionFactory::class);
- }
- /**
- * {@inheritdoc}
- */
- public function get($cartId, array $sharedStoreIds = [])
- {
- if (!isset($this->quotesById[$cartId])) {
- $quote = $this->loadQuote('loadByIdWithoutStore', 'cartId', $cartId, $sharedStoreIds);
- $this->getLoadHandler()->load($quote);
- $this->quotesById[$cartId] = $quote;
- }
- return $this->quotesById[$cartId];
- }
- /**
- * {@inheritdoc}
- */
- public function getForCustomer($customerId, array $sharedStoreIds = [])
- {
- if (!isset($this->quotesByCustomerId[$customerId])) {
- $quote = $this->loadQuote('loadByCustomer', 'customerId', $customerId, $sharedStoreIds);
- $this->getLoadHandler()->load($quote);
- $this->quotesById[$quote->getId()] = $quote;
- $this->quotesByCustomerId[$customerId] = $quote;
- }
- return $this->quotesByCustomerId[$customerId];
- }
- /**
- * {@inheritdoc}
- */
- public function getActive($cartId, array $sharedStoreIds = [])
- {
- $quote = $this->get($cartId, $sharedStoreIds);
- if (!$quote->getIsActive()) {
- throw NoSuchEntityException::singleField('cartId', $cartId);
- }
- return $quote;
- }
- /**
- * {@inheritdoc}
- */
- public function getActiveForCustomer($customerId, array $sharedStoreIds = [])
- {
- $quote = $this->getForCustomer($customerId, $sharedStoreIds);
- if (!$quote->getIsActive()) {
- throw NoSuchEntityException::singleField('customerId', $customerId);
- }
- return $quote;
- }
- /**
- * {@inheritdoc}
- */
- public function save(\Magento\Quote\Api\Data\CartInterface $quote)
- {
- if ($quote->getId()) {
- $currentQuote = $this->get($quote->getId(), [$quote->getStoreId()]);
- foreach ($currentQuote->getData() as $key => $value) {
- if (!$quote->hasData($key)) {
- $quote->setData($key, $value);
- }
- }
- }
- $this->getSaveHandler()->save($quote);
- unset($this->quotesById[$quote->getId()]);
- unset($this->quotesByCustomerId[$quote->getCustomerId()]);
- }
- /**
- * {@inheritdoc}
- */
- public function delete(\Magento\Quote\Api\Data\CartInterface $quote)
- {
- $quoteId = $quote->getId();
- $customerId = $quote->getCustomerId();
- $quote->delete();
- unset($this->quotesById[$quoteId]);
- unset($this->quotesByCustomerId[$customerId]);
- }
- /**
- * Load quote with different methods
- *
- * @param string $loadMethod
- * @param string $loadField
- * @param int $identifier
- * @param int[] $sharedStoreIds
- * @throws NoSuchEntityException
- * @return Quote
- */
- protected function loadQuote($loadMethod, $loadField, $identifier, array $sharedStoreIds = [])
- {
- /** @var Quote $quote */
- $quote = $this->quoteFactory->create();
- if ($sharedStoreIds) {
- $quote->setSharedStoreIds($sharedStoreIds);
- }
- $quote->setStoreId($this->storeManager->getStore()->getId())->$loadMethod($identifier);
- if (!$quote->getId()) {
- throw NoSuchEntityException::singleField($loadField, $identifier);
- }
- return $quote;
- }
- /**
- * {@inheritdoc}
- */
- public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria)
- {
- $this->quoteCollection = $this->quoteCollectionFactory->create();
- /** @var \Magento\Quote\Api\Data\CartSearchResultsInterface $searchData */
- $searchData = $this->searchResultsDataFactory->create();
- $searchData->setSearchCriteria($searchCriteria);
- $this->collectionProcessor->process($searchCriteria, $this->quoteCollection);
- $this->extensionAttributesJoinProcessor->process($this->quoteCollection);
- foreach ($this->quoteCollection->getItems() as $quote) {
- /** @var CartInterface $quote */
- $this->getLoadHandler()->load($quote);
- }
- $searchData->setItems($this->quoteCollection->getItems());
- $searchData->setTotalCount($this->quoteCollection->getSize());
- return $searchData;
- }
- /**
- * Adds a specified filter group to the specified quote collection.
- *
- * @param FilterGroup $filterGroup The filter group.
- * @param QuoteCollection $collection The quote collection.
- * @return void
- * @deprecated 101.0.0
- * @throws InputException The specified filter group or quote collection does not exist.
- */
- protected function addFilterGroupToCollection(FilterGroup $filterGroup, QuoteCollection $collection)
- {
- $fields = [];
- $conditions = [];
- foreach ($filterGroup->getFilters() as $filter) {
- $fields[] = $filter->getField();
- $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
- $conditions[] = [$condition => $filter->getValue()];
- }
- if ($fields) {
- $collection->addFieldToFilter($fields, $conditions);
- }
- }
- /**
- * Get new SaveHandler dependency for application code.
- * @return SaveHandler
- * @deprecated 100.1.0
- */
- private function getSaveHandler()
- {
- if (!$this->saveHandler) {
- $this->saveHandler = ObjectManager::getInstance()->get(SaveHandler::class);
- }
- return $this->saveHandler;
- }
- /**
- * @return LoadHandler
- * @deprecated 100.1.0
- */
- private function getLoadHandler()
- {
- if (!$this->loadHandler) {
- $this->loadHandler = ObjectManager::getInstance()->get(LoadHandler::class);
- }
- return $this->loadHandler;
- }
- }
|