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