<?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
 */

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

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

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

    
/*
     * Идентификатор клиента
     *
     * @access    private
     */
    
private $client;

    
/*
     * Максимальное число запросов
     *
     * @access    private
     */
    
private $req;

    
/*
     * Интервал запросов
     *
     * @access    private
     */
    
private $interval;


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

        
$this->name md5($name);
        
$this->client md5($client);
        
$this->req intval($req);
        
$this->interval intval($interval);

        
$this->clean();
    }

    
/**
     * Проверка на допущение превышения
     *
     * @access    public
     * @return    mixed
     */
    
public function expired()
    {
        if (!
$rows $this->db->query("SELECT 1 FROM `ibapi_limit` WHERE `counter` > '".$this->req."' AND `name` = '".$this->name."' AND `client` = '".$this->client."' LIMIT 1"))
        {
            return 
FALSE;
        }

        if (
$this->db->num_rows($rows) != 0)
        {
            
$this->db->query("UPDATE `ibapi_limit` SET `time` = NOW() WHERE `name` = '".$this->name."' AND `client` = '".$this->client."' LIMIT 1");

            return 
TRUE;
        }

        return 
FALSE;
    }

    
/**
     * Установка счетчика
     *
     * @access    public
     * @return    bool
     */
    
public function set()
    {
        
$this->db->query("INSERT INTO `ibapi_limit` (`name`, `client`) VALUES ('".$this->name."', '".$this->client."') ON DUPLICATE KEY UPDATE `counter` = `counter` + 1");
    }

    
/**
     * Очистка лимитов
     *
     * @access    private
     * @return    void
     */
    
private function clean()
    {
        
$this->db->query("DELETE FROM `ibapi_limit` WHERE `name` = '".$this->name."' AND UNIX_TIMESTAMP(`time`) < (UNIX_TIMESTAMP(NOW()) - ".$this->interval.")");
    }
}

/* EOF Cache.class.php */