Viste con combinazioni di Filtri

Filtri in AND e OR logico tra loro. Proteggere le informazioni con le EVA
Aggiornata il:

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: 

  1. nascondere tutti i Campi a tutti gli Utenti e
  2. 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 richiestoSe l'Utente è il Richiedente l'AttrezzoSe è 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 EVAvai 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 RichiestaNella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Richiesta"
passa alla EVA l'identificativo della RichiestaNella sezione Filtri contestuali aggiungi ID - Contenuto
identifica l'Attrezzo richiesto, con la relazione Richiesta → AttrezzoNella 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 → AutoreNella 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 inversoNella 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 ProprietarioNella 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:

  • A non soddisfatto, B non soddisfatto: A AND B non soddisfatto
  • A non soddisfatto, B soddisfatto: A AND B non soddisfatto
  • A soddisfatto, B non soddisfatto: A AND B non soddisfatto
  • A soddisfatto, B soddisfatto: A AND B soddisfatto

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:

  • A non soddisfatto, B non soddisfatto: A OR B non soddisfatto
  • A non soddisfatto, B soddisfatto: A OR B soddisfatto
  • A soddisfatto, B non soddisfatto: A OR B soddisfatto
  • A soddisfatto, B soddisfatto: A OR B soddisfatto

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 EVAvai 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 RichiestaNella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Richiesta"
passa alla EVA l'identificativo della RichiestaNella sezione Filtri contestuali aggiungi ID - Contenuto
identifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autoreidentifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autore
identifica l'Attrezzo richiesto, con la relazione Richiesta → AttrezzoNella 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 → AutoreNella 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 RichiedenteNella 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 allegatiNella sezione Campi aggiungi Utente - Contenuto - Nome utente dell'autore del contenuto. Aggiungi Creato il. Testo e Allegati.  
ordina i Messaggi per data e oraNella 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 comandovai in Struttura - Tipi di contenuto - Messaggio - Gestisci Campi - Richiesta - Modifica. Nella sezione Entity Prepopulate scrivi il Token [current-page:query:richiesta]
crea la EVAvai 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 RichiestaNella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Richiesta"
passa alla EVA l'identificativo della RichiestaNella sezione Filtri contestuali aggiungi ID - Contenuto
identifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autoreidentifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autore
identifica l'Attrezzo richiesto, con la relazione Richiesta → AttrezzoNella 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 → AutoreNella 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 RichiedenteNella 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 UtentiIn Struttura - Tipi di contenuto - Messaggio - Visualizzazione sposta tutti i Campi sotto Nascosto
Mostra i Campi ai soli Proprietario e RichiedenteCrea 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".