class.cache.php 2.68 KB
<?php
/**
* @author:  Bunzia Alexander <nifus@mail.ru> <http://www.weblancer.net/users/nifus/>
* @copyright: Copyright (c) 2010, Bunzia Alexander
* @version: 1.0
* @license: http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @package: HiLo CMS
*/

/**
* Сохраняем сгенерированный HTML
*
*/
class cache{

	private $name = false;  //  основной ключ фильтрации
	private $parametrs = array(); //  дополнительные ключи фильтрации
	
	/**
	* Проверяем название шаблона на соответствие формату и только потом создаём
	*
	* @var: str v Название шаблона страницы 
	* @return: obj
	*/
	public function create($v){
	  if ( !sys_is_page($v) ){
	    sys_error(ERROR_500);
	  }
	  return new cache($v);
	}
	
	private function __construct($name){
		$this -> name = $name;
	}
	
	
	public function set_parametr($k,$v){
		if ( empty($k) ){
		  sys_error(ERROR_500);
		}
		$this -> parametrs[$k] = $v;
		return TRUE;
	}
	
	
	public function save($data){
	global $MAIN_DB;
	   
	  $sub_key = serialize($this -> parametrs);
	  $sql = "
	    SELECT COUNT(*) FROM ".MAIN_CACHE_TBL."   
	    WHERE  p_parametrs = '".sys_in_sql($sub_key)."' AND p_name='{$this -> name}'";
	  list($count) = $MAIN_DB -> fetch_array( $MAIN_DB -> query($sql) );
	  if ( $count>0 ){
       $sql = "
        UPDATE ".MAIN_CACHE_TBL." 
        SET p_cache='".sys_in_sql($data)."' ,p_time_add='".MAIN_TIME."'
        
        WHERE p_parametrs = '".sys_in_sql($sub_key)."' AND p_name='{$this -> name}'";
    }else{
      $sql = "
        INSERT INTO ".MAIN_CACHE_TBL." 
        SET 
          p_cache='".sys_in_sql($data)."',
          p_parametrs = '".sys_in_sql($sub_key)."', 
          p_name='{$this -> name}',
          p_time_add='".MAIN_TIME."'";
    }
	  $MAIN_DB -> query($sql);
		return TRUE;
	}
	
	public function load($time=0){
	global $MAIN_DB;
	    //  кэшировать данные запрещенно в настройках CMS
	    
	  if ( FALSE===MAIN_CACHE_MODE){
	    return FALSE;
	  }
	  $sub_key = serialize($this -> parametrs);
	  $sql_time = !empty($time) ? " AND p_time_add>".(MAIN_TIME-$time) : '';
	  $sql = "
	    SELECT p_cache FROM ".MAIN_CACHE_TBL."   
	    WHERE  p_parametrs = '".sys_in_sql($sub_key)."' AND p_name='{$this -> name}' ".$sql_time ;
	  $res = $MAIN_DB -> query($sql);
	  if ( $MAIN_DB -> num_rows($res)==0 ){
	    return FALSE;
	  }
	  list($p_cache) = $MAIN_DB -> fetch_array( $res);
		return $p_cache;
	}
	
	public function clear(){
	global $MAIN_DB;
	  $sql = "DELETE  FROM ".MAIN_CACHE_TBL."    WHERE  p_name='{$this -> name}'";
	  $MAIN_DB -> query($sql);
		return TRUE;
	}
}

?>