Viste personalizzate per alunni

12 contenuti / 0 new
Ultimo contenuto
Viste personalizzate per alunni

Salve a tutti, ho cercato in lungo e in largo nei precedenti post ma non ho trovato una soluzione per la mia necessità.
Sono un insegnante e mi sto creando un sito in cui mettere lezioni, info varie per gli studenti... Tra le varie funzioni, una in particolare: voglio dare a ciascun alunno un account al fine di avere una sua area studente dedicata, in essa andrò ad annotare le varie informazioni a lui relative. Ho creato un tipo di contenuto "annotazioni studente" con campi "Alunno" (riferimento termine tassonomia, ho creato un vocabolario "classe" e come termini i nomi degli alunni della classe), "Data" (normalissimo pop-up calendar) e "Annotazione" (semplice campo di testo in cui annoto sinteticamente l'evento da registrare, es. "Assente", oppure "Interrogato, voto 7"...). Premesso che su configurazione/impostazioni profilo/gestione campi ho aggiunto un campo di riferimento termine tassonomia associato al vocabolario "Classe", in pratica quando andrò a creare l'account per l'alunno "Tizio", assocerò a quell'account il termine di tassonomia "Tizio". L'idea è di inserire in ciascuna pagina utente una view a tabella che elenchi tutti i contenuti di tipo "Annotazioni studente", filtrando in modo tale che visualizzi solo quelli dell'alunno in questione. In pratica l'alunno "Tizio", accedendo alla sua area dedicata, avrà un elenco delle annotazioni riferite a "Tizio", e non vedrà quelle degli altri suoi compagni. Comprenderete bene l'importanza di fare un buon lavoro anche per salvaguardare la privacy degli alunni, dal momento che nelle annotazioni possono finirci dati sensibili (voti, eventuali note disciplinari, ecc ecc... tenete presente che la mia intenzione è di dare la password anche ai genitori affinché possano monitorare l'andamento del figlio, quindi annoterò anche eventuali informazioni utili alla famiglia, la privacy è di vitale importanza). A tale scopo ho le seguenti difficoltà:

1) Come creare una vista che automaticamente faccia comparire in ciascun profilo utente soltanto i contenuti associati a quell'utente? Creare una vista per ciascun alunno è fuori discussione, ne ho troppi (dovrei creare 81 viste!!).

2) Come posso fare per evitare che i contenuti non siano visualizzabili neppure con il link? Mi spiego: gli account alunni sono tutti creati con un apposito ruolo "Studente", io creando il tipo di contenuto "Annotazioni studente" l'ho reso visualizzabile per il solo ruolo "Studente", ma così facendo se "Tizio" scopre il link di un contenuto associato a "Caio", visualizzerebbe quella pagina. Come posso fare per impedirlo? L'unica idea che mi viene in mente che TEORICAMENTE funzionerebbe sarebbe creare un ruolo per ciascun utente, ma anche questo (come per le viste al punto 1) è impraticabile: dovrei creare ben 81 ruoli, diventa un manicomio già solo la pagina di gestione dei permessi.

L'idea delle viste è per evitare di dover andare io a modificare il singolo profilo utente: al momento attuale io ho una normale tabella nel campo body di ciascun profilo, entro manualmente nel profilo, modifico e scrivo le annotazioni... però così ci vuole una vita!!! Tenete presente che io ogni giorno avrei almeno una cinquantina di annotazioni da aggiungere, entrare e uscire un profilo alla volta richiederebbe troppo tempo... mentre invece velocizzo notevolmente se posso creare un tipo di contenuto "Annotazione studente" in cui scrivo l'annotazione associandola all'alunno, dopodiché la vista si occuperà di "smistare" quel contenuto nel profilo utente corrispondente. Così creo annotazioni a catena di montaggio, una dietro l'altra, senza dover fare quel "entra-esci" mille volte da un profilo ad un altro manualmente. Mi basterebbe fare "Aggiungi contenuto/Annotazione studente" (o meglio ancora me lo metto nelle scorciatoie) e in pochi minuti le ho caricate tutte.

Vi chiedo scusa per la mia solita lungaggine, spero di essere riuscito ad esprimere chiaramente la necessità e spero che qualcuno possa aiutarmi. Grazie fin da ora per la pazienza e l'aiuto.
Nicola

Drupal Version:

Premesso che non hai specificato quale sia il tuo grado di conoscenza, le richieste che fai, denotano, un fatto: vuoi creare qualcosa di complesso, ma ignori molti dettagli tecnici sul come creare un'area riservata.
1 Ti servirà conoscere moduli come node access, content access , o organic groups. per creare nodi e viste private.
Lo studio e l'applicazione di questi moduli, richiede un certo tempo ma si può fare, specialmente con i primi due.
2 Io spero che dal punto di vista della privacy , visto che vorrai caricare dati sensibili tu abbia messo in preventivo che se il sito sara su internet, per garantire un certo grado di sicurezza, dovrai comprare un host adeguato, che magari abbia qualche certificato SSL o altri strumenti.
Non è consigliabile usare host gratuiti, per certe applicazioni.

Come ti ha gia' fatto notare Tommy NON sottovalutare il discorso privacy, sia perche' sono dati sensibili sia perchè probabilmente si tratta di minori

potresti provare openatrium http://www.openatrium.com/ ...
E' una disto di Drupal e fa gia' un sacco di cose tra quelle che richiedi
ci ho giocato un po' ed è veramente interessante: un paio di critiche: è ghiotto di risorse (RAM e CPU) ed è piuttosto complesso metterci le mani per eventuali personalizzazioni

ciao

Beh node access e content access li conosco discretamente e infatti sono già in uso nel sito, da quel punto di vista sono già riuscito a creare autonomamente e senza difficoltà tipo di contenuti privati accessibili soltanto a determinati ruoli. Non uso un host gratuito bensì un semidedicato netsons. Sto riponendo massima attenzione alla privacy dei miei alunni, ho utilizzato anche trigger, rules e vari altri moduli per monitorare gli accessi e ricevere notifiche in tempo reale nel caso in cui utenti non autorizzati o anonimi tentino di accedere a determinate categorie di nodi ecc ecc, sto facendo del mio meglio da questo punto di vista, ho chiesto chiarimenti sulle viste proprio perché per me è prioritario il rispetto dei miei studenti, perciò SE riesco a fare delle viste filtrate per singolo utente bene, se non ci riesco, piuttosto che rischiare di compromettere la privacy dei ragazzi, caricherei manualmente le informazioni nel body di ogni singolo account, uno alla volta. Ci metterei cent'anni ogni giorno anche solo per annotare le assenze, ma almeno sarebbe un sistema più sicuro. Per etica professionale che mi autoimpongo, la sicurezza di un mio alunno viene BEN prima della mia comodità. La difficoltà è solo per quanto riguarda le viste, io finora sono stato in grado di restringere la visualizzazione per ruoli, ad esempio ho creato una vista "diario di classe" in cui annoto ogni giorno le attività svolte (quindi una vista che non contiene dati sensibili, serve solo ad elencare in tale data cosa ho fatto, è utile per chi era assente), ne ho creata una per ogni classe. Ciascuna di queste viste sarà visibile solo dal ruolo utente corrispondente. Cioè: vista "diario di classe 4°C", visualizzazione ristretta solo al ruolo "Studente 4°C", e ovviamente agli alunni di quella classe creo l'account con quel ruolo, e così via. Ogni alunno vedrà quindi solo le viste relative alla propria classe, e non alle altre classi (anche se non ci sarebbe comunque niente di scorretto, non essendoci in quelle viste informazioni sensibili). Il discorso cambia per le viste in cui ci sono le annotazioni riferite al singolo studente. Io vorrei creare un tipo di contenuto "Annotazione studente" in cui c'è il campo annotazione, il campo data e un campo di tassonomia che mi consenta di assegnare quel contenuto ad un singolo studente. Dopodiché la vista contenuta all'interno dell'account studente elencherà SOLO i contenuti di tipo "Annotazione studente" associati a quell'account. E qui ho il mio problema: non riesco a creare questa "associazione" del contenuto all'account, non riesco nella vista "annotazioni studente" che andrebbe messa in ciascun account a filtrare in modo tale che l'uno non veda i contenuti associati agli account di altri alunni. Oltretutto devo anche assicurarmi che quel contenuto associato a "Tizio" non solo non compaia nella vista nell'account di "Caio", ma che "Caio" non possa visualizzare quel contenuto neppure se ne conoscesse il link. Come posso fare senza dover creare un tipo di contenuto ed un ruolo per ciascuno studente, che sarebbe ovviamente insensato e proibitivo? Come avrete già compreso, non sono un professionista. Me la cavo un pochino ma sono perfettamente consapevole che le mie conoscenze a riguardo sono ancora piuttosto modeste.

Con content access si può impostare un ruolo per cui un tipo di contenuto può essere creato visto o modificato solo dall'utente . In questo caso l'alunno. Si potrebbe impostare la creazione del contenuto con regole, alla creazione dell'utente. Poi con Field collection o entity reference allegare a questo nodi ulteriori.
Altrimenti rivedere tutto e usare organic groups basando i gruppi sugli utenti rendendoli privati.
Poi il gruppo classe basato sui nodi. Questo permetterebbe una struttura gerarchica anche nei gruppi. Ma non è una strada semplice.

Quello che richiedi non è semplice ma nemmeno troppo complicato. Ti spiego per punti una analisi del progetto secondo me:

1 - Per visualizzare i dati dell'utente e solamente quelli collegati a lui puoi tranquillamente usare le viste con il filtro contestuale impostato sul UID e farlo prendere in automatico dal sistema. Per ogni tipo di contenuto che utilizzi e che può essere collegato a 1 o piu utenti inserisci un campo user reference che utilizzerai per dare i permessi di visualizzazione del nodo solamente ad alcuni utenti tramite il seguente modulo
https://www.drupal.org/project/nodeaccess_userreference

2 - Se non vuoi usare organic group per generare le classi puoi inserire per ogni utente un campo term reference che punterà ad un vocabolario di tassonomia dove andrai ad inserire le classi. Associ poi ogni utente alla propria classe. Tramite il modulo Taxonomy access control riesci poi a gestire la visualizzazione dei contenuti solamente per quelli in cui il nodo presenta lo stesso collegamente al termine di tassonomia dell'utente
https://www.drupal.org/project/taxonomy_access

Con questi 2 semplici sistemi risolvi tutte le problematiche da te sollevate ovvero la visualizzazione di contenuti per singolo utente e la visualizzazione legata al conoscere il link del contenuto.

Grazie mille fin da ora, domani dopo scuola ci provo e ti faccio sapere, ora sono troppo stanco combinerei sicuramente qualche macello ;-) Leggendo le tue istruzioni non mi sembra complicato, come prima impressione mi sembra alla mia portata :-) Ti aggiorno domani, per ora un enorme grazie! :)

RISOLTO!!! Non ho avuto bisogno di installare questi moduli, ora ti spiego come ho fatto. Premesso che ho cominciato partendo dalle tue istruzioni, quando sono andato a scaricare nodeaccess_userreference mi sono accorto (dall'immagine abbinata) che era similissimo al modulo access control che io ho già installato. Temendo quindi conflitti tra i due moduli ho preferito quindi prima verificare che access control potesse andare ugualmente bene. Premesso anche che già nei giorni scorsi avevo creato un riferimento termine per ogni utente che puntasse ad un vocabolario di tassonomia dove avevo inserito le classi, come mi illustravi tu nel punto 2 delle tue istruzioni. Ecco il procedimento che mi sono ritrovato direi "spontaneamente" a fare:

1) Nella gestione access control del mio tipo di contenuto "annotazioni studente" ho tolto ovviamente i permessi di visualizzazione per gli anonimi, ma ho anche tolto i permessi "view any content", lasciando soltanto il permesso "view own content" per il ruolo studente. Dopodiché ho attivato la spunta sull'opzione "Enable per content node access control setting" in modo tale da poter personalizzare su ogni singolo nodo del contenuto le impostazioni di accesso.
2) Creando un contenuto di quel tipo, dopo averlo salvato posso andare sull'access control del singolo nodo, e gli aggiungo la restrizione Grant view access selezionando solo l'utente in questione (perciò se il contenuto riguarda l'alunno "Tizio", inserisco soltanto l'utente "Tizio".

FINE! A questo punto non ho dovuto più fare altro: ho creato la vista normalissima, senza bisogno di contextual filter ne niente, semplicemente è una vista che di per se elenca tutti i contenuti di quel tipo di contenuto. Il singolo utente ci vede soltanto quei tipi di contenuto per i quali gode del permesso Grant view access. Ho fatto dei test, ho creato un nodo associato a "Tizio" (con grant view access a "Tizio") e un altro nodo associato a "Caio" (con grant view access a "Caio"). Se visualizzo la vista dal mio account admin, vedo in elenco entrambi i nodi. Se entro con l'account di "Tizio" vedo in elenco soltanto il nodo di Tizio, analogamente entrando con l'account di "Caio" ho visualizzato solo l'account di "Caio". Ciò sia dall'elenco della vista, sia provando ad accedere incollando il link nella barra. Quando ho effettuato l'accesso come "Tizio", inserendo il link del nodo associato a "Caio" mi ha restituito accesso negato, e viceversa. Ovviamente restituisce accesso negato per entrambi i nodi quando provo ad inserire il link senza aver effettuato alcun login.
Alla fine insomma l'unico modulo che mi è servito è stato access control. Che te ne pare di questa soluzione? Mi dispiace di aver disturbato per niente qui sul forum, non so perché non mi sia venuto in mente prima di fare così, era una soluzione perfettamente alla mia portata e del tutto realizzabile con gli strumenti che già avevo, non ho dovuto installare nulla di nuovo. Comunque grazie infinite lo stesso per il tuo supporto :-)

P.S. - Ora ti chiedo un'altra cosa invece: nella vista che ho creato, c'è una colonna per il campo "Alunno". Vorrei fare in modo che quella colonna venga visualizzata solo dall'account administrator, il motivo è semplice: l'alunno vedrà questa vista come blocco all'interno della sua pagina user, quindi è superfluo che egli visualizzi la colonna alunno, in quanto vedrà elencate soltanto le annotazioni studente che lo riguardano, perciò per ogni voce elencata ci sarebbe sempre il suo nome... mentre per me invece quella colonna è indispensabile, perché io nella vista vedrò elencate le annotazioni di tutti gli alunni, perciò senza quella colonna sarebbe un manicomio per me. Esiste un modo per assegnare dei permessi alle singole colonne della vista a tabella? Sto cercando un modulo che faccia al caso mio ma non sto trovando niente :(

P.P.S. - Stavo pensando, se non esiste un modo per dare un permesso specifico ad una singola colonna della vista, che magari potrei aggirare l'ostacolo in questo modo: creo un clone della vista. Praticamente nella vista1 tolgo la colonna del nome alunno (cioè quella che va come blocco nella pagina user degli alunni), mentre nella vista2 clonata lascio la colonna alunno e limito i permessi della vista solo all'amministratore. In pratica io utilizzo quella vista2 quando mi serve consultarla e avere una visione d'insieme. Che ne pensi? Potrebbe essere una soluzione funzionale o sarebbe una scorciatoia poco ortodossa?

Se tu Amministratore, usi la vista come Pagina, e non come blocco, puoi nascondere la visualizzazione della colonna alunno solo alla visualizzazione "Blocco", scegliendo dalla finestra di dialogo che appare in quasi tutti i setaggi di views ( In questo caso sulla impostazione del campo alunno) " Solo per questa visualizzazione" Al posto di " Tutte la Visualizzazioni".
Così eviti di creare molte viste, simili.

Un consiglio sulla privacy è d'obligo, per qunto riguarda i file, che non vengono adeguatamente protetti con le impostazioni classiche di Drupal, e che non beneficiano delle restrizioni di accesso, date dai moduli sopracitati.
Se dovessi decidere di usare campi file, per allegare documenti personali,
sposta la cartella dei file Privati sotto la Root fuori dalla cartella Drupal, e assegna il nuovo percorso .
In questo modo, anche conoscendo il link del file, non riuscirai a scaricarlo.

Per maggiore sicurezza, e se dovrai gestire molti file c'è pure Filedepot, ma puoi benissimo non usarlo.

Spero che tu possa partecipare attivamente al forum, e ti ringrazio di aver condiviso le soluzioni che hai tovato, serviranno da spunto a tutti coloro che avranno lo stesso problema.

Ciao, ti ringrazio moltissimo per la tua dritta! Non mi ero accorto di poter dare impostazioni diversa al blocco rispetto alla pagina, ieri ho creato la vista clonata ma a questo punto penso proprio che mi semplificherò le cose facendo come mi hai consigliato ;-)

Per quanto riguarda la privacy, nuovamente ti ringrazio! Io per ora non stavo usando i campi file nel tipo di contenuto per le annotazioni studente proprio per questo motivo dei permessi. Però se esiste un modo per vincolare anche i file a restrizioni analoghe a quelle impostate al tipo di contenuto, beh potrebbe tornarmi molto utile!! Ad esempio, potrei aggiungere un campo file al tipo di contenuto annotazioni studente in modo tale che nella vista possa esserci un file allegato all'annotazione. Ad esempio, se aggiungo un'annotazione "Compito in classe", potrei allegare la scansione del compito. L'alunno così nella vista all'interno della sua area dedicata si troverebbe elencato, oltre a data, materia, tipo di annotazione (Compito in classe) e voto, anche il file. Potrebbe essergli utile nello studio per andare a rivedere gli errori che ha fatto, e poi sarebbe molto più trasparente da parte mia mettere a disposizione dell'alunno copia del suo elaborato. Gli consento una sorta di "accesso agli atti" senza che debba chiederlo per le vie tradizionali. Io per ora coi ragazzi mi sto regolando che se hanno bisogno di una copia del compito, gli do io un pdf con la scansione. Poterli mettere nella loro vista dedicata sarebbe sicuramente un'enorme comodità per me (anche se così mi auto-costringerei a scansionare TUTTI i compiti in classe, invece che soltanto quei pochi di chi me lo dovesse chiedere... però vabbè, sacrificio che potrei fare volentieri, questo ed altro pur di rendere loro un buon servizio).

Sono io che ringrazio tutti voi qui sul forum, mi fa piacere se per una volta ho potuto dare anche io un contributo, in genere chiedo aiuto ma raramente ho l'occasione di poterne offrire (per la mia limitata esperienza, non certo per menefreghismo :-) )