alecpl
2011-05-23 7ad8e2c3180e2357cbc395da18c5f9d4ad509b0a
- Add TTL parameter to rcube_cache class (and rcmail::get_cache method)


2 files modified
25 ■■■■■ changed files
program/include/rcmail.php 5 ●●●●● patch | view | raw | blame | history
program/include/rcube_cache.php 20 ●●●●● patch | view | raw | blame | history
program/include/rcmail.php
@@ -357,13 +357,14 @@
   *
   * @param string $name Cache identifier
   * @param string $type Cache type ('db', 'apc' or 'memcache')
   * @param int    $ttl  Expiration time for cache items in seconds
   *
   * @return rcube_cache Cache object
   */
  public function get_cache($name, $type)
  public function get_cache($name, $type='db', $ttl=0)
  {
    if (!isset($this->caches[$name])) {
      $this->caches[$name] = new rcube_cache($type, $_SESSION['user_id'], $name);
      $this->caches[$name] = new rcube_cache($type, $_SESSION['user_id'], $name, $ttl);
    }
    return $this->caches[$name];
program/include/rcube_cache.php
@@ -41,6 +41,7 @@
    private $type;
    private $userid;
    private $prefix;
    private $ttl;
    private $index;
    private $cache         = array();
    private $cache_keys    = array();
@@ -54,8 +55,9 @@
     * @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)
     */
    function __construct($type, $userid, $prefix='')
    function __construct($type, $userid, $prefix='', $ttl=0)
    {
        $rcmail = rcmail::get_instance();
        $type   = strtolower($type);
@@ -74,6 +76,7 @@
        }
        $this->userid = (int) $userid;
        $this->ttl    = (int) $ttl;
        $this->prefix = $prefix;
    }
@@ -179,7 +182,6 @@
     * @param string $key Cache key name
     *
     * @return mixed Cached value
     * @access private
     */
    private function read_record($key)
    {
@@ -228,7 +230,6 @@
     *
     * @param string $key  Cache key name
     * @param mxied  $data Serialized cache data 
     * @access private
     */
    private function write_record($key, $data)
    {
@@ -285,7 +286,6 @@
     * @param boolean $prefix_mode Enable it to clear all keys starting
     *                             with prefix specified in $key
     *
     * @access private;
     */
    private function remove_record($key=null, $prefix_mode=false)
    {
@@ -341,28 +341,26 @@
    /**
     * Adds entry into memcache/apc DB.
     * @access private
     */
    private function add_record($key, $data)
    {
        if ($this->type == 'memcache') {
            $result = $this->db->replace($key, $data, MEMCACHE_COMPRESSED);
            $result = $this->db->replace($key, $data, MEMCACHE_COMPRESSED, $this->ttl);
            if (!$result)
                $result = $this->db->set($key, $data, MEMCACHE_COMPRESSED);
                $result = $this->db->set($key, $data, MEMCACHE_COMPRESSED, $this->ttl);
            return $result;
        }
        if ($this->type == 'apc') {
            if (apc_exists($key))
                apc_delete($key);
            return apc_store($key, $data);
            return apc_store($key, $data, $this->ttl);
        }
    }
    /**
     * Deletes entry from memcache/apc DB.
     * @access private
     */
    private function delete_record($index=true)
    {
@@ -381,7 +379,6 @@
    /**
     * Writes the index entry into memcache/apc DB.
     * @access private
     */
    private function write_index()
    {
@@ -411,7 +408,6 @@
    /**
     * Gets the index entry from memcache/apc DB.
     * @access private
     */
    private function load_index()
    {
@@ -441,7 +437,6 @@
     * @param string $key Cache key name
     *
     * @return string Cache key
     * @access private
     */
    private function ckey($key)
    {
@@ -453,7 +448,6 @@
     * Creates per-user index cache key name (for memcache and apc)
     *
     * @return string Cache key
     * @access private
     */
    private function ikey()
    {