![]() 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-customer/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Customer\Model; use Magento\Customer\Api\Data\OptionInterfaceFactory; use Magento\Customer\Api\Data\ValidationRuleInterfaceFactory; use Magento\Customer\Api\Data\AttributeMetadataInterfaceFactory; use Magento\Eav\Api\Data\AttributeDefaultValueInterface; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\ObjectManager; /** * Converter for AttributeMetadata */ class AttributeMetadataConverter { /** * Attribute Code get options from system config * * @var array */ private const ATTRIBUTE_CODE_LIST_FROM_SYSTEM_CONFIG = ['prefix', 'suffix']; /** * XML Path to get address config * * @var string */ private const XML_CUSTOMER_ADDRESS = 'customer/address/'; /** * @var OptionInterfaceFactory */ private $optionFactory; /** * @var ValidationRuleInterfaceFactory */ private $validationRuleFactory; /** * @var AttributeMetadataInterfaceFactory */ private $attributeMetadataFactory; /** * @var \Magento\Framework\Api\DataObjectHelper */ protected $dataObjectHelper; /** * @var ScopeConfigInterface */ private $scopeConfig; /** * Initialize the Converter * * @param OptionInterfaceFactory $optionFactory * @param ValidationRuleInterfaceFactory $validationRuleFactory * @param AttributeMetadataInterfaceFactory $attributeMetadataFactory * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper * @param ScopeConfigInterface $scopeConfig */ public function __construct( OptionInterfaceFactory $optionFactory, ValidationRuleInterfaceFactory $validationRuleFactory, AttributeMetadataInterfaceFactory $attributeMetadataFactory, \Magento\Framework\Api\DataObjectHelper $dataObjectHelper, ScopeConfigInterface $scopeConfig = null ) { $this->optionFactory = $optionFactory; $this->validationRuleFactory = $validationRuleFactory; $this->attributeMetadataFactory = $attributeMetadataFactory; $this->dataObjectHelper = $dataObjectHelper; $this->scopeConfig = $scopeConfig ?? ObjectManager::getInstance()->get(ScopeConfigInterface::class); } /** * Create AttributeMetadata Data object from the Attribute Model * * @param \Magento\Customer\Model\Attribute $attribute * @return \Magento\Customer\Api\Data\AttributeMetadataInterface */ public function createMetadataAttribute($attribute) { $options = []; if (in_array($attribute->getAttributeCode(), self::ATTRIBUTE_CODE_LIST_FROM_SYSTEM_CONFIG)) { $options = $this->getOptionFromConfig($attribute->getAttributeCode()); } else { if ($attribute->usesSource()) { foreach ($attribute->getSource()->getAllOptions() as $option) { $optionDataObject = $this->optionFactory->create(); if (!is_array($option['value'])) { $optionDataObject->setValue($option['value']); } else { $optionArray = []; foreach ($option['value'] as $optionArrayValues) { $optionObject = $this->optionFactory->create(); $this->dataObjectHelper->populateWithArray( $optionObject, $optionArrayValues, \Magento\Customer\Api\Data\OptionInterface::class ); $optionArray[] = $optionObject; } $optionDataObject->setOptions($optionArray); } $optionDataObject->setLabel($option['label']); $options[] = $optionDataObject; } } } $validationRules = []; foreach ((array)$attribute->getValidateRules() as $name => $value) { $validationRule = $this->validationRuleFactory->create() ->setName($name) ->setValue($value); $validationRules[] = $validationRule; } $attributeMetaData = $this->attributeMetadataFactory->create(); if ($attributeMetaData instanceof AttributeDefaultValueInterface) { $attributeMetaData->setDefaultValue($attribute->getDefaultValue()); } return $attributeMetaData->setAttributeCode($attribute->getAttributeCode()) ->setFrontendInput($attribute->getFrontendInput()) ->setInputFilter((string)$attribute->getInputFilter()) ->setStoreLabel($attribute->getStoreLabel()) ->setValidationRules($validationRules) ->setIsVisible((boolean)$attribute->getIsVisible()) ->setIsRequired((boolean)$attribute->getIsRequired()) ->setMultilineCount((int)$attribute->getMultilineCount()) ->setDataModel((string)$attribute->getDataModel()) ->setOptions($options) ->setFrontendClass($attribute->getFrontend()->getClass()) ->setFrontendLabel($attribute->getFrontendLabel()) ->setNote((string)$attribute->getNote()) ->setIsSystem((boolean)$attribute->getIsSystem()) ->setIsUserDefined((boolean)$attribute->getIsUserDefined()) ->setBackendType($attribute->getBackendType()) ->setSortOrder((int)$attribute->getSortOrder()) ->setIsUsedInGrid($attribute->getIsUsedInGrid()) ->setIsVisibleInGrid($attribute->getIsVisibleInGrid()) ->setIsFilterableInGrid($attribute->getIsFilterableInGrid()) ->setIsSearchableInGrid($attribute->getIsSearchableInGrid()); } /** * Get option from System Config instead of Use Source (Prefix, Suffix) * * @param string $attributeCode * @return \Magento\Customer\Api\Data\OptionInterface[] */ private function getOptionFromConfig($attributeCode) { $result = []; $value = $this->scopeConfig->getValue(self::XML_CUSTOMER_ADDRESS . $attributeCode . '_options'); if ($value) { $optionArray = explode(';', $value); foreach ($optionArray as $value) { $optionObject = $this->optionFactory->create(); $optionObject->setLabel($value); $optionObject->setValue($value); $result[] = $optionObject; } } return $result; } }