Example #1
0
 /**
  * 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;
 }
Example #2
0
    /**
     * 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;
    }