mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 17:27:36 +00:00
107 lines
2.9 KiB
PHP
107 lines
2.9 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Magento\CompareListGraphQl\Model\Service;
|
|
|
|
use Magento\Catalog\Model\Product\Compare\ItemFactory;
|
|
use Magento\Catalog\Model\ProductRepository;
|
|
use Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection;
|
|
use Magento\Framework\Exception\NoSuchEntityException;
|
|
use Magento\Framework\GraphQl\Query\Resolver\ContextInterface;
|
|
|
|
/**
|
|
* Service add product to compare list
|
|
*/
|
|
class AddToCompareList
|
|
{
|
|
/**
|
|
* @var ItemFactory
|
|
*/
|
|
private $compareItemFactory;
|
|
|
|
/**
|
|
* @var ProductRepository
|
|
*/
|
|
private $productRepository;
|
|
|
|
/**
|
|
* @var Collection
|
|
*/
|
|
private $itemCollection;
|
|
|
|
/**
|
|
* @param ItemFactory $compareItemFactory
|
|
* @param ProductRepository $productRepository
|
|
* @param Collection $collection
|
|
*/
|
|
public function __construct(
|
|
ItemFactory $compareItemFactory,
|
|
ProductRepository $productRepository,
|
|
Collection $collection
|
|
) {
|
|
$this->compareItemFactory = $compareItemFactory;
|
|
$this->productRepository = $productRepository;
|
|
$this->itemCollection = $collection;
|
|
}
|
|
|
|
/**
|
|
* Add products to compare list
|
|
*
|
|
* @param int $listId
|
|
* @param array $products
|
|
* @param ContextInterface $context
|
|
*
|
|
* @return int
|
|
* @throws \Exception
|
|
*/
|
|
public function execute(int $listId, array $products, ContextInterface $context): int
|
|
{
|
|
$storeId = (int)$context->getExtensionAttributes()->getStore()->getStoreId();
|
|
$customerId = $context->getUserId();
|
|
if ($customerId) {
|
|
$this->itemCollection->setListIdToCustomerCompareItems($listId, $customerId);
|
|
}
|
|
|
|
if (count($products)) {
|
|
$existedProducts = $this->itemCollection->getProductsByListId($listId);
|
|
foreach ($products as $productId) {
|
|
if (array_search($productId, $existedProducts) === false) {
|
|
if ($this->productExists($productId)) {
|
|
$item = $this->compareItemFactory->create();
|
|
if ($customerId) {
|
|
$item->setCustomerId($customerId);
|
|
}
|
|
$item->addProductData($productId);
|
|
$item->setStoreId($storeId);
|
|
$item->setListId($listId);
|
|
$item->save();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (int)$listId;
|
|
}
|
|
|
|
/**
|
|
* Check product exists.
|
|
*
|
|
* @param int $productId
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function productExists($productId)
|
|
{
|
|
try {
|
|
$product = $this->productRepository->getById((int)$productId);
|
|
return !empty($product->getId());
|
|
} catch (NoSuchEntityException $e) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|