Problem bei Formularen mit "rgxp time" (Bug im Core?)
Bei meiner Calendar-Editor-Erweiterung gibt es seit einem der letzten Updates diesen Fehler, wenn man auch das Feld "Startzeit" ausfüllt.
PHP-Code:
Fatal error: Uncaught exception Exception with message Invalid date "14:45" thrown in …/system/libraries/Date.php on line 428
#0 …/system/libraries/Date.php(92): Date->dateToUnix()
#1 …/system/libraries/Controller.php(2962): Date->__construct('14:45')
#2 …/system/modules/calendar_editor/ModuleEventEditor.php(844): Controller->prepareForWidget(Array, 'startTime', '14:45')
#3 …/system/modules/frontend/Module.php(140): ModuleEventEditor->compile()
Das betreffende feld ist als 'rgxp' => 'time' markiert. Eine Eingabe wie "14:45" sollte je eigentlich eine gültige Zeit sein. Beheben kann man den Fehler, wenn man die neue Datumsüberprüfung in der Date.php aussschaltet (zeile 426, checkdate(...)), oder wenn man in der Controller.php Uhrzeiten anders als ein Datum behandelt (Zeile 2962ff):
PHP-Code:
if ($varValue != '' && ($arrData['eval']['rgxp'] == 'date' || $arrData['eval']['rgxp'] == 'datim'))
{
$objDate = new Date($varValue);
$arrNew['value'] = $objDate->{$arrData['eval']['rgxp']};
}
if ($varValue != '' && ($arrData['eval']['rgxp'] == 'time' ))
{
$objDate = new Date($varValue, $GLOBALS['TL_CONFIG']['timeFormat']); // hier das Zeitfomat aus den Settings nehmen
$arrNew['value'] = $objDate->{$arrData['eval']['rgxp']};
}
Frage: Habe ich da einen Bug im Contao-Core gefunden, oder mache ich mit meiner Erweiterung was grundlegend falsch?
Liste der Anhänge anzeigen (Anzahl: 1)
Für meine aktuelle Contao Installation, die ich jetzt geupdated habe, benutze ich als workaround:
PHP-Code:
// Workaround for contao 2.11.10: Set starttime in correct format if given: 'd.m.Y H:i'
if($NewEventData['startTime'] != '' && $NewEventData['startDate'] != ''){
$NewEventData['startTime'] = $NewEventData['startDate'].' '.$NewEventData['startTime'];
}
// Workaround for contao 2.11.10: Set endtime in correct format if given: 'd.m.Y H:i'
if($NewEventData['endTime'] != '' && $NewEventData['endDate'] != ''){
$NewEventData['endTime'] = $NewEventData['endDate'].' '.$NewEventData['endTime'];
}
Indem ich einfach das entsprechende Datum für das Zeitfeld setze... Wäre aber auch interessiert an einer Lösung, daher ein *bump* für diesen Thread.
@Gausi: Ich habe bei der Fehlersuche auch den Code etwas aufgeräumt, vielleicht willst du damit weiterarbeiten... Ich benutze seitens des Codes für meine Seite aber nur die Funktion des HInzufügens im FE, Bearbeitung erfolgt bei mir im BE.