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.
369 righe
15 KiB
369 righe
15 KiB
<? |
|
class richiesteOE { |
|
|
|
public $modulo; |
|
public $modulo_riferimento; |
|
protected $gestore; |
|
public $elemento; |
|
public $elemento_comunicazione; |
|
public $sub; |
|
public $lock; |
|
public $oggetto; |
|
public $codice_pec; |
|
protected $admin; |
|
public $partecipanti; |
|
protected $db; |
|
|
|
|
|
public static function moduliAbilitati() { |
|
$return = []; |
|
$return["pcp"] = ["modulo_riferimento"=> "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"] . "<br><br>" . __("Scadenza") .": " . mysql2completedate($tmp["scadenza"]); |
|
$mailer->corpo .= "<br><br>". __("Effettua l'accesso alla piattaforma per rispondere alla richiesta"). ": <a href=\"{$_SESSION["config"]["link_sito"]}\" target=\"_blank\" title=\"".__("Sito esterno")."\">{$_SESSION["config"]["link_sito"]}</a><br><br>"; |
|
$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); |
|
} |
|
} |
|
|
|
} |
|
|
|
?>
|