From 3bfab3b99c5098e802b10a1d442c330af3524249 Mon Sep 17 00:00:00 2001
From: till <till@php.net>
Date: Mon, 26 May 2008 06:11:19 -0400
Subject: [PATCH] fix to #1485083

---
 program/include/main.inc |    6 +++++-
 program/lib/imap.inc     |   29 ++++++++++++++++++-----------
 config/main.inc.php.dist |   12 ++++++++++++
 3 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index e8fbd2f..8cb2112 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -328,5 +328,17 @@
 // Compact INBOX on logout
 $rcmail_config['logout_expunge'] = FALSE;
 
+/**
+ * 'Delete always'
+ * This setting reflects if mail should be always marked as deleted,
+ * even if moving to "Trash" fails. This is necessary in some setups
+ * because a) people may not have a Trash folder or b) they are over
+ * quota (and Trash is included in the quota).
+ *
+ * This is a failover setting for iil_C_Move when a message is moved
+ * to the Trash, and not the same as "delete_right_away".
+ */
+$rcmail_config['delete_always'] = true;
+
 // end of config file
 ?>
diff --git a/program/include/main.inc b/program/include/main.inc
index 5960791..a9c8ccb 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -279,7 +279,11 @@
   if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7')
     {
     $aliases['GB2312'] = 'GB18030';
-    return iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str);
+    $_iconv = iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str);
+    if ($_iconv !== false)
+      {
+        return $_iconv;
+      }
     }
 
   // settings for mbstring module (by Tadashi Jokagi)
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index e97f818..8ea4fbd 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -1907,7 +1907,9 @@
     
 	if (iil_C_Select($conn, $mailbox)) {
 		$c = 0;
-		fputs($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n");
+                $_line = "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n";
+                trigger_error($_line, E_USER_WARNING);
+		fputs($fp, $_line);
 		do {
 			$line=chop(iil_ReadLine($fp, 100));
 			if ($line[0] == '*') {
@@ -2046,16 +2048,21 @@
 }
 
 function iil_C_Move(&$conn, $messages, $from, $to) {
-	$fp = $conn->fp;
-	
-	if (!$from || !$to) {
-	    return -1;
-	}
-    
-	$r = iil_C_Copy($conn, $messages, $from,$to);
-	if ($r==0) {
-		return iil_C_Delete($conn, $from, $messages);
-	}
+    global $CONFIG;
+
+    $fp = $conn->fp;
+
+    if (!$from || !$to) {
+        return -1;
+    }
+    $r = iil_C_Copy($conn, $messages, $from,$to);
+    if ($r==0) {
+        return iil_C_Delete($conn, $from, $messages);
+    }
+    // Copy failed
+    if (isset($CONFIG['delete_always']) && $CONFIG['delete_always'] === true) {
+        return iil_C_Delete($conn, $from, $messages);
+    }
     return $r;
 }
 

--
Gitblit v1.9.1