From fb7ec576ab3a353b6eb99614e9636a9096462807 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 25 Mar 2010 12:29:02 -0400
Subject: [PATCH] - Added possibility to select all messages in a folder (#1484756)
---
program/include/rcube_imap.php | 32 +++++++++++++++++++++++++-------
1 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 64b300c..24080d6 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -2115,7 +2115,7 @@
$mailbox = $mbox_name ? $this->mod_mailbox($mbox_name) : $this->mailbox;
$flag = strtoupper($flag);
- list($uids, $all_mode) = $this->_parse_uids($uids);
+ list($uids, $all_mode) = $this->_parse_uids($uids, $mailbox);
if (strpos($flag, 'UN') === 0)
$result = iil_C_UnFlag($this->conn, $mailbox, $uids, substr($flag, 2));
@@ -2209,7 +2209,7 @@
$to_mbox = $this->mod_mailbox($to_mbox);
$from_mbox = $from_mbox ? $this->mod_mailbox($from_mbox) : $this->mailbox;
- list($uids, $all_mode) = $this->_parse_uids($uids);
+ list($uids, $all_mode) = $this->_parse_uids($uids, $from_mbox);
// exit if no message uids are specified
if (empty($uids))
@@ -2291,7 +2291,7 @@
$to_mbox = $this->mod_mailbox($to_mbox);
$from_mbox = $from_mbox ? $this->mod_mailbox($from_mbox) : $this->mailbox;
- list($uids, $all_mode) = $this->_parse_uids($uids);
+ list($uids, $all_mode) = $this->_parse_uids($uids, $from_mbox);
// exit if no message uids are specified
if (empty($uids))
@@ -2329,7 +2329,7 @@
{
$mailbox = $mbox_name ? $this->mod_mailbox($mbox_name) : $this->mailbox;
- list($uids, $all_mode) = $this->_parse_uids($uids);
+ list($uids, $all_mode) = $this->_parse_uids($uids, $mailbox);
// exit if no message uids are specified
if (empty($uids))
@@ -2450,14 +2450,32 @@
* Parse message UIDs input
*
* @param mixed UIDs array or comma-separated list or '*' or '1:*'
+ * @param string Mailbox name
* @return array Two elements array with UIDs converted to list and ALL flag
* @access private
*/
- private function _parse_uids($uids)
+ private function _parse_uids($uids, $mailbox)
{
if ($uids === '*' || $uids === '1:*') {
- $uids = '1:*';
- $all = true;
+ if (empty($this->search_set)) {
+ $uids = '1:*';
+ $all = true;
+ }
+ // get UIDs from current search set
+ // @TODO: skip iil_C_FetchUIDs() and work with IDs instead of UIDs (?)
+ else {
+ if ($this->search_threads)
+ $uids = iil_C_FetchUIDs($this->conn, $mailbox, array_keys($this->search_set['depth']));
+ else
+ $uids = iil_C_FetchUIDs($this->conn, $mailbox, $this->search_set);
+
+ // save ID-to-UID mapping in local cache
+ if (is_array($uids))
+ foreach ($uids as $id => $uid)
+ $this->uid_id_map[$mailbox][$uid] = $id;
+
+ $uids = join(',', $uids);
+ }
}
else {
if (is_array($uids))
--
Gitblit v1.9.1