summaryrefslogtreecommitdiff
path: root/public/app/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'public/app/controllers')
-rw-r--r--public/app/controllers/JsonToForm.php749
-rw-r--r--public/app/controllers/Office.php10
2 files changed, 338 insertions, 421 deletions
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
- *
- * <!DOCTYPE html>
- * <html prefix="og: http://ogp.me/ns#" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB" dir="ltr">
- * <head>
- * <!-- Metas + Title -->
- * <meta http-equiv="X-UA-Compatible" content="IE=edge">
- * <meta name="viewport" content="width=device-width, initial-scale=1">
- * <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- *
- * <title><?=PROJECT?> : Εισαγωγή Εγγραφής</title>
- *
- * <!-- CSS needed -->
- * <link href="https://fonts.googleapis.com/css?family=Ubuntu:400,700&display=swap" rel="stylesheet">
- * <link rel="stylesheet" href="/css/bootstrap.min.css" /><!-- v4.4.1 -->
- * <link rel="stylesheet" href="/css/select2.min.css" /><!-- v4.0.10 -->
- * <link rel="stylesheet" href="/css/pi.css" />
- * </head>
- * <body>
- */
-
-
- /** form footer
- * <!-- footer of form -->
- * <div class="row">
- *
- * <div class="col-md-4 line-right">
- * <h3>Δεν έχουν συμπληρωθεί:</h3>
- * <div id="empty-fields"></div>
- * </div>
- *
- * <div class="col-md-8">
- *
- * <!-- custom field -->
- * <div class="form-group">
- * <label for="more">Συμπληρωματική Πληροφορία</label>
- * <textarea name="note" class="form-control form-control-sm tall"></textarea>
- * <?php
- * // append js code
- * // for checking if field is empty
- * // and attaching value to json data
- * $checkFilledJS .= "
- * if ($('textarea[name=note]').val() =='') {
- * empty += '<span>Γενικά:</span>Συμπληρωματική Πληροφορία<br />';
- * }
- * values.note = $('textarea[name=note]').val();
- * ";
- * ?>
- * </div>
- *
- * <div class="form-group">
- * <input class="btn btn-primary" type="submit" value="Καταχώρηση Εγγραφής">
- * </div>
- * </div>
- * </div>
- */
-
-
- /** post-DOM-end + scripts
- *
- * </form>
- * </div>
- * <!-- DOM ENDS HERE -->
- *
- * <!-- scripts and libraries
- * load and register one by one, so you don't need to worry about if they are ready -->
- * <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
- * <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.4.1/jquery-migrate.min.js"></script>
- * <script src="/js/bootstrap.min.js"></script>
- * <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.full.min.js"></script>
- * <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/i18n/el.js"></script>
- * <script>
- * // NOW RUN EVERYTHING AFTER JQUERY (AND DOM ready)
- * // -----------------------------------------------------------------------------
- * ////////////////////////////////////////////////////////////////////////////////
- *
- * // 00. FLAGS and NEEDED FUNCTIONS
- * // ---------------------------------------------------------------------------
- * //////////////////////////////////////////////////////////////////////////////
- *
- * var waitingResponse = false; // flag for an ajax request that was sent and still waiting response
- *
- * // pure JS ajax GET request
- * // return data as JSON
- * // no fancy things like UTF8; if needed use base64 ---------------------------
- * function ajax_get(url, callback) {
- * var xmlhttp = new XMLHttpRequest();
- * xmlhttp.onreadystatechange = function() {
- * if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
- *
- * try {
- * var data = JSON.parse(xmlhttp.responseText);
- * } catch(err) {
- * console.log(err.message + ' in ' + xmlhttp.responseText);
- * return;
- * }
- * callback(data);
- * }
- * };
- *
- * xmlhttp.open("GET", url, true);
- * xmlhttp.send();
- * }
- *
- *
- * // 01. MENU MANAGEMENT
- * // ---------------------------------------------------------------------------
- * //////////////////////////////////////////////////////////////////////////////
- *
- * // menu management
- * // ---------------------------------------------------------------------------
- * $('.dropdown-item').on('click', function(e){
- * e.preventDefault();
- *
- * if (!waitingResponse) {
- * waitingResponse = true;
- *
- * var r = confirm('Δεν έχετε αποθηκεύσει το τρέχον αντικείμενο!\nΕίστε σίγουροι ότι θέλετε να εγκαταλείψετε τη σελίδα;');
- * if (r == true) {
- *
- * // all data-goto have the format: 'method,uri_address'
- * // uri_address is the url to call
- * // method options:
- * // * url : means goto url (redirect)
- * // * ajax : means call url via ajax; if 'success = true' then goto '/' after that
- * // -----------------------------------------------------------------------
- * var opt = $(this).data('goto').split(','); // split data-goto
- *
- * if (opt[0] == 'url') { // if method = url
- * window.location.href = opt[1];
- * }
- * else { // else, method = ajax
- * ajax_get(opt[1], function(response) {
- * if (response.success) {
- * window.location.href = '/';
- * }
- * });
- * }
- *
- * }
- * else {
- * // user did not confirmed the selection; do nothing
- * }
- *
- * waitingResponse = false;
- * }
- *
- * });
- *
- * // 02. USER INTERFACE
- * // ---------------------------------------------------------------------------
- * //////////////////////////////////////////////////////////////////////////////
- *
- * // tabs to accorderon --------------------------------------------------------
- * //////////////////////////////////////////////////////////////////////////////
- *
- * // FUNCTION: Set tabsContainer height
- * // acording to which tab is visible
- * // and tab mode (tabs|acordeon)
- * // ---------------------------------------------------------------------------
- * function set_tabsContainer_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();
- *
- * $('#tabsContainer').height(ch_ + tc_base);
- *
- * }
- * set_tabsContainer_height(); // init (run for 1st time)
- *
- * // on tab selection
- * // calculate tabsContainer height
- * $('input:radio[name="tabs"]').change( function(){
- * set_tabsContainer_height()
- * });
- *
- * // on window change
- * // set tabsContainer height
- * $( window ).resize(function() {
- * set_tabsContainer_height();
- * });
- *
- *
- *
- * // 03. form-control form-control-smS
- * // ---------------------------------------------------------------------------
- * //////////////////////////////////////////////////////////////////////////////
- *
- * // Select2 controls
- * //////////////////////////////////////////////////////////////////////////////
- *
- * // FUNCTION: Get selected value(s) of Select2 control
- * // pass arg: source-element
- * // return: value(s) comma-separated
- * // ---------------------------------------------------------------------------
- * function getValues(srcElm) {
- * var res;
- * var obj = srcElm.select2('data'); // get delected data array
- *
- * 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
- *
- * 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;
- * }
- *
- * // patch select2-multiple widths
- * // ---------------------------------------------------------------------------
- * $('.select-field').select2({ width: '100%' });
- *
- * // init select2 fields
- * // (embed from php)
- * // ---------------------------------------------------------------------------
- * <?=$initSelectsJS?>
- *
- *
- * // 04. FORM-LOGIC
- * // ---------------------------------------------------------------------------
- * //////////////////////////////////////////////////////////////////////////////
- *
- * // FUNCTION: Report empty fields
- * // ---------------------------------------------------------------------------
- * function reportEmpty() {
- * var empty = '';
- * var needit = [];
- * var values = {};
- *
- * // embed if-conditions from php
- * <?=$checkFilledJS?>
- *
- * $("#empty-fields").html(empty); // render empty fields
- *
- * // console.log(JSON.stringify(values));
- *
- * return { need : needit, data: values }; // return all fields
- * }
- * reportEmpty();
- *
- * $('form').on('keyup change paste', 'input, select, textarea', function(){
- * console.log('Form changed!');
- * reportEmpty();
- * });
- *
- * // validation?
- * // check: https://www.sitepoint.com/instant-validation/
- *
- *
- * $('#post-form').on('submit', function(e){
- * e.preventDefault();
- * if (!waitingResponse) {
- * waitingResponse = true;
- * var resp = reportEmpty();
- *
- * if (resp.need.length > 0) alert("Tα πεδία:\n\n" + resp.need.join(',\n') + "\n\nείναι υποχρεωτικά!");
- * else {
- * // alert('sending: '+JSON.stringify(resp.data));
- * var postUrl = "/ajax.php?do=additem"; // url to post form
- * var data2send = resp.data; // parse data to send
- *
- * $.ajax({
- * type: 'POST',
- * url: postUrl, // make sure you respect the same origin policy with this url
- * data: data2send,
- * dataType: "text",
- *
- * success: function(data) { // server replies
- * var json = $.parseJSON(data);
- * if (json.success == true) { // good! post accepted
- * // alert(json.id)
- * window.location.href = '/ui-show-item.php?id='+ json.id;
- * }
- * else {
- * alert("Post not accepted.\nPlease check the data you submit.");
- * // $('#oc-company-form')[0].reset();
- * }
- * },
- *
- * error: function() {
- * alert('Some ajax error! :(');
- * }
- * });
- * }
- *
- * waitingResponse = false;
- * }
- *
- * });
- *
- * <?php
- * // bibliography and References
- * //
- * // WHICH JQUERY:
- * // read: https://jquery.com/download/
- * //
- * // SELECT2
- * // https://stackoverflow.com/questions/12889309/get-selected-value-from-multi-value-select-boxes-by-jquery-select2
- * //
- * // tests:
- * // https://jsfiddle.net/3nd1gL8o/1/
- * // https://jsfiddle.net/3nd1gL8o/5/
- * //
- * // EXAMPLE with ALL CASES NEEDed:
- * // https://jsfiddle.net/v684h0g2/2/
- * ?>
- * </script>
- * </body>
- * </html>
- */
+ * 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
+ *
+ * </form>
+ * </div>
+ * <!-- DOM ENDS HERE -->
+ *
+ * <!-- scripts and libraries
+ * load and register one by one, so you don't need to worry about if they are ready -->
+ * <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
+ * <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.4.1/jquery-migrate.min.js"></script>
+ * <script src="/js/bootstrap.min.js"></script>
+ * <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.full.min.js"></script>
+ * <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/i18n/el.js"></script>
+ * <script>
+ * // NOW RUN EVERYTHING AFTER JQUERY (AND DOM ready)
+ * // -----------------------------------------------------------------------------
+ * ////////////////////////////////////////////////////////////////////////////////
+ *
+ * // 00. FLAGS and NEEDED FUNCTIONS
+ * // ---------------------------------------------------------------------------
+ * //////////////////////////////////////////////////////////////////////////////
+ *
+ * var waitingResponse = false; // flag for an ajax request that was sent and still waiting response
+ *
+ * // pure JS ajax GET request
+ * // return data as JSON
+ * // no fancy things like UTF8; if needed use base64 ---------------------------
+ * function ajax_get(url, callback) {
+ * var xmlhttp = new XMLHttpRequest();
+ * xmlhttp.onreadystatechange = function() {
+ * if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
+ *
+ * try {
+ * var data = JSON.parse(xmlhttp.responseText);
+ * } catch(err) {
+ * console.log(err.message + ' in ' + xmlhttp.responseText);
+ * return;
+ * }
+ * callback(data);
+ * }
+ * };
+ *
+ * xmlhttp.open("GET", url, true);
+ * xmlhttp.send();
+ * }
+ *
+ *
+ * // 01. MENU MANAGEMENT
+ * // ---------------------------------------------------------------------------
+ * //////////////////////////////////////////////////////////////////////////////
+ *
+ * // menu management
+ * // ---------------------------------------------------------------------------
+ * $('.dropdown-item').on('click', function(e){
+ * e.preventDefault();
+ *
+ * if (!waitingResponse) {
+ * waitingResponse = true;
+ *
+ * var r = confirm('Δεν έχετε αποθηκεύσει το αντικείμενο!\nΘέλετε σίγουρα να εγκαταλείψετε τη σελίδα;');
+ * if (r == true) {
+ *
+ * // all data-goto have the format: 'method,uri_address'
+ * // uri_address is the url to call
+ * // method options:
+ * // * url : means goto url (redirect)
+ * // * ajax : means call url via ajax; if 'success = true' then goto '/' after that
+ * // -----------------------------------------------------------------------
+ * var opt = $(this).data('goto').split(','); // split data-goto
+ *
+ * if (opt[0] == 'url') { // if method = url
+ * window.location.href = opt[1];
+ * }
+ * else { // else, method = ajax
+ * ajax_get(opt[1], function(response) {
+ * if (response.success) {
+ * window.location.href = '/';
+ * }
+ * });
+ * }
+ *
+ * }
+ * else {
+ * // user did not confirmed the selection; do nothing
+ * }
+ *
+ * waitingResponse = false;
+ * }
+ *
+ * });
+ *
+ * // 02. USER INTERFACE
+ * // ---------------------------------------------------------------------------
+ * //////////////////////////////////////////////////////////////////////////////
+ *
+ * // tabs to accorderon --------------------------------------------------------
+ * //////////////////////////////////////////////////////////////////////////////
+ *
+ * // FUNCTION: Set tabsContainer height
+ * // acording to which tab is visible
+ * // and tab mode (tabs|acordeon)
+ * // ---------------------------------------------------------------------------
+ * function set_tabsContainer_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();
+ *
+ * $('#tabsContainer').height(ch_ + tc_base);
+ *
+ * }
+ * set_tabsContainer_height(); // init (run for 1st time)
+ *
+ * // on tab selection
+ * // calculate tabsContainer height
+ * $('input:radio[name="tabs"]').change( function(){
+ * set_tabsContainer_height()
+ * });
+ *
+ * // on window change
+ * // set tabsContainer height
+ * $( window ).resize(function() {
+ * set_tabsContainer_height();
+ * });
+ *
+ *
+ *
+ * // 03. form-control form-control-smS
+ * // ---------------------------------------------------------------------------
+ * //////////////////////////////////////////////////////////////////////////////
+ *
+ * // Select2 controls
+ * //////////////////////////////////////////////////////////////////////////////
+ *
+ * // FUNCTION: Get selected value(s) of Select2 control
+ * // pass arg: source-element
+ * // return: value(s) comma-separated
+ * // ---------------------------------------------------------------------------
+ * function getValues(srcElm) {
+ * var res;
+ * var obj = srcElm.select2('data'); // get delected data array
+ *
+ * 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
+ *
+ * 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;
+ * }
+ *
+ * // patch select2-multiple widths
+ * // ---------------------------------------------------------------------------
+ * $('.select-field').select2({ width: '100%' });
+ *
+ * // init select2 fields
+ * // (embed from php)
+ * // ---------------------------------------------------------------------------
+ * <?=$initSelectsJS?>
+ *
+ *
+ * // 04. FORM-LOGIC
+ * // ---------------------------------------------------------------------------
+ * //////////////////////////////////////////////////////////////////////////////
+ *
+ * // FUNCTION: Report empty fields
+ * // ---------------------------------------------------------------------------
+ * function reportEmpty() {
+ * var empty = '';
+ * var needit = [];
+ * var values = {};
+ *
+ * // embed if-conditions from php
+ * <?=$checkFilledJS?>
+ *
+ * $("#empty-fields").html(empty); // render empty fields
+ *
+ * // console.log(JSON.stringify(values));
+ *
+ * return { need : needit, data: values }; // return all fields
+ * }
+ * reportEmpty();
+ *
+ * $('form').on('keyup change paste', 'input, select, textarea', function(){
+ * console.log('Form changed!');
+ * reportEmpty();
+ * });
+ *
+ * // validation?
+ * // check: https://www.sitepoint.com/instant-validation/
+ *
+ *
+ * $('#post-form').on('submit', function(e){
+ * e.preventDefault();
+ * if (!waitingResponse) {
+ * waitingResponse = true;
+ * var resp = reportEmpty();
+ *
+ * if (resp.need.length > 0) alert("Tα πεδία:\n\n" + resp.need.join(',\n') + "\n\nείναι υποχρεωτικά!");
+ * else {
+ * // alert('sending: '+JSON.stringify(resp.data));
+ * var postUrl = "/ajax.php?do=additem"; // url to post form
+ * var data2send = resp.data; // parse data to send
+ *
+ * $.ajax({
+ * type: 'POST',
+ * url: postUrl, // make sure you respect the same origin policy with this url
+ * data: data2send,
+ * dataType: "text",
+ *
+ * success: function(data) { // server replies
+ * var json = $.parseJSON(data);
+ * if (json.success == true) { // good! post accepted
+ * // alert(json.id)
+ * window.location.href = '/ui-show-item.php?id='+ json.id;
+ * }
+ * else {
+ * alert("Post not accepted.\nPlease check the data you submit.");
+ * // $('#oc-company-form')[0].reset();
+ * }
+ * },
+ *
+ * error: function() {
+ * alert('Some ajax error! :(');
+ * }
+ * });
+ * }
+ *
+ * waitingResponse = false;
+ * }
+ *
+ * });
+ *
+ * <?php
+ * // bibliography and References
+ * //
+ * // WHICH JQUERY:
+ * // read: https://jquery.com/download/
+ * //
+ * // SELECT2
+ * // https://stackoverflow.com/questions/12889309/get-selected-value-from-multi-value-select-boxes-by-jquery-select2
+ * //
+ * // tests:
+ * // https://jsfiddle.net/3nd1gL8o/1/
+ * // https://jsfiddle.net/3nd1gL8o/5/
+ * //
+ * // EXAMPLE with ALL CASES NEEDed:
+ * // https://jsfiddle.net/v684h0g2/2/
+ * ?>
+ * </script>
+ * </body>
+ * </html>
+ */
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)