diff --git a/plugins/libkolab/lib/kolab_storage.php b/plugins/libkolab/lib/kolab_storage.php index ebfddcb7..0f81cec3 100644 --- a/plugins/libkolab/lib/kolab_storage.php +++ b/plugins/libkolab/lib/kolab_storage.php @@ -276,6 +276,7 @@ class kolab_storage { self::setup(); + $oldfolder = self::get_folder($oldname); $active = self::folder_is_active($oldname); $success = self::$imap->rename_folder($oldname, $newname); self::$last_error = self::$imap->get_error_str(); @@ -286,6 +287,11 @@ class kolab_storage self::set_state($newname, true); } + // assign existing cache entries to new resource uri + if ($success && $oldfolder) { + $oldfolder->cache->rename($newname); + } + return $success; } diff --git a/plugins/libkolab/lib/kolab_storage_cache.php b/plugins/libkolab/lib/kolab_storage_cache.php index ba6c1065..a23fbaa0 100644 --- a/plugins/libkolab/lib/kolab_storage_cache.php +++ b/plugins/libkolab/lib/kolab_storage_cache.php @@ -316,6 +316,23 @@ class kolab_storage_cache return $this->db->affected_rows($result); } + /** + * Update resource URI for existing cache entries + * + * @param string Target IMAP folder to move it to + */ + public function rename($new_folder) + { + $target = kolab_storage::get_folder($new_folder); + + // resolve new message UID in target folder + $this->db->query( + "UPDATE kolab_cache SET resource=? ". + "WHERE resource=?", + $target->get_resource_uri(), + $this->resource_uri + ); + } /** * Select Kolab objects filtered by the given query