diff options
| author | Till Glöggler <gloeggler@elan-ev.de> | 2026-01-12 09:31:25 +0100 |
|---|---|---|
| committer | Till Glöggler <gloeggler@elan-ev.de> | 2026-01-12 09:31:25 +0100 |
| commit | 246fe2c51046331af9c7509c201c937b2e433108 (patch) | |
| tree | 72b9521f360b17041e1349403aee18bf02c671a5 | |
| parent | 4a36282bc85d199b42e24c7715cbfa7dd21fd427 (diff) | |
Fix ical import problems
Closes #6133, #6132, and #6131
Merge request studip/studip!4655
| -rw-r--r-- | lib/classes/calendar/ICalendarImport.php | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/classes/calendar/ICalendarImport.php b/lib/classes/calendar/ICalendarImport.php index a204318..8e9db73 100644 --- a/lib/classes/calendar/ICalendarImport.php +++ b/lib/classes/calendar/ICalendarImport.php @@ -291,8 +291,9 @@ class ICalendarImport } // day events starts at 00:00:00 and ends at 23:59:59 - if ($check['DAY_EVENT']) - $properties['DTEND']--; + if ($check['DAY_EVENT']) { + $properties['DTEND']->sub(new DateInterval('PT1S')); + } // default: all imported events are set to private if (!$properties['CLASS'] @@ -344,7 +345,7 @@ class ICalendarImport $date->begin = $properties['DTSTART']->getTimestamp(); $date->end = $properties['DTEND']->getTimestamp(); - $date->title = $properties['SUMMARY']; + $date->title = $properties['SUMMARY'] ?: _('Ohne Titel'); $date->description = $properties['DESCRIPTION']; $date->access = $properties['CLASS'] ?? 'PRIVATE'; $date->user_category = $properties['CATEGORIES']; @@ -382,7 +383,7 @@ class ICalendarImport $date->month = $rrule['month'] ?? null; $date->repetition_type = $rrule['rtype'] ?? 'SINGLE'; $date->number_of_dates = $rrule['count'] ?? 1; - $date->repetition_end = $rrule['expire'] ?? 0; + $date->repetition_end = $rrule['expire'] ? $rrule['expire']->getTimestamp() : 0; } private function unfoldLine($data) @@ -433,7 +434,7 @@ class ICalendarImport if (count($parts) != 2) { // not a date time string but may be just a date string $date = $this->parseDate($date_time); - return DateTimeImmutable::createFromFormat('YmdHis', implode('', $date) . '000000'); + return DateTime::createFromFormat('YmdHis', implode('', $date) . '000000'); } $date = $this->parseDate($parts[0]); @@ -444,7 +445,7 @@ class ICalendarImport } else { $time_zone = new DateTimeZone('Europe/Berlin'); } - return DateTimeImmutable::createFromFormat( + return DateTime::createFromFormat( 'YmdHis', implode('', $date) . $time['hour'] . $time['minute'] . $time['second'], $time_zone @@ -491,7 +492,15 @@ class ICalendarImport */ private function parseDuration($interval_text): DateInterval { - return new DateInterval($interval_text); + $interval_text = trim($interval_text); + $invert = 0; + if ($interval_text !== '' && $interval_text[0] === '-') { + $invert = 1; + $interval_text = substr($interval_text, 1); + } + $interval = new DateInterval($interval_text); + $interval->invert = $invert; + return $interval; } private function parsePriority($value) |
