Refatoração dos nomes de campos no LimeSurvey 7
From LimeSurvey Manual
Refatoração dos nomes de campos e das tabelas de respostas - LimeSurvey 7
O LimeSurvey 7 introduz uma grande limpeza na forma como as tabelas de respostas e os nomes de campos são gerados. Esta atualização moderniza convenções de nomenclatura internas com muitos anos e cria uma base mais previsível e robusta para plugins, integrações e desenvolvimentos futuros.
Esta página centra-se na refatoração das tabelas de respostas e dos nomes de campos.
Como se trata de uma alteração estrutural, qualquer trabalho personalizado que dependa da nomenclatura antiga pode necessitar de atualizações. Esta página explica o que muda, como testar em segurança e como se preparar para a atualização.
1. O que muda
1.1 Novos nomes de tabelas
O LimeSurvey passa a utilizar um esquema de nomenclatura consistente para as tabelas relacionadas com as respostas.
| Nome antigo da tabela | Novo nome da tabela |
|---|---|
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>
|
Quaisquer consultas SQL, integrações ou plugins que façam referência a estas tabelas podem necessitar de ajustes.
1.2 Nova estrutura dos nomes de campos
Os nomes de campos seguem agora um formato previsível e consistente. Exemplos:
Q<questionId>- pergunta principalQ<questionId>_S<subquestionId>- perguntas secundáriasQ<questionId>_C<suffix>- comentário ou outros campos- campos de classificação:
Q<questionId>_S<subquestionId>- os itens de classificação são agora perguntas secundárias (ver 1.3) - campos de tempo: ao nível da pergunta ou do grupo, consoante o contexto
Isto substitui a antiga nomenclatura baseada em sidXgidXqid.
1.3 Perguntas de classificação
As perguntas de classificação funcionam agora como os restantes tipos de pergunta baseados em perguntas secundárias:
- Os itens são perguntas secundárias. Os itens classificáveis são guardados como perguntas secundárias (tipo
R), e não como opções de resposta. - Os nomes de campos utilizam o formato padrão das perguntas secundárias
Q<questionId>_S<subquestionId>(um por item classificado). - As respostas são guardadas numa única coluna JSON
Q<questionId>, como uma tabela ordenada de códigos de itens em que a posição = classificação. Exemplo:["3", "1", "2"]
2. Porque é que isto é importante
Esta limpeza resolve padrões de nomenclatura que foram definidos formalmente e utilizados durante muitos anos, e converte-os numa estrutura consistente e robusta sobre a qual podemos construir no futuro.
Alterações estruturais como esta raramente são simples. Afetam partes do sistema em que assentam muitos plugins e integrações, razão pela qual são frequentemente adiadas devido à sua complexidade. No entanto, manter a consistência e a previsibilidade é importante para a estabilidade a longo prazo.
Ao tratar disto agora, tornamos o LimeSurvey mais limpo e mais fácil de expandir, mesmo que a alteração seja, em grande parte, invisível à superfície.
3. Como pré-visualizar os novos nomes de campos
Para ver como qualquer nome de campo existente será mapeado para a nova estrutura do LS7, pode seguir os passos seguintes:
- Faça uma cópia de segurança da base de dados, pois as alterações não são reversíveis e, se algo correr mal, será útil ter a base de dados anterior à alteração para a recuperar
- Faça checkout do ramo develop-major:
git checkout develop-major
ou clone/descarregue o projeto diretamente neste ramo em https://github.com/LimeSurvey/LimeSurvey/tree/develop-major - Carregue uma página de administração para acionar o script de alteração
- Comunique qualquer erro que possa ocorrer durante a execução do script de alteração
- Estude os novos nomes de tabelas e de campos
- Teste os seus plugins/temas e corrija os erros relacionados com nomes de tabelas e/ou de campos
A função utilizada para converter os nomes de campos antigos em novos nomes de campos é a seguinte:
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
Parâmetros
- $tableName - nome original da tabela
- $fieldName - nome original do campo
- $questions - pergunta principal e respetivas perguntas secundárias
- $sid - ID do inquérito
- $gid - Identificador do grupo de perguntas
- $cd - indica se a lógica do Construtor de condições se aplica
Resultado
A função devolve o novo nome de campo do LS7 para esse campo de resposta.
4. Como testar as alterações em segurança
Recomenda-se vivamente testar o LS7 num ambiente dedicado antes de atualizar os sistemas de produção.
4.1 Instalar o LS7 num ambiente separado
Descarregue a versão mais recente do LS7 em:
https://community.limesurvey.org
Instale-o separadamente da sua configuração atual.
4.2 Importar os seus recursos existentes
Teste utilizando:
- inquéritos
- Temas de inquéritos
- Temas de administração
- Temas de perguntas
- plugins
- JavaScript personalizado
- quaisquer integrações personalizadas que tenha desenvolvido
Verifique se tudo funciona como esperado com a nova nomenclatura de tabelas e nomes de campos. Atualize qualquer código que dependa da nomenclatura antiga.
4.3 Como acionar a migração?
Se quiser pré-visualizar a lógica de migração na sua instalação de teste:
- Faça uma cópia de segurança da sua base de dados.
- Instale a versão LS7
- Carregue qualquer página de administração para executar o script de migração.
- Reveja as alterações nas tabelas e nos nomes de campos.
- Teste a aplicação.
- Atualize o código personalizado, se necessário.
4.4 Comunicar problemas
Obrigado por testar numa fase tão inicial. Se detetar algo que pareça incorreto no Principal, comunique-nos para que possamos corrigi-lo o mais depressa possível.
5. O que pode necessitar de atualização
Os seguintes elementos podem necessitar de ajustes:
- plugins que referenciam nomes de campos ou nomes de tabelas antigos
- quaisquer integrações personalizadas que tenha desenvolvido
- JavaScript que utiliza seletores baseados em nomes de campos
- temas personalizados que interagem com identificadores relacionados com respostas
- integrações dependentes da nomenclatura anterior
- importação de exportações antigas, como inquéritos, temas, temas de perguntas, etc.
Isto é esperado e faz parte do processo de atualização.
6. Resumo
- O LS7 introduz uma limpeza completa da nomenclatura das tabelas de respostas e dos nomes de campos
- Esta é a principal alteração estrutural de backend do LS7
- Recomenda-se vivamente testar num ambiente separado
getFieldName()ajuda a pré-visualizar a futura nomenclatura- Atualize o código personalizado sempre que necessário
- Comunique os problemas cedo para ajudar a estabilizar a versão final