/** * @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']); }
/** * Delete cache entries older than TTL * * @param string $ttl Lifetime of message cache entries */ function expunge($ttl) { // get expiration timestamp $ts = get_offset_time($ttl, -1); $this->db->query("DELETE FROM " . get_table_name('cache_messages') . " WHERE changed < " . $this->db->fromunixtime($ts)); $this->db->query("DELETE FROM " . get_table_name('cache_index') . " WHERE changed < " . $this->db->fromunixtime($ts)); $this->db->query("DELETE FROM " . get_table_name('cache_thread') . " WHERE changed < " . $this->db->fromunixtime($ts)); }