<?php

class license{
protected $_lic_http = 'http://dcms_license/serialize.php';
//protected $_lic_http = 'http://seven.dcms.biz/serialize.php';
protected $_cache_key; // ключ для хранения данных в кэше
protected $_data = array();
protected $_dcms_ver;
function __construct($dcms_ver)
{
$this -> _dcms_ver = $dcms_ver;

$this -> _cache_key = 'lic.'.$_SERVER['HTTP_HOST'];
$this -> _data['status'] = 0;

$this -> _data = array_merge($this -> _data, (array)$this -> _getLicenseInfo());
}


// получение информации о лицензии
protected function _getLicenseInfo()
{
global $cache;
$license = $cache -> get($this -> _cache_key);

if (empty($license['expire']) || $license['expire'] < TIME)
{
// если лицензия не запрашивалась или она потеряла актуальность
if ($data = $this -> _getDataMultiple())
{
// если данные получены
$license['license'] = $data['license'];
$license['expire'] = TIME + 86400; // сутки не будем запрашивать данные о лицензии
}
else
{
// не удалось получить данные
if (!isset($license['license']))$license['license'] = array();
$license['expire'] = TIME + 3600; // повторим попытку через час
}
 
// данные в кэше можно хранить неделю
$cache -> set($this -> _cache_key, $license, 604800);
}

return $license['license'];
}


protected function _licenseUpdate($data)
{
global $cache;
$license = array();
$license['expire'] = TIME + 86400; // сутки не будем запрашивать данные о лицензии (если это не потребуется)
$license['license'] = $data;
$this -> _data = $data;
$cache -> set($this -> _cache_key, $license, 604800);
}

// одиночный запрос
public function getData($get, $data = '')
{
$return = $this -> getDataMultiple(array($get => $data));

if (isset($return[$get]))
return $return[$get];
}

// множественный запрос
public function getDataMultiple($query = false)
{
if (!$data = $this -> _getDataMultiple($query))return false;


if (!empty($data['license']))
$this -> _licenseUpdate($data['license']);

if (isset($data['user_data']))
return $data['user_data'];
}


// получение данных с DCMS
protected function _getDataMultiple($query = false){
global $cache;
$public_key = passgen(128);

$cache -> set('public_key.'.$_SERVER['HTTP_HOST'],$public_key,20);

$curl = new curl($this -> _lic_http);

$curl -> set_post('host' , $_SERVER['HTTP_HOST']);
$curl -> set_post('version' , $this -> _dcms_ver);
$curl -> set_post('public_key' , $public_key);

$curl -> set_post('user_data' , serialize($query));
$content = $curl -> get_content();

if (!$content)return false;

if (!$data = @unserialize($content))return false;

if (empty($data['data']))return false;
if (empty($data['data']['license']))return false;

return $data['data'];
}



function __get($name)
{
return empty($this -> _data[$name])?false:$this -> _data[$name];
}

function __toString()
{
return (string)(int)$this -> _data['status'];
}

}
?>
