การปรับโครงสร้างชื่อฟิลด์ใน 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 - หมายของกลุ่ม
- $cd - ระบุว่าใช้ตรรกะของตัวออกแบบเงื่อนไขหรือไม่
ผลลัพธ์
ฟังก์ชันจะส่งคืนชื่อฟิลด์ LS7 ใหม่สำหรับฟิลด์การตอบคำถามนั้น
4. วิธีทดสอบการเปลี่ยนแปลงอย่างปลอดภัย
ขอแนะนำอย่างยิ่งให้ทดสอบ LS7 ในสภาพแวดล้อมเฉพาะก่อนอัปเกรดระบบที่ใช้งานจริง
4.1 ติดตั้ง LS7 ในสภาพแวดล้อมแยกต่างหาก
ดาวน์โหลด LS7 เวอร์ชันล่าสุดจาก:
https://community.limesurvey.org
ติดตั้งแยกจากระบบปัจจุบันของคุณ
4.2 นำเข้าทรัพยากรที่มีอยู่ของคุณ
ทดสอบโดยใช้:
- แบบสำรวจ
- ธีมแบบสำรวจ
- ธีมผู้ดูแลระบบ
- ธีมคำถาม
- ปลั๊กอิน
- JavaScript ที่กำหนดเอง
- การเชื่อมต่อระบบที่กำหนดเองที่คุณสร้างขึ้น
ตรวจสอบว่าทุกอย่างทำงานตามที่คาดไว้กับการตั้งชื่อตารางและชื่อฟิลด์แบบใหม่หรือไม่ อัปเดตโค้ดที่อาศัยการตั้งชื่อแบบเดิม
4.3 วิธีเรียกใช้การย้ายข้อมูล
หากต้องการดูตัวอย่างตรรกะการย้ายข้อมูลในระบบทดสอบของคุณ:
- สำรองข้อมูลฐานข้อมูลของคุณ
- ติดตั้ง LS7
- เปิดหน้าผู้ดูแลระบบหน้าใดก็ได้เพื่อรันสคริปต์การย้ายข้อมูล
- ตรวจสอบการเปลี่ยนแปลงของชื่อตารางและชื่อฟิลด์
- ทดสอบแอปพลิเคชัน
- อัปเดตโค้ดที่คุณปรับแต่งเองหากจำเป็น
4.4 รายงานปัญหา
ขอบคุณที่ช่วยทดสอบตั้งแต่เนิ่น ๆ หากคุณพบสิ่งที่ดูผิดปกติในส่วนแกนหลัก โปรดแจ้งให้เราทราบ เพื่อที่เราจะได้แก้ไขโดยเร็วที่สุด
5. สิ่งที่อาจต้องอัปเดต
สิ่งต่อไปนี้อาจต้องมีการปรับแก้:
- ปลั๊กอินที่อ้างอิงชื่อฟิลด์หรือชื่อตารางแบบเดิม
- การเชื่อมต่อที่คุณสร้างขึ้นเอง
- JavaScript ที่ใช้ตัวเลือก (selector) ตามชื่อฟิลด์
- ธีมที่คุณปรับแต่งเองซึ่งใช้งานร่วมกับตัวระบุที่เกี่ยวข้องกับการตอบคำถาม
- การเชื่อมต่อที่ขึ้นอยู่กับรูปแบบการตั้งชื่อก่อนหน้า
- การนำเข้าไฟล์ส่งออกเก่า เช่น แบบสำรวจ ธีม ธีมคำถาม เป็นต้น
เป็นเรื่องที่คาดการณ์ไว้แล้วและเป็นส่วนหนึ่งของกระบวนการอัปเกรด
6. สรุป
- LS7 ปรับปรุงการตั้งชื่อตารางการตอบคำถามและชื่อฟิลด์ทั้งหมดใหม่
- นี่เป็นการเปลี่ยนแปลงโครงสร้างฝั่งแบ็กเอนด์หลักของ LS7
- ขอแนะนำอย่างยิ่งให้ทดสอบในสภาพแวดล้อมแยกต่างหาก
getFieldName()ช่วยให้ดูตัวอย่างการตั้งชื่อในอนาคตได้- อัปเดตโค้ดที่คุณปรับแต่งเองตามความจำเป็น
- รายงานปัญหาตั้งแต่เนิ่น ๆ เพื่อช่วยให้รุ่นสุดท้ายมีเสถียรภาพ