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 --- docker-compose.yml | 3 +- public/app/config/setup_application.php | 53 +- public/app/controllers/JsonToForm.php | 749 +++++++++++++---------------- public/app/controllers/Office.php | 10 +- public/app/routes/frontend.php | 2 +- public/app/views/templates/application.php | 215 +++++++++ public/app/views/templates/common-form.php | 206 -------- public/assets/css/class.css | 4 + tests/obj.php | 9 + 9 files changed, 604 insertions(+), 647 deletions(-) create mode 100644 public/app/views/templates/application.php delete mode 100644 public/app/views/templates/common-form.php create mode 100644 tests/obj.php diff --git a/docker-compose.yml b/docker-compose.yml index e41843d..0ddccbb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,8 @@ services: build: context: . ports: - - "80:8080" + - "1415:8080" + # - "80:8080" volumes: - "./public:/var/www/public" - "./core:/var/www/core" diff --git a/public/app/config/setup_application.php b/public/app/config/setup_application.php index ec9a7bb..b87ffae 100644 --- a/public/app/config/setup_application.php +++ b/public/app/config/setup_application.php @@ -138,6 +138,9 @@ define ('PETITION_TYPE', [ + + + // the forms /////////////////////////////////////////////////////////////////// // ----------------------------------------------------------------------------- @@ -258,9 +261,9 @@ define('REGISTRATION_FORM', [ ] ]); -// common requesy form (for any application) +// Application (common request) form // --- -define('COMMON_REQUEST_FORM', [ +define('APPLICATION_FORM', [ 'defaults' => [ 'outer_class' => 'col-12', 'inner_class' => 'form-control', @@ -276,22 +279,37 @@ define('COMMON_REQUEST_FORM', [ [ 'name' => 'first_name', 'label' => 'Όνομα', + 'class' => 'col-5', 'attributes' => ['auto'] ], [ 'name' => 'last_name', 'label' => 'Επίθετο', + 'class' => 'col-7', 'attributes' => ['auto'] ], [ - 'name' => 'email', - 'label' => 'e-mail', - 'type' => 'email', + 'name' => 'father_name', + 'label' => 'Πατρώνυμο', + 'class' => 'col-5', 'attributes' => ['auto'] ], [ - 'name' => 'father_name', - 'label' => 'Πατρώνυμο', + 'label' => '', + 'type' => 'label', + 'class' => 'col-7', + ], + [ + 'name' => 'phone', + 'label' => 'Τηλέφωνο', + 'class' => 'col-5', + 'attributes' => ['required'] + ], + [ + 'name' => 'email', + 'label' => 'e-mail', + 'type' => 'email', + 'class' => 'col-7', 'attributes' => ['auto'] ], [ @@ -303,6 +321,7 @@ define('COMMON_REQUEST_FORM', [ [ 'name' => 'sector', 'label' => 'Κλάδος / Ειδικότητα', + 'class' => 'col-7', 'attributes' => ['auto'] ], [ @@ -315,29 +334,27 @@ define('COMMON_REQUEST_FORM', [ 'label' => 'Σχολείο εργασίας', 'attributes' => ['required'] ], + [ + 'name' => 'date', + 'label' => 'Ημερομηνία αίτησης', + 'type' => 'date', + 'class' => 'col-5', + 'attributes' => ['required'] + ], [ 'name' => 'position', 'label' => 'Θέση', 'type' => 'select', + 'class' => 'col-7', 'source' => 'positions', 'attributes' => ['required'] ], - [ - 'name' => 'phone', - 'label' => 'Τηλέφωνο', - 'attributes' => ['required'] - ], [ 'name' => 'request', 'label' => 'Αίτημα (πχ, Παρακαλώ να μου χορηγήσετε ...)', + 'class' => 'col-12 x7-lines', 'type' => 'textarea', 'attributes' => ['required'] - ], - [ - 'name' => 'date', - 'label' => 'Ημερομηνία αίτησης', - 'type' => 'date', - 'attributes' => ['required'] ] ] ]); 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) diff --git a/public/app/routes/frontend.php b/public/app/routes/frontend.php index f10f29d..47b1816 100644 --- a/public/app/routes/frontend.php +++ b/public/app/routes/frontend.php @@ -62,7 +62,7 @@ Route::add('/serve/file/([0-9a-zA-Z-_\.\/]*)', // serve file by path // Account -/////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// // [ok] login // [ok] register diff --git a/public/app/views/templates/application.php b/public/app/views/templates/application.php new file mode 100644 index 0000000..a6b2b6b --- /dev/null +++ b/public/app/views/templates/application.php @@ -0,0 +1,215 @@ + + + + + <?=SITE_TITLE?> - Αίτηση + + + + + + +
+
+ +
+
+
+ +

Αίτηση

+
+ + + +
+ + +
+
+
+ +
+

Synhmena

+
    +
  • uno
  • +
  • duo
  • +
  • tre
  • +
+
+ +
+
+ + + + + diff --git a/public/app/views/templates/common-form.php b/public/app/views/templates/common-form.php deleted file mode 100644 index 1ecc85d..0000000 --- a/public/app/views/templates/common-form.php +++ /dev/null @@ -1,206 +0,0 @@ - - - - - <?=SITE_TITLE?> - Αίτηση - - - - - - -
-
- -
-
-
- -

Αίτηση

-
- - - -
- - -
-
-
- -
-
- - - - - diff --git a/public/assets/css/class.css b/public/assets/css/class.css index 5333f29..201f13b 100644 --- a/public/assets/css/class.css +++ b/public/assets/css/class.css @@ -111,6 +111,10 @@ html, body { .central-form h4 { font-size: 1.24rem; } +.central-form .x3-lines textarea { height: 74; } +.central-form .x5-lines textarea { height: 124px; } +.central-form .x7-lines textarea { height: 156px; } + /* main layout classes * ---------------------------------------------------------------------------- diff --git a/tests/obj.php b/tests/obj.php new file mode 100644 index 0000000..8537381 --- /dev/null +++ b/tests/obj.php @@ -0,0 +1,9 @@ + [ + 'el' => 'mesa', + 'en' => 'inside' + ], + 'out' => 'exo' +]))); \ No newline at end of file -- cgit v1.2.3