Branch 'dev/recurring-invitations' - 2 commits - plugins/calendar
Thomas Brüderli
bruederli at kolabsys.com
Fri Feb 20 10:18:27 CET 2015
plugins/calendar/calendar.php | 3 +-
plugins/calendar/calendar_ui.js | 24 ++++++++--------------
plugins/calendar/drivers/kolab/kolab_driver.php | 26 ++++++++++++++++++++----
3 files changed, 33 insertions(+), 20 deletions(-)
New commits:
commit f972f4a511a7c3710ec5f5cee001133837797923
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Fri Feb 20 10:18:21 2015 +0100
Disable the 'future' savemode for event deletion if attendees are involved
diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index 5a26c18..eb57fa7 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -2603,25 +2603,19 @@ function rcube_calendar_ui(settings)
// recurring event: user needs to select the savemode
if (event.recurrence) {
- var disabled_state = '', message_label = (action == 'remove' ? 'removerecurringeventwarning' : 'changerecurringeventwarning');
-/*
- if (_has_attendees) {
- if (action == 'remove') {
- if (!_is_organizer) {
- message_label = 'removerecurringallonly';
- disabled_state = ' disabled';
- }
- }
- else if (is_organizer(event)) {
- disabled_state = ' disabled';
- }
+ var future_disabled = '', message_label = (action == 'remove' ? 'removerecurringeventwarning' : 'changerecurringeventwarning');
+
+ // disable the 'future' savemode if attendees are involved
+ // reason: no calendaring system supports the thisandfuture range parameter
+ if (action == 'remove' && _has_attendees && is_organizer(event)) {
+ future_disabled = ' disabled';
}
-*/
+
html += '<div class="message"><span class="ui-icon ui-icon-alert"></span>' +
rcmail.gettext(message_label, 'calendar') + '</div>' +
'<div class="savemode">' +
- '<a href="#current" class="button' + disabled_state + '">' + rcmail.gettext('currentevent', 'calendar') + '</a>' +
- '<a href="#future" class="button' + disabled_state + '">' + rcmail.gettext('futurevents', 'calendar') + '</a>' +
+ '<a href="#current" class="button">' + rcmail.gettext('currentevent', 'calendar') + '</a>' +
+ '<a href="#future" class="button' + future_disabled + '">' + rcmail.gettext('futurevents', 'calendar') + '</a>' +
'<a href="#all" class="button">' + rcmail.gettext('allevents', 'calendar') + '</a>' +
(action != 'remove' ? '<a href="#new" class="button">' + rcmail.gettext('saveasnew', 'calendar') + '</a>' : '') +
'</div>';
commit 515a7d9ef6dcdc1c1de2488745a511bdac256896
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Fri Feb 20 09:25:24 2015 +0100
Small fixes to recurring event invitations (#4387)
diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index 8be5956..f6079db 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -1171,11 +1171,12 @@ class calendar extends rcube_plugin
$sent = $this->notify_attendees($master, null, $action, $event['_comment']);
if ($sent < 0)
$this->rc->output->show_message('calendar.errornotifying', 'error');
+
+ $event['attendees'] = $master['attendees']; // this tricks us into the next if clause
}
$event['id'] = $success;
$event['_savemode'] = 'all';
- $event['attendees'] = $master['attendees']; // this tricks us into the next if clause
$old = null;
}
diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php
index d6fb55a..88c2a38 100644
--- a/plugins/calendar/drivers/kolab/kolab_driver.php
+++ b/plugins/calendar/drivers/kolab/kolab_driver.php
@@ -993,24 +993,37 @@ class kolab_driver extends calendar_driver
// remove recurrence exceptions on re-scheduling
if ($reschedule) {
- unset($event['recurrence']['EXCEPTIONS']);
+ unset($event['recurrence']['EXCEPTIONS'], $master['recurrence']['EXDATE']);
}
else if (is_array($event['recurrence']['EXCEPTIONS'])) {
// only keep relevant exceptions
$event['recurrence']['EXCEPTIONS'] = array_filter($event['recurrence']['EXCEPTIONS'], function($exception) use ($event) {
return $exception['start'] > $event['start'];
});
+ if (is_array($event['recurrence']['EXDATE'])) {
+ $event['recurrence']['EXDATE'] = array_filter($event['recurrence']['EXDATE'], function($exdate) use ($event) {
+ return $exdate > $event['start'];
+ });
+ }
}
// compute remaining occurrences
if ($event['recurrence']['COUNT']) {
if (!$old['_count'])
- $old['_count'] = $this->get_recurrence_count($object, $event['start']);
+ $old['_count'] = $this->get_recurrence_count($object, $old['start']);
$event['recurrence']['COUNT'] -= intval($old['_count']);
}
+ // remove fixed weekday when date changed
+ if ($old['start']->format('Y-m-d') != $event['start']->format('Y-m-d')) {
+ if (strlen($event['recurrence']['BYDAY']) == 2)
+ unset($event['recurrence']['BYDAY']);
+ if ($old['recurrence']['BYMONTH'] == $old['start']->format('n'))
+ unset($event['recurrence']['BYMONTH']);
+ }
+
// set until-date on master event
- $master['recurrence']['UNTIL'] = clone $event['start'];
+ $master['recurrence']['UNTIL'] = clone $old['start'];
$master['recurrence']['UNTIL']->sub(new DateInterval('P1D'));
unset($master['recurrence']['COUNT']);
@@ -1020,6 +1033,11 @@ class kolab_driver extends calendar_driver
return $exception['start'] < $event['start'];
});
}
+ if (is_array($master['recurrence']['EXDATE'])) {
+ $master['recurrence']['EXDATE'] = array_filter($master['recurrence']['EXDATE'], function($exdate) use ($event) {
+ return $exdate < $event['start'];
+ });
+ }
// save new event
if ($success = $storage->insert_event($event)) {
@@ -1115,7 +1133,7 @@ class kolab_driver extends calendar_driver
// when saving an instance in 'all' mode, copy recurrence exceptions over
if ($old['recurrence_id']) {
- $event['recurrence'] = $master['recurrence'];
+ $event['recurrence']['EXCEPTIONS'] = $master['recurrence']['EXCEPTIONS'];
}
// TODO: forward changes to exceptions (which do not yet have differing values stored)
More information about the commits
mailing list