Sfoglia il codice sorgente

update 20260401

master
Amerigo C. 5 mesi fa
parent
commit
db1a0e2a57
  1. 13
      .gitignore
  2. 33
      index.php
  3. 8
      lib/classes/Affitti/Domanda.php
  4. 50
      lib/classes/Affitti/DomandaSconti.php
  5. 23
      lib/classes/App/Allegati.php
  6. 74
      lib/classes/Utils/EmailSms.php
  7. 191
      lib/classes/Utils/File.php
  8. 17
      lib/config/avviso.config.php
  9. 3
      lib/config/database.config.php
  10. 8
      lib/config/spid.config.php
  11. 9
      lib/config/sportello.config.php
  12. 1516
      lib/config/stats.php
  13. 4
      lib/config/upload.config.php
  14. 43
      modules/private/account.php
  15. 2
      modules/private/gestione_allegati.php
  16. 10
      modules/private/page_nucleo_familiare.php
  17. 17
      modules/private/page_sconto.php
  18. 7
      statistiche.php
  19. 4
      webservice/domanda.php
  20. 36
      webservice/sconto.php

13
.gitignore vendored

@ -0,0 +1,13 @@
nbproject/
lib/app.config.php
upload/
md5file/
upload_taxi/
admin/
lib/app.config-DEFAULT_1.php
.vscode/
.idea/
assets/docs/decreti/
.scannerwork/
*.code-workspace

33
index.php

@ -36,28 +36,27 @@ $statoSportello = Utils::GetStatoSportello();
<div class="row">
<div class="col-lg-12 text-justify">
<div class="card">
<div class="card-header text-left text-white h5 bg-danger">
PROT. N. 28219 del 17/07/2025
<div class="card-header text-left text-white h5 bg-success">
D.D.G. 4210 del 21/11/2025
</div>
<div class="card-body">
<h4 class="card-title text-center">
Con la <a href="#allegatirow">nota dipartimentale del Servizio 1,</a> si precisa il richiamo all’applicazione del massimale di € 37,50
per i residenti, per singola tratta,
come previsto dal Bando di cui al DDG n. 3158 del 10/11/2023 e successive modifiche ed integrazioni.
Con il <a href="#allegatirow">D.D.G. n.4210 del 21/11/2025</a> è approvata l’estensione del periodo
di validità per il riconoscimento dei contributi erogati ai soggetti beneficiari del "CONTRIBUTO
SUL PREZZO DEI BIGLIETTI AEREI AI CITTADINI RESIDENTI IN SICILIA PER LA RIDUZIONE DEGLI SVANTAGGI DERIVANTI DALL'INSULARITÀ"
di cui al D.D.G. n. 3158 del 10 novembre 2023 e ss. mm. ii., <strong><u>sino alla data del 28 febbraio 2026</u></strong>.
</h4>
</div>
</div><br>
<div class="card">
<div class="card-header text-left text-white h5 bg-success">
D.D.G. 21 del 15/01/2025
<div class="card-header text-left text-white h5 bg-danger">
PROT. N. 28219 del 17/07/2025
</div>
<div class="card-body">
<h4 class="card-title text-center">
Con il <a href="#allegatirow">D.D.G. n.21 del 15/01/2025</a> è approvata l’estensione del periodo
di validità per il riconoscimento dei contributi erogati ai soggetti beneficiari del "CONTRIBUTO
SUL PREZZO DEI BIGLIETTI AEREI AI CITTADINI RESIDENTI IN SICILIA PER LA RIDUZIONE DEGLI SVANTAGGI DERIVANTI DALL'INSULARITÀ"
di cui al D.D.G. n. 3158 del 10 novembre 2023 e ss. mm. ii., <strong><u>sino alla data del 31 dicembre 2025</u></strong>.<br>
<strong>Lo sconto del 25 % è pertanto concesso nelle modalità indicate nel <a href="#allegatirow">D.D.G. 3158 del 10/11/2023</a></strong>
Con la nota dipartimentale del Servizio 1, si precisa il richiamo all’applicazione del massimale di € 37,50
per i residenti, per singola tratta,
come previsto dal Bando di cui al DDG n. 3158 del 10/11/2023 e successive modifiche ed integrazioni.
</h4>
</div>
</div><br>
@ -81,7 +80,7 @@ $statoSportello = Utils::GetStatoSportello();
SUL PREZZO DEI BIGLIETTI AEREI AI CITTADINI RESIDENTI IN SICILIA PER LA RIDUZIONE DEGLI SVANTAGGI DERIVANTI DALL’INSULARITA’
</h4>
<h5 class="text-center">
Il Responsabile della piattaforma è il dott. <a href="mailto:helpdesk@randcompany.it"><u>Mario Parlavecchio</u></a>
Il Responsabile della piattaforma è il dott. <u>Mario Parlavecchio</u>
</h5>
<!-- <hr>
<h4 class="bold text-danger text-center">AVVISO</h4>
@ -144,11 +143,9 @@ $statoSportello = Utils::GetStatoSportello();
<li><b>Accedere</b> sulla piattaforma SiciliaPei (https://siciliapei.regione.sicilia.it/bandocarovoli) <?= Menu::renderLoginStaticHome(); ?> <b>dalle ore 09:00 del 04 Dicembre 2023 alle ore 23:59 del 30 Gennaio 2026,</b> e completare le differenti sezioni funzionali alla presentazione della richiesta di sconto.</li>
</ol>
<h5 class="bold">ASSISTENZA E SUPPORTO</h5>
<h5 class="bold">INFORMAZIONI</h5>
<p class="text-justify">
Dal <b>05/12/2023</b>, per richieste di assistenza e supporto per l'inserimento della richiesta
sulla piattaforma informatica, contattare il supporto tecnico al seguente numero <b><?= TELEFONO_ASSISTENZA ?></b>,
attivo dal lunedì al venerdi dalle <b>ore 09:00 alle ore 18:00</b>, festivi esclusi.
Per richieste di informazioni è possibile contattare il numero <b><?= TELEFONO_ASSISTENZA ?></b> durante l'orario di ufficio</b>.
</p>
<h5 class="bold">CUSTOMER SATISFACTION</h5>
<p class="text-justify">
@ -173,13 +170,13 @@ $statoSportello = Utils::GetStatoSportello();
<ul class="list-group">
<li class="list-group-item bg-primary text-white">Elenco allegati disponibili</li>
<?= Menu::renderGuidaHome(); ?>
<li class="list-group-item"><a class="text-primary" href="assets/docs/BANDO CARO VOLI - DDG 4210 del 21.11.2025 Estensione periodo di validità sino al 28 febbraio 2026.pdf" download class="text-center"><i class="fas fa-file-pdf"></i> DDG 4210 del 21/11/2025</a></li>
<li class="list-group-item"><a class="text-primary" href="assets/docs/ddg.pdf" download class="text-center"><i class="fas fa-file-pdf"></i> DDG <?= DDG_NUMERO ?> del <?= DDG_DATA ?></a></li>
<li class="list-group-item"><a class="text-primary" href="assets/docs/addendum.pdf" download class="text-center"><i class="fas fa-file-pdf"></i> ADDENDUM DDG <?= DDG_NUMERO ?> del <?= DDG_DATA ?></a></li>
<li class="list-group-item"><a class="text-primary" href="assets/docs/DDG 301 del 14.03.2024.pdf" download class="text-center"><i class="fas fa-file-pdf"></i> DDG 301 del 14/03/2024 </a></li>
<li class="list-group-item"><a class="text-primary" href="assets/docs/BANDO CARO VOLI_Festività natalizie.pdf" download class="text-center"><i class="fas fa-file-pdf"></i> DDG 3848 del 05/12/2024 - ANNULLATO </a></li>
<li class="list-group-item"><a class="text-primary" href="assets/docs/BANDO CARO VOLI_Festività natalizie. Rev._signed.pdf" download class="text-center"><i class="fas fa-file-pdf"></i> DDG 4645 del 30/12/2024 </a></li>
<li class="list-group-item"><a class="text-primary" href="assets/docs/D.D.G. n. 21 del 15.01.2025_ BANDO CARO VOLI - Estensione periodo di validita sino al 31.12.2025_signed_signed.pdf" download class="text-center"><i class="fas fa-file-pdf"></i> DDG 21 del 15/01/2025 </a></li>
<li class="list-group-item"><a class="text-primary" href="assets/docs/Prot. 28219 del 17.07.2025 Bando Carovoli. Attuazione indicazioni del bando - Integrazione_signed.pdf" download class="text-center"><i class="fas fa-file-pdf"></i> Nota Dipartimentale Servizio 1 - Prot. n. 28219 del 17/07/2025 </a></li>
</ul>
</div>
</div>

8
lib/classes/Affitti/Domanda.php

@ -24,7 +24,7 @@ class Domanda extends DataClass {
public $dichiarazioni = array();
public $allegati = array();
public $richieste_sconti = array();
public $richieste_sconti_erogati = array();
// public $richieste_sconti_erogati = array();
public function __construct($src = null) {
global $con;
@ -72,8 +72,8 @@ class Domanda extends DataClass {
public function loadDati() {
$this->dichiarazioni = DomandaDichiarazioni::AllFromDomanda($this->ID);
$this->allegati = Allegati::ListByDomanda($this->ID);
$this->richieste_sconti = DomandaSconti::load($this->ID, RS_IN_ELABORAZIONE);
$this->richieste_sconti_erogati = DomandaSconti::load($this->ID, RS_PRESA_IN_CARICO);
$this->richieste_sconti = DomandaSconti::load($this->ID, 999);
// $this->richieste_sconti_erogati = DomandaSconti::load($this->ID, RS_PRESA_IN_CARICO);
}
/* OBBLIGA LA GENERAZIONE DEL PDF IN CASO DI MODIFICA */
@ -304,7 +304,7 @@ class Domanda extends DataClass {
unset($vars['allegati']);
unset($vars['documenti']);
unset($vars['richieste_sconti']);
unset($vars['richieste_sconti_erogati']);
// unset($vars['richieste_sconti_erogati']);
unset($vars['DATA_REGISTRAZIONE']);
$sql = Utils::prepareQuery(self::TABLE_NAME, $vars);
//echo $sql;

50
lib/classes/Affitti/DomandaSconti.php

@ -156,7 +156,7 @@ class DomandaSconti extends DataClass {
}
public function checkDatiPreSave() {
global $LoggedAccount, $SCALI_FASE1;
global $LoggedAccount, $SCALI_FASE1, $TRATTE_ESCLUSE;
$response = array();
$controllValidita = true;
@ -202,7 +202,6 @@ class DomandaSconti extends DataClass {
$controllValidita = false;
$dati_mancanti .= " <br><b>Campo Cittadinanza</b><br> ";
} */
if (trim($this->AEROPORTO_PARTENZA) == '' || trim($this->AEROPORTO_PARTENZA_CODICE) == '') {
$controllValidita = false;
$dati_mancanti .= " <br><b>L'aeroporto di partenza</b><br> ";
@ -215,6 +214,22 @@ class DomandaSconti extends DataClass {
$controllValidita = false;
$dati_mancanti .= " <br><b>La compagnia aerea</b><br> ";
}
if (
isset($TRATTE_ESCLUSE[$this->COMPAGNIA_ID]) &&
in_array(
$this->AEROPORTO_PARTENZA_CODICE . '-' . $this->AEROPORTO_DESTINAZIONE_CODICE,
$TRATTE_ESCLUSE[$this->COMPAGNIA_ID],
true
)
) {
$controllValidita = false;
$dati_mancanti .= "<br><b>La tratta selezionata non è disponibile per la compagnia indicata.</b><br>";
}
if (intval($this->COSTO_TRATTA) == 0 || trim($this->COSTO_TRATTA) == '') {
$controllValidita = false;
$dati_mancanti .= " <br><b>Il costo del volo per singola tratta</b><br> ";
@ -295,6 +310,13 @@ class DomandaSconti extends DataClass {
$dataVolo = new DateTime($this->DATA_VOLO);
$dataAperturaTratte = new DateTime(DATA_APERTURA_TRATTE);
// if (!self::isValidTratta($this->AEROPORTO_PARTENZA_CODICE, $this->COMPAGNIA_ID, $dataVolo) ||
// !self::isValidTratta($this->AEROPORTO_DESTINAZIONE_CODICE, $this->COMPAGNIA_ID, $dataVolo)
// ) {
// $controllValidita = false;
// $dati_mancanti .= "Per la data scelta, la compagnia non effettua la tratta selezionata.";
// }
//if((!in_array($this->AEROPORTO_DESTINAZIONE_CODICE, $SCALI_FASE1) || !in_array($this->AEROPORTO_PARTENZA_CODICE, $SCALI_FASE1)) && $this->DATA_VOLO < DATA_APERTURA_TRATTE){
if ((!in_array($this->AEROPORTO_DESTINAZIONE_CODICE, $SCALI_FASE1) || !in_array($this->AEROPORTO_PARTENZA_CODICE, $SCALI_FASE1)) && $dataVolo < $dataAperturaTratte) {
$controllValidita = false;
@ -313,6 +335,30 @@ class DomandaSconti extends DataClass {
return $response;
}
public function isValidTratta($aeroporto, $compagnia, $data_volo) {
global $TRATTE_SOSPESE;
// di default la tratta è valida
$return = true;
if (!empty($aeroporto) && !empty($compagnia) && !empty($data_volo)) {
// Normalizza la data del volo
$dataVolo = ($data_volo instanceof DateTime) ? $data_volo : new DateTime($data_volo);
if (!empty($TRATTE_SOSPESE[$aeroporto][$compagnia])) {
$dataSospesaStr = $TRATTE_SOSPESE[$aeroporto][$compagnia];
$dataSospesa = new DateTime($dataSospesaStr);
// Se la data volo è uguale o successiva alla sospensione → non valida
if ($dataVolo >= $dataSospesa) {
$return = false;
}
}
}
return $return;
}
public function isErasable() {
global $LoggedAccount;
$response = false;

23
lib/classes/App/Allegati.php

@ -156,7 +156,6 @@ class Allegati extends DataClass {
return parent::_loadDataTable($sql, $searchQuery, $searchArray, $columnName, $columnSortOrder, $start, $offset, $totCount);
}
public static function Count($filter = null) {
return parent::_count(self::TABLE_NAME, $filter);
}
@ -169,7 +168,6 @@ class Allegati extends DataClass {
$domanda->FILEPATH_GENERATO = null;
$domanda->HASHFILE = null;
$response = $domanda->Save();
} else {
$response = true;
}
@ -265,7 +263,6 @@ class Allegati extends DataClass {
}
}
}
}
@ -288,7 +285,6 @@ class Allegati extends DataClass {
return $response;
}
public static function checkDocumentiObbligatoriCompletati($check = true, $docObbligatori = false, $docCaricati = false) {
$response = false;
@ -351,7 +347,14 @@ class Allegati extends DataClass {
$response = Utils::initDefaultRowsResponse();
$domanda = Domanda::loadDomandaFromAccount();
if (intval($domanda->ID) > 0 && intval($idDocumento) > 0 && $uploadedName != '' && $tipoAllegato != '') {
$idDocumentoEsistente = false;
foreach ($domanda->allegati as $allegato) {
if ($allegato->ID_DOCUMENTO == $idDocumento) {
$idDocumentoEsistente = true;
}
}
if (intval($domanda->ID) > 0 && intval($idDocumento) > 0 && $uploadedName != '' && $tipoAllegato != '' && !$idDocumentoEsistente) {
if ($tipoAllegato == TIPO_UPLOAD_ISTANZA && !self::checkDocumentiObbligatoriCompletati()) {
$response['erroreDescrizione'] = 'Allegare tutti i documenti obbligatori richiesti prima di procedere';
@ -394,16 +397,12 @@ class Allegati extends DataClass {
$fileSource .= $filePath . "/" . $fileNameTmp;
$fileDest = $filePath . "/deleted_" . $fileNameTmp;
if (!file_exists($fileSource) || rename($fileSource, $fileDest)) {
$response['esito'] = 1;
} else {
$response = Utils::initDefaultResponse(-999, "Si è verificato un errore (1571) " . $fileSource);
}
}
}
return $response;
}
@ -434,7 +433,6 @@ class Allegati extends DataClass {
. "LEFT JOIN DOCUMENTI_BANDO B ON B.ID=A.ID_DOCUMENTO "
. "WHERE A.ID_DOMANDA = :id_domanda AND A.CANCELLATO = 0 AND (A.TIPO_DOCUMENTO = " . TIPO_UPLOAD_ISTANZA . " OR B.FILE_DA_GENERARE=1)";
$query = $con->prepare($sql);
$query->bindParam(":id_domanda", $idDomanda);
@ -442,8 +440,6 @@ class Allegati extends DataClass {
$query->execute();
$r = $query->fetchAll(PDO::FETCH_ASSOC);
if (count($r) > 0) {
foreach ($r as $res) {
$allegato = new Allegati($res);
@ -502,7 +498,4 @@ class Allegati extends DataClass {
}
return $response;
}
}

74
lib/classes/Utils/EmailSms.php

@ -356,6 +356,80 @@ class EmailSms {
* Semplice mail che indica il corretto invio della pratica
*/
public static function invioMailPresentazioneDomanda($codice_numerico, $data_presentazione, $email, $desc_bando) {
global $LoggedAccount;
if (!INVIO_EMAIL) {
return 1;
} else {
$url_img = BASE_HTTP . "assets/img/siciliafesr.png";
if (DEMO_CERT) {
$url_img = "https://demo.fitosan.igea-lab.it/siciliafesr.png";
}
$data_presentazione = Utils::dateOracleTimeStamp($data_presentazione, 'd-m-Y H:i');
$anno = date('Ym', strtotime($data_presentazione));
$codice_numerico = $anno . "" . str_pad($codice_numerico, 5, "0", STR_PAD_LEFT);
$testo = 'Gentilissimo, <br><br>la procedura di inoltro della domanda al bando <b>' . $desc_bando . '</b>
è avvenuta con successo.<br>
Di seguito il riepilogo dei dati:
<table style="width: 50%;">
<tbody>
<tr>
<td width="30%">Denominazione Istituto:</td>
<td width="50%"><b>' . $LoggedAccount->DENOMINAZIONE . '</b></td>
</tr>
<tr>
<td width="30%">Codice Meccanografico:</td>
<td width="50%"> <b>' . $LoggedAccount->CODICE_MECCANOGRAFICO . '</b></td>
</tr>
<tr>
<td width="30%">Numero presentazione:</td>
<td width="50%"> <b>' . $codice_numerico . '</b></td>
</tr>
<tr>
<td width="30%">Data presentazione:</td>
<td width="50%"> <b>' . $data_presentazione . '</b></td>
</tr>
</tbody>
</table>
<br>
<table style="width: 100%;">
<tbody>
<tr>
<td>&nbsp;</td>
<td><img width="568" src="' . $url_img . '" alt="Regione Siciliana - PO FESR Sicilia 2014-2020"/></td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>';
date_default_timezone_set('Etc/UTC');
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->CharSet = "UTF-8";
$mail->SMTPDebug = $GLOBALS['EMAIL_CONFIG']['DEBUG'];
$mail->Debugoutput = 'html';
$mail->Host = $GLOBALS['EMAIL_CONFIG']['HOST'];
$mail->Port = $GLOBALS['EMAIL_CONFIG']['PORT'];
$mail->SMTPSecure = $GLOBALS['EMAIL_CONFIG']['SMTP_SECURE'];
$mail->SMTPAuth = $GLOBALS['EMAIL_CONFIG']['SMTP_AUTH'];
$mail->Username = $GLOBALS['EMAIL_CONFIG']['USERNAME'];
$mail->Password = $GLOBALS['EMAIL_CONFIG']['PASSWORD'];
$mail->setFrom($GLOBALS['EMAIL_CONFIG']['FROM'], $GLOBALS['EMAIL_CONFIG']['FROM_DESC']);
$mail->addAddress($email, $email);
$mail->Subject = $GLOBALS['EMAIL_CONFIG']['SUBJECT'];
$mail->msgHTML($testo);
$mail->AltBody = $testo;
if (!$mail->send()) {
$value = "Mailer Error: " . $mail->ErrorInfo;
Utils::print_array($value);
$value = 0;
} else {
$value = 1;
}
}
return $value;
}
public static function invioMailPresentazione($domanda) {
global $con, $LoggedAccount;

191
lib/classes/Utils/File.php

@ -153,26 +153,101 @@ class File {
* Funzioni controllo file
*/
/* * *********************************** TEST GIGI ************************************************** */
// public static function checkFileAllegato($uploadedName = '', $max_file_size = MAX_SIZE_FILE_UPLOAD, $format = 'p7m') {
// $response = Utils::initDefaultResponse();
// if ($uploadedName != '') {
// if (intval($_FILES[$uploadedName]['size']) <= 0) {
// $response['erroreDescrizione'] = "Dimensione file non consistente";
// } else if (intval($_FILES[$uploadedName]['size']) > $max_file_size) {
// $response['erroreDescrizione'] = "Dimensione file non consentita";
// } else if ($_FILES[$uploadedName]['tmp_name'] == "") {
// $response['erroreDescrizione'] = "Nessun file allegato";
// } else {
// $mymeType = self::extractMimeTypeFromFile($_FILES[$uploadedName]['tmp_name']);
// if (ATTIVA_CONTROLLO_MIME_TYPE && $mymeType != MIME_TYPE) {
// $response['erroreDescrizione'] = "Formato del file non valido!";
// } else {
// $response['esito'] = 1;
// $response['filesize'] = intval($_FILES[$uploadedName]['size']);
// $response['name'] = $_FILES[$uploadedName]['name'];
// }
// }
// }
// return $response;
// }
public static function checkFileAllegato($uploadedName = '', $max_file_size = MAX_SIZE_FILE_UPLOAD, $format = 'p7m') {
$response = Utils::initDefaultResponse();
if ($uploadedName != '') {
if (intval($_FILES[$uploadedName]['size']) <= 0) {
if ($uploadedName === '' || !isset($_FILES[$uploadedName])) {
$response['erroreDescrizione'] = "Nessun campo upload trovato";
return $response;
}
$f = $_FILES[$uploadedName];
// error code PHP
if (!isset($f['error']) || $f['error'] !== UPLOAD_ERR_OK) {
$response['erroreDescrizione'] = "Errore upload (code {$f['error']})";
return $response;
}
// size checks
$size = isset($f['size']) ? (int)$f['size'] : 0;
if ($size <= 0) {
$response['erroreDescrizione'] = "Dimensione file non consistente";
} else if (intval($_FILES[$uploadedName]['size']) > $max_file_size) {
return $response;
}
if ($size > (int)$max_file_size) {
$response['erroreDescrizione'] = "Dimensione file non consentita";
} else if ($_FILES[$uploadedName]['tmp_name'] == "") {
return $response;
}
// tmp path
$tmp = isset($f['tmp_name']) ? $f['tmp_name'] : '';
if ($tmp === '' || !is_uploaded_file($tmp)) {
$response['erroreDescrizione'] = "Nessun file allegato";
} else {
$ext = self::extractExtensionFromFile($uploadedName);
if (empty($ext) || $ext != $format) {
return $response;
}
// MIME by content
$mime = self::extractMimeTypeFromFile($tmp);
if (defined('ATTIVA_CONTROLLO_MIME_TYPE') && ATTIVA_CONTROLLO_MIME_TYPE) {
// se hai un solo MIME ammesso (es. application/pdf) usa la tua costante MIME_TYPE
if (defined('MIME_TYPE') && strtolower($mime) !== strtolower(MIME_TYPE)) {
$response['erroreDescrizione'] = "Formato del file non valido!";
} else {
$response['esito'] = 1;
$response['filesize'] = intval($_FILES[$uploadedName]['size']);
$response['name'] = $_FILES[$uploadedName]['name'];
return $response;
}
}
// Anti-polyglot generico: blocca firme di codice/eseguibili
// if (self::hasForbiddenSignatures($tmp)) {
// $response['erroreDescrizione'] = "File non valido [1]"; //Contenuto sospetto (polyglot/signature proibita)
// return $response;
// }
// Hardening specifico PDF
if (strtolower($mime) === 'application/pdf') {
if (!self::pdfHeaderOK($tmp)) {
$response['erroreDescrizione'] = "File non valido [2]"; // Header PDF non valido
return $response;
}
// if (!self::pdfEndsAtEOF($tmp)) {
// $response['erroreDescrizione'] = "File non valido [3]"; //Dati extra dopo %%EOF (possibile polyglot)
// return $response;
// }
// if (self::fileContainsPhpTags($tmp)) {
// $response['erroreDescrizione'] = "File non valido [4]"; //Tag PHP rilevati nel PDF
// return $response;
// }
}
// OK
$response['esito'] = 1;
$response['filesize'] = $size;
$response['name'] = $f['name'];
$response['mime'] = $mime;
return $response;
}
@ -206,6 +281,14 @@ class File {
return $response;
}
public static function extractMimeTypeFromFile($uploadedFile = '') {
$response = "";
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$response = finfo_file($finfo, $uploadedFile);
finfo_close($finfo);
return strtolower($response);
}
public static function extractExtensionFromFile($uploadedName = '') {
$response = "";
if ($uploadedName != '' && isset($_FILES[$uploadedName]) && !empty($_FILES[$uploadedName]['name'])) {
@ -387,4 +470,90 @@ class File {
}
}
/* =================== helper anti-polyglot =================== */
// Firme generiche per bloccare script/eseguibili nascosti in qualunque file
private static function hasForbiddenSignatures(string $path): bool {
$patterns = [
'/<\?(php|\=|\s)/i', // PHP
'/<script\b/i', // HTML/JS
'/^#!\/bin\/(bash|sh|python|perl)/i', // shebang script
'/^\x7fELF/', // binario Linux
'/^MZ/', // eseguibile Windows (PE)
];
$fp = @fopen($path, 'rb');
if (!$fp) return true;
$overlap = '';
while (!feof($fp)) {
$chunk = fread($fp, 8192);
if ($chunk === false) break;
$scan = $overlap . $chunk;
foreach ($patterns as $re) {
if (preg_match($re, $scan)) {
fclose($fp);
return true;
}
}
$overlap = substr($scan, -64);
}
fclose($fp);
return false;
}
private static function fileContainsPhpTags(string $path): bool {
$fp = @fopen($path, 'rb');
if (!$fp) return true;
$overlap = '';
while (!feof($fp)) {
$chunk = fread($fp, 8192);
if ($chunk === false) break;
$scan = $overlap . $chunk;
if (preg_match('/<\?(php|\=|\s)/i', $scan)) {
fclose($fp);
return true;
}
$overlap = substr($scan, -10);
}
fclose($fp);
return false;
}
// Deve iniziare con %PDF-1.[0-7]
private static function pdfHeaderOK(string $path): bool {
$fp = @fopen($path, 'rb');
if (!$fp) return false;
$head = fread($fp, 8);
fclose($fp);
return ($head !== false) && (bool)preg_match('/^%PDF-1\.[0-7]/', $head);
}
// L’ultimo %%EOF deve essere realmente a fine file (solo whitespace dopo)
private static function pdfEndsAtEOF(string $path): bool {
$size = filesize($path);
if ($size === false) return false;
$fp = @fopen($path, 'rb');
if (!$fp) return false;
$tailLen = min(65536, $size);
fseek($fp, -$tailLen, SEEK_END);
$tail = fread($fp, $tailLen);
fclose($fp);
if ($tail === false) return false;
$lastEofPos = strripos($tail, '%%EOF');
if ($lastEofPos === false) return false;
$after = substr($tail, $lastEofPos + 5);
// consenti solo spazio, tab, \n, \r, form-feed
$after = preg_replace('/[\x20\x09\x0A\x0D\x0C]+/', '', $after);
return $after === '';
}
}

17
lib/config/avviso.config.php

@ -179,7 +179,7 @@ define("MIN_DATA_RILASCIO_ISEE_PHP", '01-01-2023'); // Utilizzato per il control
define("TXT_IBAN_EXCLUDE", "<i class='fas fa-exclamation-triangle'></i> N.B.: i Libretti di risparmio postale non sono validi ai fini dell'erogazione del contributo."); // testo per attenzionare il problema degli IBAN
define("TELEFONO_ASSISTENZA", "0918488653");
define("TELEFONO_ASSISTENZA", "0917072393");
define("EMAIL_ASSISTENZA", "infostopcarovoli@regione.sicilia.it");
define("DICHIARAZIONE_RESIDENZA_REGIONE", "Dichiaro di essere residente in Regione Siciliana"
@ -247,8 +247,8 @@ define("MIN_DATA_ACQUISTO_BIGLIETTO_PHP", '10-11-2023'); // Utilizzato per il co
define("MIN_DATA_VOLO", 30);
define("MIN_DATA_CONTRIBUTO", "01-12-2023");
define("MIN_DATA_CONTRIBUTO_JS", "2023-12-01");
define("MAX_DATA_CONTRIBUTO", "31-12-2025");
define("MAX_DATA_CONTRIBUTO_JS", "2025-12-31");
define("MAX_DATA_CONTRIBUTO", "28-02-2026");
define("MAX_DATA_CONTRIBUTO_JS", "2026-02-28");
define("PATH_DECRETI", BASE_HTTP."assets/docs/decreti/");
define("LINK_1_DRS_NOME", "D.R.S. 61 del 31/01/2024 - ANNULLATO");
@ -276,5 +276,14 @@ $SCALI_FASE1 = array("CIA","FCO","LIN","MXP","BGY", "CTA","PMO","TPS","LMP","PNL
define("COMPAGNIE_ADERENTI", "1|28");//aeroitalia e ita
define("SCALI_FASE1", "CIA|FCO|LIN|MXP|BGY|CTA|PMO|TPS|LMP|PNL|CIY");//scali fase 1 js
global $LINK_DECRETI_INDEX, $SCALI_FASE1;
$TRATTE_SOSPESE['CIY']['1'] = '01-11-2025';// COMISO --> AEROITALIA --> dalla data del 01/11/2025 non deve essere consentito inserire il biglietto
$TRATTE_ESCLUSE=array(
1=>array("CIA-CIY", "FCO-CIY", "LIN-CIY", "MXP-CIY", "BGY-CIY",
"CIY-CIA", "CIY-FCO", "CIY-LIN", "CIY-MXP", "CIY-BGY")
);//1 è id AEROITALIA, DENTRO CI SONO LE COMBINAZIONI DELLE TRATTE ESCLUSE
define("DATA_INIZIO_AUTODICHIARAZIONE_SCONTO", "10-03-2025"); // 10-03-2025
global $LINK_DECRETI_INDEX, $SCALI_FASE1, $TRATTE_SOSPESE, $TRATTE_ESCLUSE;

3
lib/config/database.config.php

@ -1,6 +1,6 @@
<?php
define("DBMS", "Oracle");

define("ORACLE_HOST", ""); // DB DEV
define("ORACLE_PORT", "1521"); // DB DEV
define("ORACLE_SERVICE", "xe"); // DB DEV
@ -13,6 +13,7 @@ define("DBMS", "Oracle");
define("DB_USER_SPID", ""); // DB SPID DEV
define("DB_PASS_SPID", ""); // DB SPID DEV
define("CONNESSIONE_OCI_POOLED", false); // DB SPID DEV

?>

8
lib/config/spid.config.php

@ -25,16 +25,12 @@ define("FAKE_SPID", 1); // Enable fake Spid info
//define("WSO2_REDIRECT", "https://siciliapei.regione.sicilia.it/logintest/login.php?dst=".RETURNTOSPID); // Enable wso2
define("WSO2_REDIRECT", "https://siciliapei.regione.sicilia.it/login/login.php?dst=".RETURNTOSPID); // Enable wso2
define("CF_SPID_TEST", "TINIT-BRNMRT80T09M208U"); //LCUMTL80A01F158E";//MNDLCU98T68C933T //BSSMBR54P18H501Q //LCUMTL80A01F158E
define("SPID_TEST_BTN", 0); // Enable fake Spid info
$cfTEST=array(
"TINIT-RMNDLF89A16D976N",// TEST
);
$cfTEST=array();
global $cfTEST;
?>

9
lib/config/sportello.config.php

@ -4,7 +4,7 @@ define("DATA_MANUTENZIONE_INIZIO", '15-03-2024 09:54:00');
define("DATA_MANUTENZIONE_FINE", '15-03-2024 09:55:00');
define("DATA_PREPARAZIONE_INIZIO", '02-12-2023 09:00:00');
define("DATA_PREPARAZIONE_FINE", '30-01-2026 18:00:00');
define("DATA_PREPARAZIONE_FINE", '30-03-2026 18:00:00');
define("DATA_INIZIO_NATIVITA", '07-12-2024 00:00:00');
@ -49,6 +49,11 @@ define("CLICK_DOMANDA_PRESENTATA", 2);
define("CLICK_DAY_CHIUSO", 3);
define("BUDGET_SUPERATO", 4);
define("CLICKDAY_PHP", false);
/*define("SECRET_JWT_KEY", "S1p4rs@!2020_P3i");
define("HOST_CLICKDAY", "http://192.168.1.63"); // PAOLO
define("PATH_CLICKDAY", "/sendDomanda");
define("PORT_CLICKDAY", "8080");
define("WS_CALL_SPORTELLO" , HOST_CLICKDAY.':'.PORT_CLICKDAY.'/');*/
?>

1516
lib/config/stats.php

File diff soppresso perché troppo grande Load Diff

4
lib/config/upload.config.php

@ -8,6 +8,10 @@ define("ROOT_UPLOAD_PRESENTAZIONE_TMP", ROOT_UPLOAD . "presentazionetmp/");
define("ROOT_UPLOAD_PRESENTAZIONE_LOGS_P7M", "presentazionelogsp7m/");
define("ROOT_UPLOAD_PREPARAZIONE", ROOT_UPLOAD . "preparazione/");
/* MIME TYPE */
define("ATTIVA_CONTROLLO_MIME_TYPE", true);
define("MIME_TYPE", "application/pdf");
/* SIZE */
define("MAX_NUM_UPLOAD_OPZ", 5); //MAX Numero file opzionali caricabili

43
modules/private/account.php

@ -63,21 +63,20 @@ $istanza = Domanda::loadDomandaFromAccount();
<div class="form-group row">
<div class="col-sm-6">
<label for="NOME"><span class="text-danger">*&nbsp;</span>Nome</label><br>
<input readOnly type="text" class="form-control cfinput" autocomplete="new-password" required="" name="NOME" id="NOME" value="<?= $LoggedAccount->Anagrafica->NOME ?>">
</div>
<input readOnly type="text" class="form-control cfinput" autocomplete="new-password" required="" name="NOME" id="NOME" value="<?= htmlentities($LoggedAccount->Anagrafica->NOME) ?>"> </div>
<div class="col-sm-6">
<label for="COGNOME"><span class="text-danger">*&nbsp;</span>Cognome</label>
<input readOnly type="text" class="form-control cfinput" autocomplete="new-password" required="" name="COGNOME" id="COGNOME" value="<?= $LoggedAccount->Anagrafica->COGNOME ?>">
<input readOnly type="text" class="form-control cfinput" autocomplete="new-password" required="" name="COGNOME" id="COGNOME" value="<?= htmlentities($LoggedAccount->Anagrafica->COGNOME) ?>">
</div>
</div>
<div class="form-group row">
<div class="col-sm-6">
<label for="CODICE_FISCALE">Codice Fiscale </label>
<input readOnly type="text" class="form-control" required="" name="CODICE_FISCALE" id="CODICE_FISCALE" value="<?= $LoggedAccount->CODICE_FISCALE ?>">
<input readOnly type="text" class="form-control" required="" name="CODICE_FISCALE" id="CODICE_FISCALE" value="<?= htmlentities($LoggedAccount->CODICE_FISCALE) ?>">
</div>
<div class="col-sm-6">
<label for="DATA_NASCITA"><span class="text-danger">*&nbsp;</span>Data di nascita</label>
<input readOnly type="date" class="form-control cfinput" required="" autocomplete="new-password" name="DATA_NASCITA" id="DATA_NASCITA" value="<?= $LoggedAccount->Anagrafica->DATA_NASCITA ?>">
<input readOnly type="date" class="form-control cfinput" required="" autocomplete="new-password" name="DATA_NASCITA" id="DATA_NASCITA" value="<?= htmlentities($LoggedAccount->Anagrafica->DATA_NASCITA) ?>">
</div>
<div class="col-sm-6" hidden>
<label for="SPID_CELLULARE">Cellulare</label>
@ -85,7 +84,7 @@ $istanza = Domanda::loadDomandaFromAccount();
<div class="input-group-prepend">
<div class="input-group-text">+39</div>
</div>
<input readonly type="text" class="form-control" required="" name="SPID_CELLULARE" id="SPID_CELLULARE" value="<?= $LoggedAccount->Anagrafica->SPID_CELLULARE ?>">
<input readonly type="text" class="form-control" required="" name="SPID_CELLULARE" id="SPID_CELLULARE" value="<?= htmlentities($LoggedAccount->Anagrafica->SPID_CELLULARE) ?>">
</div>
</div>
</div>
@ -93,31 +92,31 @@ $istanza = Domanda::loadDomandaFromAccount();
<div class="col-sm-4">
<label for="SPID_CELLULARE">Email</label>
<div class="input-group mb-2">
<input readonly type="text" class="form-control" required="" name="SPID_EMAIL" id="SPID_EMAIL" value="<?= $LoggedAccount->Anagrafica->SPID_EMAIL ?>">
<input readonly type="text" class="form-control" required="" name="SPID_EMAIL" id="SPID_EMAIL" value="<?= htmlentities($LoggedAccount->Anagrafica->SPID_EMAIL) ?>">
</div>
</div>
<div class="col-sm-4">
<label for="SPID_TIPO_DOCUMENTO">Tipo documento</label>
<input readonly type="text" class="form-control" required="" name="SPID_TIPO_DOCUMENTO" id="SPID_TIPO_DOCUMENTO" value="<?= $LoggedAccount->Anagrafica->SPID_TIPO_DOCUMENTO ?>">
<input readonly type="text" class="form-control" required="" name="SPID_TIPO_DOCUMENTO" id="SPID_TIPO_DOCUMENTO" value="<?= htmlentities($LoggedAccount->Anagrafica->SPID_TIPO_DOCUMENTO) ?>">
</div>
<div class="col-sm-4">
<label for="SPID_DOCUMENTO">N.ro Documento</label>
<input readonly type="text" class="form-control" required="" name="SPID_DOCUMENTO" id="SPID_DOCUMENTO" value="<?= $LoggedAccount->Anagrafica->SPID_DOCUMENTO ?>">
<input readonly type="text" class="form-control" required="" name="SPID_DOCUMENTO" id="SPID_DOCUMENTO" value="<?= htmlentities($LoggedAccount->Anagrafica->SPID_DOCUMENTO) ?>">
</div>
</div>
<div class="form-group row" hidden>
<div class="col-sm-4">
<label for="SPID_DOCUMENTO_ENTE">Ente rilascio documento</label>
<input readonly type="text" class="form-control" required="" name="SPID_DOCUMENTO_ENTE" id="SPID_DOCUMENTO_ENTE" value="<?= $LoggedAccount->Anagrafica->SPID_DOCUMENTO_ENTE ?>">
<input readonly type="text" class="form-control" required="" name="SPID_DOCUMENTO_ENTE" id="SPID_DOCUMENTO_ENTE" value="<?= htmlentities($LoggedAccount->Anagrafica->SPID_DOCUMENTO_ENTE) ?>">
</div>
<div class="col-sm-4">
<label for="SPID_DOCUMENTO_RILASCIO">Rilascio Documento</label>
<input readonly type="text" class="form-control" required="" name="SPID_DOCUMENTO_RILASCIO" id="SPID_DOCUMENTO_RILASCIO" value="<?= $LoggedAccount->Anagrafica->SPID_DOCUMENTO_RILASCIO ?>">
<input readonly type="text" class="form-control" required="" name="SPID_DOCUMENTO_RILASCIO" id="SPID_DOCUMENTO_RILASCIO" value="<?= htmlentities($LoggedAccount->Anagrafica->SPID_DOCUMENTO_RILASCIO) ?>">
</div>
<div class="col-sm-4">
<label for="SPID_DOCUMENTO_SCADENZA">Scadenza Documento</label>
<input readonly type="text" class="form-control" required="" name="SPID_DOCUMENTO_SCADENZA" id="SPID_DOCUMENTO_SCADENZA" value="<?= $LoggedAccount->Anagrafica->SPID_DOCUMENTO_SCADENZA ?>">
<input readonly type="text" class="form-control" required="" name="SPID_DOCUMENTO_SCADENZA" id="SPID_DOCUMENTO_SCADENZA" value="<?= htmlentities($LoggedAccount->Anagrafica->SPID_DOCUMENTO_SCADENZA) ?>">
</div>
</div>
</div>
@ -152,16 +151,16 @@ $istanza = Domanda::loadDomandaFromAccount();
<div class="col-sm-3">
<label for="COMUNE_NASCITA"><span class="text-danger">*&nbsp;</span>Comune di nascita</label>
<select <?= $state['readonly'] ?> style="width: 100%" required="" class="form-control cfinput" id="COMUNE_NASCITA" name="COMUNE_NASCITA"></select>
<!--input <?= $state['readonly'] ?> type="text" class="form-control" required="" name="COMUNE_NASCITA" id="COMUNE_NASCITA" value="<?= $LoggedAccount->Anagrafica->COMUNE_NASCITA ?>"-->
<!--input <?= $state['readonly'] ?> type="text" class="form-control" required="" name="COMUNE_NASCITA" id="COMUNE_NASCITA" value="<?= htmlentities($LoggedAccount->Anagrafica->COMUNE_NASCITA) ?>"-->
<small class="text-info">Nel caso in cui il comune di nascita sia in uno Stato estero indicare tale Stato</small>
</div>
<div class="col-sm-3">
<label for="PROV_NASCITA"><span class="text-danger">*&nbsp;</span>Prov. di nascita</label>
<input readonly type="text" class="form-control cfinput" required="" name="PROV_NASCITA" id="PROV_NASCITA" value="<?= $LoggedAccount->Anagrafica->PROV_NASCITA ?>">
<input readonly type="text" class="form-control cfinput" required="" name="PROV_NASCITA" id="PROV_NASCITA" value="<?= htmlentities($LoggedAccount->Anagrafica->PROV_NASCITA) ?>">
</div>
<div class="col-sm-3">
<label for="CAP_NASCITA"><span class="text-danger">*&nbsp;</span>Cap comune di nascita</label>
<input <?= $state['readonly'] ?> autocomplete="new-password" type="text" class="form-control cfinput" required="" name="CAP_NASCITA" maxlength="5" id="CAP_NASCITA" value="<?= $LoggedAccount->Anagrafica->CAP_NASCITA ?>">
<input <?= $state['readonly'] ?> autocomplete="new-password" type="text" class="form-control cfinput" required="" name="CAP_NASCITA" maxlength="5" id="CAP_NASCITA" value="<?= htmlentities($LoggedAccount->Anagrafica->CAP_NASCITA) ?>">
</div>
</div>
<div class="row">
@ -184,26 +183,26 @@ $istanza = Domanda::loadDomandaFromAccount();
<div class="col-sm-6">
<label for="COMUNE_RESIDENZA"><span class="text-danger">*&nbsp;</span>Comune residenza</label>
<select <?= $state['disabled'] ?> autocomplete="new-password" required="" style="width: 100%" class="form-control" id="COMUNE_RESIDENZA" name="COMUNE_RESIDENZA"></select>
<!--input <?= $state['readonly'] ?> type="text" class="form-control" required="" name="COMUNE_RESIDENZA" id="COMUNE_RESIDENZA" value="<?= $LoggedAccount->Anagrafica->COMUNE_RESIDENZA ?>"-->
<!--input <?= $state['readonly'] ?> type="text" class="form-control" required="" name="COMUNE_RESIDENZA" id="COMUNE_RESIDENZA" value="<?= htmlentities($LoggedAccount->Anagrafica->COMUNE_RESIDENZA) ?>"-->
</div>
<div class="col-sm-3">
<label for="PROV_RESIDENZA"><span class="text-danger">*&nbsp;</span>Prov. residenza</label>
<input readonly type="text" autocomplete="new-password" class="form-control" required="" name="PROV_RESIDENZA" id="PROV_RESIDENZA" value="<?= $LoggedAccount->Anagrafica->PROV_RESIDENZA ?>">
<input readonly type="text" autocomplete="new-password" class="form-control" required="" name="PROV_RESIDENZA" id="PROV_RESIDENZA" value="<?= htmlentities($LoggedAccount->Anagrafica->PROV_RESIDENZA) ?>">
</div>
<div class="col-sm-3">
<label for="CAP_RESIDENZA"><span class="text-danger">*&nbsp;</span>Cap residenza</label>
<input <?= $state['readonly'] ?> autocomplete="new-password" type="text" class="form-control" required="" name="CAP_RESIDENZA" id="CAP_RESIDENZA" maxlength="5" value="<?= $LoggedAccount->Anagrafica->CAP_RESIDENZA ?>">
<input <?= $state['readonly'] ?> autocomplete="new-password" type="text" class="form-control" required="" name="CAP_RESIDENZA" id="CAP_RESIDENZA" maxlength="5" value="<?= htmlentities($LoggedAccount->Anagrafica->CAP_RESIDENZA) ?>">
</div>
</div>
<div class="form-group row">
<div class="col-sm-9">
<label for="INDIRIZZO_RESIDENZA"><span class="text-danger">*&nbsp;</span>Indirizzo residenza</label><br>
<input <?= $state['readonly'] ?> autocomplete="new-password" type="text" class="form-control" required="" name="INDIRIZZO_RESIDENZA" id="INDIRIZZO_RESIDENZA" value="<?= $LoggedAccount->Anagrafica->INDIRIZZO_RESIDENZA ?>">
<input <?= $state['readonly'] ?> autocomplete="new-password" type="text" class="form-control" required="" name="INDIRIZZO_RESIDENZA" id="INDIRIZZO_RESIDENZA" value="<?= htmlentities($LoggedAccount->Anagrafica->INDIRIZZO_RESIDENZA) ?>">
</div>
<div class="col-sm-3">
<label for="CIVICO_RESIDENZA"><span class="text-danger">*&nbsp;</span>Civico residenza</label>
<input <?= $state['readonly'] ?> autocomplete="new-password" type="text" class="form-control" required="" name="CIVICO_RESIDENZA" id="CIVICO_RESIDENZA" maxlength="5" value="<?= $LoggedAccount->Anagrafica->CIVICO_RESIDENZA ?>">
<input <?= $state['readonly'] ?> autocomplete="new-password" type="text" class="form-control" required="" name="CIVICO_RESIDENZA" id="CIVICO_RESIDENZA" maxlength="5" value="<?= htmlentities($LoggedAccount->Anagrafica->CIVICO_RESIDENZA) ?>">
</div>
</div>
<div class="row">
@ -211,11 +210,11 @@ $istanza = Domanda::loadDomandaFromAccount();
<div class="form-group row">
<div class="col-sm-6">
<label for="tel" ><span class="text-danger">*&nbsp;</span>Telefono </label><br>
<input <?= $state['readonly'] ?> autocomplete="new-password" required type="text" class="form-control" value="<?= $LoggedAccount->Anagrafica->RECAPITO ?>" id="RECAPITO" name="RECAPITO" >
<input <?= $state['readonly'] ?> autocomplete="new-password" required type="text" class="form-control" value="<?= htmlentities($LoggedAccount->Anagrafica->RECAPITO) ?>" id="RECAPITO" name="RECAPITO" >
</div>
<div class="col-sm-6">
<label for="pec" ><span class="text-danger">*&nbsp;</span>E-MAIL </label>
<input <?= $state['readonly'] ?> autocomplete="new-password" required type="email" value="<?= $LoggedAccount->Anagrafica->EMAIL ?>" class="form-control" name="EMAIL" >
<input <?= $state['readonly'] ?> autocomplete="new-password" required type="email" value="<?= htmlentities($LoggedAccount->Anagrafica->EMAIL) ?>" class="form-control" name="EMAIL" >
<!-- <label for="pec" ><span class="text-danger">*&nbsp;</span>PEC</label><br>
<input <?= $readOnlyTxt ?> required type="email" value="<?= $LoggedAccount->Anagrafica->PEC ?>" class="form-control" name="PEC" >-->
</div>

2
modules/private/gestione_allegati.php

@ -136,7 +136,7 @@ if(intval($istanza->STATO) == ANNULLATA){
<input type="hidden" name="ID" id="id_allegato">
<input type="hidden" name="module" id="module">
<input type="hidden" name="action" id="action">
<input class="form-control" type="file" id="documento" name="documento" required>
<input accept="application/pdf" class="form-control" type="file" id="documento" name="documento" required>
</div>
</div>

10
modules/private/page_nucleo_familiare.php

@ -74,12 +74,12 @@ if ($componente->ID > 0 && $componente->ID_ACCOUNT != $LoggedAccount->ID) {
<div class="row">
<div class='col-sm-6'>
<label for="COGNOME">Cognome:<span class="text-danger">*&nbsp;</span></label>
<input type="text" required autocomplete="new-password" maxlength="150" class="form-control" id="COGNOME" name="COGNOME" value="<?= $componente->COGNOME ?>">
<input type="text" required autocomplete="new-password" maxlength="150" class="form-control" id="COGNOME" name="COGNOME" value="<?= htmlentities($componente->COGNOME) ?>">
</div>
<div class='col-sm-6'>
<label for="NOME">Nome:<span class="text-danger">*&nbsp;</span></label>
<input type="text" autocomplete="new-password" maxlength="150" required class="form-control" id="NOME" name="NOME" value="<?= $componente->NOME ?>">
<input type="text" autocomplete="new-password" maxlength="150" required class="form-control" id="NOME" name="NOME" value="<?= htmlentities($componente->NOME) ?>">
</div>
</div>
</div>
@ -87,7 +87,7 @@ if ($componente->ID > 0 && $componente->ID_ACCOUNT != $LoggedAccount->ID) {
<div class='row'>
<div class='col-sm-6'>
<label for="CODICE_FISCALE" >Codice Fiscale:<span class="text-danger">*&nbsp;</span></label>
<input type="text" autocomplete="new-password" required minlength="16" maxlength="16" class="form-control" id="CODICE_FISCALE" name="CODICE_FISCALE" value="<?= $componente->CODICE_FISCALE ?>">
<input type="text" autocomplete="new-password" required minlength="16" maxlength="16" class="form-control" id="CODICE_FISCALE" name="CODICE_FISCALE" value="<?= htmlentities($componente->CODICE_FISCALE) ?>">
</div>
<div class='col-sm-6'>
@ -113,11 +113,11 @@ if ($componente->ID > 0 && $componente->ID_ACCOUNT != $LoggedAccount->ID) {
</div>
<div class='col-sm-3'>
<label for="PROV_RESIDENZA">Provincia di Residenza:<span class="text-danger">*&nbsp;</span></label>
<input type="text" autocomplete="new-password" required="" style="width: 100%" class="form-control" id="PROV_RESIDENZA" name="PROV_RESIDENZA" value="<?= $componente->PROV_RESIDENZA ?>">
<input type="text" autocomplete="new-password" required="" style="width: 100%" class="form-control" id="PROV_RESIDENZA" name="PROV_RESIDENZA" value="<?= htmlentities($componente->PROV_RESIDENZA) ?>">
</div>
<div class='col-sm-3'>
<label for="CAP_RESIDENZA">CAP di Residenza:<span class="text-danger">*&nbsp;</span></label>
<input type="text" autocomplete="new-password" required="" style="width: 100%" class="form-control" id="CAP_RESIDENZA" name="CAP_RESIDENZA" value="<?= $componente->CAP_RESIDENZA ?>">
<input type="text" autocomplete="new-password" required="" style="width: 100%" class="form-control" id="CAP_RESIDENZA" name="CAP_RESIDENZA" value="<?= htmlentities($componente->CAP_RESIDENZA) ?>">
</div>
</div>
</div>

17
modules/private/page_sconto.php

@ -215,6 +215,12 @@ if ($oggiMeno30 < $data_inizio_bando) {
</div>
</div>
<!--id="rigaForzaResidenza"-->
<?
$dataAcquisto = new DateTime($sconto->DATA_ACQUISTO);
$dataAutodichiearazione = new DateTime(DATA_INIZIO_AUTODICHIARAZIONE_SCONTO);
if($dataAcquisto >= $dataAutodichiearazione){?>
<div class="form-group mb-3" id="rigaForzaResidenza">
<div class="row row-group card border-secondary mb-3 p-2">
<div class="col-lg-12">
@ -247,6 +253,9 @@ if ($oggiMeno30 < $data_inizio_bando) {
</div>
</div>-->
</div>
<?}
?>
<? if ($sconto->STATO == RS_IN_ELABORAZIONE) { ?>
<div class="form-group">
<div class="row">
@ -268,7 +277,7 @@ if ($oggiMeno30 < $data_inizio_bando) {
</div>
<div class="input-group custom-file-button">
<label class="input-group-text" for="FILEPATH_BIGLIETTO">Scegli il file</label>
<input type="file" class="form-control" name="FILEPATH_BIGLIETTO" id="FILEPATH_BIGLIETTO" required>
<input type="file" accept="application/pdf" class="form-control" name="FILEPATH_BIGLIETTO" id="FILEPATH_BIGLIETTO" required>
</div>
</div>
</div>
@ -301,7 +310,7 @@ if ($oggiMeno30 < $data_inizio_bando) {
</div>
<div class="input-group custom-file-button">
<label class="input-group-text" for="FILEPATH_BIGLIETTO">Sostituisci il file</label>
<input type="file" class="form-control" name="FILEPATH_BIGLIETTO" id="FILEPATH_BIGLIETTO">
<input type="file" accept="application/pdf" class="form-control" name="FILEPATH_BIGLIETTO" id="FILEPATH_BIGLIETTO">
</div>
</div>
</div>
@ -329,7 +338,7 @@ if ($oggiMeno30 < $data_inizio_bando) {
</div>
<div class="input-group custom-file-button">
<label class="input-group-text" for="FILEPATH_CARTAIMBARCO">Scegli il file</label>
<input type="file" class="form-control" name="FILEPATH_CARTAIMBARCO" id="FILEPATH_CARTAIMBARCO" required>
<input type="file" accept="application/pdf" class="form-control" name="FILEPATH_CARTAIMBARCO" id="FILEPATH_CARTAIMBARCO" required>
</div>
</div>
</div>
@ -362,7 +371,7 @@ if ($oggiMeno30 < $data_inizio_bando) {
</div>
<div class="input-group custom-file-button">
<label class="input-group-text" for="FILEPATH_CARTAIMBARCO">Sostituisci il file</label>
<input type="file" class="form-control" name="FILEPATH_CARTAIMBARCO" id="FILEPATH_CARTAIMBARCO">
<input type="file" accept="application/pdf" class="form-control" name="FILEPATH_CARTAIMBARCO" id="FILEPATH_CARTAIMBARCO">
</div>
</div>
</div>

7
statistiche.php

@ -4,7 +4,8 @@ include 'lib/api.php';
if ($_POST['periodo']) {
$periodo = Utils::get_filter_string_POST('periodo');
} else {
$periodo = date("m/Y");
// $periodo = date("m/Y");
$periodo = "DATI COMPLETI";
}
$elencoRichieste= Utils::elaboraStatistiche($STATS_RICHIESTE);
$dati = array();
@ -46,7 +47,7 @@ if (array_key_exists($periodo, $elencoRichieste)) {
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<div class="row">
<!-- <div class="row">
<div class="col-sm-12">
<label for="periodo" class='h5'>Periodo di interesse:</label>
<select class="form-control" id='periodo' onchange='settaPeriodo(this)'>
@ -56,7 +57,7 @@ if (array_key_exists($periodo, $elencoRichieste)) {
<? } ?>
</select>
</div>
</div>
</div>-->
<? if (count($dati) > 0) { ?>
<div class='row mt-3'>
<div class="col-sm-6">

4
webservice/domanda.php

@ -206,7 +206,7 @@ function saveAllegato() {
$fileFullPath = $folder . "/" . $fileName;
$fileFullPathEstratto = $folder . "/" . $nomeFileTmp . ".pdf";
$fileFullPathEstrattoPem = $folder . "/" . $nomeFileTmp . ".pem";
if (copy($_FILES[$uploadedName]['tmp_name'], $fileFullPath)) { //move_uploaded_file
if (move_uploaded_file($_FILES[$uploadedName]['tmp_name'], $fileFullPath)) { //move_uploaded_file
if (File::checkMd5File($_FILES[$uploadedName]['tmp_name'], $fileFullPath)) {
$codicefiscaleFirmatario = $LoggedAccount->CODICE_FISCALE;
$hashfileDaControllare = $domanda->HASH_ALLEGATO2;
@ -232,7 +232,7 @@ function saveAllegato() {
} else {
$fileFullPath = $folder . "/" . $fileName;
$md5File = File::getSha256File($_FILES[$uploadedName]['tmp_name']);
if (copy($_FILES[$uploadedName]['tmp_name'], $fileFullPath)) {
if (move_uploaded_file($_FILES[$uploadedName]['tmp_name'], $fileFullPath)) {
$allegato->FILEPATH = $fileName;
$allegato->FILESIZE = filesize($fileFullPath);
$allegato->TIPO_DOCUMENTO = $pathInfo["TIPO_DOCUMENTO"];

36
webservice/sconto.php

@ -26,6 +26,26 @@ function saveSconto() {
}
$istanza = Domanda::loadDomandaFromAccount();
$idDomandaSconto = intval(Utils::get_filter_int_POST('ID'));
if ($idDomandaSconto > 0) {
$idIstanzaMia = false;
foreach ($istanza->richieste_sconti as $mieiSconti) {
if ($mieiSconti['ID'] == $idDomandaSconto) {
$idIstanzaMia = true;
}
}
} else {
$idIstanzaMia = true;
}
if (!$idIstanzaMia) {
$return['erroreDescrizione'] = "Accesso non consentito (0)";
exit(json_encode($return));
}
// Utils::print_array($istanza);
// exit();
DomandaSconti::checkVerificaDatiPreSalvataggio();
$richiesta = new DomandaSconti($_POST);
@ -35,12 +55,12 @@ function saveSconto() {
$md5FileCartaImbarco = File::getSha256File($_FILES['FILEPATH_CARTAIMBARCO']['tmp_name']);
$folder = $istanza->generateDirForUpload(ROOT_UPLOAD_PRESENTAZIONE, 'biglietti');
if ($folder) {
if ($_FILES['FILEPATH_BIGLIETTO']) {
if ($_FILES['FILEPATH_BIGLIETTO']['size'] > 0) {
$respBiglietto = File::checkFileAllegato('FILEPATH_BIGLIETTO', MAX_SIZE_FILE, 'pdf');
if ($respBiglietto['esito'] == 1) {
$fileNameBiglietto = time() . "_" . $richiesta->CODICE_FISCALE . "_BE_" . $richiesta->NUMERO_VOLO . "_" . File::GetValidFilename($_FILES['FILEPATH_BIGLIETTO']['name']);
$fileNameBiglietto = time() . "_" . $richiesta->CODICE_FISCALE . "_BE_" . File::GetValidName($richiesta->NUMERO_VOLO) . "_" . File::GetValidFilename($_FILES['FILEPATH_BIGLIETTO']['name']);
$fileFullPathBiglietto = $folder . "/" . $fileNameBiglietto;
if (copy($_FILES['FILEPATH_BIGLIETTO']['tmp_name'], $fileFullPathBiglietto)) {
if (move_uploaded_file($_FILES['FILEPATH_BIGLIETTO']['tmp_name'], $fileFullPathBiglietto)) {
if ($richiesta->FILEPATH_BIGLIETTO != "") {
unlink($folder . "/" . $richiesta->FILEPATH_BIGLIETTO);
}
@ -49,19 +69,21 @@ function saveSconto() {
} else {
$response['esito'] = -999;
$response['erroreDescrizione'] = "Al momento non è possibile allegare il file, contattare un amministratore! (10996)";
exit(json_encode($response));
}
} else {
$response['esito'] = -999;
$response['erroreDescrizione'] = $respBiglietto['erroreDescrizione'];
exit(json_encode($response));
}
}
if ($_FILES['FILEPATH_CARTAIMBARCO']) {
if ($_FILES['FILEPATH_CARTAIMBARCO']['size'] > 0) {
$respImbarco = File::checkFileAllegato('FILEPATH_CARTAIMBARCO', MAX_SIZE_FILE, 'pdf');
if ($respImbarco['esito'] == 1) {
$fileNameImbarco = time() . "_" . $richiesta->CODICE_FISCALE . "_CI_" . $richiesta->NUMERO_VOLO . "_" . File::GetValidFilename($_FILES['FILEPATH_CARTAIMBARCO']['name']);
$fileNameImbarco = time() . "_" . $richiesta->CODICE_FISCALE . "_CI_" . File::GetValidName($richiesta->NUMERO_VOLO) . "_" . File::GetValidFilename($_FILES['FILEPATH_CARTAIMBARCO']['name']);
$fileFullPathImbarco = $folder . "/" . $fileNameImbarco;
if (copy($_FILES['FILEPATH_CARTAIMBARCO']['tmp_name'], $fileFullPathImbarco)) {
if (move_uploaded_file($_FILES['FILEPATH_CARTAIMBARCO']['tmp_name'], $fileFullPathImbarco)) {
if ($richiesta->FILEPATH_CARTAIMBARCO != "") {
unlink($folder . "/" . $richiesta->FILEPATH_CARTAIMBARCO);
}
@ -70,10 +92,12 @@ function saveSconto() {
} else {
$response['esito'] = -999;
$response['erroreDescrizione'] = "Al momento non è possibile allegare il file, contattare un amministratore! (10996)";
exit(json_encode($response));
}
} else {
$response['esito'] = -999;
$response['erroreDescrizione'] = $respImbarco['erroreDescrizione'];
exit(json_encode($response));
}
}
}

Caricamento…
Annulla
Salva