<?php
/**
 * Wrapper for Memcache, v. 0.4
 *
 * Modified by: Chris Thompson (http://www.thompsonbd.com)
 * By Jiri Kupiainen (http://jirikupiainen.com/)
 *
 * You are free to do whatever you please with this code. Enjoy.
 */
class CakeMemcache {
    var 
$_connected false;
    var 
$_Memcache null;
    var 
$servers = array(); // you can add more servers by adding their hostname and port to this array. if port is default (11211), it can be omitted.

    /**
     * Connect to the memcached server(s)
     */
    //function _connect() {
    
function CakeMemcache() {
        if (
defined('DISABLE_CACHE')) {
            return 
false;
        }
        
        
$this->servers = array(
            
'127.0.0.1'
        
);

        
$this->_Memcache =& new Memcache();

        
// several servers - use addServer
        
foreach ($this->servers as $server) {
            
$parts explode(':'$server);
            
$host $parts[0];
            
$port = ((isset($parts[1])) ? $parts[1] : 11211); // default port

            
if ($this->_Memcache->addServer($host$port)) {
                
$this->_connected true;
            }
        }

        return 
$this->_connected;
    }
    
    
//  this is used exclusively by the set method to keep a list of keys that we have going
    //  ------------------------------------------------------------------------------------
    
private function register_key($key) {
//        debug('setting key');
        
        
$register $this->get('register');
        
        
$register[$key] = date('Y-m-d H:m:s');
        
        
$this->_Memcache->set('register'$register00);        
    }
    
    private function 
unregister_key($key) {
        
$register $this->get('register');
        
        if(isset(
$register[$key])) {
            unset(
$register[$key]);
        }
        
        
$this->_Memcache->set('register'$register00);
    }
    
    
//  basicly a var_dump for memcache
    //  -------------------------------
    
function debug() {
        
$register $this->get('register');
        
        foreach(
$register as $key => $value) {
            
$dumpArray[$key] = $this->get($key);
        }
        
        
debug($dumpArray);       
    }
    
    
//  will dump a list of registered keys
    //  -----------------------------------
    
function register_list() {
        
$register $this->get('register');
        
//        debug($register);exit;
        
        
foreach($register as $key => $value) {
            
$dumpArray[] = $key;
        }
        
        
debug($dumpArray);       
    }
    
    function 
use_cache($controller,$key) {        
        
//  check if this is cached
        //  -----------------------
        
if($this->get($key) === false || !isset($controller->caching) || $controller->caching === false) {
            return 
false;
        } else {
            return 
$this->get($key);    
        }
    }

    
/**
     * Set a value in the cache
     *
     * Expiration time is one hour if not set
     */
    
function set($key$var$expires false) {
        if (
defined('DISABLE_CACHE') || !$this->_connected) {
            return 
false;
        }

        if (!
is_numeric($expires)) {
            
$expires strtotime($expires);
        }
        
        
//  check if we want to cache for ever
        //  ----------------------------------
        
if(!$expires) {
            
$expires 0;    
        } else {
            
$expires time()+$expires;
        }
        
        
$this->register_key($key);

        return 
$this->_Memcache->set($key$var0$expires);
    }

    
/**
     * Get a value from cache
     */
    
function get($key) {
        if (
defined('DISABLE_CACHE') || !$this->_connected) {
            return 
false;
        }

        return 
$this->_Memcache->get($key);
    }

    
/**
     * Remove value from cache
     */
    
function delete($key) {
        if (
defined('DISABLE_CACHE') || !$this->_connected) {
            return 
false;
        }
        
        
$this->unregister_key($key);

        return 
$this->_Memcache->delete($key);
    }
    
    function 
getExtendedStats() {
        
debug($this->_Memcache->getExtendedStats());exit;
    }
}
?>