| | |
| | | | This file is part of the Roundcube Webmail client | |
| | | | Copyright (C) 2005-2011, The Roundcube Dev Team | |
| | | | Copyright (C) 2011, Kolab Systems AG | |
| | | | Licensed under the GNU GPL | |
| | | | | |
| | | | Licensed under the GNU General Public License version 3 or | |
| | | | any later version with exceptions for skins & plugins. | |
| | | | See the README file for a full license statement. | |
| | | | | |
| | | | PURPOSE: | |
| | | | SORT/SEARCH/ESEARCH response handler | |
| | |
| | | | Author: Aleksander Machniak <alec@alec.pl> | |
| | | +-----------------------------------------------------------------------+ |
| | | |
| | | $Id: rcube_imap.php 5347 2011-10-19 06:35:29Z alec $ |
| | | $Id$ |
| | | |
| | | */ |
| | | |
| | |
| | | */ |
| | | class rcube_result_index |
| | | { |
| | | private $raw_data; |
| | | private $mailbox; |
| | | private $meta = array(); |
| | | private $params = array(); |
| | | private $order = 'ASC'; |
| | | protected $raw_data; |
| | | protected $mailbox; |
| | | protected $meta = array(); |
| | | protected $params = array(); |
| | | protected $order = 'ASC'; |
| | | |
| | | const SEPARATOR_ELEMENT = ' '; |
| | | |
| | |
| | | $param = strtoupper($m[1]); |
| | | $value = $m[2]; |
| | | |
| | | $this->params[strtoupper($m[1])] = $value; |
| | | $this->params[$param] = $value; |
| | | $data_item = substr($data_item, strlen($m[0])); |
| | | |
| | | if (in_array($param, array('COUNT', 'MIN', 'MAX'))) { |
| | | $this->meta[strtolower($param)] = (int) $m[2]; |
| | | $this->meta[strtolower($param)] = (int) $value; |
| | | } |
| | | } |
| | | |
| | | // @TODO: Implement compression using compressMessageSet() in __sleep() and __wakeup() ? |
| | | // @TODO: work with compressed result?! |
| | | if (isset($this->params['ALL'])) { |
| | | $data[$idx] = implode(self::SEPARATOR_ELEMENT, |
| | | $data_item = implode(self::SEPARATOR_ELEMENT, |
| | | rcube_imap_generic::uncompressMessageSet($this->params['ALL'])); |
| | | } |
| | | } |
| | |
| | | |
| | | unset($data[$i]); |
| | | } |
| | | |
| | | $data = array_filter($data); |
| | | |
| | | if (empty($data)) { |
| | | return; |
| | |
| | | * |
| | | * @return bool True if the result is an error, False otherwise |
| | | */ |
| | | public function isError() |
| | | public function is_error() |
| | | { |
| | | return $this->raw_data === null ? true : false; |
| | | } |
| | |
| | | * |
| | | * @return bool True if the result is empty, False otherwise |
| | | */ |
| | | public function isEmpty() |
| | | public function is_empty() |
| | | { |
| | | return empty($this->raw_data) ? true : false; |
| | | } |
| | |
| | | * |
| | | * @return int Number of elements |
| | | */ |
| | | public function countMessages() |
| | | public function count_messages() |
| | | { |
| | | return $this->count(); |
| | | } |
| | |
| | | if ($m[0][1]) { |
| | | $idx = 1 + substr_count($this->raw_data, self::SEPARATOR_ELEMENT, 0, $m[0][1]); |
| | | } |
| | | // cache position of this element, so we can use it in getElement() |
| | | // cache position of this element, so we can use it in get_element() |
| | | $this->meta['pos'][$idx] = (int)$m[0][1]; |
| | | |
| | | return $idx; |
| | |
| | | * |
| | | * @return array List of message IDs |
| | | */ |
| | | public function getCompressed() |
| | | public function get_compressed() |
| | | { |
| | | if (empty($this->raw_data)) { |
| | | return ''; |
| | |
| | | * |
| | | * @return int Element value |
| | | */ |
| | | public function getElement($index) |
| | | public function get_element($index) |
| | | { |
| | | $count = $this->count(); |
| | | |
| | |
| | | * |
| | | * @return array|string Response parameters or parameter value |
| | | */ |
| | | public function getParameters($param=null) |
| | | public function get_parameters($param=null) |
| | | { |
| | | $params = $this->params; |
| | | $params['MAILBOX'] = $this->mailbox; |
| | |
| | | * |
| | | * @return int Data length |
| | | */ |
| | | private function length() |
| | | protected function length() |
| | | { |
| | | if (!isset($this->meta['length'])) { |
| | | $this->meta['length'] = strlen($this->raw_data); |