FIASO: eZ Publish incontra Symfony2

Dopo sette mesi di lavoro, poche settimane fa è stato messo online un nuovo progetto a cui abbiamo lavorato con tanto impegno e grande entusiasmo: FIASO.

FIASO è l’associazione di aziende sanitarie e ospedaliere italiane dislocate su tutto il territorio nazionale. Operativamente, raggruppa un insieme di professionisti impegnati in un processo continuo di confronto e condivisione con l’obiettivo di dar vita a un circolo virtuoso di scambio di contenuti e idee.

Abbiamo raccontato già qualcosa nel case study del progetto e nel post dedicato alle metodologie; qui vogliamo dirvi qualcosa in più dal punto di vista tecnico e della fase di sviluppo.

Per FIASO abbiamo realizzato il nuovo portale, uno strumento strategico di comunicazione per il corpo associativo della Federazione che consente la creazione di un network di soggetti che possono interagire tra loro, confrontarsi e condividere le tematiche oggetto delle attività dell’associazione.

Il progetto è stato suddiviso in tre sezioni logiche che costituiscono le aree di sviluppo:

  • contenuti editoriali: il nostro obiettivo in questa sezione è stato fornire una migliore User Experience della piattaforma e una completa riorganizzazione dell’architettura dell’informazione al fine di consentire sia al corpo associativo sia all’utente finale di consultare in maniera semplice ed efficace i contenuti;
  • gestione progetti: l’area di gestione progetti che abbiamo realizzato consente la creazione di vere e proprie stanze di lavoro accessibili ai soli partecipanti. Tali stanze consentono di lavorare in team ad un progetto e mettono a disposizione diversi strumenti di collaborazione per i partecipanti, tra cui gestione documenti, task manager e forum;
  • archivio documentale: abbiamo fatto in modo che il portale potesse fornire ai soci FIASO un sistema di gestione documentale alimentato direttamente dagli amministratori o dagli associati. Il modello organizzativo è molto semplice in modo da facilitarne la gestione. Il sistema è suddiviso in aree tematiche, ogni area è coordinata da un responsabile. Chiunque abbia la facoltà di consultare, può anche proporre documenti per la pubblicazione: tali documenti saranno segnalati all’attenzione del responsabile di area che tramite back office provvede o meno ad accettare la pubblicazione sul sito completando le informazioni richieste dall’anagrafica del documento.

Entrando nel vivo…

Frontend

Lo sviluppo del frontend è iniziato con la realizzazione dei mockups .
Abbiamo in principio definito lo schema colori e la linea tipografica, poi l’information e l’interface design da cui sono scaturiti i visual di ogni principale sezione del portale. Sottoposti e accettati dal cliente siamo passati dai visual alla realizzazione del markup e dei css.

fiaso screenshot
In questa fase due strumenti ci hanno reso il lavoro molto più agevole: Git e Frontsize.
Quando lavori in team da remoto – ma non solo – e condividi gli stessi file su cui scrivere codice, diventa indispensabile avere uno storico delle versioni fatte da ognuno degli sviluppatori. Lato frontend trasmettere i propri avanzamenti a chi prenderà il tuo codice solo attraverso commenti sparsi nel markup è una tecnica che consideriamo non sostenibile, ed in questo senso, Git ci ha dato una grande mano.
Parlando invece di mero sviluppo frontend il grosso aiuto è arrivato da un framework di casa ideato, progettato e sviluppato da Vittorio: Frontsize.
Frontsize è un framework css scritto in LESS o SASS – esistono entrambe le versioni – e strutturato con una logica che permette di gestire interi blocchi di codice css, incapsulati come mixins o widgets, attraverso classi html. L’elevata configurabilità, personalizzazione e l’organizzazione dell’alberatura dei file al suo interno ci hanno permesso di velocizzare tutto il processo di sviluppo dei templates semplicemente facendo una corretta configurazione iniziale del framework.
Lo studio dell’interface design ci ha portato ad utilizzare pochi ed essenziali componenti Javascript: Tab Navigation, Accordions, Dropdowns e Inline Modals. Anche in questo caso l’esigenza che ci ha spinto alla scelta di queste UI è stata quella di rendere accessibili e facilmente reperibili la moltitudine di contenuti che il portale offre.

Backend

Una delle esigenze principali del cliente era quella di avere un’applicazione che gli consentisse di generare e modificare agevolmente i contenuti; lo strumento più adatto per questo progetto, quindi, era sicuramente un Content Management System (CMS). Data l’eterogeneità dei contenuti, la nostra scelta è ricaduta su eZ Publish.

eZ Publish è un content management system open source progettato per la realizzazione di portali web di grandi dimensioni attraverso strumenti di gestione e di collaborazione potenti e, allo stesso tempo, facili da usare. Nelle sue ultime versioni eZ Publish integra Symfony2 (SF2) come full-stack framework consentendo, quindi, di sfruttare tutte le sue componenti all’interno del progetto. Nonostante l’integrazione, però, lo sviluppatore ha ancora a disposizione lo stack legacy con cui poter continuare l’utilizzo di eZ Publish nella sua versione originale.

Considerando la direzione presa dagli sviluppatori di eZ che, release dopo release, continuano a rilasciare sempre più estensioni e funzionalità che sfruttano la potenza di Symfony2, abbiamo deciso di realizzare il progetto usufruendo del nuovo stack.

La scelta presa ha presentato diversi pro e contro.

I vantaggi riguardano, ovviamente, la possibilità di sfruttare le potenzialità messe a disposizione dalle componenti di Symfony2, tra cui:

  • il sistema di cache,
  • la gestione delle form,
  • l’utilizzo di Twig come template engine,
  • la possibilità di utilizzare subcontroller all’interno del template,
  • la possibilità di sfruttare bundle sviluppati per Symfony2 (ad esempio Pagerfanta per la paginazione oppure TwitterBundle per l’integrazione con Twitter),
  • test funzionali performanti attraverso la classe WebTestCase.

Dall’altro canto, però, la scelta di utilizzare eZ Publish con il nuovo stack ha portato con sé diversi problemi dovuti soprattutto al mancato porting di funzionalità native di eZ sullo stack di Symfony2. Alcuni esempi di funzionalità non ancora integrate nel nuovo stack sono:

  • registrazione e gestione del profilo utente: nonostante il processo di login sia gestito attraverso Symfony2, tutta la gestione del profilo utente, compresa la registrazione, è realizzata attraverso lo stack legacy,
  • gestione Tag e Commenti: due estensioni molto famose delle vecchie versioni di eZ sono eZ Comments ed eZ Tags che ampliano le funzionalità del CMS fornendo una gestione avanzata di commenti e tags. Non esistono attualmente alternative ufficiali per lo stack di Symfony; tuttavia ci sono due bundle che integrano le funzionalità base: pvrEzCommentBundle e TagsBundle. Date le esigenze del progetto, abbiamo effettuato un fork dei due bundle estendendone le funzionalità,
  • ricerca full-text non funzionante.: una delle feature più importanti delle versioni precedenti di eZ erano gli strumenti di ricerca messi a disposizione. Nativamente molto potenti, attraverso l’estensione eZ Find, consentiva ricerche avanzate anche all’interno di file PDF. Il nuovo stack non prevede ancora il supporto a queste funzionalità; dalla roadmap sembra previsto nella 5.4.

 

Non sempre riesci a trovare il cliente che percepisce il valore dello sviluppo agile e dei principi della User Experience, ma quando succede – come è successo a noi in questo caso – l’intero progetto prende una piega favorevole per tutti gli stakeholder. Valore al progetto, valore al lavoro, valore al metodo.

Blog post di Simone D’Amico e Moreno Giorgini