Рефакториране на имената на полетата в 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 Нова структура на имената на полетата
Именthough на полетата вече следват предвидим и последователен формат. Примери:
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()помага да се прегледа бъдещото именуване- Актуализирайте персонализирания код, където е необходимо
- Подавайте сигнали за проблеми рано, за да помогнете за стабилизирането на финалната версия