"Appalti pre-commerciali","script"=>"/pcp/commissione/init.php","returnURL"=>"/backend/pcp/panel.php"]; $return["gare"] = ["titolo"=>"Gare e Affidamenti","script"=>"/gare/commissione/init.php","returnURL"=>"/backend/gare/panel.php"]; $return["concorsi"] = ["titolo"=>"Concorsi di progettazione","script"=>"/concorsi/commissione/init.php","returnURL"=>"/backend/concorsi/panel.php"]; $return["omc"] = ["titolo"=>"Consultazioni","script"=>"/omc/relatori/init.php","returnURL"=>"/backend/omc/panel.php"]; $return["matchmaking"] = ["titolo"=>"Fabbisogni di innovazione","script"=>"/matchmaking/commissione/init.php","returnURL"=>"/backend/matchmaking/panel.php"]; return $return; } public static function tipologie() { return ["seggio","commissione","monitoraggio","relatori"]; } public static function modalita() { return [ "R" => "Classico", "C" => "A coppie" ]; } public function __construct($modulo,$elemento,$tipologia) { if (!empty($modulo) && !empty($elemento) && !empty($tipologia) && in_array($tipologia,self::tipologie()) !== false) { if (!empty(self::moduliAbilitati()[$modulo])) { global $pdo; $this->modulo = $modulo; $this->elemento = $elemento; $this->tipologia = $tipologia; $this->gestore = $_SESSION["ente"]->codice; $this->db = $pdo; return $this; } } return false; } public function getInfo() { if (!empty($this->db)) { $sql = "SELECT * FROM b_commissioni WHERE codice_gestore = :codice_gestore AND modulo = :modulo AND codice_elemento = :elemento AND tipologia = :tipologia"; $return = $this->db->go($sql,[":codice_gestore"=>$this->gestore,":modulo"=>$this->modulo,":elemento"=>$this->elemento,":tipologia"=>$this->tipologia]); if ($return->rowCount() == 1) { $return = $return->fetch(PDO::FETCH_ASSOC); } else { $return = get_campi("b_commissioni"); $return["arrotonda"] = "N"; $return["riparametra"] = "S"; } if (!empty($this->forceModalita)) { $return["modalita"] = $this->forceModalita; } if (!empty($this->forceRiparametra)) { $return["riparametra"] = $this->forceRiparametra; } return $return; } } public function getEstrazioniCommissione($codice = null) { $bind = [":elemento"=>$this->elemento,":modulo"=>$this->modulo]; $sqlCodice = ""; if (isset($codice)) { $sqlCodice = " AND codice = :codice"; $bind[":codice"] = $codice; } $return = $this->db->go("SELECT * FROM b_estrazioni_commissioni WHERE codice_elemento = :elemento AND contesto = :modulo {$sqlCodice}",$bind)->fetchAll(PDO::FETCH_ASSOC); if (!empty($return) && isset($codice)) { $return = $return[0]; } return $return; } public static function numeroNomine($codice_utente) { global $pdo; return $pdo->go("SELECT r_commissione.codice FROM r_commissione JOIN b_commissioni ON r_commissione.codice_commissione = b_commissioni.codice WHERE b_commissioni.tipologia = 'commissione' AND r_commissione.codice_utente = :utente",[":utente"=>$codice_utente])->rowCount(); } public function estraiDaAlbo($codice_albo,$numero,$ruolo) { $error = true; $albo = AlboCommissione::init($codice_albo); if (!empty($albo)) { $partecipanti = $albo->getPartecipanti(["stato"=>"ammessi"],[],0,-1); if (!empty($partecipanti)) { $esclusioni = []; $esistenti = $this->getCommissari(); if (!empty($esistenti)) { $esclusioni = array_column($esistenti,"codice_utente"); $esclusioni = array_filter($esclusioni); } $obj = $this->getObject(null); if (method_exists($obj,"getPartecipanti")) { if (method_exists($obj,"getLotti")) { $lotti = $obj->getLotti(); } else { $lotti = [0]; } foreach($lotti AS $lotto) { if (!empty($lotto)) { $obj->setLotto($lotto["codice"]); } $tmp = $obj->getPartecipanti(); if (!empty($tmp)) { foreach($tmp AS $p) { if (!empty($p["codice_operatore"])) { $userInfo = oeManager::getUser($p["codice_operatore"]); if (!empty($userInfo)) { $esclusioni[] = $userInfo["codice"]; } } } } } } $conteggi = []; $auto = []; $potenziali = []; $esclusi = []; foreach($partecipanti AS $partecipante) { $nomine = static::numeroNomine($partecipante["codice_operatore"]); $partecipante["nomine"] = $nomine; if (in_array($partecipante["codice_operatore"],$esclusioni) === false) { if (!isset($conteggi[$nomine])) { $conteggi[$nomine] = []; } if (!isset($conteggioMinimo)) { $conteggioMinimo = $conteggioMassimo = $nomine; } else { if (isset($conteggioMinimo) && $conteggioMinimo > $nomine) { $conteggioMinimo = $nomine; } if (isset($conteggioMassimo) && $conteggioMassimo < $nomine) { $conteggioMassimo = $nomine; } } $conteggi[$nomine][$partecipante["codice_operatore"]] = $partecipante; } else { $esclusi[$partecipante["codice_operatore"]] = $partecipante; } } if (isset($conteggioMinimo)) { if ($conteggioMinimo == $conteggioMassimo) { if (count($conteggi[$conteggioMinimo]) <= $numero) { $auto = $conteggi[$conteggioMinimo]; } else { $potenziali = $conteggi[$conteggioMinimo]; } } else { $stopPotenziali = false; for($number = $conteggioMinimo;$number <= $conteggioMassimo;$number++) { if (!empty($conteggi[$number])) { $relazioni = $conteggi[$number]; if ((count($auto) + count($relazioni) <= $numero) && empty($potenziali)) { foreach($relazioni AS $soggetto => $relazione) { $auto[$soggetto] = $relazione; } } else { if (!$stopPotenziali) { foreach($relazioni AS $soggetto => $relazione) { $potenziali[$soggetto] = $relazione; } if (count($auto) + count($potenziali) >= $numero) { $stopPotenziali = true; } } else { foreach($relazioni AS $soggetto => $relazione) { $esclusi[$soggetto] = $relazione; } } } } } } $estrazione = []; $estrazione["codice_elemento"] = $this->elemento; $estrazione["contesto"] = $this->modulo; $estrazione["codice_albo"] = $albo->info["codice"]; $estrazione["componenti"] = $numero; $estrazione["sequenza"] = ""; if (!empty($potenziali)) { $disponibili = $numero - count($auto); $sequenza = range(1,count($potenziali)); shuffle($sequenza); $sequenza = array_splice($sequenza,0,$disponibili); $estrazione["sequenza"] = json_encode($sequenza); } $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "b_estrazioni_commissioni"; $salva->operazione = "INSERT"; $salva->oggetto = $estrazione; $codice_estrazione = $salva->save(); if (!empty($codice_estrazione)) { $insert = $this->db->prepare("INSERT INTO r_estrazioni_commissioni (codice_estrazione,codice_commissario,identificativo,escluso,selezionato,conteggio,utente_modifica,timestamp) VALUES (:codice_estrazione,:codice_commissario,:identificativo,:escluso,:selezionato,:conteggio,:utente_modifica,now())"); $insert->bindValue(':codice_estrazione',$codice_estrazione); $insert->bindValue(':utente_modifica',$_SESSION["utente"]->codice); if (!empty($auto)) { $soggetti = array_keys($auto); foreach($soggetti AS $soggetto) { $insert->bindValue(':codice_commissario',$soggetto); $insert->bindValue(':identificativo',0); $insert->bindValue(':escluso',"N"); $insert->bindValue(':selezionato',"A"); $insert->bindValue(':conteggio',$auto[$soggetto]["nomine"]); $insert->execute(); $this->createCommissarioFromUser($soggetto,$ruolo); } } if (!empty($esclusi)) { $soggetti = array_keys($esclusi); foreach($soggetti AS $soggetto) { $insert->bindValue(':codice_commissario',$soggetto); $insert->bindValue(':identificativo',0); $insert->bindValue(':escluso',"S"); $insert->bindValue(':selezionato',"N"); $insert->bindValue(':conteggio',$esclusi[$soggetto]["nomine"]); $insert->execute(); } } if (!empty($potenziali)) { $soggetti = array_keys($potenziali); shuffle($soggetti); $count = 0; foreach($soggetti AS $soggetto) { $count++; $selezionato = "N"; if (in_array($count,$sequenza) !== false) { $selezionato = "S"; $this->createCommissarioFromUser($soggetto,$ruolo); } $insert->bindValue(':codice_commissario',$soggetto); $insert->bindValue(':identificativo',$count); $insert->bindValue(':escluso',"N"); $insert->bindValue(':selezionato',$selezionato); $insert->bindValue(':conteggio',(isset($potenziali[$soggetto]["nomine"]) && is_numeric($potenziali[$soggetto]["nomine"])) ? $potenziali[$soggetto]["nomine"] : 0); $insert->execute(); } } $error = false; } } } } return !$error; } public function getCommissari($codice_utente = NULL) { $info = $this->getInfo(); if (!empty($info["codice"])) { $bind = [":codice_commissione"=>$info["codice"]]; $sql = "SELECT r_commissione.* FROM r_commissione WHERE codice_commissione = :codice_commissione "; if ($codice_utente !== NULL) { $bind[":codice_utente"] = $codice_utente; $sql .= " AND r_commissione.codice_utente = :codice_utente "; } $sql .= " ORDER BY codice"; return $this->db->go($sql,$bind)->fetchAll(PDO::FETCH_ASSOC); } return false; } public function printPublic() { if (!empty($this->getCommissari())) { include(__DIR__."/public-view.php"); } } public function checkAdminPermission() { global $beRoot; $valutatore = NULL; $returnObject = false; $path = $beRoot . self::moduliAbilitati()[$this->modulo]["script"]; if (file_exists($path)) { include($path); return $return; } return false; } public function getObject($valutatore = "commissione") { if (empty($this->object)) { global $beRoot; $returnObject = true; $path = $beRoot . self::moduliAbilitati()[$this->modulo]["script"]; if (file_exists($path)) { include($path); if (!empty($return)) { $this->object = $return; } } } if (!empty($this->object)) { return $this->object; } return false; } public function printEditor() { if ($this->checkAdminPermission()) { $this->admin = true; include (__DIR__."/backend-manage.php"); } return false; } public function printMonitor($codice_utente = null) { if ($this->checkAdminPermission()) { $this->admin = true; include (__DIR__."/monitor.php"); } return false; } public function getCoefficientiValutazione($codice_criterio=NULL,$codice_utente=NULL) { $return = false; $commissione = $this->getInfo(); if (!empty($commissione)) { $bind = []; $bind[":codice_commissione"] = $commissione["codice"]; $sql = "SELECT * FROM b_coefficienti_commissari WHERE codice_commissione = :codice_commissione "; if (!empty($codice_criterio)) { $bind[":codice_criterio"] = $codice_criterio; $sql .= " AND codice_criterio = :codice_criterio "; } if (!empty($codice_utente)) { $bind[":codice_utente"] = $codice_utente; $sql .= " AND codice_utente = :codice_utente "; } $results = $this->db->go($sql,$bind); if ($results->rowCount() > 0) { $return = []; while($coef = $results->fetch(PDO::FETCH_ASSOC)) { if ((!empty($codice_criterio)) && (!empty($codice_utente))) { $return[$coef["codice_partecipante"]] = $coef["coefficiente"]; } else if (!empty($codice_utente)) { $return[$coef["codice_criterio"]][$coef["codice_partecipante"]] = $coef["coefficiente"]; } else if (!empty($codice_criterio)) { $return[$coef["codice_utente"]][$coef["codice_partecipante"]] = $coef["coefficiente"]; } else { $return[$coef["codice_criterio"]][$coef["codice_utente"]][$coef["codice_partecipante"]] = $coef["coefficiente"]; } } } } return $return; } public function createCommissarioFromUser($user,$ruolo = "MEMBRO") { $userInfo = Utente::getInfoFromID($user); if (!empty($userInfo)) { $commissario = []; $commissario["ruolo"] = $ruolo; $commissario["nome"] = $userInfo["nome"]; $commissario["cognome"] = $userInfo["cognome"]; $commissario["email"] = $userInfo["email"]; $this->saveCommissario("i_",$commissario); } } public function saveCommissario($id_commissario,$commissario) { $codice_commissione = $this->getInfo()["codice"]; if (!empty($codice_commissione)) { $checkUser = $this->db->prepare("SELECT codice FROM b_utenti WHERE email = :email"); $checkCollaborazione = $this->db->prepare("SELECT codice FROM r_collaborazioni WHERE codice_utente = :codice_utente AND codice_ente = :codice_ente"); $checkCollaborazione->bindValue(":codice_ente",$_SESSION["ente"]->codice); $checkModulo = $this->db->prepare("SELECT codice FROM r_permessi_collaborazioni WHERE cod_relazione = :cod_collaborazione AND id_modulo = \"commissione\""); if (is_numeric($id_commissario)) { $found[] = $id_commissario; } $codice_utente = 0; $checkUser->bindValue(":email",$commissario["email"]); $checkUser->execute(); if ($checkUser->rowCount() > 0) { if ($checkUser->rowCount() == 1) { $tmpCheckUtent = $checkUser->fetch(PDO::FETCH_ASSOC); if (!empty($tmpCheckUtent)) { $type = Utente::getInfoFromID($tmpCheckUtent["codice"]); $gerarchia = Utente::ruoli()[$type["ruolo"]]["gerarchia"] ?? 0; if ($gerarchia > 9) { $codice_utente = $tmpCheckUtent["codice"]; } } } } else if ($this->tipologia == "commissione" || $this->tipologia == "monitoraggio" || $this->tipologia == "relatori") { $user = []; $user["password"] = password_hash(md5(base64_encode(rand(100000,20000))), PASSWORD_BCRYPT); $user["email"] = $commissario["email"]; $user["ruolo"] = "USR"; $user["cognome"] = $commissario["cognome"]; $user["nome"] = $commissario["nome"]; $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "b_utenti"; $salva->operazione = "INSERT"; $salva->oggetto = $user; $codice_utente = $salva->save(); } if (($this->tipologia == "commissione" || $this->tipologia == "monitoraggio" || $this->tipologia == "relatori") && !empty($codice_utente)) { $checkCollaborazione->bindValue(":codice_utente",$codice_utente); $checkCollaborazione->execute(); if ($checkCollaborazione->rowCount() > 0) { $collaborazione = $checkCollaborazione->fetch(PDO::FETCH_ASSOC)["codice"]; } else { $rel = []; $rel["gruppo"] = "COM"; $rel["codice_utente"] = $codice_utente; $rel["codice_ente"] = $_SESSION["ente"]->codice; $rel["attivo"] = "S"; $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "r_collaborazioni"; $salva->operazione = "INSERT"; $salva->oggetto = $rel; $collaborazione = $salva->save(); } $checkModulo->bindValue(":cod_collaborazione",$collaborazione); $checkModulo->execute(); if ($checkModulo->rowCount() == 0) { $relazione = []; $relazione["id_modulo"] = $this->tipologia; $relazione["cod_relazione"] = $collaborazione; $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "r_permessi_collaborazioni"; $salva->operazione = "INSERT"; $salva->oggetto = $relazione; $salva->save(); } } $relazione = []; if (is_numeric($id_commissario)) { $relazione["codice"] = $id_commissario; } $relazione["codice_commissione"] = $codice_commissione; $relazione["codice_utente"] = $codice_utente; $relazione["ruolo"] = $commissario["ruolo"]; $relazione["nome"] = $commissario["nome"]; $relazione["cognome"] = $commissario["cognome"]; $relazione["email"] = $commissario["email"]; $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "r_commissione"; $salva->operazione = !empty($relazione["codice"]) ? "UPDATE" : "INSERT"; $salva->oggetto = $relazione; $found[] = $salva->save(); if ($this->tipologia == "commissione" || $this->tipologia == "monitoraggio" || $this->tipologia == "relatori") { if (!is_numeric($id_commissario)) { $infoCommissione = $this->getInfo(); $url = $_SESSION["config"]["link_sito"]; $oggettoComunicazione = __("Nomina commissario") . " - " . $infoCommissione["oggetto"]; $messaggio = __("Collegati al link sottostante per effettuare le operazioni."); $messaggio .= "

" . $url . ""; $messaggio .= "

" . __("Se necessario potete recuperare la password d'accesso tramite l'apposita funzione disponibile in piattaforma."); $mailer = new Communicator(); $mailer->oggetto = $oggettoComunicazione; $mailer->corpo = $messaggio; $mailer->codice_pec = $this->object->info["codice_pec"] ?? -1; $mailer->comunicazione = false; $mailer->coda = false; $mailer->destinatari = $commissario["email"]; $mailer->send(); } } return $id_commissario; } } } ?>