La guida definitiva allo sviluppo di plugin Moodle: architettura del framework, best practice PHP, testing automatizzato e pubblicazione su Moodle.org.
Perché sviluppare un plugin Moodle
Moodle è usato da oltre 400 milioni di utenti nel mondo. La sua architettura a plugin lo rende infinitamente estensibile: se una funzionalità non esiste, puoi crearla. E se la crei bene, puoi condividerla con la community pubblicandola sulla directory ufficiale.
In ITN abbiamo sviluppato e pubblicato diversi plugin su Moodle.org, e in questa guida condensiamo tutto quello che abbiamo imparato in 20 anni.
Tipi di plugin Moodle
| Tipo | Scopo | Esempio |
|---|---|---|
| mod_ | Attività (quiz, forum, ecc.) | mod_customcert |
| block_ | Blocchi laterali | block_completion_progress |
| local_ | Funzionalità generali | local_analytics |
| auth_ | Metodi di autenticazione | auth_saml2 |
| enrol_ | Metodi di iscrizione | enrol_auto |
| theme_ | Temi grafici | theme_moove |
| report_ | Report e analytics | report_completion |
| tool_ | Strumenti admin | tool_dataprivacy |
Struttura di un plugin
Ogni plugin Moodle segue una struttura standard. Ecco un esempio per un plugin di tipo "local":
local/mioplugin/
├── classes/
│ ├── event/
│ └── task/
├── db/
│ ├── access.php
│ ├── install.xml
│ ├── upgrade.php
│ └── services.php
├── lang/
│ └── en/
│ └── local_mioplugin.php
├── tests/
│ └── mioplugin_test.php
├── index.php
├── lib.php
├── settings.php
└── version.phpI file fondamentali
version.php Definisce versione, requisiti e dipendenze: ```php $plugin->component = 'local_mioplugin'; $plugin->version = 2026010100; $plugin->requires = 2024042200; // Moodle 4.4 $plugin->maturity = MATURITY_STABLE; $plugin->release = '1.0.0'; ```
db/access.php Definisce le capability (permessi): ```php $capabilities = [ 'local/mioplugin:view' => [ 'captype' => 'read', 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'manager' => CAP_ALLOW, 'teacher' => CAP_ALLOW, ], ], ]; ```
Testing automatizzato
Moodle supporta PHPUnit e Behat per i test automatizzati. È fondamentale per la pubblicazione.
PHPUnit (unit test) ```php class local_mioplugin_test extends advanced_testcase { public function test_funzione_principale() { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(); $result = mia_funzione($user->id); $this->assertTrue($result); } } ```
Behat (integration test) ```gherkin Feature: Il mio plugin funziona Scenario: Un admin può vedere la pagina Given I log in as "admin" When I navigate to "my plugin page" Then I should see "Dashboard del plugin" ```
Pubblicazione su Moodle.org
Il processo di code review per la pubblicazione è rigoroso:
- 1Registrazione: crea un account su moodle.org/plugins
- 2Upload: carica lo zip del plugin
- 3Automated checks: validazione automatica (codestyle, struttura, sicurezza)
- 4Code review: un reviewer manuale verifica il codice (7-30 giorni)
- 5Feedback: potresti ricevere richieste di modifica
- 6Approvazione: il plugin viene pubblicato
Errori comuni che causano il rifiuto - Codice non conforme a Moodle Coding Style - Mancanza di stringhe di lingua (hardcoded text) - Query SQL non parametrizzate - Mancanza di capability check - Nessun test automatizzato - README incompleto
Conclusione
Sviluppare plugin Moodle richiede pazienza e conoscenza del framework, ma è un investimento che ripaga. Un plugin ben fatto può risolvere un problema per migliaia di organizzazioni nel mondo.
Se hai un'idea per un plugin ma non hai le risorse interne per svilupparlo, contattaci. Possiamo svilupparlo per te o affiancare il tuo team nello sviluppo.
Ti è piaciuto questo articolo?
Contattaci per una consulenza gratuita sul tema trattato.
Prenota una consulenza gratuita





