$section) {
foreach ($section->childs as $kk => $field) {
// find the field
if ($field->nam == $fkey) {
$values = array(); // human readble values if select (comma separated)
if ($field->typ == 'select') {
$multi = true;
if ($inp !='') {
$codes = explode(",", $inp); // split coded values
foreach ($field->opt as $kkk => $v) {
if (in_array($v->id, $codes)) { // check if option is in array
$values[] = ($field->nam == 'ccode') ? ($v->id.": ".$v->tag) : $v->tag;
}
}
}
}
else $multi = false;
// return everything in an array
return array(
'label' => $field->lab,
'multi' => $multi,
'value' => ($multi ? $values : $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);
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();
}
$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 ////////////////////////////////////////////////////
// (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;
}
/** json_form
*
* construct a form (html, javasctipt)
* from a json designer
*
*/
public static function json_form($formJson, $require_identity = [])
{
// $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_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) /////////////////////////////////////////
// ---------------------------------------------------------------------------
// 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)
$identity = ""; // construct required identity hidden fields
foreach ($require_identity as $group) {
$identity .= "
";
}
// now constuct the form body
$html = "{$identity}
";
foreach ($formJson->form as $key => $field) {
$attributes = $field->attributes ?? []; // attributes array
$type = $field->type ?? $default_type;
$class = $field->class ?? "";
$label = $field->label;
$name = $field->name ?? $field->label;
// handle value assignment
if (isset($field->value)) { // if value property is set
$set_value = true; // (flag: value seted)
$value = (($field->value == 'auto') && isset($default_values->$name))
? $default_values->$name // set auto value
: $field->value; // or other set-value
} else {
$set_value = false;
}
// 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
$asterisk = in_array('required', $attributes) ? '*' : ''; // asterisk in label if required
$html .= "
";
switch ($type) {
case 'select':
if (in_array('multiple', $attributes)) { // if select is multiple
$html .="
',
'init_js' => $initSelectsJS,
'values_js' => $checkFilledJS
];
}
}
/*****
// 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) /////////////////////////////////////////
// ---------------------------------------------------------------------------
$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
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/