![]() 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/Metadata/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Customer\Model\Metadata; use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Model\AttributeMetadataConverter; use Magento\Customer\Model\AttributeMetadataDataProvider; use Magento\Eav\Model\Entity\Attribute\AbstractAttribute; use Magento\Framework\Api\SimpleDataObjectConverter; use Magento\Framework\Exception\NoSuchEntityException; /** * Service to fetch customer address related custom attributes */ class AddressMetadata implements AddressMetadataInterface { /** * @var array */ private $addressDataObjectMethods; /** * @var AttributeMetadataConverter */ private $attributeMetadataConverter; /** * @var AttributeMetadataDataProvider */ private $attributeMetadataDataProvider; /** * @param AttributeMetadataConverter $attributeMetadataConverter * @param AttributeMetadataDataProvider $attributeMetadataDataProvider */ public function __construct( AttributeMetadataConverter $attributeMetadataConverter, AttributeMetadataDataProvider $attributeMetadataDataProvider ) { $this->attributeMetadataConverter = $attributeMetadataConverter; $this->attributeMetadataDataProvider = $attributeMetadataDataProvider; } /** * {@inheritdoc} */ public function getAttributes($formCode) { $attributes = []; $attributesFormCollection = $this->attributeMetadataDataProvider->loadAttributesCollection( AddressMetadataInterface::ENTITY_TYPE_ADDRESS, $formCode ); foreach ($attributesFormCollection as $attribute) { $attributes[$attribute->getAttributeCode()] = $this->attributeMetadataConverter ->createMetadataAttribute($attribute); } if (empty($attributes)) { throw NoSuchEntityException::singleField('formCode', $formCode); } return $attributes; } /** * {@inheritdoc} */ public function getAttributeMetadata($attributeCode) { /** @var AbstractAttribute $attribute */ $attribute = $this->attributeMetadataDataProvider ->getAttribute(AddressMetadataInterface::ENTITY_TYPE_ADDRESS, $attributeCode); if ($attribute && ($attributeCode === 'id' || $attribute->getId() !== null)) { $attributeMetadata = $this->attributeMetadataConverter->createMetadataAttribute($attribute); return $attributeMetadata; } else { throw new NoSuchEntityException( __( 'No such entity with %fieldName = %fieldValue, %field2Name = %field2Value', [ 'fieldName' => 'entityType', 'fieldValue' => AddressMetadataInterface::ENTITY_TYPE_ADDRESS, 'field2Name' => 'attributeCode', 'field2Value' => $attributeCode ] ) ); } } /** * {@inheritdoc} */ public function getAllAttributesMetadata() { /** @var AbstractAttribute[] $attribute */ $attributeCodes = $this->attributeMetadataDataProvider->getAllAttributeCodes( AddressMetadataInterface::ENTITY_TYPE_ADDRESS, AddressMetadataInterface::ATTRIBUTE_SET_ID_ADDRESS ); $allAttributesMetadata = []; foreach ($attributeCodes as $attributeCode) { try { $allAttributesMetadata[] = $this->getAttributeMetadata($attributeCode); } catch (NoSuchEntityException $e) { //If no such entity, skip } } return $allAttributesMetadata; } /** * {@inheritdoc} */ public function getCustomAttributesMetadata($dataObjectClassName = AddressMetadataInterface::DATA_INTERFACE_NAME) { if (!$this->addressDataObjectMethods) { $dataObjectMethods = array_flip(get_class_methods($dataObjectClassName)); $baseClassDataObjectMethods = array_flip( get_class_methods(\Magento\Framework\Api\AbstractExtensibleObject::class) ); $this->addressDataObjectMethods = array_diff_key($dataObjectMethods, $baseClassDataObjectMethods); } $customAttributes = []; foreach ($this->getAllAttributesMetadata() as $attributeMetadata) { $attributeCode = $attributeMetadata->getAttributeCode(); $camelCaseKey = SimpleDataObjectConverter::snakeCaseToUpperCamelCase($attributeCode); $isDataObjectMethod = isset($this->addressDataObjectMethods['get' . $camelCaseKey]) || isset($this->addressDataObjectMethods['is' . $camelCaseKey]); if (!$isDataObjectMethod && !$attributeMetadata->isSystem()) { $customAttributes[] = $attributeMetadata; } } return $customAttributes; } }