Oggi voglio parlarvi di un tool da riga di comando, "Moosh", il cui nome significa appunto Moodle Shell. Questa sorta di ponte tra Moodle e il sistema operativo è un progetto open source nato diversi anni fa, rilasciato attorno al 2013 e sempre ben mantenuto dalla community su GitHub.
Come si installa Moosh?
L'installazione è semplice, può avvenire sia dal sito moodle che da github. Su Ubuntu è addirittura disponibile come package installabile con apt. Alla fine si tratta di script php, però è possibile configurarli in maniera da averli a disposizione system-wide.
E' disponibile su hosting economici?
Se lavorate con hosting economici come Aruba, non potete utilizzare Moosh perché non avete accesso alla riga di comando, la shell, con cui poterlo eseguire. Potete installarlo ma non potete utilizzarlo, quindi di fatto non vi è di aiuto. Se il vostro provider, hosting o cloud che sia, vi consente accesso via shell, allora Moosh fa al caso vostro.
Cosa possiamo fare con Moosh?
Moosh è un pò il "coltellino svizzero" di Moodle. Non aggiunge molte funzionalità, però può velocizzare quelle già presenti. Se ad esempio vogliamo eseguire il backup di tutti i corsi della piattaforma, possiamo digitare:
for c in $(moosh course-list --id-only); do
moosh course-backup $c
done
In appena 3 righe di codice abbiamo svolto un lavoro che, in presenza di piattaforme molto corpose, richiederebbe ore visto che dovremmo aprire da browser ogni singolo corso.
Viceversa, con:
for f in *.mbz; do
moosh course-restore $f 1
done
importiamo tutti i corsi (in questo caso abbiamo scelto la categoria con id 1).
Questa operazione avrebbe senso sopratutto se volessimo esportare i corsi su un altro sito, o eseguire uno scambio tra staging e produzione al termine della fase di test.
Operazione simile è:
moosh course-move 5,6,7,10 2
che sposta i corsi con id 5,6,7,10 dalla categoria nella quale si trovano (e che non è necessario specificare) a quella di destinazione (2).
Posso importare utenti da un csv?
Certo ed anzi è una funzione che personalmente ho trovato molto utile:
moosh course-enrol 21 username1 username2
Questo comando iscrive gli utenti con un dato username dentro un corso (il #21). E qui viene fuori la vera potenza di Moosh, che non è tanto il comando in se, quanto l'integrazione con la shell di linux.
Caso pratico, un cliente mi chiede di iscrivere 200 utenti ad un corso. Farlo da Moodle significa aprire l'apposito pannello, inserire 1 username per volta, attendere che la ricerca ajax trovi l'utente e quindi iscriverne un po alla volta (tutti assieme è un problema perchè il tutto avviene in una dialog box che poi scorre troppo).
A questo punto prendo un file excel (che è quello che di solito mi passa il cliente), estraggo la colonna degli username, li salvo 1 per riga su un file di testo ed eseguo:
cat users.csv | xargs moosh course-enrol 21
In 5 minuti ho svolto un lavoro che avrebbe portato via molto più tempo e, particolare di non poco conto, ho azzerato il rischio di dimenticare qualcuno, cosa possibile quando si ha a che fare con interventi manuali.
Ci sono altre utility?
Certo, l'elenco è enorme. Ad esempio posso verificare la consistenza delle password:
moosh audit-passwords -r
verifichiamo quali utenti del sito utilizzano una password poco sicura. Una funzione importante che possiamo aggiungere ad eventuali pacchetti di audit di sicurezza che offriamo ai nostri clienti.
Possiamo lanciarla anche su uno specifico utente:
moosh audit-passwords -u 17
Posso inoltre estrarre la configurazione di Moodle, con un semplice:
moosh config-get
vengono mostrati tutti i parametri in uso (per intenderci, si tratta della configurazione estratta dal db, non quella del config.php -altrimenti sarebbe una funzione quasi inutile).
Combinando con grep posso ridurre l'estrazione a campi particolari, ad esempio:
moosh -n config-get | grep 'smtp'
ottengo al volo tutta la configurazione smtp, compresa la password.
Vorrei esportare l'albero delle categorie verso un'altra piattaforma. Posso farlo facilmente?
Se avete bisogno di esportare la struttura delle categorie da una piattaforma all'altra, potete farlo con:
moosh category-export 0
e quindi
moosh category-import categor-to-import.xml
Mi è capitato di vedere piattaforme con alberi complessi, con centinaia di categorie annidate. Una funzione del genere è davvero una "salvavita". Se al posto di "0" inseriamo un id di una specifica categoria, viene esportata solo quella (assieme ad altre eventuali sottocategorie)
Quanto pesa ogni corso in Moodle?
Combiniamo ancora la potenza di moosh con quella della shell:
for c in $(moosh course-list --i); do
echo "===== Corso $c ====="
moosh course-info $c | grep -E "Full name|Number of files|Total file size"
done
Avremo in output l'elenco di tutti i corsi con il numero dei files (ovvero delle risorse caricate) ed il relativo peso. E' una funzione che trovo preziosa quando ho a che fare con delle esportazioni importanti: mi permette ad esempio di pianificare l'export di 50 corsi 'leggeri' tutti assieme e di lasciare in background un processo piu corposo.