1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Ui\Component\Form;
- /**
- * @api
- * @since 100.0.2
- */
- class AttributeMapper
- {
- /**
- * Form element mapping
- *
- * @var array
- */
- private $formElementMap = [
- 'text' => 'input',
- 'hidden' => 'input',
- 'boolean' => 'checkbox',
- ];
- /**
- * EAV attribute properties to fetch from meta storage
- * @var array
- */
- private $metaPropertiesMap = [
- 'dataType' => 'getFrontendInput',
- 'visible' => 'getIsVisible',
- 'required' => 'getIsRequired',
- 'label' => 'getStoreLabel',
- 'sortOrder' => 'getSortOrder',
- 'notice' => 'getNote',
- 'default' => 'getDefaultValue',
- 'size' => 'getMultilineCount'
- ];
- /**
- * @var array
- */
- protected $validationRules = [
- 'input_validation' => [
- 'email' => ['validate-email' => true],
- 'date' => ['validate-date' => true],
- ],
- ];
- /**
- * Get attributes meta
- *
- * @param \Magento\Eav\Api\Data\AttributeInterface $attribute
- * @return array
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function map($attribute)
- {
- foreach ($this->metaPropertiesMap as $metaName => $methodName) {
- $value = $attribute->$methodName();
- $meta[$metaName] = $value;
- if ('getFrontendInput' === $methodName) {
- $meta['formElement'] = isset($this->formElementMap[$value])
- ? $this->formElementMap[$value]
- : $value;
- }
- }
- if ($attribute->usesSource()) {
- $meta['options'] = $attribute->getSource()->getAllOptions();
- }
- $rules = [];
- if (isset($meta['required']) && $meta['required'] == 1) {
- $rules['required-entry'] = true;
- }
- foreach ($attribute->getValidateRules() as $name => $value) {
- if (isset($this->validationRules[$name][$value])) {
- $rules = array_merge($rules, $this->validationRules[$name][$value]);
- } else {
- $rules[$name] = $value;
- }
- }
- $meta['validation'] = $rules;
- return $meta;
- }
- }
|