Source for file sync_reg_tab.postgres.php
Documentation is available at sync_reg_tab.postgres.php
* Sono presenti in questo file le procedure per inizializzare, inserire e eliminare le informazioni
* sulle tabelle nel registro di VFront per tenerlo allineato con l'information_schema del database.
* Questo file è la versione per Postgres
* @desc Procedure di manutenzione del registro per Postgres
* @subpackage Administration
* @author M.Marcello Verona
* @copyright 2007 M.Marcello Verona
* @license http://www.gnu.org/licenses/gpl.html GNU Public License
* @see sync_reg_tab.mysql.php
require_once("../inc/conn.php");
require_once("../inc/layouts.php");
require_once("../inc/func.comuni.php");
require_once("../inc/func.frontend.php");
##############################################
# PROCEDURA AGGIORNAMENTO DEI CAMPI DELLE TABELLE
if(isset ($_POST['aggiorna'])){
$ar_campi= $_POST['campo_aggiorna'];
require_once("./gestione_registro.inc.php");
for($i= 0;$i< count($ar_campi);$i++ ){
list ($tabella,$campo,$operazione) = explode(";",$ar_campi[$i]);
header("Location: ". $_SERVER['PHP_SELF']. "?diff=". $tabella);
##############################################
# PROCEDURA ELIMINAZIONE TABELLE OBSOLETE
if(isset ($_POST['elimina_obsolete'])){
$tabelle= explode(",",$_POST['obsolete']);
for($d= 0;$d< count($tabelle);$d++ ){
$sql_del= "DELETE FROM {$db1['frontend']}.registro_tab WHERE table_name='". $tabelle[$d]. "'";
// echo $c."<br/>$ok_del";
header("Location: ". $_SERVER['PHP_SELF']. "?feed=ok_del");
header("Location: ". $_SERVER['PHP_SELF']. "?feed=ko_del");
header("Location: ". $_SERVER['PHP_SELF']. "?feed=ko_del");
# --fine tabelle obsolete
################################################################################à
##############################################
# PROCEDURA INSERIMENTO TABELLE NUOVE
if(isset ($_POST['sincronizza_nuove'])){
$tabelle= explode(",",$_POST['nuove']);
require_once("./gestione_registro.inc.php");
$qg= vmsql_query("SELECT gid FROM {$db1['frontend']}.gruppo",$link);
Anche se ho a disposizione il nome delle tabelle le prendo di nuovo,
perchè mi servono anche i commenti
// PRENDI nomi tabelle e commenti
$sql_info= "SELECT t.table_name, t.table_type, obj_description(c.oid, 'pg_class'::name) AS table_comment
FROM information_schema.tables AS t, pg_catalog.pg_class AS c, pg_namespace AS ns
WHERE t.table_name IN ('". implode("','",$tabelle). "')
AND t.table_schema='{$db1['dbname']}'
AND ns.nspname = t.table_schema
AND t.table_name=c.relname ";
for($g= 0;$g< count($gruppi);$g++ ){
header("Location: ". $_SERVER['PHP_SELF']. "?feed=ok_nuove");
header("Location: ". $_SERVER['PHP_SELF']. "?feed=ko_nuove");
################################################################################à
##############################################
# PROCEDURA RIPRISTIONO TABELLA
if(isset ($_GET['azzera'])){
$tabella= trim($_GET['azzera']);
// ELIMINA LE IMPOSTAZIONI DI TABELLA NEL FRONTEND
$sql_del= "DELETE FROM {$db1['frontend']}.registro_tab WHERE table_name='". $tabella. "'";
header("Location: ". $_SERVER['PHP_SELF']. "?feed=ko_azzera1");
require_once("./gestione_registro.inc.php");
$qg= vmsql_query("SELECT gid FROM {$db1['frontend']}.gruppo",$link);
Anche se ho a disposizione il nome delle tabelle le prendo di nuovo,
perchè mi servono anche i commenti
// PRENDI nomi tabelle e commenti
$sql_info= "SELECT t.table_name, t.table_type, obj_description(c.oid, 'pg_class'::name) AS table_comment
FROM information_schema.tables AS t, pg_catalog.pg_class AS c
WHERE t.table_name='$tabella'
AND t.table_schema='{$db1['dbname']}'
AND t.table_name=c.relname
for($g= 0;$g< count($gruppi);$g++ ){
header("Location: ". $_SERVER['PHP_SELF']. "?feed=ok_azzera");
header("Location: ". $_SERVER['PHP_SELF']. "?feed=ko_azzera2");
# --fine procedura ripristino tabella
################################################################################
##############################################
# PROCEDURA VISUALIZZAZIONE DIFFERENZE
if(isset ($_GET['diff'])){
$tabella= trim($_GET['diff']);
// INFO COLONNE DALL' information_schema
$SQL_confronto_colonne1 = "
SELECT column_name,udt_name as column_type,data_type,is_nullable
FROM information_schema.columns
WHERE table_name='$tabella'
AND table_schema='{$db1['dbname']}'
ORDER BY ordinal_position,column_name";
$colonne1[$RSc1['column_name']]= $RSc1;
$colonne[$RSc1['column_name']]= 1;
// INFO COLONNE DAL frontend
$SQL_confronto_colonne2= "
SELECT column_name,column_type,data_type,is_nullable
FROM {$db1['frontend']}.registro_col c, {$db1['frontend']}.registro_tab t
WHERE t.id_table=c.id_table
AND t.table_name='$tabella'
ORDER BY ordinal_position,column_name
$colonne2[$RSc2['column_name']]= $RSc2;
$colonne[$RSc2['column_name']]= 1;
if($colonne1!= $colonne2){
$TESTO= "<table id=\"diff-tab\" summary=\"differenze tra le tabelle\" border=\"1\">";
<th>column_name A</th><th>column_type A</th><th>data_type A</th><th>is_nullable A</th>
<th style=\"background-color:#444;\" rowspan=\"". (count($colonne)+ 1) . "\"> </th>
<th>column_name B</th><th>column_type B</th><th>data_type B</th><th>is_nullable B</th>
foreach($colonne as $campo=> $val){
if($colonne1[$campo]!= $colonne2[$campo]){
if($colonne1[$campo]['column_name']== ''){
$campi_diversi[]= array($campo,"DELETE") ;
<td>". implode("</td>\t\n<td>", (array) $colonne2[$campo]). "</td>
elseif($colonne2[$campo]['column_name']== ''){
$campi_diversi[]= array($campo,"INSERT") ;
<td>". implode("</td>\t\n<td>",(array) $colonne1[$campo]). "</td>
$campi_diversi[]= array($campo,"UPDATE") ;
<td>". implode("</td>\t\n<td>",(array) $colonne1[$campo]). "</td>
<td>". implode("</td>\t\n<td>", (array) $colonne2[$campo]). "</td>
<td>". implode("</td>\t\n<td>",(array) $colonne1[$campo]). "</td>
<td>". implode("</td>\t\n<td>", (array) $colonne2[$campo]). "</td>
$TESTO.= "<p><strong>A</strong>: information_schema<br /><strong>B</strong>: db vfront</p>\n";
$TESTO= "Non sembra ci siano incongruenze in questa tabella";
header("Location: ". $_SERVER['PHP_SELF']);
$files= array("sty/admin.css","sty/log.css","sty/tabelle.css");
echo openLayout1("Sincronizzazione database/frontend",$files);
echo "<div id=\"briciole\"><a href=\"index.php\">home amministrazione</a> » <a href=\"". basename($_SERVER['PHP_SELF']). "\">sincronizzazione db/frontend</a> » differenze per la tabella $tabella</div>";
echo "<h1>Differenze di impostazione per la tabella <span class=\"var\">$tabella</span></h1>\n";
echo "<form action=\"". $_SERVER['PHP_SELF']. "?aggiorna_campi\" method=\"post\">\n";
foreach($campi_diversi as $k=> $v){
echo "<input type=\"hidden\" name=\"campo_aggiorna[]\" value=\"$tabella;{$v[0]};{$v[1]}\" />\n";
echo "<input type=\"submit\" name=\"aggiorna\" value=\" Sincronizza campi \" />\n";
# --fine procedura visualizzazione differneze
################################################################################à
$files= array("sty/admin.css","sty/tabelle.css","sty/linguette.css");
<script type=\"text/javascript\">
var divs = new Array('integrita','manuale');
document.getElementById('cont-eti-'+divs[i]).style.display='none';
document.getElementById('li-'+divs[i]).className='disattiva';
document.getElementById('cont-eti-'+ido).style.display='';
document.getElementById('li-'+ido).className='attiva';
$OUT= "<div id=\"briciole\"><a href=\"index.php\">home amministrazione</a> » sincronizzazione db/frontend</div>";
$OUT.= "<h1>Sincronizzazione database/frontend</h1>\n";
$OUT.= "<img src=\"../img/registri.gif\" class=\"img-float\" alt=\"impostazioni registri\" />\n";
if(isset ($_GET['feed'])){
if($_GET['feed']== 'ok_nuove')
echo "<div class=\"feed-mod-ok\">Nuove tabelle impostate correttamente</div><br />";
elseif($_GET['feed']== 'ko_nuove')
echo "<div class=\"feed-mod-ko\">Nessuna nuova tabella impostata: eccezione della procedura</div><br />";
elseif($_GET['feed']== 'ok_del')
echo "<div class=\"feed-mod-ok\">Impostazioni tabelle eliminate correttamente</div><br />";
elseif($_GET['feed']== 'ko_del')
echo "<div class=\"feed-mod-ko\">Nessuna impostazione tabella eliminata: eccezione della procedura.</div><br />";
elseif($_GET['feed']== 'ko_azzera1')
echo "<div class=\"feed-mod-ko\">Nessuna modifica effettuata sul registro della tabella: eccezione della procedura</div><br />";
elseif($_GET['feed']== 'ko_azzera2')
echo "<div class=\"feed-mod-ko\">Nessuna modifica effettuata sul registro della tabella: eccezione della procedura</div><br />";
elseif($_GET['feed']== 'ok_azzera')
echo "<div class=\"feed-mod-ok\">Impostazioni della tabella riconfigurate correttamente.</div><br />";
echo "<p>In questa pagina sono presenti funzioni per la manutenzione del frontend e la sincronizzazione con il database<br /><br />
<strong>Nota bene!</strong> Nessuna delle operazioni sotto elencate modifica la struttura del database!<br />
Ogni operazione sarà solo sul contenuto del frontend.
<div id=\"contenitore-variabili\">
<div id=\"box-etichette\">
<ul class=\"eti-var-gr\">
<li onclick=\"eti('integrita');\" id=\"li-integrita\" class=\"attiva\">Integrità frontend</li>
<li onclick=\"eti('manuale');\" id=\"li-manuale\" class=\"disattiva\">Ripristino manuale</li>
$sql1= "SELECT t.table_name , obj_description(c.oid, 'pg_class'::name) AS table_comment
FROM information_schema.tables t
INNER JOIN pg_catalog.pg_class AS c ON t.table_name=c.relname
INNER JOIN pg_namespace AS ns ON ns.oid=c.relnamespace
LEFT OUTER JOIN {$db1['frontend']}.registro_tab r ON t.table_name=r.table_name
WHERE t.table_schema='{$db1['dbname']}'
AND ns.nspname = t.table_schema
AND (t.table_type='BASE TABLE' OR t.table_type='VIEW')
AND t.table_name NOT IN (SELECT r.table_name FROM {$db1['frontend']}.registro_tab r)";
$sql2= "SELECT r.id_table, r.table_name, r.commento
FROM {$db1['frontend']}.registro_tab r
WHERE r.table_name NOT IN (
SELECT t.table_name FROM information_schema.tables t
WHERE t.table_schema='{$db1['dbname']}' AND (t.table_type='BASE TABLE' OR t.table_type='VIEW'))
###########################################################################
# CONTROLLO CAMPI TABELLE
// prendi le tabelle dal frontend
$q_tabelle= vmsql_query("SELECT table_name FROM {$db1['frontend']}.registro_tab WHERE gid=0 ORDER BY table_name",$link);
for($i= 0;$i< count($tabelle_presenti);$i++ ){
// INFO COLONNE DALL' information_schema
$SQL_confronto_colonne1 = "
SELECT column_name,data_type,is_nullable
FROM information_schema.columns
WHERE table_name='{$tabelle_presenti[$i]}'
AND table_schema='{$db1['dbname']}'
ORDER BY ordinal_position,column_name";
$colonne1[$RSc1['column_name']]= $RSc1;
// INFO COLONNE DAL frontend
$SQL_confronto_colonne2= "
SELECT column_name,data_type,is_nullable
FROM {$db1['frontend']}.registro_col c, {$db1['frontend']}.registro_tab t
WHERE t.id_table=c.id_table
AND t.table_name='{$tabelle_presenti[$i]}'
ORDER BY ordinal_position,column_name
$colonne2[$RSc2['column_name']]= $RSc2;
if($colonne1!= $colonne2){
$diversi[$tabelle_presenti[$i]]= array($colonne1,$colonne2);
$tab_diverse[]= $tabelle_presenti[$i];
################################################
if($test1 && $test2 && $uguali){
$OUT_TEST.= "<p class=\"verde\"><strong>Tutto bene!</strong><br />Il database è sincronizzato con il frontend</p>\n";
elseif(!$test1 && $test2){
$OUT_TEST.= "<p><strong class=\"var\">Attenzione!</strong><br />
Ci sono <strong>nuove tabelle</strong> nel database da sincronizzare con il frontend</p>\n";
elseif($test1 && !$test2){
$OUT_TEST.= "<p><strong class=\"var\">Attenzione!</strong><br />
Ci sono <strong>tabelle obsolete</strong> nel frontend da eliminare (non più presenti in database)</p>\n";
elseif(!$test1 && !$test2){
$OUT_TEST.= "<p><strong class=\"var\">Attenzione!</strong><br />
Ci sono <strong>nuove tabelle</strong> nel database da sincronizzare <br />
e <strong>tabelle obsolete</strong> nel frontend da eliminare (non più presenti in database)</p>\n";
$OUT_TEST.= "<p><strong class=\"var\">Attenzione!</strong><br />
Ci sono <strong>campi impostati diversamente</strong> nel database e nel frontend</p>\n";
for($k= 0;$k< count($tab_diverse);$k++ ){
$tab_string.= "<a class=\"rosso\" href=\"". $_SERVER['PHP_SELF']. "?diff=". $tab_diverse[$k]. "\">". $tab_diverse[$k]. "</a>, <br />\n";
if(count($tab_diverse)> 1){
$OUT_TEST.= "<p>Le tabelle da sincronizzare sono <br /> $tab_string </p>";
$OUT_TEST.= "<p>La tabella da sincronizzare è $tab_string </p>";
// TABELLE NUOVE DA SINCRONIZZARE
$TAB_SYNC1= "<table class=\"tab-color\" summary=\"Tabelle da sincronizzare\">\n\t<tbody>\n";
for($i= 0;$i< count($matrice_t1);$i++ ){
$VAL1.= $matrice_t1[$i]['table_name']. ",";
<td>". $matrice_t1[$i]['table_name']. "</td>
<td>". $matrice_t1[$i]['table_comment']. "</td>
$TAB_SYNC1.= "\t</tbody>\n</table>
<form action=\"". $_SERVER['PHP_SELF']. "\" method=\"post\">
<input type=\"hidden\" name=\"nuove\" value=\"". substr($VAL1,0,- 1). "\" />
<input type=\"submit\" name=\"sincronizza_nuove\" value=\"Inserisci tabelle nel frontend\" />
// TABELLE OBSOLETE DA ELIMINARE
$TAB_SYNC2= "<table class=\"tab-color\" summary=\"Tabelle da sincronizzare\">\n\t<tbody>\n";
<th class=\"arancio\">tabella obsoleta</th>
<th class=\"arancio\">commento</th>
for($i= 0;$i< count($matrice_t2);$i++ ){
$VAL2.= $matrice_t2[$i]['table_name']. ",";
<td>". $matrice_t2[$i]['table_name']. "</td>
<td>". $matrice_t2[$i]['commento']. "</td>
$TAB_SYNC2.= "\t</tbody>\n</table>
<form action=\"". $_SERVER['PHP_SELF']. "\" method=\"post\">
<input type=\"hidden\" name=\"obsolete\" value=\"". substr($VAL2,0,- 1). "\" />
<input type=\"submit\" name=\"elimina_obsolete\" value=\"Elimina tabelle obsolete\" />
// CONTENITORE TEST INTEGRITA'
<div class=\"cont-eti\" id=\"cont-eti-integrita\">
// PRENDI TUTTE LE TABELLE DAL FRONTEND
$q_front= vmsql_query("SELECT table_name,data_modifica,commento FROM {$db1['frontend']}.registro_tab
GROUP BY table_name,data_modifica,commento
ORDER BY table_name",$link);
$TAB_FRONT= "<table class=\"tab-color\" summary=\"Tabelle del frontend\">\n\t<tbody>\n";
<th class=\"arancio\">tabella</th>
<th class=\"arancio\">commento</th>
<th class=\"arancio\">data configurazione</th>
<th class=\"arancio\">ripristina configurazione</th>
for($i= 0;$i< count($matrice_front);$i++ ){
$data_config = (intval($matrice_front[$i]['data_modifica'])> 0) ? date("d/m/Y H:i",$matrice_front[$i]['data_modifica']) : "-";
<td>". $matrice_front[$i]['table_name']. "</td>
<td>". $matrice_front[$i]['commento']. "</td>
<td>". $data_config. "</td>
<td><a href=\"". $_SERVER['PHP_SELF']. "?azzera=". $matrice_front[$i]['table_name']. "\">ripristina</a></td>
$TAB_FRONT.= "\t</tbody>\n</table>";
<div class=\"cont-eti\" id=\"cont-eti-manuale\" style=\"display:none;\">
<p><strong>Attenzione!</strong><br />
Se si ripristina la configurazione di una tabella si annulleranno tutte le impostazioni finora definite per quella tabella per tutti i gruppi,<br />
comprese le impostazioni per le sottomaschere. Usare questa funzione con cautela.</p>
|