libere suggestioni
ISIS 1.1
ISIS - Intranet Site Interactive System è un complesso sistema gestionale in PHP-MySql per siti intranet locali di tipo amministrativo. Attualmente è finalizzato all'uso nell'intranet dell'Agenzia delle Entrate, ma non è detto che, in seguito, la cosa non si possa allargare: infatti, vista la sua modularità, potrebbe essere facilmente adattato a realtà differenti; tuttavia, sarebbe opportuno che le modifiche fossero fatte da chi sia integrato in tali realtà, ovvero fatte sul campo (questo è un invito...). È, di fatto, il frutto di una vecchia sfida che, implicitamente, avevo lanciato in merito alla eventualità che l'Agenzia potesse attingere all'interno per certa produzione web e, in particolare, per l'intranet locale. La mia amministrazione, per quanto riguarda l'intranet, sta inesorabilmente scivolando verso un totale appiattimento grafico e contenutistico, secondo un modello proprietario estremamente discutibile. Mi rendo abbastanza conto del fatto che che, conseguentemente, ISIS avrà scarse possibilità di essere accettato o, addirittura, ufficializzato... Ma non importa, ISIS non pretende questo: semplicemente si pone come alternativa libera, liberamente realizzata con software e tecnologia libera e liberamente concessa. Ho costruito ISIS interamente con le mie mani senza attingere ad altro che non siano i manuali ufficiali di php e mysql. Nessuno può quindi avanzare pretese o opporsi alla mia scelta di renderlo disponibile a tutti. Fanno eccezione le classi per la conversione a pdf, che sono realizzazioni di Wayne Munro, R&OS Ltd, comunque concesse sotto licenza GPL. Ne ho tuttavia scritto una breve estensione (ext.isispdf.php) per aggiungere una manciata di semplici metodi. Devo, inoltre, ringraziare alcuni colleghi (Antonino I., Carlo P. e Sandro Z.) per alcuni preziosi suggerimenti. A Sandro, in particolare, devo l'input per l'autenticazione in Active Directory. [sommario] 23 novembre 2006 - Rilasciata la versione 1.1! Innanzitutto, ho unificato le due versioni (base e ad) ed ora la scelta viene effettuata all'inizio della configurazione. Successivamente, si può tornare sui propri passi intervenendo manualmente sulla costante C_LOG_TYPE impostata nel file di configurazione etc/config-plus.php. Questa nuova versione permette, inoltre, la gestione diretta delle adesioni non direttamente scaturenti da controllo bensì da invito per studi di settore o parametri. Ho introdotto, poi, una certa gestione delle autorizzazioni in merito all'elencazione dei controlli, dei verbali, delle verifiche, degli accessi, delle adesioni e delle autotutele. Ora vi sono tre livelli di protezione: uno restrittivo, che consente al semplice utente solo l'elencazione degli atti personali, al capo-team anche quella di tutto il team e solo al capo-area, al direttore e ad eventuali utenti privilegiati (pensate, ad esempio, agli addetti alla pianificazione e consuntivazione) quella di tutto l'ufficio; uno intermedio, che consente agli utenti anche la visualizzazione per il team ed al capo-team anche quella di tutto l'ufficio; uno permissivo, che consente al semplice utente l'elencazione per tutti i livelli. Naturalmente quando parlo di utente, intendo componente di team di controllo... Infine, ho razionalizzato gli elenchi ed ho corretto qualche piccolo bug. Sono tutti aggiornamenti, insomma, nati da mesi di test sul campo. Com'è ormai consueto e opportuno nei siti intranet (ed in molti siti internet), ISIS si suddivide in due macro-aree: quella libera e quella riservata, ad accesso autenticato. Una delle peculiarità di ISIS è però il fatto che le due aree non sono alternativamente esclusive: cioè, l'accesso in area riservata non preclude l'uso degli strumenti messi a disposizione nella cosiddetta area libera. Nella precedente release, esistevano due versioni di ISIS: quella base e quella AD, che si differenziavano esclusivamente nelle modalità di accesso in area riservata. Ora (con la versione 1.1) la scelta viene fatta con la configurazione. La prima opzione, che ha il vantaggio di funzionare con un'installazione standard, prevede la memorizzazione di una password in database (in forma criptata, naturalmente); la seconda, che ha, invece, bisogno di alcuni interventi che cambiano in base al sistema operativo del server, ha il vantaggio di utilizzare le credenziali di accesso al dominio. Tranne alcune brevi intestazioni delle pagine, i contenuti di ISIS sono totalmente dinamici: sono, cioè, inseribili, modificabili e, eventualmente, eliminabili con tutta semplicità per mezzo del Content Manager ATOMS (A Text Only Managing System), semplicissimo e leggerissimo gestore di contenuti che ho realizzato alcuni anni fa e che ho adattato per l'occasione (ma di questo parleremo più ampiamente nella sezione Amministrazione). La gestione dinamica di un sito ha innumerevoli vantaggi, non ultimo quello di poter, in qualsiasi momento, ripristinare o aggiornare i file senza perdere i dati inseriti (che stanno, infatti, su database). [sommario] L'area libera di ISIS prevede inizialmente 10 pagine (o sezioni) elencate in menu; altre possono essere aggiunte con estrema semplicità (ma di questo parleremo dopo):
Oltre alle pagine elencate in menu, altre sono disponibili indirettamente (credits, amministrazione, etc.). [sommario] L'area riservata ad accesso autenticato costituisce il massimo dell'espressione delle potenzialità di ISIS. Effettuato l'accesso, si visualizza un altro menu al di sotto della testatina:
[sommario] Ho optato per una bassa qualità delle immagini a vantaggio della leggerezza...
La homepage di ISIS: naturalmente l'Ufficio di Paperopoli ancora deve essere fondato (di certo avrebbe almeno due soggetti di grandi dimensioni...).
La pagina di default dell'area riservata di ISIS: l'account con le informazioni sull'utente autenticato. [sommario]
La pagina dei credits del content manager ATOMS: un gestore di contenuti solo-testo. Prossimamente, se la cosa avrà un seguito, ho intenzione di integrarlo anche graficamente in ISIS.
E, per finire, ecco una homepage personalizzata di ISIS: questo ufficio, nonostante il nome inusuale, esiste veramente (è quello dove presto attualmente servizio). Notata la testatina? [sommario] Per utilizzare ISIS sono necessari:
Come molti di voi sapranno, non esiste un unico sistema Linux, ma bensė esistono centinaia di distribuzioni diverse che hanno, tuttavia, un denominatore comune: offrire un sistema operativo completo, affidabile e soprattutto libero e open-source. Inoltre, tutte le distribuzioni (o quasi) hanno anche la caratteristica di essere nativamente orientate sia alle utilizzazioni desktop che a quelle server, adottando, coerentemente, software libero. Ne consegue che un sistema Linux ha già, in genere, tutto quello che serve per essere utilizzato come web-server con piattaforma Apache, PHP e MySql (ma non solo...). A riguardo della opzione AD, le cose si fanno un po' più complicate, nel senso che ci sono delle notevoli differenze tra una distribuzione e l'altra: alcune hanno già nativamente l'estensione ldap di PHP (necessaria per l'autenticazione in Active Directory), mentre altre no e bisogna, nel caso, documentarsi bene. Per quanto mi riguarda, essendo io un appassionato della distribuzione Slackware (distribuzione storica, famosa per la sua purezza, affidabilità e velocità, ma anche per il fatto che, in genere, non rende le cose decisamente facili), con la versione 10.2 di tale distribuzione, ho dovuto aggiornare Apache, PHP e Mysql al ramo current ed ho dovuto aggiungere alcune estensioni... Mentre ora, Slackware 11 (rilasciata il 2 ottobre 2006) ha il supporto ldap nativo. Mi si riferisce, inoltre, che una distribuzione leggera, orientata alle applicazioni server, con il supporto ldap nativamente attivo, è Ubuntu-server. [sommario] Discorso inverso per Windows. Innanzitutto questo sistema operativo, in qualsiasi versione desktop, non può essere utilizzato come server: non che le versioni server siano radicalmente diverse, ma tutto dipende dalle finalità commerciali della Microsoft, che hanno portato la casa di Redmond a porre una limitazione d'accesso in rete alle postazioni client (massimo 10 utenti contemporanei). Ne consegue che bisogna avere una installazione server, ma non basta: bisogna installare Apache, PHP e MySQL. La strada più semplice potrebbe essere quella di installare il pacchetto all-in-one EasyPHP, che fornisce web-server, linguaggio e database in un colpo solo: io l'ho utilizzato per testare le pagine, nella versione 1.7 (esiste la 1.8 ma, personalmente, ho avuto problemi con questa versione e, non avendo il tempo per verificarne i motivi, sono tornato alla 1.7...). Naturalmente Windows server ha già il suo DBMS (MSSql) e il suo web-server proprietario (IIS), su cui si potrebbero installare le estensioni per PHP e MySql, ma non credo valga la pena di fare certe forzature; e poi... lo spirito di ISIS č diverso.
Le modifiche da fare per l'opzione AD sono, invece, relativamente semplici: basta aprire con un editor di testo il file php.ini,
che si trova nella directory Apache (di EasyPHP, se avete installato quello...) e togliere il ";" che si trova all'inizio della stringa
(per decommentarla)...
extension=php_ldap.dllche dovrebbe essere verso la fine del file e aggiungere, nella sezione Resource Limits, la stringa... ldap.max_links = -1Dovrebbe bastare... [sommario] I file, per comodità, sono disponibili in due formati compressi: .zip e .tar.bz2. Il contenuto degli archivi č identico e entrambi possono essere utilizzati sia in ambiente Linux che in quello Windows. 1.04 Mb 906 Kb
Se avevamo già la versione 1.0 e non vogliamo reinstallare tutto, possiamo optare per l'aggiornamento: basta scaricare il seguente pacchetto, estrarlo nella root del sito (sovrascrivendo i relativi file) e lanciando dal browser il file indirizzoISIS/update1.1.php, che ci permetterà di selezionare il livello di protezione degli elenchi dell'area controllo e che provvederà anche all'aggiornamento del database. 52.2 Kb 36.2 kb
[sommario] L'installazione di ISIS è semplicissima: di fatto, non si tratta di un'installazione, ma basta decomprimere il file scaricato, estrarre il contenuto e posizionarlo nella root-directory del proprio server. Naturalmente si può optare per l'inserimento di ISIS in una sotto-cartella, così da avere, per esempio, la possibilità di ospitare più siti sullo stesso server. In tali casi, naturalmente, il sito sarà raggiungibile all'indirizzo http://ip-server/sotto-cartella (non è da sottovalutare, comunque, la possibilità di configurare il proprio DNS-server, così da poter raggiungere il sito con un nome più rappresentativo...). Per decomprimere i file scaricati, sotto Windows usate il vostro programma di compressione preferito, mentre sotto Linux potete optare per le utility grafiche del vostro file-manager o per la linea di comando con... unzip nomefile.zip per i file .zip, oppure con... tar xjvf nomefile.tar.bz2 per quelli .tar.bz2. Dopo aver posizionato il tutto, se avete un server Linux (bravi!), tenendo presente che, su questo sistema, la gestione della sicurezza su file e cartelle è decisamente più seria che altrove, si rende necessaria la modifica dei permessi di alcune directory (quelle dove ISIS deve scrivere dei file o caricare file). Le cartelle che vanno impostate con permessi 707 sono: doc, etc, img, img/min, inc, sfw, tmp, var e var/log. Potete farlo graficamente dal vostro file-manager (konqueror, nautilus, rox...), oppure, molto più velocemente, da un terminale, con... su Password: [password di root] cd [root-directory (quella dove avete posizionato ISIS)] chmod -R 707 var var/log tmp sfw img img/min inc etc doc [sommario] A costo di ripetermi..., anche la configurazione di ISIS è di una semplicità disarmante: basta aprire un browser qualsiasi di una qualsiasi postazione (naturalmente stiamo dando per scontato che il server sia perfettamente configurato in rete...) e digitare, nella barra dell'indirizzo, l'i.p. del server (+ /sotto-cartella, eventualmente...), selezionare il tipo di autenticazione ed inviare, per trovarsi davanti alla pagina di configurazione del primo screenshot. Qui l'unica difficoltà potrebbe essere costituita dalle credenziali di MySql: prima di procedere, dobbiamo esserne a conoscenza (possiamo anche inserire un nuovo amministratore, usando la console di MySql o il gestore PhpMyAdmin). Inseriamo i campi richiesti, seguendo le semplici indicazioni e, se tutto va bene, ci ritroveremo in una paginetta di registrazione, dove va inserita soltanto l'e-mail di un amministratore del sito. Fatto questo, saremo reindirizzati subito nella home del nostro nuovo e fiammante sito locale! Cosa abbiamo fatto? Riempiendo quel semplice form, abbiamo:
[sommario] Un sito dinamico non sarebbe tale se non avesse il suo bravo Content Manager, ovvero uno strumento attraverso il quale fosse possibile aggiungere, modificare o eliminare i contenuti del sito stesso. Il Content Manager di ISIS è ATOMS (A Text Only Managing System), che ho realizzato, in una prima stesura, già nel 2003, come versione leggera di un altro manager, COSMOS, più orientato all'e-commerce (Commerce Oriented Site Management Organized System, che non ho mai finito del tutto, però). Non sfigurerebbe, credo, in un'ipotetica classifica dei content manager più piccoli al mondo: infatti ATOMS pesa meno di 75 kb! Per accedere ad ATOMS, basta autenticarsi e cliccare sul link CMS; ad esso possono accedere solo il superutente, che abbiamo indicato in sede di configurazione, e gli eventuali amministratori che inseriremo dopo. La differenza tra superutente e amministratore consiste nel fatto che il primo può gestire i ruoli dell'ufficio e, quindi, inserire, tra l'altro, gli amministratori. ATOMS è provvisto di un complesso (solo in apparenza) menu ad albero, dove sono tenute in ordine e disposte con un certo criterio tutte le attività gestibili. Nella barra inferiore, inoltre, ci sono altri tre link che rinviano, rispettivamente, alla home di ATOMS, alla pagina dei credits e all'uscita dal CMS (rimanendo, tuttavia, in area riservata). Cliccando sulle voci di menu, si accede alle liste relative dove, in base ai campi contenuti, è possibile aprire. modificare o eliminare i singoli record. Cliccando sulle intestazioni delle colonne, inoltre, è possibile l'ordinamento alfabetico dei dati o, nel caso di tipi o categorie (tabelle relazionate), il raggruppamento per categorie omogenee. Inoltre, se ci troviamo al cospetto di una tabella con molti record, ATOMS permette di personalizzare l'impaginazione in base al numero di record per pagina. [sommario] Le prime cose da fare, una volta configurato ISIS, potrebbero essere (non necessariamente in quest'ordine):
[sommario] ATOMS consente l'upload (caricamento) di documenti (compresi i modelli), di file e di immagini. Il peso massimo consentito per ogni file è di 2 Mb (che coincide con le impostazioni native di Apache). Se l'upload ha successo, ISIS produce automaticamente una news e, per quanto riguarda le immagini, anche una miniatura da visualizzare nella pagina. Per rispettare il layout di ISIS, è naturale che le immagini caricate debbano rispettare determinate dimensioni. La cosa non è tanto determinante per le immagini caricate per il download (wallpaper, immagini territorio, etc.) quanto per quelle facenti parte della grafica. Avrei potuto forzare le dimensioni, sia mediante la codifica html, sia facendo creare al PHP delle miniature (come avviene per le immagini della gallery), ma i risultati non sarebbero stati sempre ideali... Ecco, in dettaglio, alcune indicazioni:
[sommario] inserimento nuove pagine statiche Anche in questo caso, ISIS vi sorprenderà per la sua semplicità! Per inserire nuove pagine statiche (non più di due o tre, però, altrimenti vi tocca cambiare lo stile del layout...), basta inserire titolo e testo in tabella pagine aggiuntive alla voce di menu pagine, aiutandosi con il mini-editor; è importante seguire le indicazioni dell'editor e ricordarsi di chiudere eventuali blocchi di testo aperti. Inserendo una nuova pagina, automaticamente si modifica anche il menu principale di ISIS. inserimento nuove pagine dinamiche Qui ci fermiamo con la semplicità (della serie "fatelo solo se sapete quello che state facendo"): per inserire nuove pagine dinamiche, bisogna avere una conoscenza più o meno approfondita di PHP e MySQL, in quanto si deve fare tutto da soli. ISIS, tuttavia, vi viene in aiuto permettendo di inserire le nuove pagine (e relative eventuali tabelle di MySql) in ATOMS: per farlo, basta leggere le istruzioni in commento ai file menu.inc.php sotto atoms/a_etc/, list.inc.php e do.inc.php sotto atoms/a_inc/. Mi sembra appena il caso di precisare di fare estrema attenzione alla sintassi! La gestione del database è lasciata alla più ampia libertà. Particolare attenzione, tuttavia, va posta nella modifica o nella cancellazione di record facenti parte di tabelle relazionate (ad esempio, quelle che classificano tipi o categorie): infatti, se noi abbiamo inserito dei record che fanno capo ad una certa categoria, dobbiamo essere coscienti che, se noi successivamente andiamo a modificare o cancellare proprio quella categoria, l'azione avrà necessariamente ripercussione in tutti i record figli... Per stare tranquilli, la regola generale potrebbe essere: nelle tabelle che classificano tipi o categorie, non togliamo e non cambiamo, piuttosto aggiungiamo. [sommario] La manutenzione di un sito ISIS non richiede niente di particolare. L'unico accorgimento potrebbe essere quello di svuotare, saltuariamente, la cartella tmp. Per venire incontro alle diverse esigenze cross-platform e cross-browser (non imaginate nemmeno quanti problemi dia Internet Explorer :-( ), ho dovuto, infatti, far sì che i file .pdf dinamicamente generati andassero a scrivere fisicamente dei file univoci nella cartella, appunto, tmp. Non svuotarla, comunque, non comporterebbe altro che il riempimento progressivo della cartella e, conseguentemente, del disco... Un'altra cartella dal contenuto variabile è var/log, dove, giornalmente, vengono scritti dei file di log, con i dati di connessione e disconnessione degli utenti autenticati. In questo caso, i file sono di una dimensione così irrisoria che lo svuotamento della cartella si rende superfluo. Immaginiamo, per assurdo, che il server improvvisamente esploda o che venga inghiottito dalla terra... Perderemmo tutto? Beh, i dati inseriti nel database li perderemmo di sicuro. È per questo motivo che esiste il backup! Esso è necessario soltanto per il database. Per il sito, infatti, è praticamente inutile: basterebbe soltanto ripartire daccapo dai file originali (configurazione etc...). Tutto ciò, naturalmente, ha valore se non abbiamo fatto modifiche ai file! È anche per questo motivo che invito calorosamente alla condivisione delle eventuali modifiche! Per fare il backup del database ci sono due strade: quella graficamente guidata e quella da linea di comando. Per la prima, abbiamo bisogno di qualche gestore di MySql (PhpMyAdmin, etc...). Per la linea di comando, sia sotto Linux che sotto Windows (dove, però bisogna prima posizionarsi nella directory mysql\bin), basta digitare (i nomi in maiuscolo sono le variabili)... mysqldump --add-drop-table NOME-DB > PERCORSO/FILE.txt -u AMMINISTRATORE -p Enter password: PASSWORD In questo modo, il dump del database verrà scritto sul file di testo PERCORSO/FILE.txt. Il nome del database lo ricaviamo dal valore assegnato alla costante C_DB nel file etc/siteconfig.inc.php. Il percorso del file può anche essere una cartella condivisa in rete (e montata con Samba, se parliamo di Linux). Al momento di ripristinare, dopo aver rifatto la configurazione di ISIS, basta digitare... mysql NOME-DB < PATH/FILE.txt -u AMMINISTRATORE -p Enter password: PASSWORD Tali operazioni (backup ma anche lo svuotamento di tmp), sotto Linux, possono essere benissimo organizzate con crontab, uno strumento che permette di far eseguire al sistema delle operazioni pre-determinate a intervalli pre-stabiliti. Anche sotto windows dovrebbero esistere strumenti di schedulazione simili... [sommario] Utilizzo da parte degli utenti Non mi pare ci siano istruzioni particolari da dare agli utenti per l'utilizzo di ISIS... Tutte le indicazioni che servono sono esposte nelle singole pagine. Ho realizzato ISIS sfruttando molte potenzialità dell'immenso PHP, ricorrendo, in particolare, alla programmazione orientata agli oggetti: il core di ISIS è infatti l'oggetto (o classe) Isis (contenuto nel file lib/isis.php), un motore di quasi 1300 righe. Anche ATOMS è gestito da una classe (Atom, nel file atoms/a_lib/atom.lib.php). Sinceramente, essendo un po' più datata rispetto ad Isis, risente di qualche ingenuità dovuta all'inesperienza e presenta qualche ridondanza nel codice. È mia intenzione, appena possibile, di unificare le due classi e di integrare ATOMS in ISIS anche dal punto di vista grafico. Le informazioni sul sito sono memorizzate su di un database relazionale MySql di 64 tabelle, delle quali una consistente parte è dedicata alla gestione dei controlli e delle attività inerenti... Il codice di marcatura di ISIS è XHTML 1.1 che ho validato con successo tramite il validatore del W3C (ho potuto farlo mediante il direct input del codice: essendo ISIS posizionato dentro una intranet, infatti, la validazione on-line si rende impossibile). Per lo stile ho utilizzato i CSS; anche da questo punto di vista, ISIS ha superato l'esame del W3C. Da notare il fatto che, con l'eccezione di ATOMS, in tutto ISIS non c'è una sola tabella e tutto il layout è ottenuto con un uso particolarmente estremo dei fogli di stile. ISIS non dimentica gli utenti ipo o non vedenti: grazie alla validazione dell'XHTML 1.1, dei CSS e ad altri piccoli accorgimenti, è presumibile (la certezza, in questo caso, è quasi impossibile, non essendoci un modo efficace per verificarlo...) che esso sia conforme agli standard WAI AAA (o, almeno AA). [sommario] Per l'elaborazione del codice, ho utilizzato esclusivamente editor testuali: prevalentemente Quanta + sotto la mia Slackware e qualche editor spicciolo free sotto Windows. Non ho trovato un editor sotto Windows degno di Quanta +; ho provato anche un prodotto commerciale, PHPEdit, con licenza gratuita per uso personale, ma mi è sembrato alquanto macchinoso e, inoltre, molto spesso si impunta. Per la semplice grafica ho utilizzato il mio insostituibile The Gimp. ISIS è cross-platform: infatti, l'ho quasi interamente costruito e testato sotto Linux (la mia fida Slackware 10.2) e abbondantemente testato anche sotto Windows (con EasyPHP 1.7). ISIS è cross-browser: si visualizza correttamente con Firefox (il miglior browser esistente), Mozilla (ora SeaMonkey), Opera, Internet Explorer, Konqueror (e se si vede con Konqueror, potete stare certi che si vede bene anche con il Safari del mac-os), Galeon... Devo dire, ad onor del vero, che con Konqueror ed Opera (solo sotto Linux), ho notato un piccolo disallineamento delle barre arancioni, ma è cosa di poco conto... ISIS è cross-resolution: grazie al suo particolare layout, infatti, non avremo problemi a visualizzarlo con qualsiasi risoluzione (da 800 x 600 in su). ISIS 1.1, una volta decompresso, ha una dimensione di 3,24 Mb e conta 166 file (ad esclusione di quelli di configurazione, log, etc.), organizzati in 18 cartelle. [sommario] ISIS è genuino FLOSS (Free/Libre Opensource Software, ovvero Software Libero a Sorgente Aperto). Utilizzate ISIS liberamente, ma fatelo sotto la vostra responsabilità. Potete anche modificarlo a piacimento: non mi offendo, anzi, ve lo consiglio perché sicuramente lo migliorereste. In questo caso, però vorrei che le modifiche fossero condivise con tutti. In questa ottica, penso che ISIS possa farsi rientrare nello spirito della Licenza GNU-GPL. Testato su: Firefox, Mozilla, Netscape, Konqueror, Galeon, Opera & Internet Explorer. ninobi.altervista.org → software libero e libere suggestioni è una realizzazione di nino b Questo sito è dedicato a Teresa, Melania & Annalisa. |





