| | |
| | | |
| | | $this->sort_field = null; |
| | | $this->page_size = 1000; // fetch up to 1000 matching messages per folder |
| | | $this->threading = false; |
| | | |
| | | $a_msg_headers = array(); |
| | | foreach ($search_set->sets as $resultset) { |
| | |
| | | if (!$this->threading && !empty($a_msg_headers)) { |
| | | $a_msg_headers = $this->conn->sortHeaders($a_msg_headers, $sort_field, $this->sort_order); |
| | | } |
| | | |
| | | // store (sorted) message index |
| | | $search_set->set_message_index($a_msg_headers, $sort_field, $this->sort_order); |
| | | |
| | | // only return the requested part of the set |
| | | $slice_length = min($page_size, $cnt - ($to > $cnt ? $from : $to)); |
| | |
| | | return new rcube_result_index($folder, '* SORT'); |
| | | } |
| | | |
| | | if ($this->search_set instanceof rcube_result_multifolder) { |
| | | $index = $this->search_set; |
| | | $index->folder = $folder; |
| | | // TODO: handle changed sorting |
| | | } |
| | | // search result is an index with the same sorting? |
| | | if (($this->search_set instanceof rcube_result_index) |
| | | else if (($this->search_set instanceof rcube_result_index) |
| | | && ((!$this->sort_field && !$this->search_sorted) || |
| | | ($this->search_sorted && $this->search_sort_field == $this->sort_field)) |
| | | ) { |
| | |
| | | // connect IMAP to have all the required classes and settings loaded |
| | | $this->check_connection(); |
| | | |
| | | // disable threading |
| | | $this->threading = false; |
| | | |
| | | $searcher = new rcube_imap_search($this->options, $this->conn); |
| | | $results = $searcher->exec( |
| | | $folder, |
| | |
| | | public function refresh_search() |
| | | { |
| | | if (!empty($this->search_string)) { |
| | | // FIXME: make this work with saved multi-folder searches |
| | | $this->search('', $this->search_string, $this->search_charset, $this->search_sort_field); |
| | | } |
| | | |
| | |
| | | { |
| | | if (!strlen($folder)) { |
| | | $folder = $this->folder; |
| | | } |
| | | |
| | | // decode combined UID-folder identifier |
| | | if (preg_match('/^\d+-[^,]+$/', $uid)) { |
| | | list($uid, $folder) = explode('-', $uid); |
| | | } |
| | | |
| | | // get cached headers |
| | |
| | | $folder = $this->folder; |
| | | } |
| | | |
| | | // decode combined UID-folder identifier |
| | | if (preg_match('/^\d+-[^,]+$/', $uid)) { |
| | | list($uid, $folder) = explode('-', $uid); |
| | | } |
| | | |
| | | // Check internal cache |
| | | if (!empty($this->icache['message'])) { |
| | | if (($headers = $this->icache['message']) && $headers->uid == $uid) { |