Fix sorting and paging in cross-folder searches

pull/193/head
Thomas Bruederli 11 years ago
parent 25a244908b
commit 2baeac116a

@ -952,7 +952,7 @@ class rcube_imap extends rcube_storage
$search_set = $this->search_set;
$this->sort_field = null;
$this->page_size = 100; // limit to 100 messages per folder
$this->page_size = 1000; // fetch up to 1000 matching messages per folder
$a_msg_headers = array();
foreach ($search_set->sets as $resultset) {
@ -970,7 +970,7 @@ class rcube_imap extends rcube_storage
// sort headers
if (!$this->threading && !empty($a_msg_headers)) {
$a_msg_headers = $this->conn->sortHeaders($a_msg_headers, $this->sort_field, $this->sort_order);
$a_msg_headers = $this->conn->sortHeaders($a_msg_headers, $sort_field, $this->sort_order);
}
// only return the requested part of the set

@ -75,6 +75,22 @@ if (!empty($_REQUEST['_search']) && isset($_SESSION['search'])
&& $_SESSION['search_request'] == $_REQUEST['_search']
) {
$_SESSION['search'] = $RCMAIL->storage->get_search_set();
// multi-folder search
if ($_SESSION['search'][1]->multi) {
if (empty($cols))
$cols = $_SESSION['list_attrib']['columns'] ? $_SESSION['list_attrib']['columns'] : (array)$CONFIG['list_cols'];
if (!in_array('folder', $cols))
$cols[] = 'folder'; // Add 'folder' column to list
// make message UIDs unique by appending the folder name
foreach ($a_headers as $i => $header) {
$header->uid .= '-'.$header->folder;
$header->flags['skip_mbox_check'] = true;
if ($header->parent_uid)
$header->parent_uid .= '-'.$header->folder;
}
}
}
// remove old search data
else if (empty($_REQUEST['_search']) && isset($_SESSION['search'])) {

@ -111,7 +111,7 @@ $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
@ -125,43 +125,25 @@ if ($search_str) {
}
$_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', '');
}
$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;
}
// 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', '');
$OUTPUT->command('select_folder', '');
}
// Make sure we got the headers

Loading…
Cancel
Save