389 lines
13 KiB
PHP
389 lines
13 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Genera una porzione di codice html a partire da una stringa nei seguenti formati:
|
|
* campo <input> generico:
|
|
* {[ "type": "text", "required": 1, "class": "", "value": "$idintervento$", "extra": "" ]}
|
|
*
|
|
* campo di testo normale e non modificabile
|
|
* {[ "type": "span", "value": "$testo$" ]}
|
|
*
|
|
* <select>
|
|
* {[ "type": "select", "required": 1, "class": "", "values": "query='SELECT id, descrizione FROM co_contratti WHERE idanagrafica=$idanagrafica$"', "value": "$idcontratto$", "extra": "" ]}
|
|
*
|
|
* Il parametro $records contiene il risultato della query di selezione record per fare i vari replace delle variabili racchiuse tra $$ nel template
|
|
*/
|
|
function build_html_element($str) {
|
|
global $dbo;
|
|
global $docroot;
|
|
global $records;
|
|
global $modules_info;
|
|
global $id_record;
|
|
|
|
preg_match('"value(.+?)\] \}"', $str, $script_value);
|
|
if(count($script_value) != 0) {
|
|
$script_value = $script_value[0];
|
|
$str = str_replace($script_value, 'value": "', $str);
|
|
}
|
|
else unset($script_value);
|
|
|
|
$str = str_replace("{[", "{", $str);
|
|
$str = str_replace("]}", "}", $str);
|
|
|
|
$json = json_decode($str, true);
|
|
|
|
// Conversione variabili con campi di database
|
|
foreach ($json as $name => $value) {
|
|
if ($value == "") unset($json[$name]);
|
|
// Sostituzione delle variabili $nome$ col relativo valore da database
|
|
else if (preg_match_all('/\$([a-z0-9\_]+)\$/i', $json[$name], $m)) {
|
|
for($i = 0; $i < sizeof($m[0]); $i ++) {
|
|
$json[$name] = str_replace($m[0][$i], $records[0][$m[1][$i]], $json[$name]);
|
|
}
|
|
}
|
|
}
|
|
|
|
$attributi = array();
|
|
array_push($attributi, "class");
|
|
|
|
$valori = array();
|
|
$valori["class"] = array();
|
|
array_push($valori["class"], "form-control");
|
|
|
|
if(isset($json["class"]) && $json["class"] != ""){
|
|
$classes = explode(" ", $json["class"]);
|
|
foreach ($classes as $class) {
|
|
if ($class != "") array_push($valori["class"], $class);
|
|
}
|
|
}
|
|
|
|
// Attributi particolari
|
|
if (isset($json['disabled']) && $json['disabled'] == 1) array_push($attributi, "disabled");
|
|
if (isset($json['readonly']) && $json['readonly'] == 1) array_push($attributi, "readonly");
|
|
if (isset($json['required']) && $json['required'] == 1) array_push($attributi, "required");
|
|
if (isset($json['maxlength']) && $json['maxlength'] != '') {
|
|
array_push($attributi, "maxlength");
|
|
$valori["maxlength"] = $json['maxlength'];
|
|
}
|
|
|
|
$value = (isset($json['value'])) ? $json['value'] : "";
|
|
$element_id = (isset($json['id']) && $json['id'] != '') ? $json['id'] : str_replace(array("[","]"), "", $json['name']);
|
|
|
|
// Rimuove caratteri indesiderati relativi al nome
|
|
array_push($attributi, 'id');
|
|
$valori["id"] = $element_id;
|
|
array_push($attributi, 'name');
|
|
$valori["name"] = $json['name'];
|
|
|
|
// Label
|
|
if (in_array("required", $attributi)) $json['label'] .= "*";
|
|
|
|
$html = '
|
|
<div class="form-group">';
|
|
|
|
if (! isset($json['no-label']) || $json['no-label'] == 0){
|
|
$html .= '
|
|
<label for="' . $element_id . '">';
|
|
if(isset($json['help']) && $json['help'] != "") $html .= '<span class="tip" title="'.$json['help'].'">';
|
|
$html .= $json['label'];
|
|
if(isset($json['help']) && $json['help'] != "") $html .= '</span>';
|
|
$html .= '</label>';
|
|
}
|
|
|
|
if (isset($json['icon-before']) || isset($json['icon-after'])) $html .= '
|
|
<div class="input-group">';
|
|
|
|
if (isset($json['icon-before'])) $html .= '
|
|
<span class="input-group-addon">' . $json['icon-before'] . '</span>';
|
|
|
|
switch ($json['type']) {
|
|
case 'text' :
|
|
case 'date' :
|
|
case 'password' :
|
|
if ($json['type'] == 'date') {
|
|
array_push($attributi, "data-inputmask");
|
|
$valori["data-inputmask"] = "'alias': 'dd/mm/yyyy'";
|
|
array_push($valori["class"], "datepicker");
|
|
|
|
if ($value == "0000-00-00 00:00:00" || $value == "0000-00-00") $value = "";
|
|
else $value = date("d/m/Y", strtotime($value));
|
|
|
|
if ($value == "01/01/1970") $value = "";
|
|
}
|
|
|
|
$tipo = ($json['type'] == 'password') ? $json['type'] : $tipo = 'text';
|
|
array_push($attributi, 'type');
|
|
$valori["type"] = $tipo;
|
|
|
|
$html .= '
|
|
<input |attr|>';
|
|
break;
|
|
|
|
case 'select' :
|
|
$values = isset($json['values']) ? $json['values'] : "";
|
|
|
|
if (isset($json['multiple']) && $json['multiple'] == 1) array_push($attributi, "multiple");
|
|
|
|
if (isset($json['ajax-source']) && $json['ajax-source'] != "") {
|
|
array_push($valori["class"], "superselectajax");
|
|
array_push($attributi, "data-source");
|
|
$valori["data-source"] = $json['ajax-source'];
|
|
}
|
|
else
|
|
array_push($valori["class"], "superselect");
|
|
|
|
$placeholder = isset($json['placeholder']) ? $json['placeholder'] : "- Seleziona un'opzione -";
|
|
if (strpos($value, "Seleziona") !== false) {
|
|
$placeholder = $value;
|
|
$value = "";
|
|
}
|
|
|
|
$html .= '
|
|
<select |attr|>';
|
|
|
|
if (isset($json['ajax-source']) && $json['ajax-source'] != "" && $value != "") {
|
|
$id_elemento = $value;
|
|
$op = $json['ajax-source'];
|
|
|
|
ob_start();
|
|
include ($docroot . "/ajax_select2.php");
|
|
$text = ob_get_clean();
|
|
|
|
//Per debug, abilitare
|
|
//echo $text;
|
|
|
|
$array = json_decode($text);
|
|
|
|
unset($id_elemento);
|
|
unset($op);
|
|
|
|
foreach ($array as $el) {
|
|
$el = ( array ) $el;
|
|
if (isset($el['children'])) {
|
|
foreach ($el['children'] as $child) {
|
|
$child = ( array ) $child;
|
|
|
|
$sub_attr = array();
|
|
if (in_array($child['id'], explode(',', $value)) || ($child['id'] == $value)) array_push($sub_attr, 'selected="true"');
|
|
if ($child['_bgcolor_'] != '') array_push($sub_attr, 'style="background:' . $child['_bgcolor_'] . '; color:' . color_inverse($child['_bgcolor_']) . ';"');
|
|
|
|
// Leggo ulteriori campi oltre a id e descrizione per inserirli nell'option nella forma "data-nomecampo1", "data-nomecampo2", ecc
|
|
foreach ($child as $k => $v) {
|
|
if ($k != 'id' && $k != 'text') array_push($sub_attr, 'data-' . $k . '="' . $v . '"');
|
|
}
|
|
|
|
$html .= '
|
|
<option value="' . $child['id'] . '" ' . implode(" ", $sub_attr) . '>' . $child['text'] . '</option>';
|
|
}
|
|
}
|
|
else {
|
|
|
|
$sub_attr = array();
|
|
if (in_array($el['id'], explode(',', $value)) || ($el['id'] == $value)) array_push($sub_attr, 'selected="true"');
|
|
if ($el['_bgcolor_'] != '') array_push($sub_attr, 'style="background:' . $el['_bgcolor_'] . '; color:' . color_inverse($el['_bgcolor_']) . ';"');
|
|
|
|
// Leggo ulteriori campi oltre a id e descrizione per inserirli nell'option nella forma "data-nomecampo1", "data-nomecampo2", ecc
|
|
foreach ($el as $k => $v) {
|
|
if ($k != 'id' && $k != 'text') array_push($sub_attr, 'data-' . $k . '="' . $v . '"');
|
|
}
|
|
|
|
$html .= '
|
|
<option value="' . $el['id'] . '" ' . implode(" ", $sub_attr) . '>' . $el['text'] . '</option>';
|
|
}
|
|
}
|
|
}
|
|
// Generazione <select> da query
|
|
else if (preg_match_all("/^query=(.+?)$/", $values, $m)) {
|
|
$q = $m[1][0];
|
|
$q = str_replace("<?php echo ", "\".", $q);
|
|
$q = str_replace("; ?>", ".\"", $q);
|
|
$q = str_replace("?>", ".\"", $q);
|
|
eval("\$query = \"" . $q . "\";");
|
|
$rs = $dbo->fetchArray($query);
|
|
|
|
if (!isset($json['multiple']) || ! $json['multiple']) {
|
|
$html .= '
|
|
<option></option>';
|
|
}
|
|
|
|
// se non presente, carica eventuale valore predefinito
|
|
if (($value == "0" || $value == "") && isset($json['valore_predefinito']) && $json['valore_predefinito'] != "") $value = get_var($json['valore_predefinito']);
|
|
|
|
$prev = "";
|
|
for($i = 0; $i < sizeof($rs); $i ++) {
|
|
if (isset($rs[$i]["optgroup"])) {
|
|
if ($prev != $rs[$i]["optgroup"]) {
|
|
$html .= '
|
|
<optgroup label="' . $rs[$i]["optgroup"] . '"></optgroup>';
|
|
$prev = $rs[$i]["optgroup"];
|
|
}
|
|
$rs[$i]['descrizione'] = " " . $rs[$i]['descrizione'];
|
|
}
|
|
$sub_attr = array();
|
|
if (in_array($rs[$i]['id'], explode(',', $value)) || ($rs[$i]['id'] == $value)) array_push($sub_attr, 'selected="true"');
|
|
if (isset($rs[$i]['_bgcolor_']) && $rs[$i]['_bgcolor_'] != '') array_push($sub_attr, 'style="background:' . $rs[$i]['_bgcolor_'] . '; color:' . color_inverse($rs[$i]['_bgcolor_']) . ';"');
|
|
|
|
// Leggo ulteriori campi oltre a id e descrizione per inserirli nell'option nella forma "data-nomecampo1", "data-nomecampo2", ecc
|
|
foreach ($rs[$i] as $k => $v) {
|
|
if ($k != 'id' && $k != 'descrizione' && $k != 'optgroup') array_push($sub_attr, 'data-' . $k . '="' . $v . '"');
|
|
}
|
|
|
|
$html .= '
|
|
<option value="' . $rs[$i]['id'] . '" ' . implode(" ", $sub_attr) . '>' . $rs[$i]['descrizione'] . '</option>';
|
|
}
|
|
}
|
|
|
|
// Generazione <select> da JSON
|
|
// esempio creazione select con opzioni: Maschio, Femmina, Unisex
|
|
// {[ "type": "select", "label": "Sesso", "name": "sesso", "required": 0, "class": "", "values": "list=\"\": \"\", \"M\": \"Maschio\", \"F\": \"Femmina\", \"U\": \"Unisex\"", "value": "$sesso$", "extra": "" ]}
|
|
else if (preg_match_all("/^list=(.+?)$/", $values, $m)) {
|
|
$data = json_decode("{" . $m[1][0] . "}");
|
|
foreach ($data as $id => $etichetta) {
|
|
$sub_attr = array();
|
|
if ($id == $value) array_push($sub_attr, 'selected="true"');
|
|
$html .= '
|
|
<option value="' . $id . '" ' . implode(" ", $sub_attr) . '>' . $etichetta . '</option>';
|
|
}
|
|
}
|
|
|
|
array_push($attributi, "data-placeholder");
|
|
$valori["data-placeholder"] = $placeholder;
|
|
|
|
$html .= '
|
|
</select>';
|
|
|
|
if (in_array("disabled", $attributi) || in_array("readonly", $attributi)) $html .= '
|
|
<script>$("#' . $element_id . '").prop("disabled", true);</script>';
|
|
|
|
if (in_array("readonly", $attributi)) {
|
|
$html .= '
|
|
<select class="hide" name="' . $json['name'] . '"';
|
|
if (in_array("multiple", $attributi)) $html .= ' multiple';
|
|
$html .= '>';
|
|
|
|
$val = explode(",", $value);
|
|
foreach ($val as $v) {
|
|
$html .= '
|
|
<option value="' . $v . '" selected="true"></option>';
|
|
}
|
|
|
|
$html .= '
|
|
</select>';
|
|
}
|
|
|
|
break;
|
|
|
|
case 'textarea' :
|
|
$html .= '
|
|
<textarea |attr|>' . $value . '</textarea>';
|
|
unset($value);
|
|
break;
|
|
|
|
case 'checkbox' :
|
|
if ($value == 1) {
|
|
array_push($attributi, "checked");
|
|
$valori["checked"] = "true";
|
|
$value = "on";
|
|
}
|
|
|
|
if (in_array("readonly", $attributi)) array_push($attributi, "disabled");
|
|
|
|
array_push($attributi, 'type');
|
|
$valori["type"] = "checkbox";
|
|
|
|
$placeholder = (isset($json["placeholder"])) ? $json["placeholder"] : $json["label"];
|
|
|
|
$html .= '
|
|
<div class="input-group">
|
|
<span class="input-group-addon">
|
|
<input |attr|>';
|
|
if (in_array("readonly", $attributi)) $html .= '
|
|
<input type="hidden" name="' . $json['name'] . '" value="' . $value . '">';
|
|
$html .= '
|
|
</span>
|
|
<input type="text" class="form-control" placeholder="' . $placeholder . '" disabled>
|
|
</div>';
|
|
|
|
unset($valori["class"][0]);
|
|
unset($value);
|
|
|
|
break;
|
|
|
|
case 'image' :
|
|
unset($valori["class"][0]);
|
|
// Form upload
|
|
if ($value == '') {
|
|
array_push($attributi, 'type');
|
|
$valori["type"] = "file";
|
|
$html .= '
|
|
<input |attr|>';
|
|
}
|
|
// Visualizzazione immagine e spunta per cancellazione
|
|
else {
|
|
array_push($valori["class"], "img-thumbnail");
|
|
array_push($valori["class"], "img-responsive");
|
|
$html .= '
|
|
<img src="' . $json['value'] . '" class="' . implode(" ", $valori["class"]) . '" id="img_' . $element_id . '" ' . $attr . ' ' . $json['extra'] . '><br>
|
|
<label>
|
|
<input type="checkbox" onclick="if( $(this).is(\':checked\') ){ $(\'#' . $element_id . '\').val(\'deleteme\'); }else{ $(\'#' . $element_id . '\').val( $(\'#prev_' . $element_id . '\').val() ); }">
|
|
' . _("Elimina") . '
|
|
</label>
|
|
<input type="hidden" name="' . $json['name'] . '" value="' . $json['value'] . '" id="' . $element_id . '">
|
|
<input type="hidden" name="prev_' . $json['name'] . '" value="' . $json['value'] . '" id="prev_' . $element_id . '">';
|
|
}
|
|
|
|
unset($value);
|
|
|
|
break;
|
|
|
|
default :
|
|
$html .= " <span |attr|>" . $value . "</span>\n";
|
|
break;
|
|
}
|
|
|
|
if (isset($json['icon-after'])) {
|
|
$html .= '
|
|
<span class="input-group-addon';
|
|
if (strpos("<button", $json['icon-after']) == 0) $html .= ' no-padding';
|
|
$html .= '">' . $json['icon-after'] . '</span>';
|
|
}
|
|
|
|
if (isset($json['icon-before']) || isset($json['icon-after'])) {
|
|
$html .= '
|
|
</div>';
|
|
}
|
|
|
|
$html .= '
|
|
</div>';
|
|
|
|
if(isset($script_value) && $script_value != ""){
|
|
$html .= '
|
|
<script>
|
|
$("#'.$element_id.'").val("'.addslashes($script_value).'");
|
|
</script>';
|
|
}
|
|
|
|
if (isset($json['extra'])) array_push($attributi, trim($json['extra']));
|
|
|
|
if (isset($value)) {
|
|
array_push($attributi, 'value');
|
|
$valori["value"] = $value;
|
|
}
|
|
|
|
$result = array();
|
|
foreach ($attributi as $attributo) {
|
|
$valore = $attributo;
|
|
if (isset($valori[$attributo]) && $valori[$attributo] != "") {
|
|
if (is_array($valori[$attributo])) $valore .= '="' . implode(" ", $valori[$attributo]) . '"';
|
|
else $valore .= '="' . $valori[$attributo] . '"';
|
|
}
|
|
array_push($result, $valore);
|
|
}
|
|
|
|
$html = str_replace("|attr|", implode(" ", $result), $html);
|
|
|
|
return $html;
|
|
}
|
|
?>
|
|
|