Refactoring dei nomi dei campi di LimeSurvey 7
From LimeSurvey Manual
Refactoring dei nomi dei campi e delle tabelle delle risposte - LimeSurvey 7
LimeSurvey 7 introduce una importante revisione del modo in cui vengono generati le tabelle delle risposte e i nomi dei campi. Questo aggiornamento modernizza convenzioni di denominazione interne in uso da molto tempo e crea una base più prevedibile e solida per plugin, integrazioni e sviluppi futuri.
Questa pagina è dedicata al refactoring della tabella delle risposte e dei nomi dei campi.
Trattandosi di una modifica strutturale, qualsiasi personalizzazione che si basi sulla vecchia denominazione potrebbe richiedere aggiornamenti. Questa pagina spiega cosa cambia, come eseguire i test in sicurezza e come prepararsi all'aggiornamento.
1. Cosa cambia
1.1 Nuovi nomi delle tabelle
LimeSurvey ora utilizza uno schema di denominazione coerente per le tabelle relative alle risposte.
| Vecchio nome della tabella | Nuovo nome della tabella |
|---|---|
old_survey_<sid>_<timestamp>
|
old_responses_<sid>_<timestamp>
|
old_survey_<sid>_timings_<timestamp>
|
old_timings_<sid>_<timestamp>
|
survey_<sid>
|
responses_<sid>
|
survey_<sid>_timings
|
timings_<sid>
|
Qualsiasi query SQL, integrazione o plugin che faccia riferimento a queste tabelle potrebbe richiedere modifiche.
1.2 Nuova struttura dei nomi dei campi
I nomi dei campi ora seguono un formato prevedibile e coerente. Esempi:
Q<questionId>- domanda principaleQ<questionId>_S<subquestionId>- sottodomandeQ<questionId>_C<suffix>- commento o altri campi- campi della classifica:
Q<questionId>_S<subquestionId>- gli elementi della classifica ora sono sottodomande (vedere 1.3) - campi dei tempi: a livello di domanda o di gruppo a seconda del contesto
Questo sostituisce la vecchia denominazione basata su sidXgidXqid.
1.3 Domande di tipo classifica
Le domande di tipo classifica ora funzionano come gli altri tipi di domanda basati su sottodomande:
- Gli elementi sono sottodomande. Gli elementi da ordinare sono memorizzati come sottodomande (tipo
R), non come opzioni di risposta. - I nomi dei campi utilizzano il formato standard delle sottodomande
Q<questionId>_S<subquestionId>(uno per ogni elemento ordinato). - Le risposte sono memorizzate in un'unica colonna JSON
Q<questionId>, sotto forma di array ordinato di codici degli elementi in cui la posizione corrisponde alla posizione in classifica. Esempio:["3", "1", "2"]
2. Perché è importante
Questa revisione riguarda schemi di denominazione definiti formalmente e utilizzati per molti anni, e li porta in una struttura coerente e solida su cui poter costruire in futuro.
Modifiche strutturali come questa raramente sono semplici. Toccano parti del sistema su cui si basano molti plugin e integrazioni, ed è per questo che spesso vengono rimandate a causa della loro complessità. Ma mantenere coerenza e prevedibilità è importante per la stabilità a lungo termine.
Affrontando il problema ora, rendiamo LimeSurvey più pulito e più facile da estendere, anche se la modifica è per lo più invisibile in superficie.
3. Come visualizzare in anteprima i nuovi nomi dei campi
Per vedere come un nome di campo esistente verrà mappato nella nuova struttura di LS7, è possibile eseguire i seguenti passaggi:
- Eseguire il backup del database, poiché le modifiche non sono reversibili e, in caso di problemi, sarà utile disporre del database precedente alla modifica per il ripristino
- Eseguire il checkout del branch develop-major:
git checkout develop-major
oppure clonare/scaricare direttamente il progetto da questo branch all'indirizzo https://github.com/LimeSurvey/LimeSurvey/tree/develop-major - Caricare una pagina di amministrazione per avviare lo script di modifica
- Segnalare qualsiasi errore riscontrato durante l'esecuzione dello script di modifica
- Esaminare i nuovi nomi delle tabelle e dei campi
- Testare i propri plugin/temi e correggere gli errori relativi ai nomi delle tabelle e/o dei campi
La funzione utilizzata per convertire i vecchi nomi dei campi in nuovi nomi dei campi è la seguente:
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
Parametri
- $tableName - nome originale della tabella
- $fieldName - nome originale del campo
- $questions - domanda principale e relative sottodomande
- $sid - ID dell'Indagine
- $gid - ID del Gruppo
- $cd - indica se si applica la logica del Pannello delle condizioni
Risultato
La funzione restituisce il nuovo nome del campo LS7 per quel campo della risposta.
4. Come testare le modifiche in sicurezza
Si consiglia vivamente di testare LS7 in un ambiente dedicato prima di aggiornare i sistemi di produzione.
4.1 Installare LS7 in un ambiente separato
Scaricare l'ultima versione di LS7 da:
https://community.limesurvey.org
Installarla separatamente dalla propria configurazione attuale.
4.2 Importare le risorse esistenti
Eseguite i test utilizzando:
- indagini
- Temi dell'indagine
- Temi di amministrazione
- Temi di domanda
- plugin
- JavaScript personalizzato
- qualsiasi integrazione personalizzata che avete sviluppato
Verificate che tutto funzioni come previsto con la nuova denominazione di tabelle e nomi di campo. Aggiornate il codice che si basa sulla vecchia denominazione.
4.3 Come avviare la migrazione?
Se desiderate visualizzare in anteprima la logica di migrazione nella vostra installazione di test:
- Eseguite il backup del database.
- Installate la versione LS7.
- Caricate una qualsiasi pagina di amministrazione per eseguire lo script di migrazione.
- Controllate le modifiche a tabelle e nomi di campo.
- Testate l'applicazione.
- Aggiornate il codice personalizzato, se necessario.
4.4 Segnalare i problemi
Grazie per aver effettuato i test in anticipo. Se notate qualcosa che nel core non sembra corretto, segnalatelo in modo che possiamo risolverlo il prima possibile.
5. Cosa potrebbe richiedere aggiornamenti
Potrebbero richiedere modifiche i seguenti elementi:
- plugin che fanno riferimento ai vecchi nomi di campo o di tabella
- qualsiasi integrazione personalizzata che avete sviluppato
- JavaScript che utilizza selettori basati sui nomi di campo
- temi personalizzati che interagiscono con identificatori relativi alle risposte
- integrazioni che dipendono dal precedente schema di denominazione
- importazione di vecchie esportazioni, come indagini, temi, Temi di domanda ecc.
Questo è previsto e fa parte del processo di aggiornamento.
6. Riepilogo
- LS7 introduce una pulizia completa della denominazione delle tabelle delle risposte e dei nomi di campo
- Questa è la principale modifica strutturale del backend per LS7
- Si raccomanda vivamente di eseguire i test in un ambiente separato
getFieldName()aiuta a visualizzare in anteprima la futura denominazione- Aggiornate il codice personalizzato dove necessario
- Segnalate i problemi tempestivamente per contribuire a stabilizzare la versione finale