"pcp","titolo"=>"Appalti pre-commerciali","returnURL"=>"/backend/pcp/panel.php","script"=>"/pcp/richieste/init.php","tipologie"=>["soccorso"=>"Soccorso istruttorio","integrazione"=>"Integrazione"]]; $return["pcp-deliverables"] = ["modulo_riferimento"=> "pcp","titolo"=>"Deliverables","returnURL"=>"/backend/pcp/panel.php","script"=>"/pcp/esecuzione/init.php","tipologie"=>["deliverable"=>"Deliverable"]]; $return["contratti"] = ["modulo_riferimento"=> "contratti","titolo"=>"Stipula contratti","returnURL"=>"/backend/contratti/panel.php","script"=>"/contratti/richieste/init.php","tipologie"=>["integrazione"=>"Documenti stipula"]]; $return["omc"] = ["modulo_riferimento"=> "omc","titolo"=>"Consultazioni","returnURL"=>"/backend/omc/panel.php","script"=>"/omc/richieste/init.php","tipologie"=>["materiale"=>"Materiale"]]; $return["gare"] = ["modulo_riferimento"=> "gare","titolo"=>"Appalti pre-commerciali","returnURL"=>"/backend/gare/panel.php","script"=>"/gare/richieste/init.php","tipologie"=>["soccorso"=>"Soccorso istruttorio","anomalie"=>"Verifica anomalie","integrazione"=>"Integrazione"]]; $return["concorsi"] = ["modulo_riferimento"=> "concorsi","titolo"=>"Appalti pre-commerciali","returnURL"=>"/backend/concorsi/panel.php","script"=>"/concorsi/richieste/init.php","tipologie"=>["soccorso"=>"Soccorso istruttorio","integrazione"=>"Integrazione"]]; $return["albo_fornitori"] = ["modulo_riferimento"=> "albo_fornitori","titolo"=>"Elenchi fornitori","returnURL"=>"/backend/albo_fornitori/partecipanti/dettaglio.php","script"=>"/albo_fornitori/partecipanti/richieste/init.php","tipologie"=>["soccorso"=>"Soccorso istruttorio","integrazione"=>"Integrazione"]]; $return["albi_commissione"] = ["modulo_riferimento"=> "albi_commissione","titolo"=>"Albi Commissione","returnURL"=>"/backend/albi_commissione/partecipanti/dettaglio.php","script"=>"/albi_commissione/partecipanti/richieste/init.php","riferimento_partecipante"=>"utente","tipologie"=>["soccorso"=>"Soccorso istruttorio","integrazione"=>"Integrazione"]]; return $return; } public function tipologie() { return self::moduliAbilitati()[$this->modulo]["tipologie"] ?? []; } public function __construct($modulo=null,$elemento=null,$sub = 0) { if (!empty($modulo) && !empty($elemento)) { if (!empty(self::moduliAbilitati()[$modulo])) { global $pdo; $this->modulo = $modulo; $this->elemento = $elemento; $this->gestore = $_SESSION["ente"]->codice; $this->sub = $sub; $this->db = $pdo; $this->elemento_comunicazione = null; $this->modulo_riferimento = $this->getModuloRiferimento(); return $this; } } return false; } public function getDerivate($codice_richiesta) { $return = []; $tmp = $this->getRichieste("S",["codice_derivazione"=>$codice_richiesta]); if (!empty($tmp)) { foreach($tmp AS $richiesta) { $return[$richiesta["codice"]] = $richiesta; $derivate = $this->getDerivate($richiesta["codice"]); if (!empty($derivate)) { $return += $derivate; } } } return $return; } public function getFilePath($relazione) { $dir = $this->getDir($relazione["codice_richiesta"],$relazione["codice"]); if (!empty($dir) && !empty($relazione["sha1"])) { return "{$dir}/{$relazione["sha1"]}"; } } public function getDir($codice_richiesta,$codice_relazione) { global $config; $path = "{$config["mediaFolder"]}/{$_SESSION["ente"]->codice}/risposte-oe/{$codice_richiesta}/{$codice_relazione}"; if (!is_dir($path)) { mkdir($path,0777,true); } if (is_dir($path)) { return $path; } } public function getRichieste($attivi="S",$filters=[],$order=[],$start=0,$limit=-1) { $sql = "SELECT * FROM b_richieste_oe WHERE codice_ente = :codice_ente AND soft_delete = 'N' "; $bind = [":codice_ente"=>$this->gestore]; if (!empty($this->modulo)) { $bind[":modulo"] = $this->modulo; $sql .= " AND modulo = :modulo " ; } if (!empty($this->elemento)) { $bind[":elemento"] = $this->elemento; $sql .= " AND codice_elemento = :elemento " ; } if (!empty($this->sub)) { $bind[":sub"] = $this->sub; $sql .= " AND sub = :sub " ; } if ($attivi == "S") { $sql .= " AND attivo = 'S' "; } if (!empty($filters["non_scadute"])) { $sql .= " AND b_richieste_oe.scadenza > now() "; } if (!empty($filters)) { $keys = ["titolo","testo","tipologia"]; $addWhere = []; foreach($keys AS $key) { if (isset($filters[$key]) || isset($filters["*"])) { $value = $filters[$key] ?? $filters["*"]; $sudd = suddivisione_pdo($value,$key); if (!empty($sudd)) { $bind = $bind + $sudd["bind"]; $addWhere[] = $sudd["sql"]; } } } if (count($addWhere) > 0) { $sql .= " AND (" . implode(" OR ",$addWhere) . ") "; } if (isset($filters["codice"])) { if (is_numeric($filters["codice"])) { $bind[":codice"] = (int)$filters["codice"]; $sql .= " AND codice = :codice "; } else if (is_array($filters["codice"]) && !empty($filters["codice"])) { $cont = 0; $codici = []; foreach($filters["codice"] AS $codice) { if (is_numeric($codice)) { $cont++; $bind[":codice_{$cont}"] = (int)$codice; $codici[] = "codice = :codice_{$cont}"; } } if (!empty($codici)) { $sql .= " AND (" . implode(" OR ",$codici) . ") "; } else { return false; } } else { return false; } } if (isset($filters["codice_derivazione"])) { if (is_numeric($filters["codice_derivazione"])) { $bind[":codice_derivazione"] = (int)$filters["codice_derivazione"]; $sql .= " AND codice_derivazione = :codice_derivazione "; } else { return false; } } } if (!empty($order)) { $keys = ["timestamp","data","codice","titolo","scadenza","apertura"]; $sortArray = []; foreach($keys AS $key) { if (isset($order[$key])) { if (strcmp($order[$key],"ASC") === 0) { $sortArray[] = "{$key} ASC"; } else { $sortArray[] = "{$key} DESC"; } } } if (count($sortArray) > 0) { $sql .= " ORDER BY " . implode(",",$sortArray); } } else { $sql .= " ORDER BY data DESC"; } if (is_numeric($limit) && is_numeric($start) && $limit != -1) { $start = (int)$start; $limit = (int)$limit; $sql .= " LIMIT {$start}, {$limit}"; } $return = $this->db->go($sql,$bind)->fetchAll(PDO::FETCH_ASSOC); return $return; } public function getContent($codice_richiesta,$codice_relazione, $decrypt = false) { $info = $this->getRichieste("S",["codice"=>$codice_richiesta]); if (!empty($info)) { $info = $info[0]; $bind = [":codice_richiesta"=>$info["codice"]]; $bind[":codice_relazione"] = $codice_relazione; $sql = "SELECT * FROM r_richieste_oe WHERE codice_richiesta = :codice_richiesta AND r_richieste_oe.codice = :codice_relazione "; $return = $this->db->go($sql,$bind)->fetch(PDO::FETCH_ASSOC); if(! empty($return)) { $return["dir"] = $this->getDir($return["codice_richiesta"],$return["codice"]); $return["file"] = $this->getFilePath($return); if($decrypt && ! empty($return["file"])) { $content = simple_decrypt(file_get_contents($return["file"]),base64_decode($return["content"])); $return["content"] = $content; } return $return; } } return false; } public function getOE($codice_richiesta,$codice_operatore = NULL) { $info = $this->getRichieste("N",["codice"=>$codice_richiesta])[0] ?? null; if (!empty($info["codice"])) { $bind = [":codice_richiesta"=>$info["codice"]]; $sql = "SELECT r_richieste_oe.codice, r_richieste_oe.codice_operatore, r_richieste_oe.timestamp_trasmissione, r_richieste_oe.nomeFile, r_richieste_oe.sha256 FROM r_richieste_oe WHERE codice_richiesta = :codice_richiesta"; if ($codice_operatore !== NULL) { $bind[":codice_operatore"] = $codice_operatore; $sql .= " AND r_richieste_oe.codice_operatore = :codice_operatore "; } return $this->db->go($sql,$bind)->fetchAll(PDO::FETCH_ASSOC); } return false; } public function getObject() { return $this->checkAdminPermission("OBJECT"); } public function getInfoProcedura() { global $beRoot; $checkAdmin = false; $path = $beRoot . self::moduliAbilitati()[$this->modulo]["script"]; if (file_exists($path)) { include($path); } } public function getModuloRiferimento() { return self::moduliAbilitati()[$this->modulo]["modulo_riferimento"]; } public function checkAdminPermission($operazione = "CHECK") { global $beRoot; $checkAdmin = true; if (!empty(self::moduliAbilitati()[$this->modulo])) { $path = $beRoot . self::moduliAbilitati()[$this->modulo]["script"]; if (file_exists($path)) { include($path); return $return; } } return false; } public function printEditor() { if ($this->checkAdminPermission()) { $this->admin = true; if (!empty($this->partecipanti) || !empty($this->getRichieste())) { include (__DIR__."/backend-table.php"); } else { alertManager::printAlertBox(__("Nessun destinatario disponibile")); } } return false; } /** * Salva la richiesta nei confronti degli Operatori Economici selezionati * * @param Array $data * @return Array */ public function saveRichiesta(Array $data) : Array { $continua = false; $return = ["error"=>true,"codice"=>400,"descrizione"=>"Richiesta errata"]; if (!empty($data["codice"])) { $tmp = $this->getRichieste("N",["codice"=>$data["codice"]]); if (!empty($tmp)) { $continua = true; if ($tmp[0]["attivo"] == "S" && $data["attivo"] == "N") { $continua = false; } } } else { $continua = true; } if ($continua) { $errori = []; $data["codice_ente"] = $_SESSION["ente"]->codice; $data["data"] = date("d-m-Y H:i:s"); $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "b_richieste_oe"; $mainOperation = $salva->operazione = (is_numeric($data["codice"])) ? "UPDATE" : "INSERT"; $salva->oggetto = $data; $codice = $salva->save(); $callback = "reload"; if ($codice > 0) { if (isset($data["allegato-richiesta"])) { foreach($data["allegato-richiesta"] as $allegato) { filesManager::saveFile($allegato["filename"],$codice,"richieste",$allegato["nome"] ?? "","A",$allegato["classificazione"] ?? ""); } } if (!empty($data["destinatari"])) { foreach($data["destinatari"] AS $codice_operatore) { $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "r_richieste_oe"; $salva->operazione = "INSERT"; $salva->oggetto = array("codice_operatore"=>$codice_operatore,"codice_richiesta"=>$codice); if (empty($salva->save())) { $oe = oeManager::getOE($codice_operatore); $callback = ($mainOperation == "UPDATE") ? "refresh" : "reset"; $errori[] = $oe["ragione_sociale"]; } } } $return = ["error"=>false,"codice"=>$codice,"mancanti"=>$errori,"callback"=>$callback]; $data["codice"] = $codice; $this->postSave($data); if ($data["attivo"] == "S") { $destinatari = $this->getOE($codice); if (!empty($destinatari)) { if ($this->modulo != "concorsi") { $tmp = $this->getRichieste("S",["codice"=>$codice])[0]; $codici = array_column($destinatari,"codice_operatore"); $mailer = new Communicator(); $mailer->oggetto = $tmp["titolo"]; $mailer->corpo = $this->oggetto . " - " . $tmp["testo"] . "

" . __("Scadenza") .": " . mysql2completedate($tmp["scadenza"]); $mailer->corpo .= "

". __("Effettua l'accesso alla piattaforma per rispondere alla richiesta"). ": {$_SESSION["config"]["link_sito"]}

"; $check_allegati = filesManager::listFiles($codice, "richieste", "A", 0); if(! empty($check_allegati)) { ob_start(); filesManager::printlist($codice, "richieste", "A", 0, false); $corpo_alleagati = ob_get_clean(); $corpo_alleagati = str_replace("/allegati/open.php", "{$_SESSION["config"]["link_sito"]}/allegati/open.php", $corpo_alleagati); $mailer->corpo .= $corpo_alleagati; } $mailer->codice_pec = $this->codice_pec; $mailer->comunicazione = true; $mailer->comunicazione_tecnica = false; $mailer->sezione = $this->modulo_riferimento; $mailer->codice_gara = $this->elemento_comunicazione ?? $this->elemento; $mailer->coda = true; $mailer->destinatari = $codici; $mailer->send(); } } else { $return["note"] = __("Nessun destinatario specificato"); $return["callback"] = ($mainOperation == "UPDATE") ? "refresh" : "reset"; $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "b_richieste_oe"; $salva->operazione = "UPDATE"; $salva->oggetto = ["codice"=>$codice,"attivo"=>"N"]; $salva->save(); } } } else { $return = ["error"=>true,"codice"=>500,"descrizione"=>"Errore nel salvataggio della richiesta"]; } } return $return; } public function postSave(Array $data) { $obj = $this->getObject(); if (method_exists($obj,"postRichiesteOE")) { $obj->postRichiesteOE($data); } } } ?>