LimeSurvey 7.0.6 → 7.0.7

Eine technische Analyse

Kopfdaten und Grenzen

Release
7.0.6 → 7.0.7
Commits
14
Geänderte Dateien
64
Analyse
10.08.2026
Schwerpunkt
Editorumstellung und Massenaktionen

Nicht untersucht

Verglichen wurden die im lokalen Repository verifizierten Tags 7.0.6+260722 (22.07.2026) und 7.0.7+260729 (28.07.2026) mit git log --oneline 7.0.6+260722..7.0.7+260729 und git diff --stat 7.0.6+260722..7.0.7+260729. Nicht ausgewertet wurden die kompilierten Editor-Bundles unter editor/build/static/js, die minifizierten Stylesheets des Adminthemes sowie die binären Übersetzungskataloge und die Vorlagendatei der Übersetzungen. Dadurch bleibt offen, ob die Umstellung des Editors auf die Voreinstellung über die zitierten Quelldateien hinaus weitere Verhaltensänderungen im ausgelieferten Bundle mitbringt. Indirekte Effekte über transitive Drittabhängigkeiten lassen sich durch reine Diff-Analyse nicht vollständig erfassen. Aus dem Kapitel „Weitere relevante Änderungen" wurden zwei Einträge geringerer Relevanz weggelassen, nämlich die Stilanpassung der Blätterschaltflächen im Editor und die neu hinzugefügten Modultests für das Anlegen und Duplizieren von Fragengruppen.

Executive Summary

Dieses Release stellt den neuen Fragen-Editor von einer Wahlmöglichkeit auf die Voreinstellung um: Eine neue Zeile in den Konfigurationsvorgaben schaltet ihn ein, und der bisherige Aktivierungsdialog erscheint nicht mehr. Daneben erhalten die Rasteransichten für Antworten und Teilnehmende eine seitenübergreifende Auswahl samt gebündelter Löschung, und der Ausdrucksmanager erzeugt für Einfachauswahlfragen erstmals Bezeichner, die zu den tatsächlich gerenderten Elementen passen. Am ehesten unbemerkt bleibt die Editorumstellung: Klassische Verwaltungsrouten werden serverseitig umgeleitet, sodass Erweiterungen, die an den bisherigen Editoransichten hängen, ohne Fehlermeldung nicht mehr erreicht werden. Ebenfalls leise ist die Einschränkung der Relevanzbehandlung im mitgelieferten Umfragethema auf Fragecontainer, die in abgeleiteten Themen mit eigenem Markup wirkungslos werden kann. Die interne Datenbankversion bleibt unverändert, das nachgebesserte Migrationsskript wirkt daher nur auf Installationen, die diesen Stand noch nicht erreicht haben.

  1. Neuer Fragen-Editor ist standardmäßig aktiv
  2. Nachgebessertes Migrationsskript bei unveränderter Datenbankversion
  3. Seitenübergreifende Auswahl und gebündelte Massenlöschung
  4. Array-Filter auf Einfachauswahl erzeugt passende Bezeichner
  5. Relevanzbehandlung im Umfragethema auf Fragecontainer eingeschränkt
  6. Formatierter Text in Unterfragen, Antworten und Rahmentexten
  7. Besitzerliste ohne leeren Namenszusatz

Upgrade-Empfehlung

🧪 Vorher testen

Die Umstellung des Fragen-Editors auf die Voreinstellung verändert die Verwaltungsoberfläche jeder Installation, deren Voraussetzungen erfüllt sind, und leitet bisherige Editorrouten um. Der neue Bündellöschpfad umgeht die satzweise Löschlogik, sofern keine Dateiuploadfrage und kein Abonnent des Löschereignisses vorliegt. Beides sollte auf einer Kopie geprüft werden, bevor produktive Installationen nachziehen.

Lesepfad

ZielgruppeRelevante Kennungen und Kapitel
AdministratorenA1, A2, A3, A4, A5, A6, Weitere relevante Änderungen, Empfehlung
Plugin-EntwicklerA1, A3, Empfehlung
Theme-EntwicklerA1, A3, A4, A5, Weitere relevante Änderungen, Empfehlung
IntegratorenA1, A2, A4, A6, A7, Weitere relevante Änderungen, Empfehlung
API-NutzerA6, A7, Empfehlung

Die wichtigsten Änderungen

A1: Neuer Fragen-Editor ist standardmäßig aktiv

Sicherheitsrelevanz
Keine
Handlungsdruck
Hoch
Bruchverhalten
Stiller Fehler
Betroffen
Administratoren, Plugin-Entwickler, Theme-Entwickler, Integratoren

Hintergrund: Der neue, in React umgesetzte Fragen-Editor wurde bisher über eine benutzerbezogene Einstellung aktiviert; fehlte diese Einstellung, griff der Rückfallwert aus der Anwendungskonfiguration, und dieser Wert war in den Konfigurationsvorgaben nicht gesetzt. Damit blieb der Editor abgeschaltet, solange niemand ihn ausdrücklich einschaltete. Das Release trägt den Schlüssel nun mit dem Wert true in die Konfigurationsvorgaben ein. Zugleich entfällt der Dialog, der Benutzer ohne gespeicherte Einstellung zur Wahl aufforderte: Die Bedingung für das Einblenden wurde durch einen festen Wert ersetzt.

Konsequenz: Nach dem Update landen angemeldete Verwaltungsbenutzer beim Aufruf der Fragen-, Gruppen- und Umfrageansichten im neuen Editor, ohne dass eine Rückfrage erscheint. Die Umleitung geschieht serverseitig über eine feste Zuordnungstabelle von klassischen Routen auf Editorrouten; Erweiterungen, die Inhalte in die bisherigen Ansichten der Fragen- und Gruppenverwaltung einhängen, werden dabei nicht mehr erreicht, ohne dass eine Fehlermeldung entsteht. Die Änderung greift nicht überall: Sie wirkt nur für angemeldete Benutzer im Verwaltungsbereich, nur wenn der URL-Manager auf das Pfadformat eingestellt ist, und für eine konkrete Umfrage nur, wenn deren wirksames Thema auf dem mitgelieferten Standardthema beruht. Installationen mit abweichendem URL-Format oder mit eigenen Umfragethemen bemerken die Umstellung daher nicht. Die benutzerbezogene Einstellung wird weiterhin vor dem Konfigurationswert geprüft und behält damit Vorrang.

Vorher / Nachher:

// Neu (application/config/config-defaults.php)
$config['editorEnabled'] = true;
// Vorher (application/core/plugins/ReactEditor/ReactEditor.php)
$shouldShowModal = !$this->hasEditorSettingInDatabase();
// Nachher
$shouldShowModal = false;

Konfiguration: Der Wert lässt sich in application/config/config.php im Abschnitt der optionalen Einstellungen überschreiben, und das Projekt führt genau diesen Weg in seiner eigenen Testpipeline vor, indem es die Zeile vor dem Testlauf in die Konfigurationsdatei einfügt:

# Neu (.github/workflows/functional.yml)
#
# disable new editor for functional tests CI
sed -i '61i\        "editorEnabled"=>false,' application/config/config.php

Fehlt der Schlüssel in der eigenen Konfigurationsdatei, gilt der neue Vorgabewert und der Editor ist aktiv.

Nach dem Update testen: Rufe als Verwaltungsbenutzer die Bearbeitung einer bestehenden Frage über die klassische Route auf und prüfe, ob der Browser auf eine Editorroute umgeleitet wird. Öffne anschließend jede Verwaltungsansicht, in die eigene Erweiterungen Inhalte einhängen, und kontrolliere, ob diese Inhalte noch dargestellt werden.

Betroffene Dateien: application/config/config-defaults.php, application/core/plugins/ReactEditor/ReactEditor.php, .github/workflows/functional.yml

Relevante Commits: 06453d44f9, 861bd70a57

A2: Nachgebessertes Migrationsskript bei unveränderter Datenbankversion

Sicherheitsrelevanz
Keine
Handlungsdruck
Hoch
Bruchverhalten
Kein Bruch
Betroffen
Administratoren, Integratoren

Hintergrund: Das mit dem Vorgängerrelease eingeführte Migrationsskript überführt die Antwortspalten von Rangfolgefragen in ein einzelnes Feld je Frage. Um zu entscheiden, welche Spalten überhaupt vorhanden sind, lud es bisher das dynamische Antwortmodell der jeweiligen Umfrage und las dessen Metadaten. Es griff außerdem auf eine Konstante des Fragemodells zu und setzte die Werte für Umfragestatus und Fragetyp direkt in die Abfrage ein. Das Release ersetzt beides: Die Spaltennamen kommen jetzt über die Schemaabfrage der Datenbankschicht, der Tabellenname wird mit dem konfigurierten Tabellenpräfix gebildet, und die beiden Werte werden als Parameter gebunden.

Konsequenz: Die entscheidende Größe ist die interne Datenbankversion, und sie bleibt in diesem Release unverändert. Das nachgebesserte Skript läuft daher nur auf Installationen, deren interner Stand diese Nummer noch nicht erreicht hat, also beim Update von einer Fassung vor dem Vorgängerrelease. Installationen, die bereits über das Vorgängerrelease auf diesen Stand gehoben wurden, führen das Skript nicht erneut aus und profitieren von der Korrektur nicht. Ob eine solche Installation von dem Verhalten der alten Fassung betroffen war, ist aus dem Diff nicht bestimmbar und muss am eigenen Datenbestand geprüft werden. Die Änderung ist außerdem für Betreiber mit Tabellenpräfix relevant, weil der Tabellenname erst jetzt ausdrücklich mit dem Präfix gebildet wird.

Vorher / Nachher:

// Vorher (application/helpers/update/updates/Update_709.php)
$model = SurveyDynamic::model($sid);
$columns = $model->metaData->columns;
...
if (isset($columns["Q{$rqr["parent_qid"]}_S{$rqr["qid"]}"])) {
    $alterMap[$sid][$rqr['parent_qid']][] = "Q{$rqr["parent_qid"]}_S{$rqr["qid"]}";
};
// Nachher
$columns = $this->findColumns((Yii::app()->db->tablePrefix ?? "") . "responses_{$sid}");
...
if (in_array("Q{$rqr["parent_qid"]}_S{$rqr["qid"]}", $columns)) {
    $alterMap[$sid][$rqr['parent_qid']][] = "Q{$rqr["parent_qid"]}_S{$rqr["qid"]}";
};
// Neu (application/helpers/update/updates/Update_709.php)
protected function findColumns(string $table): array
{
    $tableSchema = $this->db->getSchema()->getTable($table);
    if ($tableSchema === null) {
        return [];
    }
    return array_keys($tableSchema->columns);
}
// Vorher (application/config/version.php)
$config['versionnumber'] = '7.0.6';
$config['dbversionnumber'] = 709;
$config['buildnumber'] = '';
$config['updatable'] = true;
$config['templateapiversion']  = 3;
$config['assetsversionnumber'] = '30494';
// Nachher
$config['versionnumber'] = '7.0.7';
$config['dbversionnumber'] = 709;
$config['buildnumber'] = '';
$config['updatable'] = true;
$config['templateapiversion']  = 3;
$config['assetsversionnumber'] = '30495';

Migrationsdetails: Die interne Datenbankversion lautet vor und nach dem Update 709, wie das Zitatpaar aus der Versionsdatei belegt; das Release führt damit keine neue Migrationsstufe ein, sondern ändert eine bestehende. Die zitierte Änderung am Skript betrifft die Ermittlung der Spaltennamen und die Parameterbindung, nicht die Art des Eingriffs in die Antworttabellen; Idempotenz und Rückwärtskompatibilität trägt das Zitat nicht und sie sind damit nicht bestimmbar.

Nach dem Update testen: Prüfe an einer Kopie einer Installation, deren interner Datenbankstand noch unterhalb dieser Nummer liegt, ob der Updatelauf ohne Ausnahme durchläuft und die Antworttabelle einer aktiven Rangfolgefrage danach das erwartete Feld je Frage trägt. Betreiber mit Tabellenpräfix führen diese Prüfung ausdrücklich mit gesetztem Präfix durch.

Betroffene Dateien: application/helpers/update/updates/Update_709.php, application/config/version.php

Relevante Commits: c54512ad84

A3: Seitenübergreifende Auswahl und gebündelte Massenlöschung

Sicherheitsrelevanz
Keine
Handlungsdruck
Mittel
Bruchverhalten
Stiller Fehler
Betroffen
Administratoren, Plugin-Entwickler, Theme-Entwickler

Hintergrund: Die Rasteransichten für Antworten und für Teilnehmende erhalten eine Schaltfläche, die die gesamte Ergebnismenge über alle Seiten hinweg auswählt. Statt einer Liste von Schlüsseln überträgt die Massenaktion dann eine Markierung und die serialisierten Filterfelder des Rasters; der Controller baut daraus dieselbe Suchbedingung nach und ermittelt die betroffenen Schlüssel selbst. Für das Löschen von Antworten kommt ein gebündelter Pfad hinzu, der die Datensätze in Blöcken zu tausend entfernt, sofern die Umfrage keine Dateiuploadfrage enthält und kein Plugin das Löschereignis abonniert hat.

Konsequenz: Für Verwaltungsbenutzer wird das Löschen großer Antwortmengen deutlich schneller, weil nicht mehr jeder Datensatz einzeln geladen wird. Der gebündelte Pfad greift bei jeder Löschaktion, nicht nur bei der neuen Auswahl über Seitengrenzen. Er umgeht dabei die satzweise Löschlogik des Antwortmodells, die sonst Dateien und Zeitmessungen mitentfernt; die Zeitmessungen holt der neue Code ausdrücklich nach, der Dateifall wird durch die vorgelagerte Prüfung ausgeschlossen. Plugins, die am Löschereignis des Plugin-Systems hängen, bleiben wirksam, weil deren Vorhandensein den satzweisen Pfad erzwingt; Plugins, die stattdessen auf Modellereignisse des Antwortmodells setzen, laufen im gebündelten Pfad nicht mehr an, ohne dass ein Fehler entsteht. Die Obergrenze von fünftausend Datensätzen je Aktion gilt ausschließlich für den satzweisen Pfad, sodass ohne Dateiuploadfrage und ohne Abonnent sehr große Ergebnismengen in einem Zug verarbeitet werden. Für Theme-Entwickler kommt ein zusätzlicher Knopf mit eigener Klasse in die Auswahlleiste des Rasters, samt passender Regel im Adminthema.

Vorher / Nachher:

// Vorher (application/controllers/ResponsesController.php)
foreach ($aResponseId as $iResponseId) {
    $resultErrors = $this->deleteResponse($surveyId, $iResponseId);
    $errors += $resultErrors['numberOfErrors'];
    $timingErrors += $resultErrors['numberOfTimingErrors'];
}
// Nachher
if (!$this->hasHeavyDelete($surveyId)) {
    $saveTimings = Survey::model()->findByPk($surveyId)->isSaveTimings;
    foreach (array_chunk($aResponseId, 1000) as $chunk) {
        $deleted = Response::model($surveyId)->deleteByPk($chunk);
        if ($saveTimings) {
            SurveyTimingDynamic::model($surveyId)->deleteByPk($chunk);
        }
        $errors += count($chunk) - $deleted;
    }
} else {
    ...
}
// Neu (application/controllers/ResponsesController.php)
private function hasHeavyDelete(int $surveyId): bool
{
    return hasFileUploadQuestion($surveyId)
        || App()->getPluginManager()->hasSubscribers('beforeDataEntryDelete');
}
// Neu (application/extensions/admin/grid/CLSGridView.php)
public bool $lsSelectAllEnabled = false;

Nach dem Update testen: Wähle in der Antwortübersicht einer Umfrage ohne Dateiuploadfrage einen Filter, betätige die neue Auswahlschaltfläche und prüfe, ob die Löschung ausschließlich die gefilterten Datensätze trifft. Wiederhole den Vorgang in einer Umfrage mit Dateiuploadfrage und mit einem am Löschereignis hängenden Plugin und kontrolliere, ob die hochgeladenen Dateien im Uploadverzeichnis verschwinden und das Plugin je gelöschtem Datensatz aufgerufen wird.

Betroffene Dateien: application/controllers/ResponsesController.php, application/controllers/admin/Tokens.php, application/libraries/PluginManager/PluginManager.php, application/extensions/admin/grid/assets/gridSelection.js, assets/admin_themes/Sea_Green/tables/tables.scss

Relevante Commits: a10c34e9bf

A4: Array-Filter auf Einfachauswahl erzeugt passende Bezeichner

Sicherheitsrelevanz
Keine
Handlungsdruck
Mittel
Bruchverhalten
Kein Bruch
Betroffen
Administratoren, Theme-Entwickler, Integratoren

Hintergrund: Der Ausdrucksmanager baut für jede Frage eine Liste von Unterfragen auf und hinterlegt darin den Bezeichner des Elements, das bei einer Relevanzänderung angesprochen wird. Für Einfachauswahl- und Auswahllistenfragen leitete er diesen Bezeichner bisher aus den Schlüsseln eines Antwortfeldes ab und setzte ihn aus der Fragekennung und dem Antwortcode zusammen. Die Darstellung erzeugt die Kennungen der Antwortzeilen jedoch aus der Fragekennung und der Antwortkennung. Beide Formen stimmten nicht überein. Das Release ersetzt die Ableitung durch eine Abfrage der Antwortdatensätze und bildet den Bezeichner aus Fragekennung und Antwortkennung; für die Sonstiges-Option entsteht ein eigener Eintrag. Zusätzlich trägt jeder Eintrag jetzt ein weiteres Feld mit dem Spaltensuffix.

Konsequenz: Der Array-Filter auf Einfachauswahl- und Auswahllistenfragen wirkt nun tatsächlich; die erzeugten Anweisungen sprechen die vorhandenen Antwortzeilen an. In Umfragen, in denen ein solcher Filter hinterlegt, aber bisher wirkungslos war, verschwinden nach dem Update Antwortoptionen, die zuvor sichtbar blieben. Bei laufenden Umfragen ändert sich damit die den Teilnehmenden angebotene Auswahl mitten in der Feldzeit, was die Vergleichbarkeit der bereits erhobenen Daten berührt. Theme-Entwickler bekommen erstmals Relevanzereignisse auf den Antwortzeilen von Einfachauswahlfragen; eigene Skripte, die diese Ereignisse behandeln, laufen an Stellen an, an denen sie zuvor nie ausgelöst wurden. Die Ableitung kostet außerdem eine zusätzliche Datenbankabfrage je Frage dieses Typs beim Aufbau der Seite.

Vorher / Nachher:

// Vorher (application/helpers/expressions/em_manager_helper.php)
if (!is_null($ansArray)) {
    foreach (array_keys($ansArray) as $key) {
        $parts = explode('~', $key);
        ...
        $q2subqInfo[$questionNum]['subqs'][] = [
            'rowdivid' => 'Q' . $questionNum . $parts[1],
            'varName'  => $varName,
            'sqsuffix' => '_' . $parts[1],
        ];
    }
}
// Nachher
if (!is_null($Answers)) {
    foreach ($Answers as $Answer) {
        $q2subqInfo[$questionNum]['subqs'][] = [
            'rowdivid' => 'Q' . $questionNum . '_S' . $Answer->aid,
            'varName'  => $varName,
            'sqsuffix' => '_' . $Answer->code,
            'csuffix' => '_S' . $Answer->aid,
        ];
    }
}
// Neu (application/helpers/expressions/em_manager_helper.php)
$Answers = Answer::model()->findAll([
    'select' => 'aid, code',
    'condition' => 'qid = :qid and scale_id = 0',
    'params' => [':qid' => $questionNum],
]);

Nach dem Update testen: Lege eine Einfachauswahlfrage mit einem Array-Filter auf eine vorgelagerte Mehrfachauswahl an, einmal ohne und einmal mit aktivierter Sonstiges-Option, und prüfe im Browser, ob die nicht gewählten Optionen ausgeblendet werden. Kontrolliere anschließend in einer bestehenden, aktiven Umfrage mit solchem Filter, ob sich die angezeigte Optionsmenge gegenüber dem Stand vor dem Update verändert.

Betroffene Dateien: application/helpers/expressions/em_manager_helper.php

Relevante Commits: e92f93ba0b

A5: Relevanzbehandlung im Umfragethema auf Fragecontainer eingeschränkt

Sicherheitsrelevanz
Keine
Handlungsdruck
Mittel
Bruchverhalten
Stiller Fehler
Betroffen
Administratoren, Theme-Entwickler

Hintergrund: Das mitgelieferte Umfragethema hängt seine Relevanzbehandlung an alle Elemente, deren Kennung mit einer festen Zeichenfolge beginnt. Diese Auswahl traf auch Elemente, die zwar so beginnen, aber keine Fragecontainer sind. Das Release verengt sämtliche betroffenen Auswahlausdrücke zusätzlich auf die Containerklasse. Gleichzeitig wandert die Aktualisierung des Gruppenzustands im Modus mit allen Fragen auf einer Seite in den Zweig, der für das Ausblenden zuständig ist, sodass sie beim Deaktivieren einzelner Unterfragen nicht mehr unbedingt ausgeführt wird. Die Änderung wurde in der Quelldatei des Themes und in der ausgelieferten Fassung gleichlautend nachgezogen.

Konsequenz: In abgeleiteten Themen, deren Fragecontainer die erwartete Klasse nicht tragen, greifen die Relevanzhandler nicht mehr; Fragen werden dann bei einer Relevanzänderung weder ein- noch ausgeblendet, ohne dass ein Fehler sichtbar wird. Betroffen sind ausschließlich Themen, die die Skripte des mitgelieferten Themes übernehmen oder von ihm erben und dabei eigenes Markup für den Fragecontainer mitbringen. Für den Modus mit allen Fragen auf einer Seite ändert sich, wann eine Gruppe als vollständig ausgeblendet gilt: Die Prüfung läuft jetzt nur noch beim Verbergen, nicht mehr beim Deaktivieren einer Unterfrage. Themen ohne eigene Eingriffe in diese Skripte übernehmen die Korrektur unverändert.

Vorher / Nachher:

// Vorher (assets/survey_themes/fruity_twentythree/core/old_template_core_pre.js)
$("[id^='question']").on('relevance:on',function(event,data) {
    /* @todo : attach only to this. Use http://stackoverflow.com/a/6411507/2239406 solution for now. 
    Don't want to stop propagation. */
    if(event.target != this) return; 
    $(this).removeClass("ls-irrelevant ls-hidden");
});
// Nachher
$("[id^='question'].question-container").on('relevance:on',function(event,data) {
    /* @todo : attach only to this. Use http://stackoverflow.com/a/6411507/2239406 solution for now. 
    Don't want to stop propagation. */
    if(event.target != this) return; 
    $(this).removeClass("ls-irrelevant ls-hidden");
});

Nach dem Update testen: Öffne eine Umfrage mit eigenem, vom mitgelieferten Thema abgeleitetem Design und prüfe, ob eine bedingt angezeigte Frage beim Ändern der Bedingung noch ein- und ausgeblendet wird, einschließlich einer Frage mit mehrspaltiger Optionsliste. Wiederhole die Prüfung im Modus mit allen Fragen auf einer Seite und kontrolliere, ob eine Gruppe verschwindet, sobald alle ihre Fragen ausgeblendet sind.

Betroffene Dateien: assets/survey_themes/fruity_twentythree/core/old_template_core_pre.js, assets/survey_themes/fruity_twentythree/core/old_template_core_class.js, themes/survey/fruity_twentythree/scripts/theme.js

Relevante Commits: c529591f3a

A6: Formatierter Text in Unterfragen, Antworten und Rahmentexten

Sicherheitsrelevanz
Keine
Handlungsdruck
Mittel
Bruchverhalten
Stiller Fehler
Betroffen
Administratoren, Integratoren, API-Nutzer

Hintergrund: Der neue Editor stellte für Unterfragen und Antwortoptionen bisher ein Eingabefeld ohne Werkzeugleiste bereit; bei Matrixzeilen entfernte er vor dem Speichern zusätzlich alle Auszeichnungen aus dem eingegebenen Wert. Für den Endtext war der formatierte Editor ausdrücklich abgeschaltet. Das Release aktiviert die Werkzeugleiste an diesen Stellen und streicht den Aufruf, der die Auszeichnungen entfernte; beim Willkommenstext und beim Fragetitel entfällt die getrennte Kennzeichnung zugunsten der Werkzeugleiste.

Konsequenz: Redakteure können Unterfragen, Antwortoptionen sowie Willkommens- und Endtexte formatieren, und die Auszeichnungen werden gespeichert statt verworfen. Damit können Felder, die bisher verlässlich reinen Text enthielten, ab sofort Auszeichnungen tragen. Auswertungen, Exporte und angeschlossene Systeme, die Unterfragen- und Antworttexte als Klartext weiterverarbeiten, erhalten dann Markup und zeigen es entweder roh an oder verrechnen es in Zeichenlängen und Vergleichen mit. Bestehende Texte bleiben unverändert; die Wirkung tritt erst ein, wenn ein Feld nach dem Update im neuen Editor bearbeitet wird. Die Änderung betrifft nur den neuen Editor; wo dieser nach A1 nicht greift, bleibt die bisherige Eingabe bestehen.

Vorher / Nachher:

// Vorher (editor/src/components/QuestionTypes/ArrayQuestion/ArrayRows/ArrayRow.js)
update={(value) =>
  handleUpdateL10ns(RemoveHTMLTagsInString(value), index)
}
// Nachher
update={(value) => handleUpdateL10ns(value, index)}
// Vorher (editor/src/components/Survey/SurveyFooter.js)
useRichTextEditor={false}
// Nachher
showToolbar={true}

Neuer Bezugswert: Wer sich bisher darauf verlassen hat, dass Unterfragen- und Antworttexte frei von Auszeichnungen sind, hat mit dieser Änderung keine Quelle mehr für diese Zusicherung. Aus dem Diff geht nicht hervor, ob an anderer Stelle eine bereinigte Fassung dieser Texte bereitsteht; das bleibt nicht bestimmbar und muss an der jeweiligen Ausgabeschnittstelle geprüft werden.

Nach dem Update testen: Formatiere im neuen Editor eine Matrixzeile und eine Antwortoption, speichere und prüfe im Datenexport sowie in den Rohwerten der von eigenen Integrationen genutzten Schnittstelle, ob die Auszeichnungen im Textfeld erscheinen. Prüfe anschließend die Darstellung dieser Texte im ausgefüllten Fragebogen und in der Druckansicht.

Betroffene Dateien: editor/src/components/QuestionTypes/ArrayQuestion/ArrayRows/ArrayRow.js, editor/src/components/QuestionTypes/MultipleChoice/MultipleChoiceSubquestion.js, editor/src/components/Survey/SurveyFooter.js, editor/src/components/Survey/SurveyHeader.js, editor/src/components/Survey/Questions/QuestionHeader.js

Relevante Commits: 14ea289927, 0e667c83ca

A7: Besitzerliste ohne leeren Namenszusatz

Sicherheitsrelevanz
Keine
Handlungsdruck
Niedrig
Bruchverhalten
Stiller Fehler
Betroffen
Integratoren, API-Nutzer

Hintergrund: Die Ausgabeumwandlung der Umfragedetails setzt für jeden möglichen Besitzer eine Beschriftung aus Benutzername und vollständigem Namen zusammen, getrennt durch einen Bindestrich. War kein vollständiger Name hinterlegt, entstand eine Beschriftung, die auf dem Trennzeichen endete. Das Release hängt den Zusatz nur noch an, wenn ein Name vorliegt.

Konsequenz: Die Beschriftung enthält für Benutzer ohne hinterlegten Namen kein Trennzeichen mehr. Integrationen, die diese Beschriftung wieder in Benutzername und Namen zerlegen, indem sie am Trennzeichen teilen, erhalten für diese Fälle nun ein einziges Feld statt zweier und laufen damit in eine andere Verzweigung, ohne dass ein Fehler ausgelöst wird. Die Änderung betrifft ausschließlich die Beschriftung; der Schlüsselwert der Einträge bleibt unverändert und eignet sich weiterhin als stabile Bezugsgröße.

Vorher / Nachher:

// Vorher (application/libraries/Api/Command/V1/Transformer/Output/TransformerOutputSurveyDetail.php)
return ['value' => $user['uid'], 'label' => $user['user'] . ' - ' . $user['full_name']];
// Nachher
return ['value' => $user['uid'], 'label' => $user['user'] . ($user['full_name'] ? ' - ' . $user['full_name'] : '')];

Neuer Bezugswert: Für die Zuordnung eines Besitzers ist der Schlüsselwert des Eintrags heranzuziehen, nicht die Beschriftung; er wird im Zitat unverändert mitgeführt. Wo der vollständige Name eigenständig benötigt wird, ist aus dem Diff keine Ersatzquelle in derselben Ausgabe erkennbar.

Nach dem Update testen: Lege einen Benutzer ohne vollständigen Namen an, rufe die Umfragedetails über die von eigenen Integrationen genutzte Schnittstelle ab und vergleiche die Beschriftung im Feld der Besitzerliste mit der eines Benutzers mit hinterlegtem Namen. Prüfe anschließend die eigene Zerlegungslogik gegen beide Fälle.

Betroffene Dateien: application/libraries/Api/Command/V1/Transformer/Output/TransformerOutputSurveyDetail.php

Relevante Commits: 8446984cce

Weitere relevante Änderungen

Duplikatprüfung für Fragecodes im Editor korrigiert
Survey Runtime · Kein Bruch · Administratoren
Beim Umbenennen eines Fragecodes wird der Eintrag jetzt über die Fragekennung statt über den alten Code gesucht, sodass die Duplikatprüfung nicht mehr fälschlich anschlägt. (6c58488e92)

Fehlerbehandlung bei Bilduploads im Editor korrigiert
Survey Runtime · Kein Bruch · Administratoren
Fehlgeschlagene Bilduploads stellen die vorherige Vorschau wieder her und melden den Serverfehler, statt eine unbrauchbare Objektadresse stehen zu lassen. (83a0ece030)

Fragengruppen bleiben beim Anlegen zugeklappt
Survey Runtime · Kein Bruch · Administratoren
Beim Anlegen einer neuen Fragengruppe bleiben die übrigen Gruppen zugeklappt, weil die Listenschlüssel nicht mehr bei jeder Längenänderung neu erzeugt werden. (e5d66f9485)

Neuer Editor in der Funktionstestpipeline abgeschaltet
Survey Runtime · Kein Bruch · Integratoren
Die Funktionstestpipeline des Projekts schaltet den neuen Editor per Konfigurationszeile ab und zeigt damit zugleich den Weg, ihn in eigenen Installationen abzuschalten. (861bd70a57)

Assets-Versionsnummer angehoben
Themes und Rendering · Kein Bruch · Administratoren, Theme-Entwickler
Die Assets-Versionsnummer wurde angehoben, wodurch Browser die ausgelieferten Admin- und Themedateien nach dem Update neu laden. (4b8d3a9b86)

Zuordnung nach Bereich

BereichVollständig beschriebenWeitere Einträge
Sicherheitkeine
DatenbankA2
RemoteControl APIkeine
Survey RuntimeA4, A5, A6ja
Themes und RenderingA1, A3, A4, A5ja
Plugin-KompatibilitätA1, A3
PerformanceA3, A4

Nicht betroffene Bereiche

Der Diff zeigt keine Änderung an application/helpers/remotecontrol/remotecontrol_handle.php; die über diese Datei bereitgestellten Fernsteuerungsaufrufe bleiben nach dieser Beobachtung unverändert.

Die Twig-Vorlagen der Fragedarstellung unterhalb von application/views/survey/questions erscheinen nicht im Diff; das ausgelieferte Markup der Antwortzeilen selbst ist nach dieser Beobachtung dasselbe wie zuvor.

composer.json, composer.lock und package.json erscheinen nicht im Diff; Abhängigkeiten und Mindestanforderungen bleiben nach dieser Beobachtung auf dem Stand des Vorgängerrelease.

Der Diff enthält unterhalb von application/helpers/update/updates keine neu angelegte Datei; der Mechanismus, über den zusätzliche Migrationsstufen ausgeliefert werden, ist nach dieser Beobachtung nicht bemüht worden, was das Zitat der unveränderten internen Datenbankversion unter A2 stützt. Aussagen darüber, ob Spalten, Indizes oder Bedingungen anderer Tabellen unangetastet bleiben, lassen sich daraus nicht ableiten und sind nicht bestimmbar.

Empfehlung

Welche Kennungen für welche Zielgruppe gelten, steht im Lesepfad.

Administratoren

Vor dem Update: Sichere Datenbank und Uploadverzeichnis vollständig, und stelle fest, auf welchem internen Datenbankstand die Installation steht, um zu wissen, ob das nachgebesserte Migrationsskript überhaupt läuft (A2). Kläre, ob der neue Fragen-Editor nach dem Update greifen soll, und trage andernfalls die Abschaltung vor dem Update in die eigene Konfigurationsdatei ein (A1). Erhebe, welche Umfragen einen Array-Filter auf einer Einfachauswahlfrage tragen und aktiv im Feld sind (A4).

Unmittelbar nach dem Update: Prüfe eine Verwaltungssitzung auf die Umleitung in den neuen Editor und kontrolliere die Umfragen mit eigenen Themen (A1, A5). Führe eine Massenlöschung auf einer Testumfrage mit Dateiuploadfrage durch und kontrolliere das Uploadverzeichnis (A3). Sieh dir in den zuvor erhobenen aktiven Umfragen die angezeigte Optionsmenge an (A4).

Rollback: Ein Rückschritt auf 7.0.6 setzt die Anwendungsdateien zurück, einschließlich der neuen Zeile in den Konfigurationsvorgaben; eine eigene Abschaltung in der Konfigurationsdatei bleibt bestehen und ist gegebenenfalls zurückzunehmen (A1). Da das Release keine neue Migrationsstufe einführt und die interne Datenbankversion unverändert bleibt, ist für dieses Update selbst kein Schemaeingriff rückgängig zu machen. Ob der Stand einer Installation, die das nachgebesserte Migrationsskript ausgeführt hat, sich zurücknehmen lässt, ist nicht bestimmbar; das Zitat unter A2 trägt weder eine Aussage zur Idempotenz noch zur Rückwärtskompatibilität. Prüfe einen solchen Rückschritt daher zuerst in einer Testumgebung und halte die Datensicherung bereit.

Plugin-Entwickler

Prüfe zuerst, ob dein Plugin Inhalte in die klassischen Ansichten der Fragen- und Gruppenverwaltung einhängt; diese Routen werden bei aktivem Editor umgeleitet, und der Einhängepunkt wird nicht mehr erreicht (A1). Prüfe anschließend, ob dein Plugin beim Löschen von Antworten auf Modellereignisse statt auf das Löschereignis des Plugin-Systems setzt, und stelle gegebenenfalls auf das Ereignis um, weil dessen Vorhandensein den satzweisen Pfad erzwingt (A3). Für Abfragen, ob überhaupt ein Abonnent für ein Ereignis vorliegt, steht im Plugin-Manager jetzt eine eigene Methode bereit (A3).

Theme-Entwickler

Prüfe zuerst, ob die Fragecontainer deines Umfragethemes die Klasse tragen, auf die die Relevanzhandler jetzt zusätzlich einschränken; ohne sie bleiben Ein- und Ausblenden wirkungslos (A5). Prüfe danach das Verhalten im Modus mit allen Fragen auf einer Seite, weil die Aktualisierung des Gruppenzustands in einen anderen Zweig gewandert ist (A5). Behandle in eigenen Skripten die Relevanzereignisse auf Antwortzeilen von Einfachauswahlfragen, die es zuvor nicht gab (A4), und ergänze im Adminthema die Gestaltung der neuen Auswahlschaltfläche in der Rasterleiste (A3). Rechne damit, dass Browser die Themedateien nach dem Update neu laden (siehe Weitere relevante Änderungen).

Integratoren

Kläre zuerst, ob die ausgelieferten Installationen die Voraussetzungen für den neuen Editor erfüllen, und lege fest, ob er ein- oder ausgeschaltet ausgeliefert wird (A1); die Testpipeline des Projekts zeigt die Abschaltung als Konfigurationszeile (siehe Weitere relevante Änderungen). Prüfe für Installationen unterhalb des aktuellen internen Datenbankstands den Updatelauf mit gesetztem Tabellenpräfix (A2). Stelle anschließend Auswertungen um, die Unterfragen- und Antworttexte als Klartext annehmen (A6), sowie Zerlegungen der Besitzerbeschriftung (A7). Berücksichtige in Datenvergleichen, dass sich die angezeigte Optionsmenge bei Einfachauswahlfragen mit Array-Filter ändern kann (A4).

API-Nutzer

Stelle die Auswertung der Besitzerliste auf den Schlüsselwert der Einträge um, statt die Beschriftung am Trennzeichen zu zerlegen (A7). Rechne damit, dass Unterfragen-, Antwort-, Willkommens- und Endtexte nach einer Bearbeitung im neuen Editor Auszeichnungen enthalten können, und bereinige sie auf der eigenen Seite, wo Klartext erwartet wird (A6).