From 294bf31a547a3598f2cdb7cbe03877d7cac8bd3e Mon Sep 17 00:00:00 2001 From: nehresma Date: Sun, 2 Apr 2000 20:43:42 +0000 Subject: [PATCH] added fix for emptying trash where you don't actually delete the Trash folder, but rather mark messages as deleted and expunge. do delete the subfolders though. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@378 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/tree.php | 32 ++++++++++++++++++++++++++++++++ src/empty_trash.php | 4 +--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/functions/tree.php b/functions/tree.php index 25c3ed99..02482b3c 100644 --- a/functions/tree.php +++ b/functions/tree.php @@ -3,6 +3,8 @@ if (!isset($imap_php)) include("../functions/imap.php"); + if (!isset($config_php)) + include("../config/config.php"); // Recursive function to find the correct parent for a new node function findParentForChild($value, $treeIndexToStart, $tree) { @@ -45,6 +47,36 @@ } } + function walkTreeInPreOrderEmptyTrash($index, $imap_stream, $tree) { + global $trash_folder; + if ($tree[$index]["doIHaveChildren"]) { + for ($j = 0; $j < count($tree[$index]["subNodes"]); $j++) { + walkTreeInPreOrderEmptyTrash($tree[$index]["subNodes"][$j], $imap_stream, $tree); + } + if ($tree[$index]["value"] != $trash_folder) { + sqimap_mailbox_delete($imap_stream, $tree[$index]["value"]); + } else { + $numMessages = sqimap_get_num_messages($imap_stream, $trash_folder); + if ($numMessages > 0) { + sqimap_mailbox_select($imap_stream, $trash_folder); + sqimap_messages_flag ($imap_stream, 1, $numMessages, "Deleted"); + sqimap_mailbox_expunge($imap_stream, $trash_folder); + } + } + } else { + if ($tree[$index]["value"] != $trash_folder) { + sqimap_mailbox_delete($imap_stream, $tree[$index]["value"]); + } else { + $numMessages = sqimap_get_num_messages($imap_stream, $trash_folder); + if ($numMessages > 0) { + sqimap_mailbox_select($imap_stream, $trash_folder); + sqimap_messages_flag ($imap_stream, 1, $numMessages, "Deleted"); + sqimap_mailbox_expunge($imap_stream, $trash_folder); + } + } + } + } + function walkTreeInPreOrderDeleteFolders($index, $imap_stream, $tree) { if ($tree[$index]["doIHaveChildren"]) { for ($j = 0; $j < count($tree[$index]["subNodes"]); $j++) { diff --git a/src/empty_trash.php b/src/empty_trash.php index 4a4d8d9d..85450fb2 100644 --- a/src/empty_trash.php +++ b/src/empty_trash.php @@ -42,9 +42,7 @@ } // 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", ""); + walkTreeInPreOrderEmptyTrash(0, $imap_stream, $foldersTree); sqimap_mailbox_select($imap_stream, $trash_folder, $numMessages); echo "\n"; -- 2.25.1