Plugin WordPress per gestire le iscrizioni ai corsi di Tai Chi della scuola ITCCA. Estende l'utente WordPress con i ~40 campi del registro INSXXX (dove
XXXè la sigla a 3 lettere dell'insegnante che userà il plugin), espone un form pubblico di iscrizione e sincronizza i dati con un Google Sheet privato selezionabile da Drive.
Versione corrente: 1.0.0
Requisiti: WordPress ≥ 6.0, PHP ≥ 8.1
Licenza: GPL-2.0-or-later
Il plugin nasce per sostituire il workflow basato su fogli Excel/CSV annuali del registro INSXXX (XXX è la sigla a 3 lettere dell'insegnante che userà il plugin e collegherà il suo foglio personale, es. INSROS, INSBIA, ecc.) con una gestione integrata in WordPress, mantenendo però il foglio Google come fonte di backup e condivisione.
Funzionalità principali:
allievo dedicato con ~40 campi custom mappati 1:1 sulle colonne del registro INSXXX.[itcca_iscrizione] con validazione client + server.Tutti i campi sono salvati come user_meta con prefisso itcca_, più l'email che usa il campo nativo user_email di WordPress.
Le 41 colonne del registro INSXXX sono raggruppate in sezioni:
ins, cognome, nome, sesso (M/F), nascita_data, nascita_luogo, cf (Codice Fiscale)indirizzo, civico, comune, capuser_email, cellulareX (età), Anno (anni di pratica)sede_u, centro, ruolo, grado, inizio (anno)quota_uisp, quota_itcca, quota_adopag_chi, pag_il, ric_il, ric_n, att, pag, pro, ric, onl (gli ultimi 5 sono flag booleani)r (R=rinnovo / N=nuovo), a (A=attivo / D=disattivo), active (derivato dal tab del foglio)uisp_n, uisp_ddoc, animale, elem, el_sx, el_dx, noteIl registro è centralizzato in class-fields.php come unica fonte di verità: list table, edit page, form pubblico e push su Sheet leggono sempre da lì (label, tipo, validatore, sezione, visibilità nel form).
Il valore del campo ins (sigla insegnante, es. INSXXX) è configurabile dalle impostazioni del plugin e viene impostato come default su ogni nuovo allievo creato dal form pubblico.
Shortcode: [itcca_iscrizione] (da inserire in una pagina o articolo).
Tutti i campi sono obbligatori (asterisco rosso, attributo HTML required, ricontrollo server-side). Campi visibili al pubblico:
Tutti gli altri campi del registro vengono compilati dall'admin nel backoffice (sede, quote, ricevuta, flag, ecc.).
^[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]$ client-side + checksum ministeriale server-side. Controllo unicità.is_email() di WordPress, controllo unicità.^\+?[0-9]{9,15}$ (spazi rimossi).allievo, username = slug di cognome.nome, password randomIl CSS usa variabili CSS (--itcca-primary), currentColor e classi WP standard per ereditare dal tema attivo. Il colore primario è sovrascrivibile dalle impostazioni del plugin.
/wp-admin/user-edit.php?user_id=X
Sezioni a fisarmonica per ogni gruppo di campi (Anagrafica, Residenza, Tesseramento, Quote, Ricevuta, Stato, UISP, Note). Età e anni di pratica sono mostrati read-only come valori calcolati.
/wp-admin/admin.php?page=itcca-allievi-list
WP_List_Table con tutte le colonne principali, ordinabiliitcca_active)Tre passi: credenziali su Google Cloud Console → connessione OAuth → selezione del foglio via Picker.
Sotto Allievi ITCCA → Impostazioni trovi un wizard guidato in 5 step con istruzioni in italiano e link diretti alle pagine giuste di Google Cloud Console:
Validazione live della forma di Client ID/Secret/API Key con badge di stato per ogni step.
https://www.googleapis.com/auth/spreadsheets (lettura/scrittura del foglio scelto)https://www.googleapis.com/auth/drive.file (accesso ai soli file aperti tramite Picker — privacy-friendly rispetto a drive.readonly)https://www.googleapis.com/auth/userinfo.email (per mostrare con quale account sei connesso)I token (access + refresh) vengono salvati in wp_options e rinnovati automaticamente alla scadenza.
Bottone "Seleziona foglio da Drive" → apre il Picker nativo di Google con ricerca/recenti/Drive condivisi, filtrato sui soli Google Sheets.
Una volta scelto il foglio, il plugin:
spreadsheet_id, nome, URL DriveZZZ*, pivot)Quando: ogni volta che colleghi un foglio nuovo (cambio anno) o rilanci manualmente "Allinea da foglio". Sempre disponibile.
A=D (disattivo)meta_input di wp_insert_user)itcca_sheet_row e itcca_sheet_tabaligned_at)itcca_phase_a_log (storico ultime 50)Durante l'operazione viene mostrato un overlay full-screen con spinner e messaggio rassicurante.
Quando: attiva automaticamente dopo la prima Fase A su un foglio.
profile_update / user_register / salvataggio dalla pagina admin → enqueue di un task di pushuser_id ↔ riga è in itcca_sheet_rowspreadsheets.values.update di tutta la rigaspreadsheets.values.append + aggiorna sheet_rowsheet_rowitcca_active (1 → tab attivi, 0 → tab ZZZ); il push non sposta righe tra tab, lo spostamento si fa a mano sul foglioitcca_sync_errors, retry orario via WP-Cronspreadsheet_iditcca_sheet_row (la mappatura vecchia non vale più)Il foglio Google evolve nel tempo: colonne aggiunte, rinominate, rimosse. Il plugin gestisce queste mutazioni preservando i dati WordPress.
Fields::baseline() contiene i 42 campi INSXXX di partenza. Fields::overrides() (salvato in wp_options['itcca_schema_overrides']) contiene gli scostamenti:
```php [ 'renames' => [ 'animale' => ['csv' => 'Zodiaco', 'renamed_at' => '...'] ], 'deletes' => [ 'el_dx' => ['original_csv' => 'El Dx', 'deleted_at' => '...'] ], 'additions' => [ 'allergie' => ['csv'=>'Allergie','label'=>'...','type'=>'textarea','section'=>'altro','public'=>false,'added_at'=>'...'] ], ]