Hallo, liebe Linuxmustler,
so, wie vielleicht bei Euch allen, war ich dank Corona auf einmal sehr als Moodle-Admin gefragt und habe mein externes Moodle (Vers. 3.32) aufgepimpt. Im Nu sollte nun die Schulstruktur abgebildet werden. Schade, dass es das gute alte enrollment-Plugin nicht mehr für diese Moodle-Version (einschl. PHP7.x) gibt.
Ich habe daher nach etwas Recherche ein tolles tool gefunden, mit dem man das scriptgesteuert machen kann. Damit habe ich in einem Rutsch Kategorien, globale Gruppen und Kurse angelegt. Dann habe ich alle SuS mithilfe der Sophomorix-Datei all-unix.csv und einem Script in die Gruppen einsortiert.
Das Vorgehen beschreibe ich hier jetzt für alle Interessenten:
- Zuerst installiert man moosh (=moodle-shell), eine Art Kommandozeile für Moodle.
Das geht entweder über die Paketverwaltung oder über git, Zweiteres hat bei mir (auch) funktioniert. Installationsanleitung hier:
Ich musste allerdings
composer.phar
statt
composer
eingeben, um zu installieren.
In der ersten Zeile der moosh.php habe ich aus
#!/usr/bin/env php
#!/usr/bin/env php7.1
gemacht, da mit meinem normalen PHP7.2 moosh nicht funktioniert.
Dann muss man generell sich als www-data anmelden, da dieser keine shell besitzt, muss dies beim su-Befehl temporär erzwungen werden:
cd /usr/share/moodle
su www-data -s /bin/bash
Nun muss nur noch die Datei all-unix.csv mit
sophomorix-print -a
auf dem Linuxmuster-Server erzeugt werden, die holt man sich mit einem sftp-fähigen Dateibrowser (Nemo, Dolphin, …) einfach rüber in das Verzeichnis von Moodle, bei mir also
/usr/share/moodle.
Nun das Script:
#!/bin/bash
# Hier werden die Schüler in Klassen einsortiert
# Ich hab das hier "hartverdrahtet", sicher kann man dies variabler machen !
# Schuljahr angeben
year="2019-20"
array=(\
Klasse_5a_\
Klasse_5b_\
Klasse_5c_\
Klasse_6a_\
Klasse_6b_\
Klasse_6c_\
Klasse_7a_\
Klasse_7b_\
Klasse_7c_\
Klasse_8a_\
Klasse_8b_\
Klasse_8c_\
Klasse_9a_\
Klasse_9b_\
Klasse_9c_\
Klasse_ef_\
Klasse_q1_\
Klasse_q2_\
)
# Alle Elemente im Array durchlaufen
for value in ${array[*]}
do
echo "Lege an: $value$year"
moosh cohort-create -d "$value$year" -i "$value$year" "$value$year"
done
# Nun werden die SuS in die obigen Klassen einsortiert:
# Zuerst legen wir eine Datei mit den Schüler-IDs und Login-Namen an:
moosh user-list "id>1" >all_users.txt
# Dann suchen wir den Login,
# vergleichen ihn mit dem aus sophomorix -> all-unix.csv
# und erzeugen eine neue Datei mit Login-Namen, Moodle-IDs und Klassen
awk -F"," '{print $1}' all_users.txt >all_users_with_id.txt
while read line
do
if [[ $line != *"@"* ]]
then
logname=`echo $line | cut -d' ' -f1`
id_temp=`echo $line | cut -d' ' -f2`
id=`echo ${id_temp:1:-1}`
# Suche nach dem loginnamen in der sophomorix-user-Datei
logindata=`grep ";$logname;" all-unix.csv`
group=`echo $logindata | cut -d';' -f2`
echo "Ich ordne der Gruppe zu:"
echo $logname
moosh cohort-enrol -u "$id" "Klasse_${group}_${year}"
echo "Klasse_${group}_${year}"
echo ".................."
fi
done < all_users_with_id.txt
(Dies alles, wie gesagt, im Moodle-Hauptverzeichnis ausführen).
Man kann noch viel mehr mit moosh machen, im nächsten Jahr werden wir versuchen, mit einem SCHILD-Export die komplette Schule in einem Rutsch in Moodle abzubilden.
Vielleicht gefällt dem einen oder der anderen ja das Script -
viel Spaß
Christoph Gü