summaryrefslogtreecommitdiff
path: root/program/lib/Roundcube/rcube_result_multifolder.php
diff options
context:
space:
mode:
authorThomas Bruederli <thomas@roundcube.net>2014-01-16 15:41:19 +0100
committerThomas Bruederli <thomas@roundcube.net>2014-01-16 15:41:19 +0100
commit2c33c7e38bc767330b4eebdc9e4d234caca72966 (patch)
tree4dc81413ed6366c0c942fb67ca8aa7e39d049647 /program/lib/Roundcube/rcube_result_multifolder.php
parent2baeac116abef9d5bcb748c687577d16dce868a0 (diff)
Make message pagenav (prev/next) work with sorted multi-folder search results
Diffstat (limited to 'program/lib/Roundcube/rcube_result_multifolder.php')
-rw-r--r--program/lib/Roundcube/rcube_result_multifolder.php40
1 files changed, 36 insertions, 4 deletions
diff --git a/program/lib/Roundcube/rcube_result_multifolder.php b/program/lib/Roundcube/rcube_result_multifolder.php
index 8d7ae5de8..277a6d1ea 100644
--- a/program/lib/Roundcube/rcube_result_multifolder.php
+++ b/program/lib/Roundcube/rcube_result_multifolder.php
@@ -28,8 +28,11 @@ class rcube_result_multifolder
{
public $multi = true;
public $sets = array();
+ public $folder;
protected $meta = array();
+ protected $index = array();
+ protected $sorting;
protected $order = 'ASC';
@@ -53,6 +56,19 @@ class rcube_result_multifolder
$this->meta['count'] += $result->count();
}
+ /**
+ * Store a global index of (sorted) message UIDs
+ */
+ public function set_message_index($headers, $sort_field, $sort_order)
+ {
+ $this->index = array();
+ foreach ($headers as $header) {
+ $this->index[] = $header->uid . '-' . $header->folder;
+ }
+
+ $this->sorting = $sort_field;
+ $this->order = $sort_order;
+ }
/**
* Checks the result from IMAP command
@@ -119,7 +135,10 @@ class rcube_result_multifolder
*/
public function exists($msgid, $get_index = false)
{
- return false;
+ if (!empty($this->folder)) {
+ $msgid .= '-' . $this->folder;
+ }
+ return array_search($msgid, $this->index);
}
@@ -157,7 +176,7 @@ class rcube_result_multifolder
*/
public function get()
{
- return array();
+ return $this->index;
}
@@ -179,9 +198,13 @@ class rcube_result_multifolder
*
* @return int Element value
*/
- public function get_element($index)
+ public function get_element($idx)
{
- return null;
+ switch ($idx) {
+ case 'FIRST': return $this->index[0];
+ case 'LAST': return end($this->index);
+ default: return $this->index[$idx];
+ }
}
@@ -195,6 +218,15 @@ class rcube_result_multifolder
*/
public function get_parameters($param=null)
{
+ $params = array(
+ 'SORT' => $this->sorting,
+ 'ORDER' => $this->order,
+ );
+
+ if ($param !== null) {
+ return $params[$param];
+ }
+
return $params;
}