From 2baeac116abef9d5bcb748c687577d16dce868a0 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Thu, 16 Jan 2014 08:17:08 -0500
Subject: [PATCH] Fix sorting and paging in cross-folder searches

---
 program/steps/mail/search.inc |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/program/steps/mail/search.inc b/program/steps/mail/search.inc
index a808872..5ce9fe6 100644
--- a/program/steps/mail/search.inc
+++ b/program/steps/mail/search.inc
@@ -106,9 +106,12 @@
 $search_str  = trim($search_str);
 $sort_column = rcmail_sort_column();
 
+// TEMPORARY: search all folders
+$mboxes = $RCMAIL->storage->list_folders_subscribed('', '*', 'mail');
+
 // execute IMAP search
 if ($search_str) {
-    $RCMAIL->storage->search($mbox, $search_str, $imap_charset, $sort_column);
+    $RCMAIL->storage->search($mboxes, $search_str, $imap_charset, $sort_column);
 }
 
 // save search results in session
@@ -122,14 +125,30 @@
 }
 $_SESSION['search_request'] = $search_request;
 
-
 // Get the headers
 $result_h = $RCMAIL->storage->list_messages($mbox, 1, $sort_column, rcmail_sort_order());
 $count    = $RCMAIL->storage->count($mbox, $RCMAIL->storage->get_threading() ? 'THREADS' : 'ALL');
 
+// Add 'folder' column to list
+if ($_SESSION['search'][1]->multi) {
+    $a_show_cols = $_SESSION['list_attrib']['columns'] ? $_SESSION['list_attrib']['columns'] : (array)$CONFIG['list_cols'];
+    if (!in_array('folder', $a_show_cols))
+        $a_show_cols[] = 'folder';
+
+    // make message UIDs unique by appending the folder name
+    foreach ($result_h as $i => $header) {
+        $header->uid .= '-'.$header->folder;
+        $header->flags['skip_mbox_check'] = true;
+        if ($header->parent_uid)
+            $header->parent_uid .= '-'.$header->folder;
+    }
+
+    $OUTPUT->command('select_folder', '');
+}
+
 // Make sure we got the headers
 if (!empty($result_h)) {
-    rcmail_js_message_list($result_h);
+    rcmail_js_message_list($result_h, false, $a_show_cols);
     if ($search_str) {
         $OUTPUT->show_message('searchsuccessful', 'confirmation', array('nr' => $RCMAIL->storage->count(NULL, 'ALL')));
     }

--
Gitblit v1.9.1