From 97dd6a624bf63447bba316785396f88265d7a081 Mon Sep 17 00:00:00 2001 From: nehresma Date: Sat, 4 Mar 2000 21:25:42 +0000 Subject: [PATCH] deleting of folders should work now git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@264 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/imap_mailbox.php | 1 - src/empty_trash.php | 53 +++++++++++++---------- src/folders_delete.php | 87 ++++++++++++++++---------------------- 3 files changed, 68 insertions(+), 73 deletions(-) diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index f61b443f..143edfdc 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -5,7 +5,6 @@ ** This impliments all functions that manipulate mailboxes **/ - /****************************************************************************** ** Expunges a mailbox ******************************************************************************/ diff --git a/src/empty_trash.php b/src/empty_trash.php index a5f39eae..2460d8f8 100644 --- a/src/empty_trash.php +++ b/src/empty_trash.php @@ -6,40 +6,49 @@ include("../functions/imap.php"); include("../functions/array.php"); + if (!isset($tree_php)) + include("../functions/tree.php"); + include("../src/load_prefs.php"); - $imapConnection = sqimap_login($username, $key, $imapServerAddress, 0); + $imap_stream = sqimap_login($username, $key, $imapServerAddress, 0); - sqimap_mailbox_list($imapConnection, $boxes); + sqimap_mailbox_list($imap_stream, $boxes); $mailbox = $trash_folder; - fputs($imapConnection, "1 LIST \"$mailbox\" *\n"); - $data = sqimap_read_data($imapConnection , "1", false, $response, $message); - - $dm = sqimap_get_delimiter($imapConnection); + $boxes = sqimap_mailbox_list($imap_stream); + $dm = sqimap_get_delimiter($imap_stream); // According to RFC2060, a DELETE command should NOT remove inferiors (sub folders) // so lets go through the list of subfolders and remove them before removing the // parent. - // BUG??? - what if a subfolder has a subfolder?? need to start at lowest level - // and work up. - -// for ($i = 0; $i < count($boxes); $i++) { -// if (($boxes[$i]["UNFORMATTED"] == $mailbox) || -// (substr($boxes[$i]["UNFORMATTED"], 0, strlen($mailbox . $dm)) == $mailbox . $dm)) { -// if (($boxes[$i]["UNFORMATTED"] != $mailbox) && (substr($boxes[$i]["UNFORMATTED"], 0, strlen($mailbox . $dm)) == $mailbox . $dm)) { -// removeFolder($imapConnection, $boxes[$i]["UNFORMATTED"], $dm); -// } -// } - - // lets remove the trash folder -// sqimap_mailbox_delete($imapConnection, $mailbox, $dm); - sqimap_mailbox_create($imapConnection, "$trash_folder", ""); + /** First create the top node in the tree **/ + for ($i = 0;$i < count($boxes);$i++) { + if (($boxes[$i]["unformatted"] == $mailbox) && (strlen($boxes[$i]["unformatted"]) == strlen($mailbox))) { + $foldersTree[0]["value"] = $mailbox; + $foldersTree[0]["doIHaveChildren"] = false; + continue; + } + } + // Now create the nodes for subfolders of the parent folder + // You can tell that it is a subfolder by tacking the mailbox delimiter + // on the end of the $mailbox string, and compare to that. + $j = 0; + for ($i = 0;$i < count($boxes);$i++) { + if (substr($boxes[$i]["unformatted"], 0, strlen($mailbox . $dm)) == ($mailbox . $dm)) { + addChildNodeToTree($boxes[$i]["unformatted"], $foldersTree); + } + } + + // now lets go through the tree and delete the folders + walkTreeInPreOrderDeleteFolders(0, $imap_stream, $foldersTree); + // now lets create a new, fresh trash folder + sqimap_mailbox_create($imap_stream, "$trash_folder", ""); - sqimap_mailbox_select($imapConnection, $trash_folder, $numMessages); + sqimap_mailbox_select($imap_stream, $trash_folder, $numMessages); echo "\n"; displayPageHeader($color, $mailbox); messages_deleted_message($trash_folder, $sort, $startMessage, $color); - sqimap_logout($imapConnection); + sqimap_logout($imap_stream); ?> diff --git a/src/folders_delete.php b/src/folders_delete.php index 3ba84c9c..c79b24d6 100644 --- a/src/folders_delete.php +++ b/src/folders_delete.php @@ -1,4 +1,9 @@ "; echo "\n"; displayPageHeader($color, "None"); + - $imapConnection = sqimap_login($username, $key, $imapServerAddress, 0); - $boxes = sqimap_mailbox_list ($imapConnection); - $dm = sqimap_get_delimiter($imapConnection); + $imap_stream = sqimap_login($username, $key, $imapServerAddress, 0); + $boxes = sqimap_mailbox_list ($imap_stream); + $dm = sqimap_get_delimiter($imap_stream); /** lets see if we CAN move folders to the trash.. otherwise, just delete them **/ - for ($i = 0; $i < count($boxes[$i]["unformatted"]); $i++) { + for ($i = 0; $i < count($boxes); $i++) { if ($boxes[$i]["unformatted"] == $trash_folder) { $can_move_to_trash = true; - for ($i = 0; $i < count($tmpflags); $i++) { - if (strtolower($tmpflags[$i]) == "noinferiors") + for ($j = 0; $j < count($boxes[$i]["flags"]); $j++) { + if (strtolower($boxes[$i]["flags"][$j]) == "noinferiors") $can_move_to_trash = false; } } } - /** Lets start removing the folders and messages **/ - if (($move_to_trash == true) && ($can_move_to_trash == true)) { /** if they wish to move messages to the trash **/ - /** Creates the subfolders under $trash_folder **/ - for ($i = 0; $i < count($boxes); $i++) { - if (($boxes[$i]["unformatted"] == $mailbox) || - (substr($boxes[$i]["unformatted"], 0, strlen($mailbox . $dm)) == $mailbox . $dm)) { - $folderWithoutINBOX = getFolderNameMinusINBOX($boxes[$i]["unformatted"], $dm); - $flags = getMailboxFlags($imapConnection, $boxes[$i]["raw"]); - for ($b = 0; $b < count($flags); $b++) { - $type = $flags[$b]; - } - createFolder($imapConnection, "$trash_folder" . $dm . "$folderWithoutINBOX", $type); - } - } - for ($i = 0; $i < count($boxes); $i++) { - if (($boxes[$i]["unformatted"] == $mailbox) || - (substr($boxes[$i]["unformatted"], 0, strlen($mailbox . $dm)) == $mailbox . $dm)) { - sqimap_mailbox_create($imapConnection, $boxes[$i]["unformatted"], $numMessages); - $folder = $boxes[$i]["unformatted"]; - - if ($numMessages > 0) - $success = sqimap_messages_copy($imapConnection, 1, $folder); - else - $success = true; - if ($success == true) - sqimap_mailbox_delete($imapConnection, $boxes[$i]["unformatted"]); - if ($auto_expunge) - sqimap_mailbox_expunge($imapConnection, $mailbox); - } + /** First create the top node in the tree **/ + for ($i = 0;$i < count($boxes);$i++) { + if (($boxes[$i]["unformatted"] == $mailbox) && (strlen($boxes[$i]["unformatted"]) == strlen($mailbox))) { + $foldersTree[0]["value"] = $mailbox; + $foldersTree[0]["doIHaveChildren"] = false; + continue; } - } else { /** if they do NOT wish to move messages to the trash (or cannot)**/ - fputs($imapConnection, "1 LIST \"$mailbox\" *\n"); - $data = sqimap_read_data($imapConnection, "1", false, $response, $message); - while (substr($data[0], strpos($data[0], " ")+1, 4) == "LIST") { - for ($i = 0; $i < count($boxes); $i++) { - if (($boxes[$i]["unformatted"] == $mailbox) || - (substr($boxes[$i]["unformatted"], 0, strlen($mailbox . $dm)) == $mailbox . $dm)) { - sqimap_mailbox_delete($imapConnection, $boxes[$i]["unformatted"], $dm); - } - } - if ($auto_expunge) - sqimap_mailbox_expunge($imapConnection, $mailbox); - fputs($imapConnection, "1 LIST \"$mailbox\" *\n"); - $data = sqimap_read_data($imapConnection , "1", false, $response, $message); + } + // Now create the nodes for subfolders of the parent folder + // You can tell that it is a subfolder by tacking the mailbox delimiter + // on the end of the $mailbox string, and compare to that. + $j = 0; + for ($i = 0;$i < count($boxes);$i++) { + if (substr($boxes[$i]["unformatted"], 0, strlen($mailbox . $dm)) == ($mailbox . $dm)) { + addChildNodeToTree($boxes[$i]["unformatted"], $foldersTree); } } + /** Lets start removing the folders and messages **/ + if (($move_to_trash == true) && ($can_move_to_trash == true)) { /** if they wish to move messages to the trash **/ + walkTreeInPostOrderCreatingFoldersUnderTrash(0, $imap_stream, $foldersTree, $dm, $mailbox); + walkTreeInPreOrderDeleteFolders(0, $imap_stream, $foldersTree); + } else { /** if they do NOT wish to move messages to the trash (or cannot)**/ + walkTreeInPreOrderDeleteFolders(0, $imap_stream, $foldersTree); + } + /** Log out this session **/ - fputs($imapConnection, "1 logout"); + sqimap_logout($imap_stream); echo ""; echo "


"; -- 2.25.1