/** * Returns list of messages (headers). See rcube_imap::fetch_headers(). * * @param string $mailbox Folder name * @param array $msgs Message UIDs * * @return array The list of messages (rcube_message_header) indexed by UID */ function get_messages($mailbox, $msgs = array()) { if (empty($msgs)) { return array(); } // Fetch messages from cache $sql_result = $this->db->query("SELECT uid, data, flags" . " FROM " . $this->db->table_name('cache_messages') . " WHERE user_id = ?" . " AND mailbox = ?" . " AND uid IN (" . $this->db->array2list($msgs, 'integer') . ")", $this->userid, $mailbox); $msgs = array_flip($msgs); $result = array(); while ($sql_arr = $this->db->fetch_assoc($sql_result)) { $uid = intval($sql_arr['uid']); $result[$uid] = $this->build_message($sql_arr); if (!empty($result[$uid])) { // save memory, we don't need message body here (?) $result[$uid]->body = null; unset($msgs[$uid]); } } // Fetch not found messages from IMAP server if (!empty($msgs)) { $messages = $this->imap->fetch_headers($mailbox, array_keys($msgs), false, true); // Insert to DB and add to result list if (!empty($messages)) { foreach ($messages as $msg) { $this->add_message($mailbox, $msg, !array_key_exists($msg->uid, $result)); $result[$msg->uid] = $msg; } } } return $result; }
/** * Returns list of messages (headers). See rcube_imap::fetch_headers(). * * @param string $mailbox Folder name * @param array $msgs Message sequence numbers * @param bool $is_uid True if $msgs contains message UIDs * * @return array The list of messages (rcube_mail_header) indexed by UID */ function get_messages($mailbox, $msgs = array(), $is_uid = true) { if (empty($msgs)) { return array(); } // @TODO: it would be nice if we could work with UIDs only // then index would be not needed. For now we need it to // map id to uid here and to update message id for cached message // Convert IDs to UIDs $index = $this->get_index($mailbox, 'ANY'); if (!$is_uid) { foreach ($msgs as $idx => $msgid) { if ($uid = $index[$msgid]) { $msgs[$idx] = $uid; } } } // Fetch messages from cache $sql_result = $this->db->query("SELECT uid, data, flags" . " FROM " . get_table_name('cache_messages') . " WHERE user_id = ?" . " AND mailbox = ?" . " AND uid IN (" . $this->db->array2list($msgs, 'integer') . ")", $this->userid, $mailbox); $msgs = array_flip($msgs); $result = array(); while ($sql_arr = $this->db->fetch_assoc($sql_result)) { $uid = intval($sql_arr['uid']); $result[$uid] = $this->build_message($sql_arr); // save memory, we don't need message body here (?) $result[$uid]->body = null; // update message ID according to index data if (!empty($index) && ($id = array_search($uid, $index))) { $result[$uid]->id = $id; } if (!empty($result[$uid])) { unset($msgs[$uid]); } } // Fetch not found messages from IMAP server if (!empty($msgs)) { $messages = $this->imap->fetch_headers($mailbox, array_keys($msgs), true, true); // Insert to DB and add to result list if (!empty($messages)) { foreach ($messages as $msg) { $this->add_message($mailbox, $msg, !array_key_exists($msg->uid, $result)); $result[$msg->uid] = $msg; } } } return $result; }
/** * Returns list of messages (headers). See rcube_imap::fetch_headers(). * * @param string $mailbox Folder name * @param array $msgs Message UIDs * * @return array The list of messages (rcube_message_header) indexed by UID */ function get_messages($mailbox, $msgs = array()) { if (empty($msgs)) { return array(); } $result = array(); if ($this->mode & self::MODE_MESSAGE) { // Fetch messages from cache $sql_result = $this->db->query("SELECT `uid`, `data`, `flags`" . " FROM {$this->messages_table}" . " WHERE `user_id` = ?" . " AND `mailbox` = ?" . " AND `uid` IN (" . $this->db->array2list($msgs, 'integer') . ")", $this->userid, $mailbox); $msgs = array_flip($msgs); while ($sql_arr = $this->db->fetch_assoc($sql_result)) { $uid = intval($sql_arr['uid']); $result[$uid] = $this->build_message($sql_arr); if (!empty($result[$uid])) { // save memory, we don't need message body here (?) $result[$uid]->body = null; unset($msgs[$uid]); } } $this->db->reset(); $msgs = array_flip($msgs); } // Fetch not found messages from IMAP server if (!empty($msgs)) { $messages = $this->imap->fetch_headers($mailbox, $msgs, false, true); // Insert to DB and add to result list if (!empty($messages)) { foreach ($messages as $msg) { if ($this->mode & self::MODE_MESSAGE) { $this->add_message($mailbox, $msg, !array_key_exists($msg->uid, $result)); } $result[$msg->uid] = $msg; } } } return $result; }