![]() 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/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Eav\Model; use Magento\Framework\Api\SearchCriteria\CollectionProcessor; use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface; use Magento\Framework\Exception\InputException; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Exception\StateException; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AttributeRepository implements \Magento\Eav\Api\AttributeRepositoryInterface { /** * @var \Magento\Eav\Model\Config */ protected $eavConfig; /** * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute */ protected $eavResource; /** * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory */ protected $attributeCollectionFactory; /** * @var \Magento\Eav\Api\Data\AttributeSearchResultsInterfaceFactory */ protected $searchResultsFactory; /** * @var Entity\AttributeFactory */ protected $attributeFactory; /** * @var \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface */ protected $joinProcessor; /** * @var CollectionProcessorInterface */ private $collectionProcessor; /** * @param Config $eavConfig * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute $eavResource * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory $attributeCollectionFactory * @param \Magento\Eav\Api\Data\AttributeSearchResultsInterfaceFactory $searchResultsFactory * @param Entity\AttributeFactory $attributeFactory * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor * @param CollectionProcessorInterface $collectionProcessor * @codeCoverageIgnore */ public function __construct( \Magento\Eav\Model\Config $eavConfig, \Magento\Eav\Model\ResourceModel\Entity\Attribute $eavResource, \Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory $attributeCollectionFactory, \Magento\Eav\Api\Data\AttributeSearchResultsInterfaceFactory $searchResultsFactory, \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory, \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor, CollectionProcessorInterface $collectionProcessor = null ) { $this->eavConfig = $eavConfig; $this->eavResource = $eavResource; $this->attributeCollectionFactory = $attributeCollectionFactory; $this->searchResultsFactory = $searchResultsFactory; $this->attributeFactory = $attributeFactory; $this->joinProcessor = $joinProcessor; $this->collectionProcessor = $collectionProcessor ?: $this->getCollectionProcessor(); } /** * {@inheritdoc} */ public function save(\Magento\Eav\Api\Data\AttributeInterface $attribute) { try { $this->eavResource->save($attribute); } catch (\Exception $e) { throw new StateException(__("The attribute can't be saved."), $e); } return $attribute; } /** * {@inheritdoc} */ public function getList($entityTypeCode, \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria) { if (!$entityTypeCode) { throw InputException::requiredField('entity_type_code'); } /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $attributeCollection */ $attributeCollection = $this->attributeCollectionFactory->create(); $this->joinProcessor->process($attributeCollection); $attributeCollection->addFieldToFilter('entity_type_code', ['eq' => $entityTypeCode]); $attributeCollection->join( ['entity_type' => $attributeCollection->getTable('eav_entity_type')], 'main_table.entity_type_id = entity_type.entity_type_id', [] ); $attributeCollection->joinLeft( ['eav_entity_attribute' => $attributeCollection->getTable('eav_entity_attribute')], 'main_table.attribute_id = eav_entity_attribute.attribute_id', [] ); $entityType = $this->eavConfig->getEntityType($entityTypeCode); $additionalTable = $entityType->getAdditionalAttributeTable(); if ($additionalTable) { $attributeCollection->join( ['additional_table' => $attributeCollection->getTable($additionalTable)], 'main_table.attribute_id = additional_table.attribute_id', [] ); } $this->collectionProcessor->process($searchCriteria, $attributeCollection); // Group attributes by id to prevent duplicates with different attribute sets $attributeCollection->addAttributeGrouping(); $attributes = []; /** @var \Magento\Eav\Api\Data\AttributeInterface $attribute */ foreach ($attributeCollection as $attribute) { $attributes[] = $this->get($entityTypeCode, $attribute->getAttributeCode()); } /** @var \Magento\Eav\Api\Data\AttributeSearchResultsInterface $searchResults */ $searchResults = $this->searchResultsFactory->create(); $searchResults->setSearchCriteria($searchCriteria); $searchResults->setItems($attributes); // if $searchCriteria has no page size - we can use count() on $attributeCollection // otherwise - we have to use getSize() on $attributeCollection // with this approach we can eliminate excessive COUNT requests in case page size is empty if ($searchCriteria->getPageSize()) { $searchResults->setTotalCount($attributeCollection->getSize()); } else { $searchResults->setTotalCount(count($attributeCollection)); } return $searchResults; } /** * {@inheritdoc} */ public function get($entityTypeCode, $attributeCode) { /** @var \Magento\Eav\Api\Data\AttributeInterface $attribute */ $attribute = $this->eavConfig->getAttribute($entityTypeCode, $attributeCode); if (!$attribute || !$attribute->getAttributeId()) { throw new NoSuchEntityException( __( 'The attribute with a "%1" attributeCode doesn\'t exist. Verify the attribute and try again.', $attributeCode ) ); } return $attribute; } /** * {@inheritdoc} */ public function delete(\Magento\Eav\Api\Data\AttributeInterface $attribute) { try { $this->eavResource->delete($attribute); } catch (\Exception $e) { throw new StateException(__("The attribute can't be deleted.")); } return true; } /** * {@inheritdoc} */ public function deleteById($attributeId) { /** @var \Magento\Eav\Model\Entity\Attribute $attribute */ $attribute = $this->attributeFactory->create(); $this->eavResource->load($attribute, $attributeId); if (!$attribute->getAttributeId()) { throw new NoSuchEntityException( __('The attribute with a "%1" ID doesn\'t exist. Verify the attribute and try again.', $attributeId) ); } $this->delete($attribute); return true; } /** * Retrieve collection processor * * @deprecated 101.0.0 * @return CollectionProcessorInterface */ private function getCollectionProcessor() { if (!$this->collectionProcessor) { $this->collectionProcessor = \Magento\Framework\App\ObjectManager::getInstance()->get( CollectionProcessor::class ); } return $this->collectionProcessor; } }