. * */ namespace Vvveb\System\Traits; use function Vvveb\__; trait FieldGroup { function renderFields2($fields) { $htmlView = new \Vvveb\System\Core\View(); $htmlView->setTheme(); $htmlView->template('field/field-group/renderfields.html'); $htmlView->fields = $fields; $html = $htmlView->render(true, false, true); //return only content inside $html = preg_replace('@]+>||@', '', $html); return $html; } function field() { $type = $this->request->post['type'] ?? 'text'; $field_id = $this->request->post['field_id']; $json = $this->renderField($type, $field_id); $this->response->setType('json'); return $json; } private function renderField($type, $field_id, $input = []) { $fields = []; $data = []; $json = []; foreach (['settings', 'validation', 'presentation', 'conditionals'] as $section) { $input[$section] = $input[$section] ?? $this->request->post['field'][$field_id][$section] ?? []; } $field = ucfirst($type); $fieldClass = "Vvveb\System\Fields\\$field"; if (! class_exists($fieldClass)) { return; } $fieldObj = new $fieldClass(); $data['settings'] = $fieldObj->getSettings(); $data['validation'] = $fieldObj->getValidation(); $data['presentation'] = $fieldObj->getPresentation(); foreach ($data as $section => $field) { foreach ($field as $name => $value) { if (! $value) { continue; } /* if (isset($this->request->post['field'][$field_id][$section][$name])) { $data[$section][$name]['value'] = $this->request->post['field'][$field_id][$section][$name]; } */ if (isset($input[$section][$name])) { $data[$section][$name]['value'] = $input[$section][$name]; } $data[$section][$name]['id'] = $name; $data[$section][$name]['name'] = "field[$field_id][$section][$name]"; $data[$section][$name]['class'] = ($value['type'] != 'hidden') ? 'row mb-3' : ''; $data[$section][$name]['label-class'] = 'col-sm-2 col-form-label py-0'; $data[$section][$name]['input-class'] = 'col-sm-10 col-xl-8 col-xxl-6'; if ($value['type'] == 'checkbox' && (isset($this->request->post['field'][$field_id][$section][$name]) || isset($input[$section][$name]))) { $data[$section][$name]['checked'] = true; } } } //check if we have a complex value (json array) or a single value if ($fieldClass::valueType) { foreach ($fieldClass::valueType as $name) { $value[$name] = $data['settings'][$name]['value'] ?? ''; } } else { $value = $data['settings']['default']['value'] ?? ''; } $field = [ 'label' => $data['settings']['label']['value'] ?? __('Label'), 'instructions' => $data['presentation']['instructions']['value'] ?? __('Instructions'), 'name' => 'label', //'id' => 'input-' . $field_id, 'type' => $type, 'label-class' => 'form-label', 'placeholder' => $data['settings']['label']['value'] ?? __('Placeholder'), 'readonly' => true, 'value' => $value, //'required' => $data['validation']['required']['checked'] ?? '', ] + $input['presentation'] + $input['settings']; foreach ($field as $name => $value) { /* if (isset($this->request->post['field'][$field_id]['settings'][$name])) { $field[$name] = $this->request->post['field'][$field_id]['settings'][$name]; }*/ if (isset($input[$section][$name])) { $field[$name] = $input[$section][$name]; } } $data['field']['input'] = $field; $json['settings'] = $this->renderFields2($data['settings']); $json['validation'] = $this->renderFields2($data['validation']); $json['presentation'] = $this->renderFields2($data['presentation']); $json['field'] = $this->renderFields2($data['field']); return $json; } function renderFields() { $type = $this->request->get['type'] ?? ''; $fields = []; if ($type == 'field') { $field = $this->request->get['field'] ?? 'text'; $section = $this->request->get['section'] ?? 'settings'; $field = ucfirst($field); $fieldClass = "Vvveb\System\Fields\\$field"; if (! class_exists($fieldClass)) { return; } $fieldObj = new $fieldClass(); switch ($section) { case 'settings': $fields = $fieldObj->getSettings(); break; case 'validation': $fields = $fieldObj->getValidation(); case 'presentation': $fields = $fieldObj->getPresentation(); break; } foreach ($fields as $fieldName => $field) { foreach ($field as $name => $value) { if (isset($this->request->post[$fieldName][$name])) { $fields[$fieldName][$name] = $this->request->post[$fieldName][$name]; } } } } if ($type == 'input') { $field = [ 'label' => __('Label'), 'instructions' => __('Instructions'), 'name' => 'label', 'type' => 'text', 'class' => 'form-label', 'placeholder' => 'placeholder', //'value' => 'value', ]; foreach ($field as $name => $value) { if (isset($this->request->post[$name])) { $field[$name] = $this->request->post[$name]; } } $fields['input'] = $field; } $this->view->fields = $fields; } }