Refactor ng Fieldname sa LimeSurvey 7
From LimeSurvey Manual
Refactor ng Fieldname at Response Table - LimeSurvey 7
Ang LimeSurvey 7 ay nagpapakilala ng malaking paglilinis sa kung paano nabubuo ang mga response table at fieldname. Pinapahusay ng update na ito ang matagal nang mga panloob na convention sa pagpapangalan at lumilikha ng mas predictable at matibay na pundasyon para sa mga plugin, integration, at susunod na development.
Nakatuon ang pahinang ito sa refactor ng response table at fieldname.
Dahil isa itong structural na pagbabago, maaaring kailanganing i-update ang anumang custom na gawa na umaasa sa lumang pagpapangalan. Ipinapaliwanag ng pahinang ito kung ano ang nagbabago, paano ligtas na mag-test, at paano maghanda para sa pag-upgrade.
1. Ano ang nagbabago
1.1 Mga bagong pangalan ng table
Gumagamit na ngayon ang LimeSurvey ng pare-parehong scheme ng pagpapangalan para sa mga table na may kaugnayan sa tugon.
| Lumang pangalan ng table | Bagong pangalan ng table |
|---|---|
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>
|
Maaaring kailanganin ng mga pagsasaayos ang anumang SQL query, integration, o plugin na tumutukoy sa mga table na ito.
1.2 Bagong istruktura ng fieldname
Sumusunod na ngayon ang mga fieldname sa predictable at pare-parehong format. Mga halimbawa:
Q<questionId>- root na tanongQ<questionId>_S<subquestionId>- mga subquestionQ<questionId>_C<suffix>- komento o iba pang field- mga ranking field:
Q<questionId>_S<subquestionId>- ang mga ranking item ay mga subquestion na ngayon (tingnan ang 1.3) - mga timing field: antas ng tanong o antas ng pangkat depende sa konteksto
Pinapalitan nito ang legacy na pagpapangalang nakabatay sa sidXgidXqid.
1.3 Mga ranking question
Gumagana na ngayon ang mga ranking question tulad ng iba pang uri ng tanong na nakabatay sa subquestion:
- Ang mga item ay mga subquestion. Ang mga item na maaaring i-rank ay iniimbak bilang mga subquestion (uri
R), hindi bilang mga opsyon sa sagot. - Ang mga fieldname ay gumagamit ng karaniwang format ng subquestion na
Q<questionId>_S<subquestionId>(isa para sa bawat na-rank na item). - Ang mga tugon ay iniimbak sa iisang JSON column na
Q<questionId>, bilang ordered array ng mga item code kung saan ang posisyon = rank. Halimbawa:["3", "1", "2"]
2. Bakit ito mahalaga
Tinutugunan ng paglilinis na ito ang mga pattern ng pagpapangalan na pormal na itinakda at ginamit sa loob ng maraming taon, at inilalagay ang mga ito sa pare-pareho at matibay na istruktura na maaari nating pagbatayan sa hinaharap.
Bihirang simple ang mga structural na pagbabago tulad nito. Naaapektuhan nito ang mga bahagi ng sistema na inaasahan ng maraming plugin at integration, kaya madalas itong ipinagpapaliban dahil sa pagiging kumplikado. Ngunit mahalaga ang pagpapanatiling pare-pareho at predictable para sa pangmatagalang katatagan.
Sa pagtugon dito ngayon, nagiging mas malinis at mas madaling palawakin ang LimeSurvey, kahit na halos hindi ito makikita sa ibabaw.
3. Paano i-preview ang mga bagong fieldname
Upang makita kung paano mamamapa ang anumang kasalukuyang fieldname sa bagong istruktura ng LS7, maaari mong gawin ang mga sumusunod na hakbang:
- Mag-backup ng database, dahil hindi na maibabalik ang mga pagbabago at kung magkamali, makakatulong na magkaroon ng database bago ang pagbabago para makabawi
- I-checkout ang develop-major branch:
git checkout develop-major
o i-clone/i-download ang proyekto nang direkta sa branch na ito sa https://github.com/LimeSurvey/LimeSurvey/tree/develop-major - Mag-load ng admin page para ma-trigger ang change script
- I-report ang anumang error na makukuha mo habang tumatakbo ang change script
- Pag-aralan ang mga bagong tablename at fieldname
- I-test ang iyong mga plugin/theme at ayusin ang mga error na may kaugnayan sa tablename at/o fieldname
Ang function na ginagamit para i-convert ang mga lumang fieldname sa mga bagong fieldname ay ang sumusunod:
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
Mga parameter
- $tableName - orihinal na pangalan ng table
- $fieldName - orihinal na fieldname
- $questions - root na tanong at ang mga subquestion nito
- $sid - ID ng survey
- $gid - ID ng pangkat
- $cd - kung nalalapat ang lohika ng Tagadisenyo ng kondisyon
Resulta
Ibinabalik ng function ang bagong fieldname ng LS7 para sa response field na iyon.
4. Paano ligtas na i-test ang mga pagbabago
Mariing inirerekomenda na i-test ang LS7 sa isang nakalaang environment bago i-upgrade ang mga production system.
4.1 I-install ang LS7 sa hiwalay na environment
I-download ang pinakabagong LS7 mula sa:
https://community.limesurvey.org
I-install ito nang hiwalay sa iyong kasalukuyang setup.
4.2 I-import ang iyong mga kasalukuyang asset
Mag-test gamit ang:
- mga survey
- mga tema ng survey
- mga tema ng admin
- mga tema ng tanong
- mga plugin
- custom na JavaScript
- anumang custom na integration na ginawa mo
Tingnan kung gumagana ang lahat ayon sa inaasahan gamit ang bagong pagpapangalan ng table at fieldname. I-update ang anumang code na umaasa sa lumang pagpapangalan.
4.3 Paano i-trigger ang migration?
Kung nais ninyong i-preview ang migration logic sa inyong test installation:
- I-back up ang inyong database.
- I-install ang bersyon ng LS7.
- Magbukas ng anumang admin page upang patakbuhin ang migration script.
- Suriin ang mga pagbabago sa table at fieldname.
- I-test ang application.
- I-update ang custom code kung kinakailangan.
4.4 Mag-ulat ng mga isyu
Salamat sa pag-test nito nang maaga. Kung may mapansin kayong kakaiba mula sa core, mangyaring iulat ito upang maayos namin sa lalong madaling panahon.
5. Ano ang maaaring mangailangan ng update
Maaaring kailanganin ng mga pagbabago ang mga sumusunod:
- mga plugin na tumutukoy sa mga lumang fieldname o pangalan ng table
- anumang custom integration na ginawa ninyo
- JavaScript na gumagamit ng mga selector na batay sa fieldname
- mga custom na tema na nakikipag-ugnayan sa mga identifier na may kaugnayan sa tugon
- mga integration na umaasa sa nakaraang scheme ng pagpapangalan
- pag-import ng mga lumang export gaya ng survey, mga tema, Mga tema ng tanong, atbp.
Inaasahan ito at bahagi ito ng proseso ng pag-upgrade.
6. Buod
- Ang LS7 ay nagpapakilala ng kumpletong paglilinis sa pagpapangalan ng response table at fieldname
- Ito ang pangunahing structural na pagbabago sa backend para sa LS7
- Lubos na inirerekomendang mag-test sa hiwalay na environment
- Nakakatulong ang
getFieldName()na i-preview ang magiging pagpapangalan sa hinaharap - I-update ang custom code kung kinakailangan
- Mag-ulat ng mga isyu nang maaga upang makatulong sa pagpapatatag ng pinal na release