/**
  * 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;
 }
Exemplo n.º 2
0
 /**
  * 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;
 }
Exemplo n.º 3
0
 /**
  * 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;
 }