Example #1
0
 /**
  * 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;
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
 /**
  * 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;
 }