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; }