AttributeMetadataConverter.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Customer\Model;
  7. use Magento\Customer\Api\Data\OptionInterfaceFactory;
  8. use Magento\Customer\Api\Data\ValidationRuleInterfaceFactory;
  9. use Magento\Customer\Api\Data\AttributeMetadataInterfaceFactory;
  10. use Magento\Eav\Api\Data\AttributeDefaultValueInterface;
  11. /**
  12. * Converter for AttributeMetadata
  13. */
  14. class AttributeMetadataConverter
  15. {
  16. /**
  17. * @var OptionInterfaceFactory
  18. */
  19. private $optionFactory;
  20. /**
  21. * @var ValidationRuleInterfaceFactory
  22. */
  23. private $validationRuleFactory;
  24. /**
  25. * @var AttributeMetadataInterfaceFactory
  26. */
  27. private $attributeMetadataFactory;
  28. /**
  29. * @var \Magento\Framework\Api\DataObjectHelper
  30. */
  31. protected $dataObjectHelper;
  32. /**
  33. * Initialize the Converter
  34. *
  35. * @param OptionInterfaceFactory $optionFactory
  36. * @param ValidationRuleInterfaceFactory $validationRuleFactory
  37. * @param AttributeMetadataInterfaceFactory $attributeMetadataFactory
  38. * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
  39. */
  40. public function __construct(
  41. OptionInterfaceFactory $optionFactory,
  42. ValidationRuleInterfaceFactory $validationRuleFactory,
  43. AttributeMetadataInterfaceFactory $attributeMetadataFactory,
  44. \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
  45. ) {
  46. $this->optionFactory = $optionFactory;
  47. $this->validationRuleFactory = $validationRuleFactory;
  48. $this->attributeMetadataFactory = $attributeMetadataFactory;
  49. $this->dataObjectHelper = $dataObjectHelper;
  50. }
  51. /**
  52. * Create AttributeMetadata Data object from the Attribute Model
  53. *
  54. * @param \Magento\Customer\Model\Attribute $attribute
  55. * @return \Magento\Customer\Api\Data\AttributeMetadataInterface
  56. */
  57. public function createMetadataAttribute($attribute)
  58. {
  59. $options = [];
  60. if ($attribute->usesSource()) {
  61. foreach ($attribute->getSource()->getAllOptions() as $option) {
  62. $optionDataObject = $this->optionFactory->create();
  63. if (!is_array($option['value'])) {
  64. $optionDataObject->setValue($option['value']);
  65. } else {
  66. $optionArray = [];
  67. foreach ($option['value'] as $optionArrayValues) {
  68. $optionObject = $this->optionFactory->create();
  69. $this->dataObjectHelper->populateWithArray(
  70. $optionObject,
  71. $optionArrayValues,
  72. \Magento\Customer\Api\Data\OptionInterface::class
  73. );
  74. $optionArray[] = $optionObject;
  75. }
  76. $optionDataObject->setOptions($optionArray);
  77. }
  78. $optionDataObject->setLabel($option['label']);
  79. $options[] = $optionDataObject;
  80. }
  81. }
  82. $validationRules = [];
  83. foreach ((array)$attribute->getValidateRules() as $name => $value) {
  84. $validationRule = $this->validationRuleFactory->create()
  85. ->setName($name)
  86. ->setValue($value);
  87. $validationRules[] = $validationRule;
  88. }
  89. $attributeMetaData = $this->attributeMetadataFactory->create();
  90. if ($attributeMetaData instanceof AttributeDefaultValueInterface) {
  91. $attributeMetaData->setDefaultValue($attribute->getDefaultValue());
  92. }
  93. return $attributeMetaData->setAttributeCode($attribute->getAttributeCode())
  94. ->setFrontendInput($attribute->getFrontendInput())
  95. ->setInputFilter((string)$attribute->getInputFilter())
  96. ->setStoreLabel($attribute->getStoreLabel())
  97. ->setValidationRules($validationRules)
  98. ->setIsVisible((boolean)$attribute->getIsVisible())
  99. ->setIsRequired((boolean)$attribute->getIsRequired())
  100. ->setMultilineCount((int)$attribute->getMultilineCount())
  101. ->setDataModel((string)$attribute->getDataModel())
  102. ->setOptions($options)
  103. ->setFrontendClass($attribute->getFrontend()->getClass())
  104. ->setFrontendLabel($attribute->getFrontendLabel())
  105. ->setNote((string)$attribute->getNote())
  106. ->setIsSystem((boolean)$attribute->getIsSystem())
  107. ->setIsUserDefined((boolean)$attribute->getIsUserDefined())
  108. ->setBackendType($attribute->getBackendType())
  109. ->setSortOrder((int)$attribute->getSortOrder())
  110. ->setIsUsedInGrid($attribute->getIsUsedInGrid())
  111. ->setIsVisibleInGrid($attribute->getIsVisibleInGrid())
  112. ->setIsFilterableInGrid($attribute->getIsFilterableInGrid())
  113. ->setIsSearchableInGrid($attribute->getIsSearchableInGrid());
  114. }
  115. }