<?php

/** 
 * Класс подсчета просмотров страниц
 * NOTE: Requires PHP version 5 or later   
 * @package irb_counter
 * @author IT studio IRBIS-team
 * @copyright © 2012 IRBIS-team
 * @version 0.1 
 * @license http://www.opensource.org/licenses/rpl1.5.txt 
 */   
    
class IRB_Counter
{

    public 
$ip$uagent$table;
    
// Список возможных ботов
    
public $bots = array (
                                
'google.com',
                                
'google.ru',
                                
'yandex.ru',
                                
'rambler.ru',
                                
'yahoo.com',
                                
'bing.com',
                                
'baidu.com',
                                
'aport.ru',
                                
'au.ru'
                            
);     
/**
* Конструктор
*/    
    
public function __construct($table)
    { 
        
$this->table $table;
     
        if((
$this->ip = @$_SERVER['HTTP_X_FORWARDED_FOR']) === null
            
$this->ip =  $_SERVER['REMOTE_ADDR'];
     
        
$this->uagent = @$_SERVER['HTTP_USER_AGENT'];
        
// Определяем реферер
        
$this->refer  = @$_SERVER['HTTP_REFERER'];
    }

/**
* Метод подсчета просмотров
* @access public
* @param int $id
* @return void
*/ 
    
public function setCnt($id)
    {   
// Если это не бот, включаем статистику
        
if(!$this->_checkBot())
        {
            
$this->clearStat();
         
            
$key md5($this->ip $this->uagent $id $this->table);
          
            
mysqlQuery("INSERT IGNORE INTO `"IRB_DBPREFIX ."counter_set`
                         SET `key`  = '"
$key ."',
                             `time` = NOW() "
                         
); 
         
            if(
mysqli_affected_rows(DB::$link) > 0)
            {
                
mysqlQuery("UPDATE `"IRB_DBPREFIX $this->table ."`
                             SET `visits` = `visits` + 1 
                             WHERE `id` = "
.(int)$id
                             
);
            }
        }
    }
    
/**
* Очищаем  статистику от просроченных ключей
* @access public
* @param int $period
* @return void
*/ 
    
public function clearStat($period 24)
    {     
        
mysqlQuery("DELETE FROM `"IRB_DBPREFIX ."counter_set`
                     WHERE `time` < NOW() - INTERVAL "
. (int)$period ." HOUR "
                     
); 
    }
    
/**
* Определяем бота
* @access private
* @param strind $refer
* @return bool
*/ 
    
private function _checkBot()
    {
        foreach(
$this->bots as $domain)
        {        
            if(
strpos($this->refer$domain) !== false)  
                return 
true;
        }
     
        return 
false;
    }      
}