Esempio n. 1
0
 /**
  * @access private
  */
 private function add_message_cache($key, $index, $headers, $struct = null, $force = false, $internal_cache = false)
 {
     if (empty($key) || !is_object($headers) || empty($headers->uid)) {
         return;
     }
     // add to internal (fast) cache
     if ($internal_cache) {
         $this->icache['message'][$headers->uid] = clone $headers;
         $this->icache['message'][$headers->uid]->structure = $struct;
     }
     // no further caching
     if (!$this->caching_enabled) {
         return;
     }
     // known message id
     if (is_int($force) && $force > 0) {
         $message_id = $force;
     } else {
         if (!$force) {
             $sql_result = $this->db->query("SELECT message_id" . " FROM " . get_table_name('messages') . " WHERE user_id=?" . " AND cache_key=?" . " AND uid=?", $_SESSION['user_id'], $key, $headers->uid);
             if ($sql_arr = $this->db->fetch_assoc($sql_result)) {
                 $message_id = $sql_arr['message_id'];
             }
         }
     }
     // update cache record
     if ($message_id) {
         $this->db->query("UPDATE " . get_table_name('messages') . " SET idx=?, headers=?, structure=?" . " WHERE message_id=?", $index, serialize($this->db->encode(clone $headers)), is_object($struct) ? serialize($this->db->encode(clone $struct)) : NULL, $message_id);
     } else {
         // insert new record
         $this->db->query("INSERT INTO " . get_table_name('messages') . " (user_id, del, cache_key, created, idx, uid, subject, " . $this->db->quoteIdentifier('from') . ", " . $this->db->quoteIdentifier('to') . ", " . "cc, date, size, headers, structure)" . " VALUES (?, 0, ?, " . $this->db->now() . ", ?, ?, ?, ?, ?, ?, " . $this->db->fromunixtime($headers->timestamp) . ", ?, ?, ?)", $_SESSION['user_id'], $key, $index, $headers->uid, (string) mb_substr($this->db->encode($this->decode_header($headers->subject, true)), 0, 128), (string) mb_substr($this->db->encode($this->decode_header($headers->from, true)), 0, 128), (string) mb_substr($this->db->encode($this->decode_header($headers->to, true)), 0, 128), (string) mb_substr($this->db->encode($this->decode_header($headers->cc, true)), 0, 128), (int) $headers->size, serialize($this->db->encode(clone $headers)), is_object($struct) ? serialize($this->db->encode(clone $struct)) : NULL);
     }
     unset($this->icache['index']);
 }
Esempio n. 2
0
 /**
  * Saves the message in cache.
  *
  * @param string            $mailbox  Folder name
  * @param rcube_mail_header $message  Message data
  * @param bool              $force    Skips message in-cache existance check
  */
 function add_message($mailbox, $message, $force = false)
 {
     if (!is_object($message) || empty($message->uid)) {
         return;
     }
     $msg = serialize($this->db->encode(clone $message));
     $flags = 0;
     if (!empty($message->flags)) {
         foreach ($this->flags as $idx => $flag) {
             if (!empty($message->flags[$flag])) {
                 $flags += $idx;
             }
         }
     }
     unset($msg->flags);
     // update cache record (even if it exists, the update
     // here will work as select, assume row exist if affected_rows=0)
     if (!$force) {
         $res = $this->db->query("UPDATE " . get_table_name('cache_messages') . " SET flags = ?, data = ?, changed = " . $this->db->now() . " WHERE user_id = ?" . " AND mailbox = ?" . " AND uid = ?", $flags, $msg, $this->userid, $mailbox, (int) $message->uid);
         if ($this->db->affected_rows()) {
             return;
         }
     }
     // insert new record
     $this->db->query("INSERT INTO " . get_table_name('cache_messages') . " (user_id, mailbox, uid, flags, changed, data)" . " VALUES (?, ?, ?, ?, " . $this->db->now() . ", ?)", $this->userid, $mailbox, (int) $message->uid, $flags, $msg);
 }