<?php
/**
 * IBSE
 *
 * Information Bot Service Engine
 *
 * @package        IBSE
 * @author        HSDN Team
 * @copyright    Copyright (c) 2006-2010, Information Networks Ltd.
 * @link        http://www.hsdn.org
 * @since        Version 4.0
 */

/**
 * IBAPI
 *
 * Information Bot Application Program Interface
 *
 * @package        IBSE
 * @author        HSDN Team
 * @copyright    Copyright (c) 2006-2010, Information Networks Ltd.
 * @since        Version 4.0
 */

/**
 * IBAMP
 *
 * Information Bot Advertisement Manager Processor
 *
 * @package        IBSE
 * @author        HSDN Team
 * @copyright    Copyright (c) 2010, Information Networks Ltd.
 * @since        Version 4.0
 */

// ------------------------------------------------------------------------

/**
 * Класс Cache
 *
 * @category    Libraries
 * @author        HSDN Team
 */
class Cache
{
    
/*
     * Инстанция базы данных
     *
     * @access    private
     */
    
private $db;

    
/*
     * Название кэша
     *
     * @access    private
     */
    
private $name;

    
/*
     * Период хранения кэша
     *
     * @access    private
     */
    
private $period;


    
/**
     * Конструктор
     *
     * @access    public
     * @param    string
     * @param    int
     * @return    void
     */
    
public function __construct($name$ttl)
    {
        
$this->db = new Database();

        
$this->name $this->db->escape($name);
        
$this->ttl intval($ttl);

        
$this->clean();
    }

    
/**
     * Получение данных из кэша
     *
     * @access    public
     * @param    string
     * @return    mixed
     */
    
public function get($key)
    {
        
$this->db->query("SELECT * FROM `ibapi_cache` WHERE `name` = '".$this->name."' AND `key` = '".md5($key)."' LIMIT 1");

        if (
$this->db->error())
        {
            return 
FALSE;
        }

        if (
$this->db->num_rows() != 0)
        {
            
$row $this->db->fetch_row();

            return @
unserialize(@base64_decode($row['data']));
        }

        return 
FALSE;
    }

    
/**
     * Запись данных в кэш
     *
     * @access    public
     * @param    string
     * @param    mixed
     * @return    bool
     */
    
public function set($key$data)
    {
        
$this->db->query("INSERT INTO `ibapi_cache` (`name`,`key`,`data`) VALUES('".$this->name."', '".md5($key)."', '".@base64_encode(@serialize($data))."') ON DUPLICATE KEY UPDATE `data` = '".@base64_encode(@serialize($data))."'");

        if (
$this->db->error())
        {
            return 
FALSE;
        }

        return 
$data;
    }

    
/**
     * Очистка кэша
     *
     * @access    private
     * @return    void
     */
    
private function clean()
    {
        
$this->db->query("DELETE FROM `ibapi_cache` WHERE `name` = '".$this->name."' AND UNIX_TIMESTAMP(`time`) < (UNIX_TIMESTAMP(NOW()) - ".intval($this->ttl).")");
    }
}

/* EOF Cache.class.php */