summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Bruederli <thomas@roundcube.net>2014-04-08 09:14:05 +0200
committerThomas Bruederli <thomas@roundcube.net>2014-04-08 09:14:05 +0200
commit0f48e6e660cb5aa0d7bfdf11967b648c78cb64f9 (patch)
tree573fe83e152cd4971c7fafea8887bf9f4e0f911c
parent0ccef59cfa1bf4b87fe616d94abab59f10d6717a (diff)
Fix message UID extraction for _uid=*; update unread count for all affected mailboxes
-rw-r--r--program/include/rcmail.php23
-rw-r--r--program/steps/mail/mark.inc6
2 files changed, 21 insertions, 8 deletions
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 952e8a5f2..87cf99237 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -2029,13 +2029,24 @@ class rcmail extends rcube
return $uid;
}
- // create a per-folder UIDs array
$result = array();
- foreach (explode(',', $_uid) as $uid) {
- list($uid, $mbox) = explode('-', $uid, 2);
- if (empty($mbox))
- $mbox = $_mbox;
- $result[$mbox][] = $uid;
+
+ // special case: *
+ if ($_uid == '*' && is_object($_SESSION['search'][1]) && $_SESSION['search'][1]->multi) {
+ // extract the full list of UIDs per folder from the search set
+ foreach ($_SESSION['search'][1]->sets as $subset) {
+ $mbox = $subset->get_parameters('MAILBOX');
+ $result[$mbox] = $subset->get();
+ }
+ }
+ else {
+ // create a per-folder UIDs array
+ foreach (explode(',', $_uid) as $uid) {
+ list($uid, $mbox) = explode('-', $uid, 2);
+ if (empty($mbox))
+ $mbox = $_mbox;
+ $result[$mbox][] = $uid;
+ }
}
return $result;
diff --git a/program/steps/mail/mark.inc b/program/steps/mail/mark.inc
index 149bc8e05..e81f6c9f5 100644
--- a/program/steps/mail/mark.inc
+++ b/program/steps/mail/mark.inc
@@ -4,7 +4,7 @@
| program/steps/mail/mark.inc |
| |
| This file is part of the Roundcube Webmail client |
- | Copyright (C) 2005-2013, The Roundcube Dev Team |
+ | Copyright (C) 2005-2014, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
@@ -76,7 +76,9 @@ if (($_uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST))
}
if ($flag == 'SEEN' || $flag == 'UNSEEN' || ($flag == 'DELETED' && !$skip_deleted)) {
- rcmail_send_unread_count($RCMAIL->storage->get_folder());
+ foreach (rcmail::get_uids() as $mbox => $uids) {
+ rcmail_send_unread_count($mbox);
+ }
}
else if ($flag == 'DELETED' && $skip_deleted) {
if ($_POST['_from'] == 'show') {