gestione gare pubbliche
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

<?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);
}
}
}
?>