id = $idOggetto; $this->idOggetto = $idOggetto; $datiOggetto = datoOgg($idOggetto, '*'); $this->datiOggetto = $datiOggetto; $this->chiave = $this->datiOggetto['chiave']; $this->campo_default = $this->datiOggetto['campo_default']; $this->nome = $this->datiOggetto['nome']; $this->id_categoria = $this->datiOggetto['id_categoria']; if (count($this->datiOggetto['utilizzi'])) { $this->utilizzo = true; foreach ($this->datiOggetto['utilizzi'] as $utilizzo) { $this->utilizzi[] = array( 'utilizzo' =>true, 'utilizzoTabella' =>$utilizzo['utilizzo_tabella'], 'utilizzoCampi' => explode(',',$utilizzo['utilizzo_campi']), 'utilizzoCampiInput' =>$utilizzo['utilizzo_campi_input'], 'utilizzoValore' =>$utilizzo['utilizzo_valore'], 'utilizzoChiave' =>$utilizzo['utilizzo_chiave'] ); } } $this->struttura = $this->parsingStruttura(); $this->strutturaInversa = $this->parsingStrutturaInversa(); if (!$this->datiOggetto['num_elenco'] OR !is_int($this->datiOggetto['num_elenco'])) { $this->datiOggetto['num_elenco']=20; } // verifico presenza di crittografia foreach($this->struttura as $campoT) { if ($campoT['input_crypt']) { $this->cryptobj = 1; $this->cryptCampi[] = $campoT['nomedb']; } } } function parsingStruttura() { global $database,$dati_db,$configurazione, $datiUser; // prendo i nomi dei campi e il tipo di input dal database $sql = "SELECT * FROM ".$dati_db['prefisso']."oggetti_struttura WHERE id_oggetto=".$this->idOggetto; if( !($result = $database->connessioneConReturn($sql)) ) { die("errore in parsingStruttura"); } $struttura = $database->sqlArrayAss($result); return $struttura; } function loadCampo($idCampo) { foreach ($this->struttura as $campo) { if ($campo['id'] == $idCampo) { return $campo; } } return false; } function parsingStrutturaInversa() { global $database,$dati_db; // prendo i nomi dei campi e il tipo di input dal database $sql = "SELECT * FROM ".$dati_db['prefisso']."oggetti_struttura WHERE tipo='oggetto' AND id_oggetto!=".$this->idOggetto." AND selezione_oggetto=".$this->idOggetto; if( !($result = $database->connessioneConReturn($sql)) ) { die("errore in parsingStruttura"); } //echo "Query: ".$sql; $strutturaInversa = $database->sqlArrayAss($result); return $strutturaInversa; } function anniDocumenti($campoAnno = 'data_creazione', $campoCondizione = '', $valoreCondizione = '', $condizioneAgg = '') { global $dati_db,$database; // elaboro condizione normale (di solito per ente in navigazione) $condizione= ""; if ($campoCondizione != '' AND $valoreCondizione != '' ) { $condizione= " WHERE (stato = 1) AND (hide_read != 1) AND (".$campoCondizione."=".$valoreCondizione." OR ".$campoCondizione."=0) "; } // verifico presenza condizione aggiuntiva if ($condizioneAgg != '') { if ($condizione != '') { $condizione .= ' AND '.$condizioneAgg; } else { $condizione= " WHERE (stato = 1) AND (hide_read != 1) AND ".$condizioneAgg; } } $groupStr = ""; if ($campoAnno != '') { $groupStr = " GROUP BY FROM_UNIXTIME(".$campoAnno.", '%Y') "; } $sql = "SELECT COUNT(id) as totale,FROM_UNIXTIME(".$campoAnno.", '%Y') AS anno FROM ".$dati_db['prefisso'].$this->datiOggetto['tabella']." ".$condizione.$groupStr." ORDER by anno DESC"; if( !($result = $database->connessioneConReturn($sql)) ) { //echo "Problemi temporanei nella lista documenti. Si prega di provare in seguito($sql)."; } //echo "query: ".$sql; if ($database->sqlNumRighe($result) != 0) { $listaOggetti=$database->sqlArrayAss($result); } else { $listaOggetti = array(); } return $listaOggetti; } function listaDocumenti($inizio = 0,$limite = 0,$campoOrdine = 'nessuno', $ordine = 'nessuno', $campoCondizione = '', $valoreCondizione = '', $condizioneAgg = '', $associazioni = 0) { global $dati_db,$database; //lognormale("caggiunt: ".$condizioneAgg); // elaboro la stringa if ($limite == 'tutti') { $limiteStr = ''; } else { $limiteStr = ' limit '.$inizio.','.$limite; } $datiDaCaricare = "*"; if ($associazioni) { $datiDaCaricare = "id"; } $queryWF = ''; if ($this->idOggetto > 0) { $queryWF = ' AND stato=1 '; } // elaboro condizione normale (di solito per ente in navigazione) $condizione= ""; if ($campoCondizione != '' AND $valoreCondizione != '' ) { $condizione= " WHERE (hide_read != 1 ".$queryWF.") AND (".$campoCondizione."=".$valoreCondizione." OR ".$campoCondizione."=0) "; } //echo("campoCondizione = ".$campoCondizione); //echo("
valoreCondizione = ".$valoreCondizione); // verifico presenza condizione aggiuntiva if ($condizioneAgg != '') { if ($condizione != '') { $condizione .= ' AND ('.$condizioneAgg.")"; } else { $condizione= " WHERE (hide_read != 1 ".$queryWF.") AND (".$condizioneAgg.")"; } } //lognormale("caggiunt: ".$condizioneAgg); if ($campoOrdine == 'nessuno') { $sql = "SELECT ".$datiDaCaricare." FROM ".$dati_db['prefisso'].$this->datiOggetto['tabella']." ".$condizione.$limiteStr; } else { // -------------------- lorenzo 12/05/2021 /* if ($ordine == 'nessuno' or $ordine == '') { $ordine = ''; } else { $ordine = 'DESC'; } */ if ($ordine == 'nessuno' or $ordine == '') { $ordine = ''; } elseif(strtolower($ordine) != 'asc') { $ordine = 'DESC'; } //------------------------------------------- // in fase di lista, carico solo i campi di default per ogni oggetto $sql = "SELECT ".$datiDaCaricare." FROM ".$dati_db['prefisso'].$this->datiOggetto['tabella']." ".$condizione." order by ".$campoOrdine." ".$ordine.$limiteStr; } // echo "
queryy: ".$sql; exit(0); if( !($result = $database->connessioneConReturn($sql)) ) { //echo "Problemi temporanei nella lista documenti. Si prega di provare in seguito($sql)."; } // lognascosto("query: ".$sql,$this); // lognascosto("query: ",$sql); // echo "
queryy: ".$sql; //file_put_contents("queryy_documento.txt", $sql."\r\n", FILE_APPEND | LOCK_EX); // debug: su shell linux digitare: tail -f queryy_documento.txt | grep // lognormale("query: ".$sql); if ($database->sqlNumRighe($result) != 0) { $listaOggetti=$database->sqlArrayAss($result); } else { $listaOggetti = array(); } // lognascosto("lista oggetti: ".$listaOggetti,$listaOggetti); $arrayReturn = array(); if ($associazioni) { foreach ((array)$listaOggetti as $id) { $arrayReturn[] = $this->caricaDocumento($id['id'], '',1); } $listaOggetti = $arrayReturn; } else { // verifico presenza crittografia solo se non sono passato per caricadocumento singolo, come nel caso delle associazioni if ($this->cryptobj) { //lognormale('pre',$listaOggetti); // devo ciclare il dato crittografato su utti i campi che lo prevedono $numC = 0; foreach((array)$listaOggetti as $istanzaOggetto) { foreach($this->cryptCampi as $campoCrypt) { $listaOggetti[$numC][$campoCrypt] = decryptIt($listaOggetti[$numC][$campoCrypt]); } $numC++; } //lognormale('post',$listaOggetti); } } // lognascosto("lista oggetti: ".$listaOggetti,$listaOggetti); //var_dump($listaOggetti); return $listaOggetti; } function listaCategorie($campoCondizione, $valoreCondizione = '', $condizioneAgg = '') { global $dati_db,$database; $limiteStr = ''; $datiDaCaricare = "*"; // elaboro condizione normale (di solito per ente in navigazione) $condizione= ""; if ($campoCondizione != '' AND $valoreCondizione != '' ) { $condizione= " WHERE hide_read != 1 AND id != 0 AND (id_oggetto=".$this->id." OR id_oggetto=0) AND (".$campoCondizione."=".$valoreCondizione." OR ".$campoCondizione."=0) "; } // verifico presenza condizione aggiuntiva if ($condizioneAgg != '') { if ($condizione != '') { $condizione .= ' AND '.$condizioneAgg; } else { $condizione= " WHERE (hide_read != 1) AND (id_oggetto=".$this->id." OR id_oggetto=0) AND ".$condizioneAgg; } } $sql = "SELECT ".$datiDaCaricare." FROM ".$dati_db['prefisso']."oggetti_categorie ".$condizione.$limiteStr." ORDER BY priorita"; if( !($result = $database->connessioneConReturn($sql)) ) { //echo "Problemi temporanei nella lista documenti. Si prega di provare in seguito($sql)."; } //echo "query: ".$sql; if ($database->sqlNumRighe($result) != 0) { $listaCategorie=$database->sqlArrayAss($result); } else { $listaCategorie = array(); } //lognormale('cat',$listaCategorie); return $listaCategorie; } function datiPaginazione($campoCondizione='', $valoreCondizione = '', $condizioneAgg = '') { global $dati_db,$database,$pagina; //echo("pagc: ".$pagina); // elaboro condizione normale (di solito per ente in navigazione) $queryWF = ''; if ($this->idOggetto > 0) { $queryWF = ' AND stato=1 '; } $condizione= ""; if ($campoCondizione != '' AND $valoreCondizione != '' ) { $condizione= " WHERE (hide_read != 1 ".$queryWF.") AND (".$campoCondizione."=".$valoreCondizione." OR ".$campoCondizione."=0) "; } // verifico presenza condizione aggiuntiva if ($condizioneAgg != '') { if ($condizione != '') { $condizione .= ' AND ('.$condizioneAgg.")"; } else { $condizione= " WHERE (hide_read != 1 ".$queryWF.") AND (".$condizioneAgg.")"; } } $sql = "SELECT count(id) as totale FROM ".$dati_db['prefisso'].$this->datiOggetto['tabella']." ".$condizione; if( !($result = $database->connessioneConReturn($sql)) ) { die("non riesco a prendere le informazioni elementi in db"); } //lognascosto($sql); //lognormale($sql); $conto=$database->sqlArray($result); // ora verifico il tipo di paginazione standard per gli elenchi $numPagine = ceil($conto['totale']/$this->datiOggetto['num_elenco']); // elaboro inizio in rapporto la pagina $inizio = ($this->datiOggetto['num_elenco']*$pagina)-$this->datiOggetto['num_elenco']; if (isset($_POST['strcerca'])) { $inizio = 0; $pagina = 1; } $res = array( 'numRecord' => $this->datiOggetto['num_elenco'], 'inizio' => $inizio, 'numPagine' => $numPagine, 'pagina' => $pagina, 'totale' => $conto['totale'] ); //lognormale('res', $res); return $res; } function stringaRicerca() { if (isset($_POST['strcerca'])) { $stringa = strip_tags($_POST['strcerca']); $stringa = htmlentities_54($stringa); } else if (isset($_GET['strcerca'])) { $stringa = strip_tags($_GET['strcerca']); $stringa = htmlentities_54($stringa); } // inzializzo il tipo di ricerca if (isset($_POST['esattamente'])) { $esattamente = forzaNumero($_POST['esattamente']); } else { if (isset($_GET['esattamente'])) { $esattamente = forzaNumero($_GET['esattamente']); } else { $esattamente = 0; } } // a seconda del tipo di ricerca, creo l'array dei termini da ricercare $arrayCerca = array(); if (!$esattamente) { $arrayCerca = explode (" ", $stringa); // pulisco l'array di ricerca dalle stringhe troppo piccole $nuovoCerca = array(); foreach($arrayCerca as $parola) { if (strlen($parola)>2) { $nuovoCerca[] = html_entity_decode($parola); $nuovoCerca[] = $parola; } } $arrayCerca = $nuovoCerca; } else { $arrayCerca[] = html_entity_decode($stringa); $arrayCerca[] = $stringa; } // $arrayCerca2 = $arrayCerca; // array_walk_recursive($arrayCerca2, function (&$value, $key) { // if (is_string($value)) { // $value = html_entity_decode(iconv('windows-1252', 'utf-8', $value)); // } // }); // $arrayCerca = array_merge(array_values($arrayCerca), array_values($arrayCerca2)); //lognormale('',$arrayCerca); // elimino tutti i risultati per stringa vuota if (isset($stringa) and $stringa != '' and strlen($stringa) > 2 and count($arrayCerca) > 0 AND $stringa) { $condizione = ''; foreach((array)$this->struttura as $c) { if($c['search']) { if ($condizione != '') { $condizione .= ' OR '; } //$condizione .= " ( "; //ricerca su ogni parola inserita $k=0; foreach((array)$arrayCerca as $qr) { $condizione .= " (".$c['nomedb']." = '".$qr."' OR ". $c['nomedb']." LIKE '".$qr."%' OR ". //$c['nomedb']." LIKE '% ".$qr."%' OR ". //lorenzo 17/11/2020 $c['nomedb']." LIKE '%".$qr."%' OR ". //lorenzo 17/11/2020 $c['nomedb']." LIKE '%\'".$qr."%' OR ". $c['nomedb']." LIKE '%>".$qr."%') "; if (($k+1) != count($arrayCerca)) { // devo continuare il ciclo quindi inserisco la condizione // MODIFICA 15/01/24: Sostituito AND con OR per il corretto funzionamento della condizione mysql // $condizione .= " AND "; $condizione .= " OR "; } $k++; } //$condizione .= " ) "; } } if(trim($condizione)=='') { //nessun campo sul quale cercare $condizione = ' 1=0 '; } else if($condizione != '') { //$condizione = ' ('.$condizione.') '; } //$condizione = ' stato=1 AND ('.$condizione.') '; return $condizione; } return false; } ////////////////////// FUNZIONE DI RITORNO UNICO VALORE DAL DATABASE//////////////////////////////////////// function caricaDocumento($id, $condizioneAggiuntiva = '',$associazioni=0) { global $dati_db,$database,$idModelloEditoriale,$entePubblicato; if (isset($id) and $id and is_numeric($id) AND $id != '') { if($condizioneAggiuntiva != '') { $condizioneAggiuntiva = ' AND ('.$condizioneAggiuntiva.') '; } $sql = "SELECT * FROM ".$dati_db['prefisso'].$this->datiOggetto['tabella']." WHERE id=".$id.$condizioneAggiuntiva; if( !($result = $database->connessioneConReturn($sql)) ) { die("Errore critico in caricamento elemento (documento)"); } $elemento = $database->sqlArray($result); $elemento['utilizzo'] = array(); if ($this->utilizzo) { // ciclo i possibili utilizzi foreach ($this->utilizzi as $utilizzo) { /* echo "
Carico le relazioni
";
					print_r($utilizzo);
					echo "
"; */ // carico le relazioni nella tabella utilizzo per la chiave scelta $sql = "SELECT * FROM ".$dati_db['prefisso'].$utilizzo['utilizzoTabella']." WHERE ".$utilizzo['utilizzoChiave']."=".$id." ORDER by id"; if( !($result = $database->connessioneConReturn($sql)) ) { die("Errore critico in caricamento tabella utilizzo (documento)"); } $elemento['utilizzo_'.$utilizzo['utilizzoValore']] = $database->sqlArrayAss($result); } } // ora carico le normali correlazioni if ($this->id >0 AND $associazioni) { // CAMPI ASSOCIAZIONI PROPRIETARI foreach ($this->struttura as $campoTemp) { if ($campoTemp['tipo']=='area_tematica' AND $elemento[$campoTemp['nomedb']] != '') { //lognascosto('',$campoTemp); // EFFETTUO QUERY STATICA SU TAGS $sql = "SELECT t.* FROM ".$dati_db['prefisso']."areetematiche_tags t WHERE t.id IN (".$elemento[$campoTemp['nomedb']].") AND (t.id_ente = ".$elemento['id_ente']." OR t.id_ente=0) ORDER by nome"; if( !($result = $database->connessioneConReturn($sql)) ) { //die("errore in caricamento tabella tags".$sql); } $elemento[$campoTemp['nomedb']."_array"] = $database->sqlArrayAss($result); } else if ($campoTemp['tipo']=='oggetto') { $oggObj = new documento($campoTemp['selezione_oggetto']); $valoriObj = explode(',',$elemento[$campoTemp['nomedb']]); $elemento[$campoTemp['nomedb']."_array"] = array(); foreach ($valoriObj as $idObj) { if ($idObj) { // lettura completa area tematica $istanzaObj = $oggObj->caricaDocumento($idObj,'',0); if ($istanzaObj['hide_read'] != 1 AND ($entePubblicato['id']==$istanzaObj['id_ente'] OR !$istanzaObj['id_ente'])) { $elemento[$campoTemp['nomedb']."_array"][] = $istanzaObj; } else { unset($istanzaObj); } } } unset($oggObj); } } // CAMPI ASSOCIAZIONI INVERSE foreach ((array)$this->strutturaInversa as $campoTemp) { if ($campoTemp['tipo']=='oggetto') { $oggObj = new documento($campoTemp['id_oggetto']); $condObj = "hide_read != 1 AND (".$campoTemp['nomedb']."='".$id."' OR ".$campoTemp['nomedb']." LIKE '%,".$id.",%' OR ".$campoTemp['nomedb']." LIKE '".$id.",%' OR ".$campoTemp['nomedb']." LIKE '%,".$id."')"; //gestione ordinamento slot eagenda -- lorenzo 20/07/2022 $campoOrdine = ($campoTemp['id_oggetto'] == 81) ? 'orario_inizio' : 'nessuno'; // ------------------------------------------------------- $listaObj = $oggObj->listaDocumenti(0, 'tutti', $campoOrdine, '', 'id_ente' ,$entePubblicato['id'], $condObj ); $elemento[$oggObj->datiOggetto['nomedb']."_".$campoTemp['nomedb']] = $listaObj; unset($oggObj); } } } // ora carico le correlazioni solop per tags if ($this->id ==-28 AND $associazioni) { // EFFETTUO QUERY STATICA SU CAMPI TAGS IN OGGETTO ISWEB $sql = "SELECT * FROM ".$dati_db['prefisso']."oggetti_struttura WHERE tipo = 'area_tematica'"; if( !($result = $database->connessioneConReturn($sql)) ) { die("errore in caricamento tabella struttura oggetto"); } $campiTags = $database->sqlArrayAss($result); foreach ((array)$campiTags as $campoTemp) { $oggObj = new documento($campoTemp['id_oggetto']); $condObj = $campoTemp['nomedb']."='".$id."' OR ".$campoTemp['nomedb']." LIKE '%,".$id.",%' OR ".$campoTemp['nomedb']." LIKE '".$id.",%' OR ".$campoTemp['nomedb']." LIKE '%,".$id."'"; $listaObj = $oggObj->listaDocumenti(0, 'tutti', 'nessuno', '', 'id_ente' ,$entePubblicato['id'], $condObj ); $elemento[$oggObj->datiOggetto['nomedb']."_".$campoTemp['nomedb']] = $listaObj; unset($oggObj); } } // verifico presenza crittografia if ($this->cryptobj) { // devo ciclare il dato crittografato su utti i campi che lo prevedono foreach($this->cryptCampi as $campoCrypt) { $elemento[$campoCrypt] = decryptIt($elemento[$campoCrypt]); } } return $elemento; } return false; } function caricaCorrelazioni($stringaTag, $limite, $idOggetto=0,$condizione='',$associazioni=0) { global $dati_db,$database,$entePubblicato; $elemento = array(); if (isset($stringaTag) AND $stringaTag != '') { // EFFETTUO QUERY STATICA SU CAMPI TAGS IN OGGETTO ISWEB $sql = "SELECT * FROM ".$dati_db['prefisso']."oggetti_struttura WHERE tipo = 'area_tematica'"; //echo($sql); if( !($result = $database->connessioneConReturn($sql)) ) { die("errore in caricamento tabella struttura oggetto"); } $campiTags = $database->sqlArrayAss($result); $arrayTag = explode(',',$stringaTag); foreach ((array)$campiTags as $campoTemp) { if ( ($this->id != $campoTemp['id_oggetto'] AND !$idOggetto) OR $idOggetto==$campoTemp['id_oggetto'] ) { $oggObj = new documento($campoTemp['id_oggetto']); $elemento[$oggObj->datiOggetto['nomedb']] = array(); $chiaveArray = $oggObj->datiOggetto['nomedb']; // elaboro condizione per valori dei tag $condObj='('; foreach ($arrayTag as $tag) { if ($condObj !='(') { $condObj .= " OR "; } $condObj .= "(".$campoTemp['nomedb']."='".$tag."' OR ".$campoTemp['nomedb']." LIKE '%,".$tag.",%' OR ".$campoTemp['nomedb']." LIKE '".$tag.",%' OR ".$campoTemp['nomedb']." LIKE '%,".$tag."')"; } $condObj.=')'; if ($condizione!='') { $condObj.=' AND ('.$condizione.')'; } $listaObj = $oggObj->listaDocumenti(0, $limite, $oggObj->datiOggetto['ordine_campo'], $oggObj->datiOggetto['ordine_senso'], 'id_ente' ,$entePubblicato['id'], $condObj, $associazioni ); $elemento[$oggObj->datiOggetto['nomedb']] = $listaObj; unset($oggObj); } } if ($idOggetto) { return $elemento[$chiaveArray]; } else { return $elemento; } } return false; } } ?>