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()) { ?> = __("Richieste della Stazione Appaltante"); ?> if (!empty($moreInfo)) { echo $moreInfo; } ?> } } /** * 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(); ?>