gest366/modules/my_impianti/plugins/my_impianti.componenti.php

448 lines
16 KiB
PHP
Raw Permalink Normal View History

2021-02-24 20:40:04 +00:00
<?php
include_once(__DIR__."/../../../core.php");
switch( $html->form('op') ){
case "updatecomponente":
$idcomponente = save( $_GET['id'] );
$matricola = $id_record;
$data = savedate( $_POST['data'] );
$post_array = array();
foreach( $_POST as $impostazione_post=>$valore_impostazione_post ){
//Creo l'array con tutti i valori passati dal POST
$impostazione_post = str_replace( "_", " ", $impostazione_post);
$impostazione_post = htmlentities( $impostazione_post, ENT_QUOTES, "UTF-8" );
$post_array[$impostazione_post] = save ($valore_impostazione_post);
}
$nome = $post_array['Nome'];
// mi ricavo il valore di contenuto leggendolo dal db
$query = "SELECT * FROM my_impianto_componenti WHERE idimpianto=\"$matricola\" AND id=\"$idcomponente\" ";
$rs = $dbo->fetchArray( $query );
$contenuto = $rs[0]['contenuto'];
$contenuto = read( $contenuto );
//Converto 'contenuto' di questo componente in un array
$ini_array = parse_ini_string( $contenuto, true );
//Creo variabile contenuto temporaneo
$contenuto_tmp = array();
//Resetto il valore di contenuto
$contenuto = '';
//Per ogni sezione dell'array estratto dal file ini
foreach ($ini_array as $sezione => $array_impostazioni){
$sezione = str_replace( "\r\n", "\n", $sezione );
$sezione = str_replace( "\n", "<br/>", $sezione );
$contenuto .= "[&quot;".$sezione."&quot;]\n";
//Per ogni impostazione
foreach ($array_impostazioni as $impostazione => $valore_impostazione){
//Quando trovo l'impostazione 'valore' la sostituisco con il valore passato dal post
if ($impostazione=='valore'){
$da = array($impostazione => $valore_impostazione);
$a = array($impostazione => $post_array[$sezione]);
$contenuto_tmp = array_replace($ini_array[$sezione], $da, $a);
foreach ($contenuto_tmp as $impostazione_tmp => $valore_impostazione_tmp){
$valore = $valore_impostazione_tmp;
$valore = str_replace( "\r\n", "\n", $valore );
$valore = str_replace( "\n", "<br/>", $valore );
$contenuto .= save($impostazione_tmp)." = &quot;".save($valore)."&quot;\n";
}
}
}
}
$query = "UPDATE my_impianto_componenti SET data=\"".$data."\", contenuto=\"".$contenuto."\" WHERE idimpianto=\"$matricola\" AND id=\"$idcomponente\" ";
$dbo->query( $query );
array_push( $_SESSION['infos'], "Informazioni componente aggiornate correttamente!" );
$_SESSION['id'] = $idcomponente;
break;
case "linkcomponente":
if($_GET['filename'] != "0"){
$filename = save( $_GET['filename'] );
$matricola = $id_record;
$contenuto = file_get_contents($docroot."/files/my_impianti/".$filename);
$contenuto = str_replace( ".", " ", $contenuto );
$values = parse_ini_string( $contenuto, true );
$nome = mb_convert_encoding( $values['Nome']['valore'], "iso-8859-1", "utf-8" );
$query = "INSERT INTO my_impianto_componenti( filename, idimpianto, contenuto, nome, data ) VALUES( \"$filename\", \"$matricola\", \"".save( $contenuto )."\", \"$nome\", NOW() )";
$dbo->query( $query );
$idcomponente = $dbo->last_inserted_id();
array_push( $_SESSION['infos'], "Aggiunto un nuovo componente all'impianto!" );
redirect($rootdir."/editor.php?id_module=".$id_module."&id_record=".$id_record."&id=".$idcomponente."#tab_3");
}
break;
case "sostituiscicomponente":
$filename = save( $_GET['filename'] );
$matricola = $id_record;
$id = save( $_GET['id'] );
$contenuto = file_get_contents($docroot."/files/my_impianti/".$filename);
$contenuto = str_replace( ".", " ", $contenuto );
$contenuto = mb_convert_encoding( $contenuto, "UTF-8", "ISO-8859-1" );
$values = parse_ini_string( $contenuto, true );
$nome = $values['Nome']['valore'];
// Verifico che questo componente non sia già stato sostituito
$query = "SELECT * FROM my_impianto_componenti WHERE idsostituto = $id";
$rs = $dbo->fetchArray( $query );
$n = sizeof($rs);
if ($n==0){
//Inserisco il nuovo componente in sostituzione
$query = "INSERT INTO my_impianto_componenti( idsostituto, filename, idimpianto, contenuto, nome, data ) VALUES( $id, \"$filename\", \"$matricola\", \"".save( $contenuto )."\", \"$nome\", NOW() )";
$dbo->query( $query );
$idcomponente = $dbo->last_inserted_id();
//Aggiorno la data di sostituzione del componente precedente
$query = "UPDATE my_impianto_componenti SET data_sostituzione = NOW() WHERE idimpianto=\"$matricola\" AND id = $id ";
$dbo->query( $query );
array_push( $_SESSION['infos'], "Aggiunto un nuovo componente in sostituzione al precedente!" );
}else{
array_push( $_SESSION['errors'], "Questo componente &egrave; gi&agrave; stato sostituito. Nessuna modifica applicata." );
}
redirect($rootdir."/editor.php?id_module=".$id_module."&id_record=".$id_record."&id=".$idcomponente."#tab_3");
break;
case "unlinkcomponente":
$idcomponente = save( $_GET['id'] );
$matricola = $id_record;
$query = "DELETE FROM my_impianto_componenti WHERE id=\"".$idcomponente."\" AND idimpianto=\"$matricola\"";
$dbo->query( $query );
array_push( $_SESSION['infos'], "Rimosso componente dall'impianto!" );
redirect($rootdir."/editor.php?id_module=".$id_module."&id_record=".$id_record."&id=".$idcomponente."#tab_3");
break;
//Carica i campi da compilare del componente
case "load_componente":
/* 12-10-2014 FabioP: funzione spostata in ajax_autocomplete.php per via del controllo sulla variabile $docroot su questo file! */
$filename = save( $_GET['filename'] );
$idarticolo = save( $_GET['idarticolo'] );
//Se è stato specificato un idarticolo, carico il file .ini dal campo `contenuto` di quell'idarticolo
$rs = $dbo->fetchArray("SELECT contenuto, componente_filename FROM mg_articoli WHERE id=\"".$idarticolo."\"");
//Se i campi da caricare sono del componente già salvato leggo dal campo `contenuto`...
if( $rs[0]['componente_filename'] == $filename )
$contenuto = read($rs[0]['contenuto']);
//...altrimenti carico dal file .ini
else{
if( file_exists( $docroot."/files/my_impianti/".$filename ) )
$contenuto = file_get_contents( $docroot."/files/my_impianti/".$filename );
}
$contenuto = str_replace( "`", "\"", $contenuto );
$ini_array = parse_ini_string( read($contenuto), true );
//Caricamento form per attributi componente
if( is_array($ini_array) && $ini_array['Nome']['valore']!='' ){
echo "<h3 class='fascia'>Attributi ".$ini_array['Nome']['valore']."</h3>\n";
echo "<input type='hidden' name='Nome' value=\"".$ini_array['Nome']['valore']."\" />\n";
echo "<table cellspacing=\"0\">\n";
//per ogni sezione
$i = 0;
foreach ($ini_array as $sezione => $array_impostazioni){
if( $sezione!='Nome' ){
if ( ($i==0) || ($i%2==0) ){
echo "<tr>\n";
}
$i++;
echo "<td align=\"right\" class=\"first_cell\" valign=\"middle\" style=\"width:170px;\">\n";
echo "<span><b>".$sezione.": </b></span>";
echo "</td>\n";
$nome = htmlentities($sezione, ENT_QUOTES, "UTF-8");
$tipo = $ini_array[$sezione]['tipo'];
$valore = $ini_array[$sezione]['valore'];
$opzioni = $ini_array[$sezione]['opzioni'];
( $tipo=='textarea' ) ? $valign="top" : $valign="middle";
echo "<td align=\"left\" class=\"table_cell\" valign=\"".$valign."\" >\n";
genera_campo( $nome, $tipo, $valore, $opzioni );
echo "</td>\n";
if ($i%2==0){
echo "</tr>\n";
}
}
}
echo "</table>\n";
}
exit;
}
//Componenti non ancora collegati
if( $id_list=='' )
$id_list='0';
//Funzione per elencare i componenti disponibili
$cmp = get_componenti( $docroot."/files/my_impianti/", $id_list );
echo "<div class='row'>\n";
echo " <div class='col-md-4'>\n";
echo " <select class=\"superselect\" id=\"filename\" name=\"filename\">\n";
echo " <option value=\"0\">- Aggiungi un componente -</option>\n";
if( sizeof($cmp)>0 ){
for( $c=0; $c<sizeof($cmp); $c++ ){
echo " <option value=\"".$cmp[$c][0]."\">".$cmp[$c][1]."</option>\n";
}
}
else{
echo " <option value=\"0\">- Hai gi&agrave; aggiunto tutti i componenti -</option>\n";
}
echo " </select>\n";
echo " </div>\n";
echo " <div class='col-md-2'>\n";
echo " <a class=\"btn btn-primary\" id=\"addta\" href=\"javascript:;\" onclick=\"if ( $('#filename').val()!='0' ){location.href='".$rootdir."/editor.php?id_module=".$id_module."&id_record=".$id_record."&op=linkcomponente&matricola=".$id_record."&filename='+$('#filename').val();}else{ alert('Seleziona prima un componente'); $('#filename').focus(); }\"><i class='fa fa-plus'></i> Aggiungi</a>\n";
echo " </div>\n";
echo "</div>\n";
echo "<br>\n";
//Mostro tutti i componenti utilizzati elencando quelli attualmente installati per primi.
$q2 = "SELECT *, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.idintervento WHERE in_interventi.idintervento=my_impianto_componenti.idintervento) AS data_intervento FROM my_impianto_componenti WHERE idimpianto = \"".$id_record."\" ORDER by nome ASC, data_intervento DESC, idsostituto DESC";
$rs2 = $dbo->fetchArray($q2);
$n2 = sizeof($rs2);
if( $n2 > 0 ){
$prev_componente = '';
echo "<h3>Componenti gi&agrave; installati</h3>\n";
echo "<div class=\"panel-group\" id=\"accordion\">\n";
//Ciclo tra tutti i componenti
for( $j=0; $j<$n2; $j++ ){
$contenuto = $rs2[$j]['contenuto'];
$contenuto = str_replace( "`", "\"", $contenuto );
$ini_array = parse_ini_string( read($contenuto), true );
$nome_componente = $rs2[$j]['nome'];
$filename = $rs2[$j]['filename'];
if ($rs2[$j]['data_sostituzione']=='0000-00-00 00:00:00'){
$statocomponente = "INSTALLATO in data ".date("d/m/Y", strtotime($rs2[$j]['data']) );
}else{
$statocomponente = "SOSTITUITO in data ".date("d/m/Y", strtotime($rs2[$j]['data_sostituzione']) );
}
//Per più "versioni" dello stesso componente mostro un riga meno evidente
//per non confonderlo come componente in uso in questo momento
if( $prev_componente == $nome_componente ){
echo " <div class=\"panel panel-default\">\n";
echo " <div class=\"panel-heading mini\">\n";
echo " <h4 class=\"panel-title mini\">\n";
echo " <a data-toggle='collapse' data-parent='#accordion' href='#collapse_".$j."'><small>".$nome_componente." (".$statocomponente.")</small></a>\n";
echo " </h4>\n";
echo " </div>\n";
}
else{
echo " <div class=\"panel panel-primary\">\n";
echo " <div class=\"panel-heading\">\n";
echo " <h4 class=\"panel-title\">\n";
echo " <a data-toggle='collapse' data-parent='#accordion' href='#collapse_".$j."'>".$nome_componente." (".$statocomponente.")</a>\n";
echo " </h4>\n";
echo " </div>\n";
}
if ($_GET['id'] == $rs2[$j]['id']):
unset($_SESSION['id']);
$in = 'in';
elseif ($_SESSION['id'] == $rs2[$j]['id'] ):
$in = 'in';
else:
$in = '';
endif;
echo " <div id='collapse_".$j."' class='panel-collapse collapse ".$in." '>\n";
echo " <div class=\"panel-body\">\n";
//FORM COMPONENTE
echo " <form method=\"post\" action=\"".$rootdir."/editor.php?id_module=".$id_module."&id_record=".$id_record."&op=updatecomponente&matricola=".$id_record."&id=".$rs2[$j]['id']."\">\n";
echo " <input type='hidden' name='backto' value='record-edit'>\n";
echo " <div class='row'>\n";
//Nome
echo " <div class='col-md-6'>\n";
echo " <label>Nome:</label><br>\n";
echo " ".$rs2[$j]['nome']."\n";
echo " </div>\n";
//Data
echo " <div class='col-md-6'>\n";
echo " <label>Data:</label>\n";
echo " <input type='text' class='form-control datepicker text-center' name='data' value=\"".date("d/m/Y", strtotime($rs2[$j]['data']) )."\">\n";
echo " </div>\n";
//per ogni sezione
foreach ($ini_array as $sezione => $array_impostazioni){
//$sezione = html_entity_decode( $sezione, ENT_QUOTES, "UTF-8" );
if( $sezione!='Nome' ){
$sezione = $sezione;
$tipo = $ini_array[$sezione]['tipo'];
$valore = $ini_array[$sezione]['valore'];
$opzioni = $ini_array[$sezione]['opzioni'];
( $tipo=='textarea' ) ? $valign="top" : $valign="middle";
echo " <div class='col-md-6'>\n";
echo " <label>".$sezione.":</label>\n";
genera_campo( $sezione, $tipo, $valore, $opzioni );
echo " </div>\n";
}
}
$interventi = $dbo->fetchArray("SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS tipo, (SELECT descrizione FROM in_statiintervento WHERE idstatointervento=in_interventi.idstatointervento) AS stato, (SELECT colore FROM in_statiintervento WHERE idstatointervento=in_interventi.idstatointervento) AS colore FROM in_interventi INNER JOIN my_componenti_interventi ON my_componenti_interventi.id_intervento=in_interventi.idintervento WHERE id_componente=\"".$rs2[$j]["id"]."\" ORDER BY id_intervento");
if($interventi != null){
//Collegamento a intervento se c'è
echo " <div class='col-md-12'>\n";
echo " <b>Interventi collegati:</b>\n";
echo '
<table class="table table-condensed">
<tr>
<th>Codice</th>
<th>Tipo</th>
<th>Stato</th>
<th>Data richiesta</th>
<th>Dettagli</th>
</tr>';
foreach ($interventi as $intervento){
echo '
<tr bgcolor="'.$intervento["colore"].'">
<td>'.$intervento["id_intervento"].'</td>
<td>'.$intervento["tipo"].'</td>
<td>'.$intervento["stato"].'</td>
<td>'.$intervento["data_richiesta"].'</td>
<td><a href="'.$rootdir.'/editor.php?id_module='.$modules_info["Interventi"]["id"].'&id_record='.$intervento["id_intervento"].'">Dettagli</a></td>
</tr>';
}
echo '
</table>';
echo " </div>\n";
}
else
echo " <div class='clearfix'></div><br>\n";
//Pulsante Salva/Elimina
echo " <div class='col-md-12'>\n";
echo " <button type=\"submit\" class=\"btn-app btn-success\"><i class='fa fa-check'></i> Salva</button>\n";
echo " <button type=\"button\" class=\"btn-app btn-danger\" onclick=\"location.href='".$rootdir."/editor.php?id_module=".$id_module."&id_record=".$id_record."&op=unlinkcomponente&matricola=$matricola&id=".$rs2[$j]['id']."';\"><i class='fa fa-trash-o'></i> Elimina</button>\n";
//Sostituisci componente con un altro dello stesso tipo, posso sostituire solo i componenti installati
if ($rs2[$j]['data_sostituzione']=='0000-00-00 00:00:00'){
echo " <br><br><a href=\"javascript:;\" class=\"text-warning\" onclick=\"if( confirm('Vuoi sostituire questo componente con un altro dello stesso tipo?') ){ location.href='".$rootdir."/editor.php?id_module=".$id_module."&id_record=".$id_record."&op=sostituiscicomponente&filename=".$filename."&id=".$rs2[$j]['id']."'; }\"><i class='fa fa-refresh'></i> Sostituisci questo componente</a><br><br>\n";
}
else{
echo " <br><br><p class='text-danger'>Componente gi&agrave; sostituito</p>\n";
}
echo " </div>\n";
echo " </div>\n";
echo " </form>\n";
echo " </div>\n";
echo " </div>\n";
echo " </div>\n";
$prev_componente = $nome_componente;
}
echo "</div>\n";
}
?>