184c184
< 															<img src="{{=getMainIcon=}}" height="35" alt="<!--main-domain-name-->" />
---
> 															<img src="<!--relativeDirectory-->/{{=getMainIcon=}}" height="35" alt="<!--main-domain-name-->" />
194,196c194
< 									/// _[SEZIONE RICERCA IN ALTO A DESTRA]
< 									
< 														{{=getMainCustomerName=}}
---
> 									/// [_SEZIONE RICERCA IN ALTO A DESTRA]
375,500d372
< 	getMainCustomerName
< 		<[
< 		
< 			
< 			global $gbl_tableName;
< 			global $gbl_masterFunction;
< 			global $gbl_userId;
< 			global $gbl_struct; // info da database (real_type real_lenght)
< 			global $gbl_fx;
< 			global $gbl_session; // tb_parametro
< 			global $db_sql; // link database standard
< 			// -------------------------------------------
< 			// raccolta dati utente
< 			// -------------------------------------------
< 			global $gbl_url;
< 			global $db_sql_name;
< 			global $gbl_nomeTipo;
< 			global $gbl_infoMenu;
< 			global $gbl_idSessione;
< 			global $gbl_nomeCampoTitolo;
< 			global $db_sql_user;
< 			global $db_sql_password;
< 			global $db_sql_host;
< 			global $gbl_userData;
< 			global $gbl_query;
< 			global $gbl_stack;
< 			global $gbl_father;
< 			global $gbl_anyFilterOn;
< 			global $gbl_unicode;
< 			global $gbl_myFullUrl;
< 			global $gbl_mainDomain;
< 			global $gbl_subDomain;
< 			// ------------------------------
< 			// 0=devId; 1=validity in seconds
< 			// Array:
< 			global $gbl_xsm;
< 			global $gbl_changePasswordDisabled;
< 			
< 		
< 			$un_rec = _dbGet("SELECT table_name FROM information_schema.tables WHERE table_schema='$db_sql_name' AND table_name = 'tb_dati_aziendali';");
< 			if( $un_rec == NULL )
< 				return "";
< 		
< 			$nomeAzienda = _dbGet("SELECT nome FROM tb_dati_aziendali;")['nome'] ?? "";
< 			if( $nomeAzienda == "" )
< 				return "";
< 		
< 			$cosa = <<<EOT
< 				<span class="separator"></span>
< 				<div class="userbox flexbox flashMessage">
< 					<h4 style="font-size:1.4em;">{$nomeAzienda}</h4>
< 				</div>
< 			EOT;
< 		
< 			return $cosa;
< 		
< 		
< 		
< 		]>
< 	getMainIcon
< 		<[
< 		
< 		
< 		global $gbl_tableName;
< 		global $gbl_masterFunction;
< 		global $gbl_userId;
< 		global $gbl_struct; // info da database (real_type real_lenght)
< 		global $gbl_fx;
< 		global $gbl_session; // tb_parametro
< 		global $db_sql; // link database standard
< 		// -------------------------------------------
< 		// raccolta dati utente
< 		// -------------------------------------------
< 		global $gbl_url;
< 		global $db_sql_name;
< 		global $gbl_nomeTipo;
< 		global $gbl_infoMenu;
< 		global $gbl_idSessione;
< 		global $gbl_nomeCampoTitolo;
< 		global $db_sql_user;
< 		global $db_sql_password;
< 		global $db_sql_host;
< 		global $gbl_userData;
< 		global $gbl_query;
< 		global $gbl_stack;
< 		global $gbl_father;
< 		global $gbl_anyFilterOn;
< 		global $gbl_unicode;
< 		global $gbl_myFullUrl;
< 		global $gbl_mainDomain;
< 		global $gbl_subDomain;
< 		// ------------------------------
< 		// 0=devId; 1=validity in seconds
< 		// Array:
< 		global $gbl_xsm;
< 		global $gbl_changePasswordDisabled;
< 		
< 		
< 			$default_pic = "<!--relativeDirectory-->//images/do0/do0116x50arancio.png";
< 		
< 			$un_rec = _dbGet("SELECT table_name FROM information_schema.tables WHERE table_schema='$db_sql_name' AND table_name = 'tb_dati_aziendali';");
< 			if( $un_rec == NULL )
< 				return $default_pic;
< 		
< 			$un_rec = _dbGet("SELECT id FROM tb_dati_aziendali;");
< 			if( $un_rec == NULL )
< 				return $default_pic;
< 		
< 			// ARRAY
< 			$dat = array();
< 			$dat['t'] = "tb_dati_aziendali";
< 			$dat['f'] = "logo";
< 			$dat['id'] = $un_rec['id'] ?? 0;
< 			// JSON
< 			$dat = json_encode( $dat );
< 			// ENCRYPT
< 			$key = "alfabeta acqua cheta" . $gbl_idSessione . "." . $gbl_userId;
< 			$dat = _encrypta( $dat, $key );
< 			// BASE64/BIN2HEX
< 			$dat = bin2hex( $dat );
< 			$picture = "index.php?fx=ixmage&data={$dat}&a=48";
< 		
< 			return $picture;
< 		
< 		
< 		]>
2631,2694d2502
< 					case 99:
< 						// Vediamo se è un filtro data (potrebbe essere doppio con la virgola, con o senza ora)
< 						$isDataora = false;
< 						
< 							// vediamo se c'è inizio e fine
< 							$_ar = explode( ",", $vv );
< 						
< 							$iii = $_ar[0] ?? "";
< 							$fff = $_ar[1] ?? "";
< 						
< 							if( DateTime::createFromFormat('d-m-Y H:i:s', $iii) !== false)
< 							{
< 								$buf = explode('-', $iii);
< 								$iii = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 								/// abbiamo una data-ora di inizio
< 								if( DateTime::createFromFormat('d-m-Y H:i:s', $fff) !== false)
< 								{
< 									$buf = explode('-', $fff);
< 									$fff = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 									/// abbiamo una data-ora di fine pure
< 									$dt_start = date('Y-m-d H:i:s', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = date('Y-m-d H:i:s', strtotime($fff)); // CONVERTO DA UMANO A MYSQL
< 								}
< 								else
< 								{
< 									/// non abbiamo la data di fine, ma assumiamo sia uguale alla data di start
< 									/// quindi sto cercando un dato molto specifico, preciso al secondo.
< 									$dt_start = date('Y-m-d H:i:s', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = $dt_start;
< 								}
< 								$isDataora = true;
< 							}
< 							elseif( DateTime::createFromFormat('d-m-Y', $iii) !== false)
< 							{
< 								$buf = explode('-', $iii);
< 								$iii = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 								/// abbiamo una data di inizio
< 								if( DateTime::createFromFormat('d-m-Y', $fff) !== false)	
< 								{
< 									$buf = explode('-', $fff);
< 									$fff = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 									/// abbiamo una data di fine pure
< 									$dt_start = date('Y-m-d', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = date('Y-m-d', strtotime($fff)); // CONVERTO DA UMANO A MYSQL
< 								}
< 								else
< 								{
< 									/// non abbiamo la data di fine, ma assumiamo sia uguale alla data di start
< 									/// quindi sto cercando un dato molto specifico, preciso al secondo.
< 									$dt_start = date('Y-m-d', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = $dt_start;
< 								}
< 								$dt_start .= " 00:00:00";
< 								$dt_end .= " 23:59:59";
< 								$isDataora = true;
< 							}
< 						
< 						//
< 						if( $isDataora )
< 						{
< 							$filters .= " (LOWER({$nn}) >= '{$dt_start}' AND LOWER({$nn}) <= '{$dt_end}') ";
< 							$gbl_anyFilterOn = true;
< 						}
< 						break;
3694,3697d3501
< 					/// $('#'+me.\$table.attr('id')+'_filter input').attr('id', 'myCustomSearchBox');
< 					/// suggerito da chatgpt
< 					$('#'+me.\$table.attr('id')+'_filter input').attr('name', 'myCustomSearchBoxName');
< 		
5782,5845d5585
< 					case 99:
< 						// Vediamo se è un filtro data (potrebbe essere doppio con la virgola, con o senza ora)
< 						$isDataora = false;
< 						
< 							// vediamo se c'è inizio e fine
< 							$_ar = explode( ",", $vv );
< 						
< 							$iii = $_ar[0] ?? "";
< 							$fff = $_ar[1] ?? "";
< 						
< 							if( DateTime::createFromFormat('d-m-Y H:i:s', $iii) !== false)
< 							{
< 								$buf = explode('-', $iii);
< 								$iii = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 								/// abbiamo una data-ora di inizio
< 								if( DateTime::createFromFormat('d-m-Y H:i:s', $fff) !== false)
< 								{
< 									$buf = explode('-', $fff);
< 									$fff = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 									/// abbiamo una data-ora di fine pure
< 									$dt_start = date('Y-m-d H:i:s', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = date('Y-m-d H:i:s', strtotime($fff)); // CONVERTO DA UMANO A MYSQL
< 								}
< 								else
< 								{
< 									/// non abbiamo la data di fine, ma assumiamo sia uguale alla data di start
< 									/// quindi sto cercando un dato molto specifico, preciso al secondo.
< 									$dt_start = date('Y-m-d H:i:s', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = $dt_start;
< 								}
< 								$isDataora = true;
< 							}
< 							elseif( DateTime::createFromFormat('d-m-Y', $iii) !== false)
< 							{
< 								$buf = explode('-', $iii);
< 								$iii = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 								/// abbiamo una data di inizio
< 								if( DateTime::createFromFormat('d-m-Y', $fff) !== false)	
< 								{
< 									$buf = explode('-', $fff);
< 									$fff = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 									/// abbiamo una data di fine pure
< 									$dt_start = date('Y-m-d', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = date('Y-m-d', strtotime($fff)); // CONVERTO DA UMANO A MYSQL
< 								}
< 								else
< 								{
< 									/// non abbiamo la data di fine, ma assumiamo sia uguale alla data di start
< 									/// quindi sto cercando un dato molto specifico, preciso al secondo.
< 									$dt_start = date('Y-m-d', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = $dt_start;
< 								}
< 								$dt_start .= " 00:00:00";
< 								$dt_end .= " 23:59:59";
< 								$isDataora = true;
< 							}
< 						
< 						//
< 						if( $isDataora )
< 						{
< 							$filters .= " (LOWER({$nn}) >= '{$dt_start}' AND LOWER({$nn}) <= '{$dt_end}') ";
< 							$gbl_anyFilterOn = true;
< 						}
< 						break;
6845,6848d6584
< 					/// $('#'+me.\$table.attr('id')+'_filter input').attr('id', 'myCustomSearchBox');
< 					/// suggerito da chatgpt
< 					$('#'+me.\$table.attr('id')+'_filter input').attr('name', 'myCustomSearchBoxName');
< 		
8185a7922
> 		
8216,8235d7952
< 				/// prepariamo eventuali valori di sel_
< 				$titols = array();
< 				$o_fs = $gbl_session['info'];
< 				foreach($o_fs as $o_nome=>$o_valore)
< 				{
< 					$o_tipo = $o_valore[2] ?? "";
< 					if( $o_tipo == "sel_" )
< 					{
< 						$o_ncampo = $o_valore['titolo'][0] ?? "nome";
< 						$o_tabella = $o_valore['tabella'][0] ?? $o_nome;
< 						$o_cosa = _dbGet("SELECT id," . $o_ncampo . " FROM " . $o_tabella . ";");
< 						while( $o_cosa != NULL )
< 						{
< 							$titols[$o_nome][$o_cosa['id']] = $o_cosa[ $o_ncampo];
< 							$o_cosa = _dbGet();
< 						}
< 					}
< 				}
< 				/// -----------------------------------
< 				$gbl_table_index = 0;
8240d7956
< 					$gbl_table_index++;
8276d7991
< 								$titolo_campo = $gbl_session['info'][$nome_campo][0] ?? $detail[$i];
8278d7992
< 								$valore_campo = $titols[ $nome_campo][ $valore_campo] ?? $valore_campo;
8284c7998
< 											<p  style="border-bottom:2px solid lightgray; text-align:left; color: #34495e; font-family: courier new; font-weight:700;">{$titolo_campo}
---
> 											<p  style="border-bottom:2px solid lightgray; text-align:left; font-family: courier new; font-weight:700;">{$nome_campo}
8307,8311d8020
< 						case "type_custom":
< 							$program = $detail['program'] ?? "";
< 							$resultado = eval( $program );
< 							$content .= $resultado;
< 						break;
10896,10943d10604
< 			elseif( 
< 				($x_tip == "dts_" ) ||
< 				($x_tip == "dtts_") )
< 			{
< 					
< 					// nel valore precedente ci sono le 2 date (inizio e fine) separate da una virgola
< 					$prevval = explode(",", $prevval);
< 				
< 					$dt_start = $prevval[0] ?? "";
< 					$dt_end = $prevval[1] ?? "";
< 				
< 					if( $dt_end == "" )
< 						$dt_end = $dt_start;
< 				
< 					$options = <<<EOT
< 							<option value="99" selected>nel periodo:</option>
< 					EOT;
< 				
< 				
< 					$allFields .= <<<EOT
< 										<div class="form-group" id="fgId_{$fieldName}">
< 											<label class="col-md-3 control-label" for="id_{$fieldName}">{$caption}</label>
< 											<div class="col-md-7">
< 												<div class="row">
< 														<div class="col-sm-3">
< 															<select data-plugin-selectTwo name="_xyt_{$fieldName}" value="{$x_tip}" class="form-control populate" id="t_{$fieldName}">
< 																{$options}
< 															</select>
< 														</div>
< 														<div class="visible-xs mb-md"></div>
< 														<div class="col-sm-9">
< 															<div class="input-daterange input-group" data-date-language="it" data-date-autoclose="true" data-date-format="dd-mm-yyyy" data-plugin-datepicker>
< 																<span class="input-group-addon">
< 																	<i class="fa fa-calendar"></i>
< 																</span>
< 																<input id="n_s_{$fieldName}" type="text" tipo="dts_" class="form-control" name="_xyn_s_{$fieldName}" value="{$dt_start}">
< 																<span class="input-group-addon">a</span>
< 																<input id="n_e_{$fieldName}" type="text" class="form-control" name="_xyn_e_{$fieldName}" value="{$dt_end}">
< 															</div>
< 														</div>
< 												</div>
< 											</div>
< 										</div>
< 				
< 					EOT;
< 				
< 				
< 			}
11354,11356d11014
< 		<!--bootstrap datepicker locale-->
< 		<script src="<!--relativeDirectory-->/javascripts/bootstrap-datepicker.it.min.js"></script>
< 
11542,11559d11199
< 			if( startsWith( $nome, "_xyn_s_" ))
< 			{
< 				$nome = str_replace("_xyn_s_", "", $nome);
< 				if( isset($filtro['filter'][$nome]) && $filtro['filter'][$nome] != "" )
< 					$filtro['filter'][$nome] = $valore . "," . $filtro['filter'][$nome];
< 				else
< 					$filtro['filter'][$nome] = $valore;
< 			}
< 
< 			if( startsWith( $nome, "_xyn_e_" ))
< 			{
< 				$nome = str_replace("_xyn_e_", "", $nome);
< 				if( isset($filtro['filter'][$nome]) && $filtro['filter'][$nome] != "" )
< 					$filtro['filter'][$nome] .= "," . $valore;
< 				else
< 					$filtro['filter'][$nome] = $valore;
< 			}
< 
11831d11470
< 				( $field['tipo'] == "dtts_" ) ||
12732,12795d12370
< 					case 99:
< 						// Vediamo se è un filtro data (potrebbe essere doppio con la virgola, con o senza ora)
< 						$isDataora = false;
< 						
< 							// vediamo se c'è inizio e fine
< 							$_ar = explode( ",", $vv );
< 						
< 							$iii = $_ar[0] ?? "";
< 							$fff = $_ar[1] ?? "";
< 						
< 							if( DateTime::createFromFormat('d-m-Y H:i:s', $iii) !== false)
< 							{
< 								$buf = explode('-', $iii);
< 								$iii = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 								/// abbiamo una data-ora di inizio
< 								if( DateTime::createFromFormat('d-m-Y H:i:s', $fff) !== false)
< 								{
< 									$buf = explode('-', $fff);
< 									$fff = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 									/// abbiamo una data-ora di fine pure
< 									$dt_start = date('Y-m-d H:i:s', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = date('Y-m-d H:i:s', strtotime($fff)); // CONVERTO DA UMANO A MYSQL
< 								}
< 								else
< 								{
< 									/// non abbiamo la data di fine, ma assumiamo sia uguale alla data di start
< 									/// quindi sto cercando un dato molto specifico, preciso al secondo.
< 									$dt_start = date('Y-m-d H:i:s', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = $dt_start;
< 								}
< 								$isDataora = true;
< 							}
< 							elseif( DateTime::createFromFormat('d-m-Y', $iii) !== false)
< 							{
< 								$buf = explode('-', $iii);
< 								$iii = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 								/// abbiamo una data di inizio
< 								if( DateTime::createFromFormat('d-m-Y', $fff) !== false)	
< 								{
< 									$buf = explode('-', $fff);
< 									$fff = $buf[2].'/'.$buf[1].'/'.$buf[0]; /// la sistemo per la strtotime
< 									/// abbiamo una data di fine pure
< 									$dt_start = date('Y-m-d', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = date('Y-m-d', strtotime($fff)); // CONVERTO DA UMANO A MYSQL
< 								}
< 								else
< 								{
< 									/// non abbiamo la data di fine, ma assumiamo sia uguale alla data di start
< 									/// quindi sto cercando un dato molto specifico, preciso al secondo.
< 									$dt_start = date('Y-m-d', strtotime($iii)); // CONVERTO DA UMANO A MYSQL
< 									$dt_end = $dt_start;
< 								}
< 								$dt_start .= " 00:00:00";
< 								$dt_end .= " 23:59:59";
< 								$isDataora = true;
< 							}
< 						
< 						//
< 						if( $isDataora )
< 						{
< 							$filters .= " (LOWER({$nn}) >= '{$dt_start}' AND LOWER({$nn}) <= '{$dt_end}') ";
< 							$gbl_anyFilterOn = true;
< 						}
< 						break;
13103,13113d12677
< 						if( $tipo == "dtts_" ) // data + time stringa
< 						{
< 							if( $value != "" )
< 							{
< 								$dt = strtotime( $value );
< 								$row[ $field] = date( "d/m/Y G:i:s", $dt );
< 							}
< 							else
< 								$row[ $field] = "";
< 						}
< 					
13124,13126c12688
< 		$export_file_name = $gbl_session['ancillary']['export file name'][0] ?? $gbl_tableName;
< 
< 		query_to_csv( $db_sql, "SELECT id,$listaCampi FROM $gbl_tableName $gbl_query $filters;", $export_file_name . ".csv", $forcedWhiteList, $restrictedList, true, $includiHeader);
---
> 		query_to_csv( $db_sql, "SELECT id,$listaCampi FROM $gbl_tableName $gbl_query $filters;", $gbl_tableName . ".csv", $forcedWhiteList, $restrictedList, true, $includiHeader);
13441c13003
< 						if( _dbGet( "SELECT id FROM $gbl_tableName WHERE {$nome}='{$valore}' AND id <> '$element';") != NULL)
---
> 						if( _dbGet( "SELECT id FROM $gbl_tableName WHERE email='{$valore}' AND id <> '$element';") != NULL)
13545c13107
< 						if( _dbGet( "SELECT id FROM $gbl_tableName WHERE {$nome}='{$valore}' AND id <> '$element';") != NULL)
---
> 						if( _dbGet( "SELECT id FROM $gbl_tableName WHERE email='{$valore}' AND id <> '$element';") != NULL)
13779,13802d13340
< 			// ---------------------------
< 			
< 				try
< 				{
< 					$valore_x = _dbGet("SELECT valore FROM tb_x_cose WHERE nome LIKE '%readonly:%$gbl_tableName';")['valore'];
< 					if( $valore_x != NULL && $valore_x != "" )
< 					{
< 						$arrei = explode(",",$valore_x);
< 						if( is_array( $arrei))
< 						{
< 							$arrei = array_map('trim', $arrei);
< 							if( in_array( $element, $arrei))
< 								return "L'elemento non è stato eliminato perché è dichiarato 'read only' da root";
< 						}
< 						// L'ELEMENTO CHE VOGLIAMO CANCELLARE E' DICHIARATO IN SOLA LETTURA
< 					}
< 				}
< 				catch (Exception $e)
< 				{
< 					// no problem		
< 				}
< 			
< 			
< 			// ---------------------------
15349,15354c14887,14890
< 										Per questioni di sicurezza, la procedura di recupero password deve essere eseguita da un amministratore.
< 										Vogliate cortesemente rivolgervi al Vs. amministratore per il rilascio di una nuova
< 										password temporanea.<br>
< 										Se invece dovete recuperare una password amministratore, vogliate cortesemente inviare una richiesta
< 										all'indirizzo assistenza@cslab.info indicando l'indirizzo email ed il sistema di appartenenza.<br>
< 										Grazie.
---
> 										Questo sistema non dispone del collegamento ad Internet e non è quindi in grado
> 										di attivare la procedura di recupero password.<br />
> 										Vogliate cortesemente fare richiesta al webmaster Orazio Rizzo (admin@creativesoftwarelab.com) per ottenere
> 										una nuova password temporanea.
17815,17823c17351,17357
< 						
< 										{
< 											"protocols": ["SAML"],
< 											"entityName": "Testenv",
< 											"logo": "spid-idp-testenv2.svg",
< 											"entityID": "<?php echo $mapping['testenv'] ?>",
< 											"active": true
< 										},
< 						
---
> 						{
> 							"protocols": ["SAML"],
> 							"entityName": "Testenv",
> 							"logo": "spid-idp-testenv2.svg",
> 							"entityID": "<?php echo $mapping['testenv'] ?>",
> 							"active": true
> 						},
