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.