Рефакторинг имён полей в 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()помогает выполнить предварительный просмотр будущих имён- При необходимости обновите пользовательский код
- Сообщайте о проблемах как можно раньше, чтобы помочь стабилизировать финальный выпуск