<?php
namespace eapie\engine;
class cache extends \eapie\engine\init {
private function _class_basename($class_name) {
return basename(str_replace('\\', '/', $class_name));
}
public function clear_system($class_names){
$application_id = "{system}";
$redis_keys = array();
if( is_string($class_names) || is_numeric($class_names)){
$redis_keys = object(parent::REDIS)->get_redis_key( $application_id.'<'.$this->_class_basename($class_names).'>' );
}else
if( is_array($class_names) && !empty($class_names) ){
foreach($class_names as $class){
$keys = object(parent::REDIS)->get_redis_key( $application_id.'<'.$this->_class_basename($class).'>' );
if( empty($redis_keys) ){
$redis_keys = $keys;
}else
if( !empty($keys) && is_array($keys) ){
foreach($keys as $k){
if( !in_array($k, $redis_keys) ){
$redis_keys[] = $k }
}
}
unset($keys);
}
}
if( !empty($redis_keys) ){
object(parent::REDIS)->delete($redis_keys);
return true;
}
}
public function data_system($class, $method, $func_get_args, $closure){
if( is_file(__DIR__ . DIRECTORY_SEPARATOR . "developer") ){
return call_user_func_array ( $closure, $func_get_args);
}
$application_id = "{system}";
$application_class = $application_id.'<'.$this->_class_basename($class).'>';
$redis_key = $application_id.$method."(".cmd(array($func_get_args), "json encode").")";
$data = object(parent::REDIS)->get_array($redis_key);
if( !empty($data["redis"]) ){
return $data["redis"];
}
$data = call_user_func_array ( $closure, $func_get_args);
object(parent::REDIS)->set_redis_key($application_class, $redis_key);
object(parent::REDIS)->set_array($redis_key, array("redis"=>$data));
return $data;
}
public function clear($class_names, $application_id = ""){
if( empty($application_id) ){
$application = object(parent::MAIN)->api_application();
if( empty($application['application_id']) ){
return false;
}
$application_id = $application['application_id'];
}
$application_id = "{application}[".$application_id."]";
$redis_keys = array();
if( is_string($class_names) || is_numeric($class_names)){
$redis_keys = object(parent::REDIS)->get_redis_key( $application_id.'<'.$this->_class_basename($class_names).'>' );
}else
if( is_array($class_names) && !empty($class_names) ){
foreach($class_names as $class){
$keys = object(parent::REDIS)->get_redis_key( $application_id.'<'.$this->_class_basename($class).'>' );
if( empty($redis_keys) ){
$redis_keys = $keys;
}else
if( !empty($keys) && is_array($keys) ){
foreach($keys as $k){
if( !in_array($k, $redis_keys) ){
$redis_keys[] = $k }
}
}
unset($keys);
}
}
if( !empty($redis_keys) ){
object(parent::REDIS)->delete($redis_keys);
return true;
}
}
public function data($class, $method, $func_get_args, $closure){
if( is_file(__DIR__ . DIRECTORY_SEPARATOR . "developer") ){
return call_user_func_array ( $closure, $func_get_args);
}
$application = object(parent::MAIN)->api_application();
if( empty($application['application_id']) ){
return call_user_func_array ( $closure, $func_get_args);
}
$application_id = "{application}[".$application['application_id']."]";
$application_class = $application_id.'<'.$this->_class_basename($class).'>';
$redis_key = $application_id.$method."(".cmd(array($func_get_args), "json encode").")";
$data = object(parent::REDIS)->get_array($redis_key);
if( !empty($data["redis"]) ){
return $data["redis"];
}
$data = call_user_func_array ( $closure, $func_get_args);
object(parent::REDIS)->set_redis_key($application_class, $redis_key);
object(parent::REDIS)->set_array($redis_key, array("redis"=>$data));
return $data;
}
public function tempfile($dir = '', $suffix = 'tempfile'){
if( empty($dir) ){
$dir = 'default';
}
$directory = CACHE_PATH.DIRECTORY_SEPARATOR."tempfile".DIRECTORY_SEPARATOR.$dir;
if( !is_dir($directory) || !is_writable($directory) ){
if( CACHE_PATH == '' || !mkdir($directory, 0777, true) ){
return false;
}
}
$tempfile_path = $directory.DIRECTORY_SEPARATOR.cmd(array(24), 'random string').'.'.$suffix;
destruct('cache.tempfile.clear:'.$tempfile_path, true, array($tempfile_path), function($tempfile_path){
if( is_file($tempfile_path) ){
unlink($tempfile_path);
}
});
return $tempfile_path;
}
}
?>