diff options
Diffstat (limited to 'program/include')
-rw-r--r-- | program/include/rcube_imap.inc | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc index c98c480a9..4137d109a 100644 --- a/program/include/rcube_imap.inc +++ b/program/include/rcube_imap.inc @@ -1245,28 +1245,29 @@ class rcube_imap // set a new name to an existing mailbox - function rename_mailbox($mbox_name, $new_name, $subscribe=TRUE) + function rename_mailbox($mbox_name, $new_name) { $result = FALSE; // replace backslashes $name = preg_replace('/[\\\]+/', '-', $new_name); + + // encode mailbox name and reduce it to 100 chars + $name_enc = substr(UTF7EncodeString($new_name), 0, 100); - $name_enc = UTF7EncodeString($new_name); - - // reduce mailbox name to 100 chars - $name_enc = substr($name_enc, 0, 100); - + // make absolute path + $mailbox = $this->_mod_mailbox($mbox_name); $abs_name = $this->_mod_mailbox($name_enc); - $a_mailbox_cache = $this->get_cache('mailboxes'); - - if (strlen($abs_name) && (!is_array($a_mailbox_cache) || !in_array($abs_name, $a_mailbox_cache))) - $result = iil_C_RenameFolder($this->conn, $mbox_name, $abs_name); - - // update mailboxlist cache - if ($result && $subscribe) - $this->unsubscribe($mbox_name); - $this->subscribe($name_enc); + + if (strlen($abs_name)) + $result = iil_C_RenameFolder($this->conn, $mailbox, $abs_name); + + // clear cache + if ($result) + { + $this->clear_message_cache($mailbox.'.msg'); + $this->clear_cache('mailboxes'); + } return $result ? $name : FALSE; } |