![]() 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-import-export/Model/Import/Entity/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\ImportExport\Model\Import\Entity; use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface; /** * Import EAV entity abstract model * * phpcs:disable Magento2.Classes.AbstractApi * @api * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @since 100.0.2 */ abstract class AbstractEav extends \Magento\ImportExport\Model\Import\AbstractEntity { /** * Attribute collection name * * Name of collection class */ public const ATTRIBUTE_COLLECTION_NAME = \Magento\Framework\Data\Collection::class; /** * @var \Magento\Store\Model\StoreManagerInterface */ protected $_storeManager; /** * @var int */ protected $_entityTypeId; /** * Attributes with index (not label) value * * @var array */ protected $_indexValueAttributes = []; /** * @var array */ protected $_websiteCodeToId = []; /** * All stores code-ID pairs. * * @var array */ protected $_storeCodeToId = []; /** * Entity attributes parameters * * [attr_code_1] => array( * 'options' => array(), * 'type' => 'text', 'price', 'textarea', 'select', etc. * 'id' => .. * ), * ... * * @var array */ protected $_attributes = []; /** * @var \Magento\Framework\Data\Collection */ protected $_attributeCollection; /** * @param \Magento\Framework\Stdlib\StringUtils $string * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\ImportExport\Model\ImportFactory $importFactory * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper * @param \Magento\Framework\App\ResourceConnection $resource * @param ProcessingErrorAggregatorInterface $errorAggregator * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory * @param \Magento\Eav\Model\Config $eavConfig * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) * @throws \Magento\Framework\Exception\LocalizedException */ public function __construct( \Magento\Framework\Stdlib\StringUtils $string, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\ImportExport\Model\ImportFactory $importFactory, \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper, \Magento\Framework\App\ResourceConnection $resource, ProcessingErrorAggregatorInterface $errorAggregator, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\ImportExport\Model\Export\Factory $collectionFactory, \Magento\Eav\Model\Config $eavConfig, array $data = [] ) { parent::__construct($string, $scopeConfig, $importFactory, $resourceHelper, $resource, $errorAggregator, $data); $this->_storeManager = $storeManager; $this->_attributeCollection = $data['attribute_collection'] ?? $collectionFactory->create( static::ATTRIBUTE_COLLECTION_NAME ); if (isset($data['entity_type_id'])) { $this->_entityTypeId = $data['entity_type_id']; } else { $this->_entityTypeId = $eavConfig->getEntityType($this->getEntityTypeCode())->getEntityTypeId(); } } /** * Retrieve website id by code or false when website code not exists * * @param string $websiteCode * @return int|false */ public function getWebsiteId($websiteCode) { if (isset($this->_websiteCodeToId[$websiteCode])) { return (int) $this->_websiteCodeToId[$websiteCode]; } return false; } /** * Initialize website values * * @param bool $withDefault * @return $this */ protected function _initWebsites($withDefault = false) { /** @var $website \Magento\Store\Model\Website */ foreach ($this->_storeManager->getWebsites($withDefault) as $website) { $this->_websiteCodeToId[$website->getCode()] = $website->getId(); } return $this; } /** * Initialize stores data * * @param bool $withDefault * @return $this */ protected function _initStores($withDefault = false) { /** @var $store \Magento\Store\Model\Store */ foreach ($this->_storeManager->getStores($withDefault) as $store) { $this->_storeCodeToId[$store->getCode()] = $store->getId(); } return $this; } /** * Initialize entity attributes * * @return $this */ protected function _initAttributes() { /** @var $attribute \Magento\Eav\Model\Attribute */ foreach ($this->_attributeCollection as $attribute) { $this->_attributes[$attribute->getAttributeCode()] = [ 'id' => $attribute->getId(), 'code' => $attribute->getAttributeCode(), 'table' => $attribute->getBackend()->getTable(), 'is_required' => $attribute->getIsRequired(), 'is_static' => $attribute->isStatic(), 'rules' => $attribute->getValidateRules() ? $attribute->getValidateRules() : null, 'type' => \Magento\ImportExport\Model\Import::getAttributeType($attribute), 'options' => $this->getAttributeOptions($attribute), ]; $this->validColumnNames[] = $attribute->getAttributeCode(); } return $this; } /** * Entity type ID getter * * @return int */ public function getEntityTypeId() { return $this->_entityTypeId; } /** * Returns attributes all values in label-value or value-value pairs form. Labels are lower-cased * * @param \Magento\Eav\Model\Entity\Attribute\AbstractAttribute $attribute * @param array $indexAttributes OPTIONAL Additional attribute codes with index values. * @return array */ public function getAttributeOptions( \Magento\Eav\Model\Entity\Attribute\AbstractAttribute $attribute, array $indexAttributes = [] ) { $options = []; if ($attribute->usesSource()) { // merge global entity index value attributes $indexAttributes = array_merge($indexAttributes, $this->_indexValueAttributes); // should attribute has index (option value) instead of a label? $index = in_array($attribute->getAttributeCode(), $indexAttributes) ? 'value' : 'label'; // only default (admin) store values used $attribute->setStoreId(\Magento\Store\Model\Store::DEFAULT_STORE_ID); try { foreach ($attribute->getSource()->getAllOptions(false) as $option) { $value = is_array($option['value']) ? $option['value'] : [$option]; foreach ($value as $innerOption) { // skip ' -- Please Select -- ' option if (strlen($innerOption['value'] ?? '')) { $options[mb_strtolower($innerOption[$index] ?? '')] = $innerOption['value']; } } } // phpcs:ignore Magento2.CodeAnalysis.EmptyBlock } catch (\Exception $e) { // ignore exceptions connected with source models } } return $options; } /** * Get attribute collection * * @return \Magento\Framework\Data\Collection */ public function getAttributeCollection() { return $this->_attributeCollection; } }