Refonte des noms de champs de LimeSurvey 7
From LimeSurvey Manual
Refonte des noms de champs et des tables de réponses - LimeSurvey 7
LimeSurvey 7 introduit un nettoyage majeur de la manière dont les tables de réponses et les noms de champs sont générés. Cette mise à jour modernise des conventions de nommage internes en place depuis longtemps et crée une base plus prévisible et plus robuste pour les extensions, les intégrations et les développements futurs.
Cette page porte sur la refonte des tables de réponses et des noms de champs.
Comme il s'agit d'un changement structurel, tout développement personnalisé reposant sur l'ancienne nomenclature peut nécessiter des mises à jour. Cette page explique ce qui change, comment tester en toute sécurité et comment préparer la mise à niveau.
1. Ce qui change
1.1 Nouveaux noms de tables
LimeSurvey utilise désormais un schéma de nommage cohérent pour les tables liées aux réponses.
| Ancien nom de table | Nouveau nom de table |
|---|---|
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>
|
Les requêtes SQL, intégrations ou extensions faisant référence à ces tables peuvent nécessiter des ajustements.
1.2 Nouvelle structure des noms de champs
Les noms de champs suivent désormais un format prévisible et cohérent. Exemples :
Q<questionId>- question racineQ<questionId>_S<subquestionId>- sous-questionsQ<questionId>_C<suffix>- commentaire ou autres champs- champs de classement :
Q<questionId>_S<subquestionId>- les éléments à classer sont désormais des sous-questions (voir 1.3) - champs de chronométrage : au niveau de la question ou du groupe selon le contexte
Ceci remplace l'ancienne nomenclature basée sur sidXgidXqid.
1.3 Questions de classement
Les questions de classement fonctionnent désormais comme les autres types de questions basés sur des sous-questions :
- Les éléments sont des sous-questions. Les éléments à classer sont stockés sous forme de sous-questions (type
R), et non comme des options de réponse. - Les noms de champs utilisent le format standard des sous-questions
Q<questionId>_S<subquestionId>(un par élément classé). - Les réponses sont stockées dans une seule colonne JSON
Q<questionId>, sous la forme d'un tableau ordonné de codes d'éléments où la position = le rang. Exemple :["3", "1", "2"]
2. Pourquoi c'est important
Ce nettoyage concerne des schémas de nommage définis formellement et utilisés pendant de nombreuses années, et les transforme en une structure cohérente et robuste sur laquelle nous pouvons construire à l'avenir.
Les changements structurels de ce type sont rarement simples. Ils touchent des parties du système sur lesquelles reposent de nombreuses extensions et intégrations, ce qui explique pourquoi ils sont souvent repoussés en raison de leur complexité. Mais maintenir la cohérence et la prévisibilité est essentiel pour la stabilité à long terme.
En nous en occupant dès maintenant, nous rendons LimeSurvey plus propre et plus facile à étendre, même si le changement est largement invisible en surface.
3. Comment prévisualiser les nouveaux noms de champs
Pour voir comment un nom de champ existant sera converti dans la nouvelle structure de LS7, vous pouvez suivre les étapes suivantes :
- Sauvegardez la base de données : les modifications sont irréversibles et, en cas de problème, il sera utile de disposer de la base de données antérieure au changement pour la restaurer.
- Basculez sur la branche develop-major :
git checkout develop-major
ou clonez/téléchargez directement le projet sur cette branche à l'adresse https://github.com/LimeSurvey/LimeSurvey/tree/develop-major - Chargez une page d'administration pour déclencher le script de modification.
- Signalez toute erreur rencontrée lors de l'exécution du script de modification.
- Étudiez les nouveaux noms de tables et de champs.
- Testez vos extensions/thèmes et corrigez les erreurs liées aux noms de tables et/ou de champs.
La fonction utilisée pour convertir les anciens noms de champs en nouveaux noms de champs est la suivante :
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
Paramètres
- $tableName - nom de table d'origine
- $fieldName - nom de champ d'origine
- $questions - question racine et ses sous-questions
- $sid - ID du questionnaire
- $gid - Numéro du groupe
- $cd - indique si la logique du Concepteur de conditions s'applique
Résultat
La fonction renvoie le nouveau nom de champ LS7 pour ce champ de réponse.
4. Comment tester les changements en toute sécurité
Il est fortement recommandé de tester LS7 dans un environnement dédié avant de mettre à niveau les systèmes de production.
4.1 Installer LS7 dans un environnement séparé
Téléchargez la dernière version de LS7 depuis :
https://community.limesurvey.org
Installez-la séparément de votre configuration actuelle.
4.2 Importer vos éléments existants
Testez à l’aide des éléments suivants :
- questionnaires
- thèmes de questionnaire
- thèmes de l’administration
- thèmes de questions
- extensions
- JavaScript personnalisé
- toutes les intégrations personnalisées que vous avez développées
Vérifiez que tout fonctionne comme prévu avec les nouveaux noms de tables et de champs. Mettez à jour tout code qui repose sur l’ancienne nomenclature.
4.3 Comment déclencher la migration ?
Si vous souhaitez prévisualiser la logique de migration dans votre installation de test :
- Sauvegardez votre base de données.
- Installez la version LS7.
- Chargez n’importe quelle page d’administration pour exécuter le script de migration.
- Examinez les modifications des noms de tables et de champs.
- Testez l’application.
- Mettez à jour le code personnalisé si nécessaire.
4.4 Signaler des problèmes
Merci de tester cette version en avance de phase. Si vous remarquez quoi que ce soit d’anormal dans le noyau, veuillez nous le signaler afin que nous puissions le corriger au plus vite.
5. Ce qui peut nécessiter des mises à jour
Les éléments suivants peuvent nécessiter des ajustements :
- les extensions faisant référence aux anciens noms de champs ou de tables
- toutes les intégrations personnalisées que vous avez développées
- le JavaScript utilisant des sélecteurs basés sur les noms de champs
- les thèmes personnalisés interagissant avec les identifiants liés aux réponses
- les intégrations dépendant de l’ancien schéma de nommage
- l’import d’anciens exports tels que des questionnaires, thèmes, thèmes de questions, etc.
Cela est normal et fait partie du processus de mise à niveau.
6. Résumé
- LS7 introduit un nettoyage complet de la nomenclature des tables de réponses et des noms de champs
- Il s’agit de la principale modification structurelle du backend de LS7
- Il est fortement recommandé de tester dans un environnement séparé
getFieldName()permet de prévisualiser la future nomenclature- Mettez à jour le code personnalisé si nécessaire
- Signalez les problèmes dès que possible pour aider à stabiliser la version finale