| Current Path : /home/rtorresani/www/vendor/magento/module-import-export/Model/Import/Entity/ |
| Current File : //home/rtorresani/www/vendor/magento/module-import-export/Model/Import/Entity/AbstractEav.php |
<?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;
}
}