VFront - Manuale di Riferimento 2 novembre 2007 http://www.vfront.org http://vfront.sourceforge.net Versione documento: 1.1 1 Indice 1 Introduzione 4 1.1 Licenza di questo documento . . . . . . . . . . . . . . . . . . . . . 1.2 Licenza del software VFront . . . . . . . . . . . . . . . . . . . . . . 4 1.3 A chi è rivolto questo software 4 1.4 I ruoli su VFront negli enti/organizzazioni 1.4.1 1.5 . . . . . . . . . . . . . . . . . . . . Livello 3: Amministratore 4 . . . . . . . . . . . . . . 5 . . . . . . . . . . . . . . . . . . 5 1.4.2 Livello 2 (amministratore locale o tutor ): 1.4.3 Livello 1 (utente base): . . . . . . . . . . 6 . . . . . . . . . . . . . . . . . . . 6 Le tre leggi di VFront . . . . . . . . . . . . . . . . . . . . . . . . . 7 2 Caratteristiche del sistema 8 2.1 Tecnologia lato server . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2 Tecnologia lato client . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Struttura di base delle directory . . . . . . . . . . . . . . . . . . . 3 Panoramica dell'architettura 11 3.1 La logica del front-end VFront 3.2 Sistema dei registri 3.3 Schema entità/relazioni del database di VFront 3.4 Logica di autenticazione 3.5 9 . . . . . . . . . . . . . . . . . . . . 11 . . . . . . . . . . . . . . . . . . . . . . . . . . 11 . . . . . . . . . . . 11 . . . . . . . . . . . . . . . . . . . . . . . 13 Traduzione dell'interfaccia . . . . . . . . . . . . . . . . . . . . . . . 16 3.5.1 Traduzione delle stringhe javascript . . . . . . . . . . . . . . 16 3.5.2 L'impostazione della lingua . . . . . . . . . . . . . . . . . . 16 3.5.3 La creazione di una nuova traduzione 16 . . . . . . . . . . . . 4 La scheda utente 17 4.1 Navigazione tra i record 4.2 Creazione, modica ed eliminazione record . . . . . . . . . . . . . 17 4.3 Vista scheda e vista tabella . . . . . . . . . . . . . . . . . . . . . . 18 La ricerca 18 4.4 4.4.1 4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Ricerca di una sotto-stringa . . . . . . . . . . . . . . . . . . 19 Le scorciatorie da tastiera . . . . . . . . . . . . . . . . . . . . . . . 19 5 Introduzione all'amministrazione del front-end 21 6 Amministrazione delle tabelle e viste 23 6.1 Cosa sono e a cosa servono i gruppi/registri su VFront . . . . . . . 23 6.2 Il sistema gruppi/registri in pratica . . . . . . . . . . . . . . . . . . 23 6.3 Impostazioni generali di tabella 6.3.1 6.4 . . . . . . . . . . . . . . . . . . . Impostazione allegati e link . . . . . . . . . . . . . . . . . 24 26 Impostazione dei campi . . . . . . . . . . . . . . . . . . . . . . . . 26 6.4.1 30 Il controllo sul valore dei campi . . . . . . . . . . . . . . . . 6.5 L'ordinamento dei campi nelle maschere 6.6 Gestire le relazioni molti a molti: le sotto-maschere 2 . . . . . . . . . . . . . . . . . . . . . . . . 34 34 6.7 6.8 6.9 6.6.1 Impostazioni generali delle sotto-maschere . . . . . . . . . . 6.6.2 Impostazioni per i campi delle sottomaschere Impostazione delle viste SQL 34 . . . . . . . . 37 . . . . . . . . . . . . . . . . . . . . . 37 . . . . . . . . . . . . . . . . . . 39 6.8.1 Sincronizzazione tabelle/front-end Aggiunta di nuove tabelle o viste . . . . . . . . . . . . . . . 39 6.8.2 Rimozione di tabelle o viste . . . . . . . . . . . . . . . . . . 39 6.8.3 Modica dei campi delle tabelle . . . . . . . . . . . . . . . 39 6.8.4 Ripristino manuale . . . . . . . . . . . . . . . . . . . . . . . 41 I commenti SQL su campi e tabelle . . . . . . . . . . . . . . . . . . 41 7 Gestione degli utenti 43 7.1 La tabella utenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 7.2 Modica dei diritti ed attribuizione ad un gruppo . . . . . . . . . . 44 7.3 Cancellazione di un utente . . . . . . . . . . . . . . . . . . . . . . 44 8 Il sistema di log e ripristino operazioni 45 8.1 Il dettaglio del log . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Il ripristino 8.2.1 8.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FAQ sul ripristino per i più curiosi Lo storico dei record 9.2 48 . . . . . . . . . . . . . . 48 . . . . . . . . . . . . . . . . . . . . . . . . . 48 9 I report 9.1 45 50 Creazione di un report su VFront . . . . . . . . . . . . . . . . . . 50 9.1.1 La logica dei report su VFront . . . . . . . . . . . . . . . . 50 9.1.2 Creazione nuovi report e diritti d'accesso . . . . . . . . . . . 52 Report (X)HTML: utilizzo di fogli di stile XSL lato server e lato client 9.2.1 52 Dove sono i report XHTML ? . . . . . . . . . . . . . . . . . 53 9.3 Report PDF: XSL-FO e Apache FOP . . . . . . . . . . . . . . . . . 55 9.4 Altri formati di report e uso di Apache FOP 0.9 o successivo 56 . . . . 10 Statistiche e graci sui dati 57 10.1 La pagina statistiche . . . . . . . . . . . . . . . . . . . . . . . . . . 57 11 Le variabili di sistema 61 12 Esportazione dati e backup database 65 13 Test impostazioni VFront 67 3 1 Introduzione 1.1 Licenza di questo documento Copyright (c) 2007 Marcello Verona <[email protected]> Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". 1.2 Licenza del software VFront VFront è un software rilasciato sotto licenza GPL 2.0 Per maggiori informazioni sulla licenze si rimanda al le LICENSE distribuito insieme a questa documentazione oppure su http://www.gnu.org/copyleft/gpl.html 1.3 A chi è rivolto questo software VFront è un front-end web based per database MySQL o PostgreSQL. Può essere utile ad enti o organizzazioni che utilizzano MySQL o PostgreSQL e che debbano far accedere i propri dipendenti ai database per la consultazione, l'inserimento o la modica dei dati, senza sviluppare un client ad-hoc e mediante l'uso di un semplice browser web. VFront può essere pensato come strumento di interfaccia per database, e svolgere alcune funzioni come MS Access, con il vantaggio di essere consultabile direttamente dal browser. Non è uno strumento di amministrazione di da- tabase come phpMyAdmin, né lo sostituisce: l'interfaccia è rivolta all'utente base che opera sui dati. L'interfaccia di VFront è pensata quindi per utenti nali non esperti, che possano operare sui dati in sicurezza con una interfaccia familiare ed intuitiva. VFront è particolarmente utile quando diversi utenti o tipologie di utenti debbano accedere alle tabelle con dierenti privilegi: grazie al sistema altamente personalizzabile dei gruppi e dei diritti è possibile far accedere diversi gruppi di dipendenti solo a speciche tabelle o viste, mostrare o nascondere campi a specici gruppi, impostare regole per la validazione degli input e tenere sotto controllo l'attività sul database. VFront possiede inoltre moduli di esportazione dati, statistiche e gestione di reportistica basata su XML, XSL e XSL-FO. L'applicazione inne può essere utile a chi, genericamente, ha bisogno di un front-end per database installabile e congurabile con poco sforzo in tempi rapidi. 4 1.4 I ruoli su VFront negli enti/organizzazioni Su VFront i diritti sono deniti dal gruppo di appartenenza ed il livello di amministrazione. I livelli di amministrazione sono tre. Verranno qui descritti i ruoli con specico riferimento all'ente o organizzazione in cui VFront è utilizzato: 1.4.1 Livello 3: Amministratore Job description: Competenze e conoscenze: Conosce il database MySQL o PostgreSQL di cui VFront è front-end Ha dimestichezza con il linguaggio SQL E' competente nella gestione del lesystem del server su cui VFront è installato (server Linux o altro) Sa modicare un le di congurazione scritto in linguaggio PHP e può accedere in scrittura a tale le. Conosce, almeno supercialmente, l'XML, l'XSL e l'XSL-FO e/o si avvale di un collaboratore/collega che conosce questi linguaggi, utili per la denizione dei report personalizzati. Conosce approfonditamente l'applicazione VFront ed è in contatto con gli utenti che utilizzano VFront. Mansioni e responsabilità: Crea i gruppi di VFront ed i loro diritti, denisce la tipologia dei campi delle tabelle, congura le maschere e le sotto-maschere delle tabelle e delle viste, realizzando le scelte di progetto Può accedere ai log per operazioni di ripristino di dati erroneamente cancellati. A seconda della dimensione del gruppo di lavoro può essere in relazione con i soli utenti di livello 2. Può essere responsabile dell'attribuzione dei diritti degli utenti di livello inferiore, anche se questa prerogativa può essere delegata al livello 2. Denisce le query per generare report graci e tabellari nella sezione statistiche. Può denire i report e, se ha dimestichezza con le trasformazioni XSL e XSL-FO può denire fogli di stile per la generazione di report personalizzati. Identicazione con il ruolo nell'ente/organizzazione: Può essere un sistemista o un DB administrator dell'ente/organizzazione. 5 1.4.2 Livello 2 (amministratore locale o tutor ): Job description: Competenze e conoscenze: Il livello 2 possiede alcune prerogative di amministrazione. Si tratta di un utente avanzato con conoscenze (almeno) di base sui database e sulla struttura del database di cui VFront è front-end. Mansioni e responsabilità: Attribuisce il gruppo di appartenenza per gli utenti di livello base (livello 1) Può promuovere utenti di livello 1 al livello 2 Può consultare le statistiche e (se conosce il linguaggio SQL) può crearne di nuove. Può gestire la reportistica E' responsabile o co-responsabile del gruppo di lavoro. Identicazione con il ruolo nell'ente/organizzazione: Può essere un referente di progetto dell'ente/organizzazione o un utente esperto con il mandato di gestire il gruppo di lavoro. 1.4.3 Livello 1 (utente base): Job description: Competenze e conoscenze: Si richiede una conoscenza di base del funzionamento del database, almeno per le tabelle che riguardano il suo gruppo di appartenenza. Può essere utile che questo utente abbia seguito una giornata di formazione sul funzionamento del database e delle funzioni di VFront relative all'uso delle maschere e sottomaschere. Mansioni e responsabilità: Può essere qualunque dipendente dell'ente/organizzazione che debba/possa accedere ai dati. In base ai diritti a lui attribuiti può inserire, modicare, eliminare e consultare i dati. Identicazione con il ruolo nell'ente/organizzazione: Può essere un dipendente di qualsiasi ruolo/inquadramento che debba/possa accedere ai dati. 6 1.5 Le tre leggi di VFront Rubando la forma del titolo di questo paragrafo da Asimov, sono qui enunciati i principi generali secondo i quali si è cercato di sviluppare VFront: 1. VFront non sporcherà il vostro database, non creerà tabelle o viste aggiuntive sul vostro DB e non modicherà i dati delle tabelle, a meno che non lo si voglia esplicitamente fare attraverso maschere. Creerà invece un suo discreto database di regole (o un suo schema su PostgreSQL). Non prende possesso del vostro database, ma permette di usarlo. 2. VFront non bypasserà le regole che sono state impostate nel vostro database. Con VFront è possibile creare nuovi vincoli più restrittivi di quelli che avete creato sul database (in termini di chiavi esterne, input accettabili sui tipi di campi, etc.), ma mai il contrario. 3. VFront funzionerà tanto meglio quanto è stata più rigorosa la denizione del vostro database. A VFront piacciono la normalizzazione, le chiavi esterne, le chiavi primarie possibilmente numeriche, i commenti sulle tabelle e sui campi, etc... Garbage in, garbage out: non si scappa. 7 2 Caratteristiche del sistema 2.1 Tecnologia lato server VFront è un'applicazione web con le seguenti caratteristiche lato server: E' scritta in PHP 5 come linguaggio di scripting Può essere applicata a database MySQL 5.x o PostgreSQL 8.x. Qualora si utilizzi su MySQL verrà creato un database di regole per l'applicazione sullo stesso server del database che si vuole utilizzare. Qualora si utilizzasse invece PostgreSQL il database di regole viene creato come schema del database PostgreSQL che si vuole utilizzare. VFront funziona con Apache 2.x. Probabilmente è possibile utilizzare anche la versione 1.x di Apache, sempre che sia possibile utilizzare PHP 5. VFront è stato progettato per funzionare sotto server Linux-like, ma è possibile utilizzarlo anche in ambiente Windows. Per maggiori informazioni leggere anche la Guida all'installazione. 2.2 Tecnologia lato client VFront fa un grande uso di Javascript. Non è possibile utilizzare VFront senza javascript attivato: sarebbe completamente inanimato e passerebbe la stessa dierenza che c'è tra un pezzo di legno e Pinocchio (quindi, come qualcuno ha rilevato, se ne deduce che Pinocchio è scritto in Javascript ;-). Tuttavia sono stati fatti sforzi anché l'applicazione funzioni correttamente con diversi browser: i browser attualmente testati con successo ad oggi sono: Internet Explorer 5.5 Internet Explorer 6 Internet Explorer 7 Firefox 1.5.x Firefox 2.0 Mozilla 1.8 I browser parzialmente supportati sono: Internet Explorer 5.0 Opera 8.51 Il supporto per Safari non è ancora stato testato. Allo stato attuale si consiglia agli utenti Mac di utilizzare VFront con Firefox. 8 2.3 Struttura di base delle directory La struttura della directory di VFront è così formata: ROOT_VFRONT _docs _install admin conf files docs tmp xsl_custom html img mime inc js dhtmlxGrid jscalendar prototype-1.4.0 scriptaculous uploadprogress yav locale plugins FCKEditor ods phpgettext phpmailer stats sty jscalendar tmp usr xml Alcune cartelle devono essere attribuite ad Apache: nello specico sottocartelle), tmp. html, files (e Per ulteriori informazioni si veda la Guida all'installazione. Le cartelle con l'underscore davanti non sono fondamentali per il funzionamento dell'applicazione: _docs contiene la documentazione e _install contiene le pro- cedure di installazione. Si consiglia caldamente di cancellare la cartella dopo l'installazione. admin contiene gli script relativi all'area di amministrazione. 9 _install conf contiene il le di congurazione. Può essere una buona idea spostarlo al di fuori dell'area sottoposta a browsing. files contiene gli allegati che si genereranno qualora si abilitasse l'uso degli allegati per le tabelle. Gli allegati sono qui salvati come n.dat, dove n indica il valore della chiava primaria della tabella allegato. Le sottocartelle di les sono alcune operazioni di VFront e docs, per la documentazione xls_custom, dove vengono personale, tmp, per salvati il le XSL e XSL-FO personali (si veda la sezione relativa ai report). html è la cartella dove possono vengono salvati dei le HTML che contengono le tendine con i valori dei campi di tipo select_from. E' utile per l'ottimizzazione delle prestazioni di VFront. Si veda l'impostazione dei campi per maggiori informazioni. Si può periodicamente svuotare. img contiene le immagini dell'applicazione (icone, sfondi, etc.) inc contiene i le di inclusione degli script, come i le di funzioni e molto altro. js contiene gli script Javascript e numerose cartelle di framework sviluppati da terze parti. Si veda 13 nella pagina 68 per ulteriori informazioni. locale contiene i le per le traduzioni dell'interfaccia mediante lo standard gettext. plugins contiene alcuni script, come i le utilizzati per la generazione di Open Document (sottocartella ods), mentre FCKEditor contiene l'omonima applicazione, utilizzata opzionalmente per i campi di testo richtext. stats contiene gli script relativi alle statistiche. sty è la cartella che contiene i fogli di stile css. tmp è una cartella temporanea per varie operazioni svolte da VFront. Può essere periodicamente svuotata. La cartella usr può essere utile per script personali per chi vuole aggiungere funzioni a VFront. xml inne contiene script relativi all'XML e alle trasformazioni XSL. 10 3 Panoramica dell'architettura 3.1 La logica del front-end VFront VFront funziona mediante un sistema di regole o registri di regole che si interpone fra l'interfaccia utente ed il database di dati. Questo sistema, permette di congurare regole di accesso alle tabelle, alle viste e ai singoli campi, mediante vincoli e formattazioni speciali congurabili dall'amministratore tramite una interfaccia apposita. E' possibile impostare campi con ricerca, campi obbligatori, tipo di input per il singolo campo e molto altro in modo personalizzato per ogni gruppo per un numero indenito di gruppi. Si noti inoltre che tutte le regole vengono scritte in un database separato da quello dei dati, in modo da non interferire in alcun modo con la struttura di quest'ultimo. Ci riferiremo ai due database denominandoli DB dati (il database del quale VFront sarà front-end) e DB regole o DB VFront. 3.2 Sistema dei registri VFront, in altri termini, permette di creare un ulteriore sistema di controllo sui dati, oltre a quello normalmente predisposto da un database relazionale come MySQL 5 o PostgreSQL 8, con in più la personalizzazione a livello di gruppo di utenti. Ogni utente è inserito in uno ed un solo gruppo e per ogni gruppo c'è un sistema di regole. Sarà possibile ad esempio, mostrare alcune tabelle in sola lettura per un gruppo di utenti; in lettura e scrittura ad un altro; lettura, scrittura e cancellazione ad un terzo, oppure mostrare un set di tabelle ridotto per un quarto gruppo. L'utente che accede al sistema si troverà un'interfaccia con funzioni dierenti su dierenti tabelle a seconda che appartenga ad un gruppo con maggiori o minori diritti. E' possibile inoltre impostare i singoli campi delle tabelle e le sotto-maschere visibili in base alle esigenze dei dierenti gruppi di utenti. 3.3 Schema entità/relazioni del database di VFront E' qui riportato lo schema del database di regole - DB VFront - (v. gura 1): allegato In questa tabella sono registrate le informazioni relative ai le allegati alle tabelle. I le non sono salvati in database ma nel lesystem. In database (in questa tabella) sono registrate solo le informazioni relative al collegamento del le al record ed alla tabella, il nome del le ed altre informazioni di servizio. gruppo E' la tabella dove sono registrati e descritti i gruppi di accesso al front-end. link E' la tabella dove sono registrate le informazioni relative ai link collegati ai record delle tabelle log 11 Figura 1: Schema entità-relazioni 12 Nella tabella log sono registrate tutte le operazioni di INSERT, UPDATE e DELETE che vengono eseguite sul database dati. La tabella log permette inoltre uno storico dei record con possibilità di ripristino su dati modicati o cancellati per sbaglio, anche dopo l'eliminazione sica del dato dal disco. Si veda a riguardo il capitolo Log e Ripristino dati. recordlock E' questa una tabella che permette la registrazione di accesso in modica ai record del database dati, al ne di impedire l'accesso concorrente in modica ad un record già sottoposto a modica da altro utente. registro_tab Sono qui inserite le regole generali per ogni tabella, per ogni gruppo. La tabella in una prima congurazione del front-end legge l'information_schema di MySQL 5 e congura un primo gruppo predenito. In questa tabella sono registrati i diritti di accessibilità della singola tabella per il singolo gruppo in SELECT, INSERT, UPDATE, DELETE nonché la esportabilità dei dati della tabella. registro_col Tabella glia di registro_tab ed ad essa collegata tramite chiave esterna, sul campo id_table, questa tabella documenta i campi delle tabelle impostati per ogni gruppo. Sono qua congurate le opzioni di visualizzazione dei singoli campi, il tipo di input, il fatto che i campi siano o meno obbligatori, eccetera. registro_submask Collegata alla tabella registro_tab mediante chiave esterna sul campo id_table, registro_submask contiene le informazioni sulle sotto-maschere per ogni tabella, per ogni gruppo. registro_submask_col Collegata alla tabella registro_submask mediante chiave esterna sul campo id_submask, registro_submask_col descrive i singoli campi delle sotto-maschere, per ogni tabella, per ogni gruppo. stat sono qui registrate le query e le altre informazioni per le statistiche personalizzate. utente sono qui registrati gli utenti ed il collegamento tramite chiave esterna (campo gid) alla tabella gruppo) variabili In questa tabella sono registrate delle variabili di ambiente. Queste possono essere generiche (per tutto l'ambiente VFront) o speciche per un gruppo. In caso di coesistenza dei due tipi di variabili, quella specica per il gruppo ha la priorità rispetto a quella generica. Si veda il capitolo Variabili per i dettagli. xml_rules In questa tabella sono registrate le informazioni per la generazione dei report. 3.4 Logica di autenticazione Il processo di autenticazione è descritto in dettaglio anche nella Guida all'installazione. 13 L'accesso a VFront avviene attraverso autenticazione e accreditamento di diritti in passi separati. Questo implica che per l'autenticazione sia possibile utilizzare strumenti esterni (ad esempio directory LDAP o altri database), mentre l'accreditamento dei diritti avviene sempre mediante l'interrogazione del database di regole di VFront (tabella utente). E' possibile quindi autenticare gli utenti mediante il database di VFront (autenticazione e accreditamento coincidono) - autenticazione a "1 step" mediante server LDAP o Active Directory mediante uso di una tabella di un database presente sullo stesso server (solo qualora si utilizzi MySQL) mediante uso di una tabella di un database presente su altro server. In questo caso è supportata la lettura di database MySQL, PostgreSQL oppure tramite ODBC. mediante WSDL SOAP (metodo in fase di sperimentazione) Tutti i metodi descritti tranne il primo sono metodi "2 step" ossia autenticazione e accreditamento sono processi separati. L'illustrazione mostra il processo di autenticazione a 2 step. Come mostrato in gura, la procedura è la seguente: l'utente tenta l'autenticazione su VFront mediante email e password. 1. Viene interrogato lo strumento scelto per l'autenticazione (LDAP, una tabella di database, ecc.); se l'utente non esiste viene rigettato con una segnalazione a video; se l'utente esiste viene cercato sul database delle regole (DB VFront). 2. Se l'utente esiste vengono lette le credenziali di accesso (gruppo di appartenenza e livello di amministrazione) e registrate in sessione. 3. Qualora invece l'utente non esistesse, questo viene registrato automaticamente in database, in quanto il suo account esiste nello strumento di autenticazione (LDAP, altro DB ecc) quindi può accedere al sistema. 4. Gli verranno tuttavia attribuiti i diritti minimi, ossia sarà assegnato al gruppo 0 (gruppo di default, per il quale si consiglia di impostare diritti di sola lettura) e nessun livello di amministrazione. Sarà successivamente compito degli amministratori "promuovere" l'utente e/o attribuirlo al corretto gruppo di appartenenza. 14 Figura 2: Processo di login a 2 step 15 3.5 Traduzione dell'interfaccia VFront utilizza lo standard gettext per le traduzioni del codice PHP. Lo utilizza in due maniere possibili: 1. Modalità nativa, cioè mediante l'estensione php_gettext. Per utilizzare questa modalità si veda il riferimento sulla documentazione di php su http://it.php.net/manual/en/ref.gettext.php 2. Modalità interpretata mediante la libreria phpgettext, presente nella cartella plugins VFront utilizza una o l'altra modalità automaticamente: se è presente la modalità nativa, questa sarà utilizzata prioritariamente (in quando dotata di migliori performance), in caso contrario verrà utilizzata la modalità interpretata. 3.5.1 Traduzione delle stringhe javascript Per quanto riguarda invece la traduzione del codice javascript, ossia dei messaggi all'utente generati lato client, si è per ora utilizzato un sistema di funzioni simili a gettext, ma con una dierente intepretazione. Nel codice javascript i messaggi sono mandati mediante la funzione standard di gettext, cioè _. Ad esempio nel codice si potrà trovare il messaggio _('Attenzione') che viene interpretato da un le incluso che si trova dentro la directory js/lang/ e si chiama vfront-en.js nel caso dell'inglese, vfront-fr.js nel caso del francese, etc. Questo sistema è sperimentale ed è possibile che in futuro si utilizzi un sistema dierente (magari più standardizzato). 3.5.2 L'impostazione della lingua Per impostare una nuova lingua è necessario impostare la costante FRONT_LANG nel le di congurazione. Per maggiori informazioni si suggerisce di leggere la guida all'intallazione. 3.5.3 La creazione di una nuova traduzione Per creare una nuova traduzione è necessario utilizzare i le .po presenti nella directory locale/. Esiste anche un modello (messages.pot) che si può utilizzare per creare una nuova traduzione. Sarà quindi necessario creare una nuova directory dentro directory LC_MESSAGES locale, una sotto- e copiare il proprio le generato (.po e .mo) dentro quest'ultima. I le di traduzione hanno nome messages.po e messages.mo. Per maggiori informazioni si veda il ramo delle directory delle lingue presenti. La traduzione del javascript funziona invece mediante i le presenti dentro js/lang/. Si prenda ad esempio il le vfront-en.js come modello. 16 4 La scheda utente La scheda utente è il cuore di VFront. E' attraverso questa maschera che vengono letti, inseriti, modicati e cancellati i record. Il funzionamento della scheda utente è documentato nel manuale d'uso per utente. In questo documento verranno esposti i dettagli tecnici. Per una documentazione rivolta all'uso si rimanda alla lettura del documento suddetto. La scheda utente è in realtà un unico script con numerosi parametri che carica le impostazioni per ogni tabella dal registro di regole in base al gruppo con il quale si è fatto login. Può essere una pagina piuttosto pesante, specialmente se congurata con molti menù a tendina relativi a chiavi esterne (si veda l'amministrazione dei campi per i dettagli). In compenso viene caricata una sola volta per ogni tabella. Infatti lo scorrimento tra i record, avviene mediante chiamate XML asincrone del browser, tecnica nota anche come AJAX (Asynchronous Javascript and XML). In pratica quando si avanza di un record la pagina non viene ricaricata come avviene nella maggior parte delle applicazioni web di concezione classica, ma viene mandata una chiamata nascosta al server, tramite Javascript. Il server risponde mandando (sempre in modo invisibile all'utente) il dettaglio del record successivo in formato XML, il quale viene letto dal browser. A questo punto i contenuti andranno a popolare i box predisposti. Anche la manipolazione dei record avviene nello stesso modo, con il vantaggio di ottimizzare le transazioni server/client limitandole allo stretto necessario. Ad esempio qualora si volesse modicare un record in una ipotetica tabella notizia e si apportasse solo una modica al titolo, attraverso le chiamate AJAX non si spedirebbe anche la descrizione, la data ed i valori di tutti gli altri campi, ma solo il valore modicato, ossia il nuovo titolo. In questo modo il numero di byte spediti in ogni transazione viene ottimizzato. 4.1 Navigazione tra i record Nelle maschere i record sono ordinati secondo un campo impostato dall'amministratore (si veda oltre la sezione di amministrazione). La navigazione tra i record è possibile in due maniere. La più immediata avviene attraverso i tasti di navigazione presenti nella maschera (vedi gura 3). E' possibile però saltare direttamente ad un record mediante doppio click sul contatore. Questo si trasformerà in una casella di testo nel quale si può scrivere il numero di record al quale si vuole saltare e confermare con il tasto invio. La casella che appare con il doppio click ore anche un'utile funzione nascosta per l'amministrazione. Se si conosce l'ID del record (il codice numerico chiave primaria) è possibile scrivere ad esempio id:418 e si salterà non al 418° record, ma al record di ID 418 della tabella in oggetto. 4.2 Creazione, modica ed eliminazione record Se si ha il diritto di creare, modicare e eliminare i record della tabella in esame, appariranno i pulsanti relativi alla creazione di record (Nuovo), alla modica 17 Figura 3: Salto tra record in una maschera (Modica) e all'eliminazione. Per quanto riguarda la modica è possibile che il sistema non permetta la modica di un determinato record se qualche altro utente sta già operando modiche sullo stesso. In tal caso appare un messaggio esplicativo. Il tempo per il quale un record resta bloccato dipende da un parametro impostato in numero di secondi nella tabella variabili. Di default questo parametro è stato settato su 240 secondi (4 minuti) ma si può modicare a scelta dell'amministratore. Naturalmente se l'utente che sta modicando il record dovesse premere Annulla o Salva il record verrebbe sbloccato anche se non sono passati i 240 secondi. Per quanto riguarda l'eliminazione dei record può succedere che appaia un messaggio di errore se l'utente cercasse di eliminare un record con record gli, presenti nelle sotto-maschere. In tal caso è necessario eliminare tutti i record gli dalle sotto-maschere prima e poi il record dalla maschera. 4.3 Vista scheda e vista tabella Dalla vista scheda è possibile passare alla vista tabella, nel quale viene mostrato un numero di record denito nelle variabili (si veda il capitolo Variabili). Il valore di record mostrati predenito è 20. Con doppio click su un record si può passare alla vista scheda sul record cliccato. 4.4 La ricerca La ricerca è una vera e propria query by form . Quando si clicca su ricerca i campi della maschera si svuotano e diventano verdi. e inviare la ricerca. requisiti inseriti. Si possono scrivere dei parametri In questo modo vengono cercati i record che rispondono ai Si noti che la ricerca avviene per uguaglianza, non per anità 18 Figura 4: Auto completamento nella ricerca (operatore '=' , non operatore 'LIKE') e che la ricerca funziona attraverso AND logici (non OR). Se il risultato è uno solo la maschera mostrerà il record ricercato, se sono molti mostrerà i risultati nella vista tabella. E' possibile inne aiutare la ricerca mediante i campi con suggerimenti, impostabili dall'amministrazione della tabella. In questo caso mentre si digiterà in un campo appariranno dei suggerimenti. Questo può essere utile in campi di testo signicativi ed è impostabile dall'amministrazione dei campi della tabella. 4.4.1 Ricerca di una sotto-stringa E' possibile utilizzare l'asterisco per trovare i record in modalità LIKE. Ad esempio se cercassi in un elenco di cognomi Ross* VFront restituirà tutti i cognomi che iniziano per Ross (Rossi, Rossini, Rossetti, Rossomalpelo, etc.) 4.5 Le scorciatorie da tastiera Per un uso di VFront più rapido e produttivo (specialmente in caso di data entry) può essere utile conoscere le scorciatoie da tastiera delle maschere di VFront. Se opportunamento congurato nelle variabili (si veda il paragrafo 11 nella pagina 61), è 19 possibile vedere in ogni momento le scorciatoie da tastiera della maschera cliccando sulla linguetta ominima a destra dello schermo. Navigazione tra i record: CTRL + freccia destra avanti di un record (corrisponde al tasto > ) CTRL + freccia sinistra indietro di un record (corrisponde al tasto < ) CTRL + Maiusc + freccia sinistra avanti veloce tra i record (corrisponde al ta- sto > > ) CTRL + Maiusc + freccia sinistra indietro veloce tra i record (corrisponde al tasto < < ) CTRL + freccia su Va al primo record (corrisponde al tasto |< ) CTRL + freccia giù Va all'ultimo record (corrisponde al tasto >| ) Operazioni sulla maschera: CTRL + ALT + N Nuovo record CTRL + ALT + M Modica CTRL + ALT + A Annulla CTRL + ALT + S Salva CTRL + ALT + E Elimina CTRL + ALT + R Cerca CTRL + Invio (in modalità ricerca) Invia la ricerca Allegati e link: CTRL + ALT + G Apri gli allegati (se presenti nella maschera) CTRL + ALT + L Apri i link (se presenti nella maschera) Nota. In realtà tutte le operazioni CRTL+ALT+tasto avrebbero lo stesso eetto anche con ALT+tasto. Le combinazioni da tastiera CRTL+ALT sono state impostate per non sovrapporsi alle combinazioni già presenti sul browser: ad esempio ALT+E (elimina in VFront, in Firefox apre il menù Segnalibri). Il problema è risolvibile con la combinazio- ne CTRL+ALT+tasto, con la quale non vengono attivati i comandi da tastiera tipici del browser. 20 Figura 5: Aspetto del menù di amministrazione visto da un amministratore (livello 3) 5 Introduzione all'amministrazione del front-end Il menù di amministrazione è accessibile per gli utenti abilitati mediante il link nella barra azzurra in alto a destra (si veda la gura 5). L'amministrazione del front-end è denita da un diritto indipendente all'apparteneza ad un gruppo. Il livello di amministrazione 1 può essere: livello 1 utente (nessuna funzione di amministrazione) livello 2 amministratore locale o tutor livello 3 amministrazione generale o superadmin 1 Il livello di amministrazione di un utente è denito nella tabella utente del database di regole di VFront, campo livello . 21 Gli utenti amministratori (livello 2 e 3) hanno accesso all'amministratore mediante il link amministrazione presente in tutte le pagine il alto a destra. Attraverso questo link si accede a tutte le funzioni di amministrazione dell'applicazione VFront. Alcuni menù sono visibili solo al superadmin, e sono 1. il DUMP dei database (DB regole e DB dati) 2. La creazione e amministrazione dei gruppi/registri 3. La creazione di altri utenti superadmin e di utenti tutor (livello 2). 4. Le variabili di sistema Sia gli amministratori (livello 3) che i tutor (livello 2) possono invece operare sui log, e modicare le appartenenze degli utenti a gruppi. Possono promuovere altri utenti al loro pari livello, cioè un amministratore di livello 3 potrà creare un tutor (livello 2) o un amministratore (livello 3), mentre un tutor (livello 2) non potrà creare un amministratore di livello 3 in quanto avrebbe un livello più alto del proprio. Sia gli amministratori (livello 3) che i tutor (livello 2) possono creare nuovi report XML, XHTML, PDF o RTF (questi ultimi formati solo in presenza di Apache FOP), possono creare statistiche con graci e tabelle. 22 Figura 6: Il menù dei registri/gruppi in un'applicazione reale 6 Amministrazione delle tabelle e viste 6.1 Cosa sono e a cosa servono i gruppi/registri su VFront Su VFront è possibile creare dei gruppi di utenti a cui corrispondono registri di regole sulle tabelle e sui campi: ad esempio è possibile creare un gruppo che possa solo accedere alla tabella A e non alla tabella B. E' possibile creare un gruppo che possa accedere alla tabella A in scrittura e modica, alla tabella B in scrittura, modica e cancellazione e alla tabella C in sola lettura. E' inoltre possibile mostrare diversamente i campi delle tabelle a diversi gruppi (ad esempio nascondere un campo, e così via). Ogni gruppo ha un sistema di regole del tutto indipendente dagli altri gruppi, denibili dall'amministratore. 6.2 Il sistema gruppi/registri in pratica Come la scheda è il cuore di VFront lato utente, il menù dei gruppi registri lo è per la parte di amministrazione. Quando si accede al menù registri, appare una tabella riassuntiva con i registri/gruppi presenti al momento (v. gura 6). Il link Crea nuovo gruppo fa proprio quello che ci si aspetta, con la possibilità di scrivere un nome per il nuovo gruppo, una descrizione e clonare le impostazioni di altro gruppo. La clonazione può essere comoda per non dover ricongurare da zero tutte le opzioni per le tabelle, ma partire da un modello di congurazione esistente. Una volta creato il nuovo gruppo risulterà completamente indipendente dagli altri, compreso quello dal quale è stato clonato. Naturalmente è possibile anche creare un gruppo senza alcuna impostazione di partenza: è suciente selezionare dalla tendina della clonazione crea un registro vuoto. E' possibile anche eliminare i gruppi, tranne il gruppo predenito. Quando si eliminano gruppi con utenti, questi verranno spostati automaticamente nel gruppo predenito. Dalla tabella HTML che mostra i gruppi visibile nella gura 6 si può accedere mediante il link amministrazione alle funzioni più interessanti del front-end. Si ha qui l'amministrazione delle tabelle del database per il gruppo preso in esame. Si 23 Figura 7: Regole per le tabelle per un gruppo (gruppo 0 - default ) ricorda che nella logica di VFront le impostazioni sulle tabelle di database per un gruppo non inuenzeranno in maniera alcuna le impostazioni per gli altri gruppi. Da questa visualizzazione è possibile aver un quadro della situazione: le tabelle identicate dal link blu sono quelle sulle quali è stata operata una qualche modica, mentre quelle rosse sono quelle senza ancora impostazione da parte dell'amministratore. E' qui possibile avere anche una panoramica veloce di quali tabelle sono accessibili in lettura, scrittura, modica e cancellazione, nonché il numero delle sotto-maschere impostate. In coda all'elenco sono visibili le viste SQL con le loro impostazioni. Le viste create nel database su VFront appaiono e sono trattate in maniera simile alle tabelle vere e proprie, tranne alcuni dettagli che saranno discussi nel paragrafo 6.7 In alto a sinistra c'è invece un link Funzioni rapide che permette di operare modiche su tutte le tabelle contemporaneamente. E' possibile ordinare l'elenco delle tabelle cliccando sulle etichette delle colonne. Per accedere alla congurazione di una tabella (per il gruppo in oggetto) è suciente cliccare sul suo nome. 6.3 Impostazioni generali di tabella Come presente in gura si può osservare che l'amministrazione delle tabelle per i gruppi funzionano mediante una pagina con linguette. La prima linguetta riguarda le impostazioni generali (v. gura 8). Qui è impostabile: 2 L'ordinamento dei record Può essere impostato uno dei campi della tabella in ordinamento ascendente o discendente. Diritto di lettura, ossia che la tabella sia visibile o meno (SELECT) . 2 Per caratteristiche intrinseche al sistema, si sconsiglia vivamente di utilizzare campi che possano assumere i valori NULL per l'ordinamento. Questo creerebbe malfunzionamenti nelle funzioni di ricerca. 24 Figura 8: Impostazioni per una tabella (tabella appalto) per il gruppo 0 (default) 25 Qualora la tabella non sia leggibile, non sarà mostrata in home page nell'elenco delle tabelle Il diritto di inserimento di nuovi record (INSERT) Il diritto di modica dei record (UPDATE) Il diritto di cancellazione dei record (DELETE) La possibilità di esportazione dei dati presenti in tabella da parte degli utenti di questo gruppo. Per confermare l'operazione si deve esplicitamente cliccare su Salva impo- stazione generale (il salvataggio delle impostazioni non è automatico). Si noti che di default sono negati tutti i diritti su tutte le tabelle per tutti i gruppi. Sarà compito dell'amministratore dare ai singoli gruppi i diritti che loro competono. 6.3.1 Impostazione allegati e link Come si può notare dalla gura precedente ci sono ulteriori impostazioni nella sezione Allegati e link . Attraverso VFront è infatti possibile collegare a qualunque tabella degli allegati e dei link. Questi saranno poi mostrati nella scheda utente. E' qui possibile congurare la possibilità di leggere, scrivere ed eliminare allegati e link per la tabella in oggetto per questo gruppo. 6.4 Impostazione dei campi La seconda linguetta dell'amministrazione tabella per gruppo è l'impostazione dei campi (vedi gura 8). campo visibile3 (si|no): se si sceglie no il campo obbligatorio , come suggerisce la dicitura, Per ogni campo è possibile impostare campo non apparirà nella scheda; impone al dipendente di compilare il campo. In caso contrario un messaggio alert Campo con ricerca imposta i suggerimenti invece, permette avviserà che è impossibile salvare l'inserimento o la modica. permette di usare il campo per la ricerca; di mostrare, mentre si scrive in un campo, un elenco dei valori già presenti. E' molto Visibile in vista tabella permetterà di mostrare il campo nella vista tabella (indipendentemente utile su alcuni campi per la ricerca (come i titoli o le denominazioni). dalla vista scheda). Si veda la gura 9: il primo campo appare con delle chiavette gialle: questo signica che il campo è una chiave primaria (PRIMARY KEY). In tal caso, se il campo è numerico, di default non verrà mostrato nella maschera. Può essere mostrato invece nella vista tabella. Il secondo campo della gura 9 ha invece delle chiavette blu: signica che si tratta di una chiave esterna (FOREIGN KEY). In questo caso quasi sempre sarà utile impostare il campo con una tipologia valori deniti da tabella (si veda oltre per ulteriori dettagli). Per quanto riguarda i tipi di input, a seconda della tipologia di campo sono possibili solo alcune impostazioni. In linea generale la politica di VFront 3 Tranne per la chiave primaria autoincrement, visibile solo in vista tabella. 26 è di Figura 9: Impostazione dei campi su una tabella di VFront 27 poter impostare regole più restrittive del database, e non viceversa (si veda il paragrafo 1.5 nella pagina 7). Questo signica che, per esempio, se un campo è stato impostato nel database come numerico, il front-end non permetterà di impostarlo come testo. Nel caso di testo lungo invece sarà possibile impostare da VFront il campo come testo corto o testo lungo. A seconda delle scelte fatte in questa maschera di amministrazione si può determinare come il gruppo dovrà vedere la scheda per la tabella in oggetto. Sono di seguito descritti I tipi di input per i tipi di campi principali, in base alla denizione SQL del database. Per ogni caso è riportato come il campo sarà mostrato in HTML nella maschere: numero (INTEGER) tipo proposto da VFront: numero intero viene mostrato un campo di input HTML di tipo text corto numero con virgola (FLOAT o DOUBLE) tipo proposto da VFront: numero con virgola booleano viene mostrato un campo di input HTML di tipo text (in MySQL TINYINT(1) o BOOL in PostgreSQL) tipo proposto da VFront: booleano vero|falso testo viene mostrato un checkbox (VARCHAR o CHAR) tipo proposto da VFront: testo libero corto, password in caso testo libero corto viene mostrato un campo di input HTML di tipo text lungo in caso password vengono mostrati gli asterischi (campo HTML di tipo password). E' possibile per i campi di tipo password scegliere se tenere i valori in chiaro o criptarli mediante la generazione di hash MD5 o SHA1. testo lungo (TEXT, MEDIUMTEXT O LONGTEXT) tipo proposto da VFront: testo lungo, testo corto, testo formattato HTML in caso testo libero corto viene mostrato un campo di input HTML di tipo text lungo in caso testo lungo viene mostrato un campo di input HTML di tipo textarea in caso testo formattato HTML viene mostrata (al posto dell'area di te- sto), un'istanza dell'editor open source FCKEditor (http://www.fckeditor. net/). 28 caso data e ora (DATETIME o TIMESTAMP) tipo proposto da VFront: data e ora formattata, data formattata viene mostrato un campo di testo. Quando si clicca sul campo si aprirà un popup caso data 4 calendario con eventualmente- anche l'ora) (DATE) tipo proposto da VFront: data formattata (con ausilio di un popup calendario) viene mostrato un campo di testo. Quando si clicca sul campo si aprirà un popup 5 calendario con eventualmente- anche l'ora) Sono sempre presenti inne tre tipi di campi molto importanti, tipici del front-end : Campo nascosto Indica un valore nascosto che può essere una costante o una variabile. Se ad esempio si scrivesse 1 il campo assumerà sempre il valore 1. Se invece si utilizzasse il valore %now, automaticamente il campo assumerà la data odierna. Le variabili disponibili sono descritte in un popup e sono parole chiave precedute dal segno % (percento): %nick Nickname dell'utente che ha fatto login %email %uid Email dell'utente che ha fatto login Identicativo numerico dell'utente che ha fatto login %nome Nome dell'utente che ha fatto login %cognome Cognome dell'utente che ha fatto login %nomecognome Nome e cognome (separati da spazio) dell'utente che ha fatto login %cognomenome Cognome e nome (separati da spazio) dell'utente che ha fatto login %gid Identicativo numerico del gruppo a cui appartiene l'utente che ha fatto login %gruppo %now Nome del gruppo a cui appartiene l'utente che ha fatto login Data attuale in formato aaaa-mm-gg %timestamp Data ed ora attuale in formato aaaa-mm-gg HH:mm:ss 4 Il calendario utilizzato è JsCalendar (http://sourceforge.net/projects/jscalendar/) 5 Il calendario utilizzato è JsCalendar (http://sourceforge.net/projects/jscalendar/) 29 attivi solo in fase di inserimento del record anche in fase di modica. Una casella di spunta propone I campi nascosti possono essere (opzione predenita) o l'uso del campo nascosto anche in caso di modica. Qualora si impostasse questa caratteristica il campo sarà automaticamente aggiornato ogni qual volta l'utente modicasse il record preso in esame. Nell'esempio della data odierna (variabile %now ), qualora fosse spuntata la casella, la data sarà aggiornata all'ultima data di modica del record, in caso contrario verrebbe riportata solo la data di creazione. Valori deniti Con questo tipo di input è possibile inserire una lista di valori predenita. Nella scheda apparirà come un menù a tendina. E' possibile inserire dei valori (uno per riga). L'output HTML sarà una tendina con i valori e le etichette uguali ai valori inseriti. E' anche possibile inserire accoppiate valore=>etichetta. Un popup guida l'amministratore alla sintassi corretta. Valori deniti da tabella. E' forse questo il più importante tipo di input. Permette infatti di mostrare i valori codicati da un'altra tabella, opzione fondamentale nelle relazioni 1 a molti. Ad esempio nella gura 9, nel campo codiceComune (numerico) è predisposto un collegamento alla tabella comune mediante una query SQL. Il risultato è un menù a tendina che avrà come valore il codiceComune numerico, ma come etichetta visibile all'utente i nomi dei comuni mostrati in chiaro. Questa funzione è utile soprattutto nel caso di campi che sono anche chiave esterna (segnalata in blu nel front-end). E' necessario richiamare due campi nella query SQL : il codice e la descrizione. E' possibile scrivere la query a mano oppure avvalersi del popup Query Editor visuale . E' possibile scrivere a mano le query anche con l'uso di WHERE e JOIN, funzioni di CONCAT (per MySQL o l'operatore di concatenazione || in PostgreSQL) e simili. E' possibile, per ragioni di sicurezza, scrivere solo query di tipo SELECT. E' inne possibile testare con il pulsante test la correttezza delle proprie query. Una volta impostati i campi è necessario salvare le impostazioni con il tasto Salva in fondo alla pagina. 6.4.1 Il controllo sul valore dei campi Una funzione che può rivelarsi utile è il controllo sull'input per il singolo campo. Per poter usufruire dei controlli è necessario impostare dal menù Variabili (si veda oltre il paragrafo 11) la variabile js_test su SI. In tal caso aanco ad ogni box per l'impostazione di un campo apparirà un link Controlli avanzati che apre un popup. Da qui sarà possibile impostare un vincolo sull'input richiesto per il singolo campo (si ricorda che l'impostazione sarà valida per la tabelle vista dal gruppo su cui si sta operando). A seconda del tipo di dato in oggetto vengono mostrati nella tendina una serie di vincoli dierenti. Sono qui esposti i casi previsti: 30 Figura 10: Controlli avanzati per un tipo di dato varchar tipo int: numerico intero (un numero senza virgola) diverso da (numero che deve essere dierente da quanto immesso come input dall'utente) intervallo numerico (un intervallo di due numeri senza virgola) numero intero con n. cifre: (un numero che indica il numero di cifre richiesto) tipo varchar (o char o text o mediumtext) alfabetico (lettere dalla a alla z, maiuscole o minuscole, senza spazi) alfanumerico (lettere dalla a alla z, maiuscole o minuscole e numeri senza spazi) alfanumerico con trattini (lettere dalla a alla z, maiuscole o minuscole e numeri, carattere - e carattere _ senza spazi) alfanumerico con trattini e spazi (lettere dalla a alla z, maiuscole o minuscole e numeri, carattere - e carattere _ con spazi) email (una email formalmente valida) diverso da (stringa di caratteri dierente da un input denito) 31 lunghezza massima (numero di caratteri massimo) lunghezza minima (numero di caratteri minimo) espressione regolare (espressione regolare di tipo Pearl: è questo uno strumento di controllo sull'input molto potente. Per chi le sa scrivere...) testo con esattamente n. caratteri: (numero preciso di caratteri richiesto) partita iva (partita IVA italiana formalmente corretta) codice scale (codice scale italiano formalmente corretto) tipo date data formattata (data in formato aaaa:mm:gg) data precedente o uguale a (una data che sia precedente o uguale all'input dell'utente) data successiva o uguale a (una data che sia successiva o uguale all'input dell'utente) tipo time orario formattato (con la forma HH:mm:ss) orario formattato (con la forma HH:mm) tipo double (o oat) numerico con virgola (numero che abbia necessariamente la virgola) numerico intero (numero intero) intervallo numerico (un intervallo di due numeri con o senza virgola) numero con virgola con esattamente n. cifre: (un numero che indica il numero di cifre richiesto) Così come possono essere impostati, i controlli avanzati possono essere eliminati in qualsiasi momento. Si noti che i controlli avanzati funzionano sia in fase di inserimento di nuovi record, sia in caso di modica dei record esistenti. Quando in un campo è stato impostato un controllo, il link controlli avanzati viene mostrato in grassetto e viene mostrato il tipo di controllo attualmente attivo. 32 Figura 11: Ordinamento dei campi 33 Figura 12: Una sotto-maschera in dettaglio 6.5 L'ordinamento dei campi nelle maschere E' possibile scegliere di mostrare i campi presenti in tabella con un ordine dierente da quello presente nella denizione del database. Per cambiare l'ordinamento dei campi è suciente andare sulla linguetta Ordine campi. Da qui è possibile, con un semplice drag & drop, spostare l'ordine di presentazione dei campi (si veda la gura 11). Un messaggio di conferma avvertirà dell'operazione avvenuta. Per ripristinare l'ordine predenito cliccare sul pulsante Ripristina ordinamento di default. 6.6 Gestire le relazioni molti a molti: le sotto-maschere Per gestire le relazioni molti a molti, VFront propone lo strumento delle sottomaschere. In altri termini ogni qualvolta, per un record di una tabella, ci siano molti record gli può essere utile l'utilizzo delle sotto-maschere. Per l'utente le sotto-maschere sono visibili dalla vista scheda mediante un box con dei pulsanti bianchi (si veda la gura 12) nei quali è scritto tra parentesi ed in grassetto il numero di record gli per il record padre in oggetto. 6.6.1 Impostazioni generali delle sotto-maschere Per impostare le sotto-maschere si vada dal menù di amministrazione all'opzione Impostazione tabella, linguetta Impostazione sotto-maschere . All'inizio le ta- belle non possiedono sotto-maschere. Per generare una sotto-maschera cliccare sul 34 Figura 13: Sotto-maschere di una tabella link Nuove sotto-maschere. A questo punto sarà possibile aggiungere una o più tabelle da impostare come sotto-maschera della tabella in oggetto. La tabella in oggetto sarà quindi la tabella padre, mentre la/le tabella/e che si scelgono come sotto-maschere saranno considerate tabelle glie. L'impostazione delle sotto-maschere è simile alle impostazioni di tabella, con alcune dierenze (si veda la gura 13). E' necessario innanzitutto denire le impostazioni generali. Per farlo cliccare sul nome di una sottomaschera. Apparirà un modulo del tutto di Impostazione generale, simile a quello già visto per le impostazioni generali della tabella. Da qui è possibile denire i diritti d'uso della sottomaschera, (lettura, scrittura, modica, ecc.). Esistono inoltre delle opzioni molto importanti e caratteristiche delle sottomaschere. Sono evidenziate dalle freccie nella gura . 1. Collegamento tra tabelle E' questa l'impostazione più importante di una sottomaschera in quanto denisce il collegamento tra la tabella e la sottomaschera. Vengono qui mostrati in due tendine i campi della tabella padre ( banca e bancaagenzia nell'esempio in gura 14). Da qui si denisce il collegamento tra la tabella padre e la tabella glia. Se sono denite delle chiavi esterne nel database, VFront suggerirà automaticamente i campi da utilizzare come collegamento. 2. Nome della sottomaschera Si può denite un nome descrittivo per la sottomaschera. Qualora non si denisse verrà utilizzato il nome della tabella come presente in database. 35 Figura 14: Caratteristiche di amministrazione peculiari delle sottomaschere 36 3. Modalità di visualizzazione dei dati. I dati nella sottomaschera si possono visualizzare sotto forma di tabella o sotto forma di scheda. Quando la sottomaschera ha uno o due campi può 6 essere utile la vista tabellare, in caso contrario la vista scheda è più adatta . 4. Numero di record max per la sottomaschera SI può impostare qui un numero massimo di record da visualizzare (e da inserire) nella sottomaschera. Poiché molti record implicano una transazione di dati server/client maggiore e maggiori tempi di attesa per il caricamento della sottomaschera, si consiglia di tenere sotto controllo il numero qui denito (più basso possibile). Un numero ragionevole può essere tra 5 e 50 record. 6.6.2 Impostazioni per i campi delle sottomaschere Dopo aver denito le impostazioni generali e averle salvate con l'apposito tasto, è possibile denire le impostazioni per i campi delle sottomaschere. La denizioni dei campi non è molto diversa da quella per le tabelle generali, salvo l'impostazione del campo denito come collegamento tra le tabelle (cioè la chiave esterna). Questo campo infatti (si veda la gura 15) apparirà nella sottomaschera come una etichetta identicativa del record. Si può qui denire mediante la tendina evidenziata in gura dal rettangolo. Qui appaiono i nomi dei campi della tabella principale. Nell'esempio in gura si è scelto il campo banca in quanto è una descrizione in chiaro della banca che ben si presta ad essere una etichetta leggibile e riconoscibile dall'utente. Il risultato è visibile nella gura 6.7 Impostazione delle viste SQL VFront gestisce anche le viste SQL (VIEWS) e le tratta in maniera simile alle tabelle. Si possono congurare le viste in termini di regole sui campi, ordinamento dei campi e sotto-maschere in maniera del tutto omologa alle tabella. Dierentemente dalle tabelle è necessario specicare esplicitamente il campo chiave primaria (si veda la gura 16). Le viste, per l'utente, sono mostrate nella pagina principale sulla destra (si veda la gura). L'amministrazione delle viste e del tutto simile a quella delle tabelle per la lettura dei dati. Per le operazioni di inserimento, modica e cancellazione dei record VFront si adegua alla politica del database in uso. Ad esempio in MySQL 5 è possibile inserire e modicare i record, ma è possibile utilizzare la funzione di DELETE su una vista solo se nella denizione della stessa non siano presenti JOIN con altre tabelle. L'applicazione analizza la denizione della vista e conseguentemente mostrerà o meno automaticamente le opzioni di eliminazione in base alla presenza di JOIN (gura 16). Per maggiori informazioni si veda: refman/5.0/en/view-restrictions.html http://dev.mysql.com/doc/ 6 Si noti che la vista scheda ha avuto ad oggi più test e tempo di debug dedicato, è pertanto da considerarsi più sicura. 37 Figura 15: Il campo che costituisce chiave esterna di una sottomaschera Figura 16: Impostazioni di DELETE su vista con database MySQL5 38 Per le politiche di gestione delle viste su PostgreSQL si rimanda al manuale ed http://www.postgresql.org/docs/ 8.2/interactive/rules-update.html#RULES-UPDATE-VIEWS. all'utilizzo delle RULES (ad esempio si veda Le viste sono riconoscibili nell'amministrazione e nella scheda utente in quanto mostrano il titolo in verde scuro e non in rosso mattone. 6.8 Sincronizzazione tabelle/front-end VFront permette di sincronizzare i propri registri di regole con la struttura del database su cui si sta operando. Sono queste funzioni molto utili laddove venisse modicata la struttura del database. Ad esempio se si aggiunge o rimuove una tabella o si modica un campo del database, VFront è in grado di sincronizzare le proprie regole con la struttura modicata. Nota bene!: in accordo ai principi generali di VFront (si veda il pa- ragrafo 1.5), ogni operazione di sincronizzazione avviene tra il DB dei dati ed il DB delle regole di VFront, e mai viceversa! In altre parole VFront sincronizzerà il proprio DB di regole per aderire alla struttura del vostro DB di dati e non altererà mai i campi o le tabelle del vostro DB di dati. 6.8.1 Aggiunta di nuove tabelle o viste Quando nel DB dati vengono aggiunte tabelle VFront è in grado di rilevarle ed inserirle nei propri registri di regole. E' importante tenere sempre sincronizzato il DB dei dati con VFront. Per sincronizzare il database è suciente andare sul menu Amministrazione -> Sincronizzazione database/front-end. Qualora venisse rilevata la presenza di nuove tabelle o viste verrà mostrata una schermata simile alla gura 17. Sarà quindi suciente premere il tasto Inserisci tabelle nel frontend per aggiungere le nuove tabelle o viste. Le nuove tabelle non hanno diritti (né di lettura, né altri) di default: dopo la sincronizzazione sarà quindi necessario congurarle per i vari gruppi per poterle utilizzare. 6.8.2 Rimozione di tabelle o viste Come per l'aggiunta di nuove tabelle o viste, è possibile sincronizzare il database di dati con VFront per eliminare le tabelle obsolete. La pagina di sincronizzazione se è rilevata la presenza di tabelle obsolete mostra una scheramata simile alla gura 18. Sarà suciente cliccare su Elimina tabelle obsolete per eliminare dai registri di VFront ogni riferimento alle tabelle (o viste) non più presenti. 6.8.3 Modica dei campi delle tabelle E' possibile che vengano aggiunti, eliminati o modicati campi nelle tabelle del DB dati. Lo script è in grado di rilevare i cambiamenti e propone una sincronizzazione automatica. 39 Figura 17: Sincronizzazione: inserimento di nuove tabelle. Figura 18: Sincronizzazione: eliminazione tabelle obsolete 40 Figura 19: Sincronizzazione: aggiornamento dei campi di una tabella Quando vengono aggiunti o modicati campi in una o più tabelle/viste, viene mostrato un elenco con dei link in rosso. Accedendo al dettaglio è possibile vedere quali dierenze esistono tra la sincronizzazione dei campi di VFront e lo stato attuale della struttura di tabella. Nell'esempio in gura 19 viene mostrato lo stato della tabella test_utente. Vengono aancate due tabelle: la tabella del database, mentre la tabella giornare. B A riporta lo stato dell'information_schema mostra le impostazioni attuali di VFront da ag- Nell'esempio in gura è stato modicato il campo myemail che da varchar(40) è ora di tipo char(40). E' stato inoltre aggiunto un campo di tipo date dal nome nuovo_campo. Come visibile in gura i campi che mostrano variazioni sono evidenziati in giallo. Da questa schermata è possibile sincronizzare mediante la pressione del tasto Sincronizza campi. 6.8.4 Ripristino manuale E' possibile in casi particolari operare un ripristino manuale delle regole di una tabella. Per farlo si può accedere alla linguetta Ripristino manuale (si vedano le gure 17 e 18) e da qui scegliere per quale tabella ripristinare le regole. E' da notare che il ripristino cancella tutte le impostazioni della tabella selezionata per tutti i gruppi. Poiché riscrivere tutte le regole per una tabella per tutti i gruppi può essere una operazione lunga, si suggerisce di utilizzare questa funzione con cautela. 6.9 I commenti SQL su campi e tabelle VFront utilizza i commenti SQL dei campi e delle tabelle. Qualora aveste documentato il vostro database con commenti di tabella e di campo, questi saranno utilizzati in diversi contesti: 41 i commenti di tabella saranno visibili nella home page dell'applicazione sotto il nome (link alla maschera) della tabella i commenti dei campi saranno visualizzati sia nella maschera di amministrazione che come attributo title per i nomi dei campi nelle maschere. Nelle maschere infatti, avvicinando il mouse al nome del campo, il cursore diventerà di tipo help (il punto interrogativo) e se è stato commentato il campo apparirà la descrizione del campo stesso. E' pertanto suggerito di commentare scrupolosamente il vostro database, prassi peraltro valida di per sè. 42 Figura 20: Gestione degli utenti 7 Gestione degli utenti Come visto nel paragrafo 3.4 nella pagina 13, gli utenti possono accedere a VFront attraverso l'autenticazione su strumenti esterni come LDAP o SOAP o altri database. Al primo accesso gli utenti sono registrati nella tabella utente del DB di VFront con livello di amministrazione 1 (nessuna credenziale di amministrazione) e gruppo di appartenenza 0 (gruppo di default ). Se la fonte di autenticazione è congurata per trasmettere a VFront anche il nome e cognome, questi dati saranno registrati e mostrati. Per non creare conitto con la gestione esterna degli utenti (via LDAP o altre fonti di autenticazione), da VFront non è possibile modicare le informazioni degli utenti (email, password, nome e cognome), ma solo i loro diritti d'accesso e di eventuale amministrazione relativi a VFront stesso. Per maggiori informazioni sull'autenticazione si veda (oltre al paragrafo 3.4 nella pagina 13 sopra citato) la Guida all'installazione e la sezione relativa all'autenticazione esterna. 7.1 La tabella utenti La gestione degli utenti su VFront è accessibile dal menù Amministrazione->Gestione utenti. Da qui viene mostrata una tabella (come in gura 20) con gli utenti presenti su VFront e le loro caratteristiche: ID identicativo univoco nella tabella utente gruppo indica il gruppo a cui appartiene l'utente. Il gruppo di appartenenza deter- mina i diritti d'uso delle tabelle. Quando un utente accede per la prima volta a VFront viene inserito nel gruppo predenito 0 - default. livello indica il livello di amministrazione di VFront. 43 nickname cognome nome corrisponde all'email utilizzata per l'autenticazione cognome dell'utente nome dell'utente data inserimento modica data di inserimento (o primo accesso) dell'utente su VFront permette di attribuire l'utente ad un altro gruppo o cambiare il livello di amministrazione elimina permette di cancellare l'utente dal DB VFront. Se si è impostata un'au- tenticazione mediante strumenti esterni (LDAP, altro DB, etc.) l'utente verrà ricreato al suo primo accesso. E' inoltre possibile ltrare gli utenti in base al gruppo e ordinare la tabella in base ad uno dei campi suddetti. E' anche possibile esportare i dati presenti in tabella in formato XLS (MS Excel). 7.2 Modica dei diritti ed attribuizione ad un gruppo Dalla tabella in gura 20 nella pagina precedente, cliccando su modica è possibile cambiare il gruppo di appartenenza dell'utente in oggetto, nonché il suo livello di amministrazione. Questa operazione può essere eseguita da amministratori di livello 3 o da amministratori (altrove deniti anche tutor ) di livello 2. Gli amministratori di livello 2 potranno però promuovere gli utenti di livello 1 solo a livello 2, mentre gli amministratori di livello 3 potranno creare altri amministratori di livello 3 o livello 2. 7.3 Cancellazione di un utente Cancellando un utente si eliminano i suoi dati dal database. Se si è impostata l'autenticazione direttamente dal database di VFront, la cancellazione dell'utente comporterà l'impossibilità di accedere all'applicazione da parte sua. Viceversa, qualora l'autenticazione a VFront sia congurata (dal le di congurazione) mediante autenticazione esterna (LDAP, SOAP, altro DB, etc.) l'utente verrà ricreato al suo prossimo accesso a VFront, con le credenziali basi, ossia livello di amministrazione = 1 (nessuna amministrazione) e gruppo 0 (gruppo di default). 44 8 Il sistema di log e ripristino operazioni Per accedere al menù dei Log si vada sul link Amministrazione e da qui al link Log operazioni sul database. Il sistema dei log del front-end tiene traccia di tutte le operazioni di INSERT, UPDATE e DELETE eseguite sulle tabelle del database dati. Viene tracciato: Data ed ora dell'operazione Il tipo di operazione (INSERT | UPDATE | DELETE | RIPRISTINO) Autore dell'operazione (nome, cognome se presenti e ID) Il gruppo dell'autore dell'operazione La fonte indica da quale strumento è stata fatta l'operazione (per ora sempre m che sta per maschera. In futuro saranno tracciate anche le operazioni relative alle sotto-maschere) ID e tabella su cui l'operazione è stata eettuata Le operazioni vengono mostrate con colori dierenti in base al tipo, come si vede in gura 21. E' possibile ltrare le righe del log al ne di trovare più facilmente le operazioni che si stanno cercando. Il ltro (che viene attivato cliccando sul link ltro sui log) permette di cercare traccia di una operazione in base a numerosi parametri: Tipo di operazione Tabella Utente Data (o intervallo di data) In questo modo è molto facile trovare il record cancellato o modicato per sbaglio, ad esempio, dall'utente Ciccio Pasticcio tra ieri ed oggi. 8.1 Il dettaglio del log Ogni operazione tracciata dal log può essere analizzata in dettaglio. Cliccando sul link dettaglio (si veda la gura 21) è possibile avere ulteriori informazioni sull'operazione eseguita. In caso di modica vine mostrata una tabella che riporta i campi della tabella nella condizione precedente e successiva alle operazioni. I campi modicati sono evidenziati in giallo. Viene mostrata inoltre la eventuale reversibilità dell'operazione (v. gura 22). 45 Figura 21: Log di VFront (la colonna utente è stata volutamente oscurata) 46 Figura 22: Il dettaglio del log 47 8.2 Il ripristino VFront permette alcune interessanti funzioni di ripristino. Nel caso di record cancellati per sbaglio o modicati erroneamente, è possibile ripristinare la condizione precedente. Per farlo è necessario aprire il dettaglio dell'operazione e se VFront considera reversibile l'operazione, è possibile ripristinare lo stato precedente. Nell'esempio in gura 22, viene mostrato il log di una operazione di modica. La tabella in oggetto (test_utente) possiede solo tre campi (id_ut, la chiave primaria; myemail, un campo testo e password, un campo testo impostato su VFront come password con hash MD5 (se vuoi cercare di fare reverse engineering della mia password, sappi che è tempo perso, non è quella della mia banca online). Nel caso presentato è stata modicato il contenuto del campo myemail. Per ripristi- nare l'operazione è suciente cliccare sul tasto Ripristina questa operazione e il contenuto del campo myemail diverrà nuovamente [email protected]. 8.2.1 FAQ sul ripristino per i più curiosi Cosa signica se VFront considera reversibile l'operazione? VFront è un programma e non sceglierà con libero arbitrio cosa ripristinare o meno ;-) Un'operazione è ripristinabile se i dati del log sono integri. Quindi in condizioni di corretto funzionamento, ogni operazione di modica e cancellazione teoricamente può essere ripristinabile. Qualora si facesse una pulizia della tabella del log troppo spesso i dati potrebbero non essere più recuperabili. La tabella log infatti può diventare molto pesante, soprattutto se nel database vi è una intensa attività sui dati. Il DB administrator potrebbe prendere in considerazione la cancellazione dei record della tabella log relativi ad operazioni (ad esempio) più vecchie di tre mesi. Come funziona il sistema di ripristino? VFront non duplica i record per mantenere lo storico. Questo contraddirebbe quanto aermato nel paragrafo 1.5 nella pagina 7 (le tre leggi di VFront), in quanto genererebbe ridondanza di dati sul database che VFront sta leggendo. Il ripristino funziona invece mediante la scrittura nel record della tabella log di alcune operazioni SQL. Sono salvati i contenuti dei campi prima e dopo sotto forma di array serializzato o di istruzione SQL. Se sei ancora curioso, vai a vedere il contenuto dei campi log.storico_pre e log.storico_post. Non voglio i log Perché? I log non interferiscono con la normale attività sulle tabelle, implicano un utilizzo di risorse trascurabile e possono essere molto utili. Se però proprio non ti ho convinto, puoi disabilitarli dal le di congurazione. Leggi la Guida all'installazione per capire come. 8.3 Lo storico dei record Il log permette inne di mostrare lo storico di un record. Cliccando sul link storico (si veda la gura 21) si accede ad una pagina che mostra tutte le operazioni che 48 sono state compiute sul record: l'inserimento, le modiche, l'eventuale cancellazione e l'eventuale/i ripristino/i. Naturalmente lo storico è dettagliato solo qualora le operazioni suddette siano state eettuate tramite le maschere di VFront. L'applicazione infatti non ha modo di tracciare operazioni che siano state eettuate tramite altre interfacce al database di dati (come ad esempio script da shell, o operazioni da phpMyAdmin, per esempio). 49 9 I report Avvertenza: i report su VFront sono in fase sperimentale di sviluppo, questa sezione potrebbe essere modicata in futuro. Alcune caratteristiche potenzialmente utili sono ancora in fase di progettazione e verranno implementate a breve. 9.1 Creazione di un report su VFront VFront permette di generare dei report sul contenuto delle tabelle. E' anche possibile generare report da query SQL. I report su VFront si basano su XML e i formati che vengono generati sono derivati da XML. Per creare un report si deve accedere dal menù di amministrazione alla pagina dei report (link Amministrazione XML e reportistica). Qui appare una tabella con i report attualmente presenti ed due link Crea nuovo report XML da tabella o vista e Crea un nuovo report da query (v. gura 24). 9.1.1 La logica dei report su VFront I report di VFront si basano sul formato XML, che può essere mostrato così com'è o utilizzato per generari altri formati (si veda la gura 23). I le XML a loro volta sono generati attraverso due metodi di interrogazione al database: mediante la lettura dei dati delle tabelle e delle regole impostate su VFront oppure attraverso query ad hoc scritte dall'amministratore. Il le XML può essere trasformato attraverso due processi principali: 1. Attraverso l'associazione di un le di stile XSL (inserito dall'amministratore) al le XML e mediante l'uso di un XSLT Processor (che può essere PHP se si sceglie una tecnologia lato server o il browser dell'utente, se si sceglie una tecnologia lato client) viene generato il le di report in formato XHTML che può essere visualizzato direttamente su web. 2. Mediante un le XSL-FO (inserito dall'amministratore) e l'utilizzo di Apache FOP 7 è possibile generare PDF, RTF ed altri formati. Ci sono due possibilità per generare i report: report basati su tabelle report basati su query I report basati su tabelle mostreranno il contenuto della tabella del database selezionata, mentre i report basati su query permettono di mostrare il risultato di una 8 query SQL scritta ad hoc . 7 Apche FOP non è compreso nella distribuzione di VFront, ma può essere scaricato gratuitamente dal sito uciale. Per maggiori informazioni si veda la sezione 13 nella pagina 68. 8 In realtà i report generati da query orono uno svantaggio notevole: non è possibile generare 50 Figura 23: Schema del funzionamento dei report su VFront 51 9.1.2 Creazione nuovi report e diritti d'accesso Cliccando su Crea nuovo report XML da tabella o vista e Crea un nuovo report da query si accede al modulo di creazione dei nuovi report. Qui è possibile denire alcuni parametri: Nome report Tabella un nome descrittivo per il report (solo se si è scelto di generare il report da una tabella o da una vista) indica la tabella dalla quale generare il report. Vengono mostrate in una tendina le tabelle e le viste attualmente disponibili. Denizione query SQL (solo se si è scelto di generare il report da una query) indica la query SQL dalla quale generare il report. E' presente un tasto Test per provare la correttezza formale della query. Tipo di accesso del report. Il report può essere : Non accessibile ad esempio perché in fase di prova Pubblico (web) in tal caso il report è aperto sul web. Attenzione, in questo modo i dati della vostra tabella o della vostra query saranno accessibili a tutti, non solo agli utenti del front-end. Front end in questo caso i report sono accessibili solo agli utenti autenticati su VFront Solo il/i gruppo/i in questo caso i report sono accessibili solo agli utenti autenticati su VFront appartenenti ad uno o più gruppi specicati XSL da associare E' possibile fare l'upload di un foglio di stile XSL da applicare a questo report. In caso contrario verrà applicato un foglio di stile di default. XSL-FO da associare Utile per i report in PDF e in altri formati impaginati (si veda oltre). E' possibile fare l'upload di un foglio di stile XSL-FO da applicare a questo report. E' possibile utilizzare il foglio predenito. La scelta di default è nessuno ossia non viene generato alcun report. 9.2 Report (X)HTML: utilizzo di fogli di stile XSL lato server e lato client I report (X)HTML sono generati tramite XML e trasformazione con foglio di stile XSL. Questa trasformazione può essere eseguita lato client o lato server. Una un report di un singolo record basandosi sulla chiave primaria. Tuttavia i report generati da query orono una maggiore possibilità di personalizzazione e un controllo maggiore sui dati. Esiste un sistema (che qui si consiglia di applicare) per avere i vantaggi delle tabelle e la essibilità delle query, ossia la generazione di viste SQL scritte per la generazione di report. VFront tratterà la vista come una normale tabella, purchè si sia denita manualmente la chiave primaria per la vista dall'impostazione dei registri (per maggiori informazioni si veda anche l'impostazione delle viste a pag. 37). 52 Figura 24: Tabella dei report disponibili: link anteprima variabile del menù Variabili di sistema (si veda oltre, paragrafo 11 nella pagina 61) permette di scegliere se eettuare la trasformazione lato client o lato server. La trasformazione lato client implica che il browser carichi l'XML a cui è asso- ciato il foglio di stile e eettui la trasformazione. Il vantaggio di questo sistema è che non si deve avere necessariamente installato sul proprio server il pacchetto XSL per PHP. Gli svantaggi però constano in: sicurezza (nel codice XML sorgente che arriva al browser possono essere mostrati dati di campi che non si vorrebbero mostrare agli utenti) e prestazioni (la trasformazione lato client implica una transazione di dati potenzialmente maggiore). Pertanto, quando possibile, si suggerisce di utilizzare la trasformazione server. lato 9.2.1 Dove sono i report XHTML ? Quando viene generato un report basato su una tabella si può andare direttamente all'indirizzo http://INDIRIZZO_VFRONT/xml/NOME_TABELLA/ dove INDIRIZZO_VFRONT è l'URL della vostra installazione di VFront e NOME_TABELLA la tabella di cui state leggendo il report. Da qui è possibile avere un menù dei report disponibili. E' possibile accedere all'indirizzo direttamente dal link nella colonna anteprima della tabella report (si veda l'immagine 24). Se viene generato invece un report basato su una query l'indirizzo apparirà come http://INDIRIZZO_VFRONT/xml/@NOME_REPORT/ con in nome del report scelto predetuto da un carattere @. In entrambi i casi si aprirà una schermata con i link per accedere alle pagine dei report. 53 Figura 25: Report HTML (dettaglio) Ad esempio il report HTML di default mostra un elenco dei record in tabelle, separate da una linea come in gura 25: Mediante l'uso di fogli di stile XSL è possibile avere report ben più complessi ed articolati, ad esempio per essere mostrati al pubblico. E' possibile in questo modo generare pagine web formattate correttamente per mostrare bandi, appalti, schede di ogni genere direttamente puntando all'URL corretta da una pagina statica. Altri modi di leggere i report sono dati dalle seguenti sintassi delle URL: INDIRIZZO_VFRONT/xml/NOME_TABELLA/all/ http:// Mostra tutti i re- cord della tabella (sconsigliabile qualora ci siano molti record) Esempio: http://localhost/vfront/xml/banca/all/ INDIRIZZO_VFRONT/xml/NOME_TABELLA/OFFSET,LIMIT/ http:// Mostra i record della tabella con paginazione. OFFSET indica il punto di partenza e LIMIT il numero di record da mostrare Esempio: http://localhost/vfront/xml/banca/0,50/ INDIRIZZO_VFRONT/xml/NOME_TABELLA/contatore / http:// Mostra un solo record ordinato secondo l'ordinamento della chiave primaria della tabella. Il contatore deve essere un numero Esempio: http://localhost/vfront/xml/banca/12/ 54 INDIRIZZO_VFRONT/xml/NOME_TABELLA/id/ID_DEL_RECORD/ http:// Mostra un singolo record, dove ID è il codice numerico del record (del campo impostato come chiave primaria). Esempio: http://localhost/vfront/xml/banca/id/10008/ In tutti i metodi esposti è possibile accedere all'XML semplicemente aggiungendo XML alla ne dell'URL ad esempio: http://localhost/vfront/xml/banca/id/10008/XML Un discorso simile vale per i report basati sulle query. In tal caso però non è possibile conoscere a priori il campo costituente chiave primaria. Saranno perciò validi solo i primi tre metodi: INDIRIZZO_VFRONT/xml/@NOME_REPORT/all/ http:// Esempio: http://localhost/vfront/xml/@report_banca_1/all/ INDIRIZZO_VFRONT/xml/@NOME_REPORT/OFFSET,LIMIT/ http:// Esempio: http://localhost/vfront/xml/@report_banca_1/0,50/ INDIRIZZO_VFRONT/xml/@NOME_REPORT/contatore / http:// Esempio: http://localhost/vfront/xml/@report_banca_1/12/ 9.3 Report PDF: XSL-FO e Apache FOP VFront è predisposto per generare anche report in PDF attraverso fogli di stile XSLFO. Per farlo utilizza l'applicazione open source Apache FOP (licenza Apache 2.0, http://xmlgraphics.apache.org/fop/). Per utilizzare Apache FOP è necessa- rio che l'applicazione sia presente sul server che si sta utilizzando. E' necessario anche impostare sul le di congurazione di VFront il path corretto di Apache FOP (per dettagli si veda il le Guida all'installazione ). Alla data odierna esistono due versioni stabili di Apache FOP: la 0.20.x e la 0.94. Nei test eettuati sono entrambe valide. L'ultima versione permette la generazione di altri formati di report (come ad esempio RTF). I report PDF sono generati da VFront richiamando Apache FOP tramite apertura di una shell (comando exec() ). Pertanto vericare che Apache possa eseguire FOP. Per generare un report in PDF è necessario impostare un foglio di stile XSL-FO nella creazione del report. Esiste anche un foglio di default che genera un report semplice. In ogni caso per richiamare i report PDF è suciente aggiungere la dicitura PDF negli url come mostrati nella sezione precedente. Ad esempio http://localhost/vfront/xml/banca/all/PDF oppure http://localhost/vfront/xml/banca/id/10008/PDF 55 9.4 Altri formati di report e uso di Apache FOP 0.9 o successivo La versione 0.9.x di Apache FOP permette la creazione di numerosi formati di output. Uno di questi che può essere utile è il formato RTF. Per richiamare i formati diversi da RTF il metodo è uguale a quello del PDF con la dierenze del tipo di formato che si vuole generare. Per esempio: http://localhost/vfront/xml/banca/id/10008/RTF genererà un le RTF, oppure http://localhost/vfront/xml/banca/id/10008/TXT genererà un le TXT. Per ulteriori congurazioni si rimanda al le xml/.htaccess per le regole di riscrittura degli url. Per un uso avanzato si veda anche lo script xml/fop_exec.php e i formati permessi. Per i formati di output generabili da Apache FOP si rimanda alla documentazione della versione di FOP che si sta utilizzando. 56 10 Statistiche e graci sui dati Attenzione! Per poter usufruire di questo modulo è necessario il pacchetto PHP PEAR e i pacchetti Image/Graph e Image/Canvas (licenza LGPL) - http: // pear. php. net . Per scrivere nuove statistiche è necessario inoltre conoscere l'SQL. VFront supporta la creazione di graci e statistiche sui dati ad uso degli amministratori (livello 2 e 3). Per accedere al menù statistiche cliccare sul link Statistiche database nella home page dell'amministrazione. Da qui è possibile creare delle nuove statistiche scrivendo una query in codice SQL. 10.1 La pagina statistiche Quando si accede al menù statistiche per la prima volta ci si trova davanti ad una pagina con due link: Crea una nuova statistica Dati popolamento tabelle Dati popolamento tabelle è una statistica speciale di default che non fa altro che mostrare un graco a barre che descrive il numero di record presenti attualmente sulle tabelle e sulle viste del database che VFront sta leggendo. Crea una nuova statistica è invece il modulo per iniziare a personalizzare il menù delle statistiche. Cliccando sul link si accede ad un modulo di inserimento con le seguenti voci: Nome statistica E' il nome descrittivo della statistica, l'etichetta. Descrizione statistica Descrizione della statistica che si sta creando. Può essere utile come promemoria Tipo di accesso per la nuova statistica Le statistiche possono avere dei diritti di accesso. Attraverso questa caratteristica la statistica si può impostare come Pubblica (per tutti gli utenti di VFront di livello 2), Accessibile solo al mio gruppo, Accessibile solo a me. Tipo di graco desiderato Ci sono al momento due scelte possibili: Barre e Torta. A seconda del tipo di dato che si vuole rappresentare è più utile un tipo o l'altro. Denizione statistica In questa casella va scritto il codice SQL. Si noti come VFront si aspetti una query che, per quanto articolata possa essere, restituisca due colonne: chette e valori. eti- C'è anche un piccolo pulsante Test che permette di testare 57 Figura 26: Statistica di prova al momento se la query genera un errore o è corretta (almeno formalmente). Ad esempio ecco una query su due tabelle (banca e bancaagenzie). Il graco mostra il numero di agenzie delle banche italiane con più di 500 agenzie. Si noti come il primo campo selezionato sia etichetta ed il secondo sia un valore: SELECT b.banca, count(ba.abi) as n FROM banca b, bancaagenzia ba WHERE b.abi=ba.abi GROUP BY b.banca HAVING n>500 ORDER BY n DESC Si veda la pagina con il graco risultante (gura 26). Qualora volessi visualizzare i dati con un graco a torta posso sempre modicare la statistica. Per farlo è suciente cliccare sul link modica che appare vicino al nome con link della statistica. Il risultato è mostrato nella gura 27. E' sempre possibile eliminare una statistica. Nel menù principale è suciente cliccare sul link in rosso vicino al nome con link della statistica. Si ricorda inoltre che le statistiche sono dinamiche, ossia i dati restituiti in forma tabellare ed in forma graca sono calcolati in tempo reale. 58 Pertanto i dati saranno Figura 27: Statistica di prova (con graco a torta) 59 sempre aggiornati in tempo reale, anche qualora venissero fatte modiche ai dati nelle tabelle coinvolte nella query che genera la statistica. 60 11 Le variabili di sistema Dal menù di amministrazione di VFront è possibile accedere al menù Variabili ed impostare alcuni parametri relativi all'uso ed alla modalità di visualizzazione dell'applicazione. Le variabili qui descritte sono registrate in database (nella tabella variabili del database VFront) e non nel le di congurazione descritto nel documento Guida all'installazione. Ci sono due tipi di variabili: gruppo/registro. le variabili globali e le variabili speciche per Le variabili globali permettono di creare delle impostazioni di default, mentre le speciche creano delle eccezioni per uno specico gruppo registro. Da questo è evidente che se una variabile è denita anche in modo specico per un gruppo, questa avrà priorità sull'impostazione globale. Le variabili speciche possono anche non essere denite, ma se se ne vuole denire una è suciente cliccare sulla voce Imposta nuova variabile e scegliere dalla tendina delle variabili disponibili quella che si vuole denire specicatamente per un gruppo / registro (v. gura 28). Si noti come in gura non sia presente il menù delle variabili speciche per gruppo/registro. Questa è una condizione normale quando esiste un solo gruppo (il gruppo 0 - default ). Qualora venisse creato un altro gruppo automaticamente apparirebbe il menù delle variabili speciche. Le variabili disponibili sono: altezza_iframe_tabella Altezza in numero di pixel del rettangolo per visualizzare i dati in tabella Si tratta della dimensione dell'iframe nella vista tabella delle maschere delle tabelle crea_nuovo_valore_ref permette in caso di tabella parent scrivibile l'inserimento di nuovi valori nella medesima Se attivato questo parametro fa si che appaia un link nelle tendine dei campi 1 a molti, per poter aprire la scheda relativa alla tabella. Ad esempio qualora la tendina (il campo) puntasse ad una tabella Cliente e non fosse presente il cliente desiderato in questo modo è possibile aggiungere il record e continuare la compilazione della tabella. La funzione dipende anche dal fatto che l'utente possa o meno operare sulla tabella parent, in questo esempio la tabella Cliente. formati_attach js_test Formati permessi per i le allegati, separati da virgola Abilita i controlli javascript sui contenuti dei campi Si veda per maggiori informazioni il paragrafo 6.4.1 sul controllo dei valori inseriti nei campi. max_char_tabella Numero massimo di caratteri da visualizzare nelle viste a ta- bella. (0 = tutti) max_tempo_edit Tempo di disponibilità del record Questo parametro è relativo al lock del record, qualora più utenti volessero 61 Figura 28: Variabili di sistema 62 modicare contemporaneamente un record della stessa tabella. Il meccanismo di lock decade a) quando il primo utente che è entrato in modica sul record salva il record; b) il primo utente che è entrato in modica annulla la modalità modica; c) qualora l'utente però restasse molto tempo in modica sul record questo dopo il numero di secondi espresso da questa variabile decadrebbe ducio. n_record_tabella Numero di record da visualizzare per le tabelle dei dati passo_avanzamento_veloce Numero di record impostati per il movimento velo- ce tra i record nelle tabelle Si tratta del numero di record di avanzamento dei tasti con icona > > e < < nelle maschere delle tabelle recupero_password Se abilitato mostra nel login l'opzione di modicare la pas- sword (non funziona in caso di login esterno) Funziona solo qualora l'autenticazione sia impostata direttamente sul DB VFront e non ad esempio su LDAP e/o su database esterni. Questo perché si presuppone che VFront non debba ne possa modicare i dati di un database esterno o di una directory LDAP. server_xslt Indica se utilizzare la trasformazione XSLT lato server (da disabilitare in caso di mancato supporto PHP) Si consiglia di tenere la variabile attivata qualora si disponga del modulo PHP in oggetto in modo da mandare al client direttamente la pagina XHTML e non l'XML con collegamento all'XSL. Questo è un buon accorgimento in termini di prestazioni dell'applicazione e sicurezza. Qualora non fosse possibile utilizzare sul proprio server le funzioni di trasformazione si imposti la variabile su NO e la trasformazione sarà adata al client (il browser web). shortcut_tastiera_attivi Permette l'uso delle scorciatoie da tastiera nelle ma- schere delle tabelle e delle viste (si veda anche il relativo paragrafo 4.5 nella pagina 19). Tendenzialmente queste funzioni possono essere molto utili per un uso più veloce e produttivo di VFront. Qualora si utilizzassero browser particolari o ci fossero problemi da qui è possibile disattivare questa opzione. shortcut_tastiera_popup Mostra nelle maschere una piccola linguetta a destra che mostra un popup che ricorda le scorciatoie da tastiera all'utente. Il comportamento di questa variabile è comunque inuenzato dalla variabile precedente (shortcut_tastiera_attivi): qualora le scorciatoie da tastiera fossero disattivate, non verrà mostrata la linguetta anche se questa variabile fosse attiva (in quanto disorienterebbe inutilmente l'utente). textarea_cols textarea_rows Numero di colonne per i box di testo nelle maschere Numero di righe per i box di testo nelle maschere 63 usa_calendari Indica se devono essere utilizzati o meno i calendari per facilitare l'inserimento nei campi data (0=no, 1=si) Si suggerisce di attivare i calendari. Qualora questo non fosse possibile si suggerisce di attivare un controllo sulla validità del campo (si veda 6.4.1 nella pagina 30 ) per la correttezza dell'input della data. Infatti sia PostgreSQL che MySQL si aspettano tendenzialmente le date in formato aaaa-mm-gg, formato che l'utente medio non userà di certo. usa_history Imposta se si deve utilizzare la history del browser Permette quindi di utilizzare i tasti avanti e indietro del browser senza uscire dalla scheda. E' una buona idea tenere la variabile su SI, per migliorare l'usabilità dell'applicazione. Si è riscontrato che Opera non supporta questa caratteristica: per una lista di browser che supportano pienamente VFront vedere il paragrafo 2.2 nella pagina 8. 64 Figura 29: Esportazione dei dati da una maschera 12 Esportazione dati e backup database L'esportazione dei dati delle tabelle è un'opzione che può essere eseguita dagli utenti che possiedano i permessi adeguati. Il permesso di esportazione dati si può infatti denire per ogni tabella per ogni gruppo. Se un utente può esportare i dati, vedrà nella vista scheda il tasto Esportazione dati . Cliccando questo si aprirà un popup con alcune opzioni (v. gura 29): Formato. Si può scegliere il formato CSV (comma separate value), consigliato per tabelle con molti dati, HTML standard, ODS ossia il formato open document, usato tra gli altri da OpenOce Calc, e XLS utilizzato da Microsoft Excel. Modalità recupero dati: Dati come presenti in tabella signica che viene mostrata la tabella in maniera raw , ossia vengono mostrati i dati grezzi così come sono archiviati in database. Viceversa Dati con formattazione impostata nel registro del gruppo, mostrerà i dati con le impostazioni del registro, cioè ad esempio se per il campo codiceComune si è impostato di prendere i dati da una tabella parametrica con tutti i comuni e si sceglie di mostrare il nome del comune in questo tipo di impostazione, si leggerà il nome del comune, mentre nella modalità raw si leggerà il codice numerico che lo identica (e che poco potrà dire ad un utente normale). L'amministratore sia di livello 2 che 3, potrà invece sempre accedere all'esportazione dati direttamente dal menù di Amministrazione. Per gli amministratori di livello 3 è prevista anche l'opzione di dump del database. Il dump avviene attraverso i normali comandi del database da shell (mysqldump 65 o pgdump). Questo permette un veloce recupero sia del database dati e di quello delle regole, ad esempio per un backup. formato standard Linux (.tar.gz). 66 I le vengono compressi ed inviati in 13 Test impostazioni VFront Dal menù Amministrazione, si acceda alla sezione Varie, dove è presente un link Test Impostazioni VFront. E' questa una diagnostica che analizza lo stato dell'installazione di VFront. Può essere molto utile, soprattutto appena dopo l'installazione, per vericare che tutti i parametri richiesti siano congurati correttamente. Attualmente sono qui presenti cinque sezioni principali: 1. Versione software Mostra la versione di PHP e del database (MySQL o PostgreSQL) attualmente in uso. 2. Moduli PHP VFront utilizza alcuni moduli PHP non sempre presenti. Qui viene mostrato il caricamento dei moduli che VFront utilizza 3. Moduli PEAR VFront utilizza PEAR e i pacchetti Image/Graph e Image/Canvas (licenza LGPL) per produrre i graci delle statistiche. Viene qui mostrata l'esistenza dei pacchetti suddetti. 4. Impostazioni cartelle scrivibili VFront utilizza per il suo corretto funzionamento alcune cartelle dove scrive le temporanei o di altro genere. Queste cartelle devono essere scrivibili dall'utente Apache e questa sezione analizza che questo possa avvenire. 5. Apache FOP Questa sezione riguarda l'eseguibile FOP utilizzato da VFront per la reportistica in PDF e altri formati mediante le trasformazioni XSL-FO. Viene analizzato se esiste l'eseguibile FOP e la sua versione in uso. 67 Appendice 1 - Crediti e applicazioni utilizzate Sono qui citate le applicazioni sviluppate da terze parti attualmente in uso in VFront. Alcune applicazioni sono opzionali su VFront. E' riportata anche la tipologia di licenza delle applicazioni suddette. Prototype http://prototype.conio.net/ Libreria di funzioni javascript Licenza MIT - http://www.opensource.org/licenses/mit-license.php Scriptaculous http://script.aculo.us/ Libreria di funzioni javascript Licenza MIT - http://www.opensource.org/licenses/mit-license.php PHPMailer http://phpmailer.sourceforge.net/ Libreria per l'invio di email tramite PHP Licenza LGPL - http://www.opensource.org/licenses/lgpl-license.php YAV http://yav.sourceforge.net/ Tool di validazione Javascript Licenza LGPL - http://www.opensource.org/licenses/lgpl-license.php Apache FOP http://xmlgraphics.apache.org/fop/ Generazione di report PDF ed altri formati mediante trasformazione XSL-FO Licenza Apache 2.0 - http://www.apache.org/licenses/ DHTMLxGrid http://www.scbr.com/docs/products/dhtmlxGrid/ Generatore di tabelle dinamiche in javascript nella vista tabella Licenza GPL - http://www.gnu.org/licenses/gpl.html Algoritmi MD5 e SHA1 per Javascript http://pajhome.org.uk/crypt/md5 Ge- neratore di hash md5 e sha1 in javascript nei campi password delle maschere Licenza BSD - http://www.opensource.org/licenses/bsd-license.php FCKeditor - http://www.fckeditor.net/ Rich text editor in javascript Licenza LGPL - http://www.opensource.org/licenses/lgpl-license.php JsCalendar http://sourceforge.net/projects/jscalendar/ Generatore di calendari in javascript Licenza GPL - http://www.gnu.org/licenses/gpl.html phpGettext http://sourceforge.net/projects/phpgettext/ Libreria per la gestione dello standard gettext in modalità inprepretata Licenza GPL - http://www.gnu.org/licenses/gpl.html Le icone utilizzate fanno parte del progetto Crystal crystal/ http://www.everaldo.com/ Licenza LGPL - http://www.everaldo.com/crystal/?action=license Questo documento inne è stato scritto con strumenti open source: con LYX (http: //www.lyx.org) per la versione LATEX e PDF; l'HTML generato da LYX è stato poi modicato con NVU (http://www.nvu.com/) e JEdit (http://www.jedit. org/). 68