pull/190/head
Aleksander Machniak 11 years ago
parent 963499a17e
commit 47a7833aca

@ -4225,7 +4225,7 @@ function rcube_webmail()
}; };
// build URL params for search // build URL params for search
this.search_params = function(search, filter, smods) this.search_params = function(search, filter)
{ {
var n, url = {}, mods_arr = [], var n, url = {}, mods_arr = [],
mods = this.env.search_mods, mods = this.env.search_mods,
@ -4244,7 +4244,7 @@ function rcube_webmail()
if (search) { if (search) {
url._q = search; url._q = search;
if (!smods && mods && this.message_list) if (mods && this.message_list)
mods = mods[mbox] || mods['*']; mods = mods[mbox] || mods['*'];
if (mods) { if (mods) {

@ -29,7 +29,7 @@ class rcube_imap_search
{ {
public $options = array(); public $options = array();
protected $jobs = array(); protected $jobs = array();
protected $timelimit = 0; protected $timelimit = 0;
protected $results; protected $results;
protected $conn; protected $conn;
@ -40,7 +40,7 @@ class rcube_imap_search
public function __construct($options, $conn) public function __construct($options, $conn)
{ {
$this->options = $options; $this->options = $options;
$this->conn = $conn; $this->conn = $conn;
} }
/** /**
@ -54,7 +54,7 @@ class rcube_imap_search
*/ */
public function exec($folders, $str, $charset = null, $sort_field = null, $threading=null) public function exec($folders, $str, $charset = null, $sort_field = null, $threading=null)
{ {
$start = floor(microtime(true)); $start = floor(microtime(true));
$results = new rcube_result_multifolder($folders); $results = new rcube_result_multifolder($folders);
// start a search job for every folder to search in // start a search job for every folder to search in
@ -65,7 +65,8 @@ class rcube_imap_search
$results->add($result); $results->add($result);
} }
else { else {
$job = new rcube_imap_search_job($folder, $str, $charset, $sort_field, $threading); $search = is_array($str) && $str[$folder] ? $str[$folder] : $str;
$job = new rcube_imap_search_job($folder, $search, $charset, $sort_field, $threading);
$job->worker = $this; $job->worker = $this;
$this->jobs[] = $job; $this->jobs[] = $job;
} }
@ -129,11 +130,11 @@ class rcube_imap_search_job /* extends Stackable */
public function __construct($folder, $str, $charset = null, $sort_field = null, $threading=false) public function __construct($folder, $str, $charset = null, $sort_field = null, $threading=false)
{ {
$this->folder = $folder; $this->folder = $folder;
$this->search = $str; $this->search = $str;
$this->charset = $charset; $this->charset = $charset;
$this->sort_field = $sort_field; $this->sort_field = $sort_field;
$this->threading = $threading; $this->threading = $threading;
$this->result = new rcube_result_index($folder); $this->result = new rcube_result_index($folder);
$this->result->incomplete = true; $this->result->incomplete = true;
@ -150,9 +151,8 @@ class rcube_imap_search_job /* extends Stackable */
protected function search_index() protected function search_index()
{ {
$criteria = $this->search; $criteria = $this->search;
$charset = $this->charset; $charset = $this->charset;
$imap = $this->worker->get_imap();
$imap = $this->worker->get_imap();
if (!$imap->connected()) { if (!$imap->connected()) {
trigger_error("No IMAP connection for $this->folder", E_USER_WARNING); trigger_error("No IMAP connection for $this->folder", E_USER_WARNING);
@ -228,7 +228,4 @@ class rcube_imap_search_job /* extends Stackable */
{ {
return $this->result; return $this->result;
} }
} }

@ -26,16 +26,16 @@
*/ */
class rcube_result_multifolder class rcube_result_multifolder
{ {
public $multi = true; public $multi = true;
public $sets = array(); public $sets = array();
public $incomplete = false; public $incomplete = false;
public $folder; public $folder;
protected $meta = array(); protected $meta = array();
protected $index = array(); protected $index = array();
protected $folders = array(); protected $folders = array();
protected $order = 'ASC';
protected $sorting; protected $sorting;
protected $order = 'ASC';
/** /**
@ -44,7 +44,7 @@ class rcube_result_multifolder
public function __construct($folders = array()) public function __construct($folders = array())
{ {
$this->folders = $folders; $this->folders = $folders;
$this->meta = array('count' => 0); $this->meta = array('count' => 0);
} }
@ -74,7 +74,8 @@ class rcube_result_multifolder
// append UIDs to global index // append UIDs to global index
$folder = $result->get_parameters('MAILBOX'); $folder = $result->get_parameters('MAILBOX');
$index = array_map(function($uid) use ($folder) { return $uid . '-' . $folder; }, $result->get()); $index = array_map(function($uid) use ($folder) { return $uid . '-' . $folder; }, $result->get());
$this->index = array_merge($this->index, $index); $this->index = array_merge($this->index, $index);
} }
@ -89,7 +90,7 @@ class rcube_result_multifolder
} }
$this->sorting = $sort_field; $this->sorting = $sort_field;
$this->order = $sort_order; $this->order = $sort_order;
} }
/** /**
@ -150,8 +151,10 @@ class rcube_result_multifolder
if ($this->order != $set->get_parameters('ORDER')) { if ($this->order != $set->get_parameters('ORDER')) {
$set->revert(); $set->revert();
} }
$folder = $set->get_parameters('MAILBOX'); $folder = $set->get_parameters('MAILBOX');
$index = array_map(function($uid) use ($folder) { return $uid . '-' . $folder; }, $set->get()); $index = array_map(function($uid) use ($folder) { return $uid . '-' . $folder; }, $set->get());
$this->index = array_merge($this->index, $index); $this->index = array_merge($this->index, $index);
} }
} }
@ -171,6 +174,7 @@ class rcube_result_multifolder
if (!empty($this->folder)) { if (!empty($this->folder)) {
$msgid .= '-' . $this->folder; $msgid .= '-' . $this->folder;
} }
return array_search($msgid, $this->index); return array_search($msgid, $this->index);
} }
@ -188,6 +192,7 @@ class rcube_result_multifolder
if ($set->get_parameters('MAILBOX') == $folder) { if ($set->get_parameters('MAILBOX') == $folder) {
$set->filter($ids); $set->filter($ids);
} }
$this->meta['count'] += $set->count(); $this->meta['count'] += $set->count();
} }
} }
@ -267,8 +272,8 @@ class rcube_result_multifolder
public function get_parameters($param=null) public function get_parameters($param=null)
{ {
$params = array( $params = array(
'SORT' => $this->sorting, 'SORT' => $this->sorting,
'ORDER' => $this->order, 'ORDER' => $this->order,
'MAILBOX' => $this->folders, 'MAILBOX' => $this->folders,
); );

@ -151,6 +151,19 @@ abstract class rcube_storage
} }
/**
* Get connection/class option
*
* @param string $name Option name
*
* @param mixed Option value
*/
public function get_option($name)
{
return $this->options[$name];
}
/** /**
* Activate/deactivate debug mode. * Activate/deactivate debug mode.
* *

Loading…
Cancel
Save