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.
481 righe
20 KiB
481 righe
20 KiB
<? |
|
class Commissione { |
|
|
|
public $modulo; |
|
private $gestore; |
|
public $elemento; |
|
public $tipologia; |
|
public $lock; |
|
public $oggetto; |
|
private $object; |
|
private $admin; |
|
private $forceModalita; |
|
private $forceRiparametra; |
|
private $valutatore; |
|
public $viewPath; |
|
public $db; |
|
|
|
|
|
public static function moduliAbilitati() { |
|
$return = []; |
|
$return["pcp"] = ["titolo"=>"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 .= "<br><br><strong><a href='{$url}' title='".__("Link esterno")."'>" . $url . "</a></strong>"; |
|
$messaggio .= "<br><br>" . __("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; |
|
} |
|
} |
|
} |
|
|
|
?>
|