CHANGELOG | ●●●●● patch | view | raw | blame | history | |
program/js/app.js | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_imap.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_imap_search.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_result_multifolder.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_storage.php | ●●●●● patch | view | raw | blame | history |
CHANGELOG
@@ -6,6 +6,7 @@ - Make identity name field optional (#1489510) - Utility script to remove user records from the local database - Plugin API: Added message_saved hook (#1489752) - Plugin API: Added imap_search_before hook - Support messages import from zip archives - Zipdownload: Added mbox format support (#1486069) - Drop support for IE6, move IE7/IE8 support to legacy_browser plugin program/js/app.js
@@ -4225,7 +4225,7 @@ }; // build URL params for search this.search_params = function(search, filter, smods) this.search_params = function(search, filter) { var n, url = {}, mods_arr = [], mods = this.env.search_mods, @@ -4244,7 +4244,7 @@ if (search) { url._q = search; if (!smods && mods && this.message_list) if (mods && this.message_list) mods = mods[mbox] || mods['*']; if (mods) { program/lib/Roundcube/rcube_imap.php
@@ -1489,23 +1489,39 @@ * Invoke search request to IMAP server * * @param string $folder Folder name to search in * @param string $str Search criteria * @param string $search Search criteria * @param string $charset Search charset * @param string $sort_field Header field to sort by * * @return rcube_result_index Search result object * @todo: Search criteria should be provided in non-IMAP format, eg. array */ public function search($folder='', $str='ALL', $charset=NULL, $sort_field=NULL) public function search($folder = '', $search = 'ALL', $charset = null, $sort_field = null) { if (!$str) { $str = 'ALL'; if (!$search) { $search = 'ALL'; } // multi-folder search if (is_array($folder) && count($folder) > 1 && $str != 'ALL') { new rcube_result_index; // trigger autoloader and make these classes available for threaded context new rcube_result_thread; if ((is_array($folder) && empty($folder)) || (!is_array($folder) && !strlen($folder))) { $folder = $this->folder; } $plugin = rcube::get_instance()->plugins->exec_hook('imap_search_before', array( 'folder' => $folder, 'search' => $search, 'charset' => $charset, 'sort_field' => $sort_field, 'threading' => $this->threading, )); $folder = $plugin['folder']; $search = $plugin['search']; $charset = $plugin['charset']; $sort_field = $plugin['sort_field']; $results = $plugin['result']; // multi-folder search if (!$results && is_array($folder) && count($folder) > 1 && $search != 'ALL') { // connect IMAP to have all the required classes and settings loaded $this->check_connection(); @@ -1518,29 +1534,28 @@ $searcher->set_timelimit(60); // continue existing incomplete search if (!empty($this->search_set) && $this->search_set->incomplete && $str == $this->search_string) { if (!empty($this->search_set) && $this->search_set->incomplete && $search == $this->search_string) { $searcher->set_results($this->search_set); } // execute the search $results = $searcher->exec( $folder, $str, $search, $charset ? $charset : $this->default_charset, $sort_field && $this->get_capability('SORT') ? $sort_field : null, $this->threading ); } else { else if (!$results) { $folder = is_array($folder) ? $folder[0] : $folder; if (!strlen($folder)) { $folder = $this->folder; } $results = $this->search_index($folder, $str, $charset, $sort_field); $search = is_array($search) ? $search[$folder] : $search; $results = $this->search_index($folder, $search, $charset, $sort_field); } $this->set_search_set(array($str, $results, $charset, $sort_field, $this->threading || $this->search_sorted ? true : false)); $sorted = $this->threading || $this->search_sorted || $plugin['search_sorted'] ? true : false; $this->set_search_set(array($search, $results, $charset, $sort_field, $sorted)); return $results; } program/lib/Roundcube/rcube_imap_search.php
@@ -65,7 +65,8 @@ $results->add($result); } 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; $this->jobs[] = $job; } @@ -151,7 +152,6 @@ { $criteria = $this->search; $charset = $this->charset; $imap = $this->worker->get_imap(); if (!$imap->connected()) { @@ -228,7 +228,4 @@ { return $this->result; } } program/lib/Roundcube/rcube_result_multifolder.php
@@ -34,8 +34,8 @@ protected $meta = array(); protected $index = array(); protected $folders = array(); protected $sorting; protected $order = 'ASC'; protected $sorting; /** @@ -75,6 +75,7 @@ // append UIDs to global index $folder = $result->get_parameters('MAILBOX'); $index = array_map(function($uid) use ($folder) { return $uid . '-' . $folder; }, $result->get()); $this->index = array_merge($this->index, $index); } @@ -150,8 +151,10 @@ if ($this->order != $set->get_parameters('ORDER')) { $set->revert(); } $folder = $set->get_parameters('MAILBOX'); $index = array_map(function($uid) use ($folder) { return $uid . '-' . $folder; }, $set->get()); $this->index = array_merge($this->index, $index); } } @@ -171,6 +174,7 @@ if (!empty($this->folder)) { $msgid .= '-' . $this->folder; } return array_search($msgid, $this->index); } @@ -188,6 +192,7 @@ if ($set->get_parameters('MAILBOX') == $folder) { $set->filter($ids); } $this->meta['count'] += $set->count(); } } program/lib/Roundcube/rcube_storage.php
@@ -152,6 +152,19 @@ /** * 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. * * @param boolean $dbg True if conversation with the server should be logged