Il Plugin Directory di Moodle ha 1.800+ plugin gratuiti. Ma il plugin giusto per il tuo requisito specifico potrebbe non esserci — oppure esserci, ma essere abbandonato, mal mantenuto, o non esattamente quello che ti serve. In questo articolo vediamo come valutare le opzioni con una logica di TCO su 3 anni, con esempi reali.
Il Plugin Directory di Moodle (moodle.org/plugins) è una delle sue forze più grandi: oltre 1.800 plugin gratuiti, mantenuti dalla community, per quasi ogni esigenza.
Ma "quasi" è la parola chiave.
Quando un cliente ci dice "ho bisogno di questo, non trovo un plugin", la risposta non è quasi mai immediata. Prima si analizza. Questa è la logica che usiamo.
La trappola del "lo prendiamo dal Plugin Directory"
Il Plugin Directory sembra la soluzione più veloce e economica. Spesso lo è. Ma la decisione "usiamo questo plugin" senza una valutazione rischia di portare a:
Plugin non più mantenuti. Sul Plugin Directory ci sono plugin con l'ultima release nel 2019. Usarli su Moodle 4.x è un rischio di sicurezza e stabilità.
Fit funzionale parziale. Il plugin copre il 70% del requisito. Il 30% restante richiede workaround operativi, o peggio, modifiche al codice del plugin stesso.
Dipendenze da fork non supportate. Se modificate un plugin open source per adattarlo, create un fork che dovete mantenere voi. Ogni aggiornamento di Moodle può rompere le vostre modifiche.
Conflitti tra plugin. Più plugin si installano, più aumenta la probabilità di conflitti — hook che si sovrascrivono, namespace collisi, regression in funzionalità preesistenti.
Prima di scegliere un plugin, 4 minuti di verifica possono evitare 4 settimane di problemi.
4 domande da fare prima di scegliere
1. Quando è stata l'ultima release?
Un plugin aggiornato negli ultimi 6 mesi per la versione corrente di Moodle è probabilmente mantenuto. Un plugin con l'ultima release 18 mesi fa su una versione di Moodle precedente è un rischio.
2. Quante installazioni attive ha?
Il Plugin Directory mostra il numero di installazioni segnalate. Non è perfetto (molte installazioni non segnalano nulla), ma sotto le 500 installazioni attive il plugin è poco testato in scenari reali diversi.
3. Il maintainer risponde alle issue?
Andate su GitHub o sul forum di supporto del plugin. C'è attività nelle ultime 3 versioni di Moodle? Le issue aperte vengono chiuse, o si accumulano?
4. La licenza è compatibile con il vostro uso?
La quasi totalità dei plugin Moodle è GPL 3. Se erogaste il plugin come servizio SaaS a terzi senza modifiche al codice, tecnicamente potreste avere problemi di compliance (dipende dall'interpretazione della GPL sull'uso come servizio). Per uso interno su propria piattaforma, nessun problema.
Tipi di plugin Moodle: quale usare quando
La scelta del tipo di plugin non è estetica — è architettonica. Usare il tipo sbagliato porta a codice difficile da mantenere.
| Tipo plugin | Quando usarlo | Esempi d'uso |
|---|---|---|
| local | Funzionalità di sistema, hook, CLI, integrazioni API | Export rendicontazione, sync HR, automazioni |
| mod (activity) | Contenuto didattico con UI per studenti/docenti | Simulazione interattiva, quiz personalizzato |
| block | Widget nella dashboard o corso | Dashboard personalizzata, widget statistiche |
| auth | Sistema di autenticazione personalizzato | SSO custom, LDAP aziendale con regole specifiche |
| theme | UI/UX personalizzata, branding completo | Tema con colori aziendali, navigazione ridisegnata |
| report | Report nel pannello admin o per docenti | Report compliance, export dati custom |
| enrol | Regole di iscrizione personalizzate | Iscrizione automatica da sistema HR, pagamento |
La maggior parte delle esigenze aziendali custom finisce in un local plugin. È il tipo più flessibile: può fare quasi tutto, ha accesso a tutte le API Moodle, e non richiede una UI specifica.
Esempio: stesso requisito, tre soluzioni a confronto
Requisito: l'azienda vuole che ogni nuovo dipendente iscritto a Moodle sia automaticamente iscritto a un corso di onboarding basato sulla propria business unit (recuperata da un campo custom del profilo utente).
Soluzione A — Plugin directory (enrol_cohort): crea una cohort per ogni BU, configura l'iscrizione automatica via cohort. Funziona, ma richiede di mantenere le cohort sincronizzate manualmente (o via script separato) con il sistema HR. Costo: 0 € di sviluppo, 1-2 ore di configurazione.
Soluzione B — Fork di enrol_cohort: modifico il plugin per leggere il campo custom del profilo direttamente invece delle cohort. Costo: 2-3 giorni di sviluppo. Problema: il fork va mantenuto ad ogni update di Moodle.
Soluzione C — Plugin local custom: scrivo un observer sull'evento \core\event\user_created che legge il campo BU dal profilo e iscrive automaticamente l'utente al corso corretto. Costo: 1-2 giorni di sviluppo. Vantaggio: non tocca nessun plugin esistente, è manutenibile in modo indipendente, è estendibile (domani aggiungo la logica per i trasferimenti BU).
La Soluzione C, in questo caso, ha il TCO più basso nel lungo periodo nonostante il costo iniziale di sviluppo.
Scaffold minimale per un local plugin
Per dare un'idea concreta della struttura, ecco il minimo indispensabile per un local plugin:
// local/business_enrol/version.php
<?php
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2026050800;
$plugin->requires = 2023042400; // Moodle 4.2+
$plugin->component = 'local_business_enrol';
$plugin->maturity = MATURITY_STABLE;
$plugin->release = '1.0.0';// local/business_enrol/db/events.php
<?php
defined('MOODLE_INTERNAL') || die();
$observers = [
[
'eventname' => '\core\event\user_created',
'callback' => '\local_business_enrol\observer::enrol_new_user',
'priority' => 200,
],
];// local/business_enrol/classes/observer.php
<?php
namespace local_business_enrol;
class observer {
public static function enrol_new_user(\core\event\user_created $event): void {
global $DB;
$user = $DB->get_record('user', ['id' => $event->objectid]);
$business_unit = $user->profile_field_business_unit ?? null;
if (!$business_unit) {
return;
}
// Recupera il corso associato alla BU dalla config del plugin
$course_id = get_config('local_business_enrol', "course_{$business_unit}");
if (!$course_id) {
return;
}
// Iscrizione manuale tramite API Moodle (non tocca il core)
$enrol = enrol_get_plugin('manual');
$instance = $DB->get_record('enrol', [
'courseid' => $course_id,
'enrol' => 'manual',
], '*', MUST_EXIST);
$enrol->enrol_user($instance, $user->id, 5); // 5 = student role
}
}Questi tre file (più lang/en/local_business_enrol.php per le stringhe) costituiscono un plugin funzionale. Non è una boilerplate complicata — è l'architettura minima che poi si estende.
Calcolo TCO su 3 anni
| Scenario | Anno 1 | Anno 2 | Anno 3 | Totale 3 anni |
|---|---|---|---|---|
| Plugin directory (gratuito, mantenuto) | 0 € | 0 € | 0 € | 0 € |
| Plugin directory + personalizzazione | 2-4 gg sviluppo | 1 gg manutenzione | 1 gg manutenzione | 4-6 gg lavoro |
| Plugin custom da zero | 5-15 gg sviluppo | 1-2 gg manutenzione | 1-2 gg manutenzione | 7-19 gg lavoro |
| Plugin commerciale con licenza annuale | Licenza + setup | Licenza annuale | Licenza annuale | Licenza × 3 anni |
La colonna che spesso viene dimenticata nella valutazione: il costo del plugin commerciale con licenza annuale nel lungo periodo. Per plugin con licenze da 500-2.000 €/anno, dopo 3 anni il TCO supera spesso quello dello sviluppo custom — che poi non richiede licenze.
Per approfondire il processo di sviluppo custom e le tecnologie coinvolte, leggi la nostra pagina su sviluppo custom Moodle. Se il vostro requisito riguarda la rendicontazione o il tracciamento, leggete anche l'articolo su Moodle e Fondimpresa per casi d'uso simili.
Se state pianificando una migrazione prima di sviluppare nuovi plugin, consultate prima la checklist di migrazione Moodle 3→4→5.
Conclusione: tre punti da portare via
-
Il Plugin Directory è il primo posto dove guardare, non l'unico. Un plugin ben mantenuto con alta adozione è quasi sempre la scelta migliore per funzionalità standard.
-
Il fork è la scelta peggiore nella maggior parte dei casi. Meglio un plugin custom nuovo che mantenere un fork di qualcosa di altrui.
-
Calcolare il TCO su 3 anni cambia spesso la decisione. Il plugin commerciale con licenza annuale sembra economico nell'anno 1. Nel triennio, spesso non lo è.
Hai un requisito che il Plugin Directory non copre? Mandaci 3 righe di descrizione: in 48 ore ti diciamo se esiste già qualcosa o se serve sviluppo custom, e quanto costerebbe.
Domande frequenti
Articoli correlati
Moodle e sicurezza sul lavoro: Accordo Stato-Regioni 2025
Cosa cambia con l'Accordo Stato-Regioni del 17/04/2025 per la FAD obbligatoria su D.Lgs 81/08, e cosa serve adeguare in Moodle: identificazione, tracciamento, attestati.
Architettura & ScalabilitàMoodle multi-tenant senza Workplace: guida pratica
Come gestire più aziende su un unico Moodle senza acquistare Workplace. Cohorts, plugin open source e soluzioni custom a confronto: quando conviene ognuno.
Compliance & RendicontazioneMoodle e Fondimpresa: automatizzare la rendicontazione
Come generare i tracciati Fondimpresa e Forma.Temp direttamente da Moodle senza export manuali in Excel. Plugin custom vs Reportbuilder: quando usare l'uno o l'altro.