diff --git a/lib/ext/Syncroton/Model/EmailMeetingRequest.php b/lib/ext/Syncroton/Model/EmailMeetingRequest.php --- a/lib/ext/Syncroton/Model/EmailMeetingRequest.php +++ b/lib/ext/Syncroton/Model/EmailMeetingRequest.php @@ -78,7 +78,7 @@ 'dtStamp' => array('type' => 'datetime'), 'endTime' => array('type' => 'datetime'), 'globalObjId' => array('type' => 'string'), - 'instanceType' => array('type' => 'datetime'), + 'instanceType' => array('type' => 'number'), 'location' => array('type' => 'string'), 'organizer' => array('type' => 'string'), //e-mail address 'recurrenceId' => array('type' => 'datetime'), diff --git a/lib/kolab_sync_data_email.php b/lib/kolab_sync_data_email.php --- a/lib/kolab_sync_data_email.php +++ b/lib/kolab_sync_data_email.php @@ -408,23 +408,21 @@ $meeting['dtStamp'] = self::date_from_kolab($event['dtstamp'] ?? null); $meeting['endTime'] = self::date_from_kolab($event['end'] ?? null); $meeting['location'] = $event['location'] ?? null; - - //TODO implement recurrences. We can't detect exceptions like this (don't know how), and the recurrences structure is different from event, - //so that also doesn't work like this. - // if (isset($event['recurrence']['EXCEPTIONS'])) { - // $meeting['instanceType'] = Syncroton_Model_EmailMeetingRequest::TYPE_RECURRING_EXCEPTION; - // $this->recurrence_from_kolab($collection, $event, $meeting); - // // } else if (isset($event['recurrence'])) { - // // $meeting['instanceType'] = Syncroton_Model_EmailMeetingRequest::TYPE_RECURRING_SINGLE; - // // $meeting['recurrenceId'] = set the date; - // } else if (isset($event['recurrence'])) { - // $meeting['instanceType'] = Syncroton_Model_EmailMeetingRequest::TYPE_RECURRING_MASTER; - // $this->recurrence_from_kolab($collection, $event, $meeting); - // } else { - // $meeting['instanceType'] = Syncroton_Model_EmailMeetingRequest::TYPE_NORMAL; - // } $meeting['instanceType'] = Syncroton_Model_EmailMeetingRequest::TYPE_NORMAL; + if (!empty($event['recurrence_date'])) { + $meeting['recurrenceId'] = self::date_from_kolab($event['recurrence_date']); + if (!empty($event['status']) && $event['status'] == 'CANCELLED') { + $meeting['instanceType'] = Syncroton_Model_EmailMeetingRequest::TYPE_RECURRING_EXCEPTION; + } else { + $meeting['instanceType'] = Syncroton_Model_EmailMeetingRequest::TYPE_RECURRING_SINGLE; + } + } else if (!empty($event['recurrence'])) { + $meeting['instanceType'] = Syncroton_Model_EmailMeetingRequest::TYPE_RECURRING_MASTER; + // TODO: MeetingRequest recurrence is different that the one in Calendar + // $this->recurrence_from_kolab($collection, $event, $meeting); + } + // Organizer if (!empty($event['attendees'])) { foreach ($event['attendees'] as $idx => $attendee) {