In questa Guida proseguiamo la costruzione della app di esempio, concentrandoci per motivi didattici sulla pagina "Richiesta" che mostra le informazioni relativa ad una Richiesta, all'eventuale Prestito attivato in risposta ad essa ed i Messaggi scambiati tra Richiedente e Proprietario dell'Attrezzo. Con le stesse tecniche qui spiegate si può proteggere anche la pagina "Messaggio" e la pagina "Prestito". Queste pagine hanno in comune il fatto che devono mostrare i loro contenuti sia al Richiedente sia al Proprietario, escludendo però tutti gli altri Utenti.

Usare le Viste per proteggere le informazioni
Rinviando ad una futura Guida soluzioni più sofisticate per la protezione delle informazioni, per gli scopi della app di esempio nelle pagine Richiesta, Messaggio e Prestito è sufficiente:
- nascondere tutti i Campi a tutti gli Utenti e
- mostrarli solo al Richiedente ed al Proprietario, grazie a Viste EVA.
Come abbiamo già visto, per nascondere i Campi della Richiesta a tutti gli Utenti:
- vai in Struttura - Tipi di contenuto - Richiesta - Gestione visualizzazione
- trascina tutti i Campi sotto Disattivati.
- Salva
Dopo questa operazione, qualunque Utente acceda alla pagina di una qualunque Richiesta ne vedrà solo il titolo, che di per sé non "svela" nulla sul contenuto della Richiesta.
La pagina "Richiesta" è formata da un insieme di EVA che restituiscono queste informazioni ai diversi Utenti:
| Se l'Utente è il Proprietario dell'Attrezzo richiesto | Se l'Utente è il Richiedente l'Attrezzo | Se è un altro Utente |
| Comandi "Cruscotto" e "Presta l'Attrezzo" (EVA Comandi Richiesta Proprietario) | Comando "Cruscotto" (EVA Comandi Richiesta Richiedente") | (nulla) |
| Dati della Richiesta, del Richiedente, dell'Attrezzo richiesto, dell'eventuale Prestito e del Proprietario dell'Attrezzo (EVA Dati Richiesta) | ||
| Messaggi scambiati tra Richiedente e Proprietario sulla Richiesta (EVA Messaggi Richiesta) | ||
Comando "Scrivi Messaggio" (EVA Comandi Messaggi Richiesta) | ||
EVA COMANDI RICHIESTA PROPRIETARIO
La EVA "Comandi Richiesta Proprietario", che mostra al Proprietario i comandi "Cruscotto" e "Presta l'Attrezzo" è facilmente costruibile con le tecniche che abbiamo già visto nelle Guide precedente:
| crea la EVA | vai in Struttura - Viste - Aggiungi nuova vista; scegli il nome della Vista ("Comandi Richiesta Proprietario"); in Mostra scegli contenuto di tipo "Richiesta"; scegli di creare una Pagina e di mostrare il risultato come Elenco non formattato di campi. Nella sezione Visualizzazioni cliccare Aggiungi - EVA. |
| aggancia la EVA alla pagina della Richiesta | Nella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Richiesta" |
| passa alla EVA l'identificativo della Richiesta | Nella sezione Filtri contestuali aggiungi ID - Contenuto |
| identifica l'Attrezzo richiesto, con la relazione Richiesta → Attrezzo | Nella sezione Relazioni aggiungi Contenuto referenziato da field_attrezzo- Contenuto - Appare in: richiesta e rinomina come "attrezzo" |
| identifica il Proprietario dell'Attrezzo, con la relazione Attrezzo → Autore | Nella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto, come Relazione seleziona "attrezzo" e rinomina come "proprietario" |
| identifica l'eventuale Prestito effettuato sulla Richiesta, con la relazione Prestito → Richiesta, usata in senso inverso | Nella sezione Relazioni aggiungi Contenuto che usa field_richiesta - Contenuto - Relate each Contenuto with a field_richiesta set to the content item e rinomina come "prestito" |
| limita la visualizzazione del comando al Proprietario | Nella sezione Criteri del Filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si |
| mostra il comando "Presta questo attrezzo" | Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Presta questo Attrezzo", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/node/add/prestito?richiesta={{ raw_arguments.nid }}" e come Classe del link digita "btn btn-primary" |
| mostra il comando "Cruscotto" | Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Cruscotto", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/cruscotto" e come Classe del link digita "btn btn-primary" |
In realtà, così costruita, la Vista mostra il comando "Presta questo Attrezzo" anche se sulla Richiesta è già stato aperto un Prestito. Per motivi didattici sistemeremo questo aspetto nella prossima Guida.
EVA COMANDI RICHIESTA PROPRIETARIO
Questa Vista è costruibile come variazione della precedente, eliminando il comando "Presta questo Attrezzo" e filtrando per Richiedente e non per Proprietario.
Combinazioni di Filtri
EVA DATI RICHIESTA
La EVA "Dati Richiesta" che mostra i dati della Richiesta come Flipped Table è facilmente costruibile in analogia alla EVA "Dati Attrezzo" che abbiamo già visto. Rispetto alle Viste fin qui esaminate, presenta però una complicazione, perché deve essere vista sia dal Richiedente sia dal Proprietario e solo da loro.
Se ci limitassimo ad aggiungere alla EVA un Filtro che la limita al Richiedente ed un Filtro che la limita al Proprietario, in realtà nessuno vedrebbe la EVA, perché i Filtri sono per default considerati in AND logico tra loro, quindi il contenuto della Vista sarebbe visto da un ipotetico Utente che fosse contemporaneamente Richiedente e Proprietario. Ma nella nostra app il Richiedente non coincide mai col Proprietario.
Perché la EVA funzioni col Richiedente e col Proprietario escludendo tutti gli altri Utenti, i due Filtri devono essere posti in OR logico tra loro, in modo che le informazioni siano mostrate se almeno uno dei due Filtri è soddisfatto.
Cosa significa AND e OR ? Dati due Filtri A e B, la loro combinazione A AND B è soddisfatta solo se entrambi sono soddisfatti. Quindi:
Nel nostro esempio, la combinazione "Proprietario=si" AND "Richiedente=si" non è mai soddisfatta perché non c'è nessun Utente che sia Proprietario e Richiedente. La combinazione A OR B è soddisfatta se almeno uno dei Filtri è soddisfatto. Quindi:
Nel nostro esempio, la combinazione "Proprietario=si" OR "Richiedente=si" è soddisfatta se l'Utente è il Proprietario oppure se l'Utente è il Richiedente. Non è soddisfatta per tutti gli Utenti che non sono né il Proprietario né il Richiedente. |
Ecco come mettere due Filtri in OR tra loro nella sezione Criteri del Filtro:
- aggiungi il Filtro "Proprietario=si" sull'Utente corrente
- aggiungi il Filtro "Richiedente=si" sull'Utente corrente
- clicca And/Or Arrange

- clicca Crea un nuovo gruppo di filtri

- per il nuovo gruppo di filtri seleziona come operatore O (=OR)

- trascina i due Filtri nel nuovo gruppo

- clicca Applica. Controlla che i due Filtri siano raggruppati a parte, in OR tra loro ed in AND con gli altri Filtri:

EVA MESSAGGI RICHIESTA
Questi Filtri in OR servono anche nella EVA "Messaggi Richiesta". Questa Vista gestisce i Messaggi scambiati tra Proprietario e Richiedente sulla Richiesta. Come la precedente, anche questa Vista deve essere mostrata al Richiedente ed al Proprietario e nascosta a tutti gli altri Utenti.
APPROFONDIMENTO: Per la discussione tra Utenti, solitamente in Drupal si utilizzano i Commenti. I Commenti sono Entità associate ad una Entità oggetto della discussione. Nel nostro caso, per consentire a Proprietario e Richiedente di discutere i dettagli relativi ad una Richiesta, basterebbe aggiungere al Tipo di Contenuto "Richiesta" un Campo di tipo "Commento" e magicamente nella pagina di ogni Richiesta apparirebbero i comandi per aggiungervi un commento, rispondere ad un commento precedente e l'elenco dei commenti finora arrivati. Nella app di esempio non sfruttiamo questa soluzione, perché qualunque Utente che vede la Richiesta potrebbe anche pubblicarvi Commenti, mentre noi vogliamo che la discussione sia riservata al Proprietario ed al Richiedente. E fin qui non abbiamo attivato meccanismi di protezione avanzata delle Entità, ma ci siamo limitati per semplicità a nascondere agli Utenti diversi dal Proprietario e dal Richiedente i Campi della Richiesta, ma non la Richiesta in sé. Poiché la discussione tra Proprietario e Richiedente è breve e semplice, riguardando presumibilmente solo i dettagli sul periodo di prestito e sulle modalità di consegna e restituzione, possiamo realizzarla con un Tipo di Contenuto "Messaggio", anch'esso protetto da sguardi altrui con lo stesso metodo usato per Richiesta e Prestito. |
Ecco come costruirla:
| crea la EVA | vai in Struttura - Viste - Aggiungi nuova vista; scegli il nome della Vista ("Messaggi Richiesta"); in Mostra scegli contenuto di tipo "Messaggio"; scegli di creare una Pagina e di mostrare il risultato come Elenco non formattato di campi. Nella sezione Visualizzazioni cliccare Aggiungi - EVA. |
| aggancia la EVA alla pagina della Richiesta | Nella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Richiesta" |
| passa alla EVA l'identificativo della Richiesta | Nella sezione Filtri contestuali aggiungi ID - Contenuto |
| identifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autore | identifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autore |
| identifica l'Attrezzo richiesto, con la relazione Richiesta → Attrezzo | Nella sezione Relazioni aggiungi Contenuto referenziato da field_attrezzo- Contenuto - Appare in: richiesta e rinomina come "attrezzo" |
| identifica il Proprietario dell'Attrezzo, con la relazione Attrezzo → Autore | Nella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto, come Relazione seleziona "attrezzo" e rinomina come "proprietario" |
| limita la visualizzazione dei Messaggi al Proprietario ed al Richiedente | Nella sezione Criteri del Filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si; aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "richiedente", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si. Metti in OR tra loro questi due Filtri, come spiegato sopra. |
| mostra per ogni Messaggio il nome del mittente, la data e ora dell'invio, il testo e gli eventuali allegati | Nella sezione Campi aggiungi Utente - Contenuto - Nome utente dell'autore del contenuto. Aggiungi Creato il. Testo e Allegati. |
| ordina i Messaggi per data e ora | Nella sezione Criteri di ordinamento aggiungi Creato il e seleziona l'ordinamento ascendente. |
EVA COMANDI MESSAGGI RICHIESTA
Questa Vista mostra nella pagina della Richiesta il comando "Scrivi Messaggio" solo al Proprietario ed al Richiedente. Questo comando non può essere aggiunto come un link nella sezione Piè di pagina della EVA "Messaggi Richiesta" perché, dovendo essere mostrato anche in assenza di Messaggi, verrebbe mostrato anche a Utenti diversi dal Proprietario e dal Richiedente. Questa EVA può essere facilmente costruita con le tecniche già viste:
| predisponi il nuovo Messaggio a ricevere l'identificativo della Richiesta dal comando | vai in Struttura - Tipi di contenuto - Messaggio - Gestisci Campi - Richiesta - Modifica. Nella sezione Entity Prepopulate scrivi il Token [current-page:query:richiesta] |
| crea la EVA | vai in Struttura - Viste - Aggiungi nuova vista; scegli il nome della Vista ("Comandi Messaggi Richiesta"); in Mostra scegli contenuto di tipo "Richiesta"; scegli di creare una Pagina e di mostrare il risultato come Elenco non formattato di campi. Nella sezione Visualizzazioni cliccare Aggiungi - EVA. |
| aggancia la EVA alla pagina della Richiesta | Nella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Richiesta" |
| passa alla EVA l'identificativo della Richiesta | Nella sezione Filtri contestuali aggiungi ID - Contenuto |
| identifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autore | identifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autore |
| identifica l'Attrezzo richiesto, con la relazione Richiesta → Attrezzo | Nella sezione Relazioni aggiungi Contenuto referenziato da field_attrezzo- Contenuto - Appare in: richiesta e rinomina come "attrezzo" |
| identifica il Proprietario dell'Attrezzo, con la relazione Attrezzo → Autore | Nella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto, come Relazione seleziona "attrezzo" e rinomina come "proprietario" |
| limita la visualizzazione dei Messaggi al Proprietario ed al Richiedente | Nella sezione Criteri del Filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si; aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "richiedente", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si. Metti in OR tra loro questi due Filtri, come spiegato sopra. |
| mostra il comando "Scrivi Messaggio" | Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Scrivi Messaggio", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/node/add/messaggio?richiesta={{ raw_arguments.nid }}" e come Classe del link digita "btn btn-primary" |
Per completare la gestione dei Prestiti e dei Messaggi, è necessario proteggere la pagina del singolo Messaggio dallo sguardo di Utenti diversi dal Proprietario e dal Richiedente come abbiamo fatto qui con la pagina della Richiesta:
| Nascondi i Campi del Messaggio a tutti gli Utenti | In Struttura - Tipi di contenuto - Messaggio - Visualizzazione sposta tutti i Campi sotto Nascosto |
| Mostra i Campi ai soli Proprietario e Richiedente | Crea una EVA 'Dati Messaggio" che mostra come Flipped Table i campi del Messaggio col filtro in OR su Proprietario e Richiedente. Il Campo "Richiesta" del Messaggio consente3 di tornare alla Richiesta. |
Le stesse attività devono essere applicate anche al Tipo di contenuto "Prestito".