From f8c96f737c1916377e361e3fbaa8a415c4101ca4 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 07 Jun 2012 04:34:56 -0400
Subject: [PATCH] Enable attachments drag&drop upload for default skin
---
program/include/rcube_imap_cache.php | 112 +++++++++++++++++++++++++++++++++++---------------------
1 files changed, 70 insertions(+), 42 deletions(-)
diff --git a/program/include/rcube_imap_cache.php b/program/include/rcube_imap_cache.php
index 1b6a165..eb2df16 100644
--- a/program/include/rcube_imap_cache.php
+++ b/program/include/rcube_imap_cache.php
@@ -6,7 +6,10 @@
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2005-2011, The Roundcube Dev Team |
- | Licensed under the GNU GPL |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
| |
| PURPOSE: |
| Caching of IMAP folder contents (messages and index) |
@@ -15,9 +18,6 @@
| Author: Thomas Bruederli <roundcube@gmail.com> |
| Author: Aleksander Machniak <alec@alec.pl> |
+-----------------------------------------------------------------------+
-
- $Id$
-
*/
@@ -92,7 +92,7 @@
{
$this->db = $db;
$this->imap = $imap;
- $this->userid = (int)$userid;
+ $this->userid = $userid;
$this->skip_deleted = $skip_deleted;
}
@@ -287,7 +287,7 @@
* @param string $mailbox Folder name
* @param array $msgs Message UIDs
*
- * @return array The list of messages (rcube_mail_header) indexed by UID
+ * @return array The list of messages (rcube_message_header) indexed by UID
*/
function get_messages($mailbox, $msgs = array())
{
@@ -298,7 +298,7 @@
// Fetch messages from cache
$sql_result = $this->db->query(
"SELECT uid, data, flags"
- ." FROM ".get_table_name('cache_messages')
+ ." FROM ".$this->db->table_name('cache_messages')
." WHERE user_id = ?"
." AND mailbox = ?"
." AND uid IN (".$this->db->array2list($msgs, 'integer').")",
@@ -311,10 +311,10 @@
$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;
-
if (!empty($result[$uid])) {
+ // save memory, we don't need message body here (?)
+ $result[$uid]->body = null;
+
unset($msgs[$uid]);
}
}
@@ -345,20 +345,21 @@
* from IMAP server
* @param bool $no_cache Enables internal cache usage
*
- * @return rcube_mail_header Message data
+ * @return rcube_message_header Message data
*/
function get_message($mailbox, $uid, $update = true, $cache = true)
{
// Check internal cache
- if (($message = $this->icache['message'])
- && $message['mailbox'] == $mailbox && $message['object']->uid == $uid
+ if ($this->icache['message']
+ && $this->icache['message']['mailbox'] == $mailbox
+ && $this->icache['message']['object']->uid == $uid
) {
return $this->icache['message']['object'];
}
$sql_result = $this->db->query(
"SELECT flags, data"
- ." FROM ".get_table_name('cache_messages')
+ ." FROM ".$this->db->table_name('cache_messages')
." WHERE user_id = ?"
." AND mailbox = ?"
." AND uid = ?",
@@ -400,9 +401,9 @@
/**
* 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
+ * @param string $mailbox Folder name
+ * @param rcube_message_header $message Message data
+ * @param bool $force Skips message in-cache existance check
*/
function add_message($mailbox, $message, $force = false)
{
@@ -426,7 +427,7 @@
// here will work as select, assume row exist if affected_rows=0)
if (!$force) {
$res = $this->db->query(
- "UPDATE ".get_table_name('cache_messages')
+ "UPDATE ".$this->db->table_name('cache_messages')
." SET flags = ?, data = ?, changed = ".$this->db->now()
." WHERE user_id = ?"
." AND mailbox = ?"
@@ -440,7 +441,7 @@
// insert new record
$this->db->query(
- "INSERT INTO ".get_table_name('cache_messages')
+ "INSERT INTO ".$this->db->table_name('cache_messages')
." (user_id, mailbox, uid, flags, changed, data)"
." VALUES (?, ?, ?, ?, ".$this->db->now().", ?)",
$this->userid, $mailbox, (int) $message->uid, $flags, $msg);
@@ -475,7 +476,7 @@
}
$this->db->query(
- "UPDATE ".get_table_name('cache_messages')
+ "UPDATE ".$this->db->table_name('cache_messages')
." SET changed = ".$this->db->now()
.", flags = flags ".($enabled ? "+ $idx" : "- $idx")
." WHERE user_id = ?"
@@ -496,7 +497,7 @@
{
if (!strlen($mailbox)) {
$this->db->query(
- "DELETE FROM ".get_table_name('cache_messages')
+ "DELETE FROM ".$this->db->table_name('cache_messages')
." WHERE user_id = ?",
$this->userid);
}
@@ -509,11 +510,11 @@
}
$this->db->query(
- "DELETE FROM ".get_table_name('cache_messages')
+ "DELETE FROM ".$this->db->table_name('cache_messages')
." WHERE user_id = ?"
- ." AND mailbox = ".$this->db->quote($mailbox)
+ ." AND mailbox = ?"
.($uids !== null ? " AND uid IN (".$this->db->array2list((array)$uids, 'integer').")" : ""),
- $this->userid);
+ $this->userid, $mailbox);
}
}
@@ -532,17 +533,19 @@
// otherwise use 'valid' flag to not loose HIGHESTMODSEQ value
if ($remove) {
$this->db->query(
- "DELETE FROM ".get_table_name('cache_index')
- ." WHERE user_id = ".intval($this->userid)
- .(strlen($mailbox) ? " AND mailbox = ".$this->db->quote($mailbox) : "")
+ "DELETE FROM ".$this->db->table_name('cache_index')
+ ." WHERE user_id = ?"
+ .(strlen($mailbox) ? " AND mailbox = ".$this->db->quote($mailbox) : ""),
+ $this->userid
);
}
else {
$this->db->query(
- "UPDATE ".get_table_name('cache_index')
+ "UPDATE ".$this->db->table_name('cache_index')
." SET valid = 0"
- ." WHERE user_id = ".intval($this->userid)
- .(strlen($mailbox) ? " AND mailbox = ".$this->db->quote($mailbox) : "")
+ ." WHERE user_id = ?"
+ .(strlen($mailbox) ? " AND mailbox = ".$this->db->quote($mailbox) : ""),
+ $this->userid
);
}
@@ -565,9 +568,10 @@
function remove_thread($mailbox = null)
{
$this->db->query(
- "DELETE FROM ".get_table_name('cache_thread')
- ." WHERE user_id = ".intval($this->userid)
- .(strlen($mailbox) ? " AND mailbox = ".$this->db->quote($mailbox) : "")
+ "DELETE FROM ".$this->db->table_name('cache_thread')
+ ." WHERE user_id = ?"
+ .(strlen($mailbox) ? " AND mailbox = ".$this->db->quote($mailbox) : ""),
+ $this->userid
);
if (strlen($mailbox)) {
@@ -596,6 +600,27 @@
/**
+ * 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));
+ }
+
+
+ /**
* Fetches index data from database
*/
private function get_index_row($mailbox)
@@ -603,7 +628,7 @@
// Get index from DB
$sql_result = $this->db->query(
"SELECT data, valid"
- ." FROM ".get_table_name('cache_index')
+ ." FROM ".$this->db->table_name('cache_index')
." WHERE user_id = ?"
." AND mailbox = ?",
$this->userid, $mailbox);
@@ -640,7 +665,7 @@
// Get thread from DB
$sql_result = $this->db->query(
"SELECT data"
- ." FROM ".get_table_name('cache_thread')
+ ." FROM ".$this->db->table_name('cache_thread')
." WHERE user_id = ?"
." AND mailbox = ?",
$this->userid, $mailbox);
@@ -684,7 +709,7 @@
if ($exists) {
$sql_result = $this->db->query(
- "UPDATE ".get_table_name('cache_index')
+ "UPDATE ".$this->db->table_name('cache_index')
." SET data = ?, valid = 1, changed = ".$this->db->now()
." WHERE user_id = ?"
." AND mailbox = ?",
@@ -692,7 +717,7 @@
}
else {
$sql_result = $this->db->query(
- "INSERT INTO ".get_table_name('cache_index')
+ "INSERT INTO ".$this->db->table_name('cache_index')
." (user_id, mailbox, data, valid, changed)"
." VALUES (?, ?, ?, 1, ".$this->db->now().")",
$this->userid, $mailbox, $data);
@@ -715,7 +740,7 @@
if ($exists) {
$sql_result = $this->db->query(
- "UPDATE ".get_table_name('cache_thread')
+ "UPDATE ".$this->db->table_name('cache_thread')
." SET data = ?, changed = ".$this->db->now()
." WHERE user_id = ?"
." AND mailbox = ?",
@@ -723,7 +748,7 @@
}
else {
$sql_result = $this->db->query(
- "INSERT INTO ".get_table_name('cache_thread')
+ "INSERT INTO ".$this->db->table_name('cache_thread')
." (user_id, mailbox, data, changed)"
." VALUES (?, ?, ?, ".$this->db->now().")",
$this->userid, $mailbox, $data);
@@ -931,7 +956,7 @@
$uids = array();
$sql_result = $this->db->query(
"SELECT uid"
- ." FROM ".get_table_name('cache_messages')
+ ." FROM ".$this->db->table_name('cache_messages')
." WHERE user_id = ?"
." AND mailbox = ?",
$this->userid, $mailbox);
@@ -978,7 +1003,7 @@
}
$this->db->query(
- "UPDATE ".get_table_name('cache_messages')
+ "UPDATE ".$this->db->table_name('cache_messages')
." SET flags = ?, changed = ".$this->db->now()
." WHERE user_id = ?"
." AND mailbox = ?"
@@ -1033,7 +1058,7 @@
*
* @param array $sql_arr Message row data
*
- * @return rcube_mail_header Message object
+ * @return rcube_message_header Message object
*/
private function build_message($sql_arr)
{
@@ -1121,3 +1146,6 @@
return $index;
}
}
+
+// for backward compat.
+class rcube_mail_header extends rcube_message_header { }
--
Gitblit v1.9.1