aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/calendar
diff options
context:
space:
mode:
Diffstat (limited to 'lib/classes/calendar')
-rw-r--r--lib/classes/calendar/CalendarScheduleModel.php2
-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