From aea9f64676c5b7a765e8ed7bc3b4e9bc9e28133d Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 4 Apr 2012 11:57:20 +0200 Subject: [PATCH 1/3] Bugfix: check the right object property --- plugins/calendar/calendar_ui.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js index 75333a01..f7683cff 100644 --- a/plugins/calendar/calendar_ui.js +++ b/plugins/calendar/calendar_ui.js @@ -2349,7 +2349,7 @@ function rcube_calendar_ui(settings) event.end = new Date(event.start.getTime() + (allDay ? DAY_MS : HOUR_MS)); } // moved to all-day section: set times to 12:00 - 13:00 - if (allDay && !event.allday) { + if (allDay && !event.allDay) { event.start.setHours(12); event.start.setMinutes(0); event.start.setSeconds(0); @@ -2358,7 +2358,7 @@ function rcube_calendar_ui(settings) event.end.setSeconds(0); } // moved from all-day section: set times to working hours - else if (event.allday && !allDay) { + else if (event.allDay && !allDay) { var newstart = event.start.getTime(); revertFunc(); // revert to get original duration var numdays = Math.max(1, Math.round((event.end.getTime() - event.start.getTime()) / DAY_MS)) - 1; From cf94b34f6abfbaa8647aa0a0889733c5e8888194 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 4 Apr 2012 13:01:59 +0200 Subject: [PATCH 2/3] Adapt to new kolab_storage backend --- .../calendar/drivers/kolab/kolab_calendar.php | 76 +++---------------- .../calendar/drivers/kolab/kolab_driver.php | 12 +-- 2 files changed, 15 insertions(+), 73 deletions(-) diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index ade85e9b..ea08224f 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -60,7 +60,7 @@ class kolab_calendar // fetch objects from the given IMAP folder $this->storage = kolab_storage::get_folder($this->imap_folder); - $this->ready = !PEAR::isError($this->storage); + $this->ready = $this->storage && !PEAR::isError($this->storage); // Set readonly and alarms flags according to folder permissions if ($this->ready) { @@ -70,7 +70,7 @@ class kolab_calendar } else { $rights = $this->storage->get_acl(); - if (!PEAR::isError($rights)) { + if ($rights && !PEAR::isError($rights)) { if (strpos($rights, 'i') !== false) $this->readonly = false; } @@ -271,7 +271,7 @@ class kolab_calendar $object = $this->_from_rcube_event($event); $saved = $this->storage->save($object, 'event'); - if (PEAR::isError($saved)) { + if (!$saved || PEAR::isError($saved)) { raise_error(array( 'code' => 600, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, @@ -297,15 +297,15 @@ class kolab_calendar public function update_event($event) { $updated = false; - $old = $this->storage->getObject($event['id']); - if (PEAR::isError($old)) + $old = $this->storage->get_object($event['id']); + if (!$old || PEAR::isError($old)) return false; $old['recurrence'] = ''; # clear old field, could have been removed in new, too $object = $this->_from_rcube_event($event, $old); $saved = $this->storage->save($object, 'event', $event['id']); - if (PEAR::isError($saved)) { + if (!$saved || PEAR::isError($saved)) { raise_error(array( 'code' => 600, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, @@ -328,29 +328,15 @@ class kolab_calendar */ public function delete_event($event, $force = true) { - $deleted = false; + $deleted = $this->storage->delete($event['id'], $force); - if (!$force) { - // Get IMAP object ID - $imap_uid = $this->storage->_getStorageId($event['id']); - } - - $deleteme = $this->storage->delete($event['id'], $force); - - if (PEAR::isError($deleteme)) { + if (!$deleted || PEAR::isError($deleted)) { raise_error(array( 'code' => 600, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Error deleting event object from Kolab server:" . $deleteme->getMessage()), + 'message' => "Error deleting event object from Kolab server"), true, false); } - else { - // Save IMAP object ID in session, will be used for restore action - if ($imap_uid) - $_SESSION['kolab_delete_uids'][$event['id']] = $imap_uid; - - $deleted = true; - } return $deleted; } @@ -363,48 +349,8 @@ class kolab_calendar */ public function restore_event($event) { - $imap_uid = $_SESSION['kolab_delete_uids'][$event['id']]; - - if (!$imap_uid) - return false; - - $session = &Horde_Kolab_Session::singleton(); - $imap = &$session->getImap(); - - if (is_object($imap) && is_a($imap, 'PEAR_Error')) { - $error = $imap; - } - else { - $result = $imap->select($this->imap_folder); - if (is_object($result) && is_a($result, 'PEAR_Error')) { - $error = $result; - } - else { - $result = $imap->undeleteMessages($imap_uid); - if (is_object($result) && is_a($result, 'PEAR_Error')) { - $error = $result; - } - else { - // re-sync the cache - $this->storage->synchronize(); - } - } - } - - if ($error) { - raise_error(array( - 'code' => 600, 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Error undeleting an event object(s) from the Kolab server:" . $error->getMessage()), - true, false); - - return false; - } - - $rcmail = rcmail::get_instance(); - $rcmail->session->remove('kolab_delete_uids'); - - return true; + // TODO: re-implement this with new kolab_storege backend + return false; } /** diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index b48a9581..653a3b89 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -161,8 +161,8 @@ class kolab_driver extends calendar_driver } // subscribe to new calendar by default - $storage = $this->rc->get_storage(); - $storage->subscribe($folder); + $storage = kolab_storage::get_folder($folder); + $storage->subscribe($prop['active'], kolab_storage::SERVERSIDE_SUBSCRIPTION); // create ID $id = kolab_storage::folder_id($folder); @@ -227,13 +227,9 @@ class kolab_driver extends calendar_driver public function subscribe_calendar($prop) { if ($prop['id'] && ($cal = $this->calendars[$prop['id']])) { - $storage = $this->rc->get_storage(); - if ($prop['active']) - return $storage->subscribe($cal->get_realname()); - else - return $storage->unsubscribe($cal->get_realname()); + return $cal->storage->subscribe($prop['active'], kolab_storage::SERVERSIDE_SUBSCRIPTION); } - + return false; } From 60f6bbd54ea6fab0ac0fa5dabc8040e90433ffa3 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 4 Apr 2012 13:02:35 +0200 Subject: [PATCH 3/3] Update TODO list and package file --- plugins/calendar/TODO | 8 ++++---- plugins/calendar/package.xml | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/calendar/TODO b/plugins/calendar/TODO index aefb61d3..35d5e0ae 100644 --- a/plugins/calendar/TODO +++ b/plugins/calendar/TODO @@ -25,13 +25,13 @@ + View: 3.9: Alter event with drag/drop + Option: 4.12: Set default reminder time + Option: 3.23: Specify folder for new event (prefs) -- Option: Set date/time format in prefs ++ Option: Set date/time format in prefs + Receive: 1.20: Invitation handling - Jump to calendar view from mail ("Show event") - Allow to re-send invitations - Implement iTIP delegation -- View: 3.4: Fish-Eye View For Busy Days ++ View: 3.4: Fish-Eye View For Busy Days + View: 3.8: Color according to calendar and category (similar to Kontact) + Support for multiple calendars (replace categories) @@ -40,8 +40,8 @@ + ICS parser/generator (http://code.google.com/p/qcal/) - Export *with* attachments -- Importing ICS files (upload, drag & drop) - Remember last visited view - Create/manage invdividual views -- Support for tasks/todos with task list view (ordered by date/time) ++ Importing ICS files (upload, drag & drop) + diff --git a/plugins/calendar/package.xml b/plugins/calendar/package.xml index ed42622a..742e6e74 100644 --- a/plugins/calendar/package.xml +++ b/plugins/calendar/package.xml @@ -157,6 +157,7 @@ +