/** * Return sorted list of message UIDs ignoring current search settings. * Doesn't uses cache by default. * * @param string $folder Folder to get index from * @param string $sort_field Sort column * @param string $sort_order Sort order [ASC, DESC] * @param bool $skip_cache Disables cache usage * * @return rcube_result_index Sorted list of message UIDs */ public function index_direct($folder, $sort_field = null, $sort_order = null, $skip_cache = true) { if (!$skip_cache && ($mcache = $this->get_mcache_engine())) { $index = $mcache->get_index($folder, $sort_field, $sort_order); } else { if (!$sort_field) { // use search result from count() if possible if ($this->options['skip_deleted'] && !empty($this->icache['undeleted_idx']) && $this->icache['undeleted_idx']->get_parameters('ALL') !== null && $this->icache['undeleted_idx']->get_parameters('MAILBOX') == $folder) { $index = $this->icache['undeleted_idx']; } else { if (!$this->check_connection()) { return new rcube_result_index(); } else { $index = $this->conn->search($folder, 'ALL' . ($this->options['skip_deleted'] ? ' UNDELETED' : ''), true); } } } else { if (!$this->check_connection()) { return new rcube_result_index(); } else { if ($this->get_capability('SORT')) { $index = $this->conn->sort($folder, $sort_field, $this->options['skip_deleted'] ? 'UNDELETED' : '', true); } if (empty($index) || $index->is_error()) { $index = $this->conn->index($folder, "1:*", $sort_field, $this->options['skip_deleted'], false, true); } } } } if ($sort_order != $index->get_parameters('ORDER')) { $index->revert(); } return $index; }
/** * Return sorted list of message UIDs ignoring current search settings. * Doesn't uses cache by default. * * @param string $folder Folder to get index from * @param string $sort_field Sort column * @param string $sort_order Sort order [ASC, DESC] * @param rcube_result_* $search Optional messages set to limit the result * * @return rcube_result_index Sorted list of message UIDs */ public function index_direct($folder, $sort_field = null, $sort_order = null, $search = null) { if (!empty($search)) { $search = $this->search_set->get_compressed(); } // use message index sort as default sorting if (!$sort_field) { // use search result from count() if possible if (empty($search) && $this->options['skip_deleted'] && !empty($this->icache['undeleted_idx']) && $this->icache['undeleted_idx']->get_parameters('ALL') !== null && $this->icache['undeleted_idx']->get_parameters('MAILBOX') == $folder ) { $index = $this->icache['undeleted_idx']; } else if (!$this->check_connection()) { return new rcube_result_index(); } else { $query = $this->options['skip_deleted'] ? 'UNDELETED' : ''; if ($search) { $query = trim($query . ' UID ' . $search); } $index = $this->conn->search($folder, $query, true); } } else if (!$this->check_connection()) { return new rcube_result_index(); } // fetch complete message index else { if ($this->get_capability('SORT')) { $query = $this->options['skip_deleted'] ? 'UNDELETED' : ''; if ($search) { $query = trim($query . ' UID ' . $search); } $index = $this->conn->sort($folder, $sort_field, $query, true); } if (empty($index) || $index->is_error()) { $index = $this->conn->index($folder, $search ? $search : "1:*", $sort_field, $this->options['skip_deleted'], $search ? true : false, true); } } if ($sort_order != $index->get_parameters('ORDER')) { $index->revert(); } return $index; }