Portale open-source per orientamento, didattica e prenotazioni del Dipartimento DiBEST — Università della Calabria (già EventiDiBEST).
Il portale è organizzato in macroaree, ciascuna con le sue aree:
- Orientamento: Formazione Scuola Lavoro (FSL, OpenLab: convenzioni, elenco studenti, attestati, valutazioni) ed eventi e seminari (es. Welcome Week);
- Didattica: gruppi degli insegnamenti (es. Scienze Motorie), con le attività create a partire dall'anagrafe degli insegnamenti;
- Calendari e risorse: aule, laboratori e sportelli (appuntamenti con gli uffici) prenotabili a slot.
Ogni area ha un tipo (pagine_eventi.tipo_area: fsl, eventi, gruppi, calendario) scelto in Aree o alla creazione: colloca l'area nella home e propone le impostazioni dei nuovi eventi e progetti. Le anagrafi (docenti, PTA, insegnamenti, corsi di studio, scuole) sono comuni a tutto il portale.
Guardalo live: https://dibest2.unical.it/didattica/ (il vecchio indirizzo /eventi/ rimanda qui)
- Sito organizzato per pubblico (Testata e home › Widget › «Organizzazione proposta», con copia di sicurezza e ripristino; il menu si può anche preparare per gradi: «Crea le voci nascoste», poi mostrarle una per una da Menu del sito o tutte insieme con «Mostra il menu proposto»): home con Cosa cerchi? (futuri studenti e scuole, studenti, eventi e seminari, area riservata), agenda dei prossimi appuntamenti con gli ambiti e scadenze della modulistica; menu Home · Orientamento · Studenti · Eventi e seminari · Area riservata (le altre voci restano in fondo)
- Eventi e seminari con ambiti (Orientamento, Ricerca, Public engagement, Didattica): ogni evento ne ha uno o più (predefinito dell'area in Impostazioni area); agenda unica
agenda.phpcon filtri per ambito, «per le scuole» e ricerca, calendario.icsda aggiungere a Google/Outlook (agenda_ics.php); vetrinaorientamento.phpper futuri studenti e scuole - Report per ambito (pannello › Eventi e seminari › Report per ambito,
admin/report_ambiti.php): per anno solare o accademico, eventi, incontri, ore, iscrizioni, partecipanti (per le classi il numero di studenti dichiarato), presenze e scuole raggiunte per ambito, andamento per mese, elenco degli eventi; Excel per la scheda della Terza missione e del public engagement - Seminari: nel modulo dell'evento relatore (dall'anagrafe o esterno, con ente), abstract, link della diretta, della registrazione e slide in PDF; compaiono nella scheda pubblica (la diretta fino alla fine dell'evento), nell'agenda, nella ricerca e nel calendario .ics
- Avvisi per email dei nuovi eventi (
avvisi.php): ci si iscrive scegliendo gli ambiti e/o le attività per le scuole, con conferma dal link (subito per chi è entrato con la stessa email); il cron manda a ogni iscritto un riepilogo con i nuovi eventi dei suoi argomenti, ogni evento una volta sola; link per cambiare argomenti o cancellarsi in ogni email - Formazione Scuola Lavoro modulo a sé nel pannello (prima sottomodulo dell'Orientamento): chi aveva il modulo Orientamento o il perimetro FSL la conserva; il modulo Orientamento si chiama ora «Eventi e seminari»
- Posti «senza limite»: i turni con almeno
POSTI_SENZA_LIMITEposti (1000) mostrano «Posti disponibili» invece di somme come «100.657 posti liberi» - Ingresso nel pannello per macroarea: chi gestisce più aree sceglie prima la sezione (Orientamento, Didattica, Calendari e risorse) e poi l'area, con card che riassumono i numeri di ciascuna (
admin/inizio.php); "Cambia" riporta alla sezione dell'area corrente - Calendari e risorse (aree di tipo
calendario): aule, laboratori e sportelli con orari settimanali (fino a due fasce al giorno), slot di durata scelta, più slot di seguito, preavviso minimo e giorni prenotabili, chi può prenotare (tutti, studenti, docenti, personale), approvazione facoltativa dei gestori, ripetizione settimanale (le settimane non disponibili vengono saltate e segnalate) e chiusure della risorsa o di tutta l'area. Pagina pubblica con la settimana degli slot liberi, controllo delle sovrapposizioni (anche con richieste contemporanee), email di conferma, approvazione, rifiuto, annullamento e promemoria del giorno prima, file .ics, prenotazioni nell'Area personale con annullamento; nel pannello agenda di oggi, prenotazioni con filtri, approvazione anche di tutta la serie ed export CSV (admin/risorse.php,admin/prenotazioni_risorse.php) - Didattica – Sedute dei consigli dei corsi di studio (
admin/didattica.php?tab=sedute): i 5 consigli del Dipartimento sono già inseriti; l'Ufficio didattico sceglie uno o più referenti per consiglio (entrano nel pannello e vedono solo le sedute del loro consiglio), i referenti inseriscono una volta sola i componenti (docenti dall'anagrafe, rappresentanti a mano) con il gruppo del verbale; in ogni seduta si segna presente / assente giustificato / assente ingiustificato. Per ogni pratica in seduta: esito (approvata, con modifiche, respinta, rinviata), convalide (insegnamento indicato dallo studente → insegnamento del Dipartimento dall'anagrafe, convalida totale o parziale con CFU riconosciuti e da integrare calcolati) o piano di studi (in piano / fuori piano), delibera. Tutto finisce nel verbale Word (presenze per gruppo con il riepilogo, quadro delle convalide) e nell'Excel; «Applica gli esiti» chiude le pratiche e avvisa gli studenti - Didattica – Moduli online avanzati: tipi di campo raggruppati (anche ora, URL, codice fiscale, scelta multipla, dichiarazione da accettare, titoli e testi informativi), tabelle con colonne tipizzate (insegnamento dal catalogo di Ateneo, CFU, voto, S.S.D., data, tendina…) definite dal costruttore, logica condizionale («mostra solo se» un'altra risposta è uguale / diversa / contiene / compilata / vuota) e valori automatici («compila se…»), ripetute dal server; modelli pronti anche per convalida di esami e piano di studi
- Catalogo degli insegnamenti di Ateneo: i corsi di studio di tutti i dipartimenti si aggiornano con l'anagrafe; lo studente sceglie tipo di corso → corso di studio → anno accademico di offerta → insegnamento (scaricato dalle API la prima volta e tenuto 30 giorni), CFU e S.S.D. si compilano da soli, oppure lo scrive a mano (
cerca_insegnamenti.php,assets/js/campi-pratica.js) - Didattica – Iter: chi ha avuto in carico la pratica nei passi precedenti continua a vederla (filtro «Passate ad altri uffici») e la integra; chi l'ha in carico può chiedergli un'integrazione; lo studente può sempre aggiungere documenti. Le email partono solo ai passaggi: all'operatore che riceve la pratica e allo studente («passata a…»), per le richieste di integrazione e per gli esiti; niente email per note interne e cambi di stato intermedi
- Tutorato – Lettere di incarico (
admin/tutorato.php): bando con decreto del bando e della commissione e direttore dall'anagrafe; per ogni vincitore dati anagrafici, attività, ore, periodo, compenso e docente responsabile (dall'anagrafe o a mano). Word precompilato dal modello del Dipartimento e PDF della lettera. Iter: email allo studente → conferma con SPID o CIE (incarico.php: solo il titolare del codice fiscale; nel PDF metodo, livello, identity provider, spidCode, data e ora, impronta SHA-256) → firma PAdES del docente → firma PAdES del direttore (firma_incarico.php: firma remota Aruba dal portale oppure caricamento del PDF firmato) → email all'operatore che scarica il PDF con tutte le firme e registra il protocollo (copia allo studente). Accettati solo PDF PAdES che contengono la lettera senza modifiche, con la firma integra e, se noto, il codice fiscale del firmatario; i .p7m (CAdES) sono rifiutati - Tutorato – Registro delle attività e fine attività (
registro_tutorato.php, dall'Area personale): dopo la firma del direttore il tutor segna giorno, ore (a mezz'ore, entro le ore dell'incarico) e attività; il docente responsabile approva o respinge. Quando il tutor dichiara concluse le attività il docente conferma e il portale compila da solo la dichiarazione di fine attività (modello del Dipartimento: titolo, insegnamento e corso del docente inseriti dall'operatore, decreto del bando, ore approvate, riepilogo del registro), da firmare in PAdES (firma_incarico.php, firma remota Aruba o scarica-firma-ricarica). Poi l'operatore riceve l'avviso «attività completate» con il riepilogo delle ore e il PDF, e registra il protocollo. Anteprima della dichiarazione dal pannello - Formazione Scuola Lavoro – Convenzione firmata: la scuola può caricare la convenzione firmata (
convenzione_online.php); Convenzione e Allegato A si precompilano e si scaricano dal pannello (admin/fsl.php,admin/convenzione_file.php); firma del Direttore con firma remota o PDF firmato; elenco delle convenzioni da stipulare - Tutorato – Pagamenti e import dei vincitori: dichiarazione individuale online con IBAN cifrato (serve
CIFRATURA_CHIAVEnel.env), compenso orario, validazione del referente, ufficio pagamenti (pagamenti_tutorato.php); import dei vincitori dal Word del decreto di approvazione atti - Pratiche studenti – Iter e firme (
admin/didattica_moduli.php): procedura guidata a sette passi per creare i moduli (anche per copia o dall'elenco del Dipartimento); l'iter è fatto di passaggi a un ufficio, a una persona indicata nel modulo (il relatore, con link personale e accesso Unical:firma_pratica.php) o al Direttore, con tempo massimo per passo, solleciti e firma PAdES; pratiche «fuori verbale» (certificati e attestati con la sola firma del Direttore e documento caricato); chi ha avuto la pratica la vede e la integra - Verbali punto per punto: i punti nascono dall'o.d.g. del consiglio, ognuno con il suo testo e le pratiche sotto il punto giusto; verbale Word con testata e piede come nel modello del Dipartimento (
TestoVerbale,EsportazioneVerbale) - Archivio dei verbali (
admin/didattica_archivio.php): caricamento di uno o più PDF o di una cartella, dati ricavati dal nome del file, doppioni riconosciuti dall'impronta, ricerca nel testo (lettore di PDFTestoPdf); ognuno vede i verbali del proprio consiglio, l'Ufficio didattico tutti - Pagina pubblica dei verbali con password (
verbali.php, accessi inadmin/didattica_accessi.php): password di accesso, omissis o conferma prima di pubblicare, registro degli accessi con IP anonimizzato e limite ai tentativi. Da usare dopo il parere del DPO - Risorse – Responsabili: l'admin sceglie dall'anagrafe di Ateneo chi si occupa di ogni risorsa; il responsabile approva o rifiuta dall'Area personale («Le mie risorse»,
risorse_responsabile.php) senza accesso al pannello - Risorse – Campi personalizzati e contatori: campi costruiti dall'admin nel modulo di prenotazione; contatori per periodo (giorno, settimana, mese) o scorta con carichi (es. i campioni di un laboratorio), che tengono occupata la quantità anche in attesa di approvazione
- Risorse – Diario di bordo (
diario_bordo.php): per auto e mezzi (tipo «Auto o mezzo») o qualunque risorsa; campi di partenza dal modulo cartaceo, modificabili; compilazione dopo l'uso da chi ha prenotato o dai co-conducenti indicati, km controllati, promemoria con il cron, blocco delle nuove prenotazioni facoltativo, verifica del responsabile ed Excel - Risorse – Cruscotto e scadenze (
risorse_cruscotto.php): per il responsabile e gli amministratori, prenotazioni per stato, ore e utilizzo, fasce più richieste, chi la usa di più, quantità, km e consumi, Excel; scadenze (bollo, assicurazione, tagliando…) inserite dall'admin con avviso via email prima e dopo la data (cron) e rinnovo dal cruscotto - Risorse – Prenotazioni ripetute e lista d'attesa: oltre alla ripetizione settimanale, ogni due settimane o ogni mese (lo stesso giorno della settimana); sugli slot occupati ci si mette in coda (
ListaAttesaRisorse): se la prenotazione viene annullata o rifiutata il primo in coda riceve l'email e ha 24 ore per prenotare, poi l'avviso passa al successivo con il cron; lo slot non resta riservato - Cruscotto del Direttore (
cruscotto_direttore.php,src/Portale/CruscottoDirettore.php): per il Direttore (quello indicato per le convenzioni) e gli amministratori, in una pagina i documenti da firmare con il link diretto e ciò che si è fermato: pratiche oltre i giorni del modulo, conferme dei docenti in ritardo, verbali in firma, convenzioni FSL e con le scuole in scadenza, pagamenti del tutorato, scadenze e prenotazioni delle risorse. Solo lettura - Uffici e persone (Gestione del portale →
admin/uffici.php,src/Uffici/): un'unica anagrafe degli uffici del Dipartimento e di Ateneo, con persone scelte sempre dall'anagrafe di Ateneo; Direzione con Direttore e vice e interruttore «Direttore assente» (direttore_assente.php); gli uffici si richiamano da pratiche, tutorato, risorse (responsabili) e convenzioni FSL. - Messaggi alle scuole sulla convenzione FSL: promemoria «carica il PDF» e messaggi tra ufficio e scuola (
src/Fsl/ServizioMessaggiConvenzione.php). - Guide per ruolo (
guida.php,src/Portale/GuidePerRuolo.php): tredici guide «Come si fa» (studente, docente e relatore, ufficio protocollo, ufficio del corso, referente del consiglio, responsabile di risorsa, tutor, scuole (convenzione FSL), Direttore, amministratore) con le schermate inassets/guide/; versione da stampare con?stampa=1; i PDF sono indocumentazione/guide/ - Convenzioni di tesi con enti e aziende (
admin/convenzioni_tesi.php,src/ConvenzioniTesi/, modulo Didattica): l'azienda lavora da un link personale, senza registrarsi (convenzione_tesi.php; lo può chiedere da sola darichiedi_convenzione_tesi.php), inserisce i dati e il rappresentante, può proporre modifiche agli articoli (l'ufficio le accetta, le rifiuta o risponde con un altro testo prima della firma), scarica la convenzione compilata in PDF e Word dal modellomodelli_documenti/convenzione_tesi.docx, la firma in PAdES e la ricarica; l'ufficio protocolla in entrata (il Direttore riceve il link, il vice se «Direttore assente»), il Direttore firma (firma_convenzione_tesi.php), l'ufficio registra il protocollo in uscita e la validità (5 anni). Archivio con ricerca, convenzioni già in essere inseribili a mano, promemoria alle aziende ferme, avviso di scadenza a 60 giorni con rinnovo, elenco pubblico delle aziende convenzionate (aziende_convenzionate_tesi.php: solo valide e con il consenso) - Pratiche studenti – elenco completo: certificato unico (iscrizione, laurea, rinuncia) con marche da bollo, Diploma Supplement, attestati con conferma dei docenti e protocollo in uscita; trasferimento in entrata, iscrizione per rinuncia o decadenza, abbreviazione; convalide e esoneri di inglese, piano di studi, curriculum, tempo pieno/part-time, fuori piano, anticipo, titolo estero; richiesta tesi unica (anche Conservazione e Restauro e variazione) con conferma del relatore; cancellazione errata iscrizione, esonero dalla frequenza; mobilità internazionale (svolgimento, variazione, fine attività) dall'ufficio Internazionalizzazione. Si creano da
ModelliPratichecome moduli inattivi, da rivedere e attivare dal pannello - Promemoria e solleciti (cron): al tutor per aggiornare il registro (dopo 2 settimane senza attività) e, dalla settimana prima della fine del periodo, per chiuderlo (al massimo uno a settimana); al docente per le ore da approvare; solleciti delle firme ferme (docente e direttore sulla lettera, docente sulla fine attività, segretario e coordinatore sul verbale) ogni
FIRME_GIORNI_SOLLECITOgiorni (predefinito 5), al massimo 3, poi avviso all'operatore - Sedute – Convocazione per email (facoltativa): l'operatore o il referente decide se inviarla e ne personalizza oggetto e testo (segnaposti
{NOME},{ORGANO},{DATA},{ORA},{LUOGO},{ODG},{COORDINATORE},{LINK_GIUSTIFICA}); con il link personale (giustifica.php) il componente giustifica l'assenza e risulta «assente giustificato» nelle presenze, con il motivo - Sedute – Estratto del verbale per lo studente: con «Applica gli esiti» ogni pratica approvata o respinta riceve un PDF con la delibera e il quadro delle convalide / del piano di studi, visibile allo studente nella pratica
- Sedute – Verbale firmato in PAdES: si carica il verbale in PDF e lo firmano il segretario e poi il coordinatore (
firma_verbale.php: firma remota Aruba se configurata, altrimenti scarica, firma e ricarica); a firme complete il PDF va ai referenti. Importa i componenti da un altro consiglio; pagine dei consigli e delle sedute ridisegnate (schede dei consigli, sedute prossime e passate, passi della seduta) - Solo PAdES anche per le convenzioni FSL: istruzioni alla scuola e registro accettano solo PDF firmati in PAdES
- Gestione eventi multi-area con sezioni (Pagine) personalizzabili per colori, layout e accessi
- 8 layout di pagina: griglia per sezioni, lista cronologica, elenco avanzato con ricerca, calendario, timeline, agenda a schede per giorno, gruppi/corsi, progetti — tutti gestiscono anche i turni senza data fissa
- Progetti (es. Formazione Scuola Lavoro), dedicati alle scuole o generici: maschera dedicata con corso di laurea, periodo o "date da definire", requisiti di accesso, ore, articolazione in moduli/fasi/incontri, obiettivi, conoscenze e competenze, referenti con pagina personale; scheda pubblica di ogni progetto con link condivisibile; edizioni (repliche) con lista d'attesa in ordine di arrivo — per le scuole una scuola per edizione e numero di studenti controllato, altrimenti posti per edizione; iscrizione con SSO, SPID o CIE
- Prenotazioni con turni: nome, data e orari facoltativi, apertura/chiusura automatica, multi-posto, approvazione manuale
- Lista d'attesa: posizione in coda visibile all'utente ("Sei 3° in lista"), posto liberato offerto con 24 ore per confermare o rinunciare, promozione automatica
- Limite iscrizioni per area (un solo evento o un solo turno per evento): le liste d'attesa non contano e decadono alla prima conferma
- Autenticazione SSO via SimpleSAMLphp (integrazione SSO Unical) + accesso esterno (CIE/SPID)
- RBAC a 3 livelli: Super Admin, Gestore Area/Evento, Utente — ogni azione verifica che evento o prenotazione appartengano all'area del gestore
- Check-in tramite QR code: scanner integrato nel pannello admin (scansione continua, contatore presenti in tempo reale, check-in manuale, lettori USB), self check-in studente, email attestato automatica post-check-in
- Home configurabile a widget: carosello, la mia prossima prenotazione (con ricevuta QR), bacheca annunci, card aree, ultimi posti disponibili, prossimi appuntamenti, numeri del dipartimento — ordine con drag & drop, colonne e numero di card regolabili
- Gestione iscritti: azioni di massa (presenze, approvazione, promozione dalla lista d'attesa, annullamento), prenotazione manuale
- Duplicazione di eventi e progetti (con turni, campi del form e sondaggi) e di singoli turni
- Aree senza file da generare: ogni area è servita da
area.phptramite.htaccess, gli slug che coincidono con file del sito vengono rifiutati - Attestati PDF generati automaticamente al completamento dell'evento, con codice e QR di verifica (pagina pubblica
verifica_attestato.php); il QR è disegnato nella pagina, senza servizi esterni; la frase dell'attestato è personalizzabile per area (es. "ha partecipato al progetto di Formazione Scuola Lavoro dal titolo:") - Attestati per gli studenti nei progetti per le scuole e negli eventi con l'opzione "Attestati per gli studenti della classe" (es. OpenLab): il docente inserisce l'elenco dall'Area personale (caselle separate Cognome e Nome, incolla da Excel o modello .xlsx/.csv), la segreteria può correggerlo e togliere gli assenti; a progetto concluso il docente riceve per email il link agli attestati di tutta la classe, da stampare in un unico PDF o da scaricare in uno ZIP con un PDF per studente (
attestato_cognome_nome.pdf); promemoria automatico se l'elenco è ancora vuoto a 7 giorni dalla fine; dopo 12 mesi dalla fine del progetto i nomi vengono ridotti alle iniziali (i codici restano verificabili) - Pannello organizzato per aree: pagina Aree con le aree visibili a ciascun utente secondo le abilitazioni; menu a gruppi richiudibili (l'apertura viene ricordata): per l'area corrente Attività, Partecipanti, Statistiche e Impostazioni area; nel Portale Scuole e FSL, Anagrafe di Ateneo, Sito pubblico, Utenti e abilitazioni, Sistema e registri (email e controlli, registro operazioni, accessi SSO come schede); nome dell'area sempre visibile nella barra in alto. Le nuove aree si creano da una pagina dedicata e nascono nascoste al pubblico, con l'eventuale voce di menu anch'essa nascosta, da pubblicare quando sono pronte
- Abilitazioni per perimetro: in Utenti e abilitazioni si abilita una persona a tutta l'area (come un amministratore, ma solo per quell'area, impostazioni comprese) oppure a una parte: tutti i progetti, tutti gli eventi (anche quelli creati dopo) e/o attività scelte; per la Formazione Scuola Lavoro (tutte le aree) a tutto (pannello FSL e attività FSL di ogni area) oppure solo alle convenzioni o all'anagrafe scuole. Dentro il perimetro si gestisce tutto: attività, iscritti e check-in, sondaggi, moduli, attestati e statistiche. Riepilogo in cima alla pagina con amministratori, abilitati sull'area, abilitati alla FSL e abilitazioni in attesa del primo accesso
- Barra del gestore nelle pagine pubbliche, visibile solo a chi gestisce l'area o l'evento: link diretti a modifica evento/progetto, eventi, impostazioni e pannello
- Prenotazioni pubbliche protette: per chi prenota senza accesso domanda di controllo anti-robot (CAPTCHA interno, senza servizi esterni), campo trappola e limite di prenotazioni per indirizzo IP
- Progetti con rimando: un progetto può comparire nell'elenco (es. Formazione Scuola Lavoro) ma rimandare a un'altra pagina del portale o a un indirizzo esterno, con il pulsante "Vai a …" (es. OpenLab)
- Termine per annullare impostabile per ogni turno ("Annullabile fino a"): dopo quella data l'utente non può più annullare né cambiare turno dall'Area personale
- Scheda di dettaglio di ogni evento (
<area>.php?evento=ID), raggiungibile da tutte le card e dalla ricerca (nelle card solo la descrizione breve, qui la completa con la locandina): turni in sequenza con posti liberi, prenotazione e aggiunta al calendario, luogo con link a Google Maps, referenti con email, telefono e pagina personale, link da condividere - Sondaggi/questionari collegabili agli eventi: 15 tipi di campo (rating, NPS, matrice, scelta, testo, data, email…), ordinamento drag & drop, logica condizionale ("mostra se…"), anteprima interattiva, statistiche NPS ed export XLS
- Dashboard amministrativa con KPI, grafici (Chart.js), messaggi non letti, scelta dell'area per chi ne gestisce più di una e avviso sugli attestati delle classi (elenchi vuoti, presenze mancanti, invii non partiti)
- Statistiche & report: presenze effettive, tasso di presenza, annullate, riempimento, trend iscrizioni 30 giorni, presenti vs assenti per evento, vista Live/Storico, export CSV/Excel e stampa PDF
- Menu di navigazione a 3 livelli con ordinamento drag & drop e voci nascondibili
- Profilo utente: pagina dedicata con dati SSO e modifica email personale
- Form builder per campi prenotazione personalizzati per area/evento
- Anagrafe delle scuole: l'elenco ufficiale del Ministero dell'Istruzione (open data, statali e paritarie) si carica dal pannello; il campo "Scuola (anagrafe del Ministero)" dei moduli apre una finestra guidata con regione, provincia e comune (tendine con il numero di scuole), ricerca per nome o codice meccanografico ed elenco delle scuole del luogo, oppure "La scuola non è in elenco" per scriverla a mano; salva il nome ufficiale e il codice meccanografico e la propone già compilata alle iscrizioni successive; resta possibile scrivere a mano una scuola non in elenco. Le scuole scritte a mano nelle iscrizioni passate si abbinano all'anagrafe con i suggerimenti del portale, così report e statistiche contano ogni scuola una volta sola. La pagina Anagrafe scuole elenca le scuole collegate con i docenti di riferimento, le iscrizioni e le attività (esportabile in CSV)
- Convenzioni con le scuole: progetti ed eventi possono chiedere nel modulo se la scuola ha già la convenzione con il Dipartimento; con "No" la prenotazione resta in attesa e la scuola scarica dal portale i modelli di Convenzione e Allegato A (assets/modelli, sostituibili per area in Impostazioni area caricando un nuovo file) e riceve la PEC a cui inviarli firmati; la durata proposta per una nuova convenzione è un anno, come nel modello del Dipartimento. Registro delle convenzioni nel pannello Formazione Scuola Lavoro (scheda Convenzioni), per scuola: convenzione e Allegato A firmati (PDF o .p7m, scaricabili solo dal pannello), validità dal/al, docenti di riferimento dell'Allegato A, protocollo. La convenzione deve coprire tutto il periodo dell'attività (Dal/Al del progetto, giorno del turno dell'evento): le scuole con una convenzione che lo copre sono riconosciute nel modulo, altrimenti ne va stipulata una nuova. La verifica delle iscrizioni alle attività FSL, anche già confermate, si fa dalla scheda Verifica iscrizioni dello stesso pannello e ogni giorno dal cron. Negli eventi gli interruttori "Dedicato alle scuole" e "Attività di Formazione Scuola Lavoro" (come nei progetti) attivano la prenotazione per classe e il processo delle convenzioni, e quando la convenzione arriva le prenotazioni in attesa si confermano con l'email alla scuola. In Iscrizioni: richiesta della convenzione per email a chi si è già iscritto, "Convenzione ricevuta" (registrata per la scuola), badge sullo stato. Dal cron: promemoria alla scuola ogni 7 giorni (massimo 3), avviso ai gestori 7 giorni prima dell'inizio se mancano convenzioni, avviso agli amministratori 60 giorni prima della scadenza. I progetti possono anche richiedere l'approvazione dei gestori per tutte le edizioni. Con il modello del Dipartimento la scuola scarica anche la Convenzione già compilata (
convenzione_precompilata.php, .docx): istituto, codice meccanografico e sede dall'anagrafe, attività, descrizione, studenti, periodo, durata e tutor; restano evidenziati da completare codice fiscale e dati del Dirigente - Allegato A: lo stesso contenuto in PDF e in Word (
AllegatoAModello,AllegatoAPdf,AllegatoAWord), con le attività raggruppate per corso di laurea e in ordine di data, fasce colorate e senza riga sull'attestato; nel registro l'Allegato A si carica anche senza firma PAdES (la Convenzione solo PAdES). La Convenzione Word è precompilata, senza evidenziazioni gialle (dati mancanti = puntini). - Più edizioni per la stessa scuola: nel modulo del progetto l'interruttore «La stessa scuola può prenotare più edizioni» (schema v47,
progetti_dettagli.piu_edizioni) decide se si può prenotare una sola edizione (predefinito) o più, una prenotazione per ogni edizione. Il programma FSL tiene una voce per edizione (ProgrammaFsl), con le edizioni che si sommano solo se il progetto lo consente. - Formazione Scuola Lavoro = progetto: nel modulo evento, spuntando «Formazione Scuola Lavoro» si apre il modulo del progetto e l'evento diventa un progetto (
progetti.php?id=…&converti=1); le prenotazioni restano e i turni diventano edizioni. Vale anche per gli eventi già segnati FSL, che mostrano l'avviso «Trasformalo in progetto». - Convenzioni da stipulare (scheda «Da stipulare» del pannello FSL,
admin/fsl.php?tab=stipulare): una card per ogni scuola con prenotazioni FSL in corso (anche già confermate e anche scuole scritte a mano), con lo stato della convenzione (da stipulare, valida in registro, ricevuta), le sue prenotazioni e i pulsanti per scaricare già precompilati l'Allegato A (PDF con la scheda completa di ogni attività, o Word) e la Convenzione (Word) daadmin/allegato_a.php. Non serve che la scuola abbia compilato il modulo online né che abbia caricato il logo (non incluso: si aggiunge a mano); se ha compilato il modulo valgono i suoi dati (Dirigente, studenti, tutor, protocollo, logo). Lo stesso Allegato A si scarica dalla riga di ogni prenotazione FSL in Iscrizioni (classiApp\Fsl\ServizioConvenzioniScuole) - Documenti da consegnare prima dell'attività FSL: dopo la prenotazione (anche in attesa della convenzione) il docente referente carica l'elenco degli studenti e l'autorizzazione della scuola in PDF dalla pagina
elenco_studenti.php(la stessa dell'elenco per gli attestati). L'avviso compare nella pagina di conferma e nell'email di prenotazione, con la scadenza (7 giorni prima dell'inizio, o il giorno prima per chi prenota a ridosso). Dal cron: promemoria ogni 7 giorni (al massimo 6) finché manca qualcosa e un ultimo avviso oltre la scadenza. Le autorizzazioni stanno inuploads/autorizzazioni/(bloccata al web) e si scaricano solo daautorizzazione_scuola.php(titolare, gestori, amministratori); in Iscrizioni un badge mostra elenco e autorizzazione e il link per aprirla; sono cancellate con l'anonimizzazione o l'eliminazione della prenotazione (classiApp\Fsl\DocumentiClasseeServizioDocumentiClasse, schema v45) - Scheda di valutazione della struttura ospitante (FSL): a fine attività, con la presenza registrata, il docente riceve il link personale a
valutazione_fsl.php(8 aspetti da 1 a 5, "riproporrebbe", commenti), con un promemoria dopo 7 giorni - Pannello Formazione Scuola Lavoro (
admin/fsl.php), a schede: Riepilogo per anno scolastico (attività, scuole, studenti, presenze, convenzioni mancanti), Convenzioni (registro e registrazione), Verifica iscrizioni, Valutazioni; tabelle con export CSV - Controllo automatico del sito ogni notte dal cron (database, cartelle, spazio su disco, backup, email non partite, pagine pubbliche e file riservati): email agli amministratori solo se qualcosa non va, stato e "Controlla ora" in Sistema
- Anagrafe del personale di Ateneo dalle API pubbliche del portale Unical (rubrica, docenti, corsi di studio), per le strutture scelte (DiBEST di partenza, se ne aggiungono altre dalla tendina delle strutture o col codice) e aggiornata ogni settimana: elenchi Docenti, Personale tecnico amministrativo e Altro personale con filtri per ruolo e struttura. Al login la persona viene collegata per email e inserita nel gruppo Docenti / Personale tecnico amministrativo / Altro personale di Ateneo, utilizzabile per riservare gli eventi
- Referenti dall'anagrafe: in eventi e progetti si cercano per gruppo, ruolo, struttura e nome e si compilano da soli nome, email, telefono e link (resta possibile l'inserimento a mano); il nome porta alla pagina pubblica del docente (
persona.php) con foto (o una sagoma grigia), ruolo, settore, contatti, ricevimento, curriculum e attività sul portale. Foto e schede sono copiate dal portale di Ateneo e rinnovate ogni 7 giorni - Abilitazione dei gestori dall'anagrafe, anche prima del loro primo accesso: l'abilitazione resta in attesa e si attiva al primo login con quell'email. La dashboard avvisa se un gestore o un referente non compare più nell'anagrafe di Ateneo
- Campo "Corso di studio" nel Form Builder: tendina con i corsi dei dipartimenti dell'anagrafe, raggruppati per tipo; quali proporre si sceglie in Corsi e strutture Ateneo
- Nei moduli di prenotazione l'email si scrive a mano e si ripete per conferma (non viene presa dall'accesso)
- Email automatiche: conferma, cancellazione, promemoria (via SMTP configurabile), con layout nel colore dell'area, registro degli invii ed email di prova dal pannello
- Notifiche delle prenotazioni ai gestori, a indirizzi in copia scelti per ogni evento e ai referenti di eventi e progetti, con il riepilogo completo della prenotazione (campi aggiuntivi compresi)
- Badge e barre dei posti disponibili in tempo reale sulle card eventi e in home (liberi / lista d'attesa / esauriti / concluso)
- Colore dell'area coerente su pagine, badge, ricevute ed email, con testo a contrasto calcolato automaticamente
- Accessibilità: struttura dei titoli, landmark, focus da tastiera visibile, contrasti verificati con axe-core
- Stampa lista iscritti in vista ottimizzata per stampa/PDF con filtri attivi
- Ricerca testuale iscritti per nome, cognome, email, codice prenotazione
- Audit log di tutte le operazioni amministrative
- Rate limiting anti-flood sugli endpoint pubblici
- PWA-ready (manifest + service worker + offline fallback): le pagine arrivano sempre dal server, in cache solo le librerie statiche
- Configurazione portale da pannello admin (logo, colori, SMTP, email template)
- Assistenza e Didacticus (
assistenza.php, pulsante «Serve aiuto?» su ogni pagina pubblica,admin/assistenza.php,admin/didacticus.php,src/Assistenza/): chat per studenti, personale ed esterni (link personale, senza registrazione) con le persone dell'ufficio fisso «Assistenza»; risponde prima Didacticus, l'assistente virtuale a regole (nessun servizio esterno né IA generativa: confronta la domanda con le voci scritte dal pannello, con link e allegati, e passa all'operatore quando non basta); notifiche a finestrella (Web Push in PHP puro, cifratura RFC 8291, chiavi in.env:php strumenti/genera_chiavi_push.php email@unical.it), orari, statistiche con Excel/PDF/CSV, conservazione 12 mesi (CONSERVAZIONE_ASSISTENZA_MESI) - Area personale a cruscotto per profilo (
area_personale.php,src/Portale/Area/, pannelloadmin/area_personale.php, schema v93-94): studente, docente, Direttore, personale, gestore, amministratore ed esterno vedono tessere diverse, una per argomento (pratiche, assistenza, tutorato, eventi, profilo, calendario…) con le novità in rosso (cose da firmare, richieste, messaggi, posto liberato); ogni tessera porta alla sua pagina (miei_eventi.php,profilo.php,il_mio_tutorato.php,calendario.php). Tessere e ordine li sceglie l'amministratore dal pannello; i tirocini rimandano alla piattaforma TSP 2.0 - Calendario personale (
calendario.php,calendario_ics.php,src/Portale/CalendarioPersonale.php, schema v95): eventi prenotati, aule e laboratori, ricevimenti e scadenze in un posto solo, con file.icse abbonamento del telefono (link segreto personale, rigenerabile) - Riepilogo settimanale con l'agenda (
src/Portale/RiepilogoAgenda.php): l'email «Da fare per te» porta anche gli appuntamenti dei sette giorni e arriva a chi ha solo qualcosa in agenda (studenti compresi); spento di partenza, lo accende l'amministratore da Gestione del portale → Email e promemoria - Ricerca unica (
ricerca.php,src/Portale/RicercaGlobale.php): eventi e progetti, notizie e pagine, guide «Come si fa», docenti e risposte di Didacticus, raggruppati - Stile comune e tema scuro (
assets/css/portale-ui.css,inc/ui.php): cinque colori fissi per gli stati, stati vuoti con pulsante utile, tema chiaro/scuro per l'area personale e le sue pagine - App installabile (PWA): manifest con scorciatoie, service worker, pulsante «Installa l'app» nell'area personale (su iPhone/iPad spiega «Aggiungi alla schermata Home»)
| Componente | Versione minima |
|---|---|
| PHP | 8.2+ |
| MySQL / MariaDB | 5.7+ / 10.3+ |
| Web server | Apache (mod_rewrite) o Nginx |
| SimpleSAMLphp | 1.19+ (solo per SSO istituzionale) |
Librerie front-end utilizzate (incluse via CDN, nessun Composer richiesto):
- Bootstrap 5.3
- Font Awesome 6.4
- DataTables
- Chart.js
- SortableJS (drag & drop)
Invio email: client SMTP interno in inc/base.php (inviaNotificaEmail()), senza librerie esterne: STARTTLS/SSL, autenticazione, verifica di ogni risposta del server, registro degli invii nella tabella log_email. Se l'host SMTP non è configurato o non è raggiungibile usa la funzione mail() di PHP.
git clone https://github.com/TUO_USERNAME/eventidibest-cms.git
cd eventidibest-cmscp .env.example .envModifica .env con i tuoi parametri MySQL:
DB_HOST=localhost
DB_USER=db_username
DB_PASS=db_password
DB_NAME=eventi_dibestOpzione A — Installer via browser (consigliata):
Visita http://tuo-dominio/install.php e compila il form con le credenziali DB e il profilo del Super Admin. Al termine, elimina install.php dal server.
Opzione B — Import SQL manuale:
mysql -u utente -p eventi_dibest < database/schema.sqlPoi imposta manualmente le credenziali in .env.
Il file .htaccess e gia predisposto per Apache. Per Nginx, aggiungi:
location / {
try_files $uri $uri/ /index.php?$query_string;
}chmod 775 uploads/ cache/La cartella cache/ deve essere scrivibile da PHP: oltre alla cache della configurazione contiene i marcatori degli aggiornamenti del database (vedi sotto). La cartella del codice invece non deve essere scrivibile: creare una nuova area non genera file.
Backup: admin/cron_backup.php esporta il database (.sql.gz) e i file del sito (.zip) in backups/ (7 giorni), li copia nella cartella del NAS indicata da BACKUP_NAS_PATH (conservazione BACKUP_NAS_GIORNI) e invia una copia del solo database, cifrata AES-256 con BACKUP_PASSWORD, a BACKUP_EMAIL (BACKUP_EMAIL_FREQUENZA: settimanale, giornaliera, no). Esito e configurazione nel pannello Sistema; se qualcosa non va gli amministratori ricevono un avviso. Crontab consigliato: 30 2 * * * php /percorso/eventi/admin/cron_backup.php. Ogni lunedì cron_background.php manda agli amministratori il riepilogo settimanale delle email (inviate, fallite, stato del backup). Una volta a settimana lo stesso script aggiorna l'anagrafe del personale e i corsi di studio dal portale di Ateneo.
Dopo ogni backup il database si rilegge per intero e lo ZIP dei file si riapre (VerificaBackup): se non torna arriva l'avviso. Per provare o fare un ripristino: php strumenti/ripristina_backup.php verifica|prova|file|database (vedi l'intestazione del file e la guida «Amministratore»); prova importa il database in un database a parte senza toccare il portale.
Gli script cron_background.php, cron_attestati.php, admin/cron_reminders.php e admin/cron_backup.php si avviano da riga di comando (es. php cron_background.php) oppure via URL con la chiave CRON_KEY del file .env (almeno 16 caratteri), es. https://tuo-dominio/eventi/cron_background.php?key=LA_TUA_CHIAVE. Senza chiave rispondono 403.
Su Windows con XAMPP, da Git Bash: bash strumenti/locale/avvia.sh avvia MariaDB e il portale su http://127.0.0.1:8080/eventi/ con un database separato (eventi_locale) e dati di esempio inventati (--nuovo li ricrea, --ferma spegne tutto). Usa il file .env.locale (creato da solo, mai da caricare sul server): nessuna email parte, si leggono in /__email; l'accesso SSO è sostituito da /__accesso; il cron si lancia da /__cron. Le poche righe del codice che lo permettono si attivano solo con il server integrato di PHP (PHP_SAPI === 'cli-server'), mai con Apache.
Prima di ogni caricamento: /c/xampp/php/php.exe -d extension=zip strumenti/prove/esegui.php lancia le prove automatiche (funzioni su un database usa e getta e, se l'ambiente locale è acceso, pagine, file riservati, pannello e un'iscrizione completa). Esce con codice 1 se una prova fallisce. Dopo il caricamento, sul server: PHP_BIN=/opt/lampp/bin/php bash strumenti/verifica_sito.sh (controlli dall'esterno) e PHP_BIN=/opt/lampp/bin/php MYSQL_BIN=/opt/lampp/bin/mysql PROVE_DB_USER=… PROVE_DB_PASS=… bash strumenti/prove_server.sh (estensioni PHP, sintassi, cartelle scrivibili e protette, prove delle funzioni su un database usa e getta eventi_prova: serve un utente MySQL che possa crearlo; il database del portale non viene toccato e i file delle prove vanno in cache/prove/). PROVE_SALTA_DB=1 salta le prove sul database.
Per le guide e le presentazioni: php strumenti/locale/scenario_demo.php crea persone, uffici, pratiche in vari punti dell'iter, una seduta con verbale in firma, risorse con prenotazioni e liste d'attesa; python strumenti/locale/schermate_documentazione.py fa le schermate in documentazione/schermate/ (Chrome in modalità headless, nessuna libreria esterna); python strumenti/locale/presentazioni.py e bash strumenti/locale/genera_pdf.sh producono le presentazioni dell'iter e i PDF delle guide; php strumenti/locale/collaudo_pratiche.php porta ogni pratica attiva lungo il suo iter e dice dove si ferma.
Il codice non dipende dal nome della cartella. Per passare da /eventi a /didattica sul server: sudo bash /opt/lampp/htdocs/eventi/strumenti/migra_a_didattica.sh (sposta la cartella, crea in /eventi un rimando permanente pagina per pagina, imposta URL_SITO nel .env); poi aggiornare il crontab come indicato dallo script. --annulla torna a /eventi.
Nel .env: FIRME_GIORNI_SOLLECITO=5 (solleciti delle firme ferme), INCARICHI_SOLO_SPID_CIE=1 (lo studente conferma solo se è entrato con SPID o CIE; il metodo si legge dagli attributi e dal contesto di autenticazione SAML in metadati_accesso_saml()), ARUBA_ARSS_URL, ARUBA_ARSS_DOMINIO e ARUBA_ARSS_CERTID per la firma remota Aruba (ArubaSignService, pdfsignatureV2 con profilo PADESBES). Senza ARUBA_ARSS_URL docente e direttore scaricano il PDF, lo firmano in PAdES e lo caricano. I PDF stanno in uploads/incarichi/ e i verbali firmati in uploads/verbali/ (bloccate al web); il modello Word è modelli_documenti/lettera_incarico_tutorato.docx.
Conservazione (da concordare con il DPO, descritta in privacy.php): CONSERVAZIONE_INCARICHI_MESI (0 = mai) cancella dati personali, PDF e registro delle lettere protocollate o annullate da più di N mesi (restano nome, ore, compenso e protocolli); CONSERVAZIONE_CONVOCAZIONI_MESI (predefinito 12) cancella link, email e motivi delle assenze delle convocazioni.
Il modulo «Richiesta di convalida/riconoscimento esami» nasce non attivo (Didattica → Moduli e documenti: controllalo e attivalo). Lo studente entra con le credenziali di Ateneo (niente documento d'identità), indica anagrafica, corso di studio (anagrafe), carriera precedente ed esami (catalogo di Ateneo per l'Unical, tabella con codice, denominazione, CFU, S.S.D., voto e data per gli altri Atenei, con i programmi in PDF); la casella «a scelta» di ogni esame chiede se nel piano c'è un insegnamento da eliminare. All'invio il portale genera la domanda in PDF/A-2b (inc/convalide.php, PdfSemplice con 'pdfa' => true: caratteri Liberation incorporati da assets/fonts/, licenza SIL OFL; profilo assets/modelli/sRGB.icc; metadati XMP propri e riquadro finale con accesso, IP e impronta SHA-256). Iter: Ufficio protocollo (registra numero e data e, nei moduli con l'opzione «marca da bollo», spunta il pagamento: senza la spunta la pratica resta protocollata al protocollo) → ufficio del corso di studio scelto in automatico dal consiglio che ha il corso (indica i corsi nel consiglio; senza, vale il corso citato nel nome del consiglio) → il referente compila «convalidato con» dall'anagrafe e la richiesta sul piano, che vanno nel verbale e nell'estratto → dopo la seduta, dall'elenco, «Invia alla segreteria» (uffici di tipo Segreteria studenti, da creare in Ufficio e ricevimento) con estratto e verbale. Gli uffici hanno un tipo (protocollo, corso di studio con il consiglio, segreteria studenti); le persone si aggiungono agli uffici come operatori. Lo stesso flusso vale per ogni nuovo modulo: nel costruttore si sceglie l'iter (es. Ufficio protocollo → «Ufficio del corso di studio» → «Segreteria studenti»), la domanda in PDF/A e la marca da bollo; dopo il protocollo la pratica passa al passo successivo dell'iter. Domanda ed estratto del verbale sono in PDF/A con il logo a sinistra.
Con l'aggiornamento settimanale dell'anagrafe arrivano anche gli insegnamenti dei corsi del proprio dipartimento (la prima struttura) dalle API activities del portale di Ateneo. Nelle API academic_year è la coorte: l'anno in cui l'insegnamento si tiene è coorte + anno di corso − 1. Si conservano l'anno accademico in corso e il successivo (Anagrafi → Insegnamenti).
Non servono script SQL manuali dopo un aggiornamento del codice. Al primo accesso la funzione assicura_schema() in inc/schema.php crea le tabelle e le colonne mancanti e corregge i tipi di colonna dei database più vecchi, poi scrive un marcatore (es. cache/schema_v29.ok) e da quel momento non interroga più lo schema. Le pagine non modificano mai la struttura del database: ogni nuova colonna va aggiunta lì, cambiando il nome del marcatore.
Se usi SimpleSAMLphp per l'autenticazione istituzionale, modifica le impostazioni in saml_login.php e functions.php puntando alla tua istanza SimpleSAML.
La funzione sync_sso_user() in functions.php gestisce automaticamente la mappatura degli attributi SAML per i diversi tipi di utente:
| Tipo utente | Attributo email cercato | Fallback |
|---|---|---|
| Studente | mail / OID 0.9.2342.19200300.100.1.3 |
nessuno (i nomi degli attributi ricevuti finiscono nel log) |
| Dipendente | mail / OID 0.9.2342.19200300.100.1.3 |
nessuno |
| Esterno (CIE/SPID) | mail / OID 0.9.2342.19200300.100.1.3 |
nessuno |
Il tipo viene riconosciuto tramite gli attributi matricola_studente e matricola_dipendente dell'IdP. Le email errate salvate in precedenza vengono corrette automaticamente al login successivo.
eventidibest-cms/
├── admin/ # Pannello di amministrazione
│ ├── admin_header.php # Autenticazione, RBAC, menu dell'area corrente e barra superiore
│ ├── dashboard.php # Dashboard con KPI e grafici, scelta dell'area
│ ├── aree.php # Elenco delle aree (gestisci, visibile/nascosta, elimina)
│ ├── inizio.php # Ingresso: scelta della sezione e dell'area (card)
│ ├── nuova_area.php # Creazione di un'area (nasce nascosta, voce di menu nascosta)
│ ├── risorse.php # Calendari e risorse: risorse, orari settimanali e chiusure
│ ├── prenotazioni_risorse.php # Calendari e risorse: agenda, prenotazioni, approvazioni, CSV (dashboard dell'area)
│ ├── didattica.php # Didattica: prepara i dati comuni e include la scheda (stessi indirizzi ?tab=…)
│ ├── didattica_pratiche.php # scheda Pratiche (azioni e pagina)
│ ├── didattica_sedute.php # scheda Sedute e verbali: consigli, convocazione, presenze, decisioni, estratti, verbale PAdES
│ ├── didattica_moduli.php # scheda Moduli e documenti (costruttore dei moduli online)
│ ├── didattica_ufficio.php # scheda Ufficio e ricevimento
│ ├── didattica_statistiche.php # scheda Statistiche
│ ├── didattica_archivio.php # scheda Archivio verbali: caricamento dei PDF, ricerca nel testo
│ ├── didattica_accessi.php # accessi con password alla pagina pubblica dei verbali e registro
│ ├── tutorato.php # Tutorato: bandi e lettere di incarico (iter SPID/CIE → PAdES docente → PAdES direttore → protocollo), registro e fine attività
│ ├── utenti.php # Utenti, gruppi e abilitazioni, con riepilogo per area
│ ├── scuole.php # Anagrafe scuole: caricamento del file del Ministero e abbinamento dello storico, scuole collegate con i docenti (le convenzioni sono in fsl.php)
│ ├── convenzione_file.php # Scarica la convenzione o l'Allegato A firmati (solo amministratori; i file sono bloccati al web)
│ ├── fsl.php # Formazione Scuola Lavoro a schede: riepilogo per anno scolastico, convenzioni, verifica delle iscrizioni, valutazioni
│ ├── anagrafe_personale.php # Anagrafi di Ateneo: docenti, PTA, insegnamenti (anagrafe_insegnamenti.php), corsi di studio, strutture
│ ├── anagrafe_docenti.php # Apre l'elenco dei docenti (anagrafe_pta.php: personale tecnico amministrativo)
│ ├── cerca_personale.php # Ricerca nell'anagrafe del personale per referenti e abilitazioni (JSON)
│ ├── eventi.php # CRUD eventi, turni, sezioni e referenti, duplicazione
│ ├── progetti.php # Progetti: scheda completa, tipo (scuole o generico), edizioni, attestati
│ ├── partecipanti.php # Studenti e attestati: elenco delle classi dell'area e dettaglio di ciascuna (invio al docente)
│ ├── iscritti.php # Gestione prenotazioni (ricerca, presenza, azioni di massa)
│ ├── scanner.php # Scanner check-in integrato con contatore in tempo reale
│ ├── impostazioni_area.php # Colori, layout e regole di ogni area
│ ├── testata.php # Testata, carosello e widget della home
│ ├── stampa_lista_iscritti.php # Vista stampabile/PDF lista iscritti
│ ├── messaggi.php # Sistema messaggistica admin<->utente
│ ├── sondaggi.php # Questionari: campi, logica condizionale, statistiche
│ ├── menu.php # Menu a 3 livelli con drag & drop
│ ├── statistiche.php # KPI presenze, trend, Live/Storico, export CSV/Excel
│ ├── audit_log.php # Log attivita sistema
│ └── ...
├── database/
│ └── schema.sql # Schema completo del database (23 tabelle)
├── uploads/ # File caricati (escluso da git)
├── cache/ # Cache runtime (escluso da git)
├── assets/ # Icone PWA
├── config.php # Connessione DB, session, security headers, CSP
├── functions.php # Carica le funzioni condivise da inc/ (nell'ordine giusto)
├── inc/ # Funzioni per argomento: base, sezioni, aspetto, liste_attesa, sistema, dati, eventi_progetti, anagrafi, fsl, prenotazioni, attestati, risorse, didattica, catalogo_ateneo, pdf, tutorato, tutorato_registro, sedute, convalide, agenda, organizzazione, seminari, avvisi, report_ambiti, schema (bloccata al web); `db_righe()`/`db_riga()`/`db_valore()`/`db_esegui()` in base.php per le query preparate
├── modelli_documenti/ # Modelli interni per i documenti precompilati (bloccata al web)
├── strumenti/ # verifica_sito.sh, prove_server.sh, ambiente locale (locale/) e prove automatiche (prove/); bloccata al web
├── valutazione_fsl.php # Scheda di valutazione della struttura ospitante (link personale del docente)
├── convenzione_precompilata.php # Convenzione FSL già compilata con i dati della prenotazione (.docx)
├── install.php # Installer guidato (da eliminare dopo l'uso)
├── index.php # Homepage pubblica a widget
├── master_template.php # Motore dei layout delle pagine area (le pagine area lo includono)
├── checkin.php # Esito del QR letto con la fotocamera del telefono (admin)
├── self_checkin.php # Self check-in studente
├── area_personale.php # Cruscotto a tessere per profilo (tessere in inc/area/, classi in src/Portale/Area/)
├── miei_eventi.php # Prenotazioni, storico e attestati, programma FSL, sondaggi, aule prenotate, scanner QR
├── calendario.php # Calendario personale (eventi, aule, ricevimenti, scadenze) con .ics e abbonamento
├── calendario_ics.php # File .ics del calendario personale (accesso o link segreto ?t=)
├── ricerca.php # Ricerca unica raggruppata
├── elenco_studenti.php # Elenco degli studenti inserito dal docente (progetti per le scuole)
├── attestati_gruppo.php # Attestati della classe, uno per pagina
├── verifica_attestato.php # Verifica pubblica di un attestato dal codice o dal QR
├── privacy.php # Informativa privacy e cookie
├── crediti.php # Credits: copyright, realizzazione, software open source e licenze
├── cerca_scuole.php # Anagrafe delle scuole per il campo "Scuola" dei moduli: regioni, province, comuni e scuole (JSON)
├── calendario_area.php # Pagina pubblica delle aree Calendari e risorse (incluso da master_template.php)
├── risorsa_ics.php # File .ics di una prenotazione di aula, laboratorio o sportello
├── persona.php # Pagina pubblica di un referente scelto dall'anagrafe di Ateneo
├── incarico.php # Lettera di incarico: controllo e conferma dello studente con SPID/CIE (link personale)
├── firma_incarico.php # Lettera di incarico: firma PAdES del docente e del direttore; dichiarazione di fine attività del docente
├── registro_tutorato.php # Registro delle attività di tutorato (tutor: segna le ore; docente: approva e conferma la fine)
├── avvisi.php # Avvisi per email dei nuovi eventi: iscrizione per ambito, conferma, cancellazione
├── agenda.php # Agenda unica di eventi e seminari con filtri per ambito; agenda_ics.php: lo stesso in .ics
├── orientamento.php # Vetrina dell'Orientamento: aree per futuri studenti, Formazione Scuola Lavoro, prossimi appuntamenti
├── giustifica.php # Giustificazione dell'assenza da una seduta (link personale della convocazione)
├── firma_verbale.php # Verbale della seduta: firma PAdES del segretario e del coordinatore (Aruba o PDF firmato)
├── cerca_insegnamenti.php # Catalogo di Ateneo per i campi Insegnamento dei moduli (JSON)
├── profilo.php # Profilo utente: dati personali, scheda di Ateneo ed email modificabili
├── il_mio_tutorato.php # Tappe e documenti degli incarichi di tutorato
├── sw.js # Service Worker (PWA)
└── manifest.json # Web App Manifest (PWA)
Il database e` composto da 23 tabelle:
| Tabella | Descrizione |
|---|---|
ruoli |
Ruoli utente (Admin, Gestore, Studente, Dipendente, Ospite) |
utenti |
Profili utente sincronizzati da SSO |
pagine_eventi |
Sezioni/aree del portale (Welcome Week, OpenLab, ...) |
sottocategorie |
Sezioni degli eventi per area (con opzione "affiancata in alto" nel layout Griglia) |
eventi |
Singoli eventi e progetti (campo tipo) con locandina e accesso per ruolo |
progetti_dettagli |
Scheda di progetti ed eventi (per gli eventi: i referenti). Progetti: tipo (scuole o generico), attestati, periodo, requisiti, partecipanti per iscrizione, referenti, moduli, obiettivi e competenze |
partecipanti_prenotazione |
Studenti di un'iscrizione ai progetti per le scuole, con il codice di verifica dell'attestato |
turni |
Slot orari con posti, apertura/chiusura, lista attesa |
prenotazioni |
Prenotazioni con QR code univoco e stato |
campi_form |
Campi custom del form prenotazione per area/evento |
messaggi_prenotazioni |
Chat admin ↔ utente per ogni prenotazione |
sondaggi |
Questionari collegati agli eventi |
sondaggi_domande |
Domande del questionario (ordine e condizione di visibilità) |
sondaggi_risposte |
Risposte anonime |
template_email |
Template email personalizzabili |
impostazioni_sistema |
Config SMTP e template email di sistema |
configurazione_portale |
Impostazioni grafiche del portale |
menu_voci |
Voci del menu di navigazione principale (nascondibili) |
scuole |
Anagrafe delle scuole del Ministero (codice meccanografico, istituto di riferimento, comune, tipo); le prenotazioni e gli utenti hanno il campo scuola_codice |
personale_ateneo |
Anagrafe del personale delle strutture scelte (API del portale Unical): ruolo, struttura, gruppo, settore, recapiti, scheda con foto; gli utenti hanno il campo persona_id |
anagrafe_strutture |
Strutture di Ateneo da sincronizzare, con l'esito dell'ultimo aggiornamento |
corsi_studio |
Corsi di studio dei dipartimenti dell'anagrafe, con la scelta di quelli proposti nei moduli |
insegnamenti |
Anagrafe degli insegnamenti dei corsi del Dipartimento (API activities); le attività collegate hanno progetti_dettagli.insegnamento_id |
risorse, risorse_orari, risorse_chiusure |
Calendari e risorse: aule, laboratori e sportelli con regole di prenotazione, orari settimanali e chiusure (della risorsa o di tutta l'area) |
prenotazioni_risorse |
Prenotazioni a slot delle risorse (stato confermata / da approvare / rifiutata / annullata, serie settimanale, codice, promemoria) |
abilitazioni_ambito |
Abilitazioni per perimetro: tutti i progetti / tutti gli eventi di un'area, Formazione Scuola Lavoro (tutto, convenzioni, anagrafe scuole) |
abilitazioni_attesa |
Abilitazioni date a chi non ha ancora fatto accesso: si attivano al primo login con quell'email |
log_attivita |
Audit trail di tutte le operazioni admin |
rate_limit_attempts |
Protezione anti-flood endpoint pubblici |
slide_home |
Immagini del carosello della home |
log_accessi |
Registro degli accessi SSO |
log_email |
Registro degli invii email (accettate / rifiutate dal server SMTP) |
didattica_consigli, didattica_consigli_persone, didattica_sedute_presenze |
Consigli dei corsi di studio con referenti e componenti; presenze di ogni seduta |
pratiche_operatori |
Operatori che hanno avuto in carico una pratica (la vedono e la integrano anche dopo il passaggio) |
ateneo_cds, ateneo_insegnamenti, ateneo_insegnamenti_scaricati |
Catalogo di Ateneo: corsi di studio per anno di offerta e insegnamenti scaricati quando servono |
tutorato_bandi, tutorato_incarichi, tutorato_eventi |
Bandi di tutorato, lettere di incarico (dati, stato, conferma SPID/CIE, PDF, protocollo, fine attività, solleciti) e loro storico |
tutorato_registro |
Registro delle attività del tutor (giorno, ore, attività, approvazione del docente) |
avvisi_iscrizioni, avvisi_eventi |
Iscritti agli avvisi per email (argomenti, conferma) ed eventi già annunciati |
copie_configurazione |
Copie di home e menu salvate prima di applicare l'organizzazione proposta (ripristino) |
didattica_convocazioni |
Convocazioni delle sedute per email: link personale per giustificare l'assenza, motivo |
- Tutti i parametri utente sono passati tramite prepared statements (MySQLi)
- CSRF token su tutti i form e sulle richieste AJAX
- Controllo dei permessi per ogni azione: un gestore agisce solo su eventi, turni e prenotazioni della propria area o dei propri eventi
- Output HTML e dati passati a JavaScript sempre codificati; i codici QR letti dallo scanner non vengono mai aperti come link
- Colori personalizzati validati prima di essere usati negli stili
- Rate limiting sugli endpoint di prenotazione e sondaggio
- Ruolo richiesto per prenotare e appartenenza del turno all'area verificati anche dal server
- Script cron eseguibili solo da riga di comando, con
CRON_KEYo da un utente con il ruolo adatto - Content Security Policy (CSP) configurata in
config.php - Subresource Integrity: tutte le librerie da CDN hanno l'impronta SHA-384 (
integrity), anche quelle caricate su richiesta - Nessuna connessione automatica a terzi: caratteri (Titillium Web, Lora, Dancing Script) e librerie (Bootstrap Italia, Bootstrap, Font Awesome, jQuery, DataTables, Select2, Chart.js, SortableJS, FullCalendar, TinyMCE, html2canvas, jsPDF, JSZip) sono in
assets/vendor/, con la stessa struttura dei CDN, e si richiamano conurl_vendor(); la CSP non ammette più Google Fonts - Privacy: pagina
privacy.phpcon l'informativa (art. 13 GDPR) e l'elenco dei cookie tecnici, collegata ai moduli e al piè di pagina; nei moduli si dichiara la presa visione (base giuridica: compito di interesse pubblico, non il consenso); paginacrediti.phpcon copyright, realizzazione e licenze del software open source - Conservazione dei dati (
cron_background.php, durate nel.env): registri di accessi ed emailCONSERVAZIONE_LOG_MESI(12), azioni amministrativeCONSERVAZIONE_AUDIT_MESI(24), prenotazioni anonimizzate dopoCONSERVAZIONE_PRENOTAZIONI_MESIe account inattivi eliminati dopoCONSERVAZIONE_UTENTI_MESI(0 = mai, da concordare con il DPO), esclusi amministratori e chiunque abbia un'abilitazione (area, attività, progetti, eventi o FSL) - Librerie dei QR sul server: generazione dei QR (
qrcode-generator) e scanner del check-in (html5-qrcode) sono inassets/js/e si caricano conscript_libreria(); se il file locale mancasse si ripiega sul CDN, con la stessa impronta - Eliminazione di un'area solo scrivendo il nome dell'area (controllato anche dal server), con il riepilogo di eventi, prenotazioni, studenti e sondaggi che verrebbero cancellati
- QR generati nella pagina (ricevute, badge, QR d'aula, attestati): nessun codice o token di check-in inviato a servizi esterni
- Codici di prenotazione e di attestato generati con
random_bytes/random_int - HTTP Security Headers: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy
- Cookie di sessione:
Secure,HttpOnly,SameSite=Lax, sempre aperti daconfig.php - Dopo "Esci" nessun accesso automatico dalla sessione SSO di Ateneo finché l'utente non rientra con "Accedi"
- Password SMTP cifrate nel database, mai esposte nel codice sorgente
uploads/e.envesclusi da git e protetti da.htaccess
Pull request e segnalazioni di bug sono benvenute. Per modifiche sostanziali, apri prima una issue per discutere il cambiamento proposto.
Questo software e` distribuito sotto licenza GNU Affero General Public License v3.0.
Vedi il file LICENSE per il testo completo.
In sintesi: puoi usare, modificare e distribuire il software liberamente, ma qualsiasi versione modificata che esegui su un server deve rendere il codice sorgente disponibile agli utenti del servizio.
Emanuele Dodaro — Universita della Calabria, Dipartimento DiBEST
Progetto sviluppato per la gestione eventi accademici.