Skip to content

3.1.1

Latest

Choose a tag to compare

@skerbis skerbis released this 03 Oct 16:17
32b1eba

Fixed

  • Kritischer Datenverlust bei picker_type: datetime (und potenziell allen anderen Picker-Typen): War auf derselben REDAXO-Installation zusätzlich noch das alte, vor der Umbenennung in v3.0.0 installierte flatpickr-Addon aktiv, luden dessen boot.php und dieses Addons boot.php beide unabhängig voneinander ihre jeweilige Kopie der Vendor-Bibliothek plus ein eigenes Init-Script (flatpickr_init.js bzw. a11y_datetime_init.js). Beide Scripts scannen document.querySelectorAll('.a11y_datetime') und initialisieren jedes gefundene Element — jedoch mit jeweils eigenem, nicht gegenseitig erkanntem Guard-Attribut (data-flatpickr-initialized vs. data-a11y-datetime-initialized). Zusätzlich übernimmt die Vendor-Bibliothek beim Erzeugen des sichtbaren altInput standardmäßig die komplette className des Original-Elements (siehe setupInputs()/altInputClass-Default in a11y_datetime.js) — inklusive der Trigger-Klasse .a11y_datetime selbst. Dadurch sah der frisch erzeugte, sichtbare altInput für jeden späteren Selector-Scan wie ein brandneues, noch nicht initialisiertes Picker-Feld aus. Ergebnis: Der Picker wurde zweimal auf demselben logischen Feld initialisiert (das zweite Mal auf dem altInput der ersten Instanz). Die zweite Instanz erzeugte ein eigenes verstecktes/sichtbares Input-Paar, das der Redakteur tatsächlich bedient — während das ORIGINALE, für den Formular-Submit benannte <input name="FORM[...]"> bei der ersten (jetzt verwaisten) Instanz verblieb und nie ein selectedDates-Update bekam. Beim Absenden wurde daher ein leerer String übertragen, den PHP zu einem ungültigen Datum wie -0001-11-30 00:00 verarbeitete — der ausgewählte Termin ging vollständig verloren. Fix in assets/a11y_datetime_init.js: (1) Das Guard-Attribut wird jetzt synchron VOR dem Aufruf der Vendor-Factory gesetzt (statt danach) und beim Prüfen UND Setzen wird zusätzlich das vom flatpickr-Addon verwendete data-flatpickr-initialized-Attribut berücksichtigt, sodass sich beide Init-Scripts gegenseitig zuverlässig erkennen. (2) altInputClass wird jetzt explizit gesetzt (Original-Klassenliste minus .a11y_datetime/.a11y_datetime_range), damit der generierte altInput nicht erneut als Trigger-Element erkannt wird. Ergänzt die Ersatzfeld-Erkennung aus 3.1.0 (isAltInputOfExistingPicker), beide Prüfungen greifen jetzt zusammen. Live gegen eine REDAXO-5.21-Instanz mit beiden Addons parallel installiert reproduziert und verifiziert. (#1)
  • Platzhalter in der Backend-Konfigurationszusammenfassung (value.a11y_datetime_addon.tpl.php, Texte wie „Typ: %s“, „Minuten: %s“, „Locale: %s“): Die Lang-Dateien nutzten das alte sprintf-Format %s, REDAXOs rex_i18n::msg() ersetzt aber ausschließlich positionelle Platzhalter im Format {0}, {1}, … . Dadurch blieb %s im Backend-Hilfetext unter dem Datums-/Zeitfeld immer wortwörtlich stehen, ohne dass der eigentliche Wert (Feldtyp, Minuten-Schrittweite, Locale, …) je sichtbar wurde. Fix: alle betroffenen Keys in lang/de_de.lang und lang/en_gb.lang (a11y_datetime_yform_summary_*) von %s auf {0} umgestellt. (#1)