Вход Регистрация
Файл: slib/options/cach.conf.php
Строк: 150
<?php
 
if (!@defined('ISENGINEDSW')) exit('Can`t access to this file data!');
 
/** Модуль управления настройками глобального кэша пакета 
 * @author [Eugene]
 * @copyright 2011
 * @url http://forwebm.net
 */
 //-----------------------------------------------------------------
 /* пустой экземпляр класса кэша. Используется только в качестве шаблона 
    в качестве информации о получаемых данных, например при чтении кэша или 
    обновлении кэша используется метод:
    
    $this->GetInfo($id)
    предоставляет следующую информацию:
    $this->GetInfo('url') = объект ss_ConnectQuery анализируемого сайта
    $this->GetInfo('plugins') = объект ss_Plugin_obj_List (список плагинов)
    $this->GetInfo('plugin') = объект, наследник от ss_Plugin_obj (текущий плагин)
    
    при чтении и сохранении кэша - данные могут приходить и уходить в виде массивов
    Рекомендуется сохранить и считывать данные при помощи метода 
    serialize и unserialize
    однако данные поступают в исходном состоянии и строки лучше пропускать через 
    методы экранирования и т.д
    
    
 class My_Cach_Listener extends ss_Cach_Object {
  
  //чтение из кэша. false если чтение из кэша не прошло, или значение
  function Read() { return false; }
  //запись в кэш  
  function Write($value) { return false; }
  //создание
  function __construct() {
   parent::__construct();
  }
  //обновление кэша, удаление например устаревших данных
  function UpdateCach() { return false; } 
  //принудительно удаляет кэш текущего элемента
  function DeleteCachItem() { return false; } 
      
 }//My_Cach_Listener
          
 */
 
class My_Cach_Listener extends ss_Cach_Object {
  
/** объект сайта */
  
private $control null
    
  function 
__construct() {
   global 
$CONTROL_OBJ;    
   
parent::__construct();
   
$this->control $CONTROL_OBJ;
  }
//__construct
    
  /** дублирование элемента id */
  
protected function GetId() { 
   return 
$this->GetInfo('plugin')->GetPluginID(); 
  }
//GetId
  
  /** экранирование данных */
  
function EncodeData($data) {
   
//строковые элементы    
   
if (!@is_array($data)) {
       
$data = (string) $data;      
    
$data $this->control->ClearBreake($datatruefalse);
    
$data = @str_replace("n"":nnbr:"$data);
    return 
$this->control->db->EscapeString($data);    
   }
   
//вложение по циклу
   
return @array_map(array($this'EncodeData'), $data);        
  }
//EncodeData
  
  /** деэкранирование данных */
  
function DecodeData($data) {
   
//строковые данные
   
if (!@is_array($data)) {    return @stripslashes(@str_replace(":nnbr:""n"$data)); }
   
//вложение по циклу
   
return @array_map(array($this'DecodeData'), $data);       
  }
//EncodeData  
  
  /** подготовка данных для записи */
  
protected function PrepereToWrite($data) {  
   return 
$this->EncodeData(@serialize($this->EncodeData($data)));       
  }
//PrepereToWrite
  
  /** подготовка данных для чтения */
  
protected function PrepereToRead($data) {                  
   return 
$this->DecodeData(@unserialize($data));       
  }
//PrepereToRead
  
  /** получение идентификатора списка секции кэша */
  
protected function GetCachGroupIdentList() {
   return 
$this->GetInfo('plugin')->GetCachURLmd5();       
  }
//GetCachGroupIdentList
  
  /** чтение из кэша. false если чтение из кэша не прошло, или значение */
  
function Read() { 
   if (!
$id $this->GetId()) { return false; }
   if (!
$uid $this->GetCachGroupIdentList()) { return false; }
   
$table $this->GetTableName();
   
$res $this->control->db->GetLineArray($this->control->db->mPost(
    
"select data, datecreat from $table where ident='$id' and identlist='$uid' limit 1"    
   
));
   if (!
$res) { return false; }
   
$this->GetInfo('plugin')->lastupdatecachdate $res['datecreat'];
   return 
$this->PrepereToRead($res['data']);
   
//return (!$res) ? false : $this->PrepereToRead($res['data']);         
  
}//Read
  
  /** запись в кэш */  
  
function Write($value) {      
   if (!
$id $this->GetId()) { return false; }
   if (!
$uid $this->GetCachGroupIdentList()) { return false; }
   
$table $this->GetTableName();   
   
$value $this->PrepereToWrite($value);
   
$date  $this->control->GetThisDateTime();   
   
$this->control->db->mPost(
    
"INSERT INTO $table SET ident='$id', identlist='$uid', datecreat='$date', data='$value'"
   
); 
   return 
true;    
  }
//Write
  
  /** идентификатор таблици кэша */
  
protected function GetTableName() {
   return (
$this->GetInfo('plugin')->GetFlagUseLongData()) ? $this->control->tables_list['cachlong'] :
   
$this->control->tables_list['cachshort'];    
  }
//GetTableName

  /** обновление кэша, удаление устаревших данных */
  
function UpdateCach() { 
   
$days $this->GetInfo('plugin')->GetPluginStoredDays();
   
$id $this->GetId();
   if (!
$days || $days <= || !$id) { return false; }
   
//идентификатор таблици кэша
   
$table $this->GetTableName();
   
//обновление   
   
$this->control->db->mPost(
    
"delete from $table where ident='$id' and DATEDIFF(NOW(),DATE(datecreat)) > $days"
   
);
   return 
true
  }
//UpdateCach
  
  /** принудительное удаление кэша текущих данных */
  
function DeleteCachItem() {
   if (!
$id $this->GetId()) { return false; }
   if (!
$uid $this->GetCachGroupIdentList()) { return false; }
   
$table $this->GetTableName();
   
$this->control->db->mPost(
    
"delete from $table where ident='$id' and identlist='$uid' limit 1"  
   
);
   return 
true;  
  }
//DeleteCachItem  
      
 
}//My_Cach_Listener
 //-----------------------------------------------------------------
 
 /*
   Элемент кэша по умолчанию для плагинов. Должен представлять класс, наследник от 
   ss_Cach_Object (описан в модуле /modules/cach.lib.php) 
   
   false, если кэш использовать необходимости нет,
   или экземпляр класса для обработки
 */ 
 
$_SS_CACH_EVENT_CLASS_LISTENER_WS /* false */ new My_Cach_Listener();  
 
//-----------------------------------------------------------------
 /* Copyright (с) 2011 forwebm.net */
?>
Онлайн: 1
Реклама