Always use object cache for editor components

This commit is contained in:
Kijin Sung 2018-12-18 17:36:12 +09:00
parent 0978a3298d
commit 4f9c80e424
2 changed files with 40 additions and 112 deletions

View file

@ -418,19 +418,12 @@ class editorController extends editor
* @brief Caching a list of editor component (editorModel::getComponentList)
* For the editor component list, use a caching file because of DB query and Xml parsing
*/
function makeCache($filter_enabled = true, $site_srl)
function makeCache($filter_enabled = true)
{
$oEditorModel = getModel('editor');
$args = new stdClass;
if($filter_enabled) $args->enabled = "Y";
if($site_srl)
{
$args->site_srl = $site_srl;
$output = executeQuery('editor.getSiteComponentList', $args);
}
else $output = executeQuery('editor.getComponentList', $args);
$output = executeQuery('editor.getComponentList', $args);
$db_list = $output->data;
// Get a list of editor component folders
@ -439,18 +432,6 @@ class editorController extends editor
return is_dir(RX_BASEDIR . 'modules/editor/components/' . $component_name);
});
// Get information about log-in status and its group
$is_logged = Context::get('is_logged');
if($is_logged)
{
$logged_info = Context::get('logged_info');
if($logged_info->group_list && is_array($logged_info->group_list))
{
$group_list = array_keys($logged_info->group_list);
}
else $group_list = array();
}
// Get xml information for looping DB list
if(!is_array($db_list)) $db_list = array($db_list);
$component_list = new stdClass();
@ -479,28 +460,7 @@ class editorController extends editor
{
$xml_info->mid_list = $extra_vars->mid_list;
}
/*
// Permisshin check if you are granted
if($extra_vars->target_group) {
// Stop using if not logged-in
if(!$is_logged) continue;
// Compare a target group with the current logged-in user group
$target_group = $extra_vars->target_group;
unset($extra_vars->target_group);
$is_granted = false;
foreach($group_list as $group_srl) {
if(in_array($group_srl, $target_group)) {
$is_granted = true;
break;
}
}
if(!$is_granted) continue;
}
// Check if the target module exists
if($extra_vars->mid_list && count($extra_vars->mid_list) && Context::get('mid')) {
if(!in_array(Context::get('mid'), $extra_vars->mid_list)) continue;
}*/
// Check the configuration of the editor component
if($xml_info->extra_vars)
{
@ -512,6 +472,7 @@ class editorController extends editor
}
$component_list->{$component_name} = $xml_info;
// Get buttons, icons, images
$icon_file = RX_BASEDIR . 'modules/editor/components/'.$component_name.'/icon.gif';
$component_icon_file = RX_BASEDIR . 'modules/editor/components/'.$component_name.'/component_icon.gif';
@ -519,47 +480,41 @@ class editorController extends editor
if(file_exists($component_icon_file)) $component_list->{$component_name}->component_icon = true;
}
// Return if it checks enabled only
if($filter_enabled)
{
$cache_file = $oEditorModel->getCacheFile($filter_enabled, $site_srl);
$buff = sprintf('<?php if(!defined("__XE__")) exit(); $component_list = unserialize(%s); ?>', var_export(serialize($component_list), true));
FileHandler::writeFile($cache_file, $buff);
return $component_list;
}
// Get xml_info of downloaded list
foreach($downloaded_list as $component_name)
if(!$filter_enabled)
{
if(in_array($component_name, array('colorpicker_text','colorpicker_bg'))) continue;
// Pass if configured
if($component_list->{$component_name}) continue;
// Insert data into the DB
$oEditorController = getAdminController('editor');
$oEditorController->insertComponent($component_name, false, $site_srl);
// Add to component_list
unset($xml_info);
$xml_info = $oEditorModel->getComponentXmlInfo($component_name);
$xml_info->enabled = 'N';
$component_list->{$component_name} = $xml_info;
foreach($downloaded_list as $component_name)
{
if(in_array($component_name, array('colorpicker_text','colorpicker_bg'))) continue;
if(!is_dir(\RX_BASEDIR.'modules/editor/components/'.$component_name)) continue;
// Pass if configured
if($component_list->{$component_name}) continue;
// Insert data into the DB
$oEditorController = getAdminController('editor');
$oEditorController->insertComponent($component_name, false, 0);
// Add to component_list
$xml_info = $oEditorModel->getComponentXmlInfo($component_name);
$xml_info->enabled = 'N';
$component_list->{$component_name} = $xml_info;
}
Rhymix\Framework\Cache::set('editor:components:enabled', $component_list, 0, true);
}
$cache_file = $oEditorModel->getCacheFile($filter_enabled, $site_srl);
$buff = sprintf('<?php if(!defined("__XE__")) exit(); $component_list = unserialize(%s); ?>', var_export(serialize($component_list), true));
FileHandler::writeFile($cache_file, $buff);
else
{
Rhymix\Framework\Cache::set('editor:components:all', $component_list, 0, true);
}
return $component_list;
}
/**
* @brief Delete cache files
*/
function removeCache($site_srl = 0)
function removeCache()
{
$oEditorModel = getModel('editor');
FileHandler::removeFile($oEditorModel->getCacheFile(true, $site_srl));
FileHandler::removeFile($oEditorModel->getCacheFile(false, $site_srl));
Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'files/cache/editor/cache');
Rhymix\Framework\Cache::delete('editor:components:enabled');
Rhymix\Framework\Cache::delete('editor:components:all');
}
function triggerCopyModule(&$obj)

View file

@ -178,12 +178,11 @@ class editorModel extends editor
Context::set('editor_focus', toBool($option->editor_focus));
// Load editor components.
$site_srl = Context::get('site_module_info')->site_srl ?: 0;
if($option->enable_component)
{
if(!Context::get('component_list'))
{
$component_list = $this->getComponentList(true, $site_srl);
$component_list = $this->getComponentList(true);
Context::set('component_list', $component_list);
}
}
@ -518,35 +517,19 @@ class editorModel extends editor
return FileHandler::readDir('./modules/editor/skins');
}
/**
* @brief Return the cache file name of editor component list
*/
function getCacheFile($filter_enabled= true, $site_srl = 0)
{
$lang = Context::getLangType();
$cache_path = _XE_PATH_.'files/cache/editor/cache/';
FileHandler::makeDir($cache_path);
$cache_file = $cache_path . 'component_list.' . $lang .'.';
if($filter_enabled) $cache_file .= 'filter.';
if($site_srl) $cache_file .= $site_srl.'.';
$cache_file .= 'php';
return $cache_file;
}
/**
* @brief Return a component list (DB Information included)
*/
function getComponentList($filter_enabled = true, $site_srl=0, $from_db=false)
function getComponentList($filter_enabled = true, $site_srl = 0, $from_db = false)
{
$cache_file = $this->getCacheFile(false, $site_srl);
if($from_db || !file_exists($cache_file))
$cache_key = 'editor:components:' . ($filter_enabled ? 'enabled' : 'all');
$component_list = $from_db ? null : Rhymix\Framework\Cache::get($cache_key);
if (!$component_list)
{
$oEditorController = getController('editor');
$oEditorController->makeCache(false, $site_srl);
$component_list = $oEditorController->makeCache(false);
}
if(!file_exists($cache_file)) return;
include($cache_file);
$logged_info = Context::get('logged_info');
if($logged_info && is_array($logged_info->group_list))
{
@ -562,10 +545,9 @@ class editorModel extends editor
foreach($component_list as $key => $val)
{
if(!trim($key)) continue;
if(!is_dir(_XE_PATH_.'modules/editor/components/'.$key))
if(!is_dir(\RX_BASEDIR.'modules/editor/components/'.$key))
{
FileHandler::removeFile($cache_file);
return $this->getComponentList($filter_enabled, $site_srl);
return $this->getComponentList($filter_enabled, 0, true);
}
if(!$filter_enabled) continue;
if($val->enabled == "N")
@ -573,7 +555,7 @@ class editorModel extends editor
unset($component_list->{$key});
continue;
}
if($logged_info->is_admin == "Y" || $logged_info->is_site_admin == "Y") continue;
if($logged_info->is_admin == "Y") continue;
if($val->target_group)
{
if(!Context::get('is_logged'))
@ -608,20 +590,11 @@ class editorModel extends editor
/**
* @brief Get xml and db information of the component
*/
function getComponent($component_name, $site_srl = 0)
function getComponent($component_name)
{
$args = new stdClass();
$args->component_name = $component_name;
if($site_srl)
{
$args->site_srl = $site_srl;
$output = executeQuery('editor.getSiteComponent', $args);
}
else
{
$output = executeQuery('editor.getComponent', $args);
}
$output = executeQuery('editor.getComponent', $args);
$component = $output->data;
if(!$output->data) return false;