From 97a656643866f16289264954be961aa3f314ac20 Mon Sep 17 00:00:00 2001
From: svncommit <devs@roundcube.net>
Date: Mon, 15 Oct 2007 05:17:08 -0400
Subject: [PATCH] When a parent folder is deleted, delete the children immediately, instead of one-by-one as r833 did.

---
 program/steps/settings/manage_folders.inc |    6 ++++++
 program/include/rcube_imap.inc            |   11 +++++++++++
 2 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc
index 3fe5b1c..9eb3594 100644
--- a/program/include/rcube_imap.inc
+++ b/program/include/rcube_imap.inc
@@ -1739,6 +1739,8 @@
     else if (is_string($mbox_name) && strlen($mbox_name))
       $a_mboxes = explode(',', $mbox_name);
 
+    $all_mboxes = iil_C_ListMailboxes($this->conn, $this->_mod_mailbox($root), '*');
+
     if (is_array($a_mboxes))
       foreach ($a_mboxes as $mbox_name)
         {
@@ -1751,6 +1753,15 @@
         $result = iil_C_DeleteFolder($this->conn, $mailbox);
         if ($result>=0)
           $deleted = TRUE;
+
+        foreach ($all_mboxes as $c_mbox)
+          if (preg_match('/^'.preg_quote($mailbox.$this->delimiter).'/', $c_mbox))
+            {
+            iil_C_UnSubscribe($this->conn, $c_mbox);
+            $result = iil_C_DeleteFolder($this->conn, $c_mbox);
+            if ($result>=0)
+              $deleted = TRUE;
+            }
         }
 
     // clear mailboxlist cache
diff --git a/program/steps/settings/manage_folders.inc b/program/steps/settings/manage_folders.inc
index 344e404..4d5882f 100644
--- a/program/steps/settings/manage_folders.inc
+++ b/program/steps/settings/manage_folders.inc
@@ -97,12 +97,18 @@
 // delete an existing IMAP mailbox
 else if ($_action=='delete-folder')
   {
+  $a_mboxes = array_merge($IMAP->list_mailboxes(), $IMAP->list_unsubscribed());
+  $delimiter = $IMAP->get_hierarchy_delimiter();
+
   if ($mboxes = get_input_value('_mboxes', RCUBE_INPUT_POST))
     $deleted = $IMAP->delete_mailbox(array($mboxes));
 
   if ($OUTPUT->ajax_call && $deleted)
     {
     $OUTPUT->command('remove_folder_row', get_input_value('_mboxes', RCUBE_INPUT_POST));
+    foreach ($a_mboxes as $mbox)
+      if (preg_match('/^'.preg_quote(get_input_value('_mboxes', RCUBE_INPUT_POST).$delimiter).'/', $mbox))
+        $OUTPUT->command('remove_folder_row', $mbox);
     $OUTPUT->show_message('folderdeleted', 'confirmation');
     $OUTPUT->send();
     }

--
Gitblit v1.9.1