From 83456b16e3c725dab04a3ac36110857c7f70c479 Mon Sep 17 00:00:00 2001 From: George Halkiadakis Date: Fri, 28 Apr 2023 04:18:22 +0300 Subject: json to form initial implementation --- public/app/controllers/JsonToForm.php | 413 +++++++++++++++++----------------- 1 file changed, 210 insertions(+), 203 deletions(-) (limited to 'public/app/controllers/JsonToForm.php') diff --git a/public/app/controllers/JsonToForm.php b/public/app/controllers/JsonToForm.php index 9e305ce..fe08d5c 100644 --- a/public/app/controllers/JsonToForm.php +++ b/public/app/controllers/JsonToForm.php @@ -63,263 +63,270 @@ class JsonToForm } } - // if not escaped already, then name return same - return array('label' => $fkey, 'multi' => false, 'value' => $inp ); - } + // if not escaped already, then name return same + return array('label' => $fkey, 'multi' => false, 'value' => $inp ); + } - // Parse anythig from ccode - public static function parse_ccode($ckey) { - $ccARRAY = json_decode(CODEJSON); + // Parse anythig from ccode + public static function parse_ccode($ckey) { + $ccARRAY = json_decode(CODEJSON); - foreach ($ccARRAY as $key => $val) { - // find the field - if ($val->id == $ckey) { - // return everything in an array - return $val; - } + foreach ($ccARRAY as $key => $val) { + // find the field + if ($val->id == $ckey) { + // return everything in an array + return $val; } } + } - // Get totals of alla categories ///////////////////////////////////////////// - // RETURN array of items (value) per category (array key) - // --------------------------------------------------------------------------- - public static function get_totals() { - $result = array(); - $sum = 0; - - $dbc = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DBMS); - if ($dbc->connect_errno) { - echo "Database connection failed; Please try in a few minutes. "; - if (TESTING) echo $dbc->connect_error; - $dbc->close(); die(); + // Get totals of alla categories ///////////////////////////////////////////// + // RETURN array of items (value) per category (array key) + // --------------------------------------------------------------------------- + public static function get_totals() { + $result = array(); + $sum = 0; + + $dbc = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DBMS); + if ($dbc->connect_errno) { + echo "Database connection failed; Please try in a few minutes. "; + if (TESTING) echo $dbc->connect_error; + $dbc->close(); die(); + } + $dbc->set_charset("utf8"); + + // prepare statemet + $stm = $dbc->prepare("SELECT ccode, count(id) total FROM `items` GROUP BY ccode"); + $stm->execute(); // execute query + $stm->store_result(); // store result + $stm->bind_result($c, $tot); + while ($stm->fetch()) { + // using md5() you can have any unicode string as key ;) + // credit: https://stackoverflow.com/questions/10696067/characters-allowed-in-php-array-keys -> Rob's answer + // but newer versions of php (v7+) seem to handle unicide keys nicely + $result[$c] = $tot; + $sum += $tot; } - $dbc->set_charset("utf8"); - - // prepare statemet - $stm = $dbc->prepare("SELECT ccode, count(id) total FROM `items` GROUP BY ccode"); - $stm->execute(); // execute query - $stm->store_result(); // store result - $stm->bind_result($c, $tot); - while ($stm->fetch()) { - // using md5() you can have any unicode string as key ;) - // credit: https://stackoverflow.com/questions/10696067/characters-allowed-in-php-array-keys -> Rob's answer - // but newer versions of php (v7+) seem to handle unicide keys nicely - $result[$c] = $tot; - $sum += $tot; - } - $result['all'] = $sum; + $result['all'] = $sum; - return $result; - } + return $result; + } - // Preview Local Datetime //////////////////////////////////////////////////// - // (in Greek format and names ) - // --------------------------------------------------------------------------- - public static function local_dt($t) { - $day = array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); - $dayL = array("Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"); - $mon = array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); - $monL = array("Ιαν", "Φεβ", "Μαρ", "Απρ", "Μαϊ", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"); - $tm = array("am", "pm"); - $tmL = array("πμ", "μμ"); - $r = date("D. j M. Y, h:i:sa", $t); - $r = str_replace($day, $dayL, $r); - $r = str_replace($mon, $monL, $r); - $r = str_replace($tm, $tmL, $r); - return $r; - } + // Preview Local Datetime //////////////////////////////////////////////////// + // (in Greek format and names ) + // --------------------------------------------------------------------------- + public static function local_dt($t) { + $day = array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); + $dayL = array("Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"); + $mon = array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); + $monL = array("Ιαν", "Φεβ", "Μαρ", "Απρ", "Μαϊ", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"); + $tm = array("am", "pm"); + $tmL = array("πμ", "μμ"); + $r = date("D. j M. Y, h:i:sa", $t); + $r = str_replace($day, $dayL, $r); + $r = str_replace($mon, $monL, $r); + $r = str_replace($tm, $tmL, $r); + return $r; + } - // Part of string - // UTF-8 SAFE - public static function str_part($str, $len) { - return (mb_strlen($str) > $len) ? mb_substr($str, 0, $len-1) ."…" : $str; - } + // Part of string + // UTF-8 SAFE + public static function str_part($str, $len) { + return (mb_strlen($str) > $len) ? mb_substr($str, 0, $len-1) ."…" : $str; + } - public static function make_a_form() + public static function make_a_form($formJson) { - // Script Workflow: - // --------------------------------------------------------------------------- - // 1. read fields options - // 2. generate HTML - // 3. generate JS needed - - // the UI - // --------------------------------------------------------------------------- - // Fields are grouped in sections - // These sections presented in tabs (or accordion if mobile device) - // Two (2) sections incduded to inform the user of empty fields or errors - - // Libraries and FrameWorks used - // --------------------------------------------------------------------------- - // Bootstrap 4.3 is used for easy responsive HTML code - // JQuery 3.3 is used to handle user interation - // Select2 is used to make select-boxes (single or multiple) easier to use + // Script Workflow: + // --------------------------------------------------------------------------- + // 1. read fields options + // 2. generate HTML + // 3. generate JS needed - // read fields options (json format) ///////////////////////////////////////// - // --------------------------------------------------------------------------- - $formJSON = file_get_contents('config/kallassa.json'); - $formARRAY = json_decode($formJSON); + // the UI + // --------------------------------------------------------------------------- + // Fields are grouped in sections + // These sections presented in tabs (or accordion if mobile device) + // Two (2) sections incduded to inform the user of empty fields or errors + // Libraries and FrameWorks used + // --------------------------------------------------------------------------- + // Bootstrap 4.3 is used for easy responsive HTML code + // JQuery 3.3 is used to handle user interation + // Select2 is used to make select-boxes (single or multiple) easier to use - // Init strigns for JS generator (needed to handle everything) /////////////// - // --------------------------------------------------------------------------- - $checkFilledJS = ""; // JS for checking empty fields - $ref2Select2JS = ""; // references to Select2-controls Javascript - $initSelectsJS = ""; // js to initialize select fields (single or multiple) + // read fields options (json format) ///////////////////////////////////////// + // --------------------------------------------------------------------------- + // Init strigns for JS generator (needed to handle everything) /////////////// + // --------------------------------------------------------------------------- + $checkFilledJS = ""; // JS for checking empty fields + $ref2Select2JS = ""; // references to Select2-controls Javascript + $initSelectsJS = ""; // js to initialize select fields (single or multiple) - $html = ' -
-

Εισαγωγή Εγγραφής

'; - $i = 1; - foreach ($formARRAY as $key => $section) { // only one section + $html = ' +
+

Εισαγωγή Εγγραφής

'; - $html = '
'; + foreach ($formJson as $key => $field) { - foreach ($section->childs as $kk => $field) { + // get attributes - // get attributes + if (isset($field->atr)) { + $atrs = explode('|', $field->atr); // attributes array + } else { + $atrs = []; + } + $appendKey = in_array('append-key', $atrs) ? true : false; // append key (for selects) + $required = in_array('required', $atrs) ? 'required' : ''; // required + $asterisk = in_array('required', $atrs) ? '*' : ''; // asterisk in label if required + $class = (isset($field->len)) ? ' col-md-'.$field->len : 'col-md-12'; // column class (for width) + $name = $field->nam; + $label = $field->lab; + + + $html .= " +
+ + "; + + switch ($field->typ) { - $atrs = explode('|', $field->attr); // attributes array - $appendKey = in_array('append-key', $atrs) ? true : false; // append key (for selects) - $required = in_array('required', $atrs) ? 'required' : ''; // required - $asterisn = in_array('required', $atrs) ? '*' : ''; // asterisk in label if required - $class = (isset($field->len)) ? ' col-md-'.$field->len : 'col-md-12'; // column class (for width) - $name = $field->name; - $label = $field->label; + case 'select': + if (in_array('multiple', $atrs)) { // if select is multiple - $html .= " -
- - "; - - switch ($field->typ) { + $html .=" + "; - - // prepare initialization of select2 (multiple) - $initSelectsJS .= " - var {$name} = $('#{$name}'); - {$name}.select2({ width: '100%' });"; - - // prepare check if empty field - $checkFilledJS .= " - if (getValues({$name}) =='') { empty += '{$label} {$asterisk}
'; } - values.{$name} = getValues($name);"; + } else { // select is single; draw select + add empty option - } else { // select is single; draw select + add empty option + $html .=" + - "; + // prepare initialization of select2 (single) + $initSelectsJS .= " + var {$name} = $('#{$name}'); + {$name}.select2({ allowClear: true });"; - // prepare initialization of select2 (single) - $initSelectsJS .= " - var {$name} = $('#{$name}'); - {$name}.select2({ allowClear: true });"; + // prepare check if empty field + $checkFilledJS .= " + if (getValues({$name}) =='') { empty += '{$label} {$asterisk}
'; } + values.{$name} = getValues($name);"; + + } - // prepare check if empty field - $checkFilledJS .= " - if (getValues({$name}) =='') { empty += '{$label} {$asterisk}
'; } - values.{$name} = getValues($name);"; - - } + // inject options + foreach ($field->opt as $key => $val) { + $html .= " + "; + } - // inject options - foreach ($field->options as $key => $val) { - $html .= " - "; - } + // close select + $html .= ""; - // close select - $html .= ""; + break; - break; + case 'text': - case 'text': + $html .= " + "; - $html .= " - "; + $checkFilledJS = " + if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}
'; } + values.{$name} = $('input[name={$name}]').val();"; - $checkFilledJS = " - if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'
'; } - values.{$name} = $('input[name={$name}]').val();"; + break; - break; + + case 'integer': - - case 'integer': + $html .= " + "; - $html .= " - "; + $checkFilledJS .= " + if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}
'; } + values.{$name} = $('input[name={$name}]').val();"; - $checkFilledJS .= " - if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'
'; } - values.{$name} = $('input[name={$name}]').val();"; + break; - break; + case 'textarea': - case 'textarea': + $html .= " + "; - $html .= " - "; + $checkFilledJS .= " + if ($('textarea[name={$name}]').val() =='') { empty += '{$label} {$asterisk}
'; } + values.{$name} = $('textarea[name={$name}]').val();"; - $checkFilledJS .= " - if ($('textarea[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'
'; } - values.{$name} = $('textarea[name={$name}]').val();"; + break; + - case 'date': + case 'date': - $html .= " - "; + $html .= " + "; - $checkFilledJS .= " - if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'
'; } - values.{$name} = $('input[name={$name}]').val();"; + $checkFilledJS .= " + if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}
'; } + values.{$name} = $('input[name={$name}]').val();"; - break; + break; - case 'email': + case 'email': - $html .= " - "; + $html .= " + "; - $checkFilledJS .= " - if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'
'; } - values.{$name} = $('input[name={$name}]').val();"; + $checkFilledJS .= " + if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}
'; } + values.{$name} = $('input[name={$name}]').val();"; - break; + break; - default: // label, acts as common text + default: // label, acts as common text - $html .= "