/** * Remove folder (with subfolders) from the server * * @param string $folder Folder name * * @return boolean True on success, False on failure */ function delete_folder($folder) { if (!$this->check_connection()) { return false; } $delm = $this->get_hierarchy_delimiter(); // get list of sub-folders or all folders // if folder name contains special characters $path = strspn($folder, '%*') > 0 ? $folder . $delm : ''; $sub_mboxes = $this->list_folders('', $path . '*'); // According to RFC3501 deleting a \Noselect folder // with subfolders may fail. To workaround this we delete // subfolders first (in reverse order) (#5466) if (!empty($sub_mboxes)) { foreach (array_reverse($sub_mboxes) as $mbox) { if (strpos($mbox, $folder . $delm) === 0) { if ($this->conn->deleteFolder($mbox)) { $this->conn->unsubscribe($mbox); $this->clear_message_cache($mbox); } } } } // delete the folder if ($result = $this->conn->deleteFolder($folder)) { // and unsubscribe it $this->conn->unsubscribe($folder); $this->clear_message_cache($folder); } $this->clear_cache('mailboxes', true); return $result; }
/** * Remove folder from server * * @param string $folder Folder name * * @return boolean True on success */ function delete_folder($folder) { $delm = $this->get_hierarchy_delimiter(); if (!$this->check_connection()) { return false; } // get list of folders if (strpos($folder, '%') === false && strpos($folder, '*') === false) { $sub_mboxes = $this->list_folders('', $folder . $delm . '*'); } else { $sub_mboxes = $this->list_folders(); } // send delete command to server $result = $this->conn->deleteFolder($folder); if ($result) { // unsubscribe folder $this->conn->unsubscribe($folder); foreach ($sub_mboxes as $c_mbox) { if (strpos($c_mbox, $folder . $delm) === 0) { $this->conn->unsubscribe($c_mbox); if ($this->conn->deleteFolder($c_mbox)) { $this->clear_message_cache($c_mbox); } } } // clear folder-related cache $this->clear_message_cache($folder); $this->clear_cache('mailboxes', true); } return $result; }
/** * Remove mailbox from server * * @param string $mbox_name Mailbox name * * @return boolean True on success */ function delete_mailbox($mbox_name) { $result = false; $mailbox = $this->mod_mailbox($mbox_name); $delm = $this->get_hierarchy_delimiter(); // get list of folders if (strpos($mailbox, '%') === false && strpos($mailbox, '*') === false) { $sub_mboxes = $this->list_unsubscribed('', $mailbox . $delm . '*'); } else { $sub_mboxes = $this->list_unsubscribed(); } // send delete command to server $result = $this->conn->deleteFolder($mailbox); if ($result) { // unsubscribe mailbox $this->conn->unsubscribe($mailbox); foreach ($sub_mboxes as $c_mbox) { if (preg_match('/^' . preg_quote($mailbox . $delm, '/') . '/', $c_mbox)) { $this->conn->unsubscribe($c_mbox); if ($this->conn->deleteFolder($c_mbox)) { $this->clear_message_cache($c_mbox . '.msg'); } } } // clear mailbox-related cache $this->clear_message_cache($mailbox . '.msg'); $this->clear_cache('mailboxes'); } return $result; }