![]() 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\Reflection\DataObjectProcessor; use Magento\Framework\Exception\CouldNotSaveException; /** * Class SaveHandler */ class SaveHandler { /** * @var LinkTypeProvider */ protected $linkTypeProvider; /** * @var DataObjectProcessor */ protected $dataObjectProcessor; /** * @var MetadataPool */ protected $metadataPool; /** * @var ProductRepositoryInterface */ protected $productRepository; /** * @var Link */ protected $linkResource; /** * SaveHandler constructor. * * @param MetadataPool $metadataPool * @param ProductRepositoryInterface $productRepository * @param Link $linkResource * @param DataObjectProcessor $dataObjectProcessor * @param LinkTypeProvider $linkTypeProvider */ public function __construct( MetadataPool $metadataPool, ProductRepositoryInterface $productRepository, Link $linkResource, DataObjectProcessor $dataObjectProcessor, LinkTypeProvider $linkTypeProvider ) { $this->metadataPool = $metadataPool; $this->productRepository = $productRepository; $this->linkResource = $linkResource; $this->dataObjectProcessor = $dataObjectProcessor; $this->linkTypeProvider = $linkTypeProvider; } /** * @param string $entityType * @param object $entity * @return object * @throws CouldNotSaveException * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function execute($entityType, $entity) { /** * @var $entity \Magento\Catalog\Api\Data\ProductLinkInterface */ $linkedProduct = $this->productRepository->get($entity->getLinkedProductSku()); $product = $this->productRepository->get($entity->getSku()); $links = []; $extensions = $this->dataObjectProcessor->buildOutputDataArray( $entity->getExtensionAttributes(), \Magento\Catalog\Api\Data\ProductLinkExtensionInterface::class ); $extensions = is_array($extensions) ? $extensions : []; $data = $entity->__toArray(); foreach ($extensions as $attributeCode => $attribute) { $data[$attributeCode] = $attribute; } unset($data['extension_attributes']); $data['product_id'] = $linkedProduct->getId(); $links[$linkedProduct->getId()] = $data; try { $linkTypesToId = $this->linkTypeProvider->getLinkTypes(); $productHydrator = $this->metadataPool->getHydrator(ProductInterface::class); $productData = $productHydrator->extract($product); $this->linkResource->saveProductLinks( $productData[$this->metadataPool->getMetadata(ProductInterface::class)->getLinkField()], $links, $linkTypesToId[$entity->getLinkType()] ); } catch (\Exception $exception) { throw new CouldNotSaveException(__('The linked products data is invalid. Verify the data and try again.')); } return $entity; } }