20 agosto 2024
Riprendo lo sviluppo del sito con un progetto relativo al lavoro e riservato agli utenti registrati. Per questo non ne parlerò nel dettagli qui ma mi limiterò a citarne gli aspetti tecnici relativi all'area riservata. Si tratta di consentire agli utenti l'inserimento di alcuni dati raccolti durante la giornata lavorativa e consentire fondamentalmente due cose: creare automaticamente una relazione sul lavoro svolto e generare statistiche.
Aggiornamento all'ultima versione di Joomla
Visto che non toccavo il sito da più di un anno e Joomla è andato avanti fino alla versione 5 ho approfittato per fare un aggiornamento fino alla 4.4.6 (ultima nella major release 4). Non arrivo alla 5, per ora, nell'ottica di fare un passo alla volta.
Scelta del componente per la gestione dei Form
Per l'inserimento dei dati ho deciso di installare un nuovo componente che gestisce i form. Ho valutato tre progetti. RSForm, Fabric e ChronoForms.
Fabrik l'ho abbandonato subito in quanto un po' troppo complesso per l'immediatezza che cercavo ma con la certezza di volerne sapere un po' di più, anche perché lo avevo sfiorato anche in passato in uno dei miei tanti progetti poi abbandonati.
ChronoForms lo avevo valutato qualche tempo fa, all'uscita della versione 7, per usarlo in una versione evoluta di iBet. Mi era piaciuto tantissimo ma ho dovuto sospendere lo sviluppo in quanto ho avuto dei problemi con l'utilizzo dei campi calendar nelle righe delle bollette. Ora siamo arrivati alla versione 8, speravo di trovare ampia documentazione e la soluzione di molti problemini ma pare che invece la community sia un bel po' sfiduciata dalla lentezza dello sviluppo e dalle incompatibilità con le vecchie versioni.
Questa situazione mi ha fatto valutare l'utilizzo di RSForm che avevo valutato anche all'epoca, mi era piaciuto ma aveva la limitazione di poter disporre i campi al massimo su 4 colonne, cosa un po' scomoda per iBet ma che per il nuovo progetto può andar bene. Inoltre ho trovato un canale YouTube italiano che ne spiega l'utilizzo in modo egregio (https://www.youtube.com/@pixedweb). Un problema grosso sta nella mancanza delle aree 'repeater' che avevo trovato in ChronoForms e che qui non ci sono, così le eventuali righe ripetute devono essere simulate in qualche modo visualizzando o meno dei campi ripetuti.
Creazione di Utenti
Il progetto lavorativo prevede che gli utenti siano registrati sul sito. Ora c'è da decidere se usare gli utenti Joomla o creare una tabella a parte. L'integrazione con gli utenti Joomla sembra richiedere un po' di lavoro aggiuntivo ma, oltre a portare con sé l'infrastruttura alle spalle, mi darebbe l'opportunità di studiare i campi aggiuntivi di Joomla. I campi aggiuntivi possono essere previsti negli articoli e negli utenti. Prevedono che si crei prima un gruppo in cui inserire i relativi campi.
Ogni gruppo avrà una tab nella gestione di utenti e articoli sotto la quale verranno mostrati solo i campi che ne fanno parte.
Ho creato un gruppo Officer, nella parte relativa agli Utenti (non negli Articoli), per i campi aggiuntivi relativi agli utenti che sono anche colleghi (potrebbero esserci tipologie di utenti diverse per altre aree del sito), e un campo Ruolo che identifica l'utente come agente, ufficiale o dirigente. Lo scopo della distinzione sarebbe quello di consentire o meno alcune future funzioni nel sito.
Una cosa che ho imparato subito è che il campo type di un custom field non può essere cambiato. Me ne sono accorto perché ho pensato bene (o male) di assegnare il tipo "integer" per la matricola ma questo fa scegliere il numero da un popup dove ci sono le scelte da 1 a 100 (di default ma è configurabile) e non un campo numerico libero. Poco male, lo cancello e lo ricreo come campo di testo.
Campi aggiuntivi impostati e messi da parte, mi metto al lavoro sul form di inserimento dele operazioni. Il focus deve essere posto sulla velocità di inserimento dell'evento, non più di cinque secondi altrimenti l'utente non sarà mai invogliato ad usare l'applicazione.
L'idea è quella di avere la maggior parte dei campi in forma di scelte fisse provenienti da tabelle. Le tabelle saranno inserite da utenti abilitati (e qui torna utile la distinzione agenti/funzionari/dirigenti).
The Login Situation
Titolo del paragrafo che prende a piene mani dall'episodio The Bonnie Situation di Pulp Fiction, quello con Mr.Wolf per intenderci.
Ma a cosa mi riferisco? Probabilmente un giorno tutto ciò mi sarà chiaro ma Joomla ha una gestione del login degli utenti che al momento mi sembra quanto meno strana.
In pratica il form di login può presentarsi in due forme: inserito in un modulo posto in una qualsiasi posizione prevista dal template oppure come contenuto di una pagina che deriva dalla creazione di un'apposita voce di menu.
Poco male, si dirà, basta sceglierne uno e non preoccuparsi. In effetti io ho scelto di mettere il form in un modulo (anzi, credo che sia già previsto appena si installa Joomla) e, fin quando le cose vanno bene è tutto a posto. Poi un giorno sbagli ad inserire la password e ti accorgi che il messaggio d'errore viene visualizzato all'interno della pagina. Ci può stare ma il brutto è che, subito sotto al messaggio d'errore, viene visualizzato anche il form di login così ci si trova con una pagina web in cui ci sono due form di login, quello della pagine e quello del modulo.
In realtà funziona tutto ma è veramente brutto. Ancor più brutto il fatto che, senza aver impostato nulla, Joomla va a cercare la pagina da visualizzare tra quelle possibili andando ad infilare il form in mezzo ad articoli o in home page.
Ho cercato soluzioni ma quella più semplice, e che in fondo mi piace anche di più, è stata quella di eliminare il modulo e creare due menu.
Un menu Login accessibile agli utenti guest e un menu Logout per gli utenti Registered.
Nella creazione dei menu c'è proprio la scelta di puntare il prima a una pagina col form di login e il secondo a una funzione che effettua il logout e fa scegliere la pagina dove andare.