![]() 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-eav/Model/ResourceModel/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Eav\Model\ResourceModel; use Magento\Eav\Api\AttributeRepositoryInterface as AttributeRepository; use Magento\Framework\Api\SearchCriteriaBuilder; use Magento\Framework\App\ObjectManager; use Magento\Framework\EntityManager\MetadataPool; use Magento\Framework\EntityManager\Operation\AttributeInterface; use Magento\Framework\Model\Entity\ScopeResolver; /** * Class CreateHandler * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CreateHandler implements AttributeInterface { /** * @var AttributeRepository */ private $attributeRepository; /** * @var MetadataPool */ private $metadataPool; /** * @var SearchCriteriaBuilder */ private $searchCriteriaBuilder; /** * @var AttributePersistor */ private $attributePersistor; /** * @var ScopeResolver */ private $scopeResolver; /** * @var AttributeLoader */ private $attributeLoader; /** * @param AttributeRepository $attributeRepository * @param MetadataPool $metadataPool * @param SearchCriteriaBuilder $searchCriteriaBuilder * @param AttributePersistor $attributePersistor * @param ScopeResolver $scopeResolver * @param AttributeLoader $attributeLoader */ public function __construct( AttributeRepository $attributeRepository, MetadataPool $metadataPool, SearchCriteriaBuilder $searchCriteriaBuilder, AttributePersistor $attributePersistor, ScopeResolver $scopeResolver, AttributeLoader $attributeLoader = null ) { $this->attributeRepository = $attributeRepository; $this->metadataPool = $metadataPool; $this->searchCriteriaBuilder = $searchCriteriaBuilder; $this->attributePersistor = $attributePersistor; $this->scopeResolver = $scopeResolver; $this->attributeLoader = $attributeLoader ?: ObjectManager::getInstance()->get(AttributeLoader::class); } /** * @param string $entityType * @param int $attributeSetId * @return \Magento\Eav\Api\Data\AttributeInterface[] */ protected function getAttributes($entityType, $attributeSetId = null) { return $this->attributeLoader->getAttributes($entityType, $attributeSetId); } /** * @param string $entityType * @param array $entityData * @param array $arguments * @return array * @throws \Exception * @throws \Magento\Framework\Exception\ConfigurationMismatchException * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function execute($entityType, $entityData, $arguments = []) { $metadata = $this->metadataPool->getMetadata($entityType); if ($metadata->getEavEntityType()) { $processed = []; $entityLinkField = $metadata->getLinkField(); $attributeSetId = isset($entityData[AttributeLoader::ATTRIBUTE_SET_ID]) ? $entityData[AttributeLoader::ATTRIBUTE_SET_ID] : null; // @todo verify is it normal to not have attribute_set_id /** @var \Magento\Eav\Model\Entity\Attribute\AbstractAttribute $attribute */ foreach ($this->getAttributes($entityType, $attributeSetId) as $attribute) { if ($attribute->isStatic()) { continue; } $attributeCode = $attribute->getAttributeCode(); if (isset($entityData[$attributeCode]) && !is_array($entityData[$attributeCode]) && !$attribute->isValueEmpty($entityData[$attributeCode]) ) { $this->attributePersistor->registerInsert( $entityType, $entityData[$entityLinkField], $attributeCode, $entityData[$attributeCode] ); $processed[$attributeCode] = $entityData[$attributeCode]; } } $context = $this->scopeResolver->getEntityContext($entityType, $entityData); $this->attributePersistor->flush($entityType, $context); } return $entityData; } }