LimeSurvey 7 字段名重构
From LimeSurvey Manual
字段名和答复表重构 - LimeSurvey 7
LimeSurvey 7 对答复表和字段名的生成方式进行了重大清理。 此次更新使长期沿用的内部命名约定更加现代化,并为插件、集成和未来的开发奠定了更可预测、更稳健的基础。
本页重点介绍答复表和字段名的重构。
由于这是一项结构性变更,任何依赖旧命名的自定义内容都可能需要更新。 本页说明了有哪些变化、如何安全地进行测试,以及如何为升级做好准备。
1. 有哪些变化
1.1 新的表名
LimeSurvey 现在对与反馈相关的表使用统一的命名方案。
| 旧表名 | 新表名 |
|---|---|
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>
|
任何引用这些表的 SQL 查询、集成或插件都可能需要调整。
1.2 新的字段名结构
字段名现在遵循可预测且一致的格式。示例:
Q<questionId>- 根问题Q<questionId>_S<subquestionId>- 子问题Q<questionId>_C<suffix>- 评论或其他字段- 排序字段:
Q<questionId>_S<subquestionId>- 排序项现在是子问题(参见 1.3) - 计时字段:根据上下文为问题级或组级
这取代了旧的基于 sidXgidXqid 的命名方式。
1.3 排序问题
排序问题现在与其他基于子问题的问题类型工作方式相同:
- 排序项是子问题。 可排序的项目被存储为子问题(类型
R),而不是答案项。 - 字段名 使用标准的子问题格式
Q<questionId>_S<subquestionId>(每个排序项一个)。 - 反馈 存储在单个 JSON 列
Q<questionId>中,为按顺序排列的项目代码阵列,位置 = 排名。示例:["3", "1", "2"]
2. 为什么这很重要
此次清理针对的是多年来被正式定义和使用的命名模式,并将其整理为一致且稳健的结构,以便我们在未来基于它继续构建。
这样的结构性变更很少是简单的。它们涉及许多插件和集成所依赖的系统部分,因此常因复杂性而被推迟。但保持一致性和可预测性对长期稳定性至关重要。
通过现在解决这一问题,我们使 LimeSurvey 更加简洁、更易于扩展,即使这一变化在表面上几乎看不出来。
3. 如何预览新的字段名
要查看任何现有字段名将如何映射到新的 LS7 结构,您可以执行以下步骤:
- 备份数据库,因为这些更改不可逆,如果出现问题,拥有更改之前的数据库将有助于恢复
- 检出 develop-major 分支:
git checkout develop-major
或直接在此分支克隆/下载项目,地址为 https://github.com/LimeSurvey/LimeSurvey/tree/develop-major - 加载任意管理页面以触发更改脚本
- 报告您在执行更改脚本期间遇到的任何错误
- 研究新的表名和字段名
- 测试您的插件/主题,并修复与表名和/或字段名相关的错误
用于将旧字段名转换为新字段名的函数如下:
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
参数
- $tableName - 原始表名
- $fieldName - 原始字段名
- $questions - 根问题及其子问题
- $sid - 调查 ID
- $gid - 组ID
- $cd - 是否适用条件设计师逻辑
结果
该函数返回该反馈字段对应的新 LS7 字段名。
4. 如何安全地测试这些更改
强烈建议在升级生产系统之前,先在专用环境中测试 LS7。
4.1 在单独的环境中安装 LS7
请从以下地址下载最新的 LS7:
https://community.limesurvey.org
请将其与您当前的环境分开安装。
4.2 导入您现有的资源
请使用以下内容进行测试:
- 调查
- 调查表主题
- 管理员主题
- 问题主题
- 插件
- 自定义 JavaScript
- 您构建的任何自定义集成
请检查在使用新的表名和字段名命名方式后,一切是否仍按预期运行。 请更新所有依赖旧命名的代码。
4.3 如何触发迁移?
如果您想在测试安装环境中预览迁移逻辑:
- 备份您的数据库。
- 安装 LS7 版本。
- 加载任意管理页面以运行迁移脚本。
- 检查表名和字段名的变更。
- 测试应用程序。
- 如有必要,更新自定义代码。
4.4 报告问题
感谢您的早期测试。 如果您发现核心功能有任何异常,请及时报告,以便我们尽快修复。
5. 哪些内容可能需要更新
以下内容可能需要调整:
- 引用旧字段名或表名的插件
- 您构建的任何自定义集成
- 使用基于字段名的选择器的 JavaScript
- 与反馈相关标识符交互的自定义主题
- 依赖之前命名方案的集成
- 导入旧的导出文件,例如调查、主题、问题主题等
这是预期情况,也是升级过程的一部分。
6. 摘要
- LS7 对答复表和字段名的命名进行了全面清理
- 这是 LS7 主要的后端结构性变更
- 强烈建议在单独的环境中进行测试
getFieldName()可帮助预览未来的命名- 请在需要时更新自定义代码
- 请尽早报告问题,以帮助稳定最终版本