********************* Gestione delle classi ********************* Premessa -------- Per una gestione ordinata delle home si consiglia di organizzare l'albero delle home separando secondo la gerarchia: - plesso o ordine di scuola; - docenti o alunni; - classe (solo per gli alunni). Ad esempio le home dei docenti di una scuola media potranno essere in:: /home/media/docenti/ Gli alunni di una classe della primaria (poniamo 2c) saranno invece ad esempio in:: /home/primaria/alunni/classe-2c-ele Per facilitare la gestione delle classi, come ad esempio eliminare agevolmente le classi in uscita, si raccomanda di attribuire un **gruppo secondario** corrispondente. Nel caso precedente gli alunni apparterrebbero quindi al gruppo 2c-ele. Naturalmente si possono scegliere denominazioni di classi e gruppi diversi, purchè siano coerenti ed omogenee nello stesso plesso. L'esecuzione dello script prevede che, come auspicabile, tutti gli alunni di uno stesso plesso appartengano allo stesso **gruppo primario**. Diversamente bisognerà adattarlo alla situazione specifica o lanciarlo, ad esempio, per gruppi più piccoli. Spostamento delle classi da un anno all'altro ============================================= Lo script --------- L'anno successivo chiaramente le classi ed i gruppi cambieranno (ad esempio la classe **classe-2c-ele** diventerà **classe-3c-ele** ed il gruppo **2c-ele** diventerà **3c-ele**. La procedura di spostamento viene affidata ad uno script e richiede solo una particolare attenzione nel predisporre i due file csv letti dallo script stesso. Ovviamente si raccomanda di analizzare bene lo script per capire esattamente quello che esegue. In caso di dubbi rivolgersi a info@fuss.bz.it:: #! /bin/bash # Creiamo innanzitutto una copia di ldap # LDAP save slapcat -l ldap-dump.ldif ### LDAP restore in caso di problemi #systemctl stop slapd #echo "Restoring LDAP" #rm -rf /var/lib/ldap/* #slapadd < $BASE/ldap-dump.ldif #chown openldap:openldap /var/lib/ldap/* #systemctl start slapd # Decommentare le seguenti due righe e si commenti la successiva se # si intende procedere in modo interattivo #echo "Qual è il gruppo primario degli utenti da spostare?" #read GRUPPO_PRIMARIO #Sostituire ad alunni-ele il gruppo primario degli alunni delle # classi da spostare GRUPPO_PRIMARIO=alunni-ele echo "Gruppo primario: $GRUPPO_PRIMARIO" MEMBRI=`members -p $GRUPPO_PRIMARIO` echo "Membri: $MEMBRI" # Nella seguente parte dello script viene letto il file csv con il # nome vecchio e quello nuovo della classe. Le classi in uscita # vengono spostate in classi inesistenti (ad esempio IV media, VI # elementare o superiore) # Viene effettuato un controllo per evitare che una classe # sovrascriva l'altra se il csv è stato elaborato male, ma si rischia # di spostare solo una parte delle classi. # In questo caso è preferibile ripristinare la situazione iniziale, # sistemare il file csv e riclanciare lo script. while IFS=, read -r OLDHOME NEWHOME do if [ ! -d "$NEWHOME" ] then echo $NEWHOME mv $OLDHOME $NEWHOME else echo "Controlla l'ordine delle classi nel csv!" exit fi done < classi_mapping.csv # Con il codice seguente si effettua lo stesso spostamento delle # classi nell'albero ldap; in caso di errori si esegua il restore di # ldap commentato ad inizio script declare -A classi; while IFS=, read -r OLDHOME NEWHOME ; do classi[$OLDHOME]=$NEWHOME ; done < classi_mapping.csv for i in `members -p $GRUPPO_PRIMARIO` do home=`smbldap-usershow $i |grep homeDirectory|awk '{print $2}'` echo $home home_tr=${home/"/"$i/} echo $home_tr home_mod=${classi[$home_tr]} echo $home_mod smbldap-usermod -d $home_mod"/"$i $i done # Infine, se esistono gruppi_classe, col seguente comando è possibile # aggiornarli da un anno all'altro leggendo i dati da un csv. # !!! Attenzione!!! Per rinominare un gruppo è necessario che il # nuovo gruppo non esista già, per cui il file csv va eventualmente # preparato con numeri decrescenti dall'alto in basso! while IFS=, read -r OLDGROUP NEWGROUP ; do smbldap-groupmod -n $NEWGROUP $OLDGROUP; done < group_mapping.csv I file csv ---------- Ecco un esempio di csv (**classi_mapping.csv**) per lo spostamento delle classi. Come si può vedere il csv è formato da due colonne separate da una virgola: - la colonna di sinistra contiene le classi "vecchie" e quella di destra le classi "nuove"; - si noti che le classi sono in ordine decrescente dal basso all'alto; - si presti particolare cura nella preparazione del csv:: /home/primaria/alunni/classe-5b-ele,/home/primaria/alunni/classe-6b-ele /home/primaria/alunni/classe-5a-ele,/home/primaria/alunni/classe-6a-ele /home/primaria/alunni/classe-4b-ele,/home/primaria/alunni/classe-5b-ele /home/primaria/alunni/classe-4a-ele,/home/primaria/alunni/classe-5a-ele /home/primaria/alunni/classe-3b-ele,/home/primaria/alunni/classe-4b-ele /home/primaria/alunni/classe-3a-ele,/home/primaria/alunni/classe-4a-ele /home/primaria/alunni/classe-2b-ele,/home/primaria/alunni/classe-3b-ele /home/primaria/alunni/classe-2a-ele,/home/primaria/alunni/classe-3a-ele /home/primaria/alunni/classe-1b-ele,/home/primaria/alunni/classe-2b-ele /home/primaria/alunni/classe-1a-ele,/home/primaria/alunni/classe-2a-ele Il seguente file (**group_mapping.csv**) è un esempio di csv per lo spostamento degli alunni delle classi da un gruppo a quello successivo. Viene letto nella stessa maniera di quello precedente. Se il gruppo nuovo esiste già, lo spostamento non avviene, per cui si deve sempre procedere in ordine decrescente dall'alto al basso, accertandosi che i gruppi più alti (nel nostro caso **classe-6...**) non esistano, ed eventualmente eliminarli. :: 5b-ele,6b-ele 5a-ele,6a-ele 4b-ele,5b-ele 4a-ele,5a-ele 3b-ele,4b-ele 3a-ele,4a-ele 2b-ele,3b-ele 2a-ele,3a-ele 1b-ele,2b-ele 1a-ele,2a-ele Conclusioni ----------- La procedura descritta è necessaria per mantenere in ordine la disposizione delle classi come illustrata, ma può essere utile anche per sanare alberi delle home poco ordinati o nomi poco chiari per alunni e docenti, come **2019a** per indicare la **classe-4a**. Il tutto richiede poco tempo e solo una certa attenzione, ribadiamo, nella predisposizione dei file csv.