summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2012-04-19 07:42:19 +0000
committeralecpl <alec@alec.pl>2012-04-19 07:42:19 +0000
commit5d66a4bcf3ad5d584255184776f1f04451c929fc (patch)
treec203c622d679a5c60c03743ec2d878c754c47722
parent6a8b4c2951314441e670d89204dd3b913698b23d (diff)
- Improved ttl values handling
-rw-r--r--program/include/rcube.php2
-rw-r--r--program/include/rcube_cache.php8
-rw-r--r--program/include/rcube_imap.php2
-rw-r--r--program/include/rcube_shared.inc34
4 files changed, 29 insertions, 17 deletions
diff --git a/program/include/rcube.php b/program/include/rcube.php
index 2566defa8..780f9b699 100644
--- a/program/include/rcube.php
+++ b/program/include/rcube.php
@@ -236,7 +236,7 @@ class rcube
*
* @param string $name Cache identifier
* @param string $type Cache type ('db', 'apc' or 'memcache')
- * @param int $ttl Expiration time for cache items in seconds
+ * @param string $ttl Expiration time for cache items
* @param bool $packed Enables/disables data serialization
*
* @return rcube_cache Cache object
diff --git a/program/include/rcube_cache.php b/program/include/rcube_cache.php
index 6d7a9eacd..ef04beba5 100644
--- a/program/include/rcube_cache.php
+++ b/program/include/rcube_cache.php
@@ -59,7 +59,7 @@ class rcube_cache
* @param string $type Engine type ('db' or 'memcache' or 'apc')
* @param int $userid User identifier
* @param string $prefix Key name prefix
- * @param int $ttl Expiration time of memcache/apc items in seconds (max.2592000)
+ * @param string $ttl Expiration time of memcache/apc items
* @param bool $packed Enables/disabled data serialization.
* It's possible to disable data serialization if you're sure
* stored data will be always a safe string
@@ -82,8 +82,12 @@ class rcube_cache
$this->db = $rcube->get_dbh();
}
+ // convert ttl string to seconds
+ $ttl = get_offset_sec($ttl);
+ if ($ttl > 2592000) $ttl = 2592000;
+
$this->userid = (int) $userid;
- $this->ttl = (int) $ttl;
+ $this->ttl = $ttl;
$this->packed = $packed;
$this->prefix = $prefix;
}
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index daba72e50..78c282d48 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -3532,8 +3532,6 @@ class rcube_imap extends rcube_storage
if ($this->caching && !$this->cache) {
$rcube = rcube::get_instance();
$ttl = $rcube->config->get('message_cache_lifetime', '10d');
- $ttl = get_offset_time($ttl) - time();
-
$this->cache = $rcube->get_cache('IMAP', $this->caching, $ttl);
}
diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc
index b3911659e..176a46281 100644
--- a/program/include/rcube_shared.inc
+++ b/program/include/rcube_shared.inc
@@ -146,25 +146,23 @@ function clear_directory($dir_path)
/**
- * Create a unix timestamp with a specified offset from now.
+ * Returns number of seconds for a specified offset string.
*
- * @param string $offset_str String representation of the offset (e.g. 20min, 5h, 2days)
- * @param int $factor Factor to multiply with the offset
+ * @param string $str String representation of the offset (e.g. 20min, 5h, 2days, 1week)
*
- * @return int Unix timestamp
+ * @return int Number of seconds
*/
-function get_offset_time($offset_str, $factor=1)
+function get_offset_sec($str)
{
- if (preg_match('/^([0-9]+)\s*([smhdw])/i', $offset_str, $regs)) {
- $amount = (int)$regs[1];
+ if (preg_match('/^([0-9]+)\s*([smhdw])/i', $str, $regs)) {
+ $amount = (int) $regs[1];
$unit = strtolower($regs[2]);
}
else {
- $amount = (int)$offset_str;
+ $amount = (int) $str;
$unit = 's';
}
- $ts = time();
switch ($unit) {
case 'w':
$amount *= 7;
@@ -174,11 +172,23 @@ function get_offset_time($offset_str, $factor=1)
$amount *= 60;
case 'm':
$amount *= 60;
- case 's':
- $ts += $amount * $factor;
}
- return $ts;
+ return $amount;
+}
+
+
+/**
+ * Create a unix timestamp with a specified offset from now.
+ *
+ * @param string $offset_str String representation of the offset (e.g. 20min, 5h, 2days)
+ * @param int $factor Factor to multiply with the offset
+ *
+ * @return int Unix timestamp
+ */
+function get_offset_time($offset_str, $factor=1)
+{
+ return time() + get_offset_sec($offset_str) * $factor;
}