From f33ce42c01001e013048f281432734c93293b5dc Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 28 Sep 2011 17:27:25 +0200 Subject: [PATCH] Make undo work when deleting an instance of a recurring event (#441) --- plugins/calendar/drivers/kolab/kolab_driver.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 341c2597..9363c1a5 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -476,6 +476,7 @@ class kolab_driver extends calendar_driver $savemode = 'all'; $master = $event; + $this->rc->session->remove('calendar_restore_event_data'); $GLOBALS['conf']['kolab']['no_triggering'] = true; // read master if deleting a recurring event @@ -486,6 +487,8 @@ class kolab_driver extends calendar_driver switch ($savemode) { case 'current': + $_SESSION['calendar_restore_event_data'] = $master; + // removing the first instance => just move to next occurence if ($master['id'] == $event['id']) { $recurring = reset($storage->_get_recurring_events($event, $event['start'], $event['end'] + 86400 * 370, $event['id'].'-1')); @@ -502,6 +505,8 @@ class kolab_driver extends calendar_driver case 'future': if ($master['id'] != $event['id']) { + $_SESSION['calendar_restore_event_data'] = $master; + // set until-date on master event $master['recurrence']['UNTIL'] = $event['start'] - 86400; unset($master['recurrence']['COUNT']); @@ -531,7 +536,12 @@ class kolab_driver extends calendar_driver public function restore_event($event) { if ($storage = $this->calendars[$event['calendar']]) { - if ($success = $storage->restore_event($event)) + if (!empty($_SESSION['calendar_restore_event_data'])) + $success = $storage->update_event($_SESSION['calendar_restore_event_data']); + else + $success = $storage->restore_event($event); + + if ($success) $this->rc->output->command('plugin.ping_url', array('action' => 'calendar/push-freebusy', 'source' => $storage->id)); return $success;