diff options
Diffstat (limited to 'lib/classes/calendar')
| -rw-r--r-- | lib/classes/calendar/CalendarScheduleModel.php | 2 | ||||
| -rw-r--r-- | lib/classes/calendar/EventData.php (renamed from lib/classes/calendar/EventData.class.php) | 0 | ||||
| -rw-r--r-- | lib/classes/calendar/EventSource.php (renamed from lib/classes/calendar/EventSource.interface.php) | 0 | ||||
| -rw-r--r-- | lib/classes/calendar/ICalendarExport.php (renamed from lib/classes/calendar/ICalendarExport.class.php) | 100 | ||||
| -rw-r--r-- | lib/classes/calendar/ICalendarImport.php (renamed from lib/classes/calendar/ICalendarImport.class.php) | 0 | ||||
| -rw-r--r-- | lib/classes/calendar/Owner.php (renamed from lib/classes/calendar/Owner.interface.php) | 0 |
6 files changed, 43 insertions, 59 deletions
diff --git a/lib/classes/calendar/CalendarScheduleModel.php b/lib/classes/calendar/CalendarScheduleModel.php index 468b7e2..0aeadee 100644 --- a/lib/classes/calendar/CalendarScheduleModel.php +++ b/lib/classes/calendar/CalendarScheduleModel.php @@ -623,7 +623,7 @@ class CalendarScheduleModel SET visible = 0 WHERE seminar_id = ? AND user_id = ? AND metadate_id = ?"); } else { - $stmt = DBManager::get()->prepare("INSERT INTO schedule_seminare + $stmt = DBManager::get()->prepare("INSERT IGNORE INTO schedule_seminare (seminar_id, user_id, metadate_id, visible) VALUES(?, ?, ?, 0)"); } diff --git a/lib/classes/calendar/EventData.class.php b/lib/classes/calendar/EventData.php index 95e89b0..95e89b0 100644 --- a/lib/classes/calendar/EventData.class.php +++ b/lib/classes/calendar/EventData.php diff --git a/lib/classes/calendar/EventSource.interface.php b/lib/classes/calendar/EventSource.php index 48506d7..48506d7 100644 --- a/lib/classes/calendar/EventSource.interface.php +++ b/lib/classes/calendar/EventSource.php diff --git a/lib/classes/calendar/ICalendarExport.class.php b/lib/classes/calendar/ICalendarExport.php index ce50f87..d8d1af7 100644 --- a/lib/classes/calendar/ICalendarExport.class.php +++ b/lib/classes/calendar/ICalendarExport.php @@ -1,6 +1,6 @@ <?php /** - * ICalendarExport.class.php + * ICalendarExport.php * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -55,7 +55,7 @@ class ICalendarExport (`calendar_dates`.`begin` <= :end AND `calendar_dates`.`end` >= :begin) OR (`calendar_dates`.`repetition_type` != 'SINGLE' - AND (`calendar_dates`.`repetition_end` >= :end + AND (`calendar_dates`.`repetition_end` >= :begin OR `calendar_dates`.`repetition_end` = 0) AND `calendar_dates`.`begin` < :end))", [ @@ -76,20 +76,7 @@ class ICalendarExport if ($this->time === 0) { $this->time = time(); } - $dates = CourseDate::findBySql( - "LEFT JOIN `seminar_user` - ON `termine`.`range_id` = `seminar_user`.`Seminar_id` - WHERE - `seminar_user`.`user_id` = :user_id - AND `seminar_user`.`bind_calendar` = 1 - AND (`termine`.`date` <= :end - AND `termine`.`end_time` >= :begin)", - [ - ':user_id' => $user_id, - ':begin' => $start->getTimestamp(), - ':end' => $end->getTimestamp(), - ] - ); + $dates = CalendarCourseDate::getEvents($start, $end, $user_id); $ical = ''; foreach ($dates as $date) { $ical .= $this->writeICalEvent($this->prepareCourseDate($date)); @@ -102,20 +89,7 @@ class ICalendarExport if ($this->time === 0) { $this->time = time(); } - $dates = CourseExDate::findBySql( - "LEFT JOIN `seminar_user` - ON `ex_termine`.`range_id` = `seminar_user`.`Seminar_id` - WHERE - `seminar_user`.`user_id` = :user_id - AND `seminar_user`.`bind_calendar` = 1 - AND (`ex_termine`.`date` <= :end - AND `ex_termine`.`end_time` >= :begin)", - [ - ':user_id' => $user_id, - ':begin' => $start->getTimestamp(), - ':end' => $end->getTimestamp(), - ] - ); + $dates = CalendarCourseExDate::getEvents($start, $end, $user_id); $ical = ''; foreach ($dates as $date) { $ical .= $this->writeICalEvent($this->prepareCourseDate($date)); @@ -124,10 +98,10 @@ class ICalendarExport } /** - * @param CalendarDate | CourseExDate $date - * @return array + * @param CalendarDate $date The calendar date to export. + * @return array Calendar date data prepared for export. */ - public function prepareCalendarDate($date): array + public function prepareCalendarDate(CalendarDate $date): array { return [ 'SUMMARY' => $date->title, @@ -155,8 +129,8 @@ class ICalendarExport } /** - * @param CalendarDate | CourseExDate $date - * @return array + * @param CourseDate | CourseExDate $date The course date to export. + * @return array Course date data prepared for export. */ public function prepareCourseDate($date): array { @@ -165,10 +139,13 @@ class ICalendarExport if ($date instanceof CourseExDate) { $summary .= ' ' . _('(fällt aus)'); $categories = ''; + $description = $date->content; + } else { + $description = implode("\n", $date->topics->pluck('title')); } return [ 'SUMMARY' => $summary, - 'DESCRIPTION' => '', + 'DESCRIPTION' => $description, 'LOCATION' => $date->getRoomName(), 'CATEGORIES' => $categories, 'LAST-MODIFIED' => $date->chdate, @@ -286,7 +263,7 @@ class ICalendarExport case 'DUE': case 'RECURRENCE-ID': if (array_key_exists('VALUE', $params)) { - if ($params['VALUE'] == 'DATE') { + if ($params['VALUE'] === 'DATE') { $value = $this->_exportDate($value); } else { $value = $this->_exportDateTime($value); @@ -299,12 +276,12 @@ class ICalendarExport break; case 'EXDATE': - if (array_key_exists('VALUE', $params)) { + if (array_key_exists('VALUE', $params) && $params['VALUE'] === 'DATE') { $value = $this->exportExDate($value); } else { - $value = $this->exportExDateTime($value); + $value = $this->exportExDateTime($value, $exdate_time); + $params_str = ';TZID=Europe/Berlin'; } - $params_str = ';TZID=Europe/Berlin'; break; // Integer fields @@ -338,7 +315,7 @@ class ICalendarExport // Recursion fields case 'EXRULE': case 'RRULE': - if ($value['type'] !== 'SINGLE') { + if ($value['type'] !== 'SINGLE' && $value['type'] !== '') { $value = $this->_exportRecurrence($value); } break; @@ -381,8 +358,8 @@ class ICalendarExport public function _exportDateTime($value, $utc = false) { $date_time = new DateTime(); - $date_time->setTimestamp($value); - //transform local time in UTC + $date_time->setTimestamp(intval($value)); + //transform local time to UTC if ($utc) { $tz_utc = new DateTimeZone('UTC'); $date_time->setTimezone($tz_utc); @@ -427,7 +404,7 @@ class ICalendarExport $value['offset'] = '-1'; } - if ($value['count']) { + if ($value['count'] > 1) { unset($value['expire']); } @@ -438,7 +415,7 @@ class ICalendarExport $rrule[] = 'FREQ=' . $r_value; break; case 'expire': - if ($r_value < CalendarDate::NEVER_ENDING) + if ($r_value) $rrule[] = 'UNTIL=' . $this->_exportDateTime($r_value, true); break; case 'interval': @@ -470,7 +447,9 @@ class ICalendarExport $rrule[] = 'BYMONTH=' . $r_value; break; case 'count': - $rrule[] = 'COUNT=' . $r_value; + if ($r_value > 1) { + $rrule[] = 'COUNT=' . $r_value; + } break; } } @@ -501,35 +480,40 @@ class ICalendarExport return implode(',', $wdays); } + /** * Formats dates of exception. * - * @param string $value Unix timestamps as csv list. + * @param string $value Date values (Y-m-d) as csv list. * @return string The formatted Exceptions. */ public function exportExDate(string $value): string { - $exdates = []; - $date_times = explode(',', $value); - foreach ($date_times as $date_time) { - $exdates[] = $this->_exportDate($date_time); + $ex_dates = []; + $dates = explode(',', $value); + foreach ($dates as $date) { + $ex_datetime = $date . ' 12:00:00'; + $ex_date = DateTime::createFromFormat('Y-m-d H:i:s', $ex_datetime); + $ex_dates[] = $this->_exportDate($ex_date->getTimestamp()); } - return implode(',', $exdates); + + return implode(',', $ex_dates); } /** * Formats date times of exception. * - * @param string $value Unix timestamps as csv list. + * @param string $value Date values (Y-m-d) as csv list. + * @param int $begin Start date of event as unix timestamp. * @return string The formatted Exceptions. */ - public function exportExDateTime(string $value): string + public function exportExDateTime(string $value, int $begin): string { $ex_dates = []; - $ex_date_times = explode(',', $value); - foreach ($ex_date_times as $ex_date_time) { - $date_time = new DateTime(); - $date_time->setTimestamp($ex_date_time); + $dates = explode(',', $value); + foreach ($dates as $date) { + $ex_datetime = $date . date(' H:i:s', $begin); + $date_time = DateTime::createFromFormat('Y-m-d H:i:s', $ex_datetime); $ex_dates[] = $date_time->format('Ymd\THis'); } return implode(',', $ex_dates); diff --git a/lib/classes/calendar/ICalendarImport.class.php b/lib/classes/calendar/ICalendarImport.php index e78696d..e78696d 100644 --- a/lib/classes/calendar/ICalendarImport.class.php +++ b/lib/classes/calendar/ICalendarImport.php diff --git a/lib/classes/calendar/Owner.interface.php b/lib/classes/calendar/Owner.php index a7c2519..a7c2519 100644 --- a/lib/classes/calendar/Owner.interface.php +++ b/lib/classes/calendar/Owner.php |
