![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-catalog/Model/ResourceModel/Product/Link/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Catalog\Model\ResourceModel\Product\Link; use Magento\Catalog\Api\Data\ProductInterface; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Model\Product\LinkTypeProvider; use Magento\Catalog\Model\ResourceModel\Product\Link; use Magento\Framework\EntityManager\MetadataPool; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Exception\CouldNotDeleteException; /** * Class DeleteHandler */ class DeleteHandler { /** * @var LinkTypeProvider */ protected $linkTypeProvider; /** * @var MetadataPool */ protected $metadataPool; /** * @var ProductRepositoryInterface */ protected $productRepository; /** * @var Link */ protected $linkResource; /** * DeleteHandler constructor. * * @param MetadataPool $metadataPool * @param ProductRepositoryInterface $productRepository * @param Link $linkResource * @param LinkTypeProvider $linkTypeProvider */ public function __construct( MetadataPool $metadataPool, ProductRepositoryInterface $productRepository, Link $linkResource, LinkTypeProvider $linkTypeProvider ) { $this->metadataPool = $metadataPool; $this->productRepository = $productRepository; $this->linkResource = $linkResource; $this->linkTypeProvider = $linkTypeProvider; } /** * Delete linked product. * * @param string $entityType * @param object $entity * @return void * @throws CouldNotDeleteException * @throws NoSuchEntityException * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function execute($entityType, $entity) { $linkedProduct = $this->productRepository->get($entity->getLinkedProductSku()); $product = $this->productRepository->get($entity->getSku()); $linkTypesToId = $this->linkTypeProvider->getLinkTypes(); $productHydrator = $this->metadataPool->getHydrator(ProductInterface::class); $productData = $productHydrator->extract($product); $linkId = $this->linkResource->getProductLinkId( $productData[$this->metadataPool->getMetadata(ProductInterface::class)->getLinkField()], $linkedProduct->getId(), $linkTypesToId[$entity->getLinkType()] ); if (!$linkId) { throw new NoSuchEntityException( __( 'Product with SKU %1 is not linked to product with SKU %2', $entity->getLinkedProductSku(), $entity->getSku() ) ); } try { $this->linkResource->deleteProductLink($linkId); } catch (\Exception $exception) { throw new CouldNotDeleteException( __('The linked products data is invalid. Verify the data and try again.') ); } } }