From a3d5f717a2250cfbd7a5652a445adcd6a0845545 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Thu, 9 Oct 2014 13:53:23 +0200 Subject: [PATCH] Fix moving events to another calendar/folder and reloading it (#3748) --- plugins/calendar/drivers/kolab/kolab_driver.php | 2 +- plugins/libkolab/lib/kolab_storage_cache.php | 7 ++++--- plugins/libkolab/lib/kolab_storage_folder.php | 5 ++++- plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index da653d23..fb2a1de5 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -813,7 +813,7 @@ class kolab_driver extends calendar_driver return false; if ($event['_savemode'] != 'new') { - if (!$fromcalendar->storage->move($event['id'], $storage->get_realname())) + if (!$fromcalendar->storage->move($event['id'], $storage->storage)) return false; $fromcalendar = $storage; diff --git a/plugins/libkolab/lib/kolab_storage_cache.php b/plugins/libkolab/lib/kolab_storage_cache.php index 4f09e0f6..bced3b3c 100644 --- a/plugins/libkolab/lib/kolab_storage_cache.php +++ b/plugins/libkolab/lib/kolab_storage_cache.php @@ -376,12 +376,13 @@ class kolab_storage_cache * * @param string Entry's IMAP message UID * @param string Entry's Object UID - * @param string Target IMAP folder to move it to + * @param object kolab_storage_folder Target storage folder instance */ - public function move($msguid, $uid, $target_folder) + public function move($msguid, $uid, $target) { if ($this->ready) { - $target = kolab_storage::get_folder($target_folder); + // clear cached uid mapping and force new lookup + unset($target->cache->uid2msg[$uid]); // resolve new message UID in target folder if ($new_msguid = $target->cache->uid2msguid($uid)) { diff --git a/plugins/libkolab/lib/kolab_storage_folder.php b/plugins/libkolab/lib/kolab_storage_folder.php index 2b258265..2435fa38 100644 --- a/plugins/libkolab/lib/kolab_storage_folder.php +++ b/plugins/libkolab/lib/kolab_storage_folder.php @@ -799,9 +799,12 @@ class kolab_storage_folder extends kolab_storage_folder_api */ public function move($uid, $target_folder) { + if (is_string($target_folder)) + $target_folder = kolab_storage::get_folder($target_folder); + if ($msguid = $this->cache->uid2msguid($uid)) { $this->cache->bypass(true); - $result = $this->imap->move_message($msguid, $target_folder, $this->name); + $result = $this->imap->move_message($msguid, $target_folder->name, $this->name); $this->cache->bypass(false); if ($result) { diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php index 0e2ecab4..817cfdf9 100644 --- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php +++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php @@ -1019,7 +1019,7 @@ class tasklist_kolab_driver extends tasklist_driver // moved from another folder if ($task['_fromlist'] && ($fromfolder = $this->get_folder($task['_fromlist']))) { - if (!$fromfolder->move($task['id'], $folder->name)) + if (!$fromfolder->move($task['id'], $folder)) return false; unset($task['_fromlist']); @@ -1076,7 +1076,7 @@ class tasklist_kolab_driver extends tasklist_driver // execute move command if ($task['_fromlist'] && ($fromfolder = $this->get_folder($task['_fromlist']))) { - return $fromfolder->move($task['id'], $folder->name); + return $fromfolder->move($task['id'], $folder); } return false;