Caching implementation for objects

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@8745 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
dragan-dan 2011-08-10 17:47:59 +00:00
parent 1b47a294d3
commit 70a69ff4fe
18 changed files with 709 additions and 322 deletions

View file

@ -295,6 +295,12 @@
// Register
$oModuleController->insertModuleSkinVars($module_srl, $obj);
}
//remove from cache
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport()){
$cache_key = 'object:'.$module_srl;
$oCacheHandler->delete($cache_key);
}
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('default_layout.html');

View file

@ -196,6 +196,12 @@
}
$output = executeQuery('module.updateSite', $args);
//remove from cache
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport()){
$cache_key = 'object:'.'default_mid';
$oCacheHandler->delete($cache_key);
}
return $output;
}
@ -309,6 +315,14 @@
$oDB->commit();
$output->add('module_srl',$args->module_srl);
//remove from cache
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport()){
$cache_key = 'object:'.$args->module_srl;
$oCacheHandler->delete($cache_key);
$cache_key = 'object:'.$args->mid;
$oCacheHandler->delete($cache_key);
}
return $output;
}
@ -364,7 +378,14 @@
// commit
$oDB->commit();
//remove from cache
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport()){
$cache_key = 'object:'.$args->module_srl;
$oCacheHandler->delete($cache_key);
$cache_key = 'object:'.$args->mid;
$oCacheHandler->delete($cache_key);
}
return $output;
}
@ -386,7 +407,13 @@
**/
function clearDefaultModule() {
$output = executeQuery('module.clearDefaultModule');
if(!$output->toBool()) return $output;
//remove from cache
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport()){
$cache_key = 'object:'.'default_mid';
$oCacheHandler->delete($cache_key);
}
if(!$output->toBool()) return $output;
return $output;
}

View file

@ -68,60 +68,68 @@
* @brief Get the defaul mid according to the domain
**/
function getDefaultMid() {
$default_url = preg_replace('/\/$/','',Context::getDefaultUrl());
$request_url = preg_replace('/\/$/','',Context::getRequestUri());
$vid = Context::get('vid');
$mid = Context::get('mid');
// Check a virtual site if the default URL is already set and is is defferent from a requested URL
if($default_url && $default_url != $request_url) {
$url_info = parse_url($request_url);
$hostname = $url_info['host'];
$path = preg_replace('/\/$/','',$url_info['path']);
$sites_args->domain = sprintf('%s%s%s', $hostname, $url_info['port']&&$url_info['port']!=80?':'.$url_info['port']:'',$path);
$output = executeQuery('module.getSiteInfoByDomain', $sites_args);
}
if(!$output || !$output->data)
{
if(!$vid) $vid = $mid;
if($vid) {
$vid_args->domain = $vid;
$output = executeQuery('module.getSiteInfoByDomain', $vid_args);
if($output->toBool() && $output->data) {
Context::set('vid', $output->data->domain, true);
if($mid==$output->data->domain) Context::set('mid',$output->data->mid,true);
}
}
}
// If it is not a virtual site, get a default site information
if(!$output->data) {
$args->site_srl = 0;
$output = executeQuery('module.getSiteInfo', $args);
// Update the related informaion if there is no default site info
if(!$output->data) {
// Create a table if sites table doesn't exist
$oDB = &DB::getInstance();
if(!$oDB->isTableExists('sites')) $oDB->createTableByXmlFile(_XE_PATH_.'modules/module/schemas/sites.xml');
if(!$oDB->isTableExists('sites')) return;
// Get mid, language
$mid_output = $oDB->executeQuery('module.getDefaultMidInfo', $args);
$db_info = Context::getDBInfo();
$domain = Context::getDefaultUrl();
$url_info = parse_url($domain);
$domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
$site_args->site_srl = 0;
$site_args->index_module_srl = $mid_output->data->module_srl;
$site_args->domain = $domain;
$site_args->default_language = $db_info->lang_type;
if($output->data && !$output->data->index_module_srl) {
$output = executeQuery('module.updateSite', $site_args);
} else {
$output = executeQuery('module.insertSite', $site_args);
if(!$output->toBool()) return $output;
}
$output = executeQuery('module.getSiteInfo', $args);
}
}
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport()){
$cache_key = 'object:'.'default_mid';
$output = $oCacheHandler->get($cache_key);
}
if(!$output){
$default_url = preg_replace('/\/$/','',Context::getDefaultUrl());
$request_url = preg_replace('/\/$/','',Context::getRequestUri());
$vid = Context::get('vid');
$mid = Context::get('mid');
// Check a virtual site if the default URL is already set and is is defferent from a requested URL
if($default_url && $default_url != $request_url) {
$url_info = parse_url($request_url);
$hostname = $url_info['host'];
$path = preg_replace('/\/$/','',$url_info['path']);
$sites_args->domain = sprintf('%s%s%s', $hostname, $url_info['port']&&$url_info['port']!=80?':'.$url_info['port']:'',$path);
$output = executeQuery('module.getSiteInfoByDomain', $sites_args);
}
if(!$output || !$output->data)
{
if(!$vid) $vid = $mid;
if($vid) {
$vid_args->domain = $vid;
$output = executeQuery('module.getSiteInfoByDomain', $vid_args);
if($output->toBool() && $output->data) {
Context::set('vid', $output->data->domain, true);
if($mid==$output->data->domain) Context::set('mid',$output->data->mid,true);
}
}
}
// If it is not a virtual site, get a default site information
if(!$output->data) {
$args->site_srl = 0;
$output = executeQuery('module.getSiteInfo', $args);
// Update the related informaion if there is no default site info
if(!$output->data) {
// Create a table if sites table doesn't exist
$oDB = &DB::getInstance();
if(!$oDB->isTableExists('sites')) $oDB->createTableByXmlFile(_XE_PATH_.'modules/module/schemas/sites.xml');
if(!$oDB->isTableExists('sites')) return;
// Get mid, language
$mid_output = $oDB->executeQuery('module.getDefaultMidInfo', $args);
$db_info = Context::getDBInfo();
$domain = Context::getDefaultUrl();
$url_info = parse_url($domain);
$domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
$site_args->site_srl = 0;
$site_args->index_module_srl = $mid_output->data->module_srl;
$site_args->domain = $domain;
$site_args->default_language = $db_info->lang_type;
if($output->data && !$output->data->index_module_srl) {
$output = executeQuery('module.updateSite', $site_args);
} else {
$output = executeQuery('module.insertSite', $site_args);
if(!$output->toBool()) return $output;
}
$output = executeQuery('module.getSiteInfo', $args);
}
}
if($oCacheHandler->isSupport()) $oCacheHandler->put($cache_key,$output);
}
$module_info = $output->data;
if(!$module_info->module_srl) return $module_info;
if(is_array($module_info) && $module_info->data[0]) $module_info = $module_info[0];
@ -134,7 +142,23 @@
function getModuleInfoByMid($mid, $site_srl = 0, $columnList = array()) {
$args->mid = $mid;
$args->site_srl = (int)$site_srl;
$output = executeQuery('module.getMidInfo', $args, $columnList);
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport()){
$cache_key = 'object:'.$mid;
$module_srl = $oCacheHandler->get($cache_key);
if($module_srl){
$cache_key = 'object:'.$module_srl;
$output = $oCacheHandler->get($cache_key);
}
}
if(!$output){
$output = executeQuery('module.getMidInfo', $args);
if($oCacheHandler->isSupport()) {
$cache_key = 'object:'.$mid;
$oCacheHandler->put($cache_key,$output->data->module_srl);
}
}
$module_info = $output->data;
if(!$module_info->module_srl && $module_info->data[0]) $module_info = $module_info->data[0];
return $this->addModuleExtraVars($module_info);
@ -146,10 +170,24 @@
function getModuleInfoByModuleSrl($module_srl, $columnList = array()) {
// Get data
$args->module_srl = $module_srl;
$output = executeQuery('module.getMidInfo', $args, $columnList);
if(!$output->data) return;
$module_info = $this->addModuleExtraVars($output->data);
return $module_info;
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport()){
$cache_key = 'object:'.$module_srl;
$output = $oCacheHandler->get($cache_key);
}
if(!$output){
$output = executeQuery('module.getMidInfo', $args );
if(!$output->data) return;
if($oCacheHandler->isSupport()) $oCacheHandler->put($cache_key,$output);
}
if(count($columnList)){
foreach ($output->data as $key => $item) {
if (in_array($key, $columnList)){
$module_info->$key = $item;
}
}
} else $module_info = $output->data;
return $this->addModuleExtraVars($module_info);
}
/**