From 8f947db6515f2ff2b6b2cd8abaedf297745c2176 Mon Sep 17 00:00:00 2001 From: Geo Halkiadakis Date: Mon, 22 May 2023 18:28:59 +0300 Subject: working onto application form --- public/app/controllers/JsonToForm.php | 749 +++++++++++++++------------------- public/app/controllers/Office.php | 10 +- 2 files changed, 338 insertions(+), 421 deletions(-) (limited to 'public/app/controllers') diff --git a/public/app/controllers/JsonToForm.php b/public/app/controllers/JsonToForm.php index 7df8098..f6e9746 100644 --- a/public/app/controllers/JsonToForm.php +++ b/public/app/controllers/JsonToForm.php @@ -4,28 +4,29 @@ namespace app\controllers; class JsonToForm { /** - * ## Help Constants and Functions ------------------------------------------------ - * //////////////////////////////////////////////////////////////////////////////// + * ## Help Constants and Functions ----------------------------------------- + * ///////////////////////////////////////////////////////////////////////// * - * // Cache fields options (json format) //////////////////////////////////////// - * // --------------------------------------------------------------------------- + * + * Cache fields options (json format) ////////////////////////////////////// + * ------------------------------------------------------------------------- * $formJSON = file_get_contents('config/kallassa.json'); * define("FORMJSON", $formJSON); * - * // Cache CCODE attributes (json format) ////////////////////////////////////// - * // --------------------------------------------------------------------------- + * Cache CCODE attributes (json format) //////////////////////////////////// + * ------------------------------------------------------------------------- * $codeJSON = file_get_contents('config/ccode.json'); * define("CODEJSON", $codeJSON); * - * // Parse anythig from a field //////////////////////////////////////////////// - * // ARGS: - * // $fkey = keyname (as in json fields oprions) - * // $inp = input value (string) - * // RETURN: array( - * // 'label' = field label, - * // 'multi' = (true|false) is multiple choice (select|radio|check) or not, - * // 'value' = human readable value (or array of values if multi) - * // ) ------------------------------------------------------------------------- + * Parse anythig from a field ////////////////////////////////////////////// + * ARGS: + * $fkey = keyname (as in json fields oprions) + * $inp = input value (string) + * RETURN: array( + * 'label' = field label, + * 'multi' = (true|false) is multiple choice (select|radio|check) or not, + * 'value' = human readable value (or array of values if multi) + * ) ----------------------------------------------------------------------- */ public static function parse_any($fkey, $inp ="") { @@ -71,7 +72,8 @@ class JsonToForm // Parse anythig from ccode - public static function parse_ccode($ckey) { + public static function parse_ccode($ckey) + { $ccARRAY = json_decode(CODEJSON); foreach ($ccARRAY as $key => $val) { @@ -84,44 +86,12 @@ class JsonToForm } - // 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; - } - - $result['all'] = $sum; - - return $result; - } - - // Preview Local Datetime //////////////////////////////////////////////////// + // Preview Local Datetime ////////////////////////////////////////////////// // (in Greek format and names ) - // --------------------------------------------------------------------------- - public static function local_dt($t) { + // ------------------------------------------------------------------------- + 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"); @@ -138,7 +108,8 @@ class JsonToForm // Part of string // UTF-8 SAFE - public static function str_part($str, $len) { + public static function str_part($str, $len) + { return (mb_strlen($str) > $len) ? mb_substr($str, 0, $len-1) ."…" : $str; } @@ -147,41 +118,46 @@ class JsonToForm * construct a form (html, javasctipt) * from a json designer * + * @param $formJson (Std Object): form descriptor + * @param $require_identity (array): array of properties and values; + * they identify the record; injected into form as hidden fields + * @param $source (array): array of [key => value] pairs, where ... + * `key`: the name of field, `value`: the default value of this field */ - public static function json_form($formJson, $require_identity = []) + public static function json_form($formJson, $require_identity = [], $source = []) { // $formJson = json_decode(json_encode($form)); - $default_outer = $formJson->defaults->outer_class ?? ''; - $default_inner = $formJson->defaults->inner_class ?? ''; - $default_type = $formJson->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; // 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 - // read fields options (json format) ///////////////////////////////////////// - // --------------------------------------------------------------------------- + // read fields options (json format) /////////////////////////////////// + // --------------------------------------------------------------------- - // Init strigns for JS generator (needed to handle everything) /////////////// - // --------------------------------------------------------------------------- + // 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) @@ -218,8 +194,8 @@ class JsonToForm } // 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 + $appendKey = in_array('append-key', $attributes) ? true : false; // append key (for selects) + $required = in_array('required', $attributes) ? 'required' : ''; // required $asterisk = in_array('required', $attributes) ? '*' : ''; // asterisk in label if required $html .= " @@ -399,359 +375,300 @@ class JsonToForm - /***** - // Script Workflow: - // --------------------------------------------------------------------------- - // 1. read fields options - // 2. generate HTML - // 3. generate JS needed +/*** + * 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 + * 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 + * 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 - // read fields options (json format) ///////////////////////////////////////// - // --------------------------------------------------------------------------- - $formJSON = file_get_contents('config/kallassa.json'); - $formARRAY = json_decode($formJSON); + * read fields options (json format) /////////////////////////////////////////// + * ----------------------------------------------------------------------------- + $formJSON = file_get_contents('config/kallassa.json'); + $formARRAY = json_decode($formJSON); - // 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) - */ - - - - /** document header - * - * - * - * - * - * - * - * - * - * <?=PROJECT?> : Εισαγωγή Εγγραφής - * - * - * - * - * - * - * - * - */ - - - /** form footer - * - *
- * - *
- *

Δεν έχουν συμπληρωθεί:

- *
- *
- * - *
- * - * - *
- * - * - * Γενικά:Συμπληρωματική Πληροφορία
'; - * } - * values.note = $('textarea[name=note]').val(); - * "; - * ?> - *
- * - *
- * - *
- *
- *
- */ - - - /** post-DOM-end + scripts - * - * - * - * - * - * - * - * - * - * - * - * - * - * - */ + * 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) +*/ + + + /** post-DOM-end + scripts + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ diff --git a/public/app/controllers/Office.php b/public/app/controllers/Office.php index 5e8af75..d0c10b9 100644 --- a/public/app/controllers/Office.php +++ b/public/app/controllers/Office.php @@ -144,8 +144,8 @@ class Office { switch ($petition_tag) { // route to specific type of petition - case 'common': - self::render_common_petition(['user' => $user]); + case 'application': + self::render_application_form(['user' => $user]); break; case 'penalty': @@ -160,18 +160,18 @@ class Office { } - private static function render_common_petition($opts) + private static function render_application_form($opts) { $user_id = $opts['user']->getID(); - $form_setup = json_decode(json_encode(COMMON_REQUEST_FORM, JSON_UNESCAPED_UNICODE)); + $form_setup = json_decode(json_encode(APPLICATION_FORM, JSON_UNESCAPED_UNICODE)); // get Form's HTML and Jsvascript $form = JsonToForm::json_form($form_setup, [ ['name' => 'user_id', 'value' => $user_id] // pass user identity ]); - Render::view('templates/common-form', ['form' => $form]); + Render::view('templates/application', ['form' => $form]); } private static function render_penalty_form($opts) -- cgit v1.2.3