Costruire la app = configurare Drupal
La costruzione di una app con Drupal consiste nella configurazione di Drupal guidata da comandi, selezioni e campi da compilare, presentati dal menù di Amministrazione. La configurazione di Drupal è molto ricca e cresce con l'installazione di moduli aggiuntivi. Con MieApp voglio aiutarti a scoprire passo passo le configurazioni più importanti, senza doverti preoccupare se sbagli o dimentichi qualcosa, perché in ogni momento potrai tornare indietro e raffinare la tua opera. Non è quindi necessario avere tutto chiaro prima di partire a costruire, anzi la prima versione della app ti fornirà suggerimenti su come proseguire.
Per guidarti nella costruzione della app, ti suggerisco di rispondere a queste domande:
- Scopo: a cosa serve la app?
- Dati: quali informazioni gestisce la app?
- Persone: chi usa la app?
- Autorizzazioni: cosa possono fare le persone sui dati?
- Percorsi: come agiscono le persone nella app?
- Automazioni: cosa fa la app in autonomia o al posto delle persone?
Risponderai a queste domande prima a parole e poi configurando uno o più aspetti di Drupal. Aiutiamoci con un esempio. I dettagli realizzati li vedremo nelle Guide che seguiranno, per ora basta capire il percorso logico proposto.
Scopo
Descrivi in poche frasi cosa vuoi dalla app. Ad esempio immaginiamo di voler una app per "Gestire le prenotazioni di sale riunioni".
Dati
Elenca i tipi di informazioni che la app deve gestire. Ad esempio, la app prenotazioni sale deve gestire le Sale, le Prenotazioni e le Assegnazioni delle Sale in risposta alle Prenotazioni. Ricordati che, oltre ai dati relativi a cose, luoghi e processi, la app deve sempre gestire anche i dati personali degli Utenti che useranno la app.
Il modo più semplice ed intuitivo per rappresentare in Drupal i Dati che hai identificato è creare per ogni tipo di Dato uno o più Tipi di Contenuti. Ad esempio, per la app prenotazione sale configuriamo in Drupal un Tipo di Contenuto "Sala", caratterizzato da localizzazione, capienza e strumentazione disponibile; un Tipo di Contenuto "Prenotazione", caratterizzato dalla Sala richiesta e dalla data/ora richiesta di utilizzo; un tipo di Contenuto "Assegnazione", caratterizzato dalla Prenotazione cui risponde e da eventuali note sull'uso. Vedremo nella apposita Guida come è facile con Drupal configurare tutti i Tipi di Contenuti che servono alla tua app e come collegarli tra loro. Appena configuri un nuovi tipo di Contenuto, Drupal ti mette subito a disposizione le pagine per creare, modificare, eliminare, mostrare e cercare i Contenuti di quel tipo.
Più in dettaglio, ogni tipo di Contenuto è caratterizzato dai Campi che memorizzano le informazioni elementari che lo compongono. Proseguendo nell'esempio, vediamo da quali Campi sono formati i vari tipi di Contenuto.
Sala
| Campo | Tipo | Descrizione |
| Titolo | testo | nome della Sala |
| Capienza | numero | quante persone può ospitare |
| Descrizione | testo | descrizione della Sala, comprensiva delle attrezzature disponibili |
| Localizzazione | coordinate | dove si trova la Sala |
Prenotazione
| Campo | Tipo | Descrizione |
| Titolo | testo | descrizione breve della prenotazione |
| Quando | data e ora | quando è richiesta la Sala |
| Sala | riferimento ad una Sala | quale Sala è richiesta |
| Nota | testo | nota relativa alla Sala |
Assegnazione
| Campo | Tipo | Descrizione |
| Titolo | testo | descrizione breve della assegnazione |
| Quando | data e ora | quando è concessa la Sala |
| Prenotazione | riferimento ad una Prenotazione | a quale Prenotazione risponde l'Assegnazione |
| Nota | testo | nota relativa all'Assegnazione |
Drupal in realtà gestisce, oltre ai Contenuti, molti altri tipi di Entità tra cui Utenti, File, Commenti ecc. che scopriremo a tempo opportuno.
Persone
Elenca i ruoli delle persone che usano la app. Se la app è usata solo da te, avrai solo due ruoli: l'Amministratore (cioè tu) e i Visitatori, cioè chiunque riesca ad arrivare alla tua app dalla rete locale o da internet. Se invece pensi di condividere l'uso della app con più persone, avrai almeno tre ruoli: l'Amministratore, i Visitatori e gli Utenti, cioè le persone che fanno login nella app per farsi riconoscere. A loro volta, gli Utenti potrebbero svolgere diversi ruoli: ad esempio, nella app prenotazioni sale potresti delegare l'assegnazione delle sale a Utenti Gestori ed avere quindi quattro ruoli: L'Amministratore, i Visitatori, gli Utenti Richiedenti e gli Utenti Gestori.
Drupal gestisce le persone che interagiscono con la app come Utenti. L'Utente è un particolare tipo di Entità, per il quale Drupal ti mette a disposizione non solo le pagine di creazione, modifica e cancellazione, ma anche funzioni specifiche quali la registrazione, l'autoregistrazione, il login, il logout ed altre ancora.
Per caratterizzare gli Utenti, Drupal utilizza i Ruoli. I ruoli predefiniti sono "Visitatore" (o Utente anonimo, cioè la persona che non ha fatto login), "Utente autenticato" (cioè la persona che ha fatto login) e "Amministratore" (cioè la persona che gestisce Drupal). Con una semplice configurazione, puoi facilmente aggiungere ulteriori Ruoli per caratterizzare diversi gruppi di Utenti autenticati: ad esempio, nella app prenotazione sale aggiungeremo i Ruoli "Richiedente" e "Gestore".
Autorizzazioni
Per ogni tipo di dato e per ogni ruolo utente che hai identificato, ora specifica quali ruoli possono eseguire su quali tipi di dati le operazioni base di creazione, lettura, modifica e eliminazione. Una tabella come quella che segue può risultare utile per descrivere queste Autorizzazioni (non rappresento il ruolo Amministratore perché può sempre far tutto):
| Ruolo utente | |||
| Tipo di informazione | Visitatore | Utente Richiedente | Utente Gestore |
| Dati personali dell'Utente | - | Modifica i propri dati | Modifica i dati di tutti gli utenti |
| Sala | Vede tutte le Sale | Vede tutte le Sale | Crea e modifica tutte le Sale |
| Prenotazione | - | Crea, vede, modifica e elimina (1) le proprie Prenotazioni | Vede, modifica e elimina (1) tutte le Prenotazioni |
| Assegnazione | - | Vede le Assegnazioni create dai Gestori in risposta alle proprie Prenotazioni. Delle Assegnazioni altrui vede solo l'effetto di occupazione delle Sale senza dettagli. | Crea, modifica e elimina tutte le Assegnazioni |
(1) Una Prenotazione è eliminabile solo se non è stata ancora create l'Assegnazione corrispondente.
La gestione base delle Autorizzazioni in Drupal è fatta configurando i Permessi: un Permesso è una semplice opzione accesa / spenta che abilita / disabilita una funzione ad un ruolo utente. Per ogni tipo di Contenuto che hai configurato, Drupal mette a disposizione i corrispondenti Permessi di creazione, modifica e eliminazione. In Drupal troverai una tabella molto simile a quella sopra descritta, in cui accedere / spegnere i Permessi. Drupal mette a disposizione anche Permessi per la gestione degli Utenti e per molte altre funzioni. Spesso l'installazione di moduli aggiuntivi aggiunge nuovi Permessi. Vedremo più avanti che le Autorizzazioni gestite coi Permessi possono essere integrate con strumenti più sofisticati, quali ad esempio i "Gruppi" (comunità di Utenti e Contenuti), i Permessi dinamici dati dai Workflow e i Permessi basati su etichette condivise tra Utenti e Contenuti.
Percorsi
Per ogni ruolo utente, illustra il percorso dentro la app in termini di sequenza di pagine visitate e, per ogni pagina, di dati mostrati e di comandi disponibili. Tabelle come quelle che seguono possono risultare utile per descrivere i Percorsi dei diversi ruoli (non rappresento il ruolo Amministratore perché si muove liberamente in Drupal). Nelle tabelle ho sottolineato i dati che, se cliccati dall'utente, portano alla pagina di dettaglio del dato (es. "Elenco Prenotazioni" indica che, cliccando su una delle Prenotazioni elencate, si passa alla pagina coi dettagli di quella Prenotazione). In ogni pagina è anche mostrato un comando "Inizio" (non riportato in tabella) che consente di tornare rapidamente alla pagina inziale del percorso.
| Percorso Visitatore | ||
| Pagina | Informazioni mostrate | Comandi disponibili |
| Iniziale | Spiegazione della app. Istruzioni per iscriversi. | Registrazione Login |
| Registrazione | Modulo di iscrizione | Invio (viene creato l'Utente) |
| Login | Modulo di inserimento credenziali | Invio (il Visitatore diventa Utente e passa al percorso Utente Richiedente o Gestore) |
| Percorso Utente Richiedente | ||
| Pagina | Informazioni mostrate | Comandi disponibili |
| Iniziale | Elenco delle sue Prenotazioni prive di Assegnazione Elenco delle sue Assegnazioni ricevute | Sale Profilo Logout (l'Utente diventa Visitatore e passa al percorso Visitatore) |
| Sale | Elenco delle Sale | |
| Sala | Caratteristiche della Sala Calendario Assegnazioni sulla Sala | Prenota (va alla pagina Crea Prenotazione) |
| Crea Prenotazione | Modulo di creazione di nuova Prenotazione | Invio (viene creata la Prenotazione e va alla pagina Prenotazione) |
| Prenotazione | Dati della Prenotazione, inclusa eventuale Assegnazione | Modifica Elimina (1) |
| Assegnazione | Dati dell'Assegnazione, inclusa Prenotazione | Rinuncia (esegue la procedura di eliminazione Assegnazione, vedi Automazioni) |
| Profilo | Dati dell'Utente | Modifica |
| Percorso Utente Gestore | ||
| Pagina | informazioni mostrate | Comandi disponibili |
| Iniziale | Elenco delle Prenotazioni prive di Assegnazione | Gestione Sale Gestione utenti Profilo Logout (l'Utente diventa Visitatore e passa al percorso Visitatore) |
| Gestione Sale | Elenco delle Sale | Nuova Sala (va alla pagina Crea Sala) |
| Crea Sala | modulo di creazione di una nuova Sala | Invio (viene creata la Sala e va alla pagina Sala) |
| Sala | Dati della Sala Elenco Prenotazioni prive di Assegnazione Calendario Assegnazioni | Modifica Elimina (2) |
| Prenotazione | Dati della Prenotazione, incluso Utente richiedente ed eventuale Assegnazione | Modifica Elimina (1) Assegna (se non già assegnata, va alla pagina Crea Assegnazione) |
| Crea Assegnazione | Modulo di creazione nuova Assegnazione sulla Sala | Invio (viene creata la Assegnazione e va alla pagina Assegnazione) |
| Assegnazione | Dati dell'Assegnazione, inclusi Utente richiedente, Utente Gestore, Prenotazione e Sala | Assegnazioni Modifica Elimina |
| Assegnazioni | Elenco di tutte le Assegnazioni, ricercabile per data, Utente richiedente, Utente Gestore, Prenotazione e Sala | |
| Gestione Utenti | Elenco degli Utenti | |
| Utente | Dati dell'Utente se Utente Richiedente: Elenco delle sue Prenotazioni, con Sala e eventuale Assegnazione e Utente Gestore se Utente Gestore: Elenco delle sue Assegnazioni, con Utente Richiedente, Prenotazione e Sala | Modifica Elimina |
(1) Una Prenotazione è eliminabile solo se non esiste l'Assegnazione corrispondente
(2) Una Sala è eliminabile solo se non ci sono Assegnazioni o Prenotazioni su di essa
Drupal mette a disposizione nativamente una pagine di creazione per ogni tipo di Contenuto e una pagina di dettaglio per ogni Contenuto, coi comandi "Modifica" e "Elimina", limitate però ai soli Campi del Contenuto. Per creare pagine che elencano i Contenuti e per arricchire la pagina di un Contenuto con dati presi da altri Contenuti ad esso correlati, Drupal mette a disposizione le Viste, un potentissimo strumento cui dedicherò molte Guide. Con le Viste puoi costruire pagine specificando quali tipi di Contenuti mostrare, in che ordine, quali filtri applicare e come mescolare i loro dati con dati prese da Utenti o altre Entità o Contenuti. Ad esempio, nella app prenotazione sale con le Viste puoi configurare la pagina "Sala" in modo che mostri non solo i dati di una Sala, ma anche l'elenco delle sue Assegnazioni. Sempre con le Viste, in una pagina puoi aggiungere comandi che appaiono solo se il contesto lo consente o lo richiede: ad esempio, nella pagina "Sala" mostreremo il comando "Prenota" solo se l'Utente che guarda la pagina non è un Gestore e solo se quell'Utente non ha già inoltrato una prenotazione non ancora soddisfatta.
Oltre ai comandi mostrati nelle pagine, Drupal gestisce Menù di comandi mostrati in tutte le pagine o in gruppi di pagine, differenziabili per ruolo dell'utente. Ad esempio, nella app prenotazione sale il comando "Inizio" che riporta alla pagina di inizio del percorso sarà scritto in un menù per non doverlo ripetere nella configurazione di ogni pagina.
Le funzioni necessarie per gestire Contenuti, Utenti, Ruoli, Permessi, Viste, Menù e molti altri aspetti di Drupal sono disponibili nativamente in Drupal. Se la tua app richiede ulteriori funzioni non disponibili nella installazione base di Drupal, puoi cercarle tra le migliaia di Moduli aggiuntivi gratuiti. Ad esempio, se nella pagina "Sala" sopra descritta vogliamo mostrare le Assegnazioni non come mero elenco ma come un calendario navigabile per mese, installeremo il modulo aggiuntivo "Calendar View".
Automazioni
Oltre ai comandi e ai dati forniti dagli utenti, è possibile assegnare a Drupal operazioni da eseguire al posto delle persone, ad esempio operazioni periodiche di pulizia, ricalcolo valori, spedizione mail agli utenti con l'elenco delle ultime novità, o anche operazioni cui gli utenti non sono autorizzati. Ad esempio, nella app prenotazione sale, col comando "Rinuncia" l'Utente richiedente rinuncia all'Assegnazione creata da un Gestore, ma non può eliminarla direttamente, perché non ha l'autorizzazione di eliminare Assegnazioni: il comando "Rinuncia" attiva quindi una procedura, eseguita da Drupal coi privilegi necessari, che elimina l'Assegnazione al posto dell'Utente.
A questo scopo disegneremo procedure ECA (Event - Condition - Action), che istruiscono Drupal su cosa fare quando accade quell'evento. Le ECA sono forse la cosa che si avvicina di più alla programmazione in Drupal, ma la loro configurazione non richiede la conoscenza di un linguaggio di programmazione e riusa tutti gli strumenti Drupal che nel frattempo avrai imparato a conoscere. Ad esempio, nella app prenotazione sale disegneremo una procedura ECA "Rinuncia" che, attivata dal click dell'Utente sul comando omonimo nella pagina "Assegnazione", ordina a Drupal di eliminare quell'Assegnazione, superando così i limiti delle Autorizzazioni dell'Utente.
Qualche altro esempio
Nelle Guide che seguono, applicheremo questo metodo ad un paio di esempi, il primo molto semplice e l'altro più complesso come evoluzione del primo:
- Miei Libri: una app di uso personale per gestire la tua biblioteca e i prestiti agli amici
- Prestiti tra Vicini: una app per gestire i prestiti di oggetti tra vicini