gaia-swissknife/README.md

158 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🧰 GAIA Swissknife
**Tampermonkey script per il portale GAIA (CRI)**
Autore: [Luigi D'Acunto](https://luigidacunto.com)
---
## 📦 Cos'è GAIA Swissknife?
Uno script sviluppato per **Tampermonkey** che migliora l'usabilità del portale [https://gaia.cri.it](https://gaia.cri.it), introducendo strumenti automatici, ottimizzazioni visive e utilità per gli operatori CRI.
---
## 🚀 Installazione
### 1. Requisiti
- Estensione **[Tampermonkey](https://www.tampermonkey.net/)** installata su:
- Chrome / Edge / Brave / Opera
- Firefox (supportato, ma con piccole differenze di UI)
### 2. Installazione dello script
🔗 [**Clicca qui per installare GAIA Swissknife**](https://luigidacunto.com/scripts/gaia-swissknife/tampermonkey-script/GAIA-Swissknife.user.js)
Oppure:
1. Apri Tampermonkey
2. Clicca su **"Crea nuovo script"**
3. Incolla il contenuto dello script
4. Salva e assicurati che sia **attivo**
---
## 🛠️ Funzionalità principali
Ogni funzione è descritta con screenshot nella [guida utente](docs/guida-utente/00-indice.md); l'elenco sintetico di cosa lo script aggiunge e dove si aggancia è nella [mappa del progetto](docs/mappa-progetto.md).
### ✅ Su `/aspirante/corso-base/<id>/termina/`
- Tre pulsanti **"Ammessi, Positivo, Positivo"**, **"Ammessi, Positivo, Non previsto"**, **"Ammessi, Non previsto, Positivo"**
- Impostano in blocco Ammissione ed Esiti delle due parti per tutti i candidati
- Form di **compilazione massiva** (Argomento parte 1/2, Sede di destinazione) con **"Applica a tutti i candidati"**
- Compila in un colpo solo i campi per tutti i candidati; ogni casella compare solo se il campo esiste nel corso, senza campi il form non compare
- I campi lasciati vuoti non sovrascrivono i valori già presenti
---
### ✅ Su `/aspirante/corso-base/<id>/iscritti/` (tab "Iscrizioni")
- Pulsante **"Apri tutti i Curriculum"**
- Apre in nuove schede i curriculum dei profili presenti nell'elenco visibile, dopo conferma
- Compare solo con il tab "Iscrizioni" attivo
---
### ✅ Su `/autorizzazioni/`
- Modale mobile "Richieste Iscrizione"
- Mostra un **riepilogo dei corsi richiesti**
- Permette di selezionare un corso per evidenziare i blocchi e aprire i profili corrispondenti
- Ottimizzazione **menu laterale**
- Unisce le voci duplicate del riquadro "Filtra per..." sommando i contatori
- Modale **mobile, comprimibile e spostabile**
---
### ✅ Su `/aspirante/corso-base/<id>/` (tab "Informazioni")
- Pulsante **"Copia per LURCH (JSON)"**
- Copia in clipboard un JSON con i dati del corso, pronto per essere importato da LURCH
- Compare solo con il tab "Informazioni" attivo (non su "Termina corso" e altre pagine del corso)
**Schema del JSON:**
| Campo | Tipo | Formato / Esempio | Note |
|---|---|---|---|
| `direttore` | string | `"Mario Rossi"` | Vuoto se nessun direttore assegnato |
| `quota` | boolean | `true` / `false` | `true` se è prevista una quota di iscrizione |
| `quotaValore` | number | `60` | Valore in euro, `0` se gratuito |
| `corso` | string | `"Corso per Monitore CRI..."` | Titolo del corso |
| `protocollo` | string | `"TOS/2026/MON-PS/6170"` | Codice corso estratto dal titolo pagina |
| `linkGaia` | string (URL) | `"https://gaia.cri.it/aspirante/corso-base/66398/"` | Link diretto alla pagina corso |
| `dataInizio` | string (ISO 8601) | `"2026-09-27T09:00:00"` | Data/ora di inizio corso, `null` se assente |
| `dataEsame` | string (ISO 8601) | `"2026-11-22T09:00:00"` | Data/ora dell'esame finale, `null` se assente |
| `scadenzaDomande` | string (ISO 8601) | `"2026-08-15T16:00:00"` | Termine ultimo per le domande di ammissione, `null` se assente |
Le date sono in formato **ISO 8601 senza timezone** (`YYYY-MM-DDTHH:MM:SS`), direttamente parsabile con `Carbon::parse()` lato Laravel.
---
### ✅ Su `/courses/catalog/`
- Pulsante **"Copia catalogo corsi (JSON)"**
- Estrae tutti i corsi con nome, codice, livello, tipo, obiettivo e copia in clipboard
---
### ✅ Su `/us/elenchi/volontari/`
- Pulsante **"Copia struttura sedi (JSON)"**
- Estrae la gerarchia Regionale > Locale > Sottosedi e copia in clipboard
---
### ✅ Su pagine con selezione sedi
- Tool **"Sede preferita"**
- Select persistente per salvare la sede preferita, pulsante "Solo preferito" e "Seleziona tutto"
---
### ✅ Su `/profilo/<id>/curriculum/`
- Trasformazione della tabella curriculum in **DataTable**
- Senza paginazione, ricerca ("Filtra qualifiche") e ordinamento per Tipo e Nome e Stato
- Colorazione della cella **Tipo** per tipologia di qualifica
- Evidenziazione rossa delle righe con stato **Respinto**
- Ricostruzione visuale colonna "Dettagli"
- Una riga per informazione, con la sua icona
- Testi e nomi di file lunghi tagliati con ellissi e tooltip
---
## 🧩 Note tecniche
- Lo script attiva automaticamente le funzioni **solo sulle pagine dove sono necessarie**
- Non altera il comportamento del portale originario
- Funzioni modulari facilmente estendibili
---
## 🧪 Changelog
📖 [Visualizza changelog completo](https://gitlab.luigidacunto.com/consultant/gaia-swissknife/-/blob/main/CHANGELOG.md)
La versione corrente è nell'intestazione dello script (`@version`); la cronologia completa è nel changelog.
📘 Guida all'uso con screenshot: [docs/guida-utente](docs/guida-utente/00-indice.md)
---
## 🙌 Autore
**Luigi D'Acunto**
💻 [luigidacunto.com](https://luigidacunto.com)
📫 info@luigidacunto.com
---
## 📄 Licenza
Distribuito sotto licenza **MIT** – Open Source.
Puoi leggere il testo completo qui: [LICENSE](https://opensource.org/licenses/MIT)
> **Attenzione:** questo script non è uno strumento ufficiale del portale GAIA o della Croce Rossa Italiana.
Lo script **non altera in alcun modo dati, privacy o integrità del portale**.
Tutte le modifiche sono **locali, lato browser dell'utente** e vengono applicate solo se:
- Tampermonkey è installato
- Lo script GAIA Swissknife è attivo
In qualsiasi momento l’utente può **disattivarlo o rimuoverlo**.
Le modifiche migliorano solo l'interfaccia utente e l'esperienza di utilizzo, **senza interferire con le funzionalità originali del portale**.