summaryrefslogtreecommitdiff
path: root/program/lib
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2008-07-15 16:48:20 +0000
committerthomascube <thomas@roundcube.net>2008-07-15 16:48:20 +0000
commit5b3dd412d2e28f80fb2d12dbdcab992cc6f219a5 (patch)
tree14d76abe90c8906039cc1fbe6d48408d97f1014b /program/lib
parente3e597e3b6c9ae10e5c7c1e5592726c71793cfe7 (diff)
Check PERMANENTFLAGS before saving MDNSent flag (#1484963, #1485163)
Diffstat (limited to 'program/lib')
-rw-r--r--program/lib/imap.inc36
1 files changed, 22 insertions, 14 deletions
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index e3df35699..757fbf6e8 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -90,6 +90,16 @@ $GLOBALS['IMAP_MONTHS'] = array("Jan" => 1, "Feb" => 2, "Mar" => 3, "Apr" => 4,
$GLOBALS['IMAP_SERVER_TZ'] = date('Z');
+$GLOBALS['IMAP_FLAGS'] = array(
+ 'SEEN' => '\\Seen',
+ 'DELETED' => '\\Deleted',
+ 'RECENT' => '\\Recent',
+ 'ANSWERED' => '\\Answered',
+ 'DRAFT' => '\\Draft',
+ 'FLAGGED' => '\\Flagged',
+ 'FORWARDED' => '$Forwarded',
+ 'MDNSENT' => '$MDNSent');
+
$iil_error;
$iil_errornum;
$iil_selected;
@@ -113,6 +123,7 @@ class iilConnection
var $rootdir;
var $delimiter;
var $capability = array();
+ var $permanentflags = array();
}
/**
@@ -142,7 +153,7 @@ class iilBasicHeader
var $priority;
var $mdn_to;
var $mdn_sent = false;
- var $is_reply = false;
+ var $is_draft = false;
var $seen = false;
var $deleted = false;
var $recent = false;
@@ -716,7 +727,7 @@ function iil_C_Select(&$conn, $mailbox) {
return false;
}
if (strcmp($conn->selected, $mailbox) == 0) {
- return true;
+ return true;
}
iil_C_LoadCache($conn, $mailbox);
@@ -729,9 +740,12 @@ function iil_C_Select(&$conn, $mailbox) {
if (strcasecmp($a[2], 'EXISTS') == 0) {
$conn->exists = (int) $a[1];
}
- if (strcasecmp($a[2], 'RECENT') == 0) {
- $conn->recent = (int) $a[1];
- }
+ if (strcasecmp($a[2], 'RECENT') == 0) {
+ $conn->recent = (int) $a[1];
+ }
+ }
+ else if (preg_match('/\[?PERMANENTFLAGS\s+\(([^\)]+)\)\]/U', $line, $match)) {
+ $conn->permanentflags = explode(' ', $match[1]);
}
} while (!iil_StartsWith($line, 'sel1'));
@@ -1757,6 +1771,8 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
$result[$id]->answered = true;
} else if (strcasecmp($val, '$Forwarded') == 0) {
$result[$id]->forwarded = true;
+ } else if (strcasecmp($val, 'Draft') == 0) {
+ $result[$id]->is_draft = true;
} else if (strcasecmp($val, '$MDNSent') == 0) {
$result[$id]->mdn_sent = true;
} else if (strcasecmp($val, 'Flagged') == 0) {
@@ -1909,15 +1925,7 @@ function iil_C_ModFlag(&$conn, $mailbox, $messages, $flag, $mod) {
}
$fp = $conn->fp;
- $flags = array(
- 'SEEN' => '\\Seen',
- 'DELETED' => '\\Deleted',
- 'RECENT' => '\\Recent',
- 'ANSWERED' => '\\Answered',
- 'DRAFT' => '\\Draft',
- 'FLAGGED' => '\\Flagged',
- 'FORWARDED' => '$Forwarded',
- 'MDNSENT' => '$MDNSent');
+ $flags = $GLOBALS['IMAP_FLAGS'];
$flag = strtoupper($flag);
$flag = $flags[$flag];