diff --git a/src/bootstrap/safer_io.php b/src/bootstrap/safer_io.php index 34fcf0b..88f870e 100644 --- a/src/bootstrap/safer_io.php +++ b/src/bootstrap/safer_io.php @@ -43,10 +43,11 @@ final class use_io { public $input_var; public string $field_description; public FORM_INPUT_TYPES $form_type; + public array $form_data_list = []; public bool $show_label = true; - public string $div_class = ""; - public string $label_class = ""; - public string $form_control_class = ""; + public ?string $div_class = null; + public ?string $label_class = null; + public ?string $form_control_class = null; public INPUTS $input_type; public FIELD_FILTER $field_filter; public HTML_FLAG $escape_html; @@ -109,6 +110,7 @@ final class safer_io { $show_labels =[]; $form_type = []; $required = []; + $form_data_list = []; $classes = []; foreach(self::esv($input['html']) as $html) { $key = $html['name'] ?? ""; @@ -116,9 +118,10 @@ final class safer_io { $headers[$key] = $html['meta']['field_desc'][$key] ?? ""; $show_labels[$key] = $html['meta']['show_label'][$key] ?? true; $form_type[$key] = $html['meta']['form_type'][$key] ?? FORM_TYPE::text->value; - $classes['label'][$key] = $html['meta']['label_class'] ?? ""; - $classes['div'][$key] = $html['meta']['div_class'] ?? ""; - $classes['ctrl'][$key] = $html['meta']['form_control_class'] ?? ""; + $form_data_list[$key] = $html['meta']['form_data_list'][$key] ?? []; + $classes['label'][$key] = $html['meta']['label_class'][$key] ?? null; + $classes['div'][$key] = $html['meta']['div_class'][$key] ?? null; + $classes['ctrl'][$key] = $html['meta']['form_control_class'][$key] ?? null; $required[$key] = $html['meta']['required'][$key] ?? false; if (\CodeHydrater\common::get_count($html['errors'])) { $errors[$key] = $html['errors'][$key]; @@ -134,7 +137,8 @@ final class safer_io { 'errors'=>$errors, 'headers'=>$headers, 'show_labels'=>$show_labels, - 'form_type'=>$form_type, + 'form_type'=>$form_type, + 'form_data_list'=>$form_data_list, 'required'=>$required ]; } @@ -525,6 +529,10 @@ final class safer_io { $meta['field_desc'][$input_field_name] = $a->field_description; } + if (isset($a->form_data_list)) { + $meta['form_data_list'][$input_field_name] = $a->form_data_list; + } + if (isset($a->show_label)) { $meta['show_label'][$input_field_name] = $a->show_label; } diff --git a/src/classes/enums/form_input_types.php b/src/classes/enums/form_input_types.php index 0a90400..ac4046b 100644 --- a/src/classes/enums/form_input_types.php +++ b/src/classes/enums/form_input_types.php @@ -10,7 +10,13 @@ declare(strict_types = 1); namespace CodeHydrater\enums; enum form_input_types: string { - case none = "none"; // Don't Display control + case none = "none"; // Don't Display control + case textarea = "use_textarea"; + case button = "use_button"; + case select = "use_select"; + case select_multi = "use_select_multi"; + + // Normal Inputs case checkbox ="checkbox"; case color = "color"; case date = "date"; diff --git a/src/classes/form_builder/html_form.php b/src/classes/form_builder/html_form.php index 8a2b37a..7a09bc5 100644 --- a/src/classes/form_builder/html_form.php +++ b/src/classes/form_builder/html_form.php @@ -49,6 +49,11 @@ class html_form { $name = array_shift($arguments); $options = array_shift($arguments) ?? []; + if (str_contains($type, "use_")) { + $use_type = str_replace("use_", "", $type); + return $this->$use_type($name, $options); + } + $options['type'] = $type; return $this->input($name, $options); @@ -66,16 +71,21 @@ class html_form { $r_a = ($is_required) ? ['required' => ""] : []; $my_classes = $a['classes'] ?? []; - $my_div_class = $classes['div'][$name] ?? null; - $my_label_class = $classes['label'][$name] ?? null; - $my_ctrl_class = $classes['ctrl'][$name] ?? null; - + $my_div_class = $my_classes['div'][$name] ?? null; + $my_label_class = $my_classes['label'][$name] ?? null; + $my_ctrl_class = $my_classes['ctrl'][$name] ?? null; + $form_control_class = $my_ctrl_class ?? $a['form-control-class'] ?? "form-control"; $fc = ['class'=> $form_control_class]; $div_class = $my_div_class ?? $a['div-class'] ?? "mb-3"; $label_class = $my_label_class ?? $a['label-class'] ?? ""; + $data_lists = $a['form_data_list'][$name] ?? []; + if (count($data_lists)) { + $r_a['options'] = $data_lists; + } + $this->open_div(['class' => $div_class]); $label = $a['headers'][$name] ?? null; $show_label = $a['show_labels'][$name] ?? true; @@ -194,7 +204,7 @@ class html_form { public function select_multi(string|null $name = null, array $options = []): string { $options[] = 'multiple'; - return $this->append_out($this->select($name, $options)); + return $this->select($name, $options); } public function textarea(string|null $name = null, array $options = []): string @@ -239,7 +249,7 @@ class html_form { $html .= 'html->attributes($option).'>'.$this->html->escape($label).''; } } - + return $html; } diff --git a/src/classes/form_builder/html_helper.php b/src/classes/form_builder/html_helper.php index d97f0bd..a8e1d38 100644 --- a/src/classes/form_builder/html_helper.php +++ b/src/classes/form_builder/html_helper.php @@ -45,6 +45,7 @@ class html_helper { 'accept-charset', 'charset', 'style', + 'selected', ]; protected string $charset = 'UTF-8';