alecpl
2012-04-19 5d66a4bcf3ad5d584255184776f1f04451c929fc
- Improved ttl values handling


4 files modified
46 ■■■■■ changed files
program/include/rcube.php 2 ●●● patch | view | raw | blame | history
program/include/rcube_cache.php 8 ●●●● patch | view | raw | blame | history
program/include/rcube_imap.php 2 ●●●●● patch | view | raw | blame | history
program/include/rcube_shared.inc 34 ●●●●● patch | view | raw | blame | history
program/include/rcube.php
@@ -236,7 +236,7 @@
   *
   * @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
program/include/rcube_cache.php
@@ -59,7 +59,7 @@
     * @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 @@
            $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;
    }
program/include/rcube_imap.php
@@ -3532,8 +3532,6 @@
        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);
        }
program/include/rcube_shared.inc
@@ -146,25 +146,23 @@
/**
 * 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 @@
        $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;
}