merge from 1.7.3.5(r13153:r13167)

git-svn-id: http://xe-core.googlecode.com/svn/trunk@13168 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2013-09-29 23:32:39 +00:00
parent cc47d2b247
commit 2d3f149b5a
2042 changed files with 129266 additions and 126243 deletions

View file

@ -1,396 +1,484 @@
<?php
/**
* adminAdminController class
* admin controller class of admin module
* @author NHN (developers@xpressengine.com)
* @package /modules/admin
* @version 0.1
*/
class adminAdminController extends admin
{
/**
* adminAdminController class
* admin controller class of admin module
* @author NHN (developers@xpressengine.com)
* @package /modules/admin
* @version 0.1
* initialization
* @return void
*/
class adminAdminController extends admin {
/**
* initialization
* @return void
*/
function init() {
// forbit access if the user is not an administrator
$oMemberModel = &getModel('member');
$logged_info = $oMemberModel->getLoggedInfo();
if($logged_info->is_admin!='Y') return $this->stop("msg_is_not_administrator");
}
/**
* Admin menu reset
* @return void
*/
function procAdminMenuReset(){
$menuSrl = Context::get('menu_srl');
if (!$menuSrl) return $this->stop('msg_invalid_request');
$oMenuAdminController = &getAdminController('menu');
$output = $oMenuAdminController->deleteMenu($menuSrl);
if (!$output->toBool()) return $output;
FileHandler::removeDir('./files/cache/menu/admin_lang/');
$this->setRedirectUrl(Context::get('error_return_url'));
}
/**
* Regenerate all cache files
* @return void
*/
function procAdminRecompileCacheFile() {
// rename cache dir
$temp_cache_dir = './files/cache_'. time();
FileHandler::rename('./files/cache', $temp_cache_dir);
FileHandler::makeDir('./files/cache');
// remove debug files
FileHandler::removeFile(_XE_PATH_.'files/_debug_message.php');
FileHandler::removeFile(_XE_PATH_.'files/_debug_db_query.php');
FileHandler::removeFile(_XE_PATH_.'files/_db_slow_query.php');
$oModuleModel = &getModel('module');
$module_list = $oModuleModel->getModuleList();
// call recompileCache for each module
foreach($module_list as $module) {
$oModule = null;
$oModule = &getClass($module->module);
if(method_exists($oModule, 'recompileCache')) $oModule->recompileCache();
}
// remove cache
$truncated = array();
$oObjectCacheHandler = &CacheHandler::getInstance('object');
$oTemplateCacheHandler = &CacheHandler::getInstance('template');
if($oObjectCacheHandler->isSupport()){
$truncated[] = $oObjectCacheHandler->truncate();
}
if($oTemplateCacheHandler->isSupport()){
$truncated[] = $oTemplateCacheHandler->truncate();
}
if(count($truncated) && in_array(false,$truncated)){
return new Object(-1,'msg_self_restart_cache_engine');
}
// remove cache dir
$tmp_cache_list = FileHandler::readDir('./files','/(^cache_[0-9]+)/');
if($tmp_cache_list){
foreach($tmp_cache_list as $tmp_dir){
if($tmp_dir) FileHandler::removeDir('./files/'.$tmp_dir);
}
}
// remove duplicate indexes (only for CUBRID)
$db_type = &Context::getDBType();
if($db_type == 'cubrid')
{
$db = &DB::getInstance();
$db->deleteDuplicateIndexes();
}
$this->setMessage('success_updated');
}
/**
* Logout
* @return void
*/
function procAdminLogout() {
$oMemberController = &getController('member');
$oMemberController->procMemberLogout();
header('Location: '.getNotEncodedUrl('', 'module','admin'));
}
/**
* Insert theme information
* @return void|object
*/
function procAdminInsertThemeInfo(){
$vars = Context::getRequestVars();
$theme_file = _XE_PATH_.'files/theme/theme_info.php';
$theme_output = sprintf('$theme_info->theme=\'%s\';', $vars->themeItem);
$theme_output = $theme_output.sprintf('$theme_info->layout=%s;', $vars->layout);
$site_info = Context::get('site_module_info');
$args->site_srl = $site_info->site_srl;
$args->layout_srl = $vars->layout;
// layout submit
$output = executeQuery('layout.updateAllLayoutInSiteWithTheme', $args);
if (!$output->toBool()) return $output;
// set layout info member
$oModuleController = &getController('module');
$memberConfig->layout_srl = $vars->layout;
$oModuleController->updateModuleConfig('member', $memberConfig);
$skin_args->site_srl = $site_info->site_srl;
foreach($vars as $key=>$val){
$pos = strpos($key, '-skin');
if ($pos === false) continue;
if ($val != '__skin_none__'){
$module = substr($key, 0, $pos);
$theme_output = $theme_output.sprintf('$theme_info->skin_info[%s]=\'%s\';', $module, $val);
$skin_args->skin = $val;
$skin_args->module = $module;
if ($module == 'page')
{
$article_output = executeQueryArray('page.getArticlePageSrls');
if (count($article_output->data)>0){
$article_module_srls = array();
foreach($article_output->data as $val){
$article_module_srls[] = $val->module_srl;
}
$skin_args->module_srls = implode(',', $article_module_srls);
}
}
$skin_output = executeQuery('module.updateAllModuleSkinInSiteWithTheme', $skin_args);
if (!$skin_output->toBool()) return $skin_output;
$oModuleModel = &getModel('module');
$module_config = $oModuleModel->getModuleConfig($module, $site_info->site_srl);
$module_config->skin = $val;
$oModuleController->insertModuleConfig($module, $module_config, $site_info->site_srl);
}
}
$theme_buff = sprintf(
'<?php '.
'if(!defined("__ZBXE__")) exit(); '.
'%s'.
'?>',
$theme_output
);
// Save File
FileHandler::writeFile($theme_file, $theme_buff);
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminTheme');
return $this->setRedirectUrl($returnUrl, $output);
}
/**
* Toggle favorite
* @return void
*/
function procAdminToggleFavorite()
function init()
{
// forbit access if the user is not an administrator
$oMemberModel = getModel('member');
$logged_info = $oMemberModel->getLoggedInfo();
if($logged_info->is_admin != 'Y')
{
$siteSrl = Context::get('site_srl');
$moduleName = Context::get('module_name');
return $this->stop("msg_is_not_administrator");
}
}
// check favorite exists
$oModel = &getAdminModel('admin');
$output = $oModel->isExistsFavorite($siteSrl, $moduleName);
if (!$output->toBool()) return $output;
// if exists, delete favorite
if ($output->get('result'))
{
$favoriteSrl = $output->get('favoriteSrl');
$output = $this->_deleteFavorite($favoriteSrl);
$result = 'off';
}
// if not exists, insert favorite
else
{
$output = $this->_insertFavorite($siteSrl, $moduleName);
$result = 'on';
}
if (!$output->toBool()) return $output;
$this->add('result', $result);
return $this->setRedirectUrl(Context::get('error_return_url'), $output);
/**
* Admin menu reset
* @return void
*/
function procAdminMenuReset()
{
$menuSrl = Context::get('menu_srl');
if(!$menuSrl)
{
return $this->stop('msg_invalid_request');
}
/**
* Cleanning favorite
* @return Object
*/
function cleanFavorite()
$oMenuAdminController = getAdminController('menu');
$output = $oMenuAdminController->deleteMenu($menuSrl);
if(!$output->toBool())
{
$oModel = getAdminModel('admin');
$output = $oModel->getFavoriteList();
if(!$output->toBool())
{
return $output;
}
return $output;
}
$favoriteList = $output->get('favoriteList');
if(!$favoriteList)
{
return new Object();
}
FileHandler::removeDir('./files/cache/menu/admin_lang/');
$deleteTargets = array();
foreach($favoriteList as $favorite)
$this->setRedirectUrl(Context::get('error_return_url'));
}
/**
* Regenerate all cache files
* @return void
*/
function procAdminRecompileCacheFile()
{
// rename cache dir
$temp_cache_dir = './files/cache_' . time();
FileHandler::rename('./files/cache', $temp_cache_dir);
FileHandler::makeDir('./files/cache');
// remove debug files
FileHandler::removeFile(_XE_PATH_ . 'files/_debug_message.php');
FileHandler::removeFile(_XE_PATH_ . 'files/_debug_db_query.php');
FileHandler::removeFile(_XE_PATH_ . 'files/_db_slow_query.php');
$oModuleModel = getModel('module');
$module_list = $oModuleModel->getModuleList();
// call recompileCache for each module
foreach($module_list as $module)
{
$oModule = NULL;
$oModule = getClass($module->module);
if(method_exists($oModule, 'recompileCache'))
{
if($favorite->type == 'module')
$oModule->recompileCache();
}
}
// remove cache
$truncated = array();
$oObjectCacheHandler = CacheHandler::getInstance('object');
$oTemplateCacheHandler = CacheHandler::getInstance('template');
if($oObjectCacheHandler->isSupport())
{
$truncated[] = $oObjectCacheHandler->truncate();
}
if($oTemplateCacheHandler->isSupport())
{
$truncated[] = $oTemplateCacheHandler->truncate();
}
if(count($truncated) && in_array(FALSE, $truncated))
{
return new Object(-1, 'msg_self_restart_cache_engine');
}
// remove cache dir
$tmp_cache_list = FileHandler::readDir('./files', '/(^cache_[0-9]+)/');
if($tmp_cache_list)
{
foreach($tmp_cache_list as $tmp_dir)
{
if($tmp_dir)
{
$modulePath = './modules/' . $favorite->module;
$modulePath = FileHandler::getRealPath($modulePath);
if(!is_dir($modulePath))
{
$deleteTargets[] = $favorite->admin_favorite_srl;
}
FileHandler::removeDir('./files/' . $tmp_dir);
}
}
}
if(!count($deleteTargets))
// remove duplicate indexes (only for CUBRID)
$db_type = Context::getDBType();
if($db_type == 'cubrid')
{
$db = DB::getInstance();
$db->deleteDuplicateIndexes();
}
$this->setMessage('success_updated');
}
/**
* Logout
* @return void
*/
function procAdminLogout()
{
$oMemberController = getController('member');
$oMemberController->procMemberLogout();
header('Location: ' . getNotEncodedUrl('', 'module', 'admin'));
}
public function procAdminInsertDefaultDesignInfo()
{
$vars = Context::getRequestVars();
if(!$vars->site_srl)
{
$vars->site_srl = 0;
}
// create a DesignInfo file
$output = $this->updateDefaultDesignInfo($vars);
return $this->setRedirectUrl(Context::get('error_return_url'), $output);
}
public function updateDefaultDesignInfo($vars)
{
$siteDesignPath = _XE_PATH_ . 'files/site_design/';
$vars->module_skin = json_decode($vars->module_skin);
if(!is_dir($siteDesignPath))
{
FileHandler::makeDir($siteDesignPath);
}
$siteDesignFile = _XE_PATH_ . 'files/site_design/design_' . $vars->site_srl . '.php';
$layoutTarget = 'layout_srl';
$skinTarget = 'skin';
if($vars->target_type == 'M')
{
$layoutTarget = 'mlayout_srl';
$skinTarget = 'mskin';
}
$buff = '';
if(is_readable($siteDesignFile))
{
@include($siteDesignFile);
}
else
{
$designInfo = new stdClass();
}
$layoutSrl = (!$vars->layout_srl) ? 0 : $vars->layout_srl;
$designInfo->{$layoutTarget} = $layoutSrl;
foreach($vars->module_skin as $moduleName => $skinName)
{
if($moduleName == 'ARTICLE')
{
return new Object();
$moduleName = 'page';
}
$args->admin_favorite_srls = $deleteTargets;
$output = executeQuery('admin.deleteFavorites', $args);
if(!$output->toBool())
{
return $output;
}
if(!isset($designInfo->module->{$moduleName})) $designInfo->module->{$moduleName} = new stdClass();
$designInfo->module->{$moduleName}->{$skinTarget} = $skinName;
}
$this->makeDefaultDesignFile($designInfo, $vars->site_srl);
return new Object();
}
function makeDefaultDesignFile($designInfo, $site_srl = 0)
{
if($designInfo->layout_srl)
{
$buff .= sprintf('$designInfo->layout_srl = %s; ', $designInfo->layout_srl) . "\n";
}
if($designInfo->mlayout_srl)
{
$buff .= sprintf('$designInfo->mlayout_srl = %s;', $designInfo->mlayout_srl) . "\n";
}
$buff .= '$designInfo->module = new stdClass();' . "\n";
foreach($designInfo->module as $moduleName => $skinInfo)
{
$buff .= sprintf('$designInfo->module->%s = new stdClass();', $moduleName) . "\n";
foreach($skinInfo as $target => $skinName)
{
$buff .= sprintf('$designInfo->module->%s->%s = \'%s\';', $moduleName, $target, $skinName) . "\n";
}
}
$buff = sprintf('<?php if(!defined("__XE__")) exit();' . "\n" . '$designInfo = new stdClass();' . "\n" . '%s ?>', $buff);
$siteDesignFile = _XE_PATH_ . 'files/site_design/design_' . $site_srl . '.php';
FileHandler::writeFile($siteDesignFile, $buff);
}
/**
* Toggle favorite
* @return void
*/
function procAdminToggleFavorite()
{
$siteSrl = Context::get('site_srl');
$moduleName = Context::get('module_name');
// check favorite exists
$oModel = getAdminModel('admin');
$output = $oModel->isExistsFavorite($siteSrl, $moduleName);
if(!$output->toBool())
{
return $output;
}
// if exists, delete favorite
if($output->get('result'))
{
$favoriteSrl = $output->get('favoriteSrl');
$output = $this->_deleteFavorite($favoriteSrl);
$result = 'off';
}
// if not exists, insert favorite
else
{
$output = $this->_insertFavorite($siteSrl, $moduleName);
$result = 'on';
}
if(!$output->toBool())
{
return $output;
}
$this->add('result', $result);
return $this->setRedirectUrl(Context::get('error_return_url'), $output);
}
/**
* Cleanning favorite
* @return Object
*/
function cleanFavorite()
{
$oModel = getAdminModel('admin');
$output = $oModel->getFavoriteList();
if(!$output->toBool())
{
return $output;
}
$favoriteList = $output->get('favoriteList');
if(!$favoriteList)
{
return new Object();
}
/**
* Enviroment gathering agreement
* @return void
*/
function procAdminEnviromentGatheringAgreement()
$deleteTargets = array();
foreach($favoriteList as $favorite)
{
$isAgree = Context::get('is_agree');
if($isAgree == 'true') $_SESSION['enviroment_gather'] = 'Y';
else $_SESSION['enviroment_gather'] = 'N';
$redirectUrl = getUrl('', 'module', 'admin');
$this->setRedirectUrl($redirectUrl);
if($favorite->type == 'module')
{
$modulePath = './modules/' . $favorite->module;
$modulePath = FileHandler::getRealPath($modulePath);
if(!is_dir($modulePath))
{
$deleteTargets[] = $favorite->admin_favorite_srl;
}
}
}
/**
* Admin config update
* @return void
*/
function procAdminUpdateConfig()
if(!count($deleteTargets))
{
$adminTitle = Context::get('adminTitle');
$file = $_FILES['adminLogo'];
$oModuleModel = &getModel('module');
$oAdminConfig = $oModuleModel->getModuleConfig('admin');
if($file['tmp_name'])
{
$target_path = 'files/attach/images/admin/';
FileHandler::makeDir($target_path);
// Get file information
list($width, $height, $type, $attrs) = @getimagesize($file['tmp_name']);
if($type == 3) $ext = 'png';
elseif($type == 2) $ext = 'jpg';
else $ext = 'gif';
$target_filename = sprintf('%s%s.%s.%s', $target_path, 'adminLogo', date('YmdHis'), $ext);
@move_uploaded_file($file['tmp_name'], $target_filename);
$oAdminConfig->adminLogo = $target_filename;
}
if($adminTitle) $oAdminConfig->adminTitle = strip_tags($adminTitle);
else unset($oAdminConfig->adminTitle);
if($oAdminConfig)
{
$oModuleController = &getController('module');
$oModuleController->insertModuleConfig('admin', $oAdminConfig);
}
$this->setMessage('success_updated', 'info');
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup');
$this->setRedirectUrl($returnUrl);
return new Object();
}
/**
* Admin logo delete
* @return void
*/
function procAdminDeleteLogo()
$args = new stdClass();
$args->admin_favorite_srls = $deleteTargets;
$output = executeQuery('admin.deleteFavorites', $args);
if(!$output->toBool())
{
$oModuleModel = &getModel('module');
$oAdminConfig = $oModuleModel->getModuleConfig('admin');
return $output;
}
FileHandler::removeFile(_XE_PATH_.$oAdminConfig->adminLogo);
unset($oAdminConfig->adminLogo);
return new Object();
}
$oModuleController = &getController('module');
/**
* Enviroment gathering agreement
* @return void
*/
function procAdminEnviromentGatheringAgreement()
{
$isAgree = Context::get('is_agree');
if($isAgree == 'true')
{
$_SESSION['enviroment_gather'] = 'Y';
}
else
{
$_SESSION['enviroment_gather'] = 'N';
}
$redirectUrl = getNotEncodedUrl('', 'module', 'admin');
$this->setRedirectUrl($redirectUrl);
}
/**
* Admin config update
* @return void
*/
function procAdminUpdateConfig()
{
$adminTitle = Context::get('adminTitle');
$file = $_FILES['adminLogo'];
$oModuleModel = getModel('module');
$oAdminConfig = $oModuleModel->getModuleConfig('admin');
if(!is_object($oAdminConfig))
{
$oAdminConfig = new stdClass();
}
if($file['tmp_name'])
{
$target_path = 'files/attach/images/admin/';
FileHandler::makeDir($target_path);
// Get file information
list($width, $height, $type, $attrs) = @getimagesize($file['tmp_name']);
if($type == 3)
{
$ext = 'png';
}
elseif($type == 2)
{
$ext = 'jpg';
}
else
{
$ext = 'gif';
}
$target_filename = sprintf('%s%s.%s.%s', $target_path, 'adminLogo', date('YmdHis'), $ext);
@move_uploaded_file($file['tmp_name'], $target_filename);
$oAdminConfig->adminLogo = $target_filename;
}
if($adminTitle)
{
$oAdminConfig->adminTitle = strip_tags($adminTitle);
}
else
{
unset($oAdminConfig->adminTitle);
}
if($oAdminConfig)
{
$oModuleController = getController('module');
$oModuleController->insertModuleConfig('admin', $oAdminConfig);
$this->setMessage('success_deleted', 'info');
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup');
$this->setRedirectUrl($returnUrl);
}
/**
* Insert favorite
* @return object query result
*/
function _insertFavorite($siteSrl, $module, $type = 'module')
$this->setMessage('success_updated', 'info');
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup');
$this->setRedirectUrl($returnUrl);
}
/**
* Admin logo delete
* @return void
*/
function procAdminDeleteLogo()
{
$oModuleModel = getModel('module');
$oAdminConfig = $oModuleModel->getModuleConfig('admin');
FileHandler::removeFile(_XE_PATH_ . $oAdminConfig->adminLogo);
unset($oAdminConfig->adminLogo);
$oModuleController = getController('module');
$oModuleController->insertModuleConfig('admin', $oAdminConfig);
$this->setMessage('success_deleted', 'info');
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup');
$this->setRedirectUrl($returnUrl);
}
/**
* Insert favorite
* @return object query result
*/
function _insertFavorite($siteSrl, $module, $type = 'module')
{
$args = new stdClass();
$args->adminFavoriteSrl = getNextSequence();
$args->site_srl = $siteSrl;
$args->module = $module;
$args->type = $type;
$output = executeQuery('admin.insertFavorite', $args);
return $output;
}
/**
* Delete favorite
* @return object query result
*/
function _deleteFavorite($favoriteSrl)
{
$args = new stdClass();
$args->admin_favorite_srl = $favoriteSrl;
$output = executeQuery('admin.deleteFavorite', $args);
return $output;
}
/**
* Delete all favorite
* @return object query result
*/
function _deleteAllFavorite()
{
$args = NULL;
$output = executeQuery('admin.deleteAllFavorite', $args);
return $output;
}
/**
* Remove admin icon
* @return object|void
*/
function procAdminRemoveIcons()
{
$iconname = Context::get('iconname');
$file_exist = FileHandler::readFile(_XE_PATH_ . 'files/attach/xeicon/' . $iconname);
if($file_exist)
{
$args->adminFavoriteSrl = getNextSequence();
$args->site_srl = $siteSrl;
$args->module = $module;
$args->type = $type;
$output = executeQuery('admin.insertFavorite', $args);
return $output;
@FileHandler::removeFile(_XE_PATH_ . 'files/attach/xeicon/' . $iconname);
}
/**
* Delete favorite
* @return object query result
*/
function _deleteFavorite($favoriteSrl)
else
{
$args->admin_favorite_srl = $favoriteSrl;
$output = executeQuery('admin.deleteFavorite', $args);
return $output;
return new Object(-1, 'fail_to_delete');
}
$this->setMessage('success_deleted');
}
/**
* Delete all favorite
* @return object query result
*/
function _deleteAllFavorite()
{
$args = null;
$output = executeQuery('admin.deleteAllFavorite', $args);
return $output;
}
/**
* Remove admin icon
* @return object|void
*/
function procAdminRemoveIcons(){
$iconname = Context::get('iconname');
$file_exist = FileHandler::readFile(_XE_PATH_.'files/attach/xeicon/'.$iconname);
if($file_exist) {
@FileHandler::removeFile(_XE_PATH_.'files/attach/xeicon/'.$iconname);
} else {
return new Object(-1,'fail_to_delete');
}
$this->setMessage('success_deleted');
}
}
?>
}
/* End of file admin.admin.controller.php */
/* Location: ./modules/admin/admin.admin.controller.php */

File diff suppressed because it is too large Load diff

View file

@ -1,151 +1,201 @@
<?php
/**
* adminAdminView class
* Admin view class of admin module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/admin
* @version 0.1
*/
class adminAdminView extends admin
{
/**
* adminAdminView class
* Admin view class of admin module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/admin
* @version 0.1
* layout list
* @var array
*/
class adminAdminView extends admin {
/**
* layout list
* @var array
*/
var $layout_list;
/**
* easy install check file
* @var array
*/
var $easyinstallCheckFile = './files/env/easyinstall_last';
var $layout_list;
/**
* Initilization
* @return void
*/
function init() {
// forbit access if the user is not an administrator
$oMemberModel = &getModel('member');
$logged_info = $oMemberModel->getLoggedInfo();
if($logged_info->is_admin!='Y') return $this->stop("msg_is_not_administrator");
/**
* easy install check file
* @var array
*/
var $easyinstallCheckFile = './files/env/easyinstall_last';
// change into administration layout
$this->setTemplatePath($this->module_path.'tpl');
$this->setLayoutPath($this->getTemplatePath());
$this->setLayoutFile('layout.html');
$this->makeGnbUrl();
// Retrieve the list of installed modules
$db_info = Context::getDBInfo();
Context::set('time_zone_list', $GLOBALS['time_zone']);
Context::set('time_zone', $GLOBALS['_time_zone']);
Context::set('use_rewrite', $db_info->use_rewrite=='Y'?'Y':'N');
Context::set('use_sso', $db_info->use_sso=='Y'?'Y':'N');
Context::set('use_html5', $db_info->use_html5=='Y'?'Y':'N');
Context::set('use_spaceremover', $db_info->use_spaceremover?$db_info->use_spaceremover:'Y');//not use
Context::set('qmail_compatibility', $db_info->qmail_compatibility=='Y'?'Y':'N');
Context::set('use_db_session', $db_info->use_db_session=='N'?'N':'Y');
Context::set('use_mobile_view', $db_info->use_mobile_view =='Y'?'Y':'N');
Context::set('use_ssl', $db_info->use_ssl?$db_info->use_ssl:"none");
Context::set('use_cdn', $db_info->use_cdn?$db_info->use_cdn:"none");
if($db_info->http_port) Context::set('http_port', $db_info->http_port);
if($db_info->https_port) Context::set('https_port', $db_info->https_port);
$this->showSendEnv();
$this->checkEasyinstall();
}
/**
* check easy install
* @return void
*/
function checkEasyinstall()
/**
* Initilization
* @return void
*/
function init()
{
// forbit access if the user is not an administrator
$oMemberModel = getModel('member');
$logged_info = $oMemberModel->getLoggedInfo();
if($logged_info->is_admin != 'Y')
{
$lastTime = (int)FileHandler::readFile($this->easyinstallCheckFile);
if ($lastTime > time() - 60*60*24*30) return;
return $this->stop("msg_is_not_administrator");
}
$oAutoinstallModel = &getModel('autoinstall');
$params = array();
$params["act"] = "getResourceapiLastupdate";
$body = XmlGenerater::generate($params);
$buff = FileHandler::getRemoteResource(_XE_DOWNLOAD_SERVER_, $body, 3, "POST", "application/xml");
$xml_lUpdate = new XmlParser();
$lUpdateDoc = $xml_lUpdate->parse($buff);
$updateDate = $lUpdateDoc->response->updatedate->body;
// change into administration layout
$this->setTemplatePath($this->module_path . 'tpl');
$this->setLayoutPath($this->getTemplatePath());
$this->setLayoutFile('layout.html');
if (!$updateDate)
{
$this->_markingCheckEasyinstall();
return;
}
$this->makeGnbUrl();
$item = $oAutoinstallModel->getLatestPackage();
if(!$item || $item->updatedate < $updateDate)
{
$oController = &getAdminController('autoinstall');
$oController->_updateinfo();
}
// Retrieve the list of installed modules
$db_info = Context::getDBInfo();
Context::set('time_zone_list', $GLOBALS['time_zone']);
Context::set('time_zone', $GLOBALS['_time_zone']);
Context::set('use_rewrite', $db_info->use_rewrite == 'Y' ? 'Y' : 'N');
Context::set('use_sso', $db_info->use_sso == 'Y' ? 'Y' : 'N');
Context::set('use_html5', $db_info->use_html5 == 'Y' ? 'Y' : 'N');
Context::set('use_spaceremover', $db_info->use_spaceremover ? $db_info->use_spaceremover : 'Y'); //not use
Context::set('qmail_compatibility', $db_info->qmail_compatibility == 'Y' ? 'Y' : 'N');
Context::set('use_db_session', $db_info->use_db_session == 'N' ? 'N' : 'Y');
Context::set('use_mobile_view', $db_info->use_mobile_view == 'Y' ? 'Y' : 'N');
Context::set('use_ssl', $db_info->use_ssl ? $db_info->use_ssl : "none");
Context::set('use_cdn', $db_info->use_cdn ? $db_info->use_cdn : "none");
if($db_info->http_port)
{
Context::set('http_port', $db_info->http_port);
}
if($db_info->https_port)
{
Context::set('https_port', $db_info->https_port);
}
$this->showSendEnv();
$this->checkEasyinstall();
}
/**
* check easy install
* @return void
*/
function checkEasyinstall()
{
$lastTime = (int) FileHandler::readFile($this->easyinstallCheckFile);
if($lastTime > time() - 60 * 60 * 24 * 30)
{
return;
}
$oAutoinstallModel = getModel('autoinstall');
$params = array();
$params["act"] = "getResourceapiLastupdate";
$body = XmlGenerater::generate($params);
$buff = FileHandler::getRemoteResource(_XE_DOWNLOAD_SERVER_, $body, 3, "POST", "application/xml");
$xml_lUpdate = new XmlParser();
$lUpdateDoc = $xml_lUpdate->parse($buff);
$updateDate = $lUpdateDoc->response->updatedate->body;
if(!$updateDate)
{
$this->_markingCheckEasyinstall();
return;
}
/**
* update easy install file content
* @return void
*/
function _markingCheckEasyinstall()
$item = $oAutoinstallModel->getLatestPackage();
if(!$item || $item->updatedate < $updateDate)
{
$currentTime = time();
FileHandler::writeFile($this->easyinstallCheckFile, $currentTime);
$oController = getAdminController('autoinstall');
$oController->_updateinfo();
}
$this->_markingCheckEasyinstall();
}
/**
* update easy install file content
* @return void
*/
function _markingCheckEasyinstall()
{
$currentTime = time();
FileHandler::writeFile($this->easyinstallCheckFile, $currentTime);
}
/**
* Include admin menu php file and make menu url
* Setting admin logo, newest news setting
* @return void
*/
function makeGnbUrl($module = 'admin')
{
global $lang;
// Check is_shortcut column
$oDB = DB::getInstance();
if(!$oDB->isColumnExists('menu_item', 'is_shortcut'))
{
return;
}
/**
* Include admin menu php file and make menu url
* Setting admin logo, newest news setting
* @return void
*/
function makeGnbUrl($module = 'admin')
$oAdminAdminModel = getAdminModel('admin');
$lang->menu_gnb_sub = $oAdminAdminModel->getAdminMenuLang();
$result = $oAdminAdminModel->checkAdminMenu();
if(!$result->php_file)
{
global $lang;
header('Location: ' . getNotEncodedUrl('', 'module', 'admin'));
Context::close();
exit;
}
include $result->php_file;
$oAdminAdminModel = &getAdminModel('admin');
$lang->menu_gnb_sub = $oAdminAdminModel->getAdminMenuLang();
$oModuleModel = getModel('module');
$moduleActionInfo = $oModuleModel->getModuleActionXml($module);
$oMenuAdminModel = &getAdminModel('menu');
$menu_info = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__');
Context::set('admin_menu_srl', $menu_info->menu_srl);
if(!is_readable($menu_info->php_file)) return;
include $menu_info->php_file;
$oModuleModel = &getModel('module');
$moduleActionInfo = $oModuleModel->getModuleActionXml($module);
$currentAct = Context::get('act');
$subMenuTitle = '';
foreach((array)$moduleActionInfo->menu as $key=>$value)
$currentAct = Context::get('act');
$subMenuTitle = '';
foreach((array) $moduleActionInfo->menu as $key => $value)
{
if(isset($value->acts) && is_array($value->acts) && in_array($currentAct, $value->acts))
{
if(isset($value->acts) && is_array($value->acts) && in_array($currentAct, $value->acts))
{
$subMenuTitle = $value->title;
break;
}
$subMenuTitle = $value->title;
break;
}
}
$parentSrl = 0;
foreach((array)$menu->list as $parentKey=>$parentMenu)
$parentSrl = 0;
$oMenuAdminConroller = getAdminController('menu');
if(!$_SESSION['isMakeXml'])
{
foreach((array) $menu->list as $parentKey => $parentMenu)
{
if(!is_array($parentMenu['list']) || !count($parentMenu['list'])) continue;
if($parentMenu['href'] == '#' && count($parentMenu['list'])) {
$firstChild = current($parentMenu['list']);
$menu->list[$parentKey]['href'] = $firstChild['href'];
if(!$parentMenu['text'])
{
$oMenuAdminConroller->makeXmlFile($result->menu_srl);
$_SESSION['isMakeXml'] = true;
header('Location: ' . getNotEncodedUrl('', 'module', 'admin'));
Context::close();
exit;
}
foreach($parentMenu['list'] as $childKey=>$childMenu)
if(!is_array($parentMenu['list']) || !count($parentMenu['list']))
{
continue;
}
if($parentMenu['href'] == '#' && count($parentMenu['list']))
{
$firstChild = current($parentMenu['list']);
$menu->list[$parentKey]['href'] = $firstChild['href'];
}
foreach($parentMenu['list'] as $childKey => $childMenu)
{
if(!$childMenu['text'])
{
$oMenuAdminConroller->makeXmlFile($result->menu_srl);
$_SESSION['isMakeXml'] = true;
header('Location: ' . getNotEncodedUrl('', 'module', 'admin'));
Context::close();
exit;
}
if($subMenuTitle == $childMenu['text'])
{
$parentSrl = $childMenu['parent_srl'];
@ -153,339 +203,328 @@
}
}
}
// Admin logo, title setup
$objConfig = $oModuleModel->getModuleConfig('admin');
$gnbTitleInfo->adminTitle = $objConfig->adminTitle ? $objConfig->adminTitle:'XE Admin';
$gnbTitleInfo->adminLogo = $objConfig->adminLogo ? $objConfig->adminLogo:'modules/admin/tpl/img/xe.h1.png';
$browserTitle = ($subMenuTitle ? $subMenuTitle : 'Dashboard').' - '.$gnbTitleInfo->adminTitle;
// Get list of favorite
$oAdminAdminModel = &getAdminModel('admin');
$output = $oAdminAdminModel->getFavoriteList(0, true);
Context::set('favorite_list', $output->get('favoriteList'));
// Retrieve recent news and set them into context,
// move from index method, because use in admin footer
$newest_news_url = sprintf("http://news.xpressengine.com/%s/news.php?version=%s&package=%s", _XE_LOCATION_, __ZBXE_VERSION__, _XE_PACKAGE_);
$cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_, _XE_LOCATION_);
if(!file_exists($cache_file) || filemtime($cache_file)+ 60*60 < time()) {
// Considering if data cannot be retrieved due to network problem, modify filemtime to prevent trying to reload again when refreshing administration page
// Ensure to access the administration page even though news cannot be displayed
FileHandler::writeFile($cache_file,'');
FileHandler::getRemoteFile($newest_news_url, $cache_file, null, 1, 'GET', 'text/html', array('REQUESTURL'=>getFullUrl('')));
}
if(file_exists($cache_file)) {
$oXml = new XmlParser();
$buff = $oXml->parse(FileHandler::readFile($cache_file));
$item = $buff->zbxe_news->item;
if($item) {
if(!is_array($item)) $item = array($item);
foreach($item as $key => $val) {
$obj = null;
$obj->title = $val->body;
$obj->date = $val->attrs->date;
$obj->url = $val->attrs->url;
$news[] = $obj;
}
Context::set('news', $news);
if(isset($news) && is_array($news))
{
Context::set('latestVersion', array_shift($news));
}
}
Context::set('released_version', $buff->zbxe_news->attrs->released_version);
Context::set('download_link', $buff->zbxe_news->attrs->download_link);
}
Context::set('subMenuTitle', $subMenuTitle);
Context::set('gnbUrlList', $menu->list);
Context::set('parentSrl', $parentSrl);
Context::set('gnb_title_info', $gnbTitleInfo);
Context::setBrowserTitle($browserTitle);
}
/**
* Display Super Admin Dashboard
* @return void
*/
function dispAdminIndex() {
// Get statistics
$args->date = date("Ymd000000", time()-60*60*24);
$today = date("Ymd");
// Admin logo, title setup
$objConfig = $oModuleModel->getModuleConfig('admin');
$gnbTitleInfo = new stdClass();
$gnbTitleInfo->adminTitle = $objConfig->adminTitle ? $objConfig->adminTitle : 'XE Admin';
$gnbTitleInfo->adminLogo = $objConfig->adminLogo ? $objConfig->adminLogo : 'modules/admin/tpl/img/xe.h1.png';
// Member Status
$oMemberAdminModel = &getAdminModel('member');
$status->member->todayCount = $oMemberAdminModel->getMemberCountByDate($today);
$status->member->totalCount = $oMemberAdminModel->getMemberCountByDate();
$browserTitle = ($subMenuTitle ? $subMenuTitle : 'Dashboard') . ' - ' . $gnbTitleInfo->adminTitle;
// Document Status
$oDocumentAdminModel = &getAdminModel('document');
$statusList = array('PUBLIC', 'SECRET');
$status->document->todayCount = $oDocumentAdminModel->getDocumentCountByDate($today, array(), $statusList);
$status->document->totalCount = $oDocumentAdminModel->getDocumentCountByDate('', array(), $statusList);
// Get list of favorite
$oAdminAdminModel = getAdminModel('admin');
$output = $oAdminAdminModel->getFavoriteList(0, true);
Context::set('favorite_list', $output->get('favoriteList'));
// Comment Status
$oCommentModel = &getModel('comment');
$status->comment->todayCount = $oCommentModel->getCommentCountByDate($today);
$status->comment->totalCount = $oCommentModel->getCommentCountByDate();
// Trackback Status
$oTrackbackAdminModel = &getAdminModel('trackback');
$status->trackback->todayCount = $oTrackbackAdminModel->getTrackbackCountByDate($today);
$status->trackback->totalCount = $oTrackbackAdminModel->getTrackbackCountByDate();
// Attached files Status
$oFileAdminModel = &getAdminModel('file');
$status->file->todayCount = $oFileAdminModel->getFilesCountByDate($today);
$status->file->totalCount = $oFileAdminModel->getFilesCountByDate();
Context::set('status', $status);
// Latest Document
$oDocumentModel = &getModel('document');
$columnList = array('document_srl', 'module_srl', 'category_srl', 'title', 'nick_name', 'member_srl');
$args->list_count = 5;;
$output = $oDocumentModel->getDocumentList($args, false, false, $columnList);
Context::set('latestDocumentList', $output->data);
$security = new Security();
$security->encodeHTML('latestDocumentList..variables.nick_name');
unset($args, $output, $columnList);
// Latest Comment
$oCommentModel = &getModel('comment');
$columnList = array('comment_srl', 'module_srl', 'document_srl', 'content', 'nick_name', 'member_srl');
$args->list_count = 5;
$output = $oCommentModel->getNewestCommentList($args, $columnList);
if(is_array($output))
{
foreach($output AS $key=>$value)
{
$value->content = strip_tags($value->content);
}
}
Context::set('latestCommentList', $output);
unset($args, $output, $columnList);
//Latest Trackback
$oTrackbackModel = &getModel('trackback');
$columnList = array();
$args->list_count = 5;
$output =$oTrackbackModel->getNewestTrackbackList($args);
Context::set('latestTrackbackList', $output->data);
unset($args, $output, $columnList);
// Get list of modules
$oModuleModel = &getModel('module');
$module_list = $oModuleModel->getModuleList();
if(is_array($module_list))
{
$needUpdate = false;
$addTables = false;
foreach($module_list AS $key=>$value)
{
if($value->need_install)
{
$addTables = true;
}
if($value->need_update)
{
$needUpdate = true;
}
}
}
Context::set('module_list', $module_list);
Context::set('needUpdate', $isUpdated);
Context::set('addTables', $addTables);
Context::set('needUpdate', $needUpdate);
// gathering enviroment check
$mainVersion = join('.', array_slice(explode('.', __ZBXE_VERSION__), 0, 2));
$path = FileHandler::getRealPath('./files/env/'.$mainVersion);
$isEnviromentGatheringAgreement = false;
if(file_exists($path)) $isEnviromentGatheringAgreement = true;
Context::set('isEnviromentGatheringAgreement', $isEnviromentGatheringAgreement);
Context::set('layout','none');
$this->setTemplateFile('index');
}
/**
* Display Configuration(settings) page
* @return void
*/
function dispAdminConfigGeneral() {
Context::loadLang('modules/install/lang');
$db_info = Context::getDBInfo();
Context::set('selected_lang', $db_info->lang_type);
Context::set('default_url', $db_info->default_url);
Context::set('langs', Context::loadLangSupported());
Context::set('lang_selected', Context::loadLangSelected());
$admin_ip_list = preg_replace("/[,]+/","\r\n",$db_info->admin_ip_list);
Context::set('admin_ip_list', $admin_ip_list);
$oAdminModel = &getAdminModel('admin');
$favicon_url = $oAdminModel->getFaviconUrl();
$mobicon_url = $oAdminModel->getMobileIconUrl();
Context::set('favicon_url', $favicon_url);
Context::set('mobicon_url', $mobicon_url);
$oDocumentModel = &getModel('document');
$config = $oDocumentModel->getDocumentConfig();
Context::set('thumbnail_type',$config->thumbnail_type);
Context::set('IP',$_SERVER['REMOTE_ADDR']);
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('module');
Context::set('htmlFooter',$config->htmlFooter);
$columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl');
$start_module = $oModuleModel->getSiteInfo(0, $columnList);
Context::set('start_module', $start_module);
Context::set('pwd',$pwd);
$this->setTemplateFile('config_general');
$security = new Security();
$security->encodeHTML('news..', 'released_version', 'download_link', 'selected_lang', 'module_list..', 'module_list..author..', 'addon_list..', 'addon_list..author..', 'start_module.');
}
/**
* Display FTP Configuration(settings) page
* @return void
*/
function dispAdminConfigFtp() {
Context::loadLang('modules/install/lang');
$ftp_info = Context::getFTPInfo();
Context::set('ftp_info', $ftp_info);
Context::set('sftp_support', function_exists(ssh2_sftp));
$this->setTemplateFile('config_ftp');
// $security = new Security();
// $security->encodeHTML('ftp_info..');
}
/**
* Display Admin Menu Configuration(settings) page
* @return void
*/
function dispAdminSetup()
// Retrieve recent news and set them into context,
// move from index method, because use in admin footer
$newest_news_url = sprintf("http://news.xpressengine.com/%s/news.php?version=%s&package=%s", _XE_LOCATION_, __XE_VERSION__, _XE_PACKAGE_);
$cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_, _XE_LOCATION_);
if(!file_exists($cache_file) || filemtime($cache_file) + 60 * 60 < time())
{
$oModuleModel = &getModel('module');
$configObject = $oModuleModel->getModuleConfig('admin');
$oMenuAdminModel = &getAdminModel('menu');
$output = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__');
Context::set('menu_srl', $output->menu_srl);
Context::set('menu_title', $output->title);
Context::set('config_object', $configObject);
$this->setTemplateFile('admin_setup');
// Considering if data cannot be retrieved due to network problem, modify filemtime to prevent trying to reload again when refreshing administration page
// Ensure to access the administration page even though news cannot be displayed
FileHandler::writeFile($cache_file, '');
FileHandler::getRemoteFile($newest_news_url, $cache_file, null, 1, 'GET', 'text/html', array('REQUESTURL' => getFullUrl('')));
}
if(file_exists($cache_file))
{
$oXml = new XmlParser();
$buff = $oXml->parse(FileHandler::readFile($cache_file));
/**
* Enviroment information send to XE collect server
* @return void
*/
function showSendEnv() {
if(Context::getResponseMethod() != 'HTML') return;
$server = 'http://collect.xpressengine.com/env/img.php?';
$path = './files/env/';
$install_env = $path . 'install';
$mainVersion = join('.', array_slice(explode('.', __ZBXE_VERSION__), 0, 2));
if(file_exists(FileHandler::getRealPath($install_env))) {
$oAdminAdminModel = &getAdminModel('admin');
$params = $oAdminAdminModel->getEnv('INSTALL');
$img = sprintf('<img src="%s" alt="" style="height:0px;width:0px" />', $server.$params);
Context::addHtmlFooter($img);
FileHandler::removeDir($path);
FileHandler::writeFile($path.$mainVersion,'1');
}
else if(isset($_SESSION['enviroment_gather']) && !file_exists(FileHandler::getRealPath($path.$mainVersion)))
$item = $buff->zbxe_news->item;
if($item)
{
if($_SESSION['enviroment_gather']=='Y')
if(!is_array($item))
{
$oAdminAdminModel = &getAdminModel('admin');
$params = $oAdminAdminModel->getEnv();
$img = sprintf('<img src="%s" alt="" style="height:0px;width:0px" />', $server.$params);
Context::addHtmlFooter($img);
$item = array($item);
}
FileHandler::removeDir($path);
FileHandler::writeFile($path.$mainVersion,'1');
unset($_SESSION['enviroment_gather']);
foreach($item as $key => $val)
{
$obj = new stdClass();
$obj->title = $val->body;
$obj->date = $val->attrs->date;
$obj->url = $val->attrs->url;
$news[] = $obj;
}
Context::set('news', $news);
if(isset($news) && is_array($news))
{
Context::set('latestVersion', array_shift($news));
}
}
Context::set('released_version', $buff->zbxe_news->attrs->released_version);
Context::set('download_link', $buff->zbxe_news->attrs->download_link);
}
Context::set('subMenuTitle', $subMenuTitle);
Context::set('gnbUrlList', $menu->list);
Context::set('parentSrl', $parentSrl);
Context::set('gnb_title_info', $gnbTitleInfo);
Context::setBrowserTitle($browserTitle);
}
/**
* Display Super Admin Dashboard
* @return void
*/
function dispAdminIndex()
{
// Get statistics
$args = new stdClass();
$args->date = date("Ymd000000", time() - 60 * 60 * 24);
$today = date("Ymd");
// Member Status
$oMemberAdminModel = getAdminModel('member');
$status = new stdClass();
$status->member = new stdClass();
$status->member->todayCount = $oMemberAdminModel->getMemberCountByDate($today);
$status->member->totalCount = $oMemberAdminModel->getMemberCountByDate();
// Document Status
$oDocumentAdminModel = getAdminModel('document');
$statusList = array('PUBLIC', 'SECRET');
$status->document = new stdClass();
$status->document->todayCount = $oDocumentAdminModel->getDocumentCountByDate($today, array(), $statusList);
$status->document->totalCount = $oDocumentAdminModel->getDocumentCountByDate('', array(), $statusList);
Context::set('status', $status);
// Latest Document
$oDocumentModel = getModel('document');
$columnList = array('document_srl', 'module_srl', 'category_srl', 'title', 'nick_name', 'member_srl');
$args->list_count = 5;
;
$output = $oDocumentModel->getDocumentList($args, FALSE, FALSE, $columnList);
Context::set('latestDocumentList', $output->data);
unset($args, $output, $columnList);
// Latest Comment
$oCommentModel = getModel('comment');
$columnList = array('comment_srl', 'module_srl', 'document_srl', 'content', 'nick_name', 'member_srl');
$args = new stdClass();
$args->list_count = 5;
$output = $oCommentModel->getNewestCommentList($args, $columnList);
if(is_array($output))
{
foreach($output AS $key => $value)
{
$value->content = strip_tags($value->content);
}
}
Context::set('latestCommentList', $output);
unset($args, $output, $columnList);
// Get list of modules
$oModuleModel = getModel('module');
$module_list = $oModuleModel->getModuleList();
if(is_array($module_list))
{
$needUpdate = FALSE;
$addTables = FALSE;
foreach($module_list AS $key => $value)
{
if($value->need_install)
{
$addTables = TRUE;
}
if($value->need_update)
{
$needUpdate = TRUE;
}
}
}
/**
* Display Admin theme Configuration(settings) page
* @return void
*/
function dispAdminTheme(){
// choice theme file
$theme_file = _XE_PATH_.'files/theme/theme_info.php';
if(is_readable($theme_file)){
@include($theme_file);
Context::set('current_layout', $theme_info->layout);
Context::set('theme_info', $theme_info);
}
else{
$oModuleModel = &getModel('module');
$default_mid = $oModuleModel->getDefaultMid();
Context::set('current_layout', $default_mid->layout_srl);
}
// Get need update from easy install
$oAutoinstallAdminModel = getAdminModel('autoinstall');
$needUpdateList = $oAutoinstallAdminModel->getNeedUpdateList();
// layout list
$oLayoutModel = &getModel('layout');
// theme 정보 읽기
$oAdminModel = &getAdminModel('admin');
$theme_list = $oAdminModel->getThemeList();
$layouts = $oLayoutModel->getLayoutList(0);
$layout_list = array();
if (is_array($layouts)){
foreach($layouts as $val){
unset($layout_info);
$layout_info = $oLayoutModel->getLayout($val->layout_srl);
if (!$layout_info) continue;
$layout_parse = explode('|@|', $layout_info->layout);
if (count($layout_parse) == 2){
$thumb_path = sprintf('./themes/%s/layouts/%s/thumbnail.png', $layout_parse[0], $layout_parse[1]);
}
else{
$thumb_path = './layouts/'.$layout_info->layout.'/thumbnail.png';
}
$layout_info->thumbnail = (is_readable($thumb_path))?$thumb_path:null;
$layout_list[] = $layout_info;
if(is_array($needUpdateList))
{
foreach($needUpdateList AS $key => $value)
{
$helpUrl = './admin/help/index.html#';
switch($value->type)
{
case 'addon':
$helpUrl .= 'UMAN_terminology_addon';
break;
case 'layout':
case 'm.layout':
$helpUrl .= 'UMAN_terminology_layout';
break;
case 'module':
$helpUrl .= 'UMAN_terminology_module';
break;
case 'widget':
$helpUrl .= 'UMAN_terminology_widget';
break;
case 'widgetstyle':
$helpUrl .= 'UMAN_terminology_widgetstyle';
break;
default:
$helpUrl = '';
}
$needUpdateList[$key]->helpUrl = $helpUrl;
}
Context::set('theme_list', $theme_list);
Context::set('layout_list', $layout_list);
// 설치된module 정보 가져오기
$module_list = $oAdminModel->getModulesSkinList();
Context::set('module_list', $module_list);
$this->setTemplateFile('theme');
}
}
Context::set('module_list', $module_list);
Context::set('needUpdate', $isUpdated);
Context::set('addTables', $addTables);
Context::set('needUpdate', $needUpdate);
Context::set('newVersionList', $needUpdateList);
$oSecurity = new Security();
$oSecurity->encodeHTML('module_list..', 'module_list..author..', 'newVersionList..');
// gathering enviroment check
$mainVersion = join('.', array_slice(explode('.', __XE_VERSION__), 0, 2));
$path = FileHandler::getRealPath('./files/env/' . $mainVersion);
$isEnviromentGatheringAgreement = FALSE;
if(file_exists($path))
{
$isEnviromentGatheringAgreement = TRUE;
}
Context::set('isEnviromentGatheringAgreement', $isEnviromentGatheringAgreement);
Context::set('layout', 'none');
$this->setTemplateFile('index');
}
/**
* Display Configuration(settings) page
* @return void
*/
function dispAdminConfigGeneral()
{
Context::loadLang('modules/install/lang');
$db_info = Context::getDBInfo();
Context::set('selected_lang', $db_info->lang_type);
Context::set('default_url', $db_info->default_url);
Context::set('langs', Context::loadLangSupported());
Context::set('lang_selected', Context::loadLangSelected());
$admin_ip_list = preg_replace("/[,]+/", "\r\n", $db_info->admin_ip_list);
Context::set('admin_ip_list', $admin_ip_list);
$oAdminModel = getAdminModel('admin');
$favicon_url = $oAdminModel->getFaviconUrl();
$mobicon_url = $oAdminModel->getMobileIconUrl();
Context::set('favicon_url', $favicon_url.'?'.time());
Context::set('mobicon_url', $mobicon_url.'?'.time());
$oDocumentModel = getModel('document');
$config = $oDocumentModel->getDocumentConfig();
Context::set('thumbnail_type', $config->thumbnail_type);
Context::set('IP', $_SERVER['REMOTE_ADDR']);
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('module');
Context::set('siteTitle', $config->siteTitle);
Context::set('htmlFooter', $config->htmlFooter);
$columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl');
$start_module = $oModuleModel->getSiteInfo(0, $columnList);
Context::set('start_module', $start_module);
Context::set('pwd', $pwd);
$this->setTemplateFile('config_general');
$security = new Security();
$security->encodeHTML('news..', 'released_version', 'download_link', 'selected_lang', 'module_list..', 'module_list..author..', 'addon_list..', 'addon_list..author..', 'start_module.');
}
/**
* Display FTP Configuration(settings) page
* @return void
*/
function dispAdminConfigFtp()
{
Context::loadLang('modules/install/lang');
$ftp_info = Context::getFTPInfo();
Context::set('ftp_info', $ftp_info);
Context::set('sftp_support', function_exists(ssh2_sftp));
$this->setTemplateFile('config_ftp');
//$security = new Security();
//$security->encodeHTML('ftp_info..');
}
/**
* Display Admin Menu Configuration(settings) page
* @return void
*/
function dispAdminSetup()
{
$oModuleModel = getModel('module');
$configObject = $oModuleModel->getModuleConfig('admin');
$oAdmin = getClass('admin');
$oMenuAdminModel = getAdminModel('menu');
$output = $oMenuAdminModel->getMenuByTitle($oAdmin->getAdminMenuName());
Context::set('menu_srl', $output->menu_srl);
Context::set('menu_title', $output->title);
Context::set('config_object', $configObject);
$this->setTemplateFile('admin_setup');
}
/**
* Enviroment information send to XE collect server
* @return void
*/
function showSendEnv()
{
if(Context::getResponseMethod() != 'HTML')
{
return;
}
$server = 'http://collect.xpressengine.com/env/img.php?';
$path = './files/env/';
$install_env = $path . 'install';
$mainVersion = join('.', array_slice(explode('.', __XE_VERSION__), 0, 2));
if(file_exists(FileHandler::getRealPath($install_env)))
{
$oAdminAdminModel = getAdminModel('admin');
$params = $oAdminAdminModel->getEnv('INSTALL');
$img = sprintf('<img src="%s" alt="" style="height:0px;width:0px" />', $server . $params);
Context::addHtmlFooter($img);
FileHandler::removeDir($path);
FileHandler::writeFile($path . $mainVersion, '1');
}
else if(isset($_SESSION['enviroment_gather']) && !file_exists(FileHandler::getRealPath($path . $mainVersion)))
{
if($_SESSION['enviroment_gather'] == 'Y')
{
$oAdminAdminModel = getAdminModel('admin');
$params = $oAdminAdminModel->getEnv();
$img = sprintf('<img src="%s" alt="" style="height:0px;width:0px" />', $server . $params);
Context::addHtmlFooter($img);
}
FileHandler::removeDir($path);
FileHandler::writeFile($path . $mainVersion, '1');
unset($_SESSION['enviroment_gather']);
}
}
}
/* End of file admin.admin.view.php */
/* Location: ./modules/admin/admin.admin.view.php */

View file

@ -1,294 +1,493 @@
<?php
/**
* admin class
* Base class of admin module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/admin
* @version 0.1
*/
class admin extends ModuleObject
{
private $adminMenuName = '__ADMINMENU_V17__';
public function getAdminMenuName()
{
return $this->adminMenuName;
}
/**
* admin class
* Base class of admin module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/admin
* @version 0.1
* Install admin module
* @return Object
*/
class admin extends ModuleObject {
/**
* Install admin module
* @return Object
*/
function moduleInstall() {
return new Object();
}
function moduleInstall()
{
return new Object();
}
/**
* If update is necessary it returns true
* @return bool
*/
function checkUpdate() {
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists("admin_favorite", "type")) return true;
return false;
}
/**
* Update module
* @return Object
*/
function moduleUpdate() {
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists("admin_favorite", "type"))
{
$oAdminAdminModel = &getAdminModel('admin');
$output = $oAdminAdminModel->getFavoriteList();
$favoriteList = $output->get('favoriteList');
$oDB->dropColumn('admin_favorite', 'admin_favorite_srl');
$oDB->addColumn('admin_favorite',"admin_favorite_srl","number",11,0);
$oDB->addColumn('admin_favorite',"type","varchar",30, 'module');
if(is_array($favoriteList))
{
$oAdminAdminController = &getAdminController('admin');
$oAdminAdminController->_deleteAllFavorite();
foreach($favoriteList AS $key=>$value)
{
$oAdminAdminController->_insertFavorite($value->site_srl, $value->module);
}
}
}
return new Object();
}
/**
* Regenerate cache file
* @return void
*/
function recompileCache() {
}
/**
* Regenerate xe admin default menu
* @return void
*/
function createXeAdminMenu()
/**
* If update is necessary it returns true
* @return bool
*/
function checkUpdate()
{
$oDB = DB::getInstance();
if(!$oDB->isColumnExists("admin_favorite", "type"))
{
//insert menu
$args->title = '__XE_ADMIN__';
$args->menu_srl = getNextSequence();
$args->listorder = $args->menu_srl * -1;
$output = executeQuery('menu.insertMenu', $args);
$menuSrl = $args->menu_srl;
unset($args);
return TRUE;
}
// gnb item create
$gnbList = array('dashboard', 'menu', 'user', 'content', 'theme', 'extensions', 'configuration');
foreach($gnbList AS $key=>$value)
return FALSE;
}
/**
* Update module
* @return Object
*/
function moduleUpdate()
{
$oDB = DB::getInstance();
if(!$oDB->isColumnExists("admin_favorite", "type"))
{
$oAdminAdminModel = getAdminModel('admin');
$output = $oAdminAdminModel->getFavoriteList();
$favoriteList = $output->get('favoriteList');
$oDB->dropColumn('admin_favorite', 'admin_favorite_srl');
$oDB->addColumn('admin_favorite', "admin_favorite_srl", "number", 11, 0);
$oDB->addColumn('admin_favorite', "type", "varchar", 30, 'module');
if(is_array($favoriteList))
{
//insert menu item
$args->menu_srl = $menuSrl;
$args->menu_item_srl = getNextSequence();
$args->name = '{$lang->menu_gnb[\''.$value.'\']}';
if($value == 'dashboard')
$oAdminAdminController = getAdminController('admin');
$oAdminAdminController->_deleteAllFavorite();
foreach($favoriteList AS $key => $value)
{
$args->url = 'index.php?module=admin';
$oAdminAdminController->_insertFavorite($value->site_srl, $value->module);
}
else $args->url = '#';
$args->listorder = -1*$args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
}
}
return new Object();
}
/**
* Regenerate cache file
* @return void
*/
function recompileCache()
{
}
public function checkAdminMenu()
{
// for admin menu
if(Context::isInstalled())
{
$oMenuAdminModel = getAdminModel('menu');
$output = $oMenuAdminModel->getMenuByTitle($this->adminMenuName);
if(!$output->menu_srl)
{
$oAdminClass = getClass('admin');
$oAdminClass->createXeAdminMenu();
}
else
{
if(!is_readable(FileHandler::getRealPath($output->php_file)))
{
$oMenuAdminController = getAdminController('menu');
$oMenuAdminController->makeXmlFile($output->menu_srl);
}
Context::set('admin_menu_srl', $output->menu_srl);
}
$oMenuAdminModel = &getAdminModel('menu');
$columnList = array('menu_item_srl', 'name');
$output = $oMenuAdminModel->getMenuItems($menuSrl, 0, $columnList);
$this->_oldAdminmenuDelete();
$returnObj = new stdClass();
$returnObj->menu_srl = $output->menu_srl;
$returnObj->php_file = FileHandler::getRealPath($output->php_file);
return $returnObj;
}
}
/**
* Regenerate xe admin default menu
* @return void
*/
public function createXeAdminMenu()
{
//insert menu
$args = new stdClass();
$args->title = $this->adminMenuName;
$args->menu_srl = getNextSequence();
$args->listorder = $args->menu_srl * -1;
$output = executeQuery('menu.insertMenu', $args);
$menuSrl = $args->menu_srl;
Context::set('admin_menu_srl', $menuSrl);
unset($args);
// gnb item create
$gnbList = array('dashboard', 'menu', 'user', 'content', 'configuration', 'advanced');
foreach($gnbList AS $key => $value)
{
//insert menu item
$args = new stdClass();
$args->menu_srl = $menuSrl;
$args->menu_item_srl = getNextSequence();
$args->name = '{$lang->menu_gnb[\'' . $value . '\']}';
if($value == 'dashboard')
{
$args->url = 'index.php?module=admin';
}
else
{
$args->url = '#';
}
$args->listorder = -1 * $args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
}
$oMenuAdminModel = getAdminModel('menu');
$columnList = array('menu_item_srl', 'name');
$output = $oMenuAdminModel->getMenuItems($menuSrl, 0, $columnList);
if(is_array($output->data))
{
foreach($output->data AS $key => $value)
{
preg_match('/\{\$lang->menu_gnb\[(.*?)\]\}/i', $value->name, $m);
$gnbDBList[$m[1]] = $value->menu_item_srl;
}
}
unset($args);
$gnbModuleList = array(
0 => array(
'module' => 'menu',
'subMenu' => array('siteMap', 'siteDesign'),
),
1 => array(
'module' => 'member',
'subMenu' => array('userList', 'userSetting', 'userGroup'),
),
2 => array(
'module' => 'document',
'subMenu' => array('document'),
),
3 => array(
'module' => 'comment',
'subMenu' => array('comment'),
),
4 => array(
'module' => 'trackback',
'subMenu' => array('trackback'),
),
5 => array(
'module' => 'file',
'subMenu' => array('file'),
),
6 => array(
'module' => 'poll',
'subMenu' => array('poll'),
),
7 => array(
'module' => 'rss',
'subMenu' => array('rss'),
),
8 => array(
'module' => 'module',
'subMenu' => array('multilingual'),
),
9 => array(
'module' => 'importer',
'subMenu' => array('importer'),
),
10 => array(
'module' => 'trash',
'subMenu' => array('trash'),
),
11 => array(
'module' => 'autoinstall',
'subMenu' => array('easyInstall'),
),
12 => array(
'module' => 'layout',
'subMenu' => array('installedLayout'),
),
13 => array(
'module' => 'module',
'subMenu' => array('installedModule'),
),
14 => array(
'module' => 'widget',
'subMenu' => array('installedWidget'),
),
15 => array(
'module' => 'addon',
'subMenu' => array('installedAddon'),
),
16 => array(
'module' => 'editor',
'subMenu' => array('editor'),
),
17 => array(
'module' => 'spamfilter',
'subMenu' => array('spamFilter'),
),
18 => array(
'module' => 'admin',
'subMenu' => array('adminConfigurationGeneral', 'adminConfigurationFtp', 'adminMenuSetup'),
),
19 => array(
'module' => 'file',
'subMenu' => array('fileUpload'),
),
20 => array(
'module' => 'module',
'subMenu' => array('filebox'),
),
21 => array(
'module' => 'point',
'subMenu' => array('point')
),
);
$oMemberModel = getModel('member');
$output = $oMemberModel->getAdminGroup(array('group_srl'));
$adminGroupSrl = $output->group_srl;
// gnb sub item create
// common argument setting
$args = new stdClass();
$args->menu_srl = $menuSrl;
$args->open_window = 'N';
$args->expand = 'N';
$args->normal_btn = '';
$args->hover_btn = '';
$args->active_btn = '';
$args->group_srls = $adminGroupSrl;
$oModuleModel = getModel('module');
foreach($gnbModuleList AS $key => $value)
{
if(is_array($value['subMenu']))
{
$moduleActionInfo = $oModuleModel->getModuleActionXml($value['module']);
foreach($value['subMenu'] AS $key2 => $value2)
{
$gnbKey = "'" . $this->_getGnbKey($value2) . "'";
//insert menu item
$args->menu_item_srl = getNextSequence();
$args->parent_srl = $gnbDBList[$gnbKey];
$args->name = '{$lang->menu_gnb_sub[\'' . $value2 . '\']}';
$args->url = 'index.php?module=admin&act=' . $moduleActionInfo->menu->{$value2}->index;
$args->listorder = -1 * $args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
}
}
}
$oMenuAdminConroller = getAdminController('menu');
$oMenuAdminConroller->makeXmlFile($menuSrl);
// does not recreate lang cache sometimes
FileHandler::RemoveFilesInDir('./files/cache/lang');
FileHandler::RemoveFilesInDir('./files/cache/menu/admin_lang');
}
/**
* Return parent menu key by child menu
* @return string
*/
function _getGnbKey($menuName)
{
switch($menuName)
{
case 'siteMap':
case 'siteDesign':
return 'menu';
break;
case 'userList':
case 'userSetting':
case 'userGroup':
case 'point':
return 'user';
break;
case 'document':
case 'comment':
case 'trackback':
case 'file':
case 'poll':
case 'rss':
case 'multilingual':
case 'importer':
case 'trash':
case 'spamFilter':
return 'content';
break;
case 'easyInstall':
case 'installedLayout':
case 'installedModule':
case 'installedWidget':
case 'installedAddon':
case 'editor':
return 'advanced';
break;
case 'adminConfigurationGeneral':
case 'adminConfigurationFtp':
case 'adminMenuSetup':
case 'fileUpload':
case 'filebox':
return 'configuration';
break;
default:
return 'advanced';
}
}
/**
* Return parent old menu key by child menu
* @return string
*/
function _getOldGnbKey($menuName)
{
switch($menuName)
{
case 'siteMap':
return 'menu';
break;
case 'userList':
case 'userSetting':
case 'userGroup':
case 'point':
return 'user';
break;
case 'document':
case 'comment':
case 'trackback':
case 'file':
case 'poll':
case 'rss':
case 'multilingual':
case 'importer':
case 'trash':
return 'content';
break;
case 'easyInstall':
case 'installedLayout':
case 'installedModule':
case 'installedWidget':
case 'installedAddon':
case 'editor':
case 'spamFilter':
return 'extensions';
break;
case 'adminConfigurationGeneral':
case 'adminConfigurationFtp':
case 'adminMenuSetup':
case 'fileUpload':
case 'filebox':
return 'configuration';
break;
default:
return 'user_added_menu';
}
}
private function _oldAdminmenuDelete()
{
$oMenuAdminModel = getAdminModel('menu');
$output = $oMenuAdminModel->getMenuByTitle($this->adminMenuName);
$newAdminmenuSrl = $output->menu_srl;
$output = $oMenuAdminModel->getMenuItems($newAdminmenuSrl, 0);
$newAdminParentMenuList = array();
if(is_array($output->data))
{
foreach($output->data AS $key => $value)
{
$tmp = explode('\'', $value->name);
$newAdminParentMenuList[$tmp[1]] = $value;
}
}
unset($output);
// old admin menu
$output = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__');
$menuSrl = $output->menu_srl;
$oMenuAdminController = getAdminController('menu');
if($menuSrl)
{
$output = $oMenuAdminModel->getMenuItems($menuSrl);
if(is_array($output->data))
{
foreach($output->data AS $key=>$value)
$parentMenu = array();
foreach($output->data AS $key => $menuItem)
{
preg_match('/\{\$lang->menu_gnb\[(.*?)\]\}/i', $value->name, $m);
$gnbDBList[$m[1]] = $value->menu_item_srl;
}
}
unset($args);
$gnbModuleList = array(
0=>array(
'module'=>'menu',
'subMenu'=>array('siteMap'),
),
1=>array(
'module'=>'member',
'subMenu'=>array('userList', 'userSetting', 'userGroup'),
),
2=>array(
'module'=>'document',
'subMenu'=>array('document'),
),
3=>array(
'module'=>'comment',
'subMenu'=>array('comment'),
),
4=>array(
'module'=>'trackback',
'subMenu'=>array('trackback'),
),
5=>array(
'module'=>'file',
'subMenu'=>array('file'),
),
6=>array(
'module'=>'poll',
'subMenu'=>array('poll'),
),
7=>array(
'module'=>'rss',
'subMenu'=>array('rss'),
),
8=>array(
'module'=>'module',
'subMenu'=>array('multilingual'),
),
9=>array(
'module'=>'importer',
'subMenu'=>array('importer'),
),
10=>array(
'module'=>'trash',
'subMenu'=>array('trash'),
),
11=>array(
'module'=>'admin',
'subMenu'=>array('theme'),
),
12=>array(
'module'=>'autoinstall',
'subMenu'=>array('easyInstall'),
),
13=>array(
'module'=>'layout',
'subMenu'=>array('installedLayout'),
),
14=>array(
'module'=>'module',
'subMenu'=>array('installedModule'),
),
15=>array(
'module'=>'widget',
'subMenu'=>array('installedWidget'),
),
16=>array(
'module'=>'addon',
'subMenu'=>array('installedAddon'),
),
17=>array(
'module'=>'editor',
'subMenu'=>array('editor'),
),
18=>array(
'module'=>'spamfilter',
'subMenu'=>array('spamFilter'),
),
19=>array(
'module'=>'admin',
'subMenu'=>array('adminConfigurationGeneral', 'adminConfigurationFtp', 'adminMenuSetup'),
),
20=>array(
'module'=>'file',
'subMenu'=>array('fileUpload'),
),
21=>array(
'module'=>'module',
'subMenu'=>array('filebox'),
),
22=>array(
'module'=>'point',
'subMenu'=>array('point')
),
);
$oMemberModel = &getModel('member');
$output = $oMemberModel->getAdminGroup(array('group_srl'));
$adminGroupSrl = $output->group_srl;
// gnb sub item create
// common argument setting
$args->menu_srl = $menuSrl;
$args->open_window = 'N';
$args->expand = 'N';
$args->normal_btn = '';
$args->hover_btn = '';
$args->active_btn = '';
$args->group_srls = $adminGroupSrl;
$oModuleModel = &getModel('module');
foreach($gnbModuleList AS $key=>$value)
{
if(is_array($value['subMenu']))
{
$moduleActionInfo = $oModuleModel->getModuleActionXml($value['module']);
foreach($value['subMenu'] AS $key2=>$value2)
if($menuItem->parent_srl == 0)
{
$gnbKey = "'".$this->_getGnbKey($value2)."'";
//insert menu item
$args->menu_item_srl = getNextSequence();
$args->parent_srl = $gnbDBList[$gnbKey];
$args->name = '{$lang->menu_gnb_sub[\''.$value2.'\']}';
$args->url = 'index.php?module=admin&act='.$moduleActionInfo->menu->{$value2}->index;
$args->listorder = -1*$args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
$tmp = explode('\'', $menuItem->name);
$parentMenuKey = $tmp[1];
$parentMenu[$menuItem->menu_item_srl] = $parentMenuKey;
}
}
}
$oMenuAdminConroller = &getAdminController('menu');
$oMenuAdminConroller->makeXmlFile($menuSrl);
$isUserAddedMenuMoved = FALSE;
foreach($output->data AS $key => $menuItem)
{
if($menuItem->parent_srl != 0)
{
$tmp = explode('\'', $menuItem->name);
$menuKey = $tmp[1];
$result = $this->_getOldGnbKey($menuKey);
if($result == 'user_added_menu')
{
// theme menu use not anymore
/* if($parentMenu[$menuItem->parent_srl] == 'theme')
{
$newParentItem = $newAdminParentMenuList['menu'];
}
else */
if($parentMenu[$menuItem->parent_srl] == 'extensions')
{
$newParentItem = $newAdminParentMenuList['advanced'];
}
else
{
$newParentItem = $newAdminParentMenuList[$parentMenu[$menuItem->parent_srl]];
}
$menuItem->menu_srl = $newParentItem->menu_srl;
$menuItem->parent_srl = $newParentItem->menu_item_srl;
$output = executeQuery('menu.updateMenuItem', $menuItem);
$isUserAddedMenuMoved = TRUE;
}
}
}
if($isUserAddedMenuMoved)
{
$oMenuAdminController->makeXmlFile($newAdminmenuSrl);
}
}
}
/**
* Return parent menu key by child menu
* @return string
*/
function _getGnbKey($menuName)
// all old admin menu delete
$output = $oMenuAdminModel->getMenuListByTitle('__XE_ADMIN__');
if(is_array($output))
{
switch($menuName) {
case 'siteMap':
return 'menu';
break;
case 'userList':
case 'userSetting':
case 'userGroup':
case 'point':
return 'user';
break;
case 'document':
case 'comment':
case 'trackback':
case 'file':
case 'poll':
case 'rss':
case 'multilingual':
case 'importer':
case 'trash':
return 'content';
break;
case 'theme':
return 'theme';
break;
case 'easyInstall':
case 'installedLayout':
case 'installedModule':
case 'installedWidget':
case 'installedAddon':
case 'editor':
case 'spamFilter':
return 'extensions';
break;
case 'adminConfigurationGeneral':
case 'adminConfigurationFtp':
case 'adminMenuSetup':
case 'fileUpload':
case 'filebox':
return 'configuration';
break;
default:
return 'extensions';
foreach($output AS $key=>$value)
{
$oMenuAdminController->deleteMenu($value->menu_srl);
}
}
}
?>
}
}
/* End of file admin.class.php */
/* Location: ./modules/admin/admin.class.php */

View file

@ -9,7 +9,7 @@
<title xml:lang="ru">Модуль администратора</title>
<title xml:lang="zh-TW">管理員模組</title>
<title xml:lang="tr">Yönetici Modülü</title>
<description xml:lang="ko">각 모듈의 기능을 나열하고 관리자용 레이아웃을 적용하여 관리 기능을 사용할 수 있도록 하는 모듈입니다.</description>
<description xml:lang="ko">각 모듈의 기능을 나열하고 관리자용 레이아웃을 적용하여 관리 기능을 사용할 수 있도록 하는 모듈입니다.</description>
<description xml:lang="en">This module shows a list of features for each module. By applying the administrator layout it is possible to use administrator features.</description>
<description xml:lang="vi">Module này hiển thị thông tin của những Module đã được cài đặt, và cho phép bạn sử dụng quyền của Administrator để thiết lập giao diện.</description>
<description xml:lang="es">Este módulo muestra una lista de características de cada módulo, en donde puede activar la función de la administracion aplicando el diseño del administrador.</description>

View file

@ -6,13 +6,12 @@
<action name="dispAdminIndex" type="view" standalone="true" index="true" />
<action name="dispAdminConfigGeneral" type="view" standalone="true" menu_name="adminConfigurationGeneral" menu_index="true" />
<action name="dispAdminConfigFtp" type="view" standalone="true" menu_name="adminConfigurationFtp" menu_index="true" />
<action name="dispAdminTheme" type="view" standalone="true" menu_name="theme" menu_index="true" />
<action name="dispAdminSetup" type="view" standalone="true" menu_name="adminMenuSetup" menu_index="true" />
<action name="procAdminRemoveIcons" type="controller" standalone="true" />
<action name="procAdminRecompileCacheFile" type="controller" standalone="true" />
<action name="procAdminLogout" type="controller" standalone="true" />
<action name="procAdminInsertThemeInfo" type="controller" standalone="true" ruleset="insertThemeInfo" />
<action name="procAdminLogout" type="controller" standalone="true" method="GET|POST" />
<action name="procAdminInsertDefaultDesignInfo" type="controller" />
<action name="procAdminToggleFavorite" type="controller" ruleset="toggleFavorite" />
<action name="procAdminEnviromentGatheringAgreement" type="controller" standalone="true" />
<action name="procAdminUpdateConfig" type="controller" standalone="true" />
@ -20,6 +19,7 @@
<action name="procAdminMenuReset" type="controller" />
<action name="getAdminFTPList" type="model" standalone="true" />
<action name="getAdminFTPPath" type="model" standalone="true" />
<action name="getSiteAllList" type="model" standalone="true" />
</actions>
<menus>
@ -62,18 +62,5 @@
<title xml:lang="mn">FTP Configuration</title>
<title xml:lang="tr">FTP Configuration</title>
</menu>
<menu name="theme" type="site">
<title xml:lang="en">Theme</title>
<title xml:lang="ko">테마</title>
<title xml:lang="zh-CN">主题</title>
<title xml:lang="jp">Theme</title>
<title xml:lang="es">Theme</title>
<title xml:lang="ru">Theme</title>
<title xml:lang="fr">Theme</title>
<title xml:lang="zh-TW">Theme</title>
<title xml:lang="vi">Theme</title>
<title xml:lang="mn">Theme</title>
<title xml:lang="tr">Theme</title>
</menu>
</menus>
</module>

View file

@ -1,5 +1,12 @@
<?xml version='1.0' encoding='UTF-8'?>
<lang>
<item name="admin">
<value xml:lang="ko"><![CDATA[관리자]]></value>
<value xml:lang="en"><![CDATA[Admin]]></value>
<value xml:lang="jp"><![CDATA[管理]]></value>
<value xml:lang="zh-CN"><![CDATA[管理员]]></value>
<value xml:lang="tr"><![CDATA[yönetim]]></value>
</item>
<item name="subtitle_primary">
<value xml:lang="ko"><![CDATA[기본]]></value>
<value xml:lang="en"><![CDATA[Primary]]></value>
@ -88,7 +95,7 @@
<value xml:lang="vi"><![CDATA[Trang chủ Admin]]></value>
</item>
<item name="control_panel">
<value xml:lang="ko"><![CDATA[제어판]]></value>
<value xml:lang="ko"><![CDATA[대시보드]]></value>
<value xml:lang="en"><![CDATA[Dashboard]]></value>
<value xml:lang="jp"><![CDATA[コントロールパネル]]></value>
<value xml:lang="zh-CN"><![CDATA[控制面板]]></value>
@ -99,21 +106,29 @@
<value xml:lang="vi"><![CDATA[Bảng điều khiển]]></value>
<value xml:lang="tr"><![CDATA[Kontrol Paneli]]></value>
</item>
<item name="site_title">
<value xml:lang="ko"><![CDATA[사이트 제목]]></value>
<value xml:lang="en"><![CDATA[Site title]]></value>
</item>
<item name="start_module">
<value xml:lang="ko"><![CDATA[시작 모듈]]></value>
<value xml:lang="en"><![CDATA[Default Module]]></value>
<value xml:lang="jp"><![CDATA[初期起動モジュール]]></value>
<value xml:lang="zh-CN"><![CDATA[首页模块]]></value>
<value xml:lang="zh-TW"><![CDATA[預設首頁]]></value>
<value xml:lang="fr"><![CDATA[Start Module]]></value>
<value xml:lang="ru"><![CDATA[Стартовый модуль]]></value>
<value xml:lang="es"><![CDATA[Módulo de inicio]]></value>
<value xml:lang="tr"><![CDATA[Varsayılan Modül]]></value>
<value xml:lang="vi"><![CDATA[Module trang chủ]]></value>
<value xml:lang="ko"><![CDATA[홈페이지]]></value>
<value xml:lang="en"><![CDATA[Homepage]]></value>
<value xml:lang="jp"><![CDATA[Homepage]]></value>
<value xml:lang="zh-CN"><![CDATA[Homepage]]></value>
<value xml:lang="zh-TW"><![CDATA[Homepage]]></value>
<value xml:lang="fr"><![CDATA[Homepage]]></value>
<value xml:lang="ru"><![CDATA[Homepage]]></value>
<value xml:lang="es"><![CDATA[Homepage]]></value>
<value xml:lang="tr"><![CDATA[Homepage]]></value>
<value xml:lang="vi"><![CDATA[Homepage]]></value>
</item>
<item name="about_site_title">
<value xml:lang="ko"><![CDATA[세부 설정에서 사이트제목을 설정하지 않았을 경우 노출되는 제목입니다.]]></value>
<value xml:lang="en"><![CDATA[세부 설정에서 사이트제목을 설정하지 않았을 경우 노출되는 제목입니다.]]></value>
</item>
<item name="about_start_module">
<value xml:lang="ko"><![CDATA[사이트 접속 시 기본으로 호출될 모듈을 지정할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[You can specify the default module for the site.]]></value>
<value xml:lang="ko"><![CDATA[사이트 접속 시 기본으로 호출될 페이지 지정할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[You can specify the default page for the site.]]></value>
<value xml:lang="jp"><![CDATA[サイトへ接続した際にデフォルトで起動するモジュールを指定することができます。]]></value>
<value xml:lang="zh-CN"><![CDATA[可指定用户访问网站时的默认首页模块。]]></value>
<value xml:lang="zh-TW"><![CDATA[可將所選擇的模組作為預設首頁。]]></value>
@ -148,16 +163,16 @@
<value xml:lang="vi"><![CDATA[Module Type]]></value>
</item>
<item name="select_module_instance">
<value xml:lang="ko"><![CDATA[모듈 선택]]></value>
<value xml:lang="en"><![CDATA[Module]]></value>
<value xml:lang="jp"><![CDATA[Module]]></value>
<value xml:lang="zh-CN"><![CDATA[Module]]></value>
<value xml:lang="zh-TW"><![CDATA[Module]]></value>
<value xml:lang="fr"><![CDATA[Module]]></value>
<value xml:lang="ru"><![CDATA[модуль]]></value>
<value xml:lang="es"><![CDATA[Módulo]]></value>
<value xml:lang="tr"><![CDATA[Modül]]></value>
<value xml:lang="vi"><![CDATA[Module]]></value>
<value xml:lang="ko"><![CDATA[페이지 선택]]></value>
<value xml:lang="en"><![CDATA[Page]]></value>
<value xml:lang="jp"><![CDATA[Page]]></value>
<value xml:lang="zh-CN"><![CDATA[Page]]></value>
<value xml:lang="zh-TW"><![CDATA[Page]]></value>
<value xml:lang="fr"><![CDATA[Page]]></value>
<value xml:lang="ru"><![CDATA[Page]]></value>
<value xml:lang="es"><![CDATA[Page]]></value>
<value xml:lang="tr"><![CDATA[Page]]></value>
<value xml:lang="vi"><![CDATA[Page]]></value>
</item>
<item name="module_category_title" type="array">
<item name="service">
@ -268,14 +283,14 @@
</item>
<item name="menu_gnb" type="array">
<item name="dashboard">
<value xml:lang="ko"><![CDATA[제어판]]></value>
<value xml:lang="ko"><![CDATA[대시보드]]></value>
<value xml:lang="en"><![CDATA[Dashboard]]></value>
<value xml:lang="jp"><![CDATA[ダッシュボード]]></value>
<value xml:lang="zh-CN"><![CDATA[控制面板]]></value>
<value xml:lang="tr"><![CDATA[Kontrol Paneli]]></value>
</item>
<item name="menu">
<value xml:lang="ko"><![CDATA[사이트]]></value>
<value xml:lang="ko"><![CDATA[사이트 제작/편집]]></value>
<value xml:lang="en"><![CDATA[Menu]]></value>
<value xml:lang="jp"><![CDATA[サイト]]></value>
<value xml:lang="zh-CN"><![CDATA[目录]]></value>
@ -295,20 +310,6 @@
<value xml:lang="zh-CN"><![CDATA[内容]]></value>
<value xml:lang="tr"><![CDATA[içerik]]></value>
</item>
<item name="theme">
<value xml:lang="ko"><![CDATA[테마]]></value>
<value xml:lang="en"><![CDATA[Theme]]></value>
<value xml:lang="jp"><![CDATA[テーマ]]></value>
<value xml:lang="zh-CN"><![CDATA[主题]]></value>
<value xml:lang="tr"><![CDATA[Tema]]></value>
</item>
<item name="extensions">
<value xml:lang="ko"><![CDATA[확장기능]]></value>
<value xml:lang="en"><![CDATA[Extensions]]></value>
<value xml:lang="jp"><![CDATA[拡張機能]]></value>
<value xml:lang="zh-CN"><![CDATA[扩展]]></value>
<value xml:lang="tr"><![CDATA[Eklentiler]]></value>
</item>
<item name="configuration">
<value xml:lang="ko"><![CDATA[설정]]></value>
<value xml:lang="en"><![CDATA[Settings]]></value>
@ -316,6 +317,14 @@
<value xml:lang="zh-CN"><![CDATA[设置]]></value>
<value xml:lang="tr"><![CDATA[Ayarlar]]></value>
</item>
<item name="advanced">
<value xml:lang="ko"><![CDATA[고급]]></value>
<value xml:lang="en"><![CDATA[Advanced]]></value>
</item>
</item>
<item name="advanced_settings">
<value xml:lang="ko"><![CDATA[고급 설정]]></value>
<value xml:lang="en"><![CDATA[Advanced Settings]]></value>
</item>
<item name="newest_news">
<value xml:lang="ko"><![CDATA[최신 소식]]></value>
@ -406,7 +415,7 @@
<value xml:lang="vi"><![CDATA[Phiên bản mới nhất]]></value>
</item>
<item name="about_download_link">
<value xml:lang="ko"><![CDATA[최신 버전이 배포되었습니다. download 링크를 클릭하시면 다운 받으실 수 있습니다.]]></value>
<value xml:lang="ko"><![CDATA[최신 버전이 배포되었습니다. download 링크를 클릭하면 다운 받을 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[New version of XE is now available! Please click the download link to get the latest version.]]></value>
<value xml:lang="jp"><![CDATA[新しいバージョンが配布されています。「ダウンロード」リンクをクリックするとダウンロードできます。]]></value>
<value xml:lang="zh-CN"><![CDATA[官方网站已发布最新版本XE。请点击[下载]链接下载最新版本。]]></value>
@ -417,18 +426,6 @@
<value xml:lang="tr"><![CDATA[Zeroboard XE'nin yeni sürümü yayımlandı! Lütfen son sürümü için indirme linkine tıklayınız.]]></value>
<value xml:lang="vi"><![CDATA[Đã có phiên bản mới nhất của XE. Hãy bấm vào Link để Download.]]></value>
</item>
<item name="item_module">
<value xml:lang="ko"><![CDATA[모듈 목록]]></value>
<value xml:lang="en"><![CDATA[Module List]]></value>
<value xml:lang="jp"><![CDATA[モジュールリスト]]></value>
<value xml:lang="zh-CN"><![CDATA[模块目录]]></value>
<value xml:lang="zh-TW"><![CDATA[模組列表]]></value>
<value xml:lang="fr"><![CDATA[Liste des Modules]]></value>
<value xml:lang="ru"><![CDATA[Список модулей]]></value>
<value xml:lang="es"><![CDATA[Lista de Módulos]]></value>
<value xml:lang="tr"><![CDATA[Modül Listesi]]></value>
<value xml:lang="vi"><![CDATA[Danh sách Module]]></value>
</item>
<item name="item_addon">
<value xml:lang="ko"><![CDATA[애드온 목록]]></value>
<value xml:lang="en"><![CDATA[Addon List]]></value>
@ -585,7 +582,7 @@
<value xml:lang="vi"><![CDATA[Chào mừng bạn đến với trang quản lý của XE!]]></value>
</item>
<item name="about_lang_env">
<value xml:lang="ko"><![CDATA[처음 방문하는 사용자들의 언어 설정을 동일하게 하려면, 원하는 언어로 변경 후 아래 [저장] 버튼을 클릭하면 됩니다.]]></value>
<value xml:lang="ko"><![CDATA[처음 방문하는 사용자들의 언어 설정을 동일하게 하려면, 원하는 언어로 변경 후 아래 [저장] 버튼을 클릭하면 됩니다.]]></value>
<value xml:lang="en"><![CDATA[To set the selected language as the default language, click the Save button.]]></value>
<value xml:lang="jp"><![CDATA[初めてサイトに訪問したユーザーに、上記での選択言語でサイトを表示させるためには、必ず下記の「保存」ボタンをクリックして適用してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[可以设置显示给首次访问者的同一语言环境。修改语言环境后请点击 [保存] 按钮进行保存。]]></value>
@ -608,18 +605,6 @@
<value xml:lang="tr"><![CDATA[XE LGPL ile uyumludur]]></value>
<value xml:lang="vi"><![CDATA[XE sử dụng giấy phép LGPL]]></value>
</item>
<item name="about_shortcut">
<value xml:lang="ko"><![CDATA[자주 사용하는 모듈에 등록된 모듈의 바로가기를 삭제할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[You may remove shortcuts of modules which are registered on frequently used module list.]]></value>
<value xml:lang="jp"><![CDATA[よく使うモジュールに登録されているモジュールのショートカットは、削除できます。]]></value>
<value xml:lang="zh-CN"><![CDATA[可以删除添加到常用模块中的快捷菜单。]]></value>
<value xml:lang="zh-TW"><![CDATA[可以刪除新增到常用模組中的快速選單。]]></value>
<value xml:lang="fr"><![CDATA[Vous pouvez supprimer les raccourcis pour les modules qui sont enrgistrés sur le liste des modules qui sont utilisés fréquemment]]></value>
<value xml:lang="ru"><![CDATA[Вы можете удалить ярлыки модулей, зарегистрированных в списке часто используемых модулей]]></value>
<value xml:lang="es"><![CDATA[Puede Eliminar los accesos directos de módulos, los cuales fueron registrados en la lista de módulos usados frecuentemente]]></value>
<value xml:lang="tr"><![CDATA[Sık kullanılan modüller listesine kaydedilmiş modüllerin kısayollarını silebilirsiniz.]]></value>
<value xml:lang="vi"><![CDATA[Bạn có thể loại bỏ phím tắt của Module được sử dụng thường xuyên trên danh sách.]]></value>
</item>
<item name="yesterday">
<value xml:lang="ko"><![CDATA[어제]]></value>
<value xml:lang="en"><![CDATA[Yesterday]]></value>
@ -640,18 +625,13 @@
<value xml:lang="tr"><![CDATA[Bugün]]></value>
<value xml:lang="vi"><![CDATA[Hôm nay]]></value>
</item>
<item name="about_lang_select">
<value xml:lang="ko"><![CDATA[지원할 언어를 설정하세요.]]></value>
<value xml:lang="en"><![CDATA[Select the supporting language(s).]]></value>
<value xml:lang="jp"><![CDATA[サポート言語を選択してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[选择语言]]></value>
<value xml:lang="tr"><![CDATA[Yardımcı dilleri seçin.]]></value>
</item>
<item name="about_default_lang">
<value xml:lang="ko"><![CDATA[기본 언어를 선택하세요.]]></value>
<item name="default_lang">
<value xml:lang="ko"><![CDATA[기본 언어 선택]]></value>
<value xml:lang="en"><![CDATA[Select default language.]]></value>
<value xml:lang="zh-CN"><![CDATA[默认语言]]></value>
<value xml:lang="tr"><![CDATA[Varsayılan dili seçin.]]></value>
</item>
<item name="lang_select">
<value xml:lang="ko"><![CDATA[지원 언어 선택]]></value>
<value xml:lang="en"><![CDATA[Select the supporting language(s).]]></value>
</item>
<item name="about_recompile_cache">
<value xml:lang="ko"><![CDATA[쓸모 없어졌거나 잘못된 캐시파일들을 지우시겠습니까?]]></value>
@ -667,15 +647,15 @@
<value xml:lang="tr"><![CDATA[Bu işlem biraz uzun sürebilir. Başlatmak istiyor musunuz?]]></value>
</item>
<item name="use_ssl">
<value xml:lang="ko"><![CDATA[SSL(Secure Sockets Layer, 보안접속)을 사용하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Do you want to use Secure Sockets Layer (SSL)?]]></value>
<value xml:lang="jp"><![CDATA[SSL(Secure Sockets Layer)を使用しますか?]]></value>
<value xml:lang="zh-CN"><![CDATA[是否使用SSL安全连接?]]></value>
<value xml:lang="tr"><![CDATA[SSL(Secure Sockets Layer)'i kullanmak istiyor musunuz?]]></value>
<value xml:lang="ko"><![CDATA[<abbr title="Secure Sockets Layer">SSL</abbr> 사용]]></value>
<value xml:lang="en"><![CDATA[Use <abbr title="Secure Sockets Layer">SSL</abbr>]]></value>
<value xml:lang="jp"><![CDATA[<abbr title="Secure Sockets Layer">SSL</abbr>を使用]]></value>
<value xml:lang="zh-CN"><![CDATA[是否使用<abbr title="Secure Sockets Layer">SSL</abbr>安全连接?]]></value>
<value xml:lang="tr"><![CDATA[<abbr title="Secure Sockets Layer">SSL</abbr>'i kullanmak istiyor musunuz?]]></value>
</item>
<item name="ssl_options" type="array">
<item name="none">
<value xml:lang="ko"><![CDATA[사용 안함]]></value>
<value xml:lang="ko"><![CDATA[사용안함]]></value>
<value xml:lang="en"><![CDATA[Never]]></value>
<value xml:lang="jp"><![CDATA[使わない]]></value>
<value xml:lang="zh-CN"><![CDATA[不使用]]></value>
@ -712,16 +692,16 @@
</item>
</item>
<item name="about_use_ssl">
<value xml:lang="ko"><![CDATA['선택적으로'는 회원가입, 정보수정 등의 지정된 동작(action)에서 보안접속(SSL)을 사용합니다.<br /> '항상 사용'은 모든 서비스에 SSL을 사용 합니다.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="en"><![CDATA[Select 'Optional' to use SSL for the specified actions such as signing up and changing information.<br /> 'Always' to use SSL for all services.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="jp"><![CDATA[「部分的に使う」は、「会員登録/会員情報変更」など指定のアクションでSSLを利用する場合。「常に使う」は、すべてのサービスにSSLを使う場合に選択します。<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="zh-CN"><![CDATA[选择性使用选项应用于新用户注册/修改用户信息等已指定的action当中使用选项应用于所有服务。<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇手動時,在會員註冊或修改資料等動作時才會使用 SSL功能。<br/>選擇開啟時,所有的服務都會使用 SSL功能。<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="fr"><![CDATA[Si l'on choisit 'Optionnel' , on utilise protocole SSL seulement dans quelques services comme inscription ou modification. Si l'on choisit 'Toujours', on utilise protocole SSL dans tous les services.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="ru"><![CDATA[In case of "Optional", SSL will be used for actions such as signing up / changing information. And for "Always", your site will be served only via https<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="es"><![CDATA[Opcionalmente, la composición de suscripción / editar la información y el uso de SSL especificada en la acción es siempre el uso de SSL para todos los servicios que se utilizarán<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="tr"><![CDATA['İsteği Bağlı' seçiminde; SSL, kayıt olma/bilgi değiştirme gibi eylemler için kullanılacaktır. 'Her zaman' seçiminde, siteniz sadece http yoluyla hizmet verecektir.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="vi"><![CDATA[Nếu bạn chọn 'Tùy chỉnh', SSL sẽ sử dụng và những công việc như đăng kí, sửa thông tin thành viên, .<br />Chỉ chọn 'Luôn luôn' khi Website của bạn đang chạy trên Server có hỗ trợ https.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="ko"><![CDATA['선택적으로'는 회원가입, 정보수정 등의 지정된 동작(action)에서 보안접속(SSL)을 사용합니다. '항상 사용'은 모든 서비스에 SSL을 사용 합니다. SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
<value xml:lang="en"><![CDATA[Select 'Optional' to use SSL for the specified actions such as signing up and changing information. 'Always' to use SSL for all services. SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
<value xml:lang="jp"><![CDATA[「部分的に使う」は、「会員登録/会員情報変更」など指定のアクションでSSLを利用する場合。「常に使う」は、すべてのサービスにSSLを使う場合に選択します。 SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
<value xml:lang="zh-CN"><![CDATA[选择性使用选项应用于新用户注册/修改用户信息等已指定的action当中使用选项应用于所有服务。 SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇手動時,在會員註冊或修改資料等動作時才會使用 SSL功能。 選擇開啟時,所有的服務都會使用 SSL功能。 SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
<value xml:lang="fr"><![CDATA[Si l'on choisit 'Optionnel' , on utilise protocole SSL seulement dans quelques services comme inscription ou modification. Si l'on choisit 'Toujours', on utilise protocole SSL dans tous les services. SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
<value xml:lang="ru"><![CDATA[In case of "Optional", SSL will be used for actions such as signing up / changing information. And for "Always", your site will be served only via https SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
<value xml:lang="es"><![CDATA[Opcionalmente, la composición de suscripción / editar la información y el uso de SSL especificada en la acción es siempre el uso de SSL para todos los servicios que se utilizarán SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
<value xml:lang="tr"><![CDATA['İsteği Bağlı' seçiminde; SSL, kayıt olma/bilgi değiştirme gibi eylemler için kullanılacaktır. 'Her zaman' seçiminde, siteniz sadece http yoluyla hizmet verecektir. SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
<value xml:lang="vi"><![CDATA[Nếu bạn chọn 'Tùy chỉnh', SSL sẽ sử dụng và những công việc như đăng kí, sửa thông tin thành viên, . Chỉ chọn 'Luôn luôn' khi Website của bạn đang chạy trên Server có hỗ trợ https. SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
</item>
<item name="server_ports">
<value xml:lang="ko"><![CDATA[서버 포트 지정]]></value>
@ -739,7 +719,7 @@
<value xml:lang="en"><![CDATA[If your web server does not use 80 for HTTP or 443 for HTTPS port, you should specify server ports.]]></value>
<value xml:lang="jp"><![CDATA[一般的に使われているHTTPの80、HTTPSの443以外の他のポートを使うには、ポートを指定してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[使用除HTTP80, HTTPS443以外的端口时必须得指定该服务器端口号。]]></value>
<value xml:lang="zh-TW"><![CDATA[HTTP、HTTPS預設埠口分別是『80』、『443』<br />如果想使用其他的埠口的話,請自行設定。]]></value>
<value xml:lang="zh-TW"><![CDATA[HTTP、HTTPS預設埠口分別是『80』、『443』 如果想使用其他的埠口的話,請自行設定。]]></value>
<value xml:lang="fr"><![CDATA[Si l'on ne veut pas utiliser le port 80 pour HTTP mais un autre port, ou bien, si l'on ne veut pas utiliser le port 443 pour HTTPS mais un autre port, on doit déclarer les ports.]]></value>
<value xml:lang="es"><![CDATA[80 de HTTP, HTTPS al puerto 443 si se utiliza otro que se especifique lo contrario, el puerto va a necesitar.]]></value>
<value xml:lang="tr"><![CDATA[Eğer web sunucunuz, HTTP bağlantı noktaları için 80 ya da HTTPS 443 portunu kullanmıyorsa, sunucu bağlantı noktalarını belirtmeniz gerekmektedir.]]></value>
@ -755,15 +735,15 @@
<value xml:lang="vi"><![CDATA[Xác nhận Database]]></value>
</item>
<item name="about_db_session">
<value xml:lang="ko"><![CDATA[인증 시 사용되는 PHP 세션을 DB로 사용하는 기능입니다.<br/>웹서버의 사용률이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다.<br/>단, 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.]]></value>
<value xml:lang="en"><![CDATA[This setting will use PHP session used for authentication as DB.<br/>For the Websites which do not use web server frequently, you can uncheck this setting to improve response time.<br/>However, session DB will make it difficult to get current users, so you cannot use related functions.]]></value>
<value xml:lang="jp"><![CDATA[認証の際に使われるPHPセッションをDBで使う機能です。<br />ウェブサーバーの負荷が低いサイトではこの機能をオフにすることでむしろサイトのレスポンスが向上されることもあります。<br />ただし、この機能をオンにすると、「現在ログイン中の会員」の機能を利用できなくなります。]]></value>
<value xml:lang="zh-CN"><![CDATA[用DB储存认证时的PHP会话。<br/>服务器使用率较少的网站建议不要勾选此项(可提高网站访问速度)。<br/>只是无法统计在线会员。]]></value>
<value xml:lang="zh-TW"><![CDATA[使用 PHP session進行 DB認證。<br/>關閉此功能對於負荷較低的網站可提高效率。<br/>使用此功能會無法統計線上人數。]]></value>
<value xml:lang="fr"><![CDATA[This setting will use PHP session used for authentication as DB.<br/>For the Websites which do not use web server frequently, you can uncheck this setting to improve response time.<br/>However, session DB will make it difficult to get current users, so you cannot use related functions.]]></value>
<value xml:lang="ru"><![CDATA[It will use php session with DB when authenticating.<br/>Websites with infrequent usage of web server may expect faster response when this function is disabled.<br/>However session DB will make it unable to get current users, so you cannot use related functions]]></value>
<value xml:lang="es"><![CDATA[This setting will use PHP session used for authentication as DB.<br/>For the Websites which do not use web server frequently, you can uncheck this setting to improve response time.<br/>However, session DB will make it difficult to get current users, so you cannot use related functions.]]></value>
<value xml:lang="tr"><![CDATA[Yetersiz web sunucusu kullanımı olan websiteleri için, bu özellik devredışı bırakıldığı zaman daha hızlı bir tepki beklenebilir.<br/>Ancak oturum veritabanı, mevcut kullanıcılar için veritabanını erişilemez hâle getirecektir ve ilgili işler kullanılamaz hale gelecektir.]]></value>
<value xml:lang="ko"><![CDATA[인증 시 사용되는 PHP 세션을 DB로 사용하는 기능입니다. 웹서버의 사용률이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다. 단, 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.]]></value>
<value xml:lang="en"><![CDATA[This setting will use PHP session used for authentication as DB. For the Websites which do not use web server frequently, you can uncheck this setting to improve response time. However, session DB will make it difficult to get current users, so you cannot use related functions.]]></value>
<value xml:lang="jp"><![CDATA[認証の際に使われるPHPセッションをDBで使う機能です。 ウェブサーバーの負荷が低いサイトではこの機能をオフにすることでむしろサイトのレスポンスが向上されることもあります。 ただし、この機能をオンにすると、「現在ログイン中の会員」の機能を利用できなくなります。]]></value>
<value xml:lang="zh-CN"><![CDATA[用DB储存认证时的PHP会话。 服务器使用率较少的网站建议不要勾选此项(可提高网站访问速度)。 只是无法统计在线会员。]]></value>
<value xml:lang="zh-TW"><![CDATA[使用 PHP session進行 DB認證。 關閉此功能對於負荷較低的網站可提高效率。 使用此功能會無法統計線上人數。]]></value>
<value xml:lang="fr"><![CDATA[This setting will use PHP session used for authentication as DB. For the Websites which do not use web server frequently, you can uncheck this setting to improve response time. However, session DB will make it difficult to get current users, so you cannot use related functions.]]></value>
<value xml:lang="ru"><![CDATA[It will use php session with DB when authenticating. Websites with infrequent usage of web server may expect faster response when this function is disabled. However session DB will make it unable to get current users, so you cannot use related functions]]></value>
<value xml:lang="es"><![CDATA[This setting will use PHP session used for authentication as DB. For the Websites which do not use web server frequently, you can uncheck this setting to improve response time. However, session DB will make it difficult to get current users, so you cannot use related functions.]]></value>
<value xml:lang="tr"><![CDATA[Yetersiz web sunucusu kullanımı olan websiteleri için, bu özellik devredışı bırakıldığı zaman daha hızlı bir tepki beklenebilir. Ancak oturum veritabanı, mevcut kullanıcılar için veritabanını erişilemez hâle getirecektir ve ilgili işler kullanılamaz hale gelecektir.]]></value>
<value xml:lang="vi"><![CDATA[PHP sẽ xác nhận với Database. Có thể cải thiện được tốc độ của Website.]]></value>
</item>
<item name="qmail_compatibility">
@ -801,6 +781,10 @@
<value xml:lang="tr"><![CDATA[FTP Bilgisini Sil.]]></value>
<value xml:lang="vi"><![CDATA[Xóa thông tin FTP.]]></value>
</item>
<item name="msg_find_xe_path_fail">
<value xml:lang="ko"><![CDATA[XE 설치 경로를 자동으로 찾지 못하였습니다. 수동 설정해주세요.]]></value>
<value xml:lang="en"><![CDATA[Failed to search XE installed path. Please set manually.]]></value>
</item>
<item name="msg_ftp_invalid_path">
<value xml:lang="ko"><![CDATA[FTP 경로(Path)를 읽을 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[Failed to read the specified FTP Path.]]></value>
@ -810,17 +794,17 @@
<value xml:lang="tr"><![CDATA[Belirtilen FTP Yolunu okuma işlemi başarız oldu.]]></value>
<value xml:lang="vi"><![CDATA[Không tìm thấy thông tin của thư mục bạn đã nhập trên FTP.]]></value>
</item>
<item name="about_use_ftp_passive_mode">
<value xml:lang="ko"><![CDATA[Passive 모드 사용하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Use FTP Passive Mode?]]></value>
<value xml:lang="jp"><![CDATA[Passiveモードを使用しますか?]]></value>
<item name="use_ftp_passive_mode">
<value xml:lang="ko"><![CDATA[Passive 모드 사용]]></value>
<value xml:lang="en"><![CDATA[Use FTP Passive Mode]]></value>
<value xml:lang="jp"><![CDATA[Passiveモードを使用]]></value>
<value xml:lang="zh-CN"><![CDATA[使用FTP被动模式?]]></value>
<value xml:lang="tr"><![CDATA[Pasif mod FTP'sini kullanmak istiyor musunuz?]]></value>
</item>
<item name="about_use_sftp_support">
<value xml:lang="ko"><![CDATA[SFTP 를 사용하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Use SFTP?]]></value>
<value xml:lang="zh-CN"><![CDATA[使用SFTP?]]></value>
<item name="use_sftp_support">
<value xml:lang="ko"><![CDATA[SFTP 사용]]></value>
<value xml:lang="en"><![CDATA[Use SFTP]]></value>
<value xml:lang="zh-CN"><![CDATA[使用SFTP]]></value>
<value xml:lang="tr"><![CDATA[SFTP'yi kullanmak istiyor musunuz?]]></value>
</item>
<item name="disable_sftp_support">
@ -896,13 +880,6 @@
<value xml:lang="zh-CN"><![CDATA[执行]]></value>
<value xml:lang="tr"><![CDATA[Yürütme]]></value>
</item>
<item name="select_module_id">
<value xml:lang="ko"><![CDATA[모듈 아이디를 선택하세요.]]></value>
<value xml:lang="en"><![CDATA[Select a module ID.]]></value>
<value xml:lang="jp"><![CDATA[モジュールIDを選択してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[选择Module ID]]></value>
<value xml:lang="tr"><![CDATA[Modül ID'sini seçin.]]></value>
</item>
<item name="use_cdn">
<value xml:lang="ko"><![CDATA[CDN 사용]]></value>
<value xml:lang="en"><![CDATA[Use CDN]]></value>
@ -910,56 +887,40 @@
<value xml:lang="zh-CN"><![CDATA[开启CDN]]></value>
<value xml:lang="tr"><![CDATA[CDN Kullanımı]]></value>
</item>
<item name="about_use_rewrite">
<value xml:lang="ko"><![CDATA[짧은 주소 사용하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Do you want to use Rewrite Mod?]]></value>
<value xml:lang="jp"><![CDATA[短縮アドレスを使用しますか?]]></value>
<item name="use_rewrite">
<value xml:lang="ko"><![CDATA[짧은 주소 사용]]></value>
<value xml:lang="en"><![CDATA[Use Rewrite Mode]]></value>
<value xml:lang="jp"><![CDATA[短縮アドレスを使用]]></value>
<value xml:lang="zh-CN"><![CDATA[是否开启伪静态?]]></value>
<value xml:lang="tr"><![CDATA[Kısa bir adres kullanmak istiyor musunuz?]]></value>
</item>
<item name="about_timezone">
<value xml:lang="ko"><![CDATA[현지 표준시를 설정하세요.]]></value>
<value xml:lang="en"><![CDATA[Set the local standard time.]]></value>
<value xml:lang="jp"><![CDATA[現地の標準時間を設定してください。]]></value>
<item name="timezone">
<value xml:lang="ko"><![CDATA[현지 표준시]]></value>
<value xml:lang="en"><![CDATA[The local standard time.]]></value>
<value xml:lang="jp"><![CDATA[現地の標準時間]]></value>
<value xml:lang="zh-CN"><![CDATA[设置本地时间.]]></value>
<value xml:lang="tr"><![CDATA[Yerel Zamanı ayarlayın.]]></value>
</item>
<item name="about_html_dtd">
<value xml:lang="ko"><![CDATA[HTML 규격(DTD)을 선택하세요.]]></value>
<value xml:lang="en"><![CDATA[Set HTML DTD.]]></value>
<value xml:lang="jp"><![CDATA[HTML DTDを設定してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[设置HTML DTD标签头.]]></value>
<value xml:lang="tr"><![CDATA[HTML DTD ayarlayın.]]></value>
</item>
<item name="html5">
<value xml:lang="ko"><![CDATA[HTML5]]></value>
<value xml:lang="en"><![CDATA[HTML5]]></value>
<value xml:lang="zh-CN"><![CDATA[HTML5]]></value>
<value xml:lang="tr"><![CDATA[HTML5]]></value>
</item>
<item name="xhtml_transitional">
<value xml:lang="ko"><![CDATA[XHTML 1.0 Transitional]]></value>
<value xml:lang="en"><![CDATA[XHTML 1.0 Transitional]]></value>
<value xml:lang="zh-CN"><![CDATA[XHTML 1.0 Transitional]]></value>
<value xml:lang="tr"><![CDATA[XHTML 1.0 Transitional]]></value>
</item>
<item name="about_question_mobile_view">
<value xml:lang="ko"><![CDATA[모바일 기기에서 접속할 때 모바일 페이지를 보여줄까요?]]></value>
<item name="use_mobile_view">
<value xml:lang="ko"><![CDATA[모바일 뷰 사용]]></value>
<value xml:lang="en"><![CDATA[Do you want to show the mobile page when users access the website with their mobile phone?]]></value>
<value xml:lang="jp"><![CDATA[モバイル機器で接続した際にモバイルページを表示しますか?]]></value>
<value xml:lang="zh-CN"><![CDATA[当用户使用移动终端访问页面的时候是否使用移动版?]]></value>
<value xml:lang="tr"><![CDATA[Kullanıcılar mobil aygıtları ile siteye bağlandıklarında mobil sayfaı bu kullancılara göstermek istiyor musunuz?]]></value>
</item>
<item name="about_thumbnail_type">
<value xml:lang="ko"><![CDATA[썸네일 생성 방식을 선택하세요.]]></value>
<item name="about_use_mobile_view">
<value xml:lang="ko"><![CDATA[모바일 기기로 접속시 모바일 페이지를 보여줍니다.]]></value>
</item>
<item name="thumbnail_type">
<value xml:lang="ko"><![CDATA[썸네일 생성 방식]]></value>
<value xml:lang="en"><![CDATA[Select thumbnail type.]]></value>
<value xml:lang="jp"><![CDATA[サムネイルの生成方式を選択してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[选择缩略图生成方式]]></value>
<value xml:lang="tr"><![CDATA[Bir küçük resim seçiniz.]]></value>
</item>
<item name="input_footer_script">
<value xml:lang="ko"><![CDATA[하단(footer) 스크립트 삽입]]></value>
<value xml:lang="en"><![CDATA[Input footer script]]></value>
<value xml:lang="ko"><![CDATA[하단(footer) 스크립트]]></value>
<value xml:lang="en"><![CDATA[Footer script]]></value>
<value xml:lang="zh-CN"><![CDATA[输入页脚脚本]]></value>
<value xml:lang="tr"><![CDATA[Alt (footer) Script Eklemek]]></value>
</item>
@ -983,8 +944,8 @@
<value xml:lang="zh-CN"><![CDATA[缩放]]></value>
<value xml:lang="tr"><![CDATA[Ratio(Yüzde Ayarı)]]></value>
</item>
<item name="about_admin_ip_limit">
<value xml:lang="ko"><![CDATA[관리자 페이지로 접근가능한 IP대역을 지정합니다.]]></value>
<item name="admin_ip_limit">
<value xml:lang="ko"><![CDATA[관리자 IP대역]]></value>
<value xml:lang="en"><![CDATA[Sepcify IP address band that can access the admin page.]]></value>
<value xml:lang="jp"><![CDATA[管理者ページへアクセス可能なIP帯域を指定します。]]></value>
<value xml:lang="zh-CN"><![CDATA[后台IP绑定]]></value>
@ -996,8 +957,8 @@
<value xml:lang="zh-CN"><![CDATA[本地IP地址]]></value>
<value xml:lang="tr"><![CDATA[Yerel IP adresi]]></value>
</item>
<item name="detail_about_admin_ip_limit">
<value xml:lang="ko"><![CDATA[해당 IP에 대해서만 관리자 페이지로 접근이 가능하므로 주의해주시기 바랍니다. IP대역 정보는 /files/config/db.config.php 파일에 저장됩니다. 여러개의 항목은 줄을 바꾸어 입력하세요.]]></value>
<item name="about_admin_ip_limit">
<value xml:lang="ko"><![CDATA[관리자 페이지로 접근가능한 IP대역을 지정합니다. 해당 IP에 대해서만 관리자 페이지로 접근이 가능하므로 주의 바랍니다. IP대역 정보는 /files/config/db.config.php 파일에 저장됩니다. 여러개의 항목은 줄을 바꾸어 입력하세요.]]></value>
<value xml:lang="en"><![CDATA[Please note that only the specified IP addresses can access the admin page. The information on IP address band is stored in /files/config/db.config.php. Change the line to multiple IP.]]></value>
  <value xml:lang="jp"><![CDATA[該当IPについてのみ管理者ページへアクセスできるため、注意してください。IP帯域情報は、/files/config/db.config.php ファイルに保存されます。Change the line to multiple IP.]]></value>
<value xml:lang="zh-CN"><![CDATA[请注意只有绑定的IP才能访问后台。IP信息将保存在 /files/config/db.config.php. 每行一个IP。]]></value>
@ -1010,21 +971,21 @@
<value xml:lang="tr"><![CDATA[Kolay kurulum sağlayan FTP bilgilerini girdiğinizde. FTP bilgi, dosya / config / ftp.config.php dosyasında saklanır. Kolay yükleme sizin için mümkün değilse, PHP'nin safe_mode ayarını On şeklinde değiştiriniz.]]></value>
</item>
<item name="allow_use_favicon">
<value xml:lang="ko"><![CDATA[파비콘을 사용할까요?]]></value>
<value xml:lang="ko"><![CDATA[파비콘 지정]]></value>
<value xml:lang="en"><![CDATA[Do you want to use favicon?]]></value>
<value xml:lang="jp"><![CDATA[ファビコンを使用しますか?]]></value>
<value xml:lang="zh-CN"><![CDATA[是否启用自定义favicon?]]></value>
<value xml:lang="tr"><![CDATA[Favicon'u kullanmak istiyor musunuz?]]></value>
</item>
<item name="about_use_favicon">
<value xml:lang="ko"><![CDATA[16 x 16 크기의<em>*.ico</em> 파일만 업로드 가능.]]></value>
<value xml:lang="ko"><![CDATA[16 x 16 크기의<em>*.ico</em> 파일 업로드 권장.]]></value>
<value xml:lang="en"><![CDATA[You can upload 16x16 size<em>*.ico</em> file only.]]></value>
<value xml:lang="jp"><![CDATA[16 x 16 サイズの<em>*.ico</em> ファイルのみ登録できます。]]></value>
<value xml:lang="zh-CN"><![CDATA[请上传16*16像素的<em>*.ico</em>文件.]]></value>
<value xml:lang="tr"><![CDATA[16 x 16 boyutunda<em>*.Ico</em> dosyalar yüklenebilir.]]></value>
</item>
<item name="allow_use_mobile_icon">
<value xml:lang="ko"><![CDATA[모바일 홈 화면 아이콘을 사용할까요?]]></value>
<value xml:lang="ko"><![CDATA[모바일 홈 화면 아이콘]]></value>
<value xml:lang="en"><![CDATA[Do you want to use the mobile home screen icon?]]></value>
<value xml:lang="jp"><![CDATA[モバイル待ち受け画面のアイコンを使用しますか?]]></value>
<value xml:lang="zh-CN"><![CDATA[是否启用移动版屏幕图标?]]></value>
@ -1037,12 +998,24 @@
<value xml:lang="zh-CN"><![CDATA[请上传57*57像素或者114*114像素的<em>*.png</em>文件.]]></value>
<value xml:lang="tr"><![CDATA[57 x 57 veya 114 x 114 boyutu<em>*.Png</em> dosyalar yüklenebilir.]]></value>
</item>
<item name="use_sso">
<value xml:lang="ko"><![CDATA[<abbr title="Single Sign On">SSO</abbr> 사용]]></value>
<value xml:lang="en"><![CDATA[Use <abbr title="Single Sign On">SSO</abbr>?]]></value>
<value xml:lang="jp"><![CDATA[<abbr title="Single Sign On">SSO</abbr>を使用]]></value>
<value xml:lang="zh-CN"><![CDATA[是否启用通行证<abbr title="Single Sign On">SSO</abbr>?]]></value>
<value xml:lang="tr"><![CDATA[<abbr title="Single Sign On">SSO</abbr> kullanmak ister misiniz?]]></value>
</item>
<item name="about_use_sso">
<value xml:lang="ko"><![CDATA[SSO(Single Sign On)를 사용하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Do you want to use Single Sign On (SSO)?]]></value>
<value xml:lang="jp"><![CDATA[SSO(Single Sign On)を使用しますか?]]></value>
<value xml:lang="zh-CN"><![CDATA[是否启用通行证SSO?]]></value>
<value xml:lang="tr"><![CDATA[SSO(Single Sign On) kullanmak ister misiniz?]]></value>
<value xml:lang="ko"><![CDATA[사용자가 한 번만 로그인하면 기본 사이트와 가상 사이트에 동시에 로그인이 됩니다. 가상 사이트를 사용할 때만 필요합니다.]]></value>
<value xml:lang="en"><![CDATA[SSO will enable users to sign in just once for both default and virtual site. You will need this only if you are using virtual sites.]]></value>
<value xml:lang="jp"><![CDATA[ユーザが一度のログインで基本サイトと仮想サイトに同時にログインされる機能です。 仮想サイトの機能を使用してない場合、設定する必要がありません。]]></value>
<value xml:lang="zh-CN"><![CDATA[SSO will enable users to sign in just once for both default and virtual site. You will need this only if you are using virtual sites.]]></value>
<value xml:lang="zh-TW"><![CDATA[此功能可讓用戶只需登入一次即可訪問多個網站。 使用虛擬網站,這將會是很重要的功能。]]></value>
<value xml:lang="fr"><![CDATA[SSO will enable users to sign in just once for both default and virtual site. You will need this only if you are using virtual sites.]]></value>
<value xml:lang="ru"><![CDATA[SSO will enable users to sign in just once for both default and virtual site. You will need this only if you are using virtual sites.]]></value>
<value xml:lang="es"><![CDATA[SSO will enable users to sign in just once for both default and virtual site. You will need this only if you are using virtual sites.]]></value>
<value xml:lang="tr"><![CDATA[SSO kullanıcıları, geçreli ya da sanal siteye bir kere kayıt olmakla, ikisinden de yararlandıracaktır. Bu, size sadece sanal websiteler kullandığınız durumda lazım olacaktır.]]></value>
<value xml:lang="vi"><![CDATA[SSO will enable users to sign in just once for both default and virtual site. You will need this only if you are using virtual sites.]]></value>
</item>
<item name="about_cdn">
<value xml:lang="ko"><![CDATA[XE core의 css, js 파일을 CDN으로부터 제공받으려면 체크하세요.]]></value>
@ -1065,20 +1038,6 @@
<value xml:lang="zh-CN"><![CDATA[整理sessioon]]></value>
<value xml:lang="tr"><![CDATA[Oturum temizleme]]></value>
</item>
<item name="msg_not_correct_iconname">
<value xml:lang="ko"><![CDATA[아이콘 형식이 바르지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[Invalid icon type]]></value>
<value xml:lang="jp"><![CDATA[アイコン形式が正しくありません。]]></value>
<value xml:lang="zh-CN"><![CDATA[无效的icon格式]]></value>
<value xml:lang="tr"><![CDATA[Geçerli olmayan simge biçimi.]]></value>
</item>
<item name="msg_possible_only_file">
<value xml:lang="ko"><![CDATA[파일만 업로드 가능합니다.]]></value>
<value xml:lang="en"><![CDATA[You can upload files only.]]></value>
<value xml:lang="jp"><![CDATA[ファイルのみアップロード可能です。]]></value>
<value xml:lang="zh-CN"><![CDATA[请上传文件.]]></value>
<value xml:lang="tr"><![CDATA[Sadece dosyalarını yükleyebilirsiniz.]]></value>
</item>
<item name="save">
<value xml:lang="ko"><![CDATA[저장]]></value>
<value xml:lang="en"><![CDATA[Save]]></value>
@ -1100,6 +1059,36 @@
<value xml:lang="zh-CN"><![CDATA[选择]]></value>
<value xml:lang="tr"><![CDATA[Seç]]></value>
</item>
<item name="move">
<value xml:lang="ko"><![CDATA[이동]]></value>
<value xml:lang="en"><![CDATA[Move]]></value>
<value xml:lang="jp"><![CDATA[移動]]></value>
<value xml:lang="zh-CN"><![CDATA[移动]]></value>
<value xml:lang="zh-TW"><![CDATA[搬移]]></value>
<value xml:lang="ru"><![CDATA[Перейти]]></value>
<value xml:lang="tr"><![CDATA[Taşı]]></value>
<value xml:lang="vi"><![CDATA[Di chuyển]]></value>
</item>
<item name="modify">
<value xml:lang="ko"><![CDATA[수정]]></value>
<value xml:lang="en"><![CDATA[Update]]></value>
<value xml:lang="jp"><![CDATA[修正]]></value>
<value xml:lang="zh-CN"><![CDATA[修改]]></value>
<value xml:lang="zh-TW"><![CDATA[修改]]></value>
<value xml:lang="fr"><![CDATA[Modifier]]></value>
<value xml:lang="de"><![CDATA[Ändern]]></value>
<value xml:lang="ru"><![CDATA[Изменить]]></value>
<value xml:lang="es"><![CDATA[Modificar]]></value>
<value xml:lang="tr"><![CDATA[Düzelt]]></value>
<value xml:lang="vi"><![CDATA[Thay đổi]]></value>
<value xml:lang="mn"><![CDATA[Засах]]></value>
</item>
<item name="restore">
<value xml:lang="ko"><![CDATA[복원]]></value>
<value xml:lang="en"><![CDATA[Restore]]></value>
<value xml:lang="jp"><![CDATA[復元]]></value>
<value xml:lang="zh-TW"><![CDATA[復原]]></value>
</item>
<item name="delete">
<value xml:lang="ko"><![CDATA[삭제]]></value>
<value xml:lang="en"><![CDATA[Delete]]></value>
@ -1114,34 +1103,6 @@
<value xml:lang="zh-CN"><![CDATA[添加]]></value>
<value xml:lang="tr"><![CDATA[Ekle]]></value>
</item>
<item name="theme_desc">
<value xml:lang="ko"><![CDATA[테마는 레이아웃을 포함하여 현재 설치된 모듈의 스킨을 묶은 개념입니다. 테마를 선택하면 'Skin Setting' 항목을 알아서 선택합니다. 테마 일부가 마음에 들지 않으면 'Skin Setting'에서 테마 일부를 다시 설정 할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[Theme is a set of skins for modules currently installed including layouts. When you select Theme, 'Skin Setting' is automatically selected. If you don't like some of the theme, you can edit it on 'Skin Setting'.]]></value>
<value xml:lang="jp"><![CDATA[テーマは、レイアウトを含み現在インストールされているモジュールのスキンをまとめたものです。テーマを選択すると、「スキン設定」項目が自動的に選択されます。テーマの一部が気に入らない場合は、「スキン設定」でテーマの一部を再設定できます。]]></value>
<value xml:lang="zh-CN"><![CDATA[主题是包含布局等一系列正确安装的模块的皮肤集.当选用此主题.'皮肤设置'将会被自动选用,如果你不喜欢某些主题,你可以在皮肤设定里面编辑.]]></value>
<value xml:lang="tr"><![CDATA[Kavramı birlikte modülü şu anda yüklü derileri düzeni gibi temalar. Bir tema 'Skin Setting' seçtiğinizde bir öğe seçmek için özen gösteriyoruz. Eğer beğenmezseniz geri kısmından temayı 'Skin Setting' teması bazı ayarlanabilir.]]></value>
</item>
<item name="selected_theme">
<value xml:lang="ko"><![CDATA[선택한 테마]]></value>
<value xml:lang="en"><![CDATA[Selected Theme]]></value>
<value xml:lang="jp"><![CDATA[選択したテーマ]]></value>
<value xml:lang="zh-CN"><![CDATA[已选择的主题]]></value>
<value xml:lang="tr"><![CDATA[Seçilen Tema]]></value>
</item>
<item name="no_selected_theme_desc">
<value xml:lang="ko"><![CDATA[관리자가 설정한 테마입니다. 테마를 설정하지 않은 경우 디폴트로 노출됩니다.]]></value>
<value xml:lang="en"><![CDATA[This is a defult theme specified by the administrator. If you don't specify one, this theme will be shown by default.]]></value>
<value xml:lang="jp"><![CDATA[管理者が設定したテーマです。テーマを設定しない場合、デフォルト表示されます。]]></value>
<value xml:lang="zh-CN"><![CDATA[这是管理员设定的默认主题.此主题将会默认显示.]]></value>
<value xml:lang="tr"><![CDATA[Bu tema, yönetici tarafından belirlenen varsayılan temadır. Eğer herhangi bir temayı seçmezseniz, bu tema varsayılan tema şeklinde görünecektir.]]></value>
</item>
<item name="user_define_skin_select_desc">
<value xml:lang="ko"><![CDATA[테마의 일부가 마음에 들지 않으면 스킨을 직접 선택하세요. 스킨을 직접 선택하면 'Theme Setting' 설정은 'User Defined'로 설정됩니다.]]></value>
<value xml:lang="en"><![CDATA[If you don't like some of the theme, select a skin for yourself. When you select your own skin, 'Theme Setting' is set to 'User Defined'.]]></value>
  <value xml:lang="jp"><![CDATA[テーマの一部が気に入らなかった場合、スキンを選択してください。スキンを選択すると、「テーマ設定」は、「ユーザー定義」に設定されます。]]></value>
<value xml:lang="zh-CN"><![CDATA[如果你不喜欢某些主题,请自己选择一个皮肤。当你自定义一个皮肤后,'主题设置'将关联在'用户设置'下]]></value>
<value xml:lang="tr"><![CDATA[Eğer bazı temalar hoşunuza gitmideyse o halde kendinize bir yüzey seçebilirsiniz. Kendinize ait olan bir yüzey seçtiğinizde 'Tema Ayarları' seçeneği 'Kullanıcı Kararı' şeklinde değişecektir.]]></value>
</item>
<item name="selected_layout">
<value xml:lang="ko"><![CDATA[선택한 레이아웃]]></value>
<value xml:lang="en"><![CDATA[Selected Layout]]></value>
@ -1342,7 +1303,7 @@
<value xml:lang="vi"><![CDATA[Cổng kết nối]]></value>
</item>
<item name="about_ftp_password">
<value xml:lang="ko"><![CDATA[FTP Password는 저장되지 않습니다.]]></value>
<value xml:lang="ko"><![CDATA[비밀번호는 FTP 경로 확인을 위한 FTP 접속 시 필요하며 사용 후 저장하지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[FTP password will not be stored.]]></value>
<value xml:lang="jp"><![CDATA[FTP情報は保存できません。]]></value>
<value xml:lang="zh-CN"><![CDATA[FTP密码不会被保存。]]></value>
@ -1369,7 +1330,7 @@
<value xml:lang="jp"><![CDATA[PHPのsafe_modeがOnの場合、FTP情報を登録することで、XEのインストール及び利用が可能になります。]]></value>
<value xml:lang="zh-CN"><![CDATA[当PHP的safe_mode=On时请必须输入相关FTP信息否则将无法正常安装或使用XE程序。]]></value>
<value xml:lang="zh-TW"><![CDATA[當 PHP 的安全模式(safe_mode)開啟時,請輸入相關 FTP 資訊,否則無法正常安裝或使用程式。]]></value>
<value xml:lang="fr"><![CDATA[PHP의 safe_mode가 On일 경우 FTP 정보를 입력해주셔야 XE의 설치 및 사용이 가능합니다]]></value>
<value xml:lang="fr"><![CDATA[PHP의 safe_mode가 On일 경우 FTP 정보를 입력해야 XE의 설치 및 사용이 가능합니다]]></value>
<value xml:lang="de"><![CDATA[Zur Installation und Nutzung des XEs muss die Angabe des FTPs festgestellt werden, wenn safe_mode in PHP 'An' ist.]]></value>
<value xml:lang="es"><![CDATA[Si la la variable safe_mode está activa[safe_mode=On], debe rellenar los datos de FTP para seguir instalando y usar con normalidad el XE.]]></value>
<value xml:lang="tr"><![CDATA[Eğer PHP güvenli mod ayarları etkinse, XE'yi kurmak için FTP hesap bilgilerini girmelisiniz.]]></value>
@ -1456,7 +1417,7 @@
<value xml:lang="tr"><![CDATA[FTP Yolu Bilgileri]]></value>
<value xml:lang="vi"><![CDATA[Hãy nhập thông tin đường dẫn của FTP.]]></value>
</item>
<item name="msg_ftp_installed_realpath">
<item name="ftp_installed_realpath">
<value xml:lang="ko"><![CDATA[설치된 XE의 절대경로]]></value>
<value xml:lang="en"><![CDATA[Absolute Path of XE]]></value>
<value xml:lang="jp"><![CDATA[インストールされたXEの絶対パス]]></value>
@ -1467,14 +1428,14 @@
<value xml:lang="vi"><![CDATA[Đường dẫn thư mục đã cài đặt XE]]></value>
</item>
<item name="msg_ftp_installed_ftp_realpath">
<value xml:lang="ko"><![CDATA[설치된 XE의 FTP 경로 설정]]></value>
<value xml:lang="ko"><![CDATA[설치된 XE의 FTP 경로]]></value>
<value xml:lang="en"><![CDATA[Absolute FTP Path of XE]]></value>
<value xml:lang="jp"><![CDATA[インストールされたXEのFTP絶対パス設定]]></value>
<value xml:lang="zh-CN"><![CDATA[FTP绝对路径设置]]></value>
<value xml:lang="zh-TW"><![CDATA[XE的 FTP 絕對路經]]></value>
<value xml:lang="fr"><![CDATA[설치된 XE의 FTP 절대경로 설정]]></value>
<value xml:lang="fr"><![CDATA[설치된 XE의 FTP 절대경로]]></value>
<value xml:lang="de"><![CDATA[absoluten Pfad des FTPs, in dem XE installiert ist, festlegen.]]></value>
<value xml:lang="es"><![CDATA[설치된 XE의 FTP 절대경로 설정]]></value>
<value xml:lang="es"><![CDATA[설치된 XE의 FTP 절대경로]]></value>
<value xml:lang="tr"><![CDATA[XE Salt FTP Yolu]]></value>
<value xml:lang="vi"><![CDATA[Đường dẫn tuyệt đối của thư mục cài đặt XE trên FTP]]></value>
</item>
@ -1484,4 +1445,76 @@
<value xml:lang="zh-CN"><![CDATA[管理设置]]></value>
<value xml:lang="tr"><![CDATA[Yönetici Ayarları]]></value>
</item>
<item name="open_all">
<value xml:lang="ko"><![CDATA[모두 펼치기]]></value>
<value xml:lang="en"><![CDATA[Open All]]></value>
</item>
<item name="close_all">
<value xml:lang="ko"><![CDATA[모두 접기]]></value>
<value xml:lang="en"><![CDATA[Close All]]></value>
</item>
<item name="desktop_settings">
<value xml:lang="ko"><![CDATA[PC 설정]]></value>
<value xml:lang="en"><![CDATA[PC Settings]]></value>
</item>
<item name="mobile_settings">
<value xml:lang="ko"><![CDATA[모바일 설정]]></value>
<value xml:lang="en"><![CDATA[Mobile Settings]]></value>
</item>
<item name="details">
<value xml:lang="ko"><![CDATA[자세히]]></value>
<value xml:lang="en"><![CDATA[Details]]></value>
</item>
<item name="available_new_version">
<value xml:lang="ko"><![CDATA[새 버전을 사용할 수 있습니다]]></value>
<value xml:lang="en"><![CDATA[Available new versions]]></value>
</item>
<item name="uv">
<value xml:lang="ko"><![CDATA[순 방문자]]></value>
<value xml:lang="en"><![CDATA[Unique Visitors]]></value>
</item>
<item name="pv">
<value xml:lang="ko"><![CDATA[페이지 뷰]]></value>
<value xml:lang="en"><![CDATA[Page Views]]></value>
</item>
<item name="this_week">
<value xml:lang="ko"><![CDATA[이번주]]></value>
<value xml:lang="en"><![CDATA[This Week]]></value>
</item>
<item name="next_week">
<value xml:lang="ko"><![CDATA[다음주]]></value>
<value xml:lang="en"><![CDATA[Next Week]]></value>
</item>
<item name="last_week">
<value xml:lang="ko"><![CDATA[지난주]]></value>
<value xml:lang="en"><![CDATA[Last Week]]></value>
</item>
<item name="mon">
<value xml:lang="ko"><![CDATA[월]]></value>
<value xml:lang="en"><![CDATA[Mon]]></value>
</item>
<item name="tue">
<value xml:lang="ko"><![CDATA[화]]></value>
<value xml:lang="en"><![CDATA[Tue]]></value>
</item>
<item name="wed">
<value xml:lang="ko"><![CDATA[수]]></value>
<value xml:lang="en"><![CDATA[Wed]]></value>
</item>
<item name="thu">
<value xml:lang="ko"><![CDATA[목]]></value>
<value xml:lang="en"><![CDATA[Thu]]></value>
</item>
<item name="fri">
<value xml:lang="ko"><![CDATA[금]]></value>
<value xml:lang="en"><![CDATA[Fri]]></value>
</item>
<item name="sat">
<value xml:lang="ko"><![CDATA[토]]></value>
<value xml:lang="en"><![CDATA[Sat]]></value>
</item>
<item name="sun">
<value xml:lang="ko"><![CDATA[일]]></value>
<value xml:lang="en"><![CDATA[Sun]]></value>
</item>
</lang>

View file

@ -1,5 +1,5 @@
<table name="admin_favorite">
<column name="admin_favorite_srl" type="number" size="11" notnull="notnull" primary_key="primary_key" auto_increment="auto_increment" />
<column name="admin_favorite_srl" type="number" size="11" notnull="notnull" primary_key="primary_key" />
<column name="site_srl" type="number" size="11" default="0" />
<column name="module" type="varchar" size="80" />
<column name="type" type="varchar" size="30" />

View file

@ -1,24 +1,24 @@
</div>
<div class="footer">
<!-- /BODY -->
<footer class="footer">
<p class="power">
Powered by <strong><a href="{_XE_LOCATION_SITE_}" target="_blank">XE</a></strong>. <span class="vr">|</span>
<strong>Your version</strong>: {__XE_VERSION__} <span class="vr">|</span>
<!--@if(isset($latestVersion))--><strong>Latest version</strong>: <a href="{htmlspecialchars(html_entity_decode($latestVersion->url))}" target="_blank" title="{zdate($latestVersion->date, 'Y-m-d')}">{$latestVersion->title}</a><!--@end-->
</p>
<p class="cache">
<button type="button" class="text" onclick="doResetAdminMenu();">{$lang->cmd_admin_menu_reset}</button> <span class="vr">|</span>
<button type="button" class="text" onclick="doRecompileCacheFile();">{$lang->cmd_remake_cache}</button> <span class="vr">|</span>
<button type="button" class="text" onclick="doClearSession();">{$lang->cmd_clear_session}</button> <span class="vr">|</span>
<a href="http://code.google.com/p/xe-core/issues/entry" target="_blank">{$lang->bug_report}</a>
<button type="button" class="x_btn-link" onclick="doResetAdminMenu();">{$lang->cmd_admin_menu_reset}</button> <span class="vr">|</span>
<button type="button" class="x_btn-link" onclick="doRecompileCacheFile();">{$lang->cmd_remake_cache}</button> <span class="vr">|</span>
<button type="button" class="x_btn-link" onclick="doClearSession();">{$lang->cmd_clear_session}</button> <span class="vr">|</span>
<a href="http://code.google.com/p/xe-core/issues/entry" target="_blank" style="vertical-align:middle">{$lang->bug_report}</a>
</p>
</div>
</footer>
</div>
<script type="text/javascript">
<script>
xe.current_lang = '{$lang_type}';
xe.lang.confirm_run = '{$lang->confirm_run}';
xe.lang.confirm_reset_admin_menu = '{$lang->confirm_reset_admin_menu}';
admin_menu_srl = '{$admin_menu_srl}';
</script>
<load target="./js/config.js" usecdn="true" />
<load target="../../session/tpl/js/session.js" usecdn="true" />

View file

@ -0,0 +1,69 @@
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=2, user-scalable=yes" />
<div class="x">
<p class="skipNav"><a href="#content">{$lang->skip_to_content}</a></p>
<header class="header">
<h1>
<a href="{getUrl('','module','admin')}"><img src="{getUrl('')}{$gnb_title_info->adminLogo}" alt="{$gnb_title_info->adminTitle}" /> {$gnb_title_info->adminTitle}</a>
</h1>
<p class="site"><a href="{getFullUrl('')}">{getFullUrl('')}</a></p>
<div class="account">
<ul>
<li><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminInfo', 'is_admin', 'Y', 'member_srl', $logged_info->member_srl)}">{$logged_info->email_address}</a></li>
<li><a href="{getUrl('', 'module','admin','act','procAdminLogout')}">{$lang->cmd_logout}</a></li>
<li><a href="#lang" class="lang" data-toggle>{$lang_supported[$lang_type]}</a>
<ul id="lang" class="x_dropdown-menu">
<li loop="$lang_supported=>$key,$val" class="x_active"|cond="$key==$lang_type"><a href="{getUrl('l',$key)}" data-langcode="{$key}" onclick="doChangeLangType('{$key}'); return false;">{$val}</a></li>
</ul>
</li>
</ul>
</div>
</header>
<!-- BODY -->
<div class="body <!--@if($_COOKIE['__xe_admin_gnb_status'] == 'close')-->wide<!--@end-->">
<!-- GNB -->
<nav class="gnb <!--@if($_COOKIE['__xe_admin_gnb_status'] == 'open')-->open<!--@end-->" id="gnb">
<a href="#gnbNav"><i class="x_icon-align-justify x_icon-white"></i><b></b> Menu Open/Close</a>
<ul id="gnbNav" class="ex"|cond="$_COOKIE['__xe_admin_gnb_ex_status'] == 'open'">
<script>
var __xe_admin_gnb_txs = new Array();
</script>
<!--@foreach($gnbUrlList AS $key=>$value)-->
<!--@if(strstr($value['menu_name_key'], 'configuration'))-->
<li class="open"|cond="$_COOKIE['__xe_admin_gnb_tx_favorite'] == 'open'">
<script>
__xe_admin_gnb_txs.push('__xe_admin_gnb_tx_favorite');
</script>
<a href="#favorite" data-href="favorite"><span class="tx">{$lang->favorite}</span></a>
<ul id="favorite" style="display:block"|cond="$_COOKIE['__xe_admin_gnb_tx_favorite'] == 'open'">
<li loop="$favorite_list => $favorite">
<a href="{getUrl('', 'module', 'admin', 'act', $favorite->admin_index_act)}">{$favorite->title}</a>
<form class="remove" action="./" method="post">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminToggleFavorite" />
<input type="hidden" name="site_srl" value="0" />
<input type="hidden" name="module_name" value="{$favorite->module}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" class="x_close" title="{$lang->cmd_delete}">&times;</button>
</form>
</li>
<li cond="!is_array($favorite_list) || count($favorite_list) < 1"><a href="{getUrl('', 'module', 'admin', 'act', 'dispModuleAdminContent')}">{$lang->no_data}</a></li>
</ul>
<div class="exMenu">
<button type="button" title="{$lang->advanced_settings}"><i class="x_icon-chevron-down"></i><i class="x_icon-chevron-up"></i></button>
</div>
</li>
<!--@end-->
<li class="<!--@if($parentSrl==$key || $value['href']=='index.php?module=admin' && !$mid && !$act)-->active open<!--@elseif($_COOKIE['__xe_admin_gnb_tx_' . md5($value['href'])] == 'open')-->open<!--@end-->">
<script>
__xe_admin_gnb_txs.push('{'__xe_admin_gnb_tx_' . md5($value['href'])}');
</script>
<a href="{getFullUrl('')}{$value['href']}" data-href="{md5($value['href'])}"><span class="tx">{$value['text']}</span></a>
<ul cond="count($value['list'])" style="display:block"|cond="$_COOKIE['__xe_admin_gnb_tx_' . md5($value['href'])] == 'open'">
<li loop="$value['list']=>$key2,$value2" class="active_"|cond="$value2['text'] == $subMenuTitle"><a href="{getFullUrl('')}{$value2['href']}">{$value2['text']}</a></li>
</ul>
</li>
<!--@end-->
</ul>
</nav>
<!-- /GNB -->

View file

@ -1,40 +0,0 @@
{@Context::addHtmlHeader('<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=yes" />')}
<div class="x">
<p class="skipNav"><a href="#content">Skip Navigation</a></p>
<div class="header">
<h1><a href="{getUrl('','module','admin')}"><img src="{getUrl('')}{$gnb_title_info->adminLogo}" alt="{$gnb_title_info->adminTitle}" /> {$gnb_title_info->adminTitle}</a></h1>
<p class="site"><a href="{getFullUrl('')}">{getFullUrl('')}</a></p>
<div class="account">
<ul>
<li><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminInfo', 'is_admin', 'Y', 'member_srl', $logged_info->member_srl)}">{$logged_info->email_address}</a></li>
<li><a href="{getUrl('', 'module','admin','act','procAdminLogout')}">Log-out</a></li>
<li><a href="#language" class="tgAnchor language" data-effect="slide" data-duration="100">{$lang_supported[$lang_type]}</a>
<ul class="tgContent" id="language">
<li loop="$lang_supported=>$key,$val" class="selected"|cond="$key==$lang_type"><a href="{getUrl('l',$key)}" data-langcode="{$key}" onclick="doChangeLangType('{$key}'); return false;">{$val}</a></li>
</ul>
</li>
</ul>
</div>
<div class="gnb">
<ul class="nav-gnb">
<li loop="$gnbUrlList=>$key,$value" class="activeOn"|cond="$parentSrl==$key"><a href="{getFullUrl('')}{$value['href']}"><span>{$value['text']}</span></a>
<ul cond="count($value['list'])">
<li loop="$value['list']=>$key2,$value2"><a href="{getFullUrl('')}{$value2['href']}">{$value2['text']}</a></li>
</ul>
</li>
</ul>
<select class="mnv">
<block loop="$gnbUrlList=>$key,$value">
<optgroup label="{$value['text']}" cond="count($value['list']) > 0">
<option loop="$value['list']=>$key2,$value2" value="{getFullUrl('')}{$value2['href']}" selected="selected"|cond="$value2['text'] == $subMenuTitle">{$value2['text']}</option>
</optgroup>
<option cond="count($value['list']) == 0" value="{getFullUrl('')}{$value['href']}" selected="selected"|cond="!$subMenuTitle">{$value['text']}</option>
</block>
</select>
<select class="mnv">
<option>{$lang->favorite}</option>
<option loop="$favorite_list => $favorite" value="{getUrl('', 'module', 'admin', 'act', $favorite->admin_index_act)}">{$favorite->title}</option>
</select>
</div>
</div>
<div class="body">

View file

@ -1,10 +0,0 @@
<div class="lnb">
<h2 class="h2">{$gnbUrlList[$parentSrl]['text']}</h2>
<ul>
<!--@if(count($gnbUrlList[$parentSrl]['list']) > 0)-->
<!--@foreach($gnbUrlList[$parentSrl]['list'] AS $key=>$value)-->
<li <!--@if($value['text'] == $subMenuTitle)-->class="active"<!--@end-->><a href="{htmlspecialchars(html_entity_decode($value['href']))}">{$value['text']}</a></li>
<!--@end-->
<!--@end-->
</ul>
</div>

View file

@ -1,17 +0,0 @@
<div class="sct well">
<h2>{$lang->favorite}</h2>
<ul class="nav nav-list">
<li loop="$favorite_list => $favorite">
<a href="{getUrl('', 'module', 'admin', 'act', $favorite->admin_index_act)}">{$favorite->title}</a>
<form class="action" action="./">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminToggleFavorite" />
<input type="hidden" name="site_srl" value="0" />
<input type="hidden" name="module_name" value="{$favorite->module}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" class="text" title="{$lang->cmd_delete}">&times;</button>
</form>
</li>
<li cond="!is_array($favorite_list) || count($favorite_list) < 1"><a href="{getUrl('', 'module', 'admin', 'act', 'dispModuleAdminContent')}">{$lang->no_data}</a></li>
</ul>
</div>

View file

@ -0,0 +1,5 @@
<nav id="adminBar">
<h1><img src="{$favicon_url}" alt="XE" /></h1>
<p class="admin"><a href="{getUrl('', 'module','admin')}">ADMIN</a></p>
<p class="link"><a href="http://xpressengine.com/" target="_blank">xpressengine.com</a></p>
</nav>

View file

@ -1,45 +1,52 @@
<load target="./js/menu_setup.js" usecdn="true" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<div class="x_page-header">
<h1>{$lang->admin_setup} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_admin" target="_blank">{$lang->help}</a></h1>
</div>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/admin/tpl/admin_setup/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<h1 class="h1">{$lang->admin_setup}</h1>
<form action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminUpdateConfig" />
<fieldset class="section">
<h2 class="h2">{$lang->admin_title}</h2>
<ul class="form">
<li>
<p class="q"><label for="adminLogo">{$lang->admin_logo}</label></p>
<p class="a">
<!--@if($config_object->adminLogo)-->
<img src="{getUrl('').$config_object->adminLogo}" />
<button type="submit" value="procAdminDeleteLogo" name="act" class="text">{$lang->cmd_delete}</button>
<!--@else-->
<img src="{getUrl('')}{$gnb_title_info->adminLogo}" />
<!--@end-->
</p>
<p class="a"><input type="file" name="adminLogo" id="adminLogo" /></p>
</li>
<li>
<p class="q"><label for="adminTitle">{$lang->admin_title}</label></p>
<p class="a"><input type="text" name="adminTitle" id="adminTitle" value="{$config_object->adminTitle}" /></p>
</li>
</ul>
<p class="btnArea"><span class="btn small"><button value="procAdminUpdateConfig" name="act" type="submit">{$lang->cmd_save}</button></span></p>
<section class="section">
<h1>{$lang->admin_title}</h1>
<form action="./" method="post" enctype="multipart/form-data" class="x_form-horizontal">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminUpdateConfig" />
<input type="hidden" name="xe_validator_id" value="modules/admin/tpl/admin_setup/1" />
<div class="x_control-group">
<label class="x_control-label">{$lang->admin_logo}</label>
<div class="x_controls">
<!--@if($config_object->adminLogo)-->
<img src="{getUrl('').$config_object->adminLogo}" />
<button type="submit" value="procAdminDeleteLogo" name="act" class="x_btn">{$lang->cmd_delete}</button>
<!--@else-->
<img src="{getUrl('')}{$gnb_title_info->adminLogo}" />
<!--@end-->
<input type="file" name="adminLogo" id="adminLogo" />
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="adminTitle">{$lang->admin_title}</label>
<div class="x_controls">
<input type="text" name="adminTitle" id="adminTitle" value="{$config_object->adminTitle}" placeholder="XE Admin" />
</div>
</div>
<div class="x_clearfix btnArea">
<div class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
</div>
</div>
</fieldset>
</form>
<form id="listForm" action="./" class="siteMap" method="post">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procMenuAdminDeleteItem" />
<input type="hidden" name="menu_srl" value="{$menu_srl}" />
<input type="hidden" name="title" value="{$menu_title}" />
<input type="hidden" name="menu_item_srl" value="" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin', 'act', 'dispAdminSetup')}" />
<fieldset class="section">
<h2 class="h2">{$lang->admin_menu_setup}</h2>
<div class="adminMenu portlet">
<ul class="lined">
</form>
</section>
<section class="section">
<h1>{$lang->admin_menu_setup}</h1>
<form id="listForm" action="./" method="post" class="adminMap">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procMenuAdminDeleteItem" />
<input type="hidden" name="menu_srl" value="{$menu_srl}" />
<input type="hidden" name="title" value="{$menu_title}" />
<input type="hidden" name="menu_item_srl" value="" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin', 'act', 'dispAdminSetup')}" />
<ul>
<li class="parent" loop="$gnbUrlList=>$key,$value">
<input type="hidden" name="parent_key[]" value="{$value['parent_srl']}" class="_parent_key" />
<input type="hidden" name="item_key[]" value="{$value['node_srl']}" class="_item_key" />
@ -53,33 +60,57 @@
</ul>
</li>
</ul>
<p class="btnArea">
<span class="btn small" style="float: left;"><button value="procAdminMenuReset" name="act" type="submit">{$lang->cmd_reset}</button></span>
<span class="btn small"><button value="procMenuAdminArrangeItem" name="act" type="submit">{$lang->cmd_save}</button></span>
</p>
<div class="x_clearfix btnArea">
<div class="x_pull-left">
<button value="procAdminMenuReset" name="act" type="submit" class="x_btn">{$lang->cmd_reset}</button>
</div>
<div class="x_pull-right">
<button type="submit" value="procMenuAdminArrangeItem" name="act" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
</div>
</div>
</form>
</section>
<!--// Modal -->
<section class="x_modal" id="editMenu">
<form id="editForm" action="./" class="x_form-horizontal" method="POST" style="margin:0">
<div class="x_modal-header">
<h1>{$lang->admin_menu_add}</h1>
</div>
</fieldset>
</form>
<div class="modal" id="editMenu">
<div class="fg">
<form id="editForm" action="./" class="form">
<div class="x_modal-body">
<input type="hidden" name="module" value="menu" />
<input type="hidden" name="act" value="procMenuAdminInsertItemForAdminMenu" />
<input type="hidden" name="menu_srl" value="{$menu_srl}" />
<input type="hidden" name="parent_srl" value="" />
<h2 class="h2">{$lang->admin_menu_add}</h2>
<ul>
<li>
<p class="q"><label for="menuNameList">{$lang->module}</label></p>
<div class="a">
<select name="menu_name" id="menuNameList">
</select>
</div>
</li>
</ul>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_save}" /></span>
<div class="x_control-group">
<label class="x_control-label" for="menuNameList">{$lang->module}</label>
<div class="x_controls">
<select name="menu_name" id="menuNameList">
</select>
</div>
</form>
</div>
</div>
</div>
<div class="x_modal-footer">
<button type="button" class="x_btn x_pull-left" data-hide="#exModal-1">Close</button>
<span class="x_btn-group x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
</span>
</div>
</form>
</section>
<style>
.adminMap ul{background:#eee;list-style:none;margin:0;position:relative;border-radius:5px}
.adminMap li{position:relative}
.adminMap li:first-child{border:0 !important}
.adminMap li.parent{padding:0 15px 1px 15px;border-top:1px dotted #fff}
.adminMap li.parent>span{display:block;height:33px;line-height:33px;font-weight:bold}
.adminMap li>ul{background:#fff;border-radius:5px;margin:0 0 10px 0;box-shadow:0 0 4px #999 inset}
.adminMap li li{cursor:move;border-top:1px dotted #ddd}
.adminMap li *{vertical-align:middle}
.adminMap .moveTo{position:relative;z-index:2;width:22px;height:32px;padding:32px 0 0 0;margin:0 3px;_margin-top:-1px;overflow:hidden;background:url({getUrl()}modules/admin/tpl/img/iconMoveTo.gif) no-repeat center 0;border:0;cursor:move}
.adminMap li.active{background-color:#f7f7f7;border-radius:3px;box-shadow:0 0 3px #666;border:0;padding:1px 0 0 0}
.adminMap li:first-child.active{padding:0}
.adminMap li.active .moveTo{background-position:center -32px}
.adminMap .side{position:absolute;top:0;right:15px;padding-top:0 !important;padding-bottom:0 !important;line-height:30px;background:transparent !important}
.adminMap .parent>.side{right:30px}
.adminMap .placeholder{background:#000;border-radius:5px}
</style>

View file

@ -1,62 +1,126 @@
<load target="./js/config.js" usecdn="true" />
<load target="../install/lang/lang.xml" usecdn="true" />
<load target="../../session/tpl/js/session.js" usecdn="true" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
<div class="x_page-header">
<h1>{$lang->menu_gnb_sub['adminConfigurationFtp']} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_ftp" target="_blank">{$lang->help}</a></h1>
</div>
<form ruleset="installFtpInfo" action="./" method="post" id="ftp_form" class="form" enctype="multipart/form-data">
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/admin/tpl/config_ftp/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<p class="x_help-block">{$lang->detail_about_ftp_info}</p>
<form action="./" id="ftp_form" method="post" enctype="multipart/form-data" class="x_form-horizontal" ruleset="installFtpInfo">
<input type="hidden" name="module" value="install" />
<input type="hidden" name="act" value="procInstallAdminSaveFTPInfo" />
<fieldset class="section">
<h1 class="h1">{$lang->menu_gnb_sub['adminConfigurationFtp']}</h1>
<ul>
<li>
<p class="q"><label for="ftp_host">{$lang->ftp_host}</label> [<a href="#helpFTP" class="tgAnchor">?</a>]</p>
<div class="tgContent layer" id="helpFTP">
<p>{$lang->detail_about_ftp_info}</p>
</div>
<p class="a"><input type="text" name="ftp_host" id="ftp_host" value="{$ftp_info->ftp_host}" /><span class="desc">Default : 127.0.0.1</span></p>
</li>
<li>
<p class="q"><label for="ftp_user">{$lang->user_id}</label></p>
<p class="a"><input type="text" name="ftp_user" id="ftp_user" value="{$ftp_info->ftp_user}" /></p>
<li>
<p class="q"><label for="ftp_password">{$lang->password}</label></p>
<p class="a"><input type="password" name="ftp_password" id="ftp_password" value="" /> <span class="desc">{$lang->about_ftp_password}</span></p>
</li>
<li>
<p class="q"><label for="ftp_port">{$lang->ftp_port}</label></p>
<p class="a"><input type="text" name="ftp_port" id="ftp_port" value="{$ftp_info->ftp_port}" /><span class="desc">Default : 21</span></p>
</li>
<li>
<p class="q"><label>{$lang->about_use_ftp_passive_mode}</label></p>
<p class="a">
<input type="radio" name="ftp_pasv" id="ftp_passive_y" value="Y" <!--@if($ftp_info->ftp_pasv == 'Y')-->checked="checked" <!--@end-->/> <label for="ftp_passive_y">{$lang->cmd_yes}</label>
<input type="radio" name="ftp_pasv" id="ftp_passive_n" value="N" <!--@if($ftp_info->ftp_pasv != 'Y')-->checked="checked" <!--@end-->/> <label for="ftp_passive_n">{$lang->cmd_no}</label>
</p>
</li>
<li>
<p class="q"><label>{$lang->about_use_sftp_support}</label><span cond="!$sftp_support"><label> ({$lang->disable_sftp_support})</label></span></p>
<p class="a">
<input type="radio" name="sftp" id="sftp_y" value="Y" <!--@if($ftp_info->sftp == 'Y')-->checked="checked" <!--@end--><!--@if(!$sftp_support)-->disabled <!--@end-->/> <label for="sftp_y">{$lang->cmd_yes}</label>
<input type="radio" name="sftp" id="sftp_n" value="N" <!--@if($ftp_info->sftp != 'Y')-->checked="checked" <!--@end-->/> <label for="sftp_n">{$lang->cmd_no}</label>
</p>
</li>
<li>
<p class="q"><label for="ftp_root_path">{$lang->msg_ftp_installed_ftp_realpath}</label></p>
<p class="a">
<input type="hidden" name="success_return_url" value="{base64_decode($success_return_url)}" />
<input type="hidden" name="xe_validator_id" value="modules/admin/tpl/config_ftp/1" />
<section class="section">
<h1>{$lang->subtitle_primary}</h1>
<div class="x_control-group">
<label class="x_control-label" for="ftp_user">{$lang->user_id}</label>
<div class="x_controls">
<input type="text" name="ftp_user" id="ftp_user" value="{$ftp_info->ftp_user}" />
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="ftp_password">{$lang->password}</label>
<div class="x_controls">
<input type="password" name="ftp_password" id="ftp_password" value="" />
<p class="x_help-block">{$lang->about_ftp_password}</p>
</div>
</div>
<div id="__xe_path" class="x_control-group" hidden>
<label class="x_control-label" for="ftp_root_path">{$lang->msg_ftp_installed_ftp_realpath}</label>
<div class="x_controls">
<span class="x_input-append">
<input type="text" name="ftp_root_path" id="ftp_root_path" value="{$ftp_info->ftp_root_path}" />
<a href="#ftpSuggestion" onclick="getFTPList(); return false;" class="tgAnchor">{$lang->ftp_get_list}</a>
</p>
<div id="ftpSuggestion">
<a href="#ftpSuggestion" onclick="getFTPList(); return false;" class="x_btn tgAnchor">{$lang->ftp_get_list}</a>
</span>
<div id="ftpSuggestion" class="x_thumbnail">
</div>
<p class="desc">{$lang->msg_ftp_installed_realpath} : {_XE_PATH_} </p>
</li>
</ul>
</fieldset>
<div class="btnArea">
<span class="btn medium"><input type="submit" value="{$lang->cmd_save}" /></span>
<p class="x_help-block" style="margin-top:10px">{$lang->msg_ftp_installed_realpath} : {_XE_PATH_}</p>
</div>
</div>
</section>
<section class="section collapsed" style="margin-bottom:0">
<h1>{$lang->subtitle_advanced}</h1>
<div class="x_control-group">
<label class="x_control-label" for="ftp_host">{$lang->ftp_host}</label>
<div class="x_controls">
<input type="text" name="ftp_host" id="ftp_host" value="{$ftp_info->ftp_host ? $ftp_info->ftp_host : '127.0.0.1'}" /> Default : 127.0.0.1
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="ftp_port">{$lang->ftp_port}</label>
<div class="x_controls">
<input type="number" name="ftp_port" id="ftp_port" value="{$ftp_info->ftp_port ? $ftp_info->ftp_port : '21'}" /> Default : 21
</div>
</div>
<div class="x_control-group">
<div class="x_control-label">{$lang->use_ftp_passive_mode}</div>
<div class="x_controls">
<label class="x_inline" for="ftp_passive_y">
<input type="radio" name="ftp_pasv" id="ftp_passive_y" value="Y" checked="checked"|cond="$ftp_info->ftp_pasv == 'Y'" />
{$lang->cmd_yes}
</label>
<label class="x_inline" for="ftp_passive_n">
<input type="radio" name="ftp_pasv" id="ftp_passive_n" value="N" checked="checked"|cond="$ftp_info->ftp_pasv != 'Y'" />
{$lang->cmd_no}
</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="sftp_n">{$lang->use_sftp_support}</label>
<div class="x_controls">
<label class="x_inline" for="sftp_y"><input type="radio" name="sftp" id="sftp_y" value="Y" checked="checked"|cond="$ftp_info->sftp == 'Y'" disabled|cond="!$sftp_support" />{$lang->cmd_yes}</label>
<label class="x_inline" for="sftp_n"><input type="radio" name="sftp" id="sftp_n" value="N" checked="checked"|cond="$ftp_info->sftp != 'Y'" /> {$lang->cmd_no}</label>
<p class="x_help-black" cond="!$sftp_support">{$lang->disable_sftp_support}</p>
</div>
</div>
</section>
<div class="btnArea" style="margin-top:0">
<input type="submit" value="{$lang->cmd_save}" class="x_btn x_btn-primary x_pull-right" />
</div>
</form>
</form>
<style>
#ftpSuggestion{padding:8px 15px;margin:2px 0;position:absolute;background:#fff;box-shadow:1px 1px 1px #eee;width:188px;z-index:99}
#ftpSuggestion ul{margin:0;padding:0;list-style:none}
#ftpSuggestion button{overflow:visible;padding:0;background:none;border:0;display:block;width:100%;text-align:left}
#ftpSuggestion button:hover,
#ftpSuggestion button:focus{font-weight:bold}
</style>
<script>
jQuery(function($){
$('#ftp_form').submit(function(){
if($(this).data('found')){
return true;
}
$('input[name="ftp_root_path"]').val('');
param = {
'ftp_user': $('#ftp_user').val(),
'ftp_password': $('#ftp_password').val(),
'ftp_host': $('#ftp_host').val(),
'ftp_port': $('#ftp_port').val(),
'ftp_pasv': $('input:radio[name="ftp_pasv"]:checked').val(),
'sftp': $('input:radio[name="sftp"]:checked').val()
}
$.exec_json('admin.getAdminFTPPath', param, function(data){
if(data.error) return;
if(!data.found_path){
alert('{$lang->msg_find_xe_path_fail}');
$('#__xe_path').show();
$('#ftp_form').data('found', true);
return;
}
$('input[name="ftp_root_path"]').val(data.found_path);
$('#ftp_form').data('found', true).submit();
});
return false;
});
});
</script>

View file

@ -1,256 +1,242 @@
<script type="text/javascript">
jQuery(function($){
$('#favicon').change(function(){
var re_favicon = /[^.]+\.ico$/
if(re_favicon.test($(this).val()) != true){
alert('*.ico {$lang->msg_possible_only_file}');
return false;
}
});
$('#mobicon').change(function(){
var re_favicon = /[^.]+\.png$/
if(re_favicon.test($(this).val()) != true){
alert('*.png {$lang->msg_possible_only_file}');
return false;
}
});
});
</script>
<load target="./js/config.js" usecdn="true" />
<load target="../install/lang/lang.xml" usecdn="true" />
<load target="../../session/tpl/js/session.js" usecdn="true" />
<script>
jQuery(function($){
$('.moduleSearch').bind('moduleSelect', function(e, aSelected){
var sType, sName, sSrl;
sType = aSelected[0].type;
sName = aSelected[0].browser_title;
sSrl = aSelected[0].module_srl;
$('#_target_module').val(sName);
$('#index_module_srl').val(sSrl);
});
});
</script>
<form action="./" method="post" id="ftp_form" class="form" enctype="multipart/form-data">
<input type="hidden" name="module" value="install" />
<input type="hidden" name="act" value="procInstallAdminConfig" />
<h1 class="h1">{$lang->menu_gnb_sub['adminConfigurationGeneral']}</h1>
<fieldset class="section">
<h2 class="h2">{$lang->subtitle_primary}</h2>
<ul>
<li class="modulefinder moduleSearch">
<p class="q">{$lang->about_start_module}</p>
<div class="a">
<input type="hidden" name="index_module_srl" id="index_module_srl" value="{$start_module->index_module_srl}" />
<input type="text" name="_target_module" id="_target_module" value="{$start_module->browser_title} ({$start_module->mid})" readonly />
<a href="#moduleSearchWindow" class="tgAnchor moduleSearch">{$lang->cmd_find}</a>
<div id="moduleSearchWindow" class="moduleSearchWindow tgContent">
<div class="siteList sectionDiv">
<h2>{$lang->select_site}</h2>
<div class="siteListSearchBox">
<div class="siteListSearchBoxBorder">
<div class="searchImg icon-search"></div>
<input type="text" class="siteListSearchInput" name="site_filter">
</div>
</div>
<div class="siteListUL">
<ul>
</ul>
</div>
</div>
<div class="moduleTypeList sectionDiv">
<h2>{$lang->select_module_type}</h2>
<div>
<ul class="moduleTypeListUL">
</ul>
</div>
</div>
<div class="moduleInstanceList sectionDiv">
<h2>{$lang->select_module_instance}</h2>
<div>
<select class="moduleInstanceListSelect" size="8">
</select>
</div>
<button class="btn btn_primary moduleSearch_ok">{$lang->cmd_select}</button>
</div>
</div>
</div>
</li>
<li>
<p class="q">{$lang->about_lang_select}</p>
<p class="a">
<!--@foreach($langs as $key => $val)-->
<!--@if($key==$selected_lang)-->
<input type="hidden" name="selected_lang[]" value="{$key}" />
<input type="checkbox" checked="checked" disabled="disabled" />
<label>{$val}</label>
<!--@else-->
<input type="checkbox" name="selected_lang[]" id="lang_{$key}" value="{$key}" <!--@if(isset($lang_selected[$key]))-->checked="checked" <!--@end-->/>
<label for="lang_{$key}">{$val}</label>
<!--@end-->
<!--@endforeach-->
<div class="x_page-header">
<h1>{$lang->menu_gnb_sub['adminConfigurationGeneral']} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general" target="_blank">{$lang->help}</a></h1>
</div>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/admin/tpl/config_general/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<section class="section">
<h1>{$lang->subtitle_primary}</h1>
<form action="./" method="post" enctype="multipart/form-data" id="config_form" class="x_form-horizontal">
<input type="hidden" name="module" value="install" />
<input type="hidden" name="act" value="procInstallAdminConfig" />
<input type="hidden" name="xe_validator_id" value="modules/admin/tpl/config_general/1" />
<div></div>
</form>
<div class="x_form-horizontal" id="admin_config">
<div class="x_control-group">
<label class="x_control-label">{$lang->site_title} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general_site_title" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<input type="text" name="site_title" value="{$siteTitle}" />
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="_target_module">{$lang->start_module} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general_homepage" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<input class="module_search" type="text" name="index_module_srl" value="{$start_module->index_module_srl}" />
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->lang_select}</label>
<div class="x_controls">
<label for="lang_{$key}" class="x_inline" loop="$langs=>$key,$val">
<input type="checkbox" name="selected_lang[]" id="lang_{$key}" value="{$key}" disabled="disabled"|cond="$key==$selected_lang" checked="checked"|cond="isset($lang_selected[$key])" />
{$val}
<input type="hidden" name="selected_lang[]" id="lang_{$key}" value="{$key}" cond="$key==$selected_lang" />
</label>
</div>
</div>
<div class="x_control-group">
<label for="change_lang_type" class="x_control-label">{$lang->default_lang}</label>
<div class="x_controls">
<select name="change_lang_type" id="change_lang_type">
<option value="{$key}" selected="selected"|cond="$key==$selected_lang" loop="$lang_supported=>$key,$val">{$val}</option>
</select>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="time_zone">{$lang->timezone}</label>
<div class="x_controls">
<select name="time_zone" id="time_zone" style="width:auto">
<option value="{$key}" selected="selected"|cond="$time_zone==$key" loop="$time_zone_list=>$key,$val">{$val}</option>
</select>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_mobile_view} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general_mobile_view" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<label for="use_mobile_view_y" class="x_inline">
<input type="radio" name="use_mobile_view" id="use_mobile_view_y" value="Y" checked="checked"|cond="$use_mobile_view == 'Y'" />
{$lang->cmd_yes}
</label>
<label for="use_mobile_view_n" class="x_inline">
<input type="radio" name="use_mobile_view" id="use_mobile_view_n" value="N" checked="checked"|cond="$use_mobile_view != 'Y'" />
{$lang->cmd_no}
</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->thumbnail_type}</label>
<div class="x_controls">
<label for="thumbnail_type_crop" class="x_inline">
<input type="radio" name="thumbnail_type" id="thumbnail_type_crop" value="corp" checked="checked"|cond="$thumbnail_type != 'ratio'" />
{$lang->corp}
</label>
<label for="thumbnail_type_ratio" class="x_inline">
<input type="radio" name="thumbnail_type" id="thumbnail_type_ratio" value="ratio" checked="checked"|cond="$thumbnail_type == 'ratio'" />
{$lang->ratio}
</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="htmlFooter">{$lang->input_footer_script}</label>
<div class="x_controls" style="margin-right:14px">
<textarea name="htmlFooter" id="htmlFooter" rows="4" cols="42" style="width:100%" placeholder="{$lang->detail_input_footer_script}" title="{$lang->detail_input_footer_script}">{$htmlFooter}</textarea>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->allow_use_favicon}</label>
<div class="x_controls">
<p id="faviconPreview">
<img src="{$favicon_url}" alt="favicon" class="fn1" style="width:16px;height:16px">
<img src="{$favicon_url}" alt="favicon Image" class="fn2" style="width:16px;height:16px">
</p>
</li>
<li>
<p class="q"><label for="change_lang_type">{$lang->about_default_lang}</label></p>
<p class="a">
<select name="change_lang_type" id="change_lang_type">
<!--@foreach($lang_supported as $key => $val)-->
<option value="{$key}" <!--@if($key==$selected_lang)-->selected="selected"<!--@end-->>{$val}</option>
<!--@endforeach-->
</select>
</p>
</li>
<li>
<p class="q"><label for="time_zone">{$lang->about_timezone}</label></p>
<p class="a">
<select name="time_zone" id="time_zone">
<!--@foreach($time_zone_list as $key => $val)-->
<option value="{$key}" <!--@if($time_zone==$key)-->selected="selected"<!--@end-->>{$val}</option>
<!--@endforeach-->
</select>
</p>
</li>
<li>
<p class="q">{$lang->about_question_mobile_view}</p>
<p class="a">
<input type="radio" name="use_mobile_view" id="use_mobile_view_y" value="Y" <!--@if($use_mobile_view == 'Y')-->checked="checked" <!--@end-->/> <label for="use_mobile_view_y">{$lang->cmd_yes}</label>
<input type="radio" name="use_mobile_view" id="use_mobile_view_n" value="N" <!--@if($use_mobile_view != 'Y')-->checked="checked" <!--@end-->/> <label for="use_mobile_view_n">{$lang->cmd_no}</label>
</p>
</li>
<li>
<p class="q">{$lang->about_thumbnail_type}</p>
<p class="a">
<input type="radio" name="thumbnail_type" id="thumbnail_type_crop" value="corp" <!--@if($thumbnail_type != 'ratio')-->checked="checked" <!--@end-->/>
<label for="thumbnail_type_crop">{$lang->corp}</label>
<input type="radio" name="thumbnail_type" id="thumbnail_type_ratio" value="ratio" <!--@if($thumbnail_type == 'ratio')-->checked="checked" <!--@end-->/>
<label for="thumbnail_type_ratio">{$lang->ratio}</label>
</p>
</li>
<li>
<p class="q"><label for="htmlFooter">{$lang->input_footer_script}</label>[<a href="#helpFooter" class="tgAnchor">?</a>]<p>
<div class="tgContent layer" id="helpFooter">
<p>{$lang->detail_input_footer_script}</p>
</div>
<p class="a">
<textarea name="htmlFooter" id="htmlFooter" rows="8" cols="42">{$htmlFooter}</textarea>
</p>
</li>
<li>
<p class="q">{$lang->allow_use_favicon}</p>
<p class="a faviconPreview">
<img src="{$favicon_url}" alt="favicon" width="16" height="16" class="fn1">
<img src="{$favicon_url}" alt="favicon Image" width="16" height="16" class="fn2">
<a href="javascript:deleteIcon('favicon\.ico');">{$lang->cmd_delete}</a>
</p>
<p class="a"><input type="file" name="favicon" id="favicon" title="favicon" /> <span class="desc">{$lang->about_use_favicon}</span></p>
</li>
<li>
<p class="q">{$lang->allow_use_mobile_icon}</p>
<p class="a mobiconPreview">
<label><input type="checkbox" name="is_delete_favicon" value="1" /> {$lang->cmd_delete}</label>
<form action="./" enctype="multipart/form-data" method="post" target="hiddenIframe" class="imageUpload" style="margin:0">
<input type="hidden" name="module" value="install">
<input type="hidden" name="act" value="procInstallAdminConfigIconUpload">
<p>
<input type="file" name="favicon" id="favicon" title="Mobile Home Icon"/>
<input class="x_btn" type="submit" value="{$lang->cmd_submit}" style="vertical-align:top">
</p>
</form>
<span class="x_help-block">{$lang->about_use_favicon}</span>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->allow_use_mobile_icon}</label>
<div class="x_controls">
<p id="mobiconPreview">
<img src="{$mobicon_url}" alt="Mobile Home Icon" width="32" height="32" />
<span>www</span>
<a href="javascript:deleteIcon('mobicon\.png');">{$lang->cmd_delete}</a>
</p>
<p class="a"><input type="file" name="mobicon" id="mobicon" title="Mobile Home Icon"/> <span class="desc">{$lang->detail_use_mobile_icon}</span></p>
</li>
</ul>
</fieldset>
<fieldset class="section">
<h2 class="h2">{$lang->subtitle_advanced}</h2>
<ul>
<li>
<p class="q"><label for="admin_ip_list">{$lang->about_admin_ip_limit}</label>[<a href="#helpAdminip" class="tgAnchor">?</a>]</p>
<div class="tgContent layer" id="helpAdminip">
<p>{$lang->detail_about_admin_ip_limit}</p>
</div>
<p class="a">
<textarea name="admin_ip_list" id="admin_ip_list" rows="8" cols="42">{$admin_ip_list}</textarea>
{$lang->local_ip_address} : {$IP}</p>
</li>
<li>
<p class="q"><label for="default_url">{$lang->default_url}</label>[<a href="#helpDefaulturl" class="tgAnchor">?</a>]</p>
<div class="tgContent layer" id="helpDefaulturl">
<p>{$lang->about_default_url}</p>
</div>
<p class="a"><input type="text" name="default_url" id="default_url" value="{$default_url}"/></p>
</li>
<li>
<p class="q"><label>{$lang->use_ssl}</label>[<a href="#helpUsessl" class="tgAnchor">?</a>]</p>
<div class="tgContent layer" id="helpUsessl">
<p>{$lang->about_use_ssl}</p>
</div>
<p class="a">
<!--@foreach($lang->ssl_options as $key => $val)-->
<input type="radio" name="use_ssl" id="ssl_{$key}" value="{$key}" <!--@if($use_ssl==$key)-->checked="checked" <!--@end-->/> <label for="ssl_{$key}">{$val}</label>
<!--@endforeach-->
</p>
</li>
<li>
<p class="q"><label>{$lang->server_ports}</label></p>
<p class="a">
<label for="http_port">HTTP:</label> <input type="text" name="http_port" id="http_port" size="5" value="{$http_port}" style="width:40px" />
&nbsp;&nbsp;
<label for="https_port">HTTPS:</label> <input type="text" name="https_port" id="https_port" size="5" value="{$https_port}" style="width:40px" />
</p>
</li>
<li cond="__XE_CDN_VERSION__!='%__XE_CDN_VERSION__%'">
<p class="q">{$lang->about_cdn}</p>
<p class="a">
<input type="radio" name="use_cdn" id="cdn_y" value="Y" <!--@if($use_cdn=='Y')-->checked="checked" <!--@end-->/> <label for="cdn_y">{$lang->cmd_yes}</label>
<input type="radio" name="use_cdn" id="cdn_n" value="N" <!--@if($use_cdn!='Y')-->checked="checked" <!--@end-->/> <label for="cdn_n">{$lang->cmd_no}</label>
</p>
</li>
<li>
<p class="q"><label>{$lang->about_use_rewrite}</label></p>
<p class="a">
<input type="radio" name="use_rewrite" id="use_rewrite_y" value="Y" <!--@if($use_rewrite == 'Y')-->checked="checked" <!--@end-->/> <label for="use_rewrite_y">{$lang->cmd_yes}</label>
<input type="radio" name="use_rewrite" id="use_rewrite_n" value="N" <!--@if($use_rewrite != 'Y')-->checked="checked" <!--@end-->/> <label for="use_rewrite_n">{$lang->cmd_no}</label>
</p>
</li>
<li>
<p class="q"><label>{$lang->about_use_sso}</label>[<a href="#helpUsesso" class="tgAnchor">?</a>]</p>
<div class="tgContent layer" id="helpUsesso">
<p>{$lang->about_sso}</p>
</div>
<p class="a">
<input type="radio" name="use_sso" id="sso_y" value="Y" <!--@if($use_sso=='Y')-->checked="checked" <!--@end-->/> <label for="sso_y">{$lang->cmd_yes}</label>
<input type="radio" name="use_sso" id="sso_n" value="N" <!--@if($use_sso!='Y')-->checked="checked" <!--@end-->/> <label for="sso_n">{$lang->cmd_no}</label>
</p>
</li>
<li>
<p class="q"><label>{$lang->use_db_session}</label>[<a href="#helpUsedbSession" class="tgAnchor">?</a>]</p>
<div class="tgContent layer" id="helpUsedbSession">
<p>{$lang->about_db_session}</p>
</div>
<p class="a">
<input type="radio" name="use_db_session" id="use_db_session_y" value="Y" <!--@if($use_db_session=='Y')-->checked="checked" <!--@end-->/> <label for="use_db_session_y">{$lang->cmd_yes}</label>
<input type="radio" name="use_db_session" id="use_db_session_n" value="N" <!--@if($use_db_session!='Y')-->checked="checked" <!--@end-->/> <label for="use_db_session_n">{$lang->cmd_no}</label>
</p>
</li>
<li>
<p class="q"><label>{$lang->qmail_compatibility}</label>[<a href="#helpQmail" class="tgAnchor">?</a>]</p>
<div class="tgContent layer" id="helpQmail">
<p>{$lang->about_qmail_compatibility}</p>
</div>
<p class="a">
<input type="radio" name="qmail_compatibility" id="qmail_compatibility_y" value="Y" <!--@if($qmail_compatibility=='Y')-->checked="checked" <!--@end-->/> <label for="qmail_compatibility_y">{$lang->cmd_yes}</label>
<input type="radio" name="qmail_compatibility" id="qmail_compatibility_n" value="N" <!--@if($qmail_compatibility!='Y')-->checked="checked" <!--@end-->/> <label for="qmail_compatibility_n">{$lang->cmd_no}</label>
</p>
</li>
<li>
<p class="q">{$lang->about_html_dtd}</p>
<p class="a">
<input type="radio" name="use_html5" id="xhtml" value="N" <!--@if($use_html5 != 'Y')-->checked="checked" <!--@end-->/> <label for="xhtml">{$lang->xhtml_transitional}</label>
<input type="radio" name="use_html5" id="html5" value="Y" <!--@if($use_html5 == 'Y')-->checked="checked" <!--@end-->/> <label for="html5">{$lang->html5}</label>
</p>
</li>
</ul>
</fieldset>
<div class="btnArea">
<span class="btn medium"><input type="submit" value="{$lang->cmd_save}" /></span>
<label><input type="checkbox" name="is_delete_mobicon" value="1" /> {$lang->cmd_delete}</label>
<form action="./" enctype="multipart/form-data" method="post" target="hiddenIframe" class="imageUpload" style="margin:0">
<input type="hidden" name="module" value="install">
<input type="hidden" name="act" value="procInstallAdminConfigIconUpload">
<p>
<input type="file" name="mobicon" id="mobicon" title="Mobile Home Icon"/>
<input class="x_btn" type="submit" value="{$lang->cmd_submit}" style="vertical-align:top">
</p>
</form>
<span class="x_help-block">{$lang->detail_use_mobile_icon}</span>
</div>
</div>
<div class="x_clearfix btnArea">
<div class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary" onclick="doSubmitConfig()">{$lang->cmd_save}</button>
</div>
</div>
</div>
</form>
</section>
<section class="section collapsed">
<h1>{$lang->subtitle_advanced}</h1>
<form action="./" method="post" enctype="multipart/form-data" class="x_form-horizontal">
<input type="hidden" name="module" value="install" />
<input type="hidden" name="act" value="procInstallAdminSaveTimeZone" />
<input type="hidden" name="xe_validator_id" value="modules/admin/tpl/config_general/1" />
<div class="x_control-group">
<label class="x_control-label" for="admin_ip_list">{$lang->admin_ip_limit} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general_admin_iplist" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<textarea name="admin_ip_list" id="admin_ip_list" rows="4" cols="42" placeholder="{$IP}({$lang->local_ip_address})" style="float:left;margin-right:10px">{$admin_ip_list}</textarea>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="default_url">{$lang->default_url} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general_default_url" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<input type="url" name="default_url" id="default_url" value="{$default_url}"/>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_ssl} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general_ssl" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<!--@foreach($lang->ssl_options as $key => $val)-->
<label for="ssl_{$key}" class="x_inline"><input type="radio" name="use_ssl" id="ssl_{$key}" value="{$key}" checked="checked"|cond="$use_ssl==$key" /> {$val}</label>
<!--@endforeach-->
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->server_ports}</label>
<div class="x_controls">
<label for="http_port" class="x_inline" style="margin-bottom:0;padding-top:0">HTTP: <input type="number" name="http_port" id="http_port" size="5" value="{$http_port}" /></label>
<label for="https_port" class="x_inline" style="margin-bottom:0;padding-top:0">HTTPS: <input type="number" name="https_port" id="https_port" size="5" value="{$https_port}" /></label>
</div>
</div>
<div class="x_control-group" cond="__XE_CDN_VERSION__!='%__XE_CDN_VERSION__%'">
<label class="x_control-label">{$lang->use_cdn}</label>
<div class="x_controls">
<label for="cdn_y" class="x_inline"><input type="radio" name="use_cdn" id="cdn_y" value="Y" checked="checked"|cond="$use_cdn=='Y'" /> {$lang->cmd_yes}</label>
<label for="cdn_n" class="x_inline"><input type="radio" name="use_cdn" id="cdn_n" value="N" checked="checked"|cond="$use_cdn!='Y'" /> {$lang->cmd_no}</label>
<p class="x_help-block">{$lang->about_cdn}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_rewrite}</label>
<div class="x_controls">
<label for="use_rewrite_y" class="x_inline"><input type="radio" name="use_rewrite" id="use_rewrite_y" value="Y" checked="checked"|cond="$use_rewrite == 'Y'" /> {$lang->cmd_yes}</label>
<label for="use_rewrite_n" class="x_inline"><input type="radio" name="use_rewrite" id="use_rewrite_n" value="N" checked="checked"|cond="$use_rewrite != 'Y'" /> {$lang->cmd_no}</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_sso} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general_sso" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<label for="sso_y" class="x_inline"><input type="radio" name="use_sso" id="sso_y" value="Y" checked="checked"|cond="$use_sso=='Y'" /> {$lang->cmd_yes}</label>
<label for="sso_n" class="x_inline"><input type="radio" name="use_sso" id="sso_n" value="N" checked="checked"|cond="$use_sso!='Y'" /> {$lang->cmd_no}</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_db_session} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general_db_session" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<label for="use_db_session_y" class="x_inline"><input type="radio" name="use_db_session" id="use_db_session_y" value="Y" checked="checked"|cond="$use_db_session=='Y'" /> {$lang->cmd_yes}</label>
<label for="use_db_session_n" class="x_inline"><input type="radio" name="use_db_session" id="use_db_session_n" value="N" checked="checked"|cond="$use_db_session!='Y'" /> {$lang->cmd_no}</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->qmail_compatibility} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_general_qmail" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<label for="qmail_compatibility_y" class="x_inline"><input type="radio" name="qmail_compatibility" id="qmail_compatibility_y" value="Y" checked="checked"|cond="$qmail_compatibility=='Y'" /> {$lang->cmd_yes}</label>
<label for="qmail_compatibility_n" class="x_inline"><input type="radio" name="qmail_compatibility" id="qmail_compatibility_n" value="N" checked="checked"|cond="$qmail_compatibility!='Y'" /> {$lang->cmd_no}</label>
</div>
</div>
<div class="x_clearfix btnArea">
<div class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
</div>
</div>
</form>
</section>
<iframe name="hiddenIframe" src="about:blank" hidden></iframe>
<script>
function afterUploadConfigImage(name, fileName, tmpFileName)
{
jQuery('#' + name + 'Preview img').attr('src', tmpFileName);
jQuery('#' + name).val('');
}
function alertUploadMessage(msg) {
alert(msg);
}
function doSubmitConfig()
{
var $forms = jQuery('#admin_config').find('input[name][type="hidden"], input[name][type="text"], input[name][type="checkbox"]:checked, select[name], textarea[name], input[name][type="radio"]:checked');
var $configForm = jQuery('#config_form');
var $container = $configForm.children('div');
$container.empty();
$forms.each(function($)
{
var $this = jQuery(this);
if($this.parents('.imageUpload').length) return;
var $input = jQuery('<input>').attr('type', 'hidden').attr('name', $this.attr('name')).val($this.val());
$container.append($input);
});
$configForm.submit();
}
</script>

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1 @@
#g11n .item textarea{height:40px}

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,6 @@
@charset "utf-8";
.x,
.x table,
.x input,
.x textarea,
.x select,
.x button{font-family:Tahoma,Geneva,sans-serif}
@font-face{font-family:NG;src:url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.eot);src:local(),url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.woff) format('woff')}
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:,NanumGothic,NG,,Dotum,Arial,Helvetica,sans-serif}
@media all and (max-width:980px){
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:sans-serif}
}

View file

@ -1,7 +1,6 @@
@charset "utf-8";
.x,
.x table,
.x input,
.x textarea,
.x select,
.x button{font-family:"MS PGothic",Osaka,Arial,sans-serif}
@font-face{font-family:NG;src:url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.eot);src:local(),url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.woff) format('woff')}
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:,NanumGothic,NG,,Dotum,Arial,Helvetica,sans-serif}
@media all and (max-width:980px){
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:sans-serif}
}

View file

@ -1,7 +1,6 @@
@charset "utf-8";
.x,
.x table,
.x input,
.x textarea,
.x select,
.x button{font-family:,NanumGothic,"맑은 고딕","Malgun Gothic",,Dotum,sans-serif}
@font-face{font-family:NG;src:url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.eot);src:local(),url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.woff) format('woff')}
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:,NanumGothic,NG,,Dotum,Arial,Helvetica,sans-serif}
@media all and (max-width:980px){
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:sans-serif}
}

View file

@ -0,0 +1 @@
.jqplot-target{position:relative}.jqplot-axis{font:11px Dotum,Arial,Helvetica,sans-serif;color:#666}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px 5px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin:0 0 0 25px}table.jqplot-table-legend,table.jqplot-cursor-legend{position:absolute}table.jqplot-table-legend td,table.jqplot-cursor-legend td{font:11px/15px Dotum,Arial,Helvetica,sans-serif;color:#666}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px}.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%)}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,0.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,0.3)}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

After

Width:  |  Height:  |  Size: 587 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 362 B

After

Width:  |  Height:  |  Size: 579 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

After

Width:  |  Height:  |  Size: 577 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

After

Width:  |  Height:  |  Size: 587 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

After

Width:  |  Height:  |  Size: 582 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 B

After

Width:  |  Height:  |  Size: 585 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 B

After

Width:  |  Height:  |  Size: 581 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 590 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 B

After

Width:  |  Height:  |  Size: 585 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 849 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 727 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -1,105 +1,209 @@
<include target="./_spHeader.html" />
<div class="content dashboard" id="content">
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<!--@if(!$isEnviromentGatheringAgreement)-->
<form action="./" method="post" class="message info">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminEnviromentGatheringAgreement" />
<include target="./_header.html" />
<load target="./js/excanvas.min.js" targetie="lt IE 9" />
<load target="./js/jquery.jqplot.min.js" />
<load target="./js/jqplot.barRenderer.min.js" />
<load target="./js/jqplot.categoryAxisRenderer.min.js" />
<load target="./js/jqplot.pointLabels.min.js" />
<load target="./css/jquery.jqplot.min.css" />
<div class="content" id="content">
<div class="x_page-header">
<h1>{$lang->control_panel} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_dashboard" target="_blank">{$lang->help}</a></h1>
</div>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/admin/tpl/index/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form action="./" method="post" class="message info x_clearfix" cond="!$isEnviromentGatheringAgreement">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminEnviromentGatheringAgreement" />
<input type="hidden" name="xe_validator_id" value="modules/admin/tpl/index/1" />
<h2>{$lang->install_env_agreement}</h2>
<p>{$lang->install_env_agreement_desc}</p>
<div class="btnArea">
<span class="btn"><button type="submit" name="is_agree" value="true">{$lang->agree}</button></span>
<span class="btn"><button type="submit" name="is_agree" value="false">{$lang->disagree}</button></span>
<div class="x_btn-group x_pull-right" style="margin-bottom:10px">
<button type="submit" name="is_agree" value="false" class="x_btn x_btn-small">{$lang->disagree}</button>
<button type="submit" name="is_agree" value="true" class="x_btn x_btn-small x_btn-primary">{$lang->agree}</button>
</div>
</form>
<!--@end-->
<!--@if($addTables || $needUpdate)-->
<div class="message update">
<div class="message update" cond="$addTables || $needUpdate">
<h2 cond="$needUpdate && $addTables">{$lang->need_update_and_table}</h2>
<h2 cond="$needUpdate && !$addTables">{$lang->need_update}</h2>
<h2 cond="!$needUpdate && $addTables">{$lang->need_table}</h2>
<ul>
<!--@foreach($module_list AS $key => $value)-->
<!--@if($value->need_install)-->
<li style="margin:0 0 4px 0;">{$value->module} - <span class="btn"><button type="button" onclick="doInstallModule('{$value->module}')">{$lang->cmd_create_db_table}</button></span></li>
<!--@else if($value->need_update)-->
<li style="margin:0 0 4px 0;">{$value->module} - <span class="btn"><button type="button" onclick="doUpdateModule('{$value->module}')">{$lang->cmd_module_update}</button></span></li>
<!--@end-->
<!--@end-->
<block loop="$module_list => $key,$value">
<li style="margin:0 0 4px 0" cond="$value->need_install">{$value->module} - <button type="button" onclick="doInstallModule('{$value->module}')" class="x_btn x_btn-small">{$lang->cmd_create_db_table}</button></li>
<li style="margin:0 0 4px 0" cond="$value->need_update">{$value->module} - <button type="button" onclick="doUpdateModule('{$value->module}')" class="x_btn x_btn-small">{$lang->cmd_module_update}</button></li>
</block>
</ul>
</div>
<!--@end-->
<div class="section">
<div class="portlet">
<h2 class="h2">{$lang->current_state}</h2>
<ul class="lined">
<li><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList')}">{$lang->menu_gnb['user']}</a> <span class="side">{number_format($status->member->totalCount)}(<!--@if($status->member->todayCount > 0)-->+<!--@end-->{number_format($status->member->todayCount)})</span></li>
<li><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}">{$lang->menu_gnb_sub['document']}</a> <span class="side">{number_format($status->document->totalCount)}(<!--@if($status->document->todayCount > 0)-->+<!--@end-->{number_format($status->document->todayCount)})</span></li>
<li><a href="{getUrl('', 'module', 'admin', 'act', 'dispCommentAdminList')}">{$lang->menu_gnb_sub['comment']}</a> <span class="side">{number_format($status->comment->totalCount)}(<!--@if($status->comment->todayCount > 0)-->+<!--@end-->{$status->comment->todayCount})</span></li>
<li><a href="{getUrl('', 'module', 'admin', 'act', 'dispTrackbackAdminList')}">{$lang->menu_gnb_sub['trackback']}</a> <span class="side">{number_format($status->trackback->totalCount)}(<!--@if($status->trackback->todayCount > 0)-->+<!--@end-->{$status->trackback->todayCount})</span></li>
<li><a href="{getUrl('', 'module', 'admin', 'act', 'dispFileAdminList')}">{$lang->menu_gnb_sub['file']}</a> <span class="side">{number_format($status->file->totalCount)}(<!--@if($status->file->todayCount > 0)-->+<!--@end-->{number_format($status->file->todayCount)})</span></li>
</ul>
<div class="message update" cond="count($newVersionList)">
<h2>{$lang->available_new_version}</h2>
<ul>
<li loop="$newVersionList => $key, $package" style="margin:0 0 4px 0">
[{$lang->typename[$package->type]} <a class="x_icon-question-sign" href="{$package->helpUrl}" target="_blank" cond="$package->helpUrl">{$lang->help}</a>] {$package->title} ver. {$package->version} - <a href="{$package->url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->update}</a>
</li>
</ul>
</div>
<div class="dashboard">
<div>
<section class="status">
<h2>{$lang->uv}</h2>
<div style="margin:10px 15px;height:142px" id="visitors"></div>
<div class="more">
<dl>
<dt>{$lang->menu_gnb['user']}: </dt><dd><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList')}">{number_format($status->member->totalCount)} (<!--@if($status->member->todayCount > 0)-->+<!--@end-->{number_format($status->member->todayCount)})</a></dd>
</dl>
<a href="{getUrl('', 'module', 'admin', 'act', 'dispCounterAdminIndex')}"><i>&rsaquo;</i> {$lang->details}</a>
</div>
</section>
<section class="status">
<h2>{$lang->pv}</h2>
<div style="margin:10px 15px;height:142px" id="page_views"></div>
<div class="more">
<dl>
<dt>{$lang->menu_gnb_sub['document']}: </dt><dd><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}">{number_format($status->document->totalCount)} (<!--@if($status->document->todayCount > 0)-->+<!--@end-->{number_format($status->document->todayCount)})</a></dd>
</dl>
<a href="{getUrl('', 'module', 'admin', 'act', 'dispCounterAdminIndex')}"><i>&rsaquo;</i> {$lang->details}</a>
</div>
</section>
<style scoped>.jqplot-table-legend{background:#fff;top:13px!important}</style>
</div>
<div class="portlet">
<h2 class="h2"><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}">{$lang->latest_documents}</a></h2>
<ul class="lined">
<!--@foreach($latestDocumentList AS $key=>$value)-->
{@$document = $value->variables}
<li>
<a href="{getUrl('', 'document_srl', $document['document_srl'])}" target="_blank"><!--@if(trim($value->getTitle()))-->{$value->getTitle()}<!--@else--><strong>{$lang->no_title_document}</strong><!--@end--></a> <span class="side">{$document['nick_name']}</span>
<form class="action">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procDocumentManageCheckedDocument" />
<input type="hidden" name="cart[]" value="{$document['document_srl']}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" name="type" value="trash" class="text">{$lang->cmd_trash}</button>
<button type="submit" name="type" value="delete" class="text">{$lang->cmd_delete}</button>
</form>
</li>
<!--@end-->
<li cond="!is_array($latestDocumentList) || count($latestDocumentList) < 1">{$lang->no_data}</li>
</ul>
</div>
<div class="portlet">
<h2 class="h2"><a href="{getUrl('', 'module', 'admin', 'act', 'dispCommentAdminList')}">{$lang->latest_comments}</a></h2>
<ul class="lined">
<!--@foreach($latestCommentList AS $key=>$value)-->
<li>
<a href="{getUrl('', 'document_srl', $value->document_srl)}#comment_{$value->comment_srl}" target="_blank"><!--@if(trim($value->content))-->{$value->getSummary()}<!--@else--><strong>{$lang->no_text_comment}</strong><!--@end--></a> <span class="side">{$value->nick_name}</span>
<form class="action">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procCommentAdminDeleteChecked" />
<input type="hidden" name="cart[]" value="{$value->comment_srl}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" name="is_trash" value="true" class="text">{$lang->cmd_trash}</button>
<button type="submit" name="is_trash" value="false" class="text">{$lang->cmd_delete}</button>
</form>
</li>
<!--@end-->
<li cond="!is_array($latestCommentList) || count($latestCommentList) < 1">{$lang->no_data}</li>
</ul>
</div>
<div class="portlet">
<h2 class="h2"><a href="{getUrl('', 'module', 'admin', 'act', 'dispTrackbackAdminList')}">{$lang->latest_trackbacks}</a></h2>
<ul class="lined">
<!--@foreach($latestTrackbackList AS $key=>$value)-->
<li>
<a href="{$value->url}" target="_blank">{$value->title}</a> <span class="side">{$value->blog_name}</span>
<form class="action">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procTrackbackAdminDeleteChecked" />
<input type="hidden" name="cart[]" value="{$value->trackback_srl}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" class="text">{$lang->cmd_delete}</button>
</form>
</li>
<!--@end-->
<li cond="!is_array($latestTrackbackList) || count($latestTrackbackList) < 1">{$lang->no_data}</li>
</ul>
<div>
<section class="document">
<h2>{$lang->latest_documents}</h2>
<ul>
<li loop="$latestDocumentList => $key,$value">
{@$document = $value->variables}
<a href="{getUrl('', 'document_srl', $document['document_srl'])}" target="_blank"><!--@if(trim($value->getTitle()))-->{$value->getTitle()}<!--@else--><strong>{$lang->no_title_document}</strong><!--@end--></a>
<span class="side">{$value->getNickName()}</span>
<form class="action">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procDocumentManageCheckedDocument" />
<input type="hidden" name="cart[]" value="{$document['document_srl']}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" name="type" value="trash" class="x_icon-trash">{$lang->cmd_trash}</button>
<button type="submit" name="type" value="delete" class="x_icon-remove">{$lang->cmd_delete}</button>
</form>
</li>
<li cond="!is_array($latestDocumentList) || count($latestDocumentList) < 1">{$lang->no_data}</li>
</ul>
<p class="more"><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}"><i>&rsaquo;</i> {$lang->more}</a></p>
</section>
<section class="reply">
<h2>{$lang->latest_comments}</h2>
<ul>
<li loop="$latestCommentList => $key,$value">
<a href="{getUrl('', 'document_srl', $value->document_srl)}#comment_{$value->comment_srl}" target="_blank"><!--@if(trim($value->content))-->{$value->getSummary()}<!--@else--><strong>{$lang->no_text_comment}</strong><!--@end--></a>
<span class="side">{$value->getNickName()}</span>
<form class="action">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procCommentAdminDeleteChecked" />
<input type="hidden" name="cart[]" value="{$value->comment_srl}" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
<button type="submit" name="is_trash" value="true" class="x_icon-trash">{$lang->cmd_trash}</button>
<button type="submit" name="is_trash" value="false" class="x_icon-remove">{$lang->cmd_delete}</button>
</form>
</li>
<li cond="!is_array($latestCommentList) || count($latestCommentList) < 1">{$lang->no_data}</li>
</ul>
<p class="more"><a href="{getUrl('', 'module', 'admin', 'act', 'dispCommentAdminList')}"><i>&rsaquo;</i> {$lang->more}</a></p>
</section>
</div>
</div>
</div>
<include target="./_spShortcut.html" />
<include target="./_spFooter.html" />
<include target="./_footer.html" />
<script>
xe.lang.this_week = '{$lang->this_week}';
xe.lang.last_week = '{$lang->last_week}';
xe.lang.next_week = '{$lang->next_week}';
xe.lang.mon = '{$lang->mon}';
xe.lang.tue = '{$lang->tue}';
xe.lang.wed = '{$lang->wed}';
xe.lang.thu = '{$lang->thu}';
xe.lang.fri = '{$lang->fri}';
xe.lang.sat = '{$lang->sat}';
xe.lang.sun = '{$lang->sun}';
jQuery(function($)
{
// Dashboard portlet UI
$('.dashboard>div>section>ul>li')
.bind('mouseenter focusin', function(){
$(this).addClass('hover').find('>.action').show();
})
.bind('mouseleave focusout', function()
{
if(!$(this).find(':focus').length)
{
$(this).removeClass('hover').find('>.action').hide();
}
});
});
function obj2Array(htObj)
{
var aRes = [];
for(var x in htObj)
{
if(!htObj.hasOwnProperty(x)) continue;
aRes.push(htObj[x]);
}
return aRes;
}
jQuery(function ($)
{
$.exec_json("counter.getWeeklyUniqueVisitor", {}, function(htRes)
{
var aLastWeek = obj2Array(htRes.last_week.list);
var aThisWeek = obj2Array(htRes.this_week.list);
drawChart("visitors", "Weekly Visitors", aLastWeek, aThisWeek);
});
$.exec_json("counter.getWeeklyPageView", {}, function(htRes)
{
var aLastWeek = obj2Array(htRes.last_week.list);
var aThisWeek = obj2Array(htRes.this_week.list);
drawChart("page_views", "Weekly Page Views", aLastWeek, aThisWeek);
});
});
function drawChart(sContainerId, sTitle, aLastWeek, aThisWeek)
{
$ = jQuery;
var s1 = aLastWeek;
var s2 = aThisWeek;
// Can specify a custom tick Array.
// Ticks should match up one for each y value (category) in the series.
var ticks = [xe.lang.sun,xe.lang.mon,xe.lang.tue,xe.lang.wed,xe.lang.thu,xe.lang.fri,xe.lang.sat];
var plot1 = $.jqplot(sContainerId, [s1, s2], {
seriesDefaults:{
renderer:$.jqplot.BarRenderer,
rendererOptions: {fillToZero: true}
},
series:[
{label: xe.lang.last_week},
{label: xe.lang.this_week}
],
legend:
{
show: true,
placement: 'outsideGrid'
},
axes: {
xaxis: {
renderer: $.jqplot.CategoryAxisRenderer, ticks: ticks
},
yaxis: {
min: 0, ticks: 1, pad: 1.05
}
}
});
};
</script>

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -120,7 +120,6 @@ function doRecompileCacheFile() {
if (!confirm(xe.lang.confirm_run)) return;
var params = new Array();
exec_xml("admin","procAdminRecompileCacheFile", params, completeCacheMessage);
showWaitingFogLayer();
}
function completeCacheMessage(ret_obj) {
alert(ret_obj['message']);
@ -131,8 +130,8 @@ function doResetAdminMenu() {
var params = new Array();
params['menu_srl'] = admin_menu_srl;
exec_xml("admin","procAdminMenuReset", params, completeResetAdminMenu);
showWaitingFogLayer();
}
function completeResetAdminMenu(ret_obj) {
document.location.reload();
}

View file

@ -3,4 +3,4 @@ function getFTPList(a){var b=jQuery("#ftp_form").get(0);b.ftp_root_path.value="u
"error","message"],a,b)}function removeFTPInfo(){var a={};exec_xml("install","procInstallAdminRemoveFTPInfo",a,filterAlertMessage,["error","message"],a)}
function completeGetFtpInfo(a){if(0!=a.error)alert(a.error),alert(a.message);else{var b=jQuery("#ftpSuggestion").empty(),c="";jQuery.isArray(a.list.item)||(a.list.item=[a.list.item]);pwd=jQuery("#ftp_form").get(0).ftp_root_path.value;"/"!=pwd&&(arr=pwd.split("/"),arr.pop(),arr.pop(),arr.push(""),target=arr.join("/"),c=c+"<li><button type='button' onclick=\"getFTPList('"+target+"')\">../</button></li>");for(var e=0;e<a.list.item.length;e++){var d=a.list.item[e];"../"!=d&&"./"!=d&&(c=c+"<li><button type='button' onclick=\"getFTPList('"+
pwd+d+"')\">"+d+"</button></li>")}b.append(jQuery("<ul>"+c+"</ul>"))}}var icon=null;function deleteIcon(a){var b=[];b.iconname=a;exec_xml("admin","procAdminRemoveIcons",b,iconDeleteMessage,["error","message"],b);icon=a}function iconDeleteMessage(a){alert(a.message);"0"==a.error&&("favicon.ico"==icon?jQuery(".faviconPreview img").attr("src","modules/admin/tpl/img/faviconSample.png"):"mobicon.png"==icon&&jQuery(".mobiconPreview img").attr("src","modules/admin/tpl/img/mobiconSample.png"))}
function doRecompileCacheFile(){confirm(xe.lang.confirm_run)&&(exec_xml("admin","procAdminRecompileCacheFile",[],completeCacheMessage),showWaitingFogLayer())}function completeCacheMessage(a){alert(a.message)}function doResetAdminMenu(){if(confirm(xe.lang.confirm_reset_admin_menu)){var a=[];a.menu_srl=admin_menu_srl;exec_xml("admin","procAdminMenuReset",a,completeResetAdminMenu);showWaitingFogLayer()}}function completeResetAdminMenu(){document.location.reload()};
function doRecompileCacheFile(){confirm(xe.lang.confirm_run)&&exec_xml("admin","procAdminRecompileCacheFile",[],completeCacheMessage)}function completeCacheMessage(a){alert(a.message)}function doResetAdminMenu(){if(confirm(xe.lang.confirm_reset_admin_menu)){var a=[];a.menu_srl=admin_menu_srl;exec_xml("admin","procAdminMenuReset",a,completeResetAdminMenu)}}function completeResetAdminMenu(){document.location.reload()};

57
modules/admin/tpl/js/excanvas.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,57 @@
/**
* jqPlot
* Pure JavaScript plotting plugin using jQuery
*
* Version: 1.0.4r1121
*
* Copyright (c) 2009-2011 Chris Leonello
* jqPlot is currently available for use in all personal or commercial projects
* under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
* version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
* choose the license that best suits your project and use it accordingly.
*
* Although not required, the author would appreciate an email letting him
* know of any substantial use of jqPlot. You can reach the author at:
* chris at jqplot dot com or see http://www.jqplot.com/info.php .
*
* If you are feeling kind and generous, consider supporting the project by
* making a donation at: http://www.jqplot.com/donate.php .
*
* sprintf functions contained in jqplot.sprintf.js by Ash Searle:
*
* version 2007.04.27
* author Ash Searle
* http://hexmen.com/blog/2007/03/printf-sprintf/
* http://hexmen.com/js/sprintf.js
* The author (Ash Searle) has placed this code in the public domain:
* "This code is unrestricted: you are free to use it however you like."
*
* included jsDate library by Chris Leonello:
*
* Copyright (c) 2010-2011 Chris Leonello
*
* jsDate is currently available for use in all personal or commercial projects
* under both the MIT and GPL version 2.0 licenses. This means that you can
* choose the license that best suits your project and use it accordingly.
*
* jsDate borrows many concepts and ideas from the Date Instance
* Methods by Ken Snyder along with some parts of Ken's actual code.
*
* Ken's origianl Date Instance Methods and copyright notice:
*
* Ken Snyder (ken d snyder at gmail dot com)
* 2008-09-10
* version 2.0.2 (http://kendsnyder.com/sandbox/date/)
* Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
*
* jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
* Larry has generously given permission to adapt his code for inclusion
* into jqPlot.
*
* Larry's original code can be found here:
*
* https://github.com/lsiden/export-jqplot-to-png
*
*
*/
(function(c){c.jqplot.PointLabels=function(e){this.show=c.jqplot.config.enablePlugins;this.location="n";this.labelsFromSeries=false;this.seriesLabelIndex=null;this.labels=[];this._labels=[];this.stackedValue=false;this.ypadding=6;this.xpadding=6;this.escapeHTML=true;this.edgeTolerance=-5;this.formatter=c.jqplot.DefaultTickFormatter;this.formatString="";this.hideZeros=false;this._elems=[];c.extend(true,this,e)};var a=["nw","n","ne","e","se","s","sw","w"];var d={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var b=["se","s","sw","w","nw","n","ne","e"];c.jqplot.PointLabels.init=function(j,h,f,g,i){var e=c.extend(true,{},f,g);e.pointLabels=e.pointLabels||{};if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"&&!e.pointLabels.location){e.pointLabels.location="e"}this.plugins.pointLabels=new c.jqplot.PointLabels(e.pointLabels);this.plugins.pointLabels.setLabels.call(this)};c.jqplot.PointLabels.prototype.setLabels=function(){var f=this.plugins.pointLabels;var h;if(f.seriesLabelIndex!=null){h=f.seriesLabelIndex}else{if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"){h=0}else{h=(this._plotData.length===0)?0:this._plotData[0].length-1}}f._labels=[];if(f.labels.length===0||f.labelsFromSeries){if(f.stackedValue){if(this._plotData.length&&this._plotData[0].length){for(var e=0;e<this._plotData.length;e++){f._labels.push(this._plotData[e][h])}}}else{var g=this.data;if(this.renderer.constructor===c.jqplot.BarRenderer&&this.waterfall){g=this._data}if(g.length&&g[0].length){for(var e=0;e<g.length;e++){f._labels.push(g[e][h])}}g=null}}else{if(f.labels.length){f._labels=f.labels}}};c.jqplot.PointLabels.prototype.xOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerWidth(true)-this.xpadding;break;case"n":h=-f.outerWidth(true)/2;break;case"ne":h=this.xpadding;break;case"e":h=this.xpadding;break;case"se":h=this.xpadding;break;case"s":h=-f.outerWidth(true)/2;break;case"sw":h=-f.outerWidth(true)-this.xpadding;break;case"w":h=-f.outerWidth(true)-this.xpadding;break;default:h=-f.outerWidth(true)-this.xpadding;break}return h};c.jqplot.PointLabels.prototype.yOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerHeight(true)-this.ypadding;break;case"n":h=-f.outerHeight(true)-this.ypadding;break;case"ne":h=-f.outerHeight(true)-this.ypadding;break;case"e":h=-f.outerHeight(true)/2;break;case"se":h=this.ypadding;break;case"s":h=this.ypadding;break;case"sw":h=this.ypadding;break;case"w":h=-f.outerHeight(true)/2;break;default:h=-f.outerHeight(true)-this.ypadding;break}return h};c.jqplot.PointLabels.draw=function(x,j,v){var t=this.plugins.pointLabels;t.setLabels.call(this);for(var w=0;w<t._elems.length;w++){t._elems[w].emptyForce()}t._elems.splice(0,t._elems.length);if(t.show){var r="_"+this._stackAxis+"axis";if(!t.formatString){t.formatString=this[r]._ticks[0].formatString;t.formatter=this[r]._ticks[0].formatter}var E=this._plotData;var D=this._prevPlotData;var A=this._xaxis;var q=this._yaxis;var z,f;for(var w=0,u=t._labels.length;w<u;w++){var o=t._labels[w];if(t.hideZeros&&parseInt(t._labels[w],10)==0){o=""}if(o!=null){o=t.formatter(t.formatString,o)}f=document.createElement("div");t._elems[w]=c(f);z=t._elems[w];z.addClass("jqplot-point-label jqplot-series-"+this.index+" jqplot-point-"+w);z.css("position","absolute");z.insertAfter(x.canvas);if(t.escapeHTML){z.text(o)}else{z.html(o)}var g=t.location;if((this.fillToZero&&E[w][1]<0)||(this.fillToZero&&this._type==="bar"&&this.barDirection==="horizontal"&&E[w][0]<0)||(this.waterfall&&parseInt(o,10))<0){g=b[d[g]]}var n=A.u2p(E[w][0])+t.xOffset(z,g);var h=q.u2p(E[w][1])+t.yOffset(z,g);if(this._stack&&!t.stackedValue){if(this.barDirection==="vertical"){h=(this._barPoints[w][0][1]+this._barPoints[w][1][1])/2+v._gridPadding.top-0.5*z.outerHeight(true)}else{n=(this._barPoints[w][2][0]+this._barPoints[w][0][0])/2+v._gridPadding.left-0.5*z.outerWidth(true)}}if(this.renderer.constructor==c.jqplot.BarRenderer){if(this.barDirection=="vertical"){n+=this._barNudge}else{h-=this._barNudge}}z.css("left",n);z.css("top",h);var k=n+z.width();var s=h+z.height();var C=t.edgeTolerance;var e=c(x.canvas).position().left;var y=c(x.canvas).position().top;var B=x.canvas.width+e;var m=x.canvas.height+y;if(n-C<e||h-C<y||k+C>B||s+C>m){z.remove()}z=null;f=null}}};c.jqplot.postSeriesInitHooks.push(c.jqplot.PointLabels.init);c.jqplot.postDrawSeriesHooks.push(c.jqplot.PointLabels.draw)})(jQuery);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,484 @@
/*!
* jQuery Templates Plugin 1.0.0pre
* http://github.com/jquery/jquery-tmpl
* Requires jQuery 1.4.2
*
* Copyright 2011, Software Freedom Conservancy, Inc.
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
(function( jQuery, undefined ){
var oldManip = jQuery.fn.domManip, tmplItmAtt = "_tmplitem", htmlExpr = /^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,
newTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = [];
function newTmplItem( options, parentItem, fn, data ) {
// Returns a template item data structure for a new rendered instance of a template (a 'template item').
// The content field is a hierarchical array of strings and nested items (to be
// removed and replaced by nodes field of dom elements, once inserted in DOM).
var newItem = {
data: data || (data === 0 || data === false) ? data : (parentItem ? parentItem.data : {}),
_wrap: parentItem ? parentItem._wrap : null,
tmpl: null,
parent: parentItem || null,
nodes: [],
calls: tiCalls,
nest: tiNest,
wrap: tiWrap,
html: tiHtml,
update: tiUpdate
};
if ( options ) {
jQuery.extend( newItem, options, { nodes: [], parent: parentItem });
}
if ( fn ) {
// Build the hierarchical content to be used during insertion into DOM
newItem.tmpl = fn;
newItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem );
newItem.key = ++itemKey;
// Keep track of new template item, until it is stored as jQuery Data on DOM element
(stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem;
}
return newItem;
}
// Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core).
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function( name, original ) {
jQuery.fn[ name ] = function( selector ) {
var ret = [], insert = jQuery( selector ), elems, i, l, tmplItems,
parent = this.length === 1 && this[0].parentNode;
appendToTmplItems = newTmplItems || {};
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
insert[ original ]( this[0] );
ret = this;
} else {
for ( i = 0, l = insert.length; i < l; i++ ) {
cloneIndex = i;
elems = (i > 0 ? this.clone(true) : this).get();
jQuery( insert[i] )[ original ]( elems );
ret = ret.concat( elems );
}
cloneIndex = 0;
ret = this.pushStack( ret, name, insert.selector );
}
tmplItems = appendToTmplItems;
appendToTmplItems = null;
jQuery.tmpl.complete( tmplItems );
return ret;
};
});
jQuery.fn.extend({
// Use first wrapped element as template markup.
// Return wrapped set of template items, obtained by rendering template against data.
tmpl: function( data, options, parentItem ) {
return jQuery.tmpl( this[0], data, options, parentItem );
},
// Find which rendered template item the first wrapped DOM element belongs to
tmplItem: function() {
return jQuery.tmplItem( this[0] );
},
// Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template.
template: function( name ) {
return jQuery.template( name, this[0] );
},
domManip: function( args, table, callback, options ) {
if ( args[0] && jQuery.isArray( args[0] )) {
var dmArgs = jQuery.makeArray( arguments ), elems = args[0], elemsLength = elems.length, i = 0, tmplItem;
while ( i < elemsLength && !(tmplItem = jQuery.data( elems[i++], "tmplItem" ))) {}
if ( tmplItem && cloneIndex ) {
dmArgs[2] = function( fragClone ) {
// Handler called by oldManip when rendered template has been inserted into DOM.
jQuery.tmpl.afterManip( this, fragClone, callback );
};
}
oldManip.apply( this, dmArgs );
} else {
oldManip.apply( this, arguments );
}
cloneIndex = 0;
if ( !appendToTmplItems ) {
jQuery.tmpl.complete( newTmplItems );
}
return this;
}
});
jQuery.extend({
// Return wrapped set of template items, obtained by rendering template against data.
tmpl: function( tmpl, data, options, parentItem ) {
var ret, topLevel = !parentItem;
if ( topLevel ) {
// This is a top-level tmpl call (not from a nested template using {{tmpl}})
parentItem = topTmplItem;
tmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl );
wrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level
} else if ( !tmpl ) {
// The template item is already associated with DOM - this is a refresh.
// Re-evaluate rendered template for the parentItem
tmpl = parentItem.tmpl;
newTmplItems[parentItem.key] = parentItem;
parentItem.nodes = [];
if ( parentItem.wrapped ) {
updateWrapped( parentItem, parentItem.wrapped );
}
// Rebuild, without creating a new template item
return jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) ));
}
if ( !tmpl ) {
return []; // Could throw...
}
if ( typeof data === "function" ) {
data = data.call( parentItem || {} );
}
if ( options && options.wrapped ) {
updateWrapped( options, options.wrapped );
}
ret = jQuery.isArray( data ) ?
jQuery.map( data, function( dataItem ) {
return dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;
}) :
[ newTmplItem( options, parentItem, tmpl, data ) ];
return topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;
},
// Return rendered template item for an element.
tmplItem: function( elem ) {
var tmplItem;
if ( elem instanceof jQuery ) {
elem = elem[0];
}
while ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, "tmplItem" )) && (elem = elem.parentNode) ) {}
return tmplItem || topTmplItem;
},
// Set:
// Use $.template( name, tmpl ) to cache a named template,
// where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc.
// Use $( "selector" ).template( name ) to provide access by name to a script block template declaration.
// Get:
// Use $.template( name ) to access a cached template.
// Also $( selectorToScriptBlock ).template(), or $.template( null, templateString )
// will return the compiled template, without adding a name reference.
// If templateString includes at least one HTML tag, $.template( templateString ) is equivalent
// to $.template( null, templateString )
template: function( name, tmpl ) {
if (tmpl) {
// Compile template and associate with name
if ( typeof tmpl === "string" ) {
// This is an HTML string being passed directly in.
tmpl = buildTmplFn( tmpl );
} else if ( tmpl instanceof jQuery ) {
tmpl = tmpl[0] || {};
}
if ( tmpl.nodeType ) {
// If this is a template block, use cached copy, or generate tmpl function and cache.
tmpl = jQuery.data( tmpl, "tmpl" ) || jQuery.data( tmpl, "tmpl", buildTmplFn( tmpl.innerHTML ));
// Issue: In IE, if the container element is not a script block, the innerHTML will remove quotes from attribute values whenever the value does not include white space.
// This means that foo="${x}" will not work if the value of x includes white space: foo="${x}" -> foo=value of x.
// To correct this, include space in tag: foo="${ x }" -> foo="value of x"
}
return typeof name === "string" ? (jQuery.template[name] = tmpl) : tmpl;
}
// Return named compiled template
return name ? (typeof name !== "string" ? jQuery.template( null, name ):
(jQuery.template[name] ||
// If not in map, and not containing at least on HTML tag, treat as a selector.
// (If integrated with core, use quickExpr.exec)
jQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null;
},
encode: function( text ) {
// Do HTML encoding replacing < > & and ' and " by corresponding entities.
return ("" + text).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;");
}
});
jQuery.extend( jQuery.tmpl, {
tag: {
"tmpl": {
_default: { $2: "null" },
open: "if($notnull_1){__=__.concat($item.nest($1,$2));}"
// tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions)
// This means that {{tmpl foo}} treats foo as a template (which IS a function).
// Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}.
},
"wrap": {
_default: { $2: "null" },
open: "$item.calls(__,$1,$2);__=[];",
close: "call=$item.calls();__=call._.concat($item.wrap(call,__));"
},
"each": {
_default: { $2: "$index, $value" },
open: "if($notnull_1){$.each($1a,function($2){with(this){",
close: "}});}"
},
"if": {
open: "if(($notnull_1) && $1a){",
close: "}"
},
"else": {
_default: { $1: "true" },
open: "}else if(($notnull_1) && $1a){"
},
"html": {
// Unecoded expression evaluation.
open: "if($notnull_1){__.push($1a);}"
},
"=": {
// Encoded expression evaluation. Abbreviated form is ${}.
_default: { $1: "$data" },
open: "if($notnull_1){__.push($.encode($1a));}"
},
"!": {
// Comment tag. Skipped by parser
open: ""
}
},
// This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events
complete: function( items ) {
newTmplItems = {};
},
// Call this from code which overrides domManip, or equivalent
// Manage cloning/storing template items etc.
afterManip: function afterManip( elem, fragClone, callback ) {
// Provides cloned fragment ready for fixup prior to and after insertion into DOM
var content = fragClone.nodeType === 11 ?
jQuery.makeArray(fragClone.childNodes) :
fragClone.nodeType === 1 ? [fragClone] : [];
// Return fragment to original caller (e.g. append) for DOM insertion
callback.call( elem, fragClone );
// Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data.
storeTmplItems( content );
cloneIndex++;
}
});
//========================== Private helper functions, used by code above ==========================
function build( tmplItem, nested, content ) {
// Convert hierarchical content into flat string array
// and finally return array of fragments ready for DOM insertion
var frag, ret = content ? jQuery.map( content, function( item ) {
return (typeof item === "string") ?
// Insert template item annotations, to be converted to jQuery.data( "tmplItem" ) when elems are inserted into DOM.
(tmplItem.key ? item.replace( /(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g, "$1 " + tmplItmAtt + "=\"" + tmplItem.key + "\" $2" ) : item) :
// This is a child template item. Build nested template.
build( item, tmplItem, item._ctnt );
}) :
// If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}.
tmplItem;
if ( nested ) {
return ret;
}
// top-level template
ret = ret.join("");
// Support templates which have initial or final text nodes, or consist only of text
// Also support HTML entities within the HTML markup.
ret.replace( /^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/, function( all, before, middle, after) {
frag = jQuery( middle ).get();
storeTmplItems( frag );
if ( before ) {
frag = unencode( before ).concat(frag);
}
if ( after ) {
frag = frag.concat(unencode( after ));
}
});
return frag ? frag : unencode( ret );
}
function unencode( text ) {
// Use createElement, since createTextNode will not render HTML entities correctly
var el = document.createElement( "div" );
el.innerHTML = text;
return jQuery.makeArray(el.childNodes);
}
// Generate a reusable function that will serve to render a template against data
function buildTmplFn( markup ) {
return new Function("jQuery","$item",
// Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10).
"var $=jQuery,call,__=[],$data=$item.data;" +
// Introduce the data as local variables using with(){}
"with($data){__.push('" +
// Convert the template into pure JavaScript
jQuery.trim(markup)
.replace( /([\\'])/g, "\\$1" )
.replace( /[\r\t\n]/g, " " )
.replace( /\$\{([^\}]*)\}/g, "{{= $1}}" )
.replace( /\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,
function( all, slash, type, fnargs, target, parens, args ) {
var tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect;
if ( !tag ) {
throw "Unknown template tag: " + type;
}
def = tag._default || [];
if ( parens && !/\w$/.test(target)) {
target += parens;
parens = "";
}
if ( target ) {
target = unescape( target );
args = args ? ("," + unescape( args ) + ")") : (parens ? ")" : "");
// Support for target being things like a.toLowerCase();
// In that case don't call with template item as 'this' pointer. Just evaluate...
expr = parens ? (target.indexOf(".") > -1 ? target + unescape( parens ) : ("(" + target + ").call($item" + args)) : target;
exprAutoFnDetect = parens ? expr : "(typeof(" + target + ")==='function'?(" + target + ").call($item):(" + target + "))";
} else {
exprAutoFnDetect = expr = def.$1 || "null";
}
fnargs = unescape( fnargs );
return "');" +
tag[ slash ? "close" : "open" ]
.split( "$notnull_1" ).join( target ? "typeof(" + target + ")!=='undefined' && (" + target + ")!=null" : "true" )
.split( "$1a" ).join( exprAutoFnDetect )
.split( "$1" ).join( expr )
.split( "$2" ).join( fnargs || def.$2 || "" ) +
"__.push('";
}) +
"');}return __;"
);
}
function updateWrapped( options, wrapped ) {
// Build the wrapped content.
options._wrap = build( options, true,
// Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string.
jQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()]
).join("");
}
function unescape( args ) {
return args ? args.replace( /\\'/g, "'").replace(/\\\\/g, "\\" ) : null;
}
function outerHtml( elem ) {
var div = document.createElement("div");
div.appendChild( elem.cloneNode(true) );
return div.innerHTML;
}
// Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance.
function storeTmplItems( content ) {
var keySuffix = "_" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m;
for ( i = 0, l = content.length; i < l; i++ ) {
if ( (elem = content[i]).nodeType !== 1 ) {
continue;
}
elems = elem.getElementsByTagName("*");
for ( m = elems.length - 1; m >= 0; m-- ) {
processItemKey( elems[m] );
}
processItemKey( elem );
}
function processItemKey( el ) {
var pntKey, pntNode = el, pntItem, tmplItem, key;
// Ensure that each rendered template inserted into the DOM has its own template item,
if ( (key = el.getAttribute( tmplItmAtt ))) {
while ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { }
if ( pntKey !== key ) {
// The next ancestor with a _tmplitem expando is on a different key than this one.
// So this is a top-level element within this template item
// Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment.
pntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0;
if ( !(tmplItem = newTmplItems[key]) ) {
// The item is for wrapped content, and was copied from the temporary parent wrappedItem.
tmplItem = wrappedItems[key];
tmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode] );
tmplItem.key = ++itemKey;
newTmplItems[itemKey] = tmplItem;
}
if ( cloneIndex ) {
cloneTmplItem( key );
}
}
el.removeAttribute( tmplItmAtt );
} else if ( cloneIndex && (tmplItem = jQuery.data( el, "tmplItem" )) ) {
// This was a rendered element, cloned during append or appendTo etc.
// TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem.
cloneTmplItem( tmplItem.key );
newTmplItems[tmplItem.key] = tmplItem;
pntNode = jQuery.data( el.parentNode, "tmplItem" );
pntNode = pntNode ? pntNode.key : 0;
}
if ( tmplItem ) {
pntItem = tmplItem;
// Find the template item of the parent element.
// (Using !=, not !==, since pntItem.key is number, and pntNode may be a string)
while ( pntItem && pntItem.key != pntNode ) {
// Add this element as a top-level node for this rendered template item, as well as for any
// ancestor items between this item and the item of its parent element
pntItem.nodes.push( el );
pntItem = pntItem.parent;
}
// Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering...
delete tmplItem._ctnt;
delete tmplItem._wrap;
// Store template item as jQuery data on the element
jQuery.data( el, "tmplItem", tmplItem );
}
function cloneTmplItem( key ) {
key = key + keySuffix;
tmplItem = newClonedItems[key] =
(newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent ));
}
}
}
//---- Helper functions for template item ----
function tiCalls( content, tmpl, data, options ) {
if ( !content ) {
return stack.pop();
}
stack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options });
}
function tiNest( tmpl, data, options ) {
// nested template, using {{tmpl}} tag
return jQuery.tmpl( jQuery.template( tmpl ), data, options, this );
}
function tiWrap( call, wrapped ) {
// nested template, using {{wrap}} tag
var options = call.options || {};
options.wrapped = wrapped;
// Apply the template, which may incorporate wrapped content,
return jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item );
}
function tiHtml( filter, textOnly ) {
var wrapped = this._wrap;
return jQuery.map(
jQuery( jQuery.isArray( wrapped ) ? wrapped.join("") : wrapped ).filter( filter || "*" ),
function(e) {
return textOnly ?
e.innerText || e.textContent :
e.outerHTML || outerHtml(e);
});
}
function tiUpdate() {
var coll = this.nodes;
jQuery.tmpl( null, null, null, this).insertBefore( coll[0] );
jQuery( coll ).remove();
}
})( jQuery );

View file

@ -51,7 +51,7 @@ jQuery(function($){
// menu - drag and drop
jQuery(function($){
$('form.siteMap')
$('form.adminMap')
.delegate('li:not(.placeholder)', 'dropped.st', function() {
var $this = $(this), $pkey, $mkey, is_child;
@ -69,7 +69,7 @@ var
dragging = false,
$holder = $('<li class="placeholder">');
$('div.adminMenu')
$('form.adminMap>ul')
.delegate('li:not(.placeholder,.parent)', {
'mousedown.st' : function(event) {
var $this, $uls, $ul, width, height, offset, position, offsets, i, dropzone, wrapper='';
@ -81,11 +81,9 @@ $('div.adminMenu')
$this = $(this);
height = $this.height();
width = $this.width();
$uls = $this.parentsUntil('.siteMap').filter('ul');
$uls = $this.parentsUntil('.adminMap').filter('ul');
$ul = $uls.eq(-1);
$ul.css('position', 'relative');
position = {x:event.pageX, y:event.pageY};
offset = getOffset(this, $ul.get(0));
@ -207,12 +205,9 @@ $('div.adminMenu')
return false;
}
})
.find('li')
.prepend('<button type="button" class="moveTo">Move to</button>')
.filter('.parent')
.find('>button.moveTo').css({'visibility':'hidden','margin-left':'-12px'}).end()
.end()
.end()
.find('li li')
.prepend('<button type="button" class="moveTo">Move to</button>').end()
.end();
$('<div id="dropzone-marker" />')
.css({display:'none',position:'absolute',backgroundColor:'#000',opacity:0.7})

View file

@ -1,8 +1,7 @@
jQuery(function(b){function k(a){if(moduleList=a.menuList){var c=b("#menuNameList"),e;for(e in moduleList){var f=moduleList[e],a=b('<optgroup label="'+e+'" />').appendTo(c),d;for(d in f)a.append('<option value="'+e+":"+d+'">'+f[d].title+"</option>")}}}var d,h=b("#editForm"),a=b("#listForm");b("a._add").click(function(){d=b(this).parent().prevAll("._item_key").val();h.find("input[name=parent_srl]").val(d);exec_xml("menu","procMenuAdminAllActList",[],k,["menuList"])});b("a._parent_delete").click(function(){var i=
b(this).parent().prevAll("._parent_key").val();a.find("input[name=menu_item_srl]").val(i);a.submit()});b("a._child_delete").click(function(){var i=b(this).parents("li").find("._item_key").val();a.find("input[name=menu_item_srl]").val(i);a.submit()})});
jQuery(function(b){function k(a,b){for(var c=0,e=0;a&&a!=b;)c+=a.offsetTop,e+=a.offsetLeft,a=a.offsetParent;return{top:c,left:e}}b("form.siteMap").delegate("li:not(.placeholder)","dropped.st",function(){var a=b(this),d;d=a.find(">input._parent_key");a.parent("ul").parent("li").length?d.val(a.parent("ul").parent("li").find(">input._item_key").val()):d.val("0")});var d=!1,h=b('<li class="placeholder">');b("div.adminMenu").delegate("li:not(.placeholder,.parent)",{"mousedown.st":function(a){var i,c,e,
f,m,n,j,l,g;if(!(b(a.target).is("a,input,label,textarea")||1!=a.which)){d=!0;c=b(this);n=c.height();m=c.width();e=c.parentsUntil(".siteMap").filter("ul");f=e.eq(-1);f.css("position","relative");i=a.pageY;j=k(this,f.get(0));$clone=c.clone(!0).attr("target",!0);for(a=e.length-1;a;a--)$clone=$clone.wrap("<li><ul /></li>").parent().parent();l=[];f.find("li").each(function(){if(c[0]===this||c.has(this).length)return!0;var a=k(this,f.get(0));l.push({top:a.top,bottom:a.top+32,$item:b(this)})});$clone.find(".side,input").remove().end().addClass("draggable").css({position:"absolute",
opacity:0.6,width:m,height:n,left:j.left,top:j.top,zIndex:100}).appendTo(f.eq(0));h.css({position:"absolute",opacity:0.6,width:m,height:"10px",left:j.left,top:j.top,zIndex:99}).appendTo(f.eq(0));c.css("opacity",0.6);b(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,d;g=null;a=j.top-(i-a.pageY);b=0;for(c=l.length;b<c;b++)d=l[b],d.top>a||d.bottom<a||(g={element:d.$item},d.$item.hasClass("parent")?(g.state="prepend",h.css("top",d.bottom-5)):d.top>a-12?(g.state="before",
jQuery(function(b){function l(a){if(moduleList=a.menuList){var c=b("#menuNameList"),e;for(e in moduleList){var f=moduleList[e];a=b('<optgroup label="'+e+'" />').appendTo(c);for(var d in f)a.append('<option value="'+e+":"+d+'">'+f[d].title+"</option>")}}}var d,h=b("#editForm"),a=b("#listForm");b("a._add").click(function(){d=b(this).parent().prevAll("._item_key").val();h.find("input[name=parent_srl]").val(d);exec_xml("menu","procMenuAdminAllActList",[],l,["menuList"])});b("a._parent_delete").click(function(){var j=
b(this).parent().prevAll("._parent_key").val();a.find("input[name=menu_item_srl]").val(j);a.submit()});b("a._child_delete").click(function(){var j=b(this).parents("li").find("._item_key").val();a.find("input[name=menu_item_srl]").val(j);a.submit()})});
jQuery(function(b){function l(a,b){for(var c=0,e=0;a&&a!=b;)c+=a.offsetTop,e+=a.offsetLeft,a=a.offsetParent;return{top:c,left:e}}b("form.adminMap").delegate("li:not(.placeholder)","dropped.st",function(){var a=b(this),d;d=a.find(">input._parent_key");a.parent("ul").parent("li").length?d.val(a.parent("ul").parent("li").find(">input._item_key").val()):d.val("0")});var d=!1,h=b('<li class="placeholder">');b("form.adminMap>ul").delegate("li:not(.placeholder,.parent)",{"mousedown.st":function(a){var j,
c,e,f,n,p,k,m,g;if(!(b(a.target).is("a,input,label,textarea")||1!=a.which)){d=!0;c=b(this);p=c.height();n=c.width();e=c.parentsUntil(".adminMap").filter("ul");f=e.eq(-1);j=a.pageY;k=l(this,f.get(0));$clone=c.clone(!0).attr("target",!0);for(a=e.length-1;a;a--)$clone=$clone.wrap("<li><ul /></li>").parent().parent();m=[];f.find("li").each(function(){if(c[0]===this||c.has(this).length)return!0;var a=l(this,f.get(0));m.push({top:a.top,bottom:a.top+32,$item:b(this)})});$clone.find(".side,input").remove().end().addClass("draggable").css({position:"absolute",
opacity:0.6,width:n,height:p,left:k.left,top:k.top,zIndex:100}).appendTo(f.eq(0));h.css({position:"absolute",opacity:0.6,width:n,height:"10px",left:k.left,top:k.top,zIndex:99}).appendTo(f.eq(0));c.css("opacity",0.6);b(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,d;g=null;a=k.top-(j-a.pageY);b=0;for(c=m.length;b<c;b++)d=m[b],d.top>a||d.bottom<a||(g={element:d.$item},d.$item.hasClass("parent")?(g.state="prepend",h.css("top",d.bottom-5)):d.top>a-12?(g.state="before",
h.css("top",d.top-5)):(g.state="after",h.css("top",d.bottom-5)));$clone.css({top:a})}).bind("mouseup.st",function(){var a,e;d=!1;b(document).unbind("mousemove.st mouseup.st");c.css("opacity","");$clone.remove();h.remove();e=b("<li />").height(c.height());if(g){a=b(g.element);c.before(e);if("prepend"==g.state)a.find(">ul").length||a.find(">.side").after("<ul>"),a.find(">ul").prepend(c.hide());else a[g.state](c.hide());c.slideDown(100,function(){c.removeClass("active")});e.slideUp(100,function(){var a=
e.parent();e.remove();a.children("li").length||a.remove()});c.trigger("dropped.st")}});return!1}},"mouseover.st":function(){d||b(this).addClass("active");return!1},"mouseout.st":function(){d||b(this).removeClass("active");return!1}}).find("li").prepend('<button type="button" class="moveTo">Move to</button>').filter(".parent").find(">button.moveTo").css({visibility:"hidden","margin-left":"-12px"}).end().end().end();b('<div id="dropzone-marker" />').css({display:"none",position:"absolute",backgroundColor:"#000",
opacity:0.7}).appendTo("body")});
e.parent();e.remove();a.children("li").length||a.remove()});c.trigger("dropped.st")}});return!1}},"mouseover.st":function(){d||b(this).addClass("active");return!1},"mouseout.st":function(){d||b(this).removeClass("active");return!1}}).find("li li").prepend('<button type="button" class="moveTo">Move to</button>').end().end();b('<div id="dropzone-marker" />').css({display:"none",position:"absolute",backgroundColor:"#000",opacity:0.7}).appendTo("body")});

View file

@ -1,6 +1,6 @@
jQuery(function(c){function p(a,c){for(var b=0,g=0;a&&a!=c;)b+=a.offsetTop,g+=a.offsetLeft,a=a.offsetParent;return{top:b,left:g}}var l=!1,k=c('<li class="placeholder">');c("form.siteMap").delegate("li:not(.placeholder)",{"mousedown.st":function(a){var d,b,g,h,n,q,i,m,j;if(!(c(a.target).is("a,input,label,textarea")||1!=a.which)){l=!0;b=c(this);q=b.height();n=b.width();g=b.parentsUntil(".siteMap").filter("ul");h=g.eq(-1);h.css("position","relative");d=a.pageY;i=p(this,h.get(0));$clone=b.clone(!0).attr("target",
!0);for(a=g.length-1;a;a--)$clone=$clone.wrap("<li><ul /></li>").parent().parent();m=[];h.find("li").each(function(){if(b[0]===this||b.has(this).length)return!0;var a=p(this,h.get(0));m.push({top:a.top,bottom:a.top+32,item:this})});$clone.find(".side,input").remove().end().addClass("draggable").css({position:"absolute",opacity:0.6,width:n,height:q,left:i.left,top:i.top,zIndex:100}).appendTo(h.eq(0));k.css({position:"absolute",opacity:0.6,width:n,height:"5px",left:i.left,top:i.top,zIndex:99}).appendTo(h.eq(0));
b.css("opacity",0.6);c(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,e,f;j=null;a=i.top-(d-a.pageY);b=0;for(c=m.length;b<c;b++)if(f=a,e=m[b],0==b&&f<e.top&&(f=e.top),b==c-1&&f>e.bottom&&(f=e.bottom),e.top<=f&&e.bottom>=f){b=e.item;3>=Math.abs(e.top-f)?(k.css({top:e.top-3,height:"5px"}),f="before"):3>=Math.abs(e.bottom-f)?(k.css({top:e.bottom-3,height:"5px"}),f="after"):(k.css({top:e.top+3,height:"27px"}),f="prepend");j={element:b,state:f};break}$clone.css({top:a})}).bind("mouseup.st",
function(){var a,d;l=!1;c(document).unbind("mousemove.st mouseup.st");b.css("opacity","");$clone.remove();k.remove();d=c("<li />").height(b.height());if(j){a=c(j.element);b.before(d);if("prepend"==j.state)a.find(">ul").length||a.find(">.side").after("<ul>"),a.find(">ul").prepend(b.hide());else a[j.state](b.hide());b.slideDown(100,function(){b.removeClass("active")});d.slideUp(100,function(){var a=d.parent();d.remove();a.children("li").length||a.remove()});b.trigger("dropped.st")}});return!1}},"mouseover.st":function(){l||
c(this).addClass("active");return!1},"mouseout.st":function(){l||c(this).removeClass("active");return!1}}).find("li").prepend('<button type="button" class="moveTo">Move to</button>').append('<span class="vr"></span><span class="hr"></span>').find("input:text").focus(function(){var a=c(this),d=a.prev("label"),b=a.parent();a.width(b.width()-(parseInt(b.css("text-indent"))||0)-a.next(".side").width()-60).css("opacity","");d.hide()}).blur(function(){var a=c(this),d=a.prev("label"),b=a.val();a.width(0).css("opacity",
0);d.removeClass("no-text").empty().text(b).show();b||d.addClass("no-text").text("---")}).each(function(a){var d=c(this),a="sitemap-id-"+a;d.attr("id",a).css({width:0,opacity:0,overflow:"hidden"}).before("<label />").prev("label").attr("for",a).text(d.val())}).end().end()});
jQuery(function(c){function q(a,c){for(var b=0,g=0;a&&a!=c;)b+=a.offsetTop,g+=a.offsetLeft,a=a.offsetParent;return{top:b,left:g}}var m=!1,l=c('<li class="placeholder">');c("form.siteMap").delegate("li:not(.placeholder)",{"mousedown.st":function(a){var d,b,g,h,p,r,j,n,k;if(!(c(a.target).is("a,input,label,textarea")||1!=a.which)){m=!0;b=c(this);r=b.height();p=b.width();g=b.parentsUntil(".siteMap").filter("ul");h=g.eq(-1);h.css("position","relative");d=a.pageY;j=q(this,h.get(0));$clone=b.clone(!0).attr("target",
!0);for(a=g.length-1;a;a--)$clone=$clone.wrap("<li><ul /></li>").parent().parent();n=[];h.find("li").each(function(){if(b[0]===this||b.has(this).length)return!0;var a=q(this,h.get(0));n.push({top:a.top,bottom:a.top+32,item:this})});$clone.find(".side,input").remove().end().addClass("draggable").css({position:"absolute",opacity:0.6,width:p,height:r,left:j.left,top:j.top,zIndex:100}).appendTo(h.eq(0));l.css({position:"absolute",opacity:0.6,width:p,height:"5px",left:j.left,top:j.top,zIndex:99}).appendTo(h.eq(0));
b.css("opacity",0.6);c(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,e,f;k=null;a=j.top-(d-a.pageY);b=0;for(c=n.length;b<c;b++)if(f=a,e=n[b],0==b&&f<e.top&&(f=e.top),b==c-1&&f>e.bottom&&(f=e.bottom),e.top<=f&&e.bottom>=f){b=e.item;3>=Math.abs(e.top-f)?(l.css({top:e.top-3,height:"5px"}),f="before"):3>=Math.abs(e.bottom-f)?(l.css({top:e.bottom-3,height:"5px"}),f="after"):(l.css({top:e.top+3,height:"27px"}),f="prepend");k={element:b,state:f};break}$clone.css({top:a})}).bind("mouseup.st",
function(){var a,d;m=!1;c(document).unbind("mousemove.st mouseup.st");b.css("opacity","");$clone.remove();l.remove();d=c("<li />").height(b.height());if(k){a=c(k.element);b.before(d);if("prepend"==k.state)a.find(">ul").length||a.find(">.side").after("<ul>"),a.find(">ul").prepend(b.hide());else a[k.state](b.hide());b.slideDown(100,function(){b.removeClass("active")});d.slideUp(100,function(){var a=d.parent();d.remove();a.children("li").length||a.remove()});b.trigger("dropped.st")}});return!1}},"mouseover.st":function(){m||
c(this).addClass("active");return!1},"mouseout.st":function(){m||c(this).removeClass("active");return!1}}).find("li").prepend('<button type="button" class="moveTo">Move to</button>').append('<span class="vr"></span><span class="hr"></span>').find("input:text").focus(function(){var a=c(this),d=a.prev("label"),b=a.parent();a.width(b.width()-(parseInt(b.css("text-indent"))||0)-a.next(".side").width()-60).css("opacity","");d.hide()}).blur(function(){var a=c(this),d=a.prev("label"),b=a.val();a.width(0).css("opacity",
0);d.removeClass("no-text").empty().text(b).show();b||d.addClass("no-text").text("---")}).each(function(a){var d=c(this);a="sitemap-id-"+a;d.attr("id",a).css({width:0,opacity:0,overflow:"hidden"}).before("<label />").prev("label").attr("for",a).text(d.val())}).end().end()});

View file

@ -2,5 +2,5 @@ jQuery(function(b){b("#theme,#skin").find("button.showAll").text("Show All").cli
b(this);a.delegate("span.thumb","click",function(){b(this).closest(".a").nextAll("a.prevToggle:first").trigger("toggle.tp");return!1}).append(a.next(".a").find(">li.noDirection:first"))}).end().after('<a href="#toggle-tp" class="prevToggle">Show</a>').next("a.prevToggle").bind("toggle.tp",function(){var a=b(this).prev(".a");a.closest(".thumbPreview").children("li").removeClass("highlight").end();a.parent().toggleClass("active").hasClass("active")?a.slideDown(100).closest("li").addClass("highlight"):
a.slideUp(100)}).click(function(){b(this).trigger("toggle.tp");return!1}).end().find("span.thumb").attr("role","radio").click(function(){b(this).next("input:radio").prop("checked",!0).change()}).end().find("> .i > label").attr("title",function(){return b(this).text()}).end().find("input:radio").bind("redraw",function(){var a=b(this),c=a.closest(".a").prev(".a"),e=a.val();e!=c.find(">li:eq(1)").data("value")&&(c.find(">li:not(.noDirection)").remove(),e?(a.closest("li").clone().find("input:radio").remove().end().find("label").wrapInner("<strong>").find(">strong").text(function(){return b(this).attr("title")}).unwrap().end().end().appendTo(c),
c.find(">li.noDirection").hide()):c.children("li.noDirection").show())}).change(function(){var a=b(this);a.trigger("redraw");"themeItem"!=a.attr("name")&&b("#theme").trigger("select-theme")}).filter(":checked").change().end().filter('[name="themeItem"]').change(function(){var a=b(this),c,e;if(a=(b("#theme").data("themes")||{})[a.val()]){c=b("#skin").find(".i > input:radio").filter('[value=""]').prop("checked",!0).end();for(var d in a)a.hasOwnProperty(d)&&(e="layout"==d?d:d+"-skin",a[d]&&c.filter('[name="'+
e+'"][value="'+a[d]+'"]').prop("checked",!0));c.filter(":checked").trigger("redraw")}}).end();b("#theme").bind("select-theme",function(){function a(a){var b="",c;for(c in a)if(a.hasOwnProperty(c)&&("layout"==c||i.elements[c+"-skin"]))b+=c+"\t"+a[c]+"\n";return b}var c=b(this),e,d,i,f,j={};e=c.data("themes")||{};d=b("#skin").find(".i > input:radio");f=d.filter(':checked[value!=""]').get();i=d.get(0).form;for(var g=0,k=f.length;g<k;g++)d=f[g].name.match(/^layout|(\w+)-skin$/),j[d[1]||d[0]]=f[g].value;
f=a(j);for(var h in e)if(e.hasOwnProperty(h)&&f==a(e[h])){c.find('input:radio[name="themeItem"][value="'+h+'"]').prop("checked",!0).change();return}c.find('input:radio[name="themeItem"][value="user_define"]').prop("checked",!0).change()})});
e+'"][value="'+a[d]+'"]').prop("checked",!0));c.filter(":checked").trigger("redraw")}}).end();b("#theme").bind("select-theme",function(){function a(a){var b="",c;for(c in a)if(a.hasOwnProperty(c)&&("layout"==c||j.elements[c+"-skin"]))b+=c+"\t"+a[c]+"\n";return b}var c=b(this),e,d,j,f,k={};e=c.data("themes")||{};d=b("#skin").find(".i > input:radio");f=d.filter(':checked[value!=""]').get();j=d.get(0).form;for(var g=0,l=f.length;g<l;g++)d=f[g].name.match(/^layout|(\w+)-skin$/),k[d[1]||d[0]]=f[g].value;
f=a(k);for(var h in e)if(e.hasOwnProperty(h)&&f==a(e[h])){c.find('input:radio[name="themeItem"][value="'+h+'"]').prop("checked",!0).change();return}c.find('input:radio[name="themeItem"][value="user_define"]').prop("checked",!0).change()})});

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

View file

@ -0,0 +1,61 @@
/*
* jsTree apple theme 1.0
* Supported features: dots/no-dots, icons/no-icons, focused, loading
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
*/
.jstree-apple > ul { background:url("bg.jpg") left top repeat; }
.jstree-apple li,
.jstree-apple ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
.jstree-apple li { background-position:-90px 0; background-repeat:repeat-y; }
.jstree-apple li.jstree-last { background:transparent; }
.jstree-apple .jstree-open > ins { background-position:-72px 0; }
.jstree-apple .jstree-closed > ins { background-position:-54px 0; }
.jstree-apple .jstree-leaf > ins { background-position:-36px 0; }
.jstree-apple a { border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; text-shadow:1px 1px 1px white; }
.jstree-apple .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 3px 0 1px; text-shadow:1px 1px 1px silver; }
.jstree-apple .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 3px 0 1px; }
.jstree-apple a .jstree-icon { background-position:-56px -20px; }
.jstree-apple a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
.jstree-apple.jstree-focused { background:white; }
.jstree-apple .jstree-no-dots li,
.jstree-apple .jstree-no-dots .jstree-leaf > ins { background:transparent; }
.jstree-apple .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
.jstree-apple .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
.jstree-apple .jstree-no-icons a .jstree-icon { display:none; }
.jstree-apple .jstree-search { font-style:italic; }
.jstree-apple .jstree-no-icons .jstree-checkbox { display:inline-block; }
.jstree-apple .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
.jstree-apple .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
.jstree-apple .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
.jstree-apple .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
.jstree-apple .jstree-checked > a > .checkbox:hover { background-position:-38px -37px; }
.jstree-apple .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
.jstree-apple .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
#vakata-dragged.jstree-apple ins { background:transparent !important; }
#vakata-dragged.jstree-apple .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
#vakata-dragged.jstree-apple .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
#jstree-marker.jstree-apple { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
.jstree-apple a.jstree-search { color:aqua; }
.jstree-apple .jstree-locked a { color:silver; cursor:default; }
#vakata-contextmenu.jstree-apple-context,
#vakata-contextmenu.jstree-apple-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
#vakata-contextmenu.jstree-apple-context li { }
#vakata-contextmenu.jstree-apple-context a { color:black; }
#vakata-contextmenu.jstree-apple-context a:hover,
#vakata-contextmenu.jstree-apple-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a,
#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
#vakata-contextmenu.jstree-apple-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
#vakata-contextmenu.jstree-apple-context li ul { margin-left:-4px; }
/* TODO: IE6 support - the `>` selectors */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

View file

@ -0,0 +1,77 @@
/*
* jsTree classic theme 1.0
* Supported features: dots/no-dots, icons/no-icons, focused, loading
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
*/
.jstree-classic li,
.jstree-classic ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
.jstree-classic li { background-position:-90px 0; background-repeat:repeat-y; }
.jstree-classic li.jstree-last { background:transparent; }
.jstree-classic .jstree-open > ins { background-position:-72px 0; }
.jstree-classic .jstree-closed > ins { background-position:-54px 0; }
.jstree-classic .jstree-leaf > ins { background-position:-36px 0; }
.jstree-classic .jstree-hovered { background:#e7f4f9; border:1px solid #e7f4f9; padding:0 2px 0 1px; }
.jstree-classic .jstree-clicked { background:navy; border:1px solid navy; padding:0 2px 0 1px; color:white; }
.jstree-classic a .jstree-icon { background-position:-56px -19px; }
.jstree-classic .jstree-open > a .jstree-icon { background-position:-56px -36px; }
.jstree-classic a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
.jstree-classic.jstree-focused { background:white; }
.jstree-classic .jstree-no-dots li,
.jstree-classic .jstree-no-dots .jstree-leaf > ins { background:transparent; }
.jstree-classic .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
.jstree-classic .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
.jstree-classic .jstree-no-icons a .jstree-icon { display:none; }
.jstree-classic .jstree-search { font-style:italic; }
.jstree-classic .jstree-no-icons .jstree-checkbox { display:inline-block; }
.jstree-classic .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
.jstree-classic .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
.jstree-classic .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
.jstree-classic .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
.jstree-classic .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
.jstree-classic .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
.jstree-classic .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
#vakata-dragged.jstree-classic ins { background:transparent !important; }
#vakata-dragged.jstree-classic .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
#vakata-dragged.jstree-classic .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
#jstree-marker.jstree-classic { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
.jstree-classic a.jstree-search { color:aqua; }
.jstree-classic .jstree-locked a { color:silver; cursor:default; }
#vakata-contextmenu.jstree-classic-context,
#vakata-contextmenu.jstree-classic-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
#vakata-contextmenu.jstree-classic-context li { }
#vakata-contextmenu.jstree-classic-context a { color:black; }
#vakata-contextmenu.jstree-classic-context a:hover,
#vakata-contextmenu.jstree-classic-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a,
#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
#vakata-contextmenu.jstree-classic-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
#vakata-contextmenu.jstree-classic-context li ul { margin-left:-4px; }
/* IE6 BEGIN */
.jstree-classic li,
.jstree-classic ins,
#vakata-dragged.jstree-classic .jstree-invalid,
#vakata-dragged.jstree-classic .jstree-ok,
#jstree-marker.jstree-classic { _background-image:url("d.gif"); }
.jstree-classic .jstree-open ins { _background-position:-72px 0; }
.jstree-classic .jstree-closed ins { _background-position:-54px 0; }
.jstree-classic .jstree-leaf ins { _background-position:-36px 0; }
.jstree-classic .jstree-open a ins.jstree-icon { _background-position:-56px -36px; }
.jstree-classic .jstree-closed a ins.jstree-icon { _background-position:-56px -19px; }
.jstree-classic .jstree-leaf a ins.jstree-icon { _background-position:-56px -19px; }
#vakata-contextmenu.jstree-classic-context ins { _display:none; }
#vakata-contextmenu.jstree-classic-context li { _zoom:1; }
.jstree-classic .jstree-undetermined a .jstree-checkbox { _background-position:-20px -19px; }
.jstree-classic .jstree-checked a .jstree-checkbox { _background-position:-38px -19px; }
.jstree-classic .jstree-unchecked a .jstree-checkbox { _background-position:-2px -19px; }
/* IE6 END */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

View file

@ -0,0 +1,84 @@
/*
* jsTree default-rtl theme 1.0
* Supported features: dots/no-dots, icons/no-icons, focused, loading
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
*/
.jstree-default-rtl li,
.jstree-default-rtl ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
.jstree-default-rtl li { background-position:-90px 0; background-repeat:repeat-y; }
.jstree-default-rtl li.jstree-last { background:transparent; }
.jstree-default-rtl .jstree-open > ins { background-position:-72px 0; }
.jstree-default-rtl .jstree-closed > ins { background-position:-54px 0; }
.jstree-default-rtl .jstree-leaf > ins { background-position:-36px 0; }
.jstree-default-rtl .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px; }
.jstree-default-rtl .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px; }
.jstree-default-rtl a .jstree-icon { background-position:-56px -19px; }
.jstree-default-rtl a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
.jstree-default-rtl.jstree-focused { background:#ffffee; }
.jstree-default-rtl .jstree-no-dots li,
.jstree-default-rtl .jstree-no-dots .jstree-leaf > ins { background:transparent; }
.jstree-default-rtl .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
.jstree-default-rtl .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
.jstree-default-rtl .jstree-no-icons a .jstree-icon { display:none; }
.jstree-default-rtl .jstree-search { font-style:italic; }
.jstree-default-rtl .jstree-no-icons .jstree-checkbox { display:inline-block; }
.jstree-default-rtl .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
#vakata-dragged.jstree-default-rtl ins { background:transparent !important; }
#vakata-dragged.jstree-default-rtl .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
#vakata-dragged.jstree-default-rtl .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
#jstree-marker.jstree-default-rtl { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
.jstree-default-rtl a.jstree-search { color:aqua; }
.jstree-default-rtl .jstree-locked a { color:silver; cursor:default; }
#vakata-contextmenu.jstree-default-rtl-context,
#vakata-contextmenu.jstree-default-rtl-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
#vakata-contextmenu.jstree-default-rtl-context li { }
#vakata-contextmenu.jstree-default-rtl-context a { color:black; }
#vakata-contextmenu.jstree-default-rtl-context a:hover,
#vakata-contextmenu.jstree-default-rtl-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a,
#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
#vakata-contextmenu.jstree-default-rtl-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
#vakata-contextmenu.jstree-default-rtl-context li ul { margin-left:-4px; }
/* IE6 BEGIN */
.jstree-default-rtl li,
.jstree-default-rtl ins,
#vakata-dragged.jstree-default-rtl .jstree-invalid,
#vakata-dragged.jstree-default-rtl .jstree-ok,
#jstree-marker.jstree-default-rtl { _background-image:url("d.gif"); }
.jstree-default-rtl .jstree-open ins { _background-position:-72px 0; }
.jstree-default-rtl .jstree-closed ins { _background-position:-54px 0; }
.jstree-default-rtl .jstree-leaf ins { _background-position:-36px 0; }
.jstree-default-rtl a ins.jstree-icon { _background-position:-56px -19px; }
#vakata-contextmenu.jstree-default-rtl-context ins { _display:none; }
#vakata-contextmenu.jstree-default-rtl-context li { _zoom:1; }
.jstree-default-rtl .jstree-undetermined a .jstree-checkbox { _background-position:-18px -19px; }
.jstree-default-rtl .jstree-checked a .jstree-checkbox { _background-position:-36px -19px; }
.jstree-default-rtl .jstree-unchecked a .jstree-checkbox { _background-position:0px -19px; }
/* IE6 END */
/* RTL part */
.jstree-default-rtl .jstree-hovered, .jstree-default-rtl .jstree-clicked { padding:0 1px 0 2px; }
.jstree-default-rtl li { background-image:url("dots.gif"); background-position: 100% 0px; }
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-36px -19px; margin-left:2px; }
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:0px -19px; margin-left:2px; }
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-18px -19px; margin-left:2px; }
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-36px -37px; }
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:0px -37px; }
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-18px -37px; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -0,0 +1,81 @@
/*
* jsTree default theme 1.0
* Supported features: dots/no-dots, icons/no-icons, focused, loading
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
*/
.jstree-default li,
.jstree-default ins{background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent}
.jstree-default li{background-position:-90px 10px; background-repeat:repeat-y}
.jstree-default .jstree-open> ins,
.jstree-default .jstree-closed> ins{cursor:pointer}
.jstree-default .jstree-open>ins{background-position:-72px 0}
.jstree-default .jstree-closed>ins{background-position:-54px 0}
.jstree-default .jstree-leaf>ins{background-position:-36px 0; vertical-align:top}
.jstree-default>ul>li,
.jstree-default li.jstree-last{background:transparent}
.jstree-default>ul>li>ins{background-position:-54px -36px !important;vertical-align:baseline !important}
.jstree-default>ul>li.jstree-open>ins{background-position:-72px 0 !important}
.jstree-default>ul>li.jstree-closed>ins{background-position:-54px 0 !important}
.jstree-default .jstree-hovered{background:#666;color:#fff;}
.jstree-default .jstree-clicked{background:#000;color:#fff}
.jstree-default a .jstree-icon{background-position:-56px -19px}
.jstree-default a.jstree-loading .jstree-icon{background:url("throbber.gif") center center no-repeat !important}
.jstree-default.jstree-focused{background:#ffffee}
.jstree-default .jstree-no-dots li,
.jstree-default .jstree-no-dots .jstree-leaf>ins{background:transparent}
.jstree-default .jstree-no-dots .jstree-open>ins{background-position:-18px 0}
.jstree-default .jstree-no-dots .jstree-closed>ins{background-position:0 0}
.jstree-default .jstree-no-icons a .jstree-icon{display:none}
.jstree-default .jstree-search{font-style:italic}
.jstree-default .jstree-no-icons .jstree-checkbox{display:inline-block}
.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none !important}
.jstree-default .jstree-checked>a>.jstree-checkbox{background-position:-38px -19px}
.jstree-default .jstree-unchecked>a>.jstree-checkbox{background-position:-2px -19px}
.jstree-default .jstree-undetermined>a>.jstree-checkbox{background-position:-20px -19px}
.jstree-default .jstree-checked>a>.jstree-checkbox:hover{background-position:-38px -37px}
.jstree-default .jstree-unchecked>a>.jstree-checkbox:hover{background-position:-2px -37px}
.jstree-default .jstree-undetermined>a>.jstree-checkbox:hover{background-position:-20px -37px}
#vakata-dragged.jstree-default ins{background:transparent !important}
#vakata-dragged.jstree-default .jstree-ok{background:url("d.png") -2px -53px no-repeat !important}
#vakata-dragged.jstree-default .jstree-invalid{background:url("d.png") -18px -53px no-repeat !important}
#jstree-marker.jstree-default{background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px}
.jstree-default a.jstree-search{color:aqua}
.jstree-default .jstree-locked a{color:silver; cursor:default}
#vakata-contextmenu.jstree-default-context,
#vakata-contextmenu.jstree-default-context li ul{background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999}
#vakata-contextmenu.jstree-default-context li{}
#vakata-contextmenu.jstree-default-context a{color:black}
#vakata-contextmenu.jstree-default-context a:hover,
#vakata-contextmenu.jstree-default-context .vakata-hover>a{padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px}
#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a,
#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a:hover{color:silver; background:transparent; border:0; padding:1px 4px}
#vakata-contextmenu.jstree-default-context li.vakata-separator{background:white; border-top:1px solid #e0e0e0; margin:0}
#vakata-contextmenu.jstree-default-context li ul{margin-left:-4px}
/* IE6 BEGIN */
.jstree-default li,
.jstree-default ins,
#vakata-dragged.jstree-default .jstree-invalid,
#vakata-dragged.jstree-default .jstree-ok,
#jstree-marker.jstree-default{_background-image:url("d.gif")}
.jstree-default .jstree-open ins{_background-position:-72px 0}
.jstree-default .jstree-closed ins{_background-position:-54px 0}
.jstree-default .jstree-leaf ins{_background-position:-36px 0}
.jstree-default a ins.jstree-icon{_background-position:-56px -19px}
#vakata-contextmenu.jstree-default-context ins{_display:none}
#vakata-contextmenu.jstree-default-context li{_zoom:1}
.jstree-default .jstree-undetermined a .jstree-checkbox{_background-position:-20px -19px}
.jstree-default .jstree-checked a .jstree-checkbox{_background-position:-38px -19px}
.jstree-default .jstree-unchecked a .jstree-checkbox{_background-position:-2px -19px}
/* IE6 END */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -1,7 +1,6 @@
<include target="./_spHeader.html" />
<div class="content" id="content" tabindex="0">
<include target="./_header.html" />
<div class="content" id="content">
{$content}
</div>
<include target="./_spLnb.content.html" cond="$parentSrl != 0" />
<include target="./_spShortcut.html" />
<include target="./_spFooter.html" />
<include target="./_footer.html" />

View file

@ -0,0 +1,6 @@
<div class="x">
<div class="content" id="content">
{$content}
</div>
</div>
<script>opener.top.fullSetupWinLoaded();</script>

View file

@ -1,128 +0,0 @@
<load target="js/theme.js" type="body" usecdn="true" />
<script type="text/javascript">
jQuery(function($){
var themes = {};
<!--@foreach($theme_list as $key=>$val)-->
{@$skins = array()}
<!--@foreach($val->skin_infos as $module=>$skin_info)-->
{@$skins[] = "'".$module."' : '".$skin_info->name."'";}
<!--@end-->
themes['{$key}'] = {
'layout': '{$val->layout_info->layout_srl}',
{implode(',',$skins)}
};
<!--@end-->
$('#theme').data('themes', themes);
});
</script>
<h1 class="h1">{$lang->menu_gnb_sub['theme']}</h1>
<p class="xe_validator_error">{$XE_VALIDATOR_ERROR}</p>
<form ruleset="insertThemeInfo" action="./" method="post" class="form">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminInsertThemeInfo">
<fieldset id="theme">
<h2 class="h2">{$lang->theme_setting}</h2>
<p>{$lang->theme_desc}</p>
<ul class="thumbPreview">
<li>
<p class="q">{$lang->selected_theme}</p>
<ul class="a">
{@$current_theme = ($theme_info)?$theme_info->theme:'user_define'}
<li class="i" loop="$theme_list=>$key,$val">
<span class="thumb"><!--@if($val->thumbnail)--><img src="{$val->thumbnail}" alt="" /><!--@else-->{$lang->msg_thumbnail_not_exist}<!--@end--></span>
<input type="radio" name="themeItem" id="{$key}" value="{$key}" <!--@if($key == $current_theme)-->checked="checked"<!--@end--> />
<label for="{$key}">{$val->title}({$key})</label>
<ul>
<li>&middot; {$lang->version}: {$val->version}</li>
<li>&middot; {$lang->author}:
<!--@foreach($val->publisher as $publisher)-->
<a href="{$publisher->homepage}" cond="$publisher->homepage">{$publisher->name}</a>
<!--@if(!$publisher->homepage)-->{$publisher->name}<!--@end-->
<!--@endforeach-->
</li>
<li>&middot; {$lang->description}: {$val->description}</li>
<li>&middot; {$lang->path}: {$val->path}</li>
</ul>
</li>
<li class="i userDefine">
<span class="thumb">{$lang->by_you}</span>
<input type="radio" name="themeItem" id="theme_user_define" value="user_define" <!--@if($current_theme == 'user_define')-->checked="checked"<!--@end--> />
<label for="theme_user_define">{$lang->user_define}</label>
<ul>
<li>&middot; {$lang->description}: {$lang->no_selected_theme_desc}</li>
</ul>
</li>
</ul>
</li>
</ul>
</fieldset>
<fieldset id="skin">
<p>{$lang->user_define_skin_select_desc} <button type="button" class="showAll"></button></p>
<ul class="thumbPreview jx">
<li data-skintype="layout">
<p class="q">{$lang->selected_layout}</p>
<ul class="a">
<li class="i" loop="$layout_list=>$val">
<span class="thumb"><span class="frame"><!--@if($val->thumbnail)--><img src="{$val->thumbnail}" alt="" /><!--@else-->{$lang->msg_thumbnail_not_exist}<!--@end--></span></span>
<input type="radio" name="layout" id="layout_{$val->layout_srl}" value="{$val->layout_srl}" <!--@if($val->layout_srl == $current_layout)-->checked="checked"<!--@end--> />
<label for="layout_{$val->layout_srl}">{$val->layout_title.'('.$val->layout.')'}</label>
<ul>
<li>&middot; {$lang->version}: {$val->version}</li>
<li>&middot; {$lang->author}:
<!--@foreach($val->author as $author)-->
<a href="{$author->homepage}" cond="$author->homepage">{$author->name}</a>
<!--@if(!$author->homepage)-->{$author->name}<!--@end-->
<!--@endforeach-->
</li>
<li>&middot; {$lang->description}: {$val->description}</li>
<li>&middot; {$lang->path}: {$val->path}</li>
<li>&middot; {$lang->cmd_setup}: <a href="{getUrl('', 'module', 'admin', 'act', 'dispLayoutAdminModify', 'layout', $val->layout,'layout_srl', $val->layout_srl)}">{$lang->cmd_edit}</a></li>
</ul>
</li>
</ul>
</li>
<li loop="$module_list=>$mkey,$mval" cond="$mkey!='__IS_PARSE__'" data-skintype="{$mkey}">
<p class="q">{sprintf($lang->selected_skin, $mval['title'])}</p>
<ul class="a">
<li class="i noDirection" cond="!$theme_info->skin_info[$mkey]">
<span class="thumb"><span class="frame"></span></span>
<strong>{sprintf($lang->no_selected_skin, $mval['title'])}</strong>
<ul>
<li>{$lang->no_selected_skin_desc}</li>
</ul>
</li>
<li class="i" loop="$mval['skins']=>$skey,$sval">
{@ $id = $mkey.'_'.$skey }
<span class="thumb"><span class="frame"><!--@if($sval->thumbnail)--><img src="{$sval->thumbnail}" alt="" /><!--@else-->{$lang->msg_thumbnail_not_exist}<!--@end--></span></span>
<input type="radio" name="{$mkey}-skin" id="{$id}" value="{$skey}" checked="checked"|cond="$theme_info->skin_info[$mkey]==$skey" />
<label for="{$id}">{$sval->title.'('.$skey.')'}</label>
<ul>
<li>&middot; {$lang->version}: {$sval->version}</li>
<li>&middot; {$lang->author}:
<!--@foreach($sval->author as $author)-->
<a href="{$author->homepage}" cond="$author->homepage">{$author->name}</a>
<!--@if(!$author->homepage)-->{$author->name}<!--@end-->
<!--@endforeach-->
</li>
<li>&middot; {$lang->description}: {$sval->description}</li>
</ul>
</li>
<li class="i">
<span class="thumb"><span class="frame">{$lang->msg_thumbnail_not_exist}</span></span>
<input type="radio" name="{$mkey}-skin" id="{$mkey}_none" value="" checked="checked"|cond="!$theme_info->skin_info[$mkey]" />
<label for="{$mkey}_none">{$lang->no_select}</label>
</li>
</ul>
</li>
</ul>
</fieldset>
<div class="btnArea">
<span class="btn medium"><input type="submit" value="{$lang->cmd_save}" /></span>
</div>
</form>