Przeglądaj źródła

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 lat temu
rodzic
commit
0cdac7bd16
2 zmienionych plików z 33 dodań i 3 usunięć
  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";