gXbfB#) ۻbis_IIߪ ۻbis_IIߪ ۻbis_IIߪ ۻbis_II4&D.5;Aϳކ:}Wۻp%7ޔ_#5L*miHSXٮ5SDϑn2Hm.qCF# YqUӴysgl鯀9:ϟN[vպ~uk6mۊ߂CfictcVQOVm]5Z) W.B/'JܣAt@#/bAK8`G xb8I@N_;^WR4νȖ6,+ 5ƯK 7 (d]7;e K|=³ʖ[Wg ꭽm< 0S͑Bch|88T+ߌaV-,$ysx JO-;K dZcbڕCwƉS⁲W4#+*ߌ g9I7La߽ _S NV&x_wo2b|zerpQ,6'+~^܉RT#:ÌsʏREe:3Ч' Ȃlh0%yVtI:UƳЗ4K#;2,"{ƿVZ0puŎ]o;s$dtm׋AXҥωE랻7-QJ DUӈ ,\{U{.}5B\ST8y >YRZIUdhW[6(t  ]u=k[g3KB߆Uv%MAb.pl.tvdW YoJӕVaߧQ/M/BT7OHx-+L `BUǞ/;nmp X;xćhuj W9r2;J?@L+asτC| ZӴd\`7+cy0y with rcube_result_thread * * @return int Number of elements */ public function count_messages() { return $this->count(); } /** * Reverts order of elements in the result */ public function revert() { $this->order = $this->order == 'ASC' ? 'DESC' : 'ASC'; $this->index = array_reverse($this->index); // revert order in all sub-sets foreach ($this->sets as $set) { if ($this->order != $set->get_parameters('ORDER')) { $set->revert(); } } } /** * Check if the given message ID exists in the object * * @param int $msgid Message ID * @param bool $get_index When enabled element's index will be returned. * Elements are indexed starting with 0 * * @return mixed False if message ID doesn't exist, True if exists or * index of the element if $get_index=true */ public function exists($msgid, $get_index = false) { if (!empty($this->folder)) { $msgid .= '-' . $this->folder; } $idx = array_search($msgid, $this->index); if ($get_index) { return $idx; } return $idx !== false; } /** * Filters data set. Removes elements listed in $ids list. * * @param array $ids List of IDs to remove. * @param string $folder IMAP folder */ public function filter($ids = [], $folder = null) { $this->meta['count'] = 0; foreach ($this->sets as $set) { if ($set->get_parameters('MAILBOX') == $folder) { $set->filter($ids); } $this->meta['count'] += $set->count(); } } /** * Slices data set. * * @param int $offset Offset (as for PHP's array_slice()) * @param int $length Number of elements (as for PHP's array_slice()) */ public function slice($offset, $length) { $data = array_slice($this->get(), $offset, $length); $this->index = $data; $this->meta['count'] = count($data); } /** * Filters data set. Removes elements not listed in $ids list. * * @param array $ids List of IDs to keep. */ public function intersect($ids = []) { // not implemented } /** * Return all messages in the result. * * @return array List of message IDs */ public function get() { return $this->index; } /** * Return all messages in the result in compressed form * * @return string List of message IDs in compressed form */ public function get_compressed() { return ''; } /** * Return result element at specified index * * @param int|string $idx Element's index or "FIRST" or "LAST" * * @return int Element value */ public function get_element($idx) { switch ($idx) { case 'FIRST': return $this->index[0]; case 'LAST': return end($this->index); default: return $this->index[$idx] ?? null; } } /** * Returns response parameters, e.g. ESEARCH's MIN/MAX/COUNT/ALL/MODSEQ * or internal data e.g. MAILBOX, ORDER * * @param string $param Parameter name * * @return array|string Response parameters or parameter value */ public function get_parameters($param=null) { $params = [ 'SORT' => $this->sorting, 'ORDER' => $this->order, 'MAILBOX' => $this->folders, ]; if ($param !== null) { return $params[$param]; } return $params; } /** * Returns the stored result object for a particular folder * * @param string $folder Folder name * * @return false|rcube_result_index|rcube_result_thread A result set or false if none found */ public function get_set($folder) { foreach ($this->sets as $set) { if ($set->get_parameters('MAILBOX') == $folder) { return $set; } } return false; } /** * Returns length of internal data representation * * @return int Data length */ protected function length() { return $this->count(); } /** * Serialization __sleep handler * * @return array Names of all object properties that should be serialized */ public function __sleep() { $this->sdata = ['incomplete' => [], 'error' => []]; foreach ($this->sets as $set) { if ($set->incomplete) { $this->sdata['incomplete'][] = $set->get_parameters('MAILBOX'); } else if ($set->is_error()) { $this->sdata['error'][] = $set->get_parameters('MAILBOX'); } } return ['sdata', 'index', 'folders', 'sorting', 'order']; } /** * Serialization __wakeup handler */ public function __wakeup() { $this->meta = ['count' => count($this->index)]; $this->incomplete = count($this->sdata['incomplete']) > 0; // restore result sets from saved index $data = []; foreach ($this->index as $item) { list($uid, $folder) = explode('-', $item, 2); $data[$folder] = ($data[$folder] ?? '') . ' ' . $uid; } foreach ($this->folders as $folder) { if (in_array($folder, $this->sdata['error'])) { $data_str = null; } else { $data_str = '* SORT' . ($data[$folder] ?? ''); } $set = new rcube_result_index($folder, $data_str, strtoupper($this->order)); if (in_array($folder, $this->sdata['incomplete'])) { $set->incomplete = true; } $this->sets[] = $set; } } }