<?php
    /**
    *
    * copyright (c) 2013-2022 Heliac Technologies
    * license http://opensource.org/licenses/gpl-license.php GNU GPL v3 
    *
    * linee guida per l'utilizzo del logo http://www.geecom.org/index.php?alias=linee-guida-per-luso-del-logo-geecom
    *
    * Classe per gestire i Contenuti
    * 
    * questa funzione richiede la classe Gutil ControlloreStringhe
    * 
    */

    class Contenuto {
        private $db;
        private $id;
        private $contenutoRiferimento;
        private $posizione;
        private $lingua;
        private $tipo;
        private $privato;
        private $categoria;
        private $mostraNellaHome;
        private $commenti;
        private $stato;
        private $punteggioSeo;
        private $template;
        private $attivaBreadcrumbs;
        private $tipoVisualizzazione;
        private $titolo;
        private $mostraTitolo;
        private $descrizione;
        private $metaDescrizione;
        private $alias;
        private $cssGenerato;
        private $cssAggiuntivo;
        private $testo;
        private $foto;
        private $autore;
        private $datiContenuto;
        
        function __construct($db,$id,$contenutoRiferimento = 0,$lingua = "",$tipo = "", $privato="", $posizione = 0, $mostraNellaHome = "",$stato = "",$punteggioSeo = "",$template = "",$attivaBreadcrumbs = "",$tipoVisualizzazione = "",$titolo = "",$descrizione="", $metaDescrizione = "", $testo="", $foto = "", $autore="",$dataCreazione = "",$dataPubblicazione = "") {
            $this->db = $db;
            $this->id = $id;
            $this->contenutoRiferimento = $contenutoRiferimento;
            $this->lingua    = $lingua;
            $this->tipo      = $tipo;
            $this->privato   = $privato;
            $this->posizione = $posizione;
            $this->mostraNellaHome = $mostraNellaHome;
            $this->stato        = $stato;
            $this->punteggioSeo = $punteggioSeo;
            $this->template     = $template;
            $this->titolo       = $titolo;
            $this->metaDescrizione = $metaDescrizione;
            $this->descrizione  = $descrizione;
            $this->testo        = $testo;
            $this->foto         = $foto;
            $this->autore       = $autore;
            $this->categoria    = 0;
            $this->datiContenuto = array();
        }
        
        function crea() {
            $dataCreazione     = date("Y-m-d");
            $dataPubblicazione = date("Y-m-d H:i");
            $this->alias = $this->generaAlias($this->titolo);
            $query = "INSERT INTO geecD_contenuti VALUES(NULL,$this->contenutoRiferimento,'$this->lingua','$this->tipo', '$this->privato', $this->posizione,'$this->categoria','$this->mostraNellaHome','$this->stato','$this->punteggioSeo','$this->template','$this->attivaBreadcrumbs','$this->tipoVisualizzazione','$this->titolo','$this->mostraTitolo','$this->metaDescrizione','$this->descrizione','$this->alias','$this->cssGenerato','$this->cssAggiuntivo','$this->testo','$this->commenti',0,'$this->foto','','','$this->autore','$dataCreazione','$dataCreazione','$dataCreazione','$dataPubblicazione');";
            $this->id = $this->db->eseguiQueryCreazione($query);
            return $this->id;
        }
        
        function modifica() {
            if($this->alias=="") {
                $this->alias = $this->generaAlias($this->titolo);
            }
            $query = "UPDATE geecD_contenuti SET contenutoRiferimento=$this->contenutoRiferimento, linguaContenuto='$this->lingua', tipo='$this->tipo', privato='$this->privato', posizione=$this->posizione, categoria='$this->categoria', mostraNellaHome='$this->mostraNellaHome', stato='$this->stato', punteggioSeo='$this->punteggioSeo', template='$this->template', attivaBreadcrumbs='$this->attivaBreadcrumbs', tipoVisualizzazione='$this->tipoVisualizzazione', titolo='$this->titolo', mostraTitolo='$this->mostraTitolo', alias='$this->alias', metaDescrizione='$this->metaDescrizione', descrizione='$this->descrizione', alias='$this->alias', cssGenerato='$this->cssGenerato', cssAggiuntivo='$this->cssAggiuntivo', testo='$this->testo', abilitaCommenti='$this->commenti', foto='$this->foto', autore='$this->autore' WHERE id=$this->id";
            $this->db->eseguiQueryScrittura($query);
        }
        
        function elimina() {
            $this->db->eseguiQueryCancellazione("geecD_contenuti",$this->id);
        }
        
        function duplica($prefisso = "Copia di", $lingua="") {
            $contenutoDaCopiare = $this->db->leggiSingolaRiga("geecD_contenuti",$this->id);
            $this->db->eseguiQueryScrittura("CREATE TEMPORARY TABLE tabella_temporanea SELECT * FROM geecD_contenuti WHERE id={$this->id}");
            $this->db->eseguiQueryScrittura("UPDATE tabella_temporanea SET id = 0;");
            $this->db->eseguiQueryScrittura("INSERT INTO geecD_contenuti SELECT * FROM tabella_temporanea;");
            $idContenutoDuplicato = $this->db->idUltimoElemento();
            
            // se la lingua non è stata specificata va messo il valore del contenuto da copiare
            if($lingua=="") {
                $lingua = $contenutoDaCopiare["linguaContenuto"];
            }
            
            // aggiorno titolo, alias, numero visite e altri cambi che vanno aggiornati
            $nuovoAlias = $this->generaAlias("Copia di".$contenutoDaCopiare["titolo"]);
            $this->db->eseguiQueryScrittura("UPDATE geecD_contenuti SET contenutoRiferimento = 0, titolo='$prefisso {$contenutoDaCopiare["titolo"]}', alias='$nuovoAlias', linguaContenuto='$lingua', numeroVisite = 0, dataCreazione='".date("Y-m-d")."', dataPubblicazione = '".date("Y-m-d H:i")."' WHERE id=$idContenutoDuplicato");
            
            // duplico i componenti
            $query = "SELECT cp.*, c.tipo, c.tabellaRiferimento FROM geecD_composizionePagine AS cp JOIN geecD_componenti AS c ON cp.idComponente = c.id WHERE cp.idPagina={$this->id} ORDER BY posizione ASC";
            $result = $this->db->eseguiQueryLettura($query);
            $idComponente = $this->db->idUltimoElemento();
            while($componente = $result->fetch_array()) {
                $testo          = filter_var($componente["testo"],FILTER_SANITIZE_ADD_SLASHES);
                $codiceGenerato = filter_var($componente["codiceGenerato"],FILTER_SANITIZE_ADD_SLASHES);
                $script         = filter_var($componente["script"],FILTER_SANITIZE_ADD_SLASHES);
            
                if($componente["tipo"]=="componenteDinamicoPagine") {
                    $this->db->eseguiQueryScrittura("CREATE TEMPORARY TABLE tabella_temporaneaComponente SELECT * FROM {$componente["tabellaRiferimento"]} WHERE id={$componente["idElemento"]}");
                    $this->db->eseguiQueryScrittura("UPDATE tabella_temporaneaComponente SET id = 0;");
                    $this->db->eseguiQueryScrittura("INSERT INTO {$componente["tabellaRiferimento"]} SELECT * FROM tabella_temporaneaComponente;");
                    $idElemento = $this->db->idUltimoElemento();
                    $this->db->eseguiQueryScrittura("DROP TABLE tabella_temporaneaComponente");

                    $this->db->eseguiQueryScrittura("UPDATE geecD_composizionePagine SET idElemento = $idElemento WHERE id=$idComponente");
                    $queryInserimentoComponente = "INSERT INTO geecD_composizionePagine VALUES(NULL,{$componente["idComponente"]},$idContenutoDuplicato,'{$componente["tipoElemento"]}',{$idElemento},{$componente["posizione"]},'$testo','$codiceGenerato','$script','{$componente["idSezione"]}','{$componente["classeSezione"]}','{$componente["aTuttaLarghezza"]}','{$componente["margineSezione"]}','{$componente["paddingSezione"]}','{$componente["animazione"]}','{$componente["coloreSfondo"]}','{$componente["immagineSfondo"]}','{$componente["videoSfondo"]}','{$componente["altreOpzioni"]}')";
                }
                else {
                    $queryInserimentoComponente = "INSERT INTO geecD_composizionePagine VALUES(NULL,{$componente["idComponente"]},$idContenutoDuplicato,'{$componente["tipoElemento"]}',{$componente["idElemento"]},{$componente["posizione"]},'$testo','$codiceGenerato','$script','{$componente["idSezione"]}','{$componente["classeSezione"]}','{$componente["aTuttaLarghezza"]}','{$componente["margineSezione"]}','{$componente["paddingSezione"]}','{$componente["animazione"]}','{$componente["coloreSfondo"]}','{$componente["immagineSfondo"]}','{$componente["videoSfondo"]}','{$componente["altreOpzioni"]}')";
                }
                $this->db->eseguiQueryScrittura($queryInserimentoComponente);   
            }
            return $idContenutoDuplicato;
        }
        
        function traduci($lingua) {
            $idContenutoTradotto = $this->duplica("Traduzione in $lingua di",$lingua);
            $this->db->eseguiQueryScrittura("UPDATE geecD_contenuti SET contenutoRiferimento='$this->id' WHERE id=$idContenutoTradotto");
            return $idContenutoTradotto;
        }
        
        function duplicaComponente($idComponente) {
            $queryUtimaSezione  = "SELECT * FROM geecD_composizionePagine ORDER BY id DESC";
            $risSezione         = $this->db->eseguiQueryLettura($queryUtimaSezione);
            $ultimaSezione      = $risSezione->fetch_assoc();
            $progressivoSezione = $ultimaSezione["id"] +1;
            $idSezione  = "sezione$progressivoSezione";
            
            $query    = "SELECT cp.*, c.tipo, c.tabellaRiferimento FROM geecD_composizionePagine AS cp JOIN geecD_componenti AS c ON cp.idComponente = c.id WHERE cp.id={$idComponente}";
            $risQuery = $this->db->eseguiQueryLettura($query);
            $componente = $risQuery->fetch_assoc();
            $testo          = filter_var($componente["testo"],FILTER_SANITIZE_ADD_SLASHES);
            $codiceGenerato = filter_var($componente["codiceGenerato"],FILTER_SANITIZE_ADD_SLASHES);
            $script         = filter_var($componente["script"],FILTER_SANITIZE_ADD_SLASHES);
            
            if($componente["tipo"]=="componenteDinamicoPagine") {
                $this->db->eseguiQueryScrittura("CREATE TEMPORARY TABLE tabella_temporaneaComponente SELECT * FROM {$componente["tabellaRiferimento"]} WHERE id={$componente["idElemento"]}");
                $this->db->eseguiQueryScrittura("UPDATE tabella_temporaneaComponente SET id = 0;");
                $this->db->eseguiQueryScrittura("INSERT INTO {$componente["tabellaRiferimento"]} SELECT * FROM tabella_temporaneaComponente;");
                $idElemento = $this->db->idUltimoElemento();
                $this->db->eseguiQueryScrittura("DROP TABLE tabella_temporaneaComponente");

                $this->db->eseguiQueryScrittura("UPDATE geecD_composizionePagine SET idElemento = $idElemento WHERE id=$idComponente");
                $queryInserimentoComponente = "INSERT INTO geecD_composizionePagine VALUES(NULL,{$componente["idComponente"]},$this->id,'{$componente["tipoElemento"]}',{$idElemento},{$componente["posizione"]},'$testo','$codiceGenerato','$script','$idSezione','{$componente["classeSezione"]}','{$componente["aTuttaLarghezza"]}','{$componente["margineSezione"]}','{$componente["paddingSezione"]}','{$componente["animazione"]}','{$componente["coloreSfondo"]}','{$componente["immagineSfondo"]}','{$componente["videoSfondo"]}','{$componente["altreOpzioni"]}')";
            }
            else {
                $queryInserimentoComponente = "INSERT INTO geecD_composizionePagine VALUES(NULL,{$componente["idComponente"]},$this->id,'{$componente["tipoElemento"]}',{$componente["idElemento"]},{$componente["posizione"]},'$testo','$codiceGenerato','$script','{$idSezione}','{$componente["classeSezione"]}','{$componente["aTuttaLarghezza"]}','{$componente["margineSezione"]}','{$componente["paddingSezione"]}','{$componente["animazione"]}','{$componente["coloreSfondo"]}','{$componente["immagineSfondo"]}','{$componente["videoSfondo"]}','{$componente["altreOpzioni"]}')";
            }
            $idNuovoComponente = $this->db->eseguiQueryCreazione($queryInserimentoComponente);
            
            $posizioneNuovoComponente = $componente["posizione"] +1;
            $this->modificaPosizioneComponente($idNuovoComponente,$posizioneNuovoComponente);
        }
        
        function caricaDatiDalDatabase() {
            $datiContenuto = $this->db->leggiSingolaRiga("geecD_contenuti",$this->id);
            $this->datiContenuto = $datiContenuto;
            $this->contenutoRiferimento = $datiContenuto["contenutoRiferimento"];
            $this->tipo            = $datiContenuto["tipo"];
            $this->privato         = $datiContenuto["privato"];
            $this->stato           = $datiContenuto["stato"];
            $this->lingua          = $datiContenuto["linguaContenuto"];
            $this->titolo          = $datiContenuto["titolo"];
            $this->mostraTitolo    = $datiContenuto["mostraTitolo"];
            $this->alias           = $datiContenuto["alias"];
            $this->cssGenerato     = $datiContenuto["cssGenerato"];
            $this->cssAggiuntivo   = $datiContenuto["cssAggiuntivo"];
            $this->metaDescrizione = $datiContenuto["metaDescrizione"];
            $this->metaDescrizione = $datiContenuto["metaDescrizione"];
            $this->descirzione     = $datiContenuto["descrizione"];
            $this->testo           = $datiContenuto["testo"];
            $this->foto            = $datiContenuto["foto"];
            $this->punteggioSeo    = $datiContenuto["punteggioSeo"];
            $this->template        = $datiContenuto["template"];
            $this->autore          = $datiContenuto["autore"];
            $this->posizione       = $datiContenuto["posizione"];
            $this->dataPubblicazione = $datiContenuto["dataPubblicazione"];
        }
        
        function eliminaAssociazioneTagArticolo($idTag) {
            $query = "DELETE FROM geecB_associazioniTagArticoli WHERE idArticolo=$this->id AND idTag=$idTag";
            $this->db->eseguiQueryLettura($query);
        }
        
        function creaAssociazioneTagArticolo($idTag) {
            $query = "INSERT INTO geecB_associazioniTagArticoli VALUES(NULL,$this->id,$idTag)";
            $this->db->eseguiQueryLettura($query);
        }
        
        function modificaOpzioniSezioneComponente($id,$idSezione,$classeSezione,$aTuttaLarghezza,$margineSezione,$paddingSezione,$coloreSfondo,$percorsoImmagine,$percorsoFileVideo) {
            $queryModifica = "UPDATE geecD_composizionePagine SET idSezione='$idSezione', classeSezione='$classeSezione', aTuttaLarghezza='$aTuttaLarghezza', margineSezione='$margineSezione', paddingSezione='$paddingSezione', coloreSfondo='$coloreSfondo' WHERE id=$id";
            $this->db->eseguiQueryLettura($queryModifica);
            
            if($percorsoImmagine!="") {
                $queryModifica = "UPDATE geecD_composizionePagine SET immagineSfondo='$percorsoImmagine' WHERE id=$id";
                $this->db->eseguiQueryLettura($queryModifica);
            }
            
            if($percorsoFileVideo!="") {
                $queryModifica = "UPDATE geecD_composizionePagine SET videoSfondo='$percorsoFileVideo' WHERE id=$id";
                $this->db->eseguiQueryLettura($queryModifica);
            }
        }
        
        function modificaPosizioneComponente($idComponente,$posizione) {
            $queryPosizione = "SELECT * FROM geecD_composizionePagine WHERE idPagina=$this->id AND id != $idComponente ORDER BY posizione ASC";
            $risElementi    = $this->db->eseguiQueryLettura($queryPosizione);
            
            $posizioneCorrente = 1;
            while($elementoCorrente = $risElementi->fetch_assoc()) {
                if($posizione==$posizioneCorrente) {
                    $posizioneCorrente++;
                }
                $queryPosizione = "UPDATE geecD_composizionePagine SET posizione=$posizioneCorrente WHERE id = {$elementoCorrente["id"]} ";
                $this->db->eseguiQueryScrittura($queryPosizione);
                $posizioneCorrente ++;
            }
            $queryPosizioneElementoPrincipale = "UPDATE geecD_composizionePagine SET posizione=$posizione WHERE id = $idComponente ";
            $this->db->eseguiQueryScrittura($queryPosizioneElementoPrincipale);
        }
        
        function cssGenerato() {
            $queryPosizione = "SELECT * FROM geecD_composizionePagine WHERE idPagina=$this->id ORDER BY posizione ASC";
            $risComponenti  = $this->db->eseguiQueryLettura($queryPosizione);
            
            $cssGenerato = "";
            while($componente = $risComponenti->fetch_assoc()) {
                $cssGeneratoSezione = "";
                if($componente["margineSezione"]!="" || $componente["paddingSezione"]!="") {
                    $stringaMargine = ($componente["margineSezione"]!="") ? "margin:{$componente["margineSezione"]};" : "";
                    $stringaPadding = ($componente["paddingSezione"]!="") ? "padding:{$componente["paddingSezione"]};" : "";
                    $cssGeneratoSezione = "
                    #{$componente["idSezione"]} {
                        $stringaMargine
                        $stringaPadding
                    }
                    ";
                }
                $cssGenerato.= $cssGeneratoSezione;
            }
            return $cssGenerato;
        }
        
        function aggiornaCssGenerato() {
            $cssGenerato = $this->cssGenerato();
            
            $queryPosizioneElementoPrincipale = "UPDATE geecD_contenuti SET cssGenerato='$cssGenerato' WHERE id = $this->id ";
            $this->db->eseguiQueryScrittura($queryPosizioneElementoPrincipale);
        }
        
        function stampaComponentiContenuto() {
            
            $queryComponentiDaMostrare = "SELECT c.id, c.idSezione, c.idElemento, c.classeSezione, c.testo, cm.nome, cm.tipo, cm.icona, cm.paginaGestione, cm.tabellaRiferimento, c.posizione, c.margineSezione, c.paddingSezione, c.aTuttaLarghezza FROM geecD_composizionePagine AS c JOIN geecD_componenti AS cm ON c.idComponente=cm.id WHERE c.idPagina = {$this->getId()} ORDER BY c.posizione ASC";
            $risComponenti = $this->db->eseguiQueryLettura($queryComponentiDaMostrare);

            // se nella pagina ci sono più di 7 componenti viene inserito anche un pulsante in 
            // alto per non costringere l'utente ad arrivare in fondo alla pagina
            if($risComponenti->num_rows>7) {
        ?>
                <button type="button" class="btn btn-success btn-block mb-3" data-toggle="modal" data-target="#aggiungi-componente"><i class="fas fa-plus"></i> Aggiungi un componente</button>
        <?php
            }
            if($risComponenti->num_rows==0) {
        ?>
                <div class="card bg-light text-center mb-3">
                    <div class="card-body">
                        Non ci sono componenti
                    </div>
                </div>
        <?php
            }
            else {

                while($componente = $risComponenti->fetch_assoc()) {
                    if($componente["tipo"]=="componenteDinamico" || $componente["tipo"]=="pagine") {
                        $nomeElemento = "";
                    }
                    else {
                        $elemento = $this->db->leggiSingolaRiga($componente["tabellaRiferimento"],$componente["idElemento"]);
                        $nomeElemento = filter_var($elemento["nome"],FILTER_SANITIZE_STRING);
                    }

                    if($componente["tipo"]!="componenteDinamico") {
                        $linkModificaComponente = creaLinkModifica($componente);
                        $stringaPulsanteModifica = "onclick=\"{location.href='$linkModificaComponente';}\"";
                    }
                    else {
                        $stringaPulsanteModifica = "data-toggle=\"modal\" data-target=\"#configuraComponente{$componente["id"]}";
                    }

                    $posizionePrecedente = $componente["posizione"]-1;
                    $posizioneSuccessiva = $componente["posizione"]+1;
                    echo"<div id=\"componentePagina{$componente["id"]}\" class=\"card mb-3\">
                        <div class=\"card-header py-1 pr-sm-1 d-sm-flex justify-content-between align-items-center text-center\">
                            <div class=\"mb-1 mb-sm-0 d-flex align-items-center justify-content-start\">
                                <small class=\"text-muted mr-3\"><em><strong>ID:</strong></em> {$componente["idSezione"]} </small>
                                <small class=\"text-muted\"><em><strong>Classi:</strong></em> {$componente["classeSezione"]} </small>
                            </div>
                            <div class=\"azioni d-flex align-items-center justify-content-end\">
                                <form class=\"d-inline-flex mr-sm-1\">
                                    <div class=\"input-group input-group-sm d-flex align-items-center\">
                                        <small class=\"text-muted mr-2\">Pos.</small>
                                        <input type=\"number\" class=\"form-control\" aria-label=\"posizione\" min=\"1\" value=\"{$componente["posizione"]}\" id=\"posizioneComponente{$componente["id"]}\">
                                        <div class=\"input-group-append\">
                                            <button class=\"btn btn-primary\" type=\"button\" onclick=\"modificaPosizioneComponenteDaInput({$componente["id"]})\">Salva</button>
                                        </div>
                                    </div>
                                </form>
                                <div class=\"btn-group\" role=\"group\" aria-label=\"Basic example\">
                                    <button type=\"button\" class=\"btn btn-light modifica\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"Sposta su\" onclick={modificaPosizioneComponente({$componente["id"]},$posizionePrecedente);}><i class=\"fas fa-arrow-up\" ></i></button>
                                    <button type=\"button\" class=\"btn btn-light modifica\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"Sposta giu\" onclick={modificaPosizioneComponente({$componente["id"]},$posizioneSuccessiva);}><i class=\"fas fa-arrow-down\"></i></button>
                                    <button type=\"button\" class=\"btn btn-light modifica\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"Duplica\" onclick=\"modificaImpostazioniSezione({$componente["id"]},'{$componente["idSezione"]}','{$componente["classeSezione"]}','{$componente["aTuttaLarghezza"]}','{$componente["margineSezione"]}','{$componente["paddingSezione"]}')\"><i class=\"fas fa-cog\"></i></button>
                                    <button type=\"button\" class=\"btn btn-light modifica\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"Duplica\" onclick=\"duplicaComponente({$componente["id"]})\"><i class=\"far fa-clone\"></i></button>
                                    <button type=\"button\" class=\"btn btn-light elimina\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"Elimina\" onclick=\"eliminaComponentePagina({$componente["id"]},'{$componente["icona"]}','{$componente["nome"]}','$nomeElemento')\" ><i class=\"far fa-trash-alt\"></i></button>
                                </div>
                           </div>
                        </div>
                        <div class= \"card-body py-lg-0 d-flex align-items-center\">
                            <img class=\"thumb d-none d-lg-block\" src=\"{$componente["icona"]}\">
                            <div class=\"input-group mr-3\">
                                <span class=\"mr-3 align-self-center text-primary\"><em>{$componente["nome"]}</em></span>";
                                if($componente["tipo"]=="componenteDinamicoPagine") {
                                    $queryElementiComponente = "SELECT * FROM {$componente["tabellaRiferimento"]}";
                                    $risElementoComponente   = $this->db->eseguiQueryLettura($queryElementiComponente);
                                    echo"<select class=\"form-control form-control-sm\" id=\"idElementoComponente{$componente["id"]}\">";
                                            while($elemento = $risElementoComponente->fetch_assoc()) {
                                                if($componente["idElemento"]==$elemento["id"]) {
                                                    echo"<option value=\"{$elemento["id"]}\" selected >{$elemento["nome"]}</option>";
                                                }
                                                else {
                                                    echo"<option value=\"{$elemento["id"]}\">{$elemento["nome"]}</option>";
                                                }
                                            }
                                    echo"</select>
                                    <div class=\"input-group-append\">
                                        <button type=\"button\" class=\"btn btn-primary btn-sm\" onclick=\"cambiaIdElemento({$componente["id"]})\">Salva</button>
                                    </div>";
                                }
                                else {
                                    echo"<span class=\"text-truncate text-muted d-block w-75\">". substr(strip_tags($componente["testo"]),0,90)."</span>";
                                }
                                echo"
                            </div>
                            <div class=\"btn-group\">
                                <button type=\"button\" class=\"btn btn-primary btn-sm text-nowrap\" $stringaPulsanteModifica \"><span class=\"d-none d-lg-inline-block\">Configura</span><i class=\"far fa-edit fa-fw ml-1\"></i></button>
                            </div>
                        </div>
                    </div>";
                }
            }
        }
        /*
         * questa funzione viene usata da creaContenuto.php e duplicaContenuto.php
         * si crea un alias  a partire dal titolo del contenuto eliminando spazi e 
         * caratteri speciali controlla se è presente nel database un articol con 
         * quell'alias
         * 
         */
        function generaAlias($titolo) {
            $alias = strtolower(ControlloreStringhe::rimuoviCaratteriSpeciali($titolo));
            $query ="SELECT * FROM geecD_contenuti WHERE titolo LIKE '$titolo'";
            $ris = $this->db->eseguiQueryLettura($query);
            if($ris->num_rows==0) {
                return $alias;
            }
            else {
                return $alias.$ris->num_rows;
            }
        }
        
        /*
         * Esegue l'analisi SEO di un contenuto, viene invocato solo nella pagina
         * contenuti/creaContenuto.php dopo un aggiornamento o dopo la creazione di
         * un nuovo elemento
         */
        function eseguiAnalisiSeo() {

            //variabili che memorizzano l'indicatore per la seo
            $seoPositivo = "<span class=\"badge badge-success p-2\">BUONA</span>";
            $seoDiscreto = "<span class=\"badge badge-warning p-2\">DISCRETA</span>";
            $seoNegativo = "<span class=\"badge badge-danger p-2\">SCADENTE</span>";
        
            $seoPositivoTesto = "buona";
            $seoDiscretoTesto = "discreta";
            $seoNegativoTesto = "scadente";
            $punteggioSeo = 0;

            //inizializzazione array che contiene i risultati
            $analisiSeo = array();
            $suggerimenti = array();
            $analisiSeo["esito"] = $seoNegativo;
            $analisiSeo["esitoTesto"] = $seoNegativoTesto;

            //analisi titolo
            $numeroCaratteriTitolo = strlen($this->titolo);
            if ($numeroCaratteriTitolo > 20 && $numeroCaratteriTitolo < 50) {
                $punteggioSeo += 1;
            }

            //analisi meta descrizione
            $numeroCaratteriDescrizione = strlen($this->metaDescrizione);
            if($numeroCaratteriDescrizione==0) {
                $suggerimenti[count($suggerimenti)] = "<p><i class=\"fa fa-exclamation-triangle text-warning\" aria-hidden=\"true\"></i> La <strong>meta descrizione</strong> è assente, inseriscila per migliorare l'indicizzazione di questo contenuto.</p>";
                $punteggioSeo -= 1;
            }
            else if ($numeroCaratteriDescrizione > 0 && $numeroCaratteriDescrizione <= 40) {
                $suggerimenti[count($suggerimenti)] = "<p><i class=\"fa fa-exclamation-triangle text-warning\" aria-hidden=\"true\"></i> La <strong>meta descrizione</strong> è troppo corta, solo $numeroCaratteriDescrizione caratteri. Il numero di caratteri ottimale è tra i 120 e i 160.</p>";
                $punteggioSeo += 1;
            }
            else if($numeroCaratteriDescrizione > 40 && $numeroCaratteriDescrizione < 160) {
                $punteggioSeo += 2;
            }

            //analisi sottotitolo, solo per gli articoli
            $numeroCaratteriSottotitolo = strlen($this->descrizione);
            if($numeroCaratteriSottotitolo==0 && $this->tipo=="articolo") {
                $suggerimenti[count($suggerimenti)] = "<p><i class=\"fa fa-exclamation-triangle text-warning\" aria-hidden=\"true\"></i> Il <strong>sottotitolo</strong> è assente, inseriscilo per migliorare l'indicizzazione di questo contenuto.</p>";
                $punteggioSeo -= 1;
            }
            else if ($numeroCaratteriSottotitolo > 0 && $numeroCaratteriSottotitolo <= 40  && $contenuto["tipo"]=="articolo") {
                $suggerimenti[count($suggerimenti)] = "<p><i class=\"fa fa-exclamation-triangle text-warning\" aria-hidden=\"true\"></i> Il <strong>sottotitolo</strong> è troppo corto, solo $numeroCaratteriSottotitolo caratteri. La dimensione ottimale è tra i 100 e i 200 caratteri.</p>";
            }
            else if($numeroCaratteriSottotitolo > 40 && $numeroCaratteriSottotitolo < 200 && $this->tipo=="articolo") {
                $punteggioSeo += 1;
            }

            //analisi testo
            $numeroCaratteriTesto = $this->contaTestoContenuto();
            if($numeroCaratteriTesto == 0) {
                $suggerimenti[count($suggerimenti)] = "<p><i class=\"fa fa-exclamation-triangle text-warning\" aria-hidden=\"true\"></i> Il <strong>testo</strong> è assente, indicizzare questo contenuto sarà molto difficile.</p>";
            }
            else if($numeroCaratteriTesto > 0 && $numeroCaratteriTesto < 700) {
                $suggerimenti[count($suggerimenti)] = "<p><i class=\"fa fa-exclamation-triangle text-warning\" aria-hidden=\"true\"></i> Il <strong>testo</strong> è troppo corto, solo $numeroCaratteriTesto caratteri. Le dimensioni minime sono di almeno 500 caratteri, quelle ottimali oltre i 1000 caratteri.</p>";
            }
            else if ($numeroCaratteriTesto >700 && $numeroCaratteriTesto < 1000) {
                $punteggioSeo += 1;
                $suggerimenti[count($suggerimenti)] = "<p><i class=\"fa fa-exclamation-triangle text-warning\" aria-hidden=\"true\"></i> Il <strong>testo</strong> è un po' corto, $numeroCaratteriTesto caratteri. Le dimensioni ottimali sono di almeno 1000 caratteri.</p>";
            }
            else if ($numeroCaratteriTesto > 1000) {
                $punteggioSeo += 2;
            }
            
            ////controllo presenza tag h3, h4 e gli altri tag h
            if(strpos($this->testo,"<h1>")>0 && $this->tipo != "pagina") { // controllo presenza tag h1 (solo per articoli e gallerie, perché in questi tipi di contenuti il link viene posto sul sito)
                $punteggioSeo -= 1;
            }
            else if($numeroCaratteriTesto>1500 && (strpos($this->testo,"<h3>")>0 || strpos($this->testo,"<h4>")>0 || strpos($this->testo,"<h5>")>0 || strpos($this->testo,"<h6>")>0)) {
                $punteggioSeo += 1;
            }

            //analisi presenza immagini
            $numeroImmagini = 0;
            if ($this->foto != "") {
                $numeroImmagini ++;
            }
            $numeroImmagini += substr_count($this->testo,"<img");
            
            // controllo se ci sono immagini inserite con il componente immagini
            $queryComponenteImmagine = "SELECT * FROM geecD_composizionePagine WHERE idComponente=23 AND idPagina = $this->id";
            $risComponentiImmagini   = $this->db->eseguiQueryLettura($queryComponenteImmagine);
            $numeroImmagini          += $risComponentiImmagini->num_rows;

            if($numeroImmagini>0) {
                $punteggioSeo += 1;
            }
            else {
                $suggerimenti[count($suggerimenti)] = "<p><i class=\"fa fa-exclamation-triangle text-warning\" aria-hidden=\"true\"></i> <strong>Non ci sono immagini</strong> in questo contenuto, inseriscine almeno una.</p>";
            }

            //assegnazione valutazione
            if($punteggioSeo > 5) {
                $analisiSeo["esito"]      = $seoPositivo;
                $analisiSeo["esitoTesto"] = $seoPositivoTesto;
            }
            else if($punteggioSeo == 3 || $punteggioSeo == 4 || $punteggioSeo == 5) {
                $analisiSeo["esito"]      = $seoDiscreto;
                $analisiSeo["esitoTesto"] = $seoDiscretoTesto;
            }
            $analisiSeo["suggerimenti"] = $suggerimenti;
            return $analisiSeo;
        }
        
        function eliminaImmagineSezioneComponente($idSezione) {
            $queryModifica = "UPDATE geecD_composizionePagine SET immagineSfondo='' WHERE id=$idSezione";
            $this->db->eseguiQueryLettura($queryModifica);
        }
        
        function eliminaVideoSezioneComponente($idSezione) {
            $queryModifica = "UPDATE geecD_composizionePagine SET videoSfondo='' WHERE id=$idSezione";
            $this->db->eseguiQueryLettura($queryModifica);
        }
        
        /*
         * Questa funzione controlla il testo del contenuto, contando i caratteri della colonan testo e 
         * di ogni componente testo
         */
        function contaTestoContenuto() {
            $numeroCaratteriTesto = strlen($this->testo);
            $queryComponenteTesto = "SELECT * FROM geecD_composizionePagine WHERE idComponente=20 AND idPagina = $this->id";
            $risComponentiTesto   = $this->db->eseguiQueryLettura($queryComponenteTesto);
            while($componenteTesto = $risComponentiTesto->fetch_assoc()) {
                $numeroCaratteriTesto += strlen(strip_tags($componenteTesto["testo"]));
            }
            return $numeroCaratteriTesto;
        }
        
        function getDb() {
            return $this->db;
        }

        function getId() {
            return $this->id;
        }

        function getContenutoRiferimento() {
            return $this->contenutoRiferimento;
        }

        function getPosizione() {
            return $this->posizione;
        }
        
        function getLingua() {
            return $this->lingua;
        }

        function getTipo() {
            return $this->tipo;
        }

        function getAutore() {
            return $this->autore;
        }
        
        public function getPrivato() {
            return $this->privato;
        }
   
        function getCategoria() {
            return $this->categoria;
        }

        function getMostraNellaHome() {
            return $this->mostraNellaHome;
        }

        function getStato() {
            return $this->stato;
        }

        function getPunteggioSeo() {
            return $this->punteggioSeo;
        }

        function getTemplate() {
            return $this->template;
        }

        function getAttivaBreadcrumbs() {
            return $this->attivaBreadcrumbs;
        }

        function getTipoVisualizzazione() {
            return $this->tipoVisualizzazione;
        }

        function getTitolo() {
            return $this->titolo;
        }

        public function getMostraTitolo() {
            return $this->mostraTitolo;
        }

        function getMetaDescrizione() {
            return $this->metaDescrizione;
        }
        
        function getDescrizione() {
            return $this->descrizione;
        }

        function getAlias() {
            return $this->alias;
        }
        
        public function getCssGenerato() {
            return $this->cssGenerato;
        }
        
        function getCssAggiuntivo() {
            return $this->cssAggiuntivo;
        }

        function getTesto() {
            return $this->testo;
        }
                
        function getFoto() {
            return $this->foto;
        }
        
        function getCommenti() {
            return $this->commenti;
        }

        function getDatiContenuto() {
            return $this->datiContenuto;
        }

        function setDatiContenuto($datiContenuto): void {
            $this->datiContenuto = $datiContenuto;
        }
        
        function setCommenti($commenti) {
            $this->commenti = $commenti;
        }

        function setDb($db) {
            $this->db = $db;
        }

        function setId($id) {
            $this->id = $id;
        }

        function setContenutoRiferimento($contenutoRiferimento) {
            $this->contenutoRiferimento = $contenutoRiferimento;
        }

        function setPosizione($posizione) {
            $this->posizione = $posizione;
        }
        
        function setLingua($lingua) {
            $this->lingua = $lingua;
        }

        function setTipo($tipo) {
            $this->tipo = $tipo;
        }

        public function setPrivato($privato) {
            $this->privato = $privato;
        }
          
        function setAutore($autore) {
            $this->autore = $autore;
        }
        
        function setCategoria($categoria) {
            $this->categoria = $categoria;
        }

        function setMostraNellaHome($mostraNellaHome) {
            $this->mostraNellaHome = $mostraNellaHome;
        }

        function setStato($stato) {
            $this->stato = $stato;
        }

        function setPunteggioSeo($punteggioSeo) {
            $this->punteggioSeo = $punteggioSeo;
        }

        /*
         * Questo metoto imposta il template del contenuto. Il secondo parametro è
         * l'array con i valori ammissibili. Se è diverso da null viene effettuato il
         * controllo. 
         * Se l'array è diverso da null e il template passato in input non è presente 
         * nell'elenco viene inserita una stringa vuota
         */
        function setTemplate($template,$valoriAmmissibili = null) {
            if($valoriAmmissibili==null) {
                $this->template = $template;
            }
            else if($valoriAmmissibili!=null && in_array($template, $valoriAmmissibili)) {
                $this->template = $template;
            }
            else { // se arriva qui significa che la variabile non è nell'array dei valori ammissibili
                $this->template = "";
            }
        }

        function setAttivaBreadcrumbs($attivaBreadcrumbs) {
            $this->attivaBreadcrumbs = $attivaBreadcrumbs;
        }

        function setTipoVisualizzazione($tipoVisualizzazione) {
            $this->tipoVisualizzazione = $tipoVisualizzazione;
        }

        function setTitolo($titolo) {
            $this->titolo = $titolo;
        }

        public function setMostraTitolo($mostraTitolo) {
            $this->mostraTitolo = $mostraTitolo;
        }
        
        function setMetaDescrizione($metaDescrizione) {
            $this->metaDescrizione = $metaDescrizione;
        }
        
        function setDescrizione($descrizione) {
            $this->descrizione = $descrizione;
        }

        function setAlias($alias) {
            $this->alias = $alias;
        }

        public function setCssGenerato($cssGenerato): void {
            $this->cssGenerato = $cssGenerato;
        }
        
        function setCssAggiuntivo($cssAggiuntivo) {
            $this->cssAggiuntivo = $cssAggiuntivo;
        }

        function setTesto($testo) {
            $this->testo = $testo;
        }

        function setFoto($foto): void {
            $this->foto = $foto;
        }

    }
    
