Refactorización de nombres de campo en LimeSurvey 7
From LimeSurvey Manual
Refactorización de nombres de campo y tablas de respuestas - LimeSurvey 7
LimeSurvey 7 introduce una importante limpieza en la forma en que se generan las tablas de respuestas y los nombres de campo. Esta actualización moderniza convenciones de nomenclatura internas de larga data y crea una base más predecible y sólida para los plugins, las integraciones y el desarrollo futuro.
Esta página se centra en la refactorización de las tablas de respuestas y los nombres de campo.
Dado que se trata de un cambio estructural, cualquier desarrollo personalizado que dependa de la nomenclatura anterior puede requerir actualizaciones. Esta página explica qué cambia, cómo realizar pruebas de forma segura y cómo prepararse para la actualización.
1. Qué cambia
1.1 Nuevos nombres de tabla
LimeSurvey utiliza ahora un esquema de nomenclatura coherente para las tablas relacionadas con las respuestas.
| Nombre de tabla anterior | Nombre de tabla nuevo |
|---|---|
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>
|
Las consultas SQL, integraciones o plugins que hagan referencia a estas tablas pueden requerir ajustes.
1.2 Nueva estructura de los nombres de campo
Los nombres de campo siguen ahora un formato predecible y coherente. Ejemplos:
Q<questionId>- pregunta raízQ<questionId>_S<subquestionId>- subpreguntasQ<questionId>_C<suffix>- comentario u otros campos- campos de ranking:
Q<questionId>_S<subquestionId>- los elementos del ranking son ahora subpreguntas (véase 1.3) - campos de tiempos: a nivel de pregunta o de grupo, según el contexto
Esto sustituye a la antigua nomenclatura basada en sidXgidXqid.
1.3 Preguntas de ranking
Las preguntas de ranking funcionan ahora como otros tipos de pregunta basados en subpreguntas:
- Los elementos son subpreguntas. Los elementos clasificables se almacenan como subpreguntas (tipo
R), no como opciones de respuesta. - Los nombres de campo utilizan el formato estándar de subpregunta
Q<questionId>_S<subquestionId>(uno por cada elemento clasificado). - Las respuestas se almacenan en una única columna JSON
Q<questionId>, como una matriz ordenada de códigos de elementos donde la posición = el rango. Ejemplo:["3", "1", "2"]
2. Por qué es importante
Esta limpieza aborda patrones de nomenclatura que se definieron formalmente y se utilizaron durante muchos años, y los lleva a una estructura coherente y sólida sobre la que podemos construir en el futuro.
Los cambios estructurales como este rara vez son sencillos. Afectan a partes del sistema en las que se apoyan muchos plugins e integraciones, por lo que a menudo se posponen debido a su complejidad. Sin embargo, mantener la coherencia y la previsibilidad es importante para la estabilidad a largo plazo.
Al abordarlo ahora, hacemos que LimeSurvey sea más limpio y fácil de ampliar, aunque el cambio sea en su mayor parte invisible en la superficie.
3. Cómo obtener una vista previa de los nuevos nombres de campo
Para ver cómo se asignará cualquier nombre de campo existente a la nueva estructura de LS7, puede seguir estos pasos:
- Haga una copia de seguridad de la base de datos, ya que los cambios no son reversibles y, si algo sale mal, le será útil disponer de la base de datos anterior al cambio para recuperarla.
- Cambie a la rama develop-major (checkout):
git checkout develop-major
o clone/descargue el proyecto directamente en esta rama desde https://github.com/LimeSurvey/LimeSurvey/tree/develop-major - Cargue una página de administración para ejecutar el script de cambio.
- Notifique cualquier error que pueda aparecer durante la ejecución del script de cambio.
- Estudie los nuevos nombres de tabla y de campo.
- Pruebe sus plugins/temas y corrija los errores relacionados con los nombres de tabla y/o de campo.
La función utilizada para convertir los nombres de campo antiguos en nuevos es la siguiente:
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
Parámetros
- $tableName - nombre de tabla original
- $fieldName - nombre de campo original
- $questions - pregunta raíz y sus subpreguntas
- $sid - ID encuesta
- $gid - ID del grupo
- $cd - indica si se aplica la lógica del Diseñador de condiciones
Resultado
La función devuelve el nuevo nombre de campo de LS7 para ese campo de respuesta.
4. Cómo probar los cambios de forma segura
Se recomienda encarecidamente probar LS7 en un entorno dedicado antes de actualizar los sistemas de producción.
4.1 Instalar LS7 en un entorno independiente
Descargue la última versión de LS7 desde:
https://community.limesurvey.org
Instálela por separado de su configuración actual.
4.2 Importe sus recursos existentes
Realice las pruebas con:
- formularios
- Temas del formulario
- Temas de la interfaz de administración
- Temas de pregunta
- plugins
- JavaScript personalizado
- cualquier integración personalizada que haya desarrollado
Compruebe que todo funciona como se espera con la nueva nomenclatura de tablas y nombres de campo. Actualice cualquier código que dependa de la nomenclatura anterior.
4.3 ¿Cómo activar la migración?
Si desea obtener una vista previa de la lógica de migración en su instalación de prueba:
- Haga una copia de seguridad de su base de datos.
- Instale la versión LS7.
- Cargue cualquier página de administración para ejecutar el script de migración.
- Revise los cambios en las tablas y en los nombres de campo.
- Pruebe la aplicación.
- Actualice el código personalizado si es necesario.
4.4 Informar de problemas
Gracias por probarlo tan pronto. Si detecta algo que parezca incorrecto en el núcleo, infórmenos para que podamos solucionarlo lo antes posible.
5. Qué puede requerir actualizaciones
Es posible que sea necesario ajustar lo siguiente:
- plugins que hacen referencia a nombres de campo o de tabla antiguos
- cualquier integración personalizada que haya desarrollado
- JavaScript que utilice selectores basados en nombres de campo
- temas personalizados que interactúen con identificadores relacionados con las respuestas
- integraciones que dependan del esquema de nomenclatura anterior
- la importación de exportaciones antiguas, como formularios, temas, Temas de pregunta, etc.
Esto es lo esperado y forma parte del proceso de actualización.
6. Resumen
- LS7 introduce una limpieza completa de la nomenclatura de las tablas de respuestas y de los nombres de campo
- Este es el principal cambio estructural del backend en LS7
- Se recomienda encarecidamente realizar pruebas en un entorno independiente
getFieldName()ayuda a obtener una vista previa de la futura nomenclatura- Actualice el código personalizado cuando sea necesario
- Informe de los problemas cuanto antes para ayudar a estabilizar la versión final