Browse Source

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.

nehresma 25 năm trước cách đây
mục cha
commit
0cdac7bd16
2 tập tin đã thay đổi với 33 bổ sung3 xóa
  1. 32 0
      functions/tree.php
  2. 1 3
      src/empty_trash.php

+ 32 - 0
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++) {

+ 1 - 3
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 "<HTML><BODY TEXT=\"$color[8]\" BGCOLOR=\"$color[4]\" LINK=\"$color[7]\" VLINK=\"$color[7]\" ALINK=\"$color[7]\">\n";