LimeSurvey 7 Refactoring der Feldnamen
From LimeSurvey Manual
Refactoring der Feldnamen und Antworttabellen - LimeSurvey 7
LimeSurvey 7 führt eine umfassende Bereinigung der Erzeugung von Antworttabellen und Feldnamen ein. Dieses Update modernisiert langjährige interne Namenskonventionen und schafft eine besser vorhersehbare und robustere Grundlage für Plugins, Integrationen und die zukünftige Entwicklung.
Diese Seite behandelt das Refactoring der Antworttabellen und Feldnamen.
Da es sich um eine strukturelle Änderung handelt, können individuelle Anpassungen, die auf der alten Benennung beruhen, Aktualisierungen erfordern. Diese Seite erklärt, was sich ändert, wie Sie sicher testen und wie Sie sich auf das Upgrade vorbereiten.
1. Was sich ändert
1.1 Neue Tabellennamen
LimeSurvey verwendet jetzt ein einheitliches Benennungsschema für Tabellen, die Antworten betreffen.
| Alter Tabellenname | Neuer Tabellenname |
|---|---|
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-Abfragen, Integrationen oder Plugins, die auf diese Tabellen verweisen, müssen möglicherweise angepasst werden.
1.2 Neue Feldnamenstruktur
Feldnamen folgen jetzt einem vorhersehbaren und einheitlichen Format. Beispiele:
Q<questionId>- HauptfrageQ<questionId>_S<subquestionId>- TeilfragenQ<questionId>_C<suffix>- Kommentar- oder sonstige Felder- Ranking-Felder:
Q<questionId>_S<subquestionId>- Ranking-Elemente sind jetzt Teilfragen (siehe 1.3) - Zeitfelder: je nach Kontext auf Frage- oder Gruppenebene
Dies ersetzt die bisherige Benennung auf Basis von sidXgidXqid.
1.3 Ranking-Fragen
Ranking-Fragen funktionieren jetzt wie andere Fragetypen auf Basis von Teilfragen:
- Elemente sind Teilfragen. Sortierbare Elemente werden als Teilfragen (Typ
R) gespeichert, nicht als Antwortoptionen. - Feldnamen verwenden das Standardformat für Teilfragen
Q<questionId>_S<subquestionId>(eines pro eingeordnetem Element). - Antworten werden in einer einzelnen JSON-Spalte
Q<questionId>gespeichert, und zwar als geordnetes Array von Elementcodes, wobei die Position dem Rang entspricht. Beispiel:["3", "1", "2"]
2. Warum das wichtig ist
Diese Bereinigung betrifft Benennungsmuster, die über viele Jahre hinweg formal definiert und verwendet wurden, und bringt sie in eine einheitliche und robuste Struktur, auf der wir in Zukunft aufbauen können.
Strukturelle Änderungen wie diese sind selten einfach. Sie betreffen Teile des Systems, auf die sich viele Plugins und Integrationen stützen, weshalb sie wegen ihrer Komplexität oft aufgeschoben werden. Doch Einheitlichkeit und Vorhersehbarkeit sind wichtig für die langfristige Stabilität.
Indem wir dies jetzt angehen, machen wir LimeSurvey sauberer und leichter erweiterbar, auch wenn die Änderung an der Oberfläche größtenteils unsichtbar ist.
3. So sehen Sie die neuen Feldnamen vorab
Um zu sehen, wie ein vorhandener Feldname auf die neue LS7-Struktur abgebildet wird, können Sie die folgenden Schritte durchführen:
- Sichern Sie die Datenbank, da die Änderungen nicht rückgängig gemacht werden können. Falls etwas schiefgeht, ist es hilfreich, den Stand der Datenbank vor der Änderung wiederherstellen zu können.
- Checken Sie den Branch develop-major aus:
git checkout develop-major
oder klonen/laden Sie das Projekt direkt von diesem Branch herunter unter https://github.com/LimeSurvey/LimeSurvey/tree/develop-major - Rufen Sie eine Administrationsseite auf, um das Änderungsskript auszulösen.
- Melden Sie alle Fehler, die bei der Ausführung des Änderungsskripts auftreten.
- Sehen Sie sich die neuen Tabellennamen und Feldnamen an.
- Testen Sie Ihre Plugins/Themes und beheben Sie Fehler im Zusammenhang mit Tabellennamen und/oder Feldnamen.
Die Funktion, mit der alte Feldnamen in neue Feldnamen umgewandelt werden, lautet:
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
Parameter
- $tableName - ursprünglicher Tabellenname
- $fieldName - ursprünglicher Feldname
- $questions - Hauptfrage und ihre Teilfragen
- $sid - Umfrage ID
- $gid - Gruppen-ID
- $cd - ob die Logik des Bedingungsdesigners angewendet wird
Ergebnis
Die Funktion gibt den neuen LS7-Feldnamen für dieses Antwortfeld zurück.
4. So testen Sie die Änderungen sicher
Es wird dringend empfohlen, LS7 in einer eigenen Umgebung zu testen, bevor Sie Produktivsysteme aktualisieren.
4.1 LS7 in einer separaten Umgebung installieren
Laden Sie die neueste LS7-Version hier herunter:
https://community.limesurvey.org
Installieren Sie sie getrennt von Ihrer aktuellen Installation.
4.2 Bestehende Inhalte importieren
Testen Sie mit:
- Umfragen
- Umfragedesignvorlagen
- Admin-Designvorlagen
- Frage Designvorlagen
- Plugins
- benutzerdefiniertem JavaScript
- allen von Ihnen erstellten benutzerdefinierten Integrationen
Prüfen Sie, ob mit der neuen Benennung von Tabellen und Feldnamen alles wie erwartet funktioniert. Aktualisieren Sie jeden Code, der auf der alten Benennung beruht.
4.3 Wie wird die Migration ausgelöst?
Wenn Sie die Migrationslogik in Ihrer Testinstallation in einer Vorschau ansehen möchten:
- Sichern Sie Ihre Datenbank.
- Installieren Sie die LS7-Version.
- Rufen Sie eine beliebige Admin-Seite auf, um das Migrationsskript auszuführen.
- Prüfen Sie die Änderungen an Tabellen- und Feldnamen.
- Testen Sie die Anwendung.
- Aktualisieren Sie bei Bedarf benutzerdefinierten Code.
4.4 Probleme melden
Vielen Dank, dass Sie dies frühzeitig testen. Wenn Ihnen im Kern etwas auffällt, das nicht stimmt, melden Sie es bitte, damit wir es so schnell wie möglich beheben können.
5. Was möglicherweise aktualisiert werden muss
Folgendes muss möglicherweise angepasst werden:
- Plugins, die auf alte Feldnamen oder Tabellennamen verweisen
- alle von Ihnen erstellten benutzerdefinierten Integrationen
- JavaScript, das auf Feldnamen basierende Selektoren verwendet
- benutzerdefinierte Designvorlagen, die mit antwortbezogenen Bezeichnern interagieren
- Integrationen, die vom bisherigen Benennungsschema abhängen
- der Import alter Exporte wie Umfragen, Designvorlagen, Frage Designvorlagen usw.
Das ist zu erwarten und Teil des Upgrade-Prozesses.
6. Zusammenfassung
- LS7 führt eine vollständige Bereinigung der Benennung von Antworttabellen und Feldnamen ein
- Dies ist die wichtigste strukturelle Backend-Änderung in LS7
- Das Testen in einer separaten Umgebung wird dringend empfohlen
getFieldName()hilft dabei, die künftige Benennung in der Vorschau zu sehen- Aktualisieren Sie benutzerdefinierten Code, wo erforderlich
- Melden Sie Probleme frühzeitig, um die finale Version zu stabilisieren