Пример #1
0
 /**
  * Get fields.
  *
  * @return unknown
  */
 protected function getFields()
 {
     $settings = $this->settings;
     if (is_null($this->_fields)) {
         $this->_fields = [];
         if (is_array($settings)) {
             $this->_settings = $settings;
         } else {
             $this->_settings = [];
         }
         if (!isset($this->_settings['fieldSettings'])) {
             $this->_settings['fieldSettings'] = [];
         }
         if (!isset($this->_settings['formField'])) {
             $this->_settings['formField'] = [];
         }
         if (!isset($this->_settings['ignoreFields'])) {
             $this->_settings['ignoreFields'] = [];
         }
         if (is_array($this->_settings['fields']) && empty($this->_settings['fields'])) {
             $this->_settings['fields'] = null;
         }
         $fields = $this->_model->getFields($this);
         if (!isset($this->_model->_moduleHandler)) {
             $modelClass = get_class($this->_model);
             $this->_model->_moduleHandler = $modelClass::FORM_PRIMARY_MODEL;
         }
         $requiredFields = true;
         $fieldsTemplate = false;
         if (!is_null($this->relationField)) {
             $fieldName = $this->relationField->modelRole . ':' . $this->relationField->baseModel->objectType->systemId;
             if (isset($fields[$fieldName])) {
                 $fields[$fieldName]->baseModel = $this->relationField->baseModel;
                 $fields[$fieldName]->model = $this->relationField->model;
                 $fields[$fieldName]->formField = $this->relationField->formField;
                 $fields[$fieldName]->required = true;
                 $this->relationField->formField->inlineRelation = true;
                 if (!$this->relationField->model->isNewRecord && $this->relationField->companion->hasDashboard) {
                     $fieldsTemplate = [[$fieldName]];
                     $requiredFields = false;
                 }
             }
         }
         if ($requiredFields) {
             $requiredFields = $this->_model->getRequiredFields($this);
         } else {
             $requiredFields = [$fieldName => $fields[$fieldName]];
         }
         if (!$fieldsTemplate) {
             if (!empty($this->subform)) {
                 $fieldsTemplate = [[$this->subform => ['relationSettings' => $this->relationSettings]]];
             } elseif (!isset($this->_settings['fields'])) {
                 $fieldsTemplate = [];
                 foreach ($fields as $fieldName => $field) {
                     if (!$field->human) {
                         continue;
                     }
                     //if (!$field->required) { continue; }
                     if (!$field instanceof ModelField) {
                         continue;
                     }
                     $fieldsTemplate[] = [$fieldName];
                 }
             } else {
                 $fieldsTemplate = $this->_settings['fields'];
             }
         }
         if ($fieldsTemplate !== false) {
             $this->_settings['fields'] = [];
             foreach ($fields as $fieldKey => $field) {
                 if (!is_object($field->model)) {
                     \d($field);
                     exit;
                 }
                 if ($field->model->isNewRecord) {
                     continue;
                 }
                 if ($field->human) {
                     continue;
                 }
                 if (!$field->required) {
                     continue;
                 }
                 $this->grid->prepend($field->formField);
             }
             $fields['_moduleHandler']->formField->owner = $this;
             $this->grid->prepend($fields['_moduleHandler']->formField);
             $cellClass = $this->cellClass;
             // make sure all required fields are part of the form
             if (empty($this->subform)) {
                 if (!empty($requiredFields)) {
                     foreach ($fieldsTemplate as $rowFields) {
                         foreach ($rowFields as $fieldKey => $fieldSettings) {
                             if (is_numeric($fieldKey)) {
                                 $fieldKey = $fieldSettings;
                                 $fieldSettings = [];
                             }
                             unset($requiredFields[$fieldKey]);
                         }
                     }
                 }
                 foreach ($requiredFields as $fieldName => $field) {
                     if (in_array($fieldName, $this->_settings['ignoreFields'])) {
                         continue;
                     }
                     $fieldsTemplate[] = [$fieldName];
                 }
             }
             foreach ($fieldsTemplate as $rowFields) {
                 $rowItems = [];
                 foreach ($rowFields as $fieldKey => $fieldSettings) {
                     if (is_numeric($fieldKey)) {
                         $fieldKey = $fieldSettings;
                         $fieldSettings = [];
                     }
                     if ($fieldKey === false || $fieldKey === ':empty') {
                         $rowItems[] = Yii::createObject(['class' => $cellClass, 'content' => ' ']);
                         continue;
                     }
                     if ($fieldKey === ':separator') {
                         $rowItems[] = Yii::createObject(['class' => $cellClass, 'content' => '<span class="separator"></span>']);
                         continue;
                     }
                     if (!isset($fields[$fieldKey])) {
                         \d([$fieldKey, array_keys($fields)]);
                         continue;
                     }
                     $this->_fields[$fieldKey] = $fields[$fieldKey];
                     if ($fieldKey === false) {
                         $rowItems[] = false;
                     } else {
                         //\d([$fieldKey, $fieldSettings]);
                         $cellOptions = ['class' => $cellClass, 'content' => $fields[$fieldKey]->formField->configure($fieldSettings)];
                         if (isset($cellOptions['content']->columns)) {
                             $cellOptions['columns'] = $cellOptions['content']->columns;
                         }
                         $rowItems[] = Yii::createObject($cellOptions);
                     }
                 }
                 $this->grid->addRow($rowItems);
             }
         }
     }
     //\d($this->_fields);exit;
     return $this->_fields;
 }