Source for file func.frontend.php
Documentation is available at func.frontend.php
* Libreria di funzioni di gestione del database di regole di VFront.
* Sono qui scritte le funzioni di gestione dei registri
* e di utilità per la lettura e scrittura delle tabelle di sistema
* @subpackage Function-Libraries
* @author Mario Marcello Verona <marcelloverona@gmail.com>
* @copyright 2007 Mario Marcello Verona
* @license http://www.gnu.org/licenses/gpl.html GNU Public License
* Da l'oid di tabella restituisce il nome della stessa
* @param bool $solo_visibili
function oid2name($oid= 0,$solo_visibili= false){
$sql_vis = ($solo_visibili) ? "AND visibile=1" : "";
FROM {$db1['frontend']}.registro_tab
* Da nome tabella e gruppo restituisce l'id tabella (oid)
FROM {$db1['frontend']}.registro_tab
* Prendi le tabelle presenti nel registro
* @param bool $solo_visibili
$sql_vis = ($solo_visibili) ? "AND visibile=1" : "";
FROM {$db1['frontend']}.registro_tab
ORDER BY table_name",$link);
* Prendi le informazioni sui campi di una data tabella dal nome oppure dall'oid per un dato gruppo
* @param mixed $table_name Nome della tabella
* @param string $campi Campi della tabella che si vogliono recuperare, separati da virgola (se più di uno)
* @param bool $solo_visibili Prende solo le tabelle visibili (diritto SELECT) dal gruppo specificato
* @param int $gid Gruppo secondo il quale recuperare le informazioni sulle tabelle. Se non specificato è il gruppo in sessione
* @return matrix Matrice di risultati SQL
$sql_vis = ($solo_visibili) ? "AND in_visibile=1" : "";
$clausola_ID = "AND t.id_table=$oid";
// allora è nome tabella.. c'è bisogno pure del GID
$gid= (int) $_SESSION['gid'];
$clausola_ID = "AND t.table_name='$table_name'
FROM {$db1['frontend']}.registro_col c, {$db1['frontend']}.registro_tab t
WHERE c.id_table=t.id_table
ORDER BY c.in_ordine, c.ordinal_position",$link);
* Funzione di test per verificare l'esistenza di una tabella
$q= vmsql_query("SELECT id_table FROM {$db1['frontend']}.registro_tab WHERE table_name='$tabella' ",$link);
* Funzione di test per verificare l'esistenza di una tabella attraverso l'oid
$q= vmsql_query("SELECT id_table FROM {$db1['frontend']}.registro_tab WHERE id_table=". intval($oid),$link);
* Funzione di test per verificare l'esistenza di un campo di tabella
$q= vmsql_query("SELECT column_name FROM {$db1['frontend']}.registro_col WHERE column_name='$campo' ",$link);
* Data una tabella ed un opzionale campo, restituisce le tabelle che sono ad essa collegate e dipendenti
* tramite un'analisi dei campi chiavi esterne.
$sql_campo = ($db1['dbtype']== 'postgres') ? "AND column_name='$campo' " : "AND REFERENCED_COLUMN_NAME='$campo' ";
if($db1['dbtype']== 'postgres') {
$sql = "SELECT table_name, column_name
FROM information_schema.key_column_usage
WHERE table_schema='". $db1['dbname']. "'
AND table_name='$tabella'
ORDER BY table_name, column_name";
$sql = "SELECT TABLE_NAME, COLUMN_NAME
FROM information_schema.key_column_usage
WHERE REFERENCED_TABLE_SCHEMA='". $db1['dbname']. "'
AND REFERENCED_TABLE_NAME='$tabella'
ORDER BY TABLE_NAME, COLUMN_NAME";
* Individua i campi coinvolti in una relazione esterna e tabella.campo a cui è legato
* Funziona sia passando l'oid numerico che una stringa che rappresenta il nome di tabella + il gruppo
// se $tab è un numero è l'oid
// altrimenti il nome tabella
$clausola = "AND rb.id_table=$tab";
$clausola = "AND rb.table_name='$tab'
GROUP BY column_name,colref
if($db1['dbtype']== 'postgres'){
$sql_fk = " SELECT column_name, ". concat_sintax("k.table_name ,'.', k.column_name", 'colref'). "
FROM information_schema.key_column_usage k,
information_schema.table_constraints c,
{$db1['frontend']}.registro_tab rb
WHERE c.constraint_type='FOREIGN KEY'
AND c.constraint_schema='{$db1['dbname']}'
AND k.constraint_schema='{$db1['dbname']}'
AND c.constraint_name=k.constraint_name
AND rb.table_name=c.table_name
$sql_fk = " SELECT column_name, ". concat_sintax("k.REFERENCED_TABLE_NAME ,'.', k.REFERENCED_COLUMN_NAME", 'colref'). "
FROM information_schema.key_column_usage k,
information_schema.table_constraints c,
{$db1['frontend']}.registro_tab rb
WHERE c.constraint_type='FOREIGN KEY'
AND c.constraint_schema='{$db1['dbname']}'
AND k.constraint_schema='{$db1['dbname']}'
AND c.constraint_name=k.constraint_name
AND rb.table_name=c.table_name
return array(array(),array());
* Sostituisce lato server alcune variabili specificate nell'impostazione dei campi da parte dell'amministratore
* e che possono essere inserite ad esempio nei campi hidden e restituisce il valore
* @param string $variabile
$variabile= trim($variabile);
case '%nick' : $out= (isset ($_SESSION['user']['nick'])) ? $_SESSION['user']['nick'] : false; break;
case '%email' : $out= (isset ($_SESSION['user']['email'])) ? $_SESSION['user']['email'] : false; break;
case '%gid' : $out= (isset ($_SESSION['gid'])) ? $_SESSION['gid'] : false; break;
case '%gruppo' : $out= (isset ($_SESSION['gid'])) ? gid2nome_gruppo($_SESSION['gid']) : false; break;
case '%nome' : $out= (isset ($_SESSION['user']['nome'])) ? $_SESSION['user']['nome'] : false; break;
case '%cognome' : $out= (isset ($_SESSION['user']['cognome'])) ? $_SESSION['user']['cognome'] : false; break;
case '%nomecognome' : $out= (isset ($_SESSION['user']['nome']) && isset ($_SESSION['user']['cognome']))
? $_SESSION['user']['nome']. " ". $_SESSION['user']['cognome'] : false; break;
case '%cognomenome' : $out= (isset ($_SESSION['user']['cognome']) && isset ($_SESSION['user']['nome']))
? $_SESSION['user']['cognome']. " ". $_SESSION['user']['nome'] : false; break;
case '%istitutocomp' : $out= (isset ($_SESSION['user']['id_istituto']) && isset ($_SESSION['user']['id_istituto']))
? $_SESSION['user']['id_istituto'] : false; break;
case '%now' : $out= date('Y-m-d'); break;
case '%timestamp' : $out= date('Y-m-d H:i:s'); break;
return ($out!= false && $out!= '') ? $out : false;
* Funzione che, interrogando l'information_schema, recupera la chiava primaria di una tabella
$gid = (int) $_SESSION['gid'];
$sql_tipo= "SELECT table_type FROM {$db1['frontend']}.registro_tab
WHERE table_name='$tabella' AND gid=$gid";
// Chiave primaria esplicita delle viste
$sql_pk = "SELECT view_pk AS campo_pk
FROM {$db1['frontend']}.registro_tab rb
WHERE rb.table_name='$tabella'
if($db1['dbtype']== 'postgres'){
$sql_pk = "SELECT i.column_name as campo_pk
FROM {$db1['frontend']}.registro_tab rb
INNER JOIN information_schema.key_column_usage i ON (i.table_name=rb.table_name AND i.table_schema='{$db1['dbname']}')
INNER JOIN information_schema.table_constraints c ON (c.table_name=rb.table_name AND c.table_schema='public' AND c.constraint_name=i.constraint_name)
WHERE rb.table_name='$tabella'
AND c.constraint_type='PRIMARY KEY'
else if($db1['dbtype']== 'mysql'){
$sql_pk = "SELECT i.column_name as campo_pk
FROM {$db1['frontend']}.registro_tab rb
LEFT JOIN information_schema.key_column_usage i ON (i.table_name=rb.table_name AND i.table_schema='{$db1['dbname']}')
WHERE rb.table_name='$tabella'
AND CONSTRAINT_NAME='PRIMARY'
* Funzione che recupera tutte le chiavi primarie di una tabella.
* Funziona come prendi_PK() ma restituisce una o più chiavi sotto forma di array
* Da utilizzare quando si presume che le PK possano essere più di una
$gid = (int) $_SESSION['gid'];
$q_tipo= vmsql_query("SELECT table_type FROM {$db1['frontend']}.registro_tab
WHERE table_name='$tabella' AND gid=$gid",$link);
// Chiave primaria esplicita delle viste
$sql_pk = "SELECT view_pk AS campo_pk
FROM {$db1['frontend']}.registro_tab rb
WHERE rb.table_name='$tabella'
if($db1['dbtype']== 'postgres'){
$sql_pk = "SELECT i.column_name as campo_pk
FROM {$db1['frontend']}.registro_tab rb
INNER JOIN information_schema.key_column_usage i ON (i.table_name=rb.table_name AND i.table_schema='{$db1['dbname']}')
INNER JOIN information_schema.table_constraints c ON (c.table_name=rb.table_name AND c.table_schema='public' AND c.constraint_name=i.constraint_name)
WHERE rb.table_name='$tabella'
AND c.constraint_type='PRIMARY KEY'
else if($db1['dbtype']== 'mysql'){
$sql_pk = "SELECT i.column_name as campo_pk
FROM {$db1['frontend']}.registro_tab rb
LEFT JOIN information_schema.key_column_usage i ON (i.table_name=rb.table_name AND i.table_schema='{$db1['dbname']}')
WHERE rb.table_name='$tabella'
AND CONSTRAINT_NAME='PRIMARY'
$gid = (int) $_SESSION['gid'];
$sql_pk = "SELECT i.column_name as campo_pk
FROM {$db1['frontend']}.registro_submask rb
LEFT JOIN information_schema.key_column_usage i ON (i.table_name=rb.nome_tabella AND i.table_schema='{$db1['dbname']}')
WHERE rb.id_submask='$id_submask'
AND CONSTRAINT_NAME='PRIMARY'
* Prende la chiave primaria di una tabella in base all'OID (Id della tabella) passato
* @param string $table_type "BASE TABLE" | "VIEW"
// Chiave primaria esplicita delle viste
$sql_pk = "SELECT view_pk AS campo_pk
FROM {$db1['frontend']}.registro_tab rb
if($db1['dbtype']== 'postgres'){
$sql_pk = "SELECT i.column_name as campo_pk
FROM {$db1['frontend']}.registro_tab rb
INNER JOIN information_schema.key_column_usage i ON (i.table_name=rb.table_name AND i.table_schema='{$db1['dbname']}')
INNER JOIN information_schema.table_constraints c ON (c.table_name=rb.table_name AND c.table_schema='public' AND c.constraint_name=i.constraint_name)
AND c.constraint_type='PRIMARY KEY'
else if($db1['dbtype']== 'mysql'){
$sql_pk = "SELECT i.column_name as campo_pk
FROM {$db1['frontend']}.registro_tab rb
LEFT JOIN information_schema.key_column_usage i ON (i.table_name=rb.table_name AND i.table_schema='{$db1['dbname']}')
AND CONSTRAINT_NAME='PRIMARY'
* Prende le sottomaschere impostate per una data maschera data l'ID (oid) del record
* @param bool $solo_visibili
$clausola_solo_visibili = ($solo_visibili) ? "AND sub_select='1' " : "";
$sql = "SELECT * FROM ". $db1['frontend']. ".registro_submask
$q= vmsql_query("SELECT $cols FROM information_schema.views
WHERE TABLE_SCHEMA='{$db1['dbname']}'
AND TABLE_NAME='$view_name'",$link);
* Restituisce unamatrice bidimensionale (gid=>nome_gruppo) dei gruppi presenti in DB VFront
* Utile per (ad esempio) mostrare una tendina
* Si possono escludere dei gruppi mediante il parametro $escludi_gid
* @param mixed $escludi_gid
$clausola_esclusione= " WHERE gid!=". intval($escludi_gid);
$q_g= vmsql_query("SELECT gid, nome_gruppo FROM ". $db1['frontend']. ".gruppo $clausola_esclusione ORDER BY gid",$link);
$sql= "SELECT campo_pk_parent, campo_fk_sub FROM {$db1['frontend']}.registro_submask WHERE id_table=". intval($id_table);
* Recupera i file allegati associati ad un dato record di una data tabella
* presenti nella tabella "allegato" sotto forma di matrice
* @param mixed $valore_id
$sql= "SELECT * FROM ". _TABELLA_ALLEGATO. " WHERE tipoentita='$tabella' AND codiceentita='$valore_id'";
* Recupera i link associati al record di una data tabella
* dalla tabella "Link" sotto forma di matrice
* @param mixed $valore_id
$sql= "SELECT * FROM ". _TABELLA_LINK. " WHERE tipoentita='$tabella' AND codiceentita='$valore_id'";
* Cancella dal DB e dal filesystem un allegato
* @param int $id_allegato
// elimino dal file system
* Imposta la sintassi SQL di LIMIT e OFFSET in base al tipo di database utilizzato
* Questa funzione si rende necessaria a causa della diversa sintassi di mysql e postgresql
if($db1['dbtype']== 'postgres'){
if($offset!= '') $str.= " OFFSET $offset";
elseif($db1['dbtype']== 'mysql'){
if($offset!= '') $str.= "LIMIT $offset,$limit";
else $str.= "LIMIT $limit";
* Imposta la sintassi SQL di concatenazione stringhe
* Questa funzione si rende necessaria a causa della diversa sintassi di mysql e postgresql
* @param string $arguments
if($db1['dbtype']== 'postgres'){
elseif($db1['dbtype']== 'mysql'){
$str= "CONCAT($arguments)";
if($as!= '') $str.= " AS $as";
* Funzione per la determinazione del tipo di campo
* Utile soprattutto per PostgreSQL
* @param mixed $tabella_o_gid
$id_table= $tabella_o_gid;
$id_table= name2oid($tabella_o_gid,$_SESSION['gid']);
$sql= "SELECT column_type FROM {$db1['frontend']}.registro_col
WHERE id_table=$id_table AND column_name='$campo'";
if(ereg("int",$tipo) || ereg("double",$tipo) || ereg("float",$tipo)) return true;
|