123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?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;
- }
- }
|