/** * build a form * * @param $configData * @return $this */ public function buildForm($configData) { $form = $this->_formFactory->create(); $this->setForm($form); if (!isset($configData['fieldset']) || !is_array($configData['fieldset'])) { return $this; } $hasTooltip = ''; if ($this->_scopeConfig->isSetFlag(self::XML_TOOLTIPS_ENABLED_PATH)) { $hasTooltip = 'has-tooltip'; } foreach ($configData['fieldset'] as $id => $settings) { $fieldset = $form->addFieldset($id, ['legend' => isset($settings['label']) ? __($settings['label']) : '', 'class' => 'fieldset-wide' . (isset($settings['class']) ? ' ' . $settings['class'] : ''), 'collapsable' => (int) $this->formConfig->getBoolValue($settings, 'collapsible')]); $index = 0; foreach ($settings['field'] as $fieldId => $fieldSettings) { $fieldType = $this->formConfig->getFieldType($fieldSettings); $fieldConfig = ['name' => $fieldId, 'label' => __($fieldSettings['label']), 'title' => $this->escapeHtml(__($fieldSettings['label']))]; if ($this->formConfig->getBoolValue($fieldSettings, 'required')) { $fieldConfig['required'] = true; } if ($this->formConfig->getBoolValue($fieldSettings, 'readonly')) { $fieldConfig['readonly'] = true; } if ($this->_scopeConfig->isSetFlag(self::XML_TOOLTIPS_ENABLED_PATH)) { if (isset($fieldSettings['tooltip']) && $fieldType != 'hidden') { $fieldConfig['after_element_html'] = $this->getTooltipHtml($this->model->getEntityCode(), $fieldSettings['id']); } } if (isset($fieldSettings['note'])) { $fieldConfig['note'] = $fieldSettings['note']; } $fieldConfig['class'] = ($index % 2 == 0 ? 'even' : 'odd') . ' ' . $hasTooltip; $fieldConfig['css_class'] = $fieldConfig['class']; $index++; if (isset($fieldSettings['class'])) { $fieldConfig['class'] .= ' ' . $fieldSettings['class']; } if (isset($fieldSettings['reloader-class'])) { $fieldConfig['class'] .= ' ' . $fieldSettings['reloader-class']; } if (in_array($fieldType, ['select', 'multiselect'])) { $fieldConfig['values'] = $this->objectManager->get($fieldSettings['source'])->toOptionArray($fieldType == 'select'); } if ($fieldType == 'textarea') { $fieldConfig['rows'] = $this->formConfig->getTextareaRows($fieldSettings); } $fieldset->addField($fieldSettings['id'], $fieldType, $fieldConfig); } } return $this; }
/** * render the form * * @param \Magento\Framework\Data\Form\Element\AbstractElement $element * @return string */ public function render(AbstractElement $element) { $html = $this->_getHeaderHtml($element); $formName = $this->getFormName(); $config = $this->formConfig->getConfig('form/' . $formName, true, []); foreach ($config['fieldset'] as $fieldset) { foreach ($fieldset['field'] as $id => $field) { if ($this->formConfig->getBoolValue($field, 'system') && $field['type'] != 'hidden') { $html .= $this->getFieldHtml($element, $id, $field); } } } $html .= $this->_getFooterHtml($element); return $html; }
/** * validate field * * @param $fieldId * @param $fieldSettings * @return array */ protected function validateField($fieldId, $fieldSettings) { $errors = []; if ($this->formConfig->getBoolValue($fieldSettings, 'required')) { $value = trim($this->getData($fieldId)); if (strlen(trim($value)) == 0) { $errors[] = __('Field %1 is required', $fieldSettings['label']); } } $restrictions = $this->restrictionConfig->getRestrictions($this->getEntityCode()); if (isset($restrictions[$fieldId])) { if ($this->restrictionConfig->getBoolValue($restrictions[$fieldId], 'reserved')) { $reserved = $this->restrictionConfig->getReservedKeywords(); if (in_array(strtolower($this->getData($fieldId)), $reserved)) { $errors[] = __('You cannot use "%1" here. It is a PHP reserved keyword', $this->getData($fieldId)); } } if (isset($restrictions[$fieldId]['class'])) { $magic = $this->restrictionConfig->getMagicRestrictedValues($restrictions[$fieldId]['class']); if (in_array(strtolower($this->getData($fieldId)), $magic)) { $errors[] = __('You cannot use "%1" here. it will conflict with the magic getter or setters of the model', $this->getData($fieldId)); } } if (isset($restrictions[$fieldId]['val'])) { foreach ($restrictions[$fieldId]['val'] as $value) { if ($this->getData($fieldId) == $value['real_val']) { if (isset($value['depend'])) { foreach ($value['depend'] as $dependField => $dependency) { if ($dependency['type'] == 'parent') { $source = $this->getParent(); } elseif ($dependency['type'] == 'grandparent') { $source = $this->getParent()->getParent(); } else { $source = $this; } $restrictedValues = []; foreach ($dependency['depend_val'] as $val) { $restrictedValues[] = $val['value']; } if (in_array($source->getDataUsingMethod($dependField), $restrictedValues)) { if (isset($value['message'])) { $error = __($value['message']); } else { $error = __('"%1" value is not permitted.', $value['real_val']); } $errors[] = $error; } } } else { if (isset($value['message'])) { $error = __($value['message']); } else { $error = __('"%1" value is not permitted.', $value['real_val']); } $errors[] = $error; } } } } } return $errors; }