Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
204 righe
8.9 KiB
204 righe
8.9 KiB
<?php |
|
|
|
class publicRichiesteOE extends richiesteOE { |
|
|
|
public $operatore; |
|
|
|
public function tipologie() { |
|
return self::moduliAbilitati() ?? []; |
|
} |
|
|
|
|
|
public function __construct($modulo=null,$elemento=null,$sub = 0) { |
|
if (!empty($_SESSION["utente"]->oe)) { |
|
global $pdo; |
|
$this->modulo = $modulo; |
|
$this->elemento = $elemento; |
|
$this->gestore = $_SESSION["ente"]->codice; |
|
$this->operatore = $_SESSION["utente"]->oe["codice"]; |
|
$this->sub = $sub; |
|
$this->db = $pdo; |
|
return $this; |
|
} else { |
|
return false; |
|
} |
|
} |
|
|
|
public function getRichieste($attivi="S",$filters=[],$order=["scadenza"=>"ASC"],$start=0,$limit=-1) { |
|
$sql = "SELECT b_richieste_oe.codice |
|
FROM b_richieste_oe JOIN r_richieste_oe ON b_richieste_oe.codice = r_richieste_oe.codice_richiesta |
|
WHERE b_richieste_oe.codice_ente = :gestore |
|
AND b_richieste_oe.attivo = 'S' AND b_richieste_oe.soft_delete = 'N' AND r_richieste_oe.codice_operatore = :operatore "; |
|
$bind = [":gestore"=>$this->gestore,":operatore"=>$this->operatore]; |
|
if (!empty($this->modulo)) { |
|
$bind[":modulo"] = $this->modulo; |
|
$sql .= " AND b_richieste_oe.modulo = :modulo "; |
|
} |
|
if (!empty($filters["non_scadute"])) { |
|
$sql .= " AND b_richieste_oe.scadenza > now() "; |
|
} |
|
if (!empty($filters["scadute"])) { |
|
$sql .= " AND b_richieste_oe.scadenza <= now() "; |
|
} |
|
if (!empty($this->elemento)) { |
|
$bind[":elemento"] = $this->elemento; |
|
$sql .= " AND b_richieste_oe.codice_elemento = :elemento "; |
|
} |
|
if (!empty($this->elemento)) { |
|
$bind[":sub"] = $this->sub; |
|
$sql .= " AND b_richieste_oe.sub = :sub "; |
|
} |
|
$codici = $this->db->go($sql,$bind); |
|
if ($codici->rowCount() > 0) { |
|
$tmp = []; |
|
while($codice = $codici->fetch(PDO::FETCH_ASSOC)) { |
|
$codice = $codice["codice"]; |
|
if (!isset($filters["codice"]) || (isset($filters["codice"]) && is_numeric($filters["codice"]) && $codice == $filters["codice"])) { |
|
$tmp[] = $codice; |
|
} |
|
} |
|
if (!empty($tmp)) { |
|
$filters["codice"] = $tmp; |
|
return parent::getRichieste("S",$filters,$order,$start,$limit); |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public function printRequestButton($moreInfo = null) { |
|
if ($this->getRichieste()) { |
|
?> |
|
<a class="btn btn-block btn-warning" href="/richieste/index.php?modulo=<?= $this->modulo ?>&codice_elemento=<?= $this->elemento ?>&sub=<?= $this->sub ?>"> |
|
<span class="fa fa-upload"></span> <?= __("Richieste della Stazione Appaltante"); ?> |
|
<? if (!empty($moreInfo)) { |
|
echo $moreInfo; |
|
} ?> |
|
</a> |
|
<? |
|
} |
|
} |
|
|
|
/** |
|
* Salva la risposta ad una richiesta di integrazione |
|
* |
|
* @param array $data ["codice"=>Codice della richiesta,"codice_relazione" => Relazione tra la richiesta e l'OE, "filechunk" => Nome del file caricato dall'utente tramite il chunker] |
|
* |
|
* @return Array |
|
*/ |
|
public function saveRisposta(Array $data = []) : Array { |
|
$tmp = $this->getRichieste("S",["codice"=>$data["codice"] ?? -1]); |
|
$return = ["error"=>true,"codice"=>400,"descrizione"=>__("Richiesta sconosciuta")]; |
|
if (!empty($tmp)) { |
|
$richiesta = reset($tmp); |
|
$this->modulo = $richiesta["modulo"]; |
|
$this->elemento = $richiesta["codice_elemento"]; |
|
$this->sub = $richiesta["sub"]; |
|
$this->getInfoProcedura(); |
|
$relazione = $this->getContent($richiesta["codice"],$data["codice_relazione"]); |
|
if (!empty($relazione)) { |
|
if (strtotime($richiesta["scadenza"]) > time()) { |
|
if (strpos($data["filechunk"], "../")===false) { |
|
global $config; |
|
$chunkPath = $config["chunk_folder"]."/".$_SESSION["utente"]->codice."/".$data["filechunk"]; |
|
$p7m = new P7Manager($chunkPath); |
|
if ($p7m !== false) { |
|
if ($richiesta["firma"] == "N" || $p7m->checkSignatures()) { |
|
$risposta = array(); |
|
$password = generateStrongPassword(); |
|
$risposta["codice"] = $relazione["codice"]; |
|
$risposta["md5"] = $p7m->getHash("md5"); |
|
$risposta["sha1"] = $p7m->getHash("sha1"); |
|
$risposta["sha256"] = $p7m->getHash("sha256"); |
|
$risposta["content"] = base64_encode($password); |
|
$risposta["timestamp_trasmissione"] = date('Y-m-d H:i:s'); |
|
$fileMime = getTypeAndExtension($chunkPath); |
|
$risposta["mime"] = $fileMime["type"]; |
|
$risposta["nomeFile"] = sanitize_string($data["filechunk"]); |
|
$content = simple_encrypt($p7m->fileContent,$password); |
|
$path = $relazione["dir"] . "/" . $risposta["sha1"]; |
|
if (!empty($risposta["content"]) && file_put_contents($path,$content)) { |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "r_richieste_oe"; |
|
$salva->operazione = "UPDATE"; |
|
$salva->oggetto = $risposta; |
|
$codice_risposta = $salva->save(); |
|
if ($codice_risposta > 0) { |
|
ob_start(); |
|
?> |
|
<h3><?= $richiesta["titolo"] ?></h3> |
|
<div class="alert alert-success h1"> |
|
<?= __("Trasmissione effettuata con successo") ?> |
|
</div> |
|
<div class="card card-body mb-2"> |
|
<h3><?= __('timestamp') ?> - <?= mysql2datetime($risposta["timestamp_trasmissione"]) ?></h3> |
|
<ul> |
|
<li>HASH MD5: <strong><?= $risposta["md5"] ?></strong></li> |
|
<li>HASH SHA1: <strong><?= $risposta["sha1"] ?></strong></li> |
|
<li>HASH SHA256: <strong><?= $risposta["sha256"] ?></strong></li> |
|
</ul> |
|
</div> |
|
<? |
|
$html_msg = ob_get_clean(); |
|
$return = ["error"=>false,"result"=>$html_msg]; |
|
if ($richiesta["modulo"] != "concorsi") { |
|
$corpo = purify($html_msg); |
|
$dettagliTipologiaRichiesta = richiesteOE::ModuliAbilitati()[$richiesta["modulo"]]; |
|
$infoModulo = Modulo::getInfo($dettagliTipologiaRichiesta["modulo_riferimento"]); |
|
$tipologia = $dettagliTipologiaRichiesta["tipologie"][$richiesta["tipologia"]]; |
|
|
|
$mailer = new Communicator(); |
|
$mailer->oggetto = __($infoModulo["titolo"]) . " - " . __("Trasmissione") . " " . $tipologia; |
|
$mailer->corpo = $corpo; |
|
$mailer->codice_pec = $this->getObject()->info["codice_pec"] ?? 0; |
|
$mailer->comunicazione = true; |
|
$mailer->sezione = $richiesta["modulo"]; |
|
$mailer->codice_gara = $richiesta["codice_elemento"]; |
|
$mailer->coda = false; |
|
$mailer->destinatari = $_SESSION["utente"]->oe["codice"]; |
|
$mailer->send(); |
|
|
|
$mailer->codice_pec = -1; |
|
$mailer->comunicazione = false; |
|
$mailer->destinatari = Communicator::getPecAddress($this->codice_pec); |
|
$mailer->send(); |
|
} |
|
$this->postRisposta($data); |
|
} else { |
|
$return = ["error"=>true,"descrizione"=>__('errore nel salvataggio'),"codice"=>"#000"]; |
|
} |
|
} else { |
|
$return = ["error"=>true,"descrizione"=> __('errore nel salvataggio'),"codice"=>"#001"]; |
|
} |
|
unlink($chunkPath); |
|
} else { |
|
$return = ["error"=>true,"descrizione"=>__("errore firma digitale"),"codice"=>"#002"]; |
|
} |
|
} else { |
|
$return = ["error"=>true,"descrizione"=>__("errore upload"),"codice"=>"#003"]; |
|
} |
|
} else { |
|
$return = ["error"=>true,"descrizione"=>__("errore upload"),"codice"=>"#004"]; |
|
} |
|
} |
|
} |
|
} |
|
return $return; |
|
} |
|
|
|
/** |
|
* Controlla se l'oggetto di riferimento prevede delle operazioni post risposta dell'operatore economico e lo invoca |
|
* |
|
* @param Array $data |
|
* @return void |
|
*/ |
|
public function postRisposta(Array $data) { |
|
$obj = $this->getObject(); |
|
if (method_exists($obj,"postRispostaRichiesteOE")) { |
|
$obj->postRispostaRichiesteOE($data); |
|
} |
|
} |
|
} |
|
|
|
?>
|