extend_signup_form e validate_extend_signup_form sono due interessanti callback messe a disposizione da Moodle, fin dalla versione 3.8, per estendere le funzionalità relative all’iscrizione degli utenti. Ad esempio, grazie all’estensione dell’hook validate, possiamo aggiungere la classica funzione custom che verifica la coerenza sintattica di un codice fiscale.

Basta definire questi due hook all’interno di un semplice plugin di tipo local, nel file lib.php, e i giochi sembrano fatti. Almeno in apparenza.

Infatti, queste callback si applicano solo alla fase di iscrizione e non a quella di modifica. Quindi, un utente già registrato che vada a modificare il proprio codice fiscale, inserendone uno errato, non verrebbe bloccato: il dato verrebbe comunque salvato nel database senza alcun controllo.

Inoltre, queste callback non sono compatibili né con le API esposte ai web services né con l’app Moodle.

Due possibili strade

A questo punto abbiamo due strade:

  • una corretta e ortodossa,
  • l’altra un po’ “pecionata”, ma — come tutte le pecionate — funzionante.

✅ Soluzione corretta: il campo personalizzato

Se la nostra esigenza è quella di validare un campo specifico, la strada giusta non è usare le callback, bensì creare un nuovo campo personalizzato.

A tal fine, possiamo sviluppare un plugin nella cartella user/profile/field, ad esempio codicefiscale, in cui estendere la classe profile_field_base, implementando in particolare il metodo edit_validate_field.

Questo metodo riceve come parametro $usernew, che rappresenta i dati aggiornati dell’utente prima che vengano salvati nel database. Tramite $usernew->id possiamo anche distinguere tra fase di iscrizione e fase di modifica dei dati.

Ecco un esempio pratico:

public function edit_validate_field($usernew) {
    $errors = [];
    if (isset($usernew->{$this->inputname})) {
        if (!preg_match('/^[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]$/i', $usernew->{$this->inputname})) {
            $errors[$this->inputname] = get_string('invalidcf', 'profilefield_codicefiscale');
        }
    }
    return $errors;
}

È importante verificare l’esistenza del campo (isset()), poiché l’amministratore del sito può decidere se mostrarlo o meno — spesso i campi custom vengono visualizzati solo nella fase di modifica, per semplificare il modulo d’iscrizione iniziale.

🧩 Gli observer: utili ma “postumi”

A corredo, Moodle mette a disposizione anche gli observer, come \core\event\user_created e \core\event\user_updated. Questi eventi possono essere intercettati anche da un plugin di tipo local, e sono ottimi per operazioni post-salvataggio.

Tuttavia, non sono adatti alla validazione, in quanto vengono richiamati solo dopo che i dati sono già stati memorizzati nel database.

Un possibile escamotage, se proprio necessario, è salvare temporaneamente i dati in una tabella di appoggio e intervenire in un secondo momento per verificarli e ripristinarli se non validi. Ma è una soluzione decisamente poco ortodossa.


Categorized in:

E-learning,

Last Update: 16 Aprile 2025