summaryrefslogtreecommitdiff
path: root/public/app/controllers/JsonToForm.php
diff options
context:
space:
mode:
authorGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-28 04:18:22 +0300
committerGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-28 04:18:22 +0300
commit83456b16e3c725dab04a3ac36110857c7f70c479 (patch)
treeef54466af4ea917ce77abb4a17657afe91d27b73 /public/app/controllers/JsonToForm.php
parent6655db3dcf117cfd921a7b39600545c51e035b31 (diff)
downloadgyraf1gov-83456b16e3c725dab04a3ac36110857c7f70c479.tar.gz
gyraf1gov-83456b16e3c725dab04a3ac36110857c7f70c479.tar.bz2
gyraf1gov-83456b16e3c725dab04a3ac36110857c7f70c479.zip
json to form initial implementation
Diffstat (limited to 'public/app/controllers/JsonToForm.php')
-rw-r--r--public/app/controllers/JsonToForm.php413
1 files changed, 210 insertions, 203 deletions
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 = '
- <div class="pi-container">
- <h2>Εισαγωγή Εγγραφής</h2>';
- $i = 1;
- foreach ($formARRAY as $key => $section) { // only one section
+ $html = '
+ <div class="pi-container">
+ <h2>Εισαγωγή Εγγραφής</h2>';
- $html = '<hr />';
+ 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 .= "
+ <div class='form-group {$class}'>
+ <label for='{$name}'>{$label} {$asterisk}</label>
+ ";
+
+ 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 .= "
- <div class='form-group {$class}'>
- <label for='{$name}'>{$label} {$asterisk}</label>
- ";
-
- switch ($field->typ) {
+ $html .="
+ <select id='{$name}$' class='select-field' name='{$name}[]' multiple='multiple' style='width:100%'>";
- case 'select':
+ // prepare initialization of select2 (multiple)
+ $initSelectsJS .= "
+ var {$name} = $('#{$name}');
+ {$name}.select2({ width: '100%' });";
- if (in_array('multiple', $atrs)) { // if select is multiple
+ // prepare check if empty field
+ $checkFilledJS .= "
+ if (getValues({$name}) =='') { empty += '{$label} {$asterisk}<br />'; }
+ values.{$name} = getValues($name);";
- $html .="
- <select id='{$name}$' class='select-field' name='{$name}[]' multiple='multiple' style='width:100%'>";
-
- // 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}<br />'; }
- values.{$name} = getValues($name);";
+ } else { // select is single; draw select + add empty option
- } else { // select is single; draw select + add empty option
+ $html .="
+ <select id='{$name}$' class='select-field' name='{$name}' style='width:100%'>
+ <option></option>";
- $html .="
- <select id='{$name}$' class='select-field' name='{$name}' style='width:100%'>
- <option></option>";
+ // 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}<br />'; }
+ values.{$name} = getValues($name);";
+
+ }
- // prepare check if empty field
- $checkFilledJS .= "
- if (getValues({$name}) =='') { empty += '{$label} {$asterisk}<br />'; }
- values.{$name} = getValues($name);";
-
- }
+ // inject options
+ foreach ($field->opt as $key => $val) {
+ $html .= "
+ <option value='{$val->id}'>{$val->tag}</option>";
+ }
- // inject options
- foreach ($field->options as $key => $val) {
- $html .= "
- <option value='{$val->id}'>{$val->tag}</option>";
- }
+ // close select
+ $html .= "</select>";
- // close select
- $html .= "</select>";
+ break;
- break;
+ case 'text':
- case 'text':
+ $html .= "
+ <input type='text' class='form-control' name='{$name}' {$required}>";
- $html .= "
- <input type='text' class='form-control' name='{$name}' {$required}>";
+ $checkFilledJS = "
+ if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}<br />'; }
+ values.{$name} = $('input[name={$name}]').val();";
- $checkFilledJS = "
- if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'<br />'; }
- values.{$name} = $('input[name={$name}]').val();";
+ break;
- break;
+
+ case 'integer':
-
- case 'integer':
+ $html .= "
+ <input type='number' class='form-control' name='{$name}' min='0' step='1' {$required}>";
- $html .= "
- <input type='number' class='form-control' name='{$name}' min='0' step='1' {$required}>";
+ $checkFilledJS .= "
+ if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}<br />'; }
+ values.{$name} = $('input[name={$name}]').val();";
- $checkFilledJS .= "
- if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'<br />'; }
- values.{$name} = $('input[name={$name}]').val();";
+ break;
- break;
+ case 'textarea':
- case 'textarea':
+ $html .= "
+ <textarea class='form-control' name='{$name}' {$required}></textarea>";
- $html .= "
- <textarea class='form-control' name='{$name}' {$required}></textarea>";
+ $checkFilledJS .= "
+ if ($('textarea[name={$name}]').val() =='') { empty += '{$label} {$asterisk}<br />'; }
+ values.{$name} = $('textarea[name={$name}]').val();";
- $checkFilledJS .= "
- if ($('textarea[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'<br />'; }
- values.{$name} = $('textarea[name={$name}]').val();";
+ break;
+
- case 'date':
+ case 'date':
- $html .= "
- <input type='date' class='form-control' name='{$name}' {$required}>";
+ $html .= "
+ <input type='date' class='form-control' name='{$name}' {$required}>";
- $checkFilledJS .= "
- if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'<br />'; }
- values.{$name} = $('input[name={$name}]').val();";
+ $checkFilledJS .= "
+ if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}<br />'; }
+ values.{$name} = $('input[name={$name}]').val();";
- break;
+ break;
- case 'email':
+ case 'email':
- $html .= "
- <input type='email' class='form-control' name='{$name}' {$required}>";
+ $html .= "
+ <input type='email' class='form-control' name='{$name}' {$required}>";
- $checkFilledJS .= "
- if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}'<br />'; }
- values.{$name} = $('input[name={$name}]').val();";
+ $checkFilledJS .= "
+ if ($('input[name={$name}]').val() =='') { empty += '{$label} {$asterisk}<br />'; }
+ values.{$name} = $('input[name={$name}]').val();";
- break;
+ break;
- default: // label, acts as common text
+ default: // label, acts as common text
- $html .= "<label>{$label}</label";
-
+ $html .= "<label>{$label}</label";
+
- }
}
+
+ $html .= '</div>';
}
+
+ return [
+ 'html' => $html,
+ 'init_js' => $initSelectsJS,
+ 'values_js' => $checkFilledJS
+ ];
+
}
}
@@ -523,31 +530,31 @@ class JsonToForm
* // and tab mode (tabs|acordeon)
* // ---------------------------------------------------------------------------
* function set_tabsContainer_height() {
- * var ch_; // content height
- * var tc_base; // tabs-container base height
+ * var ch_; // content height
+ * var tc_base; // tabs-container base height
* tc_base = ($(window).width() > 650) ? 100 : 400;
- * if ($('#content1').is(':visible')) ch_ = $('#content1').height();
- * if ($('#content2').is(':visible')) ch_ = $('#content2').height();
- * if ($('#content3').is(':visible')) ch_ = $('#content3').height();
- * if ($('#content4').is(':visible')) ch_ = $('#content4').height();
- * if ($('#content5').is(':visible')) ch_ = $('#content5').height();
- * if ($('#content6').is(':visible')) ch_ = $('#content6').height();
+ * if ($('#content1').is(':visible')) ch_ = $('#content1').height();
+ * if ($('#content2').is(':visible')) ch_ = $('#content2').height();
+ * if ($('#content3').is(':visible')) ch_ = $('#content3').height();
+ * if ($('#content4').is(':visible')) ch_ = $('#content4').height();
+ * if ($('#content5').is(':visible')) ch_ = $('#content5').height();
+ * if ($('#content6').is(':visible')) ch_ = $('#content6').height();
*
* $('#tabsContainer').height(ch_ + tc_base);
*
* }
- * set_tabsContainer_height(); // init (run for 1st time)
+ * set_tabsContainer_height(); // init (run for 1st time)
*
* // on tab selection
* // calculate tabsContainer height
* $('input:radio[name="tabs"]').change( function(){
- * set_tabsContainer_height()
+ * set_tabsContainer_height()
* });
*
* // on window change
* // set tabsContainer height
* $( window ).resize(function() {
- * set_tabsContainer_height();
+ * set_tabsContainer_height();
* });
*
*
@@ -564,19 +571,19 @@ class JsonToForm
* // return: value(s) comma-separated
* // ---------------------------------------------------------------------------
* function getValues(srcElm) {
- * var res;
- * var obj = srcElm.select2('data'); // get delected data array
+ * var res;
+ * var obj = srcElm.select2('data'); // get delected data array
*
- * if (obj.length === 0) return ''; // if empty list then nothig is selected
+ * if (obj.length === 0) return ''; // if empty list then nothig is selected
* else {
* var i = 0;
- * obj.forEach(function(elm){ // loop through object elements array
+ * obj.forEach(function(elm){ // loop through object elements array
*
- * if (i) res += ',' + elm.id; // if not first item, prepend ',' befor value(id)
- * else res = elm.id; // else set (first) checked value
+ * if (i) res += ',' + elm.id; // if not first item, prepend ',' befor value(id)
+ * else res = elm.id; // else set (first) checked value
*
* i++;
- * });
+ * });
* }
* return res;
* }