summaryrefslogtreecommitdiff
path: root/public/app/controllers/JsonToForm.php
diff options
context:
space:
mode:
authorGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-05-04 03:02:01 +0300
committerGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-05-04 03:02:01 +0300
commit63f714d5a78b765c117ebf6bbdfdbd748dd45644 (patch)
tree87a4db40e1ff699222ccfdf699a3904d1c665bfc /public/app/controllers/JsonToForm.php
parent931a93cd7bae092e2752064568cebe407d2bf46e (diff)
downloadgyraf1gov-63f714d5a78b765c117ebf6bbdfdbd748dd45644.tar.gz
gyraf1gov-63f714d5a78b765c117ebf6bbdfdbd748dd45644.tar.bz2
gyraf1gov-63f714d5a78b765c117ebf6bbdfdbd748dd45644.zip
authentication; invitation; activation; base form setup
Diffstat (limited to 'public/app/controllers/JsonToForm.php')
-rw-r--r--public/app/controllers/JsonToForm.php89
1 files changed, 68 insertions, 21 deletions
diff --git a/public/app/controllers/JsonToForm.php b/public/app/controllers/JsonToForm.php
index 1b05af7..5df650d 100644
--- a/public/app/controllers/JsonToForm.php
+++ b/public/app/controllers/JsonToForm.php
@@ -1,4 +1,5 @@
<?php
+namespace app\controllers;
class JsonToForm
{
@@ -141,14 +142,20 @@ class JsonToForm
return (mb_strlen($str) > $len) ? mb_substr($str, 0, $len-1) ."…" : $str;
}
-
- public static function make_a_form($form)
+ /** json_form
+ *
+ * construct a form (html, javasctipt)
+ * from a json designer
+ *
+ */
+ public static function json_form($formJson, $require_identity = [])
{
- $formJson = json_decode(json_encode($form));
+ // $formJson = json_decode(json_encode($form));
- $default_outer = $form->defaults->outer_class ?? '';
- $default_inner = $form->defaults->inner_class ?? '';
- $default_type = $form->defaults->type ?? 'text';
+ $default_outer = $formJson->defaults->outer_class ?? '';
+ $default_inner = $formJson->defaults->inner_class ?? '';
+ $default_type = $formJson->defaults->type ?? 'text';
+ $default_values = $formJson->defaults->values ?? ((object) ['nothing' => true]);
// TODO handle $form->defaults->source;
@@ -180,8 +187,15 @@ class JsonToForm
$initSelectsJS = ""; // js to initialize select fields (single or multiple)
+ $identity = ""; // construct required identity hidden fields
+ foreach ($require_identity as $group) {
+ $identity .= "
+ <input type='hidden' name='". $group['name']
+ ."' value='". $group['value'] ."'>";
+ }
- $html = "
+ // now constuct the form body
+ $html = "{$identity}
<div class='row'>
";
@@ -191,15 +205,22 @@ class JsonToForm
$type = $field->type ?? $default_type;
$class = $field->class ?? "";
$label = $field->label;
- $name = $field->name ?? "$field->label";
-
- // TODO: auto value
-
+ $name = $field->name ?? $field->label;
+
+ // handle value assignment
+ if (isset($field->value)) { // if value property is set
+ $set_value = true; // (flag: value seted)
+ $value = (($field->value == 'auto') && isset($default_values->$name))
+ ? $default_values->$name // set auto value
+ : $field->value; // or other set-value
+ } else {
+ $set_value = false;
+ }
+ // print_r([ $set_value, $name, ($default_values->$name ?? 'none') ]);
+
$appendKey = in_array('append-key', $attributes) ? true : false; // append key (for selects)
- $required = in_array('required', $attributes) ? 'required' : ''; // required
+ $required = in_array('required', $attributes) ? '' : ''; // required
$asterisk = in_array('required', $attributes) ? '*' : ''; // asterisk in label if required
-
-
$html .= "
<div class='form-group {$class}'>
@@ -220,6 +241,15 @@ class JsonToForm
var {$name} = $('#{$name}');
{$name}.select2({ width: '100%', placeholde: '{$label}' });";
+ if ($set_value) { // if default value is set
+ $initSelectsJS .= "
+ select2_set_multi_text( {$name} , {$value} );";
+
+ } else {
+ $initSelectsJS .= "
+ {$name}.val(null).trigger('change');";
+ }
+
// prepare check if empty field
$checkFilledJS .= "
if (getValues({$name}) =='') { empty += '{$label} {$asterisk}<br />'; }
@@ -234,8 +264,16 @@ class JsonToForm
// prepare initialization of select2 (single)
$initSelectsJS .= "
var {$name} = $('#{$name}');
- {$name}.select2({ });
- {$name}.val(null).trigger('change')";
+ {$name}.select2();";
+
+ if ($set_value) { // if default value is set
+ $initSelectsJS .= "
+ select2_set_text( {$name} , '{$value}' );";
+
+ } else {
+ $initSelectsJS .= "
+ {$name}.val(null).trigger('change');";
+ }
// prepare check if empty field
$checkFilledJS .= "
@@ -259,8 +297,10 @@ class JsonToForm
case 'text':
+ $def_value = ($set_value) ? "value='{$value}'" : "value=''";
+
$html .= "
- <input type='text' class='form-control form-control-sm' name='{$name}' {$required}>";
+ <input type='text' class='form-control form-control-sm' name='{$name}' $def_value {$required}>";
$checkFilledJS = "
if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}<br />'; }
@@ -271,6 +311,8 @@ class JsonToForm
case 'password':
+ $def_value = ($set_value) ? "value='{$value}'" : "value=''";
+
$html .= "
<input type='password' class='form-control form-control-sm' name='{$name}' {$required}>";
@@ -283,8 +325,10 @@ class JsonToForm
case 'integer':
+ $def_value = ($set_value) ? "value='{$value}'" : "value=''";
+
$html .= "
- <input type='number' class='form-control form-control-sm' name='{$name}' min='0' step='1' {$required}>";
+ <input type='number' class='form-control form-control-sm' name='{$name}' min='0' step='1' $def_value {$required}>";
$checkFilledJS .= "
if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}<br />'; }
@@ -295,8 +339,10 @@ class JsonToForm
case 'textarea':
+ $def_value = ($set_value) ? "{$value}" : "";
+
$html .= "
- <textarea class='form-control form-control-sm' name='{$name}' {$required}></textarea>";
+ <textarea class='form-control form-control-sm' name='{$name}' {$required}>{$def_value}</textarea>";
$checkFilledJS .= "
if ($('textarea[name={$name}]').val() =='') { empty += '{$label} {$asterisk}<br />'; }
@@ -319,8 +365,10 @@ class JsonToForm
case 'email':
+ $def_value = ($set_value) ? "value='{$value}'" : "value=''";
+
$html .= "
- <input type='email' class='form-control form-control-sm' name='{$name}' {$required}>";
+ <input type='email' class='form-control form-control-sm' name='{$name}' {$def_value} {$required}>";
$checkFilledJS .= "
if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}<br />'; }
@@ -332,7 +380,6 @@ class JsonToForm
default: // label, acts as common text
//$html .= "<label>{$label}</label";
-
}