merge brache 1.5.0 to trunk (8252-9866)

git-svn-id: http://xe-core.googlecode.com/svn/trunk@9867 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
flyskyko 2011-11-24 00:02:10 +00:00
commit 2f4b847ae2
2419 changed files with 179593 additions and 181010 deletions

View file

@ -1,103 +1,196 @@
<?php
/**
* @class addonAdminController
* @author NHN (developers@xpressengine.com)
* @brief addon 모듈의 admin controller class
**/
require_once(_XE_PATH_.'modules/addon/addon.controller.php');
class addonAdminController extends addonController {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 애드온의 활성/비활성 체인지
**/
function procAddonAdminToggleActivate() {
$oAddonModel = &getAdminModel('addon');
$site_module_info = Context::get('site_module_info');
// addon값을 받아옴
$addon = Context::get('addon');
$type = Context::get('type');
if(!$type) $type = "pc";
if($addon) {
// 활성화 되어 있으면 비활성화 시킴
if($oAddonModel->isActivatedAddon($addon, $site_module_info->site_srl, $type)) $this->doDeactivate($addon, $site_module_info->site_srl, $type);
// 비활성화 되어 있으면 활성화 시킴
else $this->doActivate($addon, $site_module_info->site_srl, $type);
}
$this->makeCacheFile($site_module_info->site_srl, $type);
}
/**
* @brief 애드온 설정 정보 입력
**/
function procAddonAdminSetupAddon() {
$args = Context::getRequestVars();
$addon_name = $args->addon_name;
unset($args->module);
unset($args->act);
unset($args->addon_name);
unset($args->body);
$site_module_info = Context::get('site_module_info');
$this->doSetup($addon_name, $args, $site_module_info->site_srl);
$this->makeCacheFile($site_module_info->site_srl, "pc");
$this->makeCacheFile($site_module_info->site_srl, "mobile");
}
/**
* @brief 애드온 추가
* DB에 애드온을 추가함
**/
function doInsert($addon, $site_srl = 0) {
$args->addon = $addon;
$args->is_used = 'N';
if(!$site_srl) return executeQuery('addon.insertAddon', $args);
$args->site_srl = $site_srl;
return executeQuery('addon.insertSiteAddon', $args);
}
/**
* @brief 애드온 활성화
* addons라는 테이블에 애드온의 활성화 상태를 on 시켜줌
**/
function doActivate($addon, $site_srl = 0, $type = "pc") {
$args->addon = $addon;
if($type == "pc") $args->is_used = 'Y';
else $args->is_used_m = "Y";
if(!$site_srl) return executeQuery('addon.updateAddon', $args);
$args->site_srl = $site_srl;
return executeQuery('addon.updateSiteAddon', $args);
}
/**
* @brief 애드온 비활성화
*
* addons라는 테이블에 애드온의 이름을 제거하는 것으로 비활성화를 시키게 된다
**/
function doDeactivate($addon, $site_srl = 0, $type = "pc") {
$args->addon = $addon;
if($type == "pc") $args->is_used = 'N';
else $args->is_used_m = 'N';
if(!$site_srl) return executeQuery('addon.updateAddon', $args);
$args->site_srl = $site_srl;
return executeQuery('addon.updateSiteAddon', $args);
}
}
?>
<?php
/**
* @class addonAdminController
* @author NHN (developers@xpressengine.com)
* @brief admin controller class of addon modules
**/
require_once(_XE_PATH_.'modules/addon/addon.controller.php');
class addonAdminController extends addonController {
/**
* @brief Initialization
**/
function init() {
}
/**
* @brief Set addon activate
**/
function procAddonAdminSaveActivate()
{
$pc = Context::get('pc');
$mobile = Context::get('mobile');
$fixed = Context::get('fixed');
$site_module_info = Context::get('site_module_info');
if($site_module_info->site_srl) $site_srl = $site_module_info->site_srl;
else $site_srl = 0;
if (!$pc) $pc = array();
if (!$mobile) $mobile = array();
if (!$fixed) $fixed = array();
if (!is_array($pc)) $pc = array($pc);
if (!is_array($mobile)) $pc = array($mobile);
if (!is_array($fixed)) $pc = array($fixed);
// get current addon info
$oModel = &getAdminModel('addon');
$currentAddonList = $oModel->getAddonList($site_srl, 'site');
// get need update addon list
$updateList = array();
foreach($currentAddonList as $addon)
{
if ($addon->activated !== in_array($addon->addon_name, $pc))
{
$updateList[] = $addon->addon_name;
continue;
}
if ($addon->mactivated !== in_array($addon->addon_name, $mobile))
{
$updateList[] = $addon->addon_name;
continue;
}
if ($addon->fixed !== in_array($addon->addon_name, $fixed))
{
$updateList[] = $addon->addon_name;
continue;
}
}
// update
foreach($updateList as $targetAddon)
{
unset($args);
if (in_array($targetAddon, $pc))
$args->is_used = 'Y';
else
$args->is_used = 'N';
if (in_array($targetAddon, $mobile))
$args->is_used_m = 'Y';
else
$args->is_used_m = 'N';
if (in_array($targetAddon, $fixed))
$args->fixed = 'Y';
else
$args->fixed = 'N';
$args->addon = $targetAddon;
$args->site_srl = $site_srl;
$output = executeQuery('addon.updateSiteAddon', $args);
if (!$output->toBool()) return $output;
}
if (count($updateList))
{
$this->makeCacheFile($site_srl, 'pc', 'site');
$this->makeCacheFile($site_srl, 'mobile', 'site');
}
if (Context::get('success_return_url'))
{
$this->setRedirectUrl(Context::get('success_return_url'));
}
else
{
$this->setRedirectUrl(getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAddonAdminIndex'));
}
}
/**
* @brief Add active/inactive change
**/
function procAddonAdminToggleActivate() {
$oAddonModel = &getAdminModel('addon');
$site_module_info = Context::get('site_module_info');
// batahom addon values
$addon = Context::get('addon');
$type = Context::get('type');
if(!$type) $type = "pc";
if($addon) {
// If enabled Disables
if($oAddonModel->isActivatedAddon($addon, $site_module_info->site_srl, $type)) $this->doDeactivate($addon, $site_module_info->site_srl, $type);
// If it is disabled Activate
else $this->doActivate($addon, $site_module_info->site_srl, $type);
}
$this->makeCacheFile($site_module_info->site_srl, $type);
}
/**
* @brief Add the configuration information input
**/
function procAddonAdminSetupAddon() {
$args = Context::getRequestVars();
$module = $args->module;
$addon_name = $args->addon_name;
unset($args->module);
unset($args->act);
unset($args->addon_name);
unset($args->body);
unset($args->error_return_url);
$site_module_info = Context::get('site_module_info');
$output = $this->doSetup($addon_name, $args, $site_module_info->site_srl, 'site');
if (!$output->toBool()) return $output;
$this->makeCacheFile($site_module_info->site_srl, "pc", 'site');
$this->makeCacheFile($site_module_info->site_srl, "mobile", 'site');
$this->setRedirectUrl(getNotEncodedUrl('', 'module', $module, 'act', 'dispAddonAdminSetup', 'selected_addon', $addon_name));
}
/**
* @brief Add-on
* Adds Add to DB
**/
function doInsert($addon, $site_srl = 0, $gtype = 'site', $isUsed = 'N') {
$args->addon = $addon;
$args->is_used = $isUsed;
if($gtype == 'global') return executeQuery('addon.insertAddon', $args);
$args->site_srl = $site_srl;
return executeQuery('addon.insertSiteAddon', $args);
}
/**
* @brief Add-activated
* addons add-ons to the table on the activation state sikyeojum
**/
function doActivate($addon, $site_srl = 0, $type = "pc", $gtype = 'site') {
$args->addon = $addon;
if($type == "pc") $args->is_used = 'Y';
else $args->is_used_m = "Y";
if($gtype == 'global') return executeQuery('addon.updateAddon', $args);
$args->site_srl = $site_srl;
return executeQuery('addon.updateSiteAddon', $args);
}
/**
* @brief Disable Add-ons
*
* addons add a table to remove the name of the deactivation is sikige
**/
function doDeactivate($addon, $site_srl = 0, $type = "pc", $gtype = 'site') {
$args->addon = $addon;
if($type == "pc") $args->is_used = 'N';
else $args->is_used_m = 'N';
if($gtype == 'global') return executeQuery('addon.updateAddon', $args);
$args->site_srl = $site_srl;
return executeQuery('addon.updateSiteAddon', $args);
}
}
?>

View file

@ -1,313 +1,337 @@
<?php
/**
* @class addonAdminModel
* @author NHN (developers@xpressengine.com)
* @brief addon 모듈의 admin model class
**/
class addonAdminModel extends addon {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 애드온의 경로를 구함
**/
function getAddonPath($addon_name) {
$class_path = sprintf('./addons/%s/', $addon_name);
if(is_dir($class_path)) return $class_path;
return "";
}
/**
* @brief 애드온의 종류와 정보를 구함
**/
function getAddonList($site_srl = 0) {
// activated된 애드온 목록을 구함
$inserted_addons = $this->getInsertedAddons($site_srl);
// 다운받은 애드온과 설치된 애드온의 목록을 구함
$searched_list = FileHandler::readDir('./addons');
$searched_count = count($searched_list);
if(!$searched_count) return;
sort($searched_list);
for($i=0;$i<$searched_count;$i++) {
// 애드온의 이름
$addon_name = $searched_list[$i];
if($addon_name == "smartphone") continue;
// 애드온의 경로 (files/addons가 우선)
$path = $this->getAddonPath($addon_name);
// 해당 애드온의 정보를 구함
unset($info);
$info = $this->getAddonInfoXml($addon_name, $site_srl);
$info->addon = $addon_name;
$info->path = $path;
$info->activated = false;
$info->mactivated = false;
// DB에 입력되어 있는지 확인
if(!in_array($addon_name, array_keys($inserted_addons))) {
// DB에 입력되어 있지 않으면 입력 (model에서 이런짓 하는거 싫지만 귀찮아서.. ㅡ.ㅜ)
$oAddonAdminController = &getAdminController('addon');
$oAddonAdminController->doInsert($addon_name, $site_srl);
// 활성화 되어 있는지 확인
} else {
if($inserted_addons[$addon_name]->is_used=='Y') $info->activated = true;
if($inserted_addons[$addon_name]->is_used_m=='Y') $info->mactivated = true;
}
$list[] = $info;
}
return $list;
}
/**
* @brief 모듈의 conf/info.xml 읽어서 정보를 구함
**/
function getAddonInfoXml($addon, $site_srl = 0) {
// 요청된 모듈의 경로를 구한다. 없으면 return
$addon_path = $this->getAddonPath($addon);
if(!$addon_path) return;
// 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음
$xml_file = sprintf("%sconf/info.xml", $addon_path);
if(!file_exists($xml_file)) return;
$oXmlParser = new XmlParser();
$tmp_xml_obj = $oXmlParser->loadXmlFile($xml_file);
$xml_obj = $tmp_xml_obj->addon;
if(!$xml_obj) return;
// DB에 설정된 내역을 가져온다
$db_args->addon = $addon;
if(!$site_srl) $output = executeQuery('addon.getAddonInfo',$db_args);
else {
$db_args->site_srl = $site_srl;
$output = executeQuery('addon.getSiteAddonInfo',$db_args);
}
$extra_vals = unserialize($output->data->extra_vars);
if($extra_vals->mid_list) {
$addon_info->mid_list = $extra_vals->mid_list;
} else {
$addon_info->mid_list = array();
}
// 애드온 정보
if($xml_obj->version && $xml_obj->attrs->version == '0.2') {
// addon format v0.2
sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d);
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$addon_info->addon_name = $addon;
$addon_info->title = $xml_obj->title->body;
$addon_info->description = trim($xml_obj->description->body);
$addon_info->version = $xml_obj->version->body;
$addon_info->homepage = $xml_obj->link->body;
$addon_info->license = $xml_obj->license->body;
$addon_info->license_link = $xml_obj->license->attrs->link;
if(!is_array($xml_obj->author)) $author_list[] = $xml_obj->author;
else $author_list = $xml_obj->author;
foreach($author_list as $author) {
unset($author_obj);
$author_obj->name = $author->name->body;
$author_obj->email_address = $author->attrs->email_address;
$author_obj->homepage = $author->attrs->link;
$addon_info->author[] = $author_obj;
}
// 확장변수를 정리
if($xml_obj->extra_vars) {
$extra_var_groups = $xml_obj->extra_vars->group;
if(!$extra_var_groups) $extra_var_groups = $xml_obj->extra_vars;
if(!is_array($extra_var_groups)) $extra_var_groups = array($extra_var_groups);
foreach($extra_var_groups as $group) {
$extra_vars = $group->var;
if(!is_array($group->var)) $extra_vars = array($group->var);
foreach($extra_vars as $key => $val) {
unset($obj);
if(!$val->attrs->type) { $val->attrs->type = 'text'; }
$obj->group = $group->title->body;
$obj->name = $val->attrs->name;
$obj->title = $val->title->body;
$obj->type = $val->attrs->type;
$obj->description = $val->description->body;
$obj->value = $extra_vals->{$obj->name};
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
// 'select'type에서 option목록을 구한다.
if(is_array($val->options)) {
$option_count = count($val->options);
for($i = 0; $i < $option_count; $i++) {
$obj->options[$i]->title = $val->options[$i]->title->body;
$obj->options[$i]->value = $val->options[$i]->attrs->value;
}
} else {
$obj->options[0]->title = $val->options[0]->title->body;
$obj->options[0]->value = $val->options[0]->attrs->value;
}
$addon_info->extra_vars[] = $obj;
}
}
}
// history
if($xml_obj->history) {
if(!is_array($xml_obj->history)) $history[] = $xml_obj->history;
else $history = $xml_obj->history;
foreach($history as $item) {
unset($obj);
if($item->author) {
(!is_array($item->author)) ? $obj->author_list[] = $item->author : $obj->author_list = $item->author;
foreach($obj->author_list as $author) {
unset($author_obj);
$author_obj->name = $author->name->body;
$author_obj->email_address = $author->attrs->email_address;
$author_obj->homepage = $author->attrs->link;
$obj->author[] = $author_obj;
}
}
$obj->name = $item->name->body;
$obj->email_address = $item->attrs->email_address;
$obj->homepage = $item->attrs->link;
$obj->version = $item->attrs->version;
$obj->date = $item->attrs->date;
$obj->description = $item->description->body;
if($item->log) {
(!is_array($item->log)) ? $obj->log[] = $item->log : $obj->log = $item->log;
foreach($obj->log as $log) {
unset($log_obj);
$log_obj->text = $log->body;
$log_obj->link = $log->attrs->link;
$obj->logs[] = $log_obj;
}
}
$addon_info->history[] = $obj;
}
}
} else {
// addon format 0.1
$addon_info->addon_name = $addon;
$addon_info->title = $xml_obj->title->body;
$addon_info->description = trim($xml_obj->author->description->body);
$addon_info->version = $xml_obj->attrs->version;
sscanf($xml_obj->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d);
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$author_obj->name = $xml_obj->author->name->body;
$author_obj->email_address = $xml_obj->author->attrs->email_address;
$author_obj->homepage = $xml_obj->author->attrs->link;
$addon_info->author[] = $author_obj;
if($xml_obj->extra_vars) {
// 확장변수를 정리
$extra_var_groups = $xml_obj->extra_vars->group;
if(!$extra_var_groups) $extra_var_groups = $xml_obj->extra_vars;
if(!is_array($extra_var_groups)) $extra_var_groups = array($extra_var_groups);
foreach($extra_var_groups as $group) {
$extra_vars = $group->var;
if(!is_array($group->var)) $extra_vars = array($group->var);
foreach($extra_vars as $key => $val) {
unset($obj);
if(!$val->type->body) { $val->type->body = 'text'; }
$obj->group = $group->title->body;
$obj->name = $val->attrs->name;
$obj->title = $val->title->body;
$obj->type = $val->type->body;
$obj->description = $val->description->body;
$obj->value = $extra_vals->{$obj->name};
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
// 'select'type에서 option목록을 구한다.
if(is_array($val->options)) {
$option_count = count($val->options);
for($i = 0; $i < $option_count; $i++) {
$obj->options[$i]->title = $val->options[$i]->title->body;
$obj->options[$i]->value = $val->options[$i]->value->body;
}
}
$addon_info->extra_vars[] = $obj;
}
}
}
}
return $addon_info;
}
/**
* @brief 활성화된 애드온 목록을 구해옴
**/
function getInsertedAddons($site_srl = 0) {
$args->list_order = 'addon';
if(!$site_srl) $output = executeQuery('addon.getAddons', $args);
else {
$args->site_srl = $site_srl;
$output = executeQuery('addon.getSiteAddons', $args);
}
if(!$output->data) return array();
if(!is_array($output->data)) $output->data = array($output->data);
$activated_count = count($output->data);
for($i=0;$i<$activated_count;$i++) {
$addon = $output->data[$i];
$addon_list[$addon->addon] = $addon;
}
return $addon_list;
}
/**
* @brief 애드온이 활성화 되어 있는지 체크
**/
function isActivatedAddon($addon, $site_srl = 0, $type = "pc") {
$args->addon = $addon;
if(!$site_srl) {
if($type == "pc") $output = executeQuery('addon.getAddonIsActivated', $args);
else $output = executeQuery('addon.getMAddonIsActivated', $args);
}
else {
$args->site_srl = $site_srl;
if($type == "pc") $output = executeQuery('addon.getSiteAddonIsActivated', $args);
else $output = executeQuery('addon.getSiteMAddonIsActivated', $args);
}
if($output->data->count>0) return true;
return false;
}
}
?>
<?php
/**
* @class addonAdminModel
* @author NHN (developers@xpressengine.com)
* @brief admin model class of addon modules
**/
class addonAdminModel extends addon {
/**
* @brief Initialization
**/
function init() {
}
/**
* @brief Wanted to add the path to
**/
function getAddonPath($addon_name) {
$class_path = sprintf('./addons/%s/', $addon_name);
if(is_dir($class_path)) return $class_path;
return "";
}
/**
* @brief Get addon list for super admin
**/
function getAddonListForSuperAdmin()
{
$addonList = $this->getAddonList(0, 'site');
$oAutoinstallModel = &getModel('autoinstall');
foreach($addonList as $key => $addon)
{
// get easyinstall remove url
$packageSrl = $oAutoinstallModel->getPackageSrlByPath($addon->path);
$addonList[$key]->remove_url = $oAutoinstallModel->getRemoveUrlByPackageSrl($packageSrl);
// get easyinstall need update
$package = $oAutoinstallModel->getInstalledPackages($packageSrl);
$addonList[$key]->need_update = $package[$packageSrl]->need_update;
// get easyinstall update url
if ($addonList[$key]->need_update == 'Y')
{
$addonList[$key]->update_url = $oAutoinstallModel->getUpdateUrlByPackageSrl($packageSrl);
}
}
return $addonList;
}
/**
* @brief Wanted to add the kind of information and
**/
function getAddonList($site_srl = 0, $gtype = 'site') {
// Wanted to add a list of activated
$inserted_addons = $this->getInsertedAddons($site_srl, $gtype);
// Downloaded and installed add-on to the list of Wanted
$searched_list = FileHandler::readDir('./addons','/^([a-zA-Z0-9-_]+)$/');
$searched_count = count($searched_list);
if(!$searched_count) return;
sort($searched_list);
$oAddonAdminController = &getAdminController('addon');
for($i=0;$i<$searched_count;$i++) {
// Add the name of
$addon_name = $searched_list[$i];
if($addon_name == "smartphone") continue;
// Add the path (files/addons precedence)
$path = $this->getAddonPath($addon_name);
// Wanted information on the add-on
unset($info);
$info = $this->getAddonInfoXml($addon_name, $site_srl, $gtype);
$info->addon = $addon_name;
$info->path = $path;
$info->activated = false;
$info->mactivated = false;
$info->fixed = false;
// Check if a permossion is granted entered in DB
if(!in_array($addon_name, array_keys($inserted_addons))) {
// If not, type in the DB type (model, perhaps because of the hate doing this haneungeo .. ㅡ. ㅜ)
$oAddonAdminController->doInsert($addon_name, $site_srl, $type);
// Is activated
} else {
if($inserted_addons[$addon_name]->is_used=='Y') $info->activated = true;
if($inserted_addons[$addon_name]->is_used_m=='Y') $info->mactivated = true;
if ($gtype == 'global' && $inserted_addons[$addon_name]->is_fixed == 'Y') $info->fixed = true;
}
$list[] = $info;
}
return $list;
}
/**
* @brief Modules conf/info.xml wanted to read the information
**/
function getAddonInfoXml($addon, $site_srl = 0, $gtype = 'site') {
// Get a path of the requested module. Return if not exists.
$addon_path = $this->getAddonPath($addon);
if(!$addon_path) return;
// Read the xml file for module skin information
$xml_file = sprintf("%sconf/info.xml", $addon_path);
if(!file_exists($xml_file)) return;
$oXmlParser = new XmlParser();
$tmp_xml_obj = $oXmlParser->loadXmlFile($xml_file);
$xml_obj = $tmp_xml_obj->addon;
if(!$xml_obj) return;
// DB is set to bring history
$db_args->addon = $addon;
if($gtype == 'global') $output = executeQuery('addon.getAddonInfo',$db_args);
else {
$db_args->site_srl = $site_srl;
$output = executeQuery('addon.getSiteAddonInfo',$db_args);
}
$extra_vals = unserialize($output->data->extra_vars);
if($extra_vals->mid_list) {
$addon_info->mid_list = $extra_vals->mid_list;
} else {
$addon_info->mid_list = array();
}
// Add information
if($xml_obj->version && $xml_obj->attrs->version == '0.2') {
// addon format v0.2
sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d);
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$addon_info->addon_name = $addon;
$addon_info->title = $xml_obj->title->body;
$addon_info->description = trim($xml_obj->description->body);
$addon_info->version = $xml_obj->version->body;
$addon_info->homepage = $xml_obj->link->body;
$addon_info->license = $xml_obj->license->body;
$addon_info->license_link = $xml_obj->license->attrs->link;
if(!is_array($xml_obj->author)) $author_list[] = $xml_obj->author;
else $author_list = $xml_obj->author;
foreach($author_list as $author) {
unset($author_obj);
$author_obj->name = $author->name->body;
$author_obj->email_address = $author->attrs->email_address;
$author_obj->homepage = $author->attrs->link;
$addon_info->author[] = $author_obj;
}
// Expand the variable order
if($xml_obj->extra_vars) {
$extra_var_groups = $xml_obj->extra_vars->group;
if(!$extra_var_groups) $extra_var_groups = $xml_obj->extra_vars;
if(!is_array($extra_var_groups)) $extra_var_groups = array($extra_var_groups);
foreach($extra_var_groups as $group) {
$extra_vars = $group->var;
if(!is_array($group->var)) $extra_vars = array($group->var);
foreach($extra_vars as $key => $val) {
unset($obj);
if(!$val->attrs->type) { $val->attrs->type = 'text'; }
$obj->group = $group->title->body;
$obj->name = $val->attrs->name;
$obj->title = $val->title->body;
$obj->type = $val->attrs->type;
$obj->description = $val->description->body;
$obj->value = $extra_vals->{$obj->name};
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
// 'Select'type obtained from the option list.
if(is_array($val->options)) {
$option_count = count($val->options);
for($i = 0; $i < $option_count; $i++) {
$obj->options[$i]->title = $val->options[$i]->title->body;
$obj->options[$i]->value = $val->options[$i]->attrs->value;
}
} else {
$obj->options[0]->title = $val->options[0]->title->body;
$obj->options[0]->value = $val->options[0]->attrs->value;
}
$addon_info->extra_vars[] = $obj;
}
}
}
// history
if($xml_obj->history) {
if(!is_array($xml_obj->history)) $history[] = $xml_obj->history;
else $history = $xml_obj->history;
foreach($history as $item) {
unset($obj);
if($item->author) {
(!is_array($item->author)) ? $obj->author_list[] = $item->author : $obj->author_list = $item->author;
foreach($obj->author_list as $author) {
unset($author_obj);
$author_obj->name = $author->name->body;
$author_obj->email_address = $author->attrs->email_address;
$author_obj->homepage = $author->attrs->link;
$obj->author[] = $author_obj;
}
}
$obj->name = $item->name->body;
$obj->email_address = $item->attrs->email_address;
$obj->homepage = $item->attrs->link;
$obj->version = $item->attrs->version;
$obj->date = $item->attrs->date;
$obj->description = $item->description->body;
if($item->log) {
(!is_array($item->log)) ? $obj->log[] = $item->log : $obj->log = $item->log;
foreach($obj->log as $log) {
unset($log_obj);
$log_obj->text = $log->body;
$log_obj->link = $log->attrs->link;
$obj->logs[] = $log_obj;
}
}
$addon_info->history[] = $obj;
}
}
} else {
// addon format 0.1
$addon_info->addon_name = $addon;
$addon_info->title = $xml_obj->title->body;
$addon_info->description = trim($xml_obj->author->description->body);
$addon_info->version = $xml_obj->attrs->version;
sscanf($xml_obj->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d);
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$author_obj->name = $xml_obj->author->name->body;
$author_obj->email_address = $xml_obj->author->attrs->email_address;
$author_obj->homepage = $xml_obj->author->attrs->link;
$addon_info->author[] = $author_obj;
if($xml_obj->extra_vars) {
// Expand the variable order
$extra_var_groups = $xml_obj->extra_vars->group;
if(!$extra_var_groups) $extra_var_groups = $xml_obj->extra_vars;
if(!is_array($extra_var_groups)) $extra_var_groups = array($extra_var_groups);
foreach($extra_var_groups as $group) {
$extra_vars = $group->var;
if(!is_array($group->var)) $extra_vars = array($group->var);
foreach($extra_vars as $key => $val) {
unset($obj);
if(!$val->type->body) { $val->type->body = 'text'; }
$obj->group = $group->title->body;
$obj->name = $val->attrs->name;
$obj->title = $val->title->body;
$obj->type = $val->type->body;
$obj->description = $val->description->body;
$obj->value = $extra_vals->{$obj->name};
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
// 'Select'type obtained from the option list.
if(is_array($val->options)) {
$option_count = count($val->options);
for($i = 0; $i < $option_count; $i++) {
$obj->options[$i]->title = $val->options[$i]->title->body;
$obj->options[$i]->value = $val->options[$i]->value->body;
}
}
$addon_info->extra_vars[] = $obj;
}
}
}
}
return $addon_info;
}
/**
* @brief Add to the list of active guhaeom
**/
function getInsertedAddons($site_srl = 0, $gtype = 'site') {
$args->list_order = 'addon';
if($gtype == 'global') $output = executeQuery('addon.getAddons', $args);
else {
$args->site_srl = $site_srl;
$output = executeQuery('addon.getSiteAddons', $args);
}
if(!$output->data) return array();
if(!is_array($output->data)) $output->data = array($output->data);
$activated_count = count($output->data);
for($i=0;$i<$activated_count;$i++) {
$addon = $output->data[$i];
$addon_list[$addon->addon] = $addon;
}
return $addon_list;
}
/**
* @brief Add-on is enabled, check whether
**/
function isActivatedAddon($addon, $site_srl = 0, $type = "pc", $gtype = 'site') {
$args->addon = $addon;
if($gtype == 'global') {
if($type == "pc") $output = executeQuery('addon.getAddonIsActivated', $args);
else $output = executeQuery('addon.getMAddonIsActivated', $args);
}
else {
$args->site_srl = $site_srl;
if($type == "pc") $output = executeQuery('addon.getSiteAddonIsActivated', $args);
else $output = executeQuery('addon.getSiteMAddonIsActivated', $args);
}
if($output->data->count>0) return true;
return false;
}
}
?>

View file

@ -1,107 +1,109 @@
<?php
/**
* @class addonAdminView
* @author NHN (developers@xpressengine.com)
* @brief addon 모듈의 admin view class
**/
class addonAdminView extends addon {
/**
* @brief 초기화
**/
function init() {
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* @brief 애드온 관리 메인 페이지 (목록 보여줌)
**/
function dispAddonAdminIndex() {
$site_module_info = Context::get('site_module_info');
// 애드온 목록을 세팅
$oAddonModel = &getAdminModel('addon');
$addon_list = $oAddonModel->getAddonList($site_module_info->site_srl);
Context::set('addon_list', $addon_list);
$security = new Security();
$security->encodeHTML('addon_list..', 'addon_list..author..');
// 템플릿 패스 및 파일을 지정
$this->setTemplateFile('addon_list');
}
/**
* @biref 애드온 세부 설정 팝업 출력
**/
function dispAddonAdminSetup() {
$site_module_info = Context::get('site_module_info');
// 요청된 애드온을 구함
$selected_addon = Context::get('selected_addon');
// 요청된 애드온의 정보를 구함
$oAddonModel = &getAdminModel('addon');
$addon_info = $oAddonModel->getAddonInfoXml($selected_addon, $site_module_info->site_srl);
Context::set('addon_info', $addon_info);
// mid 목록을 가져옴
$oModuleModel = &getModel('module');
$oModuleAdminModel = &getAdminModel('module');
if($site_module_info->site_srl) $args->site_srl = $site_module_info->site_srl;
$mid_list = $oModuleModel->getMidList($args);
// module_category와 module의 조합
if(!$site_module_info->site_srl) {
// 모듈 카테고리 목록을 구함
$module_categories = $oModuleModel->getModuleCategories();
if($mid_list) {
foreach($mid_list as $module_srl => $module) {
$module_categories[$module->module_category_srl]->list[$module_srl] = $module;
}
}
} else {
$module_categories[0]->list = $mid_list;
}
Context::set('mid_list',$module_categories);
// 레이아웃을 팝업으로 지정
$this->setLayoutFile('popup_layout');
// 템플릿 패스 및 파일을 지정
$this->setTemplateFile('setup_addon');
$security = new Security();
$security->encodeHTML('addon_info.', 'addon_info.author..', 'mid_list....');
}
/**
* @brief 애드온의 상세 정보(conf/info.xml) 팝업 출력
**/
function dispAddonAdminInfo() {
$site_module_info = Context::get('site_module_info');
// 요청된 애드온을 구함
$selected_addon = Context::get('selected_addon');
// 요청된 애드온의 정보를 구함
$oAddonModel = &getAdminModel('addon');
$addon_info = $oAddonModel->getAddonInfoXml($selected_addon, $site_module_info->site_srl);
Context::set('addon_info', $addon_info);
// 레이아웃을 팝업으로 지정
$this->setLayoutFile('popup_layout');
// 템플릿 패스 및 파일을 지정
$this->setTemplateFile('addon_info');
$security = new Security();
$security->encodeHTML('addon_info.', 'addon_info.author..');
}
}
?>
<?php
/**
* @class addonAdminView
* @author NHN (developers@xpressengine.com)
* @brief admin view class of addon modules
**/
class addonAdminView extends addon {
/**
* @brief Initialization
**/
function init() {
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* @brief Add Management main page (showing the list)
**/
function dispAddonAdminIndex() {
$oAdminModel = &getAdminModel('admin');
// Add to the list settings
$oAddonModel = &getAdminModel('addon');
$addon_list = $oAddonModel->getAddonListForSuperAdmin();
$security = new Security($addon_list);
$addon_list = $security->encodeHTML('..', '..author..');
foreach($addon_list as $no => $addon_info)
{
$addon_list[$no]->description = nl2br(trim($addon_info->description));
}
Context::set('addon_list', $addon_list);
Context::set('addon_count', count($addon_list));
// Template specifies the path and file
$this->setTemplateFile('addon_list');
}
/**
* @biref Setting out the details pop-up add-on
**/
function dispAddonAdminSetup() {
$site_module_info = Context::get('site_module_info');
// Wanted to add the requested
$selected_addon = Context::get('selected_addon');
// Wanted to add the requested information
$oAddonModel = &getAdminModel('addon');
$addon_info = $oAddonModel->getAddonInfoXml($selected_addon, $site_module_info->site_srl, 'site');
Context::set('addon_info', $addon_info);
// Get a mid list
$oModuleModel = &getModel('module');
$oModuleAdminModel = &getAdminModel('module');
if($site_module_info->site_srl) $args->site_srl = $site_module_info->site_srl;
$columnList = array('module_srl', 'module_category_srl', 'mid', 'browser_title');
$mid_list = $oModuleModel->getMidList($args, $columnList);
// module_category and module combination
if(!$site_module_info->site_srl) {
// Get a list of module categories
$module_categories = $oModuleModel->getModuleCategories();
if(is_array($mid_list)) {
foreach($mid_list as $module_srl => $module) {
$module_categories[$module->module_category_srl]->list[$module_srl] = $module;
}
}
} else {
$module_categories[0]->list = $mid_list;
}
Context::set('mid_list',$module_categories);
// Template specifies the path and file
$this->setTemplateFile('setup_addon');
if(Context::get('module') != 'admin')
{
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
}
$security = new Security();
$security->encodeHTML('addon_info.', 'addon_info.author..', 'mid_list....');
}
/**
* @brief Add details (conf/info.xml) a pop-out
**/
function dispAddonAdminInfo() {
$site_module_info = Context::get('site_module_info');
// Wanted to add the requested
$selected_addon = Context::get('selected_addon');
// Wanted to add the requested information
$oAddonModel = &getAdminModel('addon');
$addon_info = $oAddonModel->getAddonInfoXml($selected_addon, $site_module_info->site_srl);
Context::set('addon_info', $addon_info);
// Set the layout to be pop-up
$this->setLayoutFile('popup_layout');
// Template specifies the path and file
$this->setTemplateFile('addon_info');
$security = new Security();
$security->encodeHTML('addon_info.', 'addon_info.author..');
}
}
?>

View file

@ -1,71 +1,87 @@
<?php
/**
* @class addon
* @author NHN (developers@xpressengine.com)
* @brief addon 모듈의 high class
**/
class addon extends ModuleObject {
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
// 몇가지 애드온을 등록
$oAddonController = &getAdminController('addon');
$oAddonController->doInsert('autolink');
$oAddonController->doInsert('blogapi');
$oAddonController->doInsert('counter');
$oAddonController->doInsert('member_communication');
$oAddonController->doInsert('member_extra_info');
$oAddonController->doInsert('mobile');
$oAddonController->doInsert('referer');
$oAddonController->doInsert('resize_image');
$oAddonController->doInsert('openid_delegation_id');
$oAddonController->doInsert('point_level_icon');
// 몇가지 애드온을 기본 활성화 상태로 변경
$oAddonController->doActivate('autolink');
$oAddonController->doActivate('counter');
$oAddonController->doActivate('member_communication');
$oAddonController->doActivate('member_extra_info');
$oAddonController->doActivate('mobile');
$oAddonController->doActivate('referer');
$oAddonController->doActivate('resize_image');
$oAddonController->makeCacheFile(0);
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists("addons", "is_used_m")) return true;
if(!$oDB->isColumnExists("addons_site", "is_used_m")) return true;
return false;
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists("addons", "is_used_m")) {
$oDB->addColumn("addons", "is_used_m", "char", 1, "N", true);
}
if(!$oDB->isColumnExists("addons_site", "is_used_m")) {
$oDB->addColumn("addons_site", "is_used_m", "char", 1, "N", true);
}
return new Object();
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
FileHandler::removeFilesInDir('./files/cache/addons');
}
}
?>
<?php
/**
* @class addon
* @author NHN (developers@xpressengine.com)
* @brief high class of addon modules
**/
class addon extends ModuleObject {
/**
* @brief Implement if additional tasks are necessary when installing
**/
function moduleInstall() {
// Register to add a few
$oAddonController = &getAdminController('addon');
$oAddonController->doInsert('autolink', 0, 'site', 'Y');
$oAddonController->doInsert('blogapi');
$oAddonController->doInsert('counter', 0, 'site', 'Y');
$oAddonController->doInsert('member_communication', 0, 'site', 'Y');
$oAddonController->doInsert('member_extra_info', 0, 'site', 'Y');
$oAddonController->doInsert('mobile', 0, 'site', 'Y');
$oAddonController->doInsert('resize_image', 0, 'site', 'Y');
$oAddonController->doInsert('openid_delegation_id');
$oAddonController->doInsert('point_level_icon');
$oAddonController->makeCacheFile(0);
return new Object();
}
/**
* @brief a method to check if successfully installed
**/
function checkUpdate() {
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists("addons", "is_used_m")) return true;
if(!$oDB->isColumnExists("addons_site", "is_used_m")) return true;
// 2011. 7. 29. add is_fixed column
if (!$oDB->isColumnExists('addons', 'is_fixed')) return true;
return false;
}
/**
* @brief Execute update
**/
function moduleUpdate() {
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists("addons", "is_used_m")) {
$oDB->addColumn("addons", "is_used_m", "char", 1, "N", true);
}
if(!$oDB->isColumnExists("addons_site", "is_used_m")) {
$oDB->addColumn("addons_site", "is_used_m", "char", 1, "N", true);
}
// 2011. 7. 29. add is_fixed column
if (!$oDB->isColumnExists('addons', 'is_fixed'))
{
$oDB->addColumn('addons', 'is_fixed', 'char', 1, 'N', true);
// move addon info to addon_site table
$output = executeQueryArray('addon.getAddons');
if ($output->data)
{
foreach($output->data as $row)
{
$args->site_srl = 0;
$args->addon = $row->addon;
$args->is_used = $row->is_used;
$args->is_used_m = $row->is_used_m;
$args->extra_vars = $row->extra_vars;
executeQuery('addon.insertSiteAddon', $args);
}
}
}
return new Object(0, 'success_updated');
}
/**
* @brief Re-generate the cache file
**/
function recompileCache() {
}
}
?>

View file

@ -1,185 +1,183 @@
<?php
/**
* @class addonController
* @author NHN (developers@xpressengine.com)
* @brief addon 모듈의 controller class
**/
class addonController extends addon {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 메인/ 가상 사이트별 애드온 캐시 파일의 위치를 구함
**/
function getCacheFilePath($type = "pc") {
$site_module_info = Context::get('site_module_info');
$site_srl = $site_module_info->site_srl;
$addon_path = _XE_PATH_.'files/cache/addons/';
if($site_srl) $addon_file = $addon_path.$site_srl.$type.'.acivated_addons.cache.php';
else $addon_file = $addon_path.$type.'acivated_addons.cache.php';
if($this->addon_file_called) return $addon_file;
$this->addon_file_called = true;
if(!is_dir($addon_path)) FileHandler::makeDir($addon_path);
if(!file_exists($addon_file)) $this->makeCacheFile($site_srl, $type);
return $addon_file;
}
/**
* @brief 애드온 mid 추가 설정
**/
function _getMidList($selected_addon, $site_srl = 0) {
$oAddonAdminModel = &getAdminModel('addon');
$addon_info = $oAddonAdminModel->getAddonInfoXml($selected_addon, $site_srl);
return $addon_info->mid_list;
}
/**
* @brief 애드온 mid 추가 설정
**/
function _setAddMid($selected_addon,$mid, $site_srl=0) {
// 요청된 애드온의 정보를 구함
$mid_list = $this->_getMidList($selected_addon, $site_srl);
$mid_list[] = $mid;
$new_mid_list = array_unique($mid_list);
$this->_setMid($selected_addon,$new_mid_list, $site_srl);
}
/**
* @brief 애드온 mid 추가 설정
**/
function _setDelMid($selected_addon,$mid,$site_srl=0) {
// 요청된 애드온의 정보를 구함
$mid_list = $this->_getMidList($selected_addon,$site_srl);
$new_mid_list = array();
if(is_array($mid_list)){
for($i=0,$c=count($mid_list);$i<$c;$i++){
if($mid_list[$i] != $mid) $new_mid_list[] = $mid_list[$i];
}
}else{
$new_mid_list[] = $mid;
}
$this->_setMid($selected_addon,$new_mid_list,$site_srl);
}
/**
* @brief 애드온 mid 추가 설정
**/
function _setMid($selected_addon,$mid_list,$site_srl=0) {
$args->mid_list = join('|@|',$mid_list);
$this->doSetup($selected_addon, $args,$site_srl);
$this->makeCacheFile($site_srl);
}
/**
* @brief 애드온 mid 추가
**/
function procAddonSetupAddonAddMid() {
$site_module_info = Context::get('site_module_info');
$args = Context::getRequestVars();
$addon_name = $args->addon_name;
$mid = $args->mid;
$this->_setAddMid($addon_name,$mid,$site_module_info->site_srl);
}
/**
* @brief 애드온 mid 삭제
**/
function procAddonSetupAddonDelMid() {
$site_module_info = Context::get('site_module_info');
$args = Context::getRequestVars();
$addon_name = $args->addon_name;
$mid = $args->mid;
$this->_setDelMid($addon_name,$mid,$site_module_info->site_srl);
}
/**
* @brief 캐시 파일 생성
**/
function makeCacheFile($site_srl = 0, $type = "pc") {
// 모듈에서 애드온을 사용하기 위한 캐시 파일 생성
$buff = "";
$oAddonModel = &getAdminModel('addon');
$addon_list = $oAddonModel->getInsertedAddons($site_srl, $type);
foreach($addon_list as $addon => $val) {
if($val->addon == "smartphone") continue;
if(!is_dir(_XE_PATH_.'addons/'.$addon)) continue;
if(($type == "pc" && $val->is_used != 'Y') || ($type == "mobile" && $val->is_used_m != 'Y')) continue;
$extra_vars = unserialize($val->extra_vars);
$mid_list = $extra_vars->mid_list;
if(!is_array($mid_list)||!count($mid_list)) $mid_list = null;
$mid_list = base64_encode(serialize($mid_list));
if($val->extra_vars) {
unset($extra_vars);
$extra_vars = base64_encode($val->extra_vars);
}
$buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); if(file_exists("%saddons/%s/%s.addon.php") && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); $addon_path = "%saddons/%s/"; @include("%saddons/%s/%s.addon.php"); }', $mid_list, _XE_PATH_, $addon, $addon, $extra_vars, _XE_PATH_, $addon, _XE_PATH_, $addon, $addon);
}
$buff = sprintf('<?php if(!defined("__ZBXE__")) exit(); $_m = Context::get(\'mid\'); %s ?>', $buff);
$addon_path = _XE_PATH_.'files/cache/addons/';
if(!is_dir($addon_path)) FileHandler::makeDir($addon_path);
if($site_srl) $addon_file = $addon_path.$site_srl.$type.'.acivated_addons.cache.php';
else $addon_file = $addon_path.$type.'acivated_addons.cache.php';
FileHandler::writeFile($addon_file, $buff);
}
/**
* @brief 애드온 설정
**/
function doSetup($addon, $extra_vars,$site_srl=0) {
if($extra_vars->mid_list) $extra_vars->mid_list = explode('|@|', $extra_vars->mid_list);
$args->addon = $addon;
$args->extra_vars = serialize($extra_vars);
if(!$site_srl) return executeQuery('addon.updateAddon', $args);
$args->site_srl = $site_srl;
return executeQuery('addon.updateSiteAddon', $args);
}
/**
* @brief 가상 사이트에서의 애드온 정보 제거
**/
function removeAddonConfig($site_srl) {
$addon_path = _XE_PATH_.'files/cache/addons/';
$addon_file = $addon_path.$site_srl.'.acivated_addons.cache.php';
if(file_exists($addon_file)) FileHandler::removeFile($addon_file);
$args->site_srl = $site_srl;
executeQuery('addon.deleteSiteAddons', $args);
}
}
?>
<?php
/**
* @class addonController
* @author NHN (developers@xpressengine.com)
* @brief addon module's controller class
**/
class addonController extends addon {
/**
* @brief Initialization
**/
function init() {
}
/**
* @brief Main/Virtual-specific add-on file, the location of the cache Wanted
**/
function getCacheFilePath($type = "pc") {
$site_module_info = Context::get('site_module_info');
$site_srl = $site_module_info->site_srl;
$addon_path = _XE_PATH_.'files/cache/addons/';
$addon_file = $addon_path.$site_srl.$type.'.acivated_addons.cache.php';
if($this->addon_file_called) return $addon_file;
$this->addon_file_called = true;
if(!is_dir($addon_path)) FileHandler::makeDir($addon_path);
if(!file_exists($addon_file)) $this->makeCacheFile($site_srl, $type);
return $addon_file;
}
/**
* @brief Add-on mid settings
**/
function _getMidList($selected_addon, $site_srl = 0) {
$oAddonAdminModel = &getAdminModel('addon');
$addon_info = $oAddonAdminModel->getAddonInfoXml($selected_addon, $site_srl);
return $addon_info->mid_list;
}
/**
* @brief Add-on mid settings
**/
function _setAddMid($selected_addon,$mid, $site_srl=0) {
// Wanted to add the requested information
$mid_list = $this->_getMidList($selected_addon, $site_srl);
$mid_list[] = $mid;
$new_mid_list = array_unique($mid_list);
$this->_setMid($selected_addon,$new_mid_list, $site_srl);
}
/**
* @brief Add-on mid settings
**/
function _setDelMid($selected_addon,$mid,$site_srl=0) {
// Wanted to add the requested information
$mid_list = $this->_getMidList($selected_addon,$site_srl);
$new_mid_list = array();
if(is_array($mid_list)){
for($i=0,$c=count($mid_list);$i<$c;$i++){
if($mid_list[$i] != $mid) $new_mid_list[] = $mid_list[$i];
}
}else{
$new_mid_list[] = $mid;
}
$this->_setMid($selected_addon,$new_mid_list,$site_srl);
}
/**
* @brief Add-on mid settings
**/
function _setMid($selected_addon,$mid_list,$site_srl=0) {
$args->mid_list = join('|@|',$mid_list);
$this->doSetup($selected_addon, $args,$site_srl);
$this->makeCacheFile($site_srl);
}
/**
* @brief Add mid-on
**/
function procAddonSetupAddonAddMid() {
$site_module_info = Context::get('site_module_info');
$args = Context::getRequestVars();
$addon_name = $args->addon_name;
$mid = $args->mid;
$this->_setAddMid($addon_name,$mid,$site_module_info->site_srl);
}
/**
* @brief Add mid Delete
**/
function procAddonSetupAddonDelMid() {
$site_module_info = Context::get('site_module_info');
$args = Context::getRequestVars();
$addon_name = $args->addon_name;
$mid = $args->mid;
$this->_setDelMid($addon_name,$mid,$site_module_info->site_srl);
}
/**
* @brief Re-generate the cache file
**/
function makeCacheFile($site_srl = 0, $type = "pc", $gtype = 'site') {
// Add-on module for use in creating the cache file
$buff = "";
$oAddonModel = &getAdminModel('addon');
$addon_list = $oAddonModel->getInsertedAddons($site_srl, $gtype);
foreach($addon_list as $addon => $val) {
if($val->addon == "smartphone") continue;
if(!is_dir(_XE_PATH_.'addons/'.$addon)) continue;
if(($type == "pc" && $val->is_used != 'Y') || ($type == "mobile" && $val->is_used_m != 'Y') || ($gtype == 'global' && $val->is_fixed != 'Y')) continue;
$extra_vars = unserialize($val->extra_vars);
$mid_list = $extra_vars->mid_list;
if(!is_array($mid_list)||!count($mid_list)) $mid_list = null;
$mid_list = base64_encode(serialize($mid_list));
if($val->extra_vars) {
unset($extra_vars);
$extra_vars = base64_encode($val->extra_vars);
}
$buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); if(file_exists("%saddons/%s/%s.addon.php") && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); $addon_path = "%saddons/%s/"; @include("%saddons/%s/%s.addon.php"); }', $mid_list, _XE_PATH_, $addon, $addon, $extra_vars, _XE_PATH_, $addon, _XE_PATH_, $addon, $addon);
}
$buff = sprintf('<?php if(!defined("__ZBXE__")) exit(); $_m = Context::get(\'mid\'); %s ?>', $buff);
$addon_path = _XE_PATH_.'files/cache/addons/';
if(!is_dir($addon_path)) FileHandler::makeDir($addon_path);
if($gtype == 'site') $addon_file = $addon_path.$site_srl.$type.'.acivated_addons.cache.php';
else $addon_file = $addon_path.$type.'.acivated_addons.cache.php';
FileHandler::writeFile($addon_file, $buff);
}
/**
* @brief Add-On Set
**/
function doSetup($addon, $extra_vars,$site_srl=0, $gtype = 'site') {
if(!is_array($extra_vars->mid_list)) unset($extra_vars->mid_list);
$args->addon = $addon;
$args->extra_vars = serialize($extra_vars);
if($gtype == 'global') return executeQuery('addon.updateAddon', $args);
$args->site_srl = $site_srl;
return executeQuery('addon.updateSiteAddon', $args);
}
/**
* @brief Remove add-on information in the virtual site
**/
function removeAddonConfig($site_srl) {
$addon_path = _XE_PATH_.'files/cache/addons/';
$addon_file = $addon_path.$site_srl.'.acivated_addons.cache.php';
if(file_exists($addon_file)) FileHandler::removeFile($addon_file);
$args->site_srl = $site_srl;
executeQuery('addon.deleteSiteAddons', $args);
}
}
?>

View file

@ -1,39 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">애드온</title>
<title xml:lang="en">Addon</title>
<title xml:lang="vi">Addon</title>
<title xml:lang="es">Addon</title>
<title xml:lang="zh-CN">插件管理</title>
<title xml:lang="jp">アドオン</title>
<title xml:lang="fr">Additions</title>
<title xml:lang="ru">Аддон</title>
<title xml:lang="zh-TW">附加元件</title>
<title xml:lang="tr">Eklenti</title>
<description xml:lang="ko">애드온을 등록하거나 사용/미사용을 설정하는 애드온 관리 모듈입니다.</description>
<description xml:lang="en">This module is for maintaining addons which can toggle use and disuse states.</description>
<description xml:lang="vi">Module này dành cho việc bảo trì những Addon đang sử dụng và không sử dụng.</description>
<description xml:lang="es">Este Módulo es para agregar Addons, como también el manejo de ellos.</description>
<description xml:lang="zh-CN">登录插件或设置启用/禁用插件的管理模块。</description>
<description xml:lang="jp">アドオンの「登録、使用・未使用」などを設定する管理モジュールです。</description>
<description xml:lang="fr">Ce module est pour les Additions de maintien qui peuvent basculer des états d'utilisation et de désuétude. </description>
<description xml:lang="ru">Этот модуль служит для управления аддонами, использование которых Вы можете включать и выключать.</description>
<description xml:lang="zh-TW">設定附加元件「登錄、啟用、禁用」的管理模組。</description>
<description xml:lang="tr">Bu modül, kullanımı değişebilecek veya kullanım dışı kalabilecek eklentileri korumak içindir.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>utility</category>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="fr">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
<name xml:lang="tr">NHN</name>
</author>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">애드온</title>
<title xml:lang="en">Addon</title>
<title xml:lang="vi">Addon</title>
<title xml:lang="es">Addon</title>
<title xml:lang="zh-CN">插件管理</title>
<title xml:lang="jp">アドオン</title>
<title xml:lang="fr">Additions</title>
<title xml:lang="ru">Аддон</title>
<title xml:lang="zh-TW">附加元件</title>
<title xml:lang="tr">Eklenti</title>
<description xml:lang="ko">애드온을 등록하거나 사용/미사용을 설정하는 애드온 관리 모듈입니다.</description>
<description xml:lang="en">This module is for maintaining addons which can toggle between two states when use and not used.</description>
<description xml:lang="vi">Module này dành cho việc bảo trì những Addon đang sử dụng và không sử dụng.</description>
<description xml:lang="es">Este Módulo es para agregar Addons, como también el manejo de ellos.</description>
<description xml:lang="zh-CN">登录插件或设置启用/禁用插件的管理模块。</description>
<description xml:lang="jp">アドオンの「登録、使用・未使用」などを設定する管理モジュールです。</description>
<description xml:lang="fr">Ce module est pour les Additions de maintien qui peuvent basculer des états d'utilisation et de désuétude. </description>
<description xml:lang="ru">Этот модуль служит для управления аддонами, использование которых Вы можете включать и выключать.</description>
<description xml:lang="zh-TW">設定附加元件「登錄、啟用、禁用」的管理模組。</description>
<description xml:lang="tr">Bu modül, kullanımı değişebilecek veya kullanım dışı kalabilecek eklentileri korumak içindir.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>utility</category>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="fr">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
<name xml:lang="tr">NHN</name>
</author>
</module>

View file

@ -3,12 +3,28 @@
<grants />
<permissions />
<actions>
<action name="dispAddonAdminIndex" type="view" standalone="true" admin_index="true" />
<action name="dispAddonAdminIndex" type="view" standalone="true" admin_index="true" menu_name="installedAddon" menu_index="true" />
<action name="dispAddonAdminInfo" type="view" standalone="true" />
<action name="dispAddonAdminSetup" type="view" standalone="true" />
<action name="dispAddonAdminSetup" type="view" standalone="true" menu_name="installedAddon" />
<action name="procAddonAdminToggleActivate" type="controller" standalone="true" />
<action name="procAddonAdminSetupAddon" type="controller" standalone="true" />
<action name="procAddonAdminSetupAddon" type="controller" standalone="true" ruleset="updateAddonSetup" />
<action name="procAddonSetupAddonAddMid" type="controller" />
<action name="procAddonSetupAddonDelMid" type="controller" />
<action name="procAddonAdminSaveActivate" type="controller" />
</actions>
<menus>
<menu name="installedAddon">
<title xml:lang="en">Installed Addon</title>
<title xml:lang="ko">설치된 애드온</title>
<title xml:lang="zh-CN">Installed Addon</title>
<title xml:lang="jp">Installed Addon</title>
<title xml:lang="es">Installed Addon</title>
<title xml:lang="ru">Installed Addon</title>
<title xml:lang="fr">Installed Addon</title>
<title xml:lang="zh-TW">Installed Addon</title>
<title xml:lang="vi">Installed Addon</title>
<title xml:lang="mn">Installed Addon</title>
<title xml:lang="tr">Installed Addon</title>
</menu>
</menus>
</module>

View file

@ -1,17 +0,0 @@
<?php
/**
* @file en.lang.php
* @author NHN (developers@xpressengine.com)
* @brief English Language Pack
**/
$lang->addon = "Addon";
$lang->addon_info = 'Summary of this Addon';
$lang->addon_maker = 'Author of this Addon';
$lang->addon_license = 'License';
$lang->addon_history = 'Addon History';
$lang->about_addon_mid = "Addons can select targets.<br />(All targets will be selected when nothing is selected)";
$lang->about_addon = 'Addons control many actions performed in your site rather than display HTML results.<br />You can control useful functions simply by toggling ON/OFF switch';
?>

View file

@ -1,17 +0,0 @@
<?php
/**
* @archivo es.lang.php
* @autor NHN (developers@xpressengine.com)
* @sumario Paquete del idioma español
**/
$lang->addon = "Addon";
$lang->addon_info = 'Información de Addon';
$lang->addon_maker = 'Autor de Addon';
$lang->addon_license = 'License';
$lang->addon_history = 'Historia de Addon ';
$lang->about_addon_mid = "Add-ons se puede utilizar para especificar el destino. <br /> (Todo gratis, están disponibles en todos los destinos)";
$lang->about_addon = 'Addon is para controlar las acciones y no para mostrar el resultado en HTML.<br /> Sólo con activar o desactivar el addon que desee, podrá obtener funciones útiles para la administración de tu sitio web.';
?>

View file

@ -1,17 +0,0 @@
<?php
/**
* @file modules/addon/lang/fr.lang.php
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent(PierreDuvent@gamil.com)
* @brief Paquet du langage en français pour le module de Compagnon
**/
$lang->addon = "Compagnon";
$lang->addon_info = 'Le résumé de la Compagnon';
$lang->addon_maker = 'L\'Auteur de la Compagnon';
$lang->addon_license = 'Licence';
$lang->addon_history = 'L\'Histoire de la Compagnon';
$lang->about_addon_mid = "On peut choisir des objets dans lesquels la Compagnon soit utilisé.<br />(Tout sera choisi quand rien n'est choisi.)";
$lang->about_addon = 'La Compagnon, c\'est pour contrôler les actions plutôt d\'imprimer des résultats de HTML.<br/>Par la Touche à Bascule des compagnons que vous voulez faire marcher ou arrêter, vous pouvez appliquer les fonctions très utiles à administrer votre site Web.';
?>

View file

@ -1,17 +0,0 @@
<?php
/**
* @file modules/addon/lang/jp.lang.php
* @author NHN (developers@xpressengine.com) 翻訳RisaPapa、ミニミ
* @brief 日本語言語パッケージ
**/
$lang->addon = 'アドオン';
$lang->addon_info = 'アドオン情報';
$lang->addon_maker = 'アドオン制作者';
$lang->addon_license = 'ライセンス';
$lang->addon_history = '変更履歴';
$lang->about_addon_mid = 'アドオンが使われる対象を指定します。<br />(選択なしの場合、全てのモジュールが利用可能対象)';
$lang->about_addon = 'アドオンは、HTMLの出力をコントロールすると言うより、動作を制御する役割をします。お好みのアドオンを「使用/未使用」に設定するだけで、サイトの運営に有用な機能が利用出来ます。';
?>

View file

@ -1,17 +0,0 @@
<?php
/**
* @file ko.lang.php
* @author NHN (developers@xpressengine.com)
* @brief 한국어 언어팩
**/
$lang->addon = '애드온';
$lang->addon_info = '애드온 정보';
$lang->addon_maker = '애드온 제작자';
$lang->addon_license = '라이선스';
$lang->addon_history = '변경 이력';
$lang->about_addon_mid = '애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제 시 모든 대상에서 사용 가능합니다.)';
$lang->about_addon = '애드온은 HTML결과물을 출력하기보다는 동작을 제어하는 역할을 합니다.<br />원하시는 애드온을 ON/OFF 하시는 것만으로도 사이트 운영에 유용한 기능을 연동할 수 있습니다.';
?>

108
modules/addon/lang/lang.xml Normal file
View file

@ -0,0 +1,108 @@
<?xml version='1.0' encoding='UTF-8'?>
<lang>
<item name="addon">
<value xml:lang="ko"><![CDATA[애드온]]></value>
<value xml:lang="en"><![CDATA[Addon]]></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[Compagnon]]></value>
<value xml:lang="ru"><![CDATA[Аддон]]></value>
<value xml:lang="tr"><![CDATA[Eklentiler]]></value>
</item>
<item name="addon_info">
<value xml:lang="ko"><![CDATA[애드온 정보]]></value>
<value xml:lang="en"><![CDATA[Summary of this Addon]]></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[Le résumé de la Compagnon]]></value>
<value xml:lang="ru"><![CDATA[Информация об аддоне]]></value>
<value xml:lang="es"><![CDATA[Información de Addon]]></value>
<value xml:lang="tr"><![CDATA[Eklenti Özeti]]></value>
<value xml:lang="vi"><![CDATA[Thông tin về Addon]]></value>
</item>
<item name="addon_maker">
<value xml:lang="ko"><![CDATA[애드온 제작자]]></value>
<value xml:lang="en"><![CDATA[Author of this Addon]]></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[L'Auteur de la Compagnon]]></value>
<value xml:lang="ru"><![CDATA[Автор аддона]]></value>
<value xml:lang="es"><![CDATA[Autor de Addon]]></value>
<value xml:lang="tr"><![CDATA[Eklenti Tasarımcısı]]></value>
<value xml:lang="vi"><![CDATA[Tác giả của Addon]]></value>
</item>
<item name="addon_license">
<value xml:lang="ko"><![CDATA[라이선스]]></value>
<value xml:lang="en"><![CDATA[License]]></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[Licence]]></value>
<value xml:lang="tr"><![CDATA[Lisans]]></value>
<value xml:lang="vi"><![CDATA[Giấy phép]]></value>
</item>
<item name="addon_history">
<value xml:lang="ko"><![CDATA[변경 이력]]></value>
<value xml:lang="en"><![CDATA[Addon History]]></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[L'Histoire de la Compagnon]]></value>
<value xml:lang="ru"><![CDATA[История аддона]]></value>
<value xml:lang="es"><![CDATA[Historia de Addon ]]></value>
<value xml:lang="tr"><![CDATA[Eklenti Geçmişi]]></value>
<value xml:lang="vi"><![CDATA[Lịch sử]]></value>
</item>
<item name="about_addon_mid">
<value xml:lang="ko"><![CDATA[애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제 시 모든 대상에서 사용 가능합니다.)]]></value>
<value xml:lang="en"><![CDATA[Select a target where the added is used.<br />(If you select none, the addon will be used on all targets.)]]></value>
<value xml:lang="jp"><![CDATA[アドオンを使用する対象を指定します。<br />(選択しない場合、すべてのモジュールが利用可能対象となります]]></value>
<value xml:lang="zh-CN"><![CDATA[可以指定使用插件的对象。<br />(全部解除表示可用在所有对象。)]]></value>
<value xml:lang="zh-TW"><![CDATA[可以指定使用附加元件的目標。<br />(全部不選取表示可用在所有目標。)]]></value>
<value xml:lang="fr"><![CDATA[On peut choisir des objets dans lesquels la Compagnon soit utilisé.<br />(Tout sera choisi quand rien n'est choisi.)]]></value>
<value xml:lang="ru"><![CDATA[애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)]]></value>
<value xml:lang="es"><![CDATA[Add-ons se puede utilizar para especificar el destino. <br /> (Todo gratis, están disponibles en todos los destinos)]]></value>
<value xml:lang="tr"><![CDATA[Eklentiler, hedef seçebilirler.<br />(Herhangi bir seçim yapılmadığında, tüm hedefler seçilecektir.)]]></value>
<value xml:lang="vi"><![CDATA[Addon có thể chọn những vị trí.<br />(Tất cả những vị trí mà chưa Addon nào sử dụng.)]]></value>
</item>
<item name="about_addon">
<value xml:lang="ko"><![CDATA[애드온은 HTML결과물을 출력하기보다는 동작을 제어하는 역할을 합니다.<br />원하시는 애드온을 ON/OFF 하시는 것만으로도 사이트 운영에 유용한 기능을 연동할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[Addons control many actions performed in your site rather than display HTML results.<br />You can control useful functions simply by switching ON/OFF of addons.]]></value>
<value xml:lang="jp"><![CDATA[アドオンは、HTMLの出力をコントロールするというより、動作を制御する役割をします。アドオンを「使用/未使用」に設定するだけで、サイトの運営に有用な機能を利用できます。]]></value>
<value xml:lang="zh-CN"><![CDATA[插件就是对动作(Action)的有效控制来给核心程序提供扩展功能的一种组件。<br />只需启用/禁用操作,即可为网站提供强大的扩展功能。]]></value>
<value xml:lang="zh-TW"><![CDATA[附加元件可對 Action進行控制並可擴展核心程式功能而不是顯示輸出 HTML結果。<br />『啟用/禁用』附加元件,以增強網站的功能。]]></value>
<value xml:lang="fr"><![CDATA[La Compagnon, c'est pour contrôler les actions plutôt d'imprimer des résultats de HTML.<br/>Par la Touche à Bascule des compagnons que vous voulez faire marcher ou arrêter, vous pouvez appliquer les fonctions très utiles à administrer votre site Web.]]></value>
<value xml:lang="ru"><![CDATA[Аддон служит больше для контролирования действий, чем для отображения HTML-результатов.<br />Простым включением/выключением любых аддонов, Вы можете использовать очень полезные функции для администрирования Вашего веб-сайта]]></value>
<value xml:lang="es"><![CDATA[Addon is para controlar las acciones y no para mostrar el resultado en HTML.<br /> Sólo con activar o desactivar el addon que desee, podrá obtener funciones útiles para la administración de tu sitio web.]]></value>
<value xml:lang="tr"><![CDATA[Eklentiler, HTML sonuçlarını göstermek yerine sitenizde gerçekleştirilen birçok eylemi kontrol ederler, .<br />Kullanışlı işlevleri, AÇIK/KAPALI anahtarını değiştirerek, kolayca kontrol edebilirsiniz.]]></value>
<value xml:lang="vi"><![CDATA[Addon có nhiệm vụ hiển thị và kiểm soát kết quả HTML.<br />Bạn có thể mở hoặc tắt bất cứ Addon nào bạn muốn.]]></value>
</item>
<item name="installed_addon">
<value xml:lang="ko"><![CDATA[설치된 애드온]]></value>
<value xml:lang="en"><![CDATA[Installed Addon]]></value>
<value xml:lang="jp"><![CDATA[インストールされているアドオン]]></value>
</item>
<item name="about_installed_addon">
<value xml:lang="ko"><![CDATA[PC, Mobile에 체크하면 애드온을 켤 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[Check PC and Mobile to switch on the addon.]]></value>
<value xml:lang="jp"><![CDATA[PC、Mobileを選択するとアドオンを使用できます。]]></value>
</item>
<item name="fixed">
<value xml:lang="ko"><![CDATA[고정]]></value>
<value xml:lang="en"><![CDATA[Fixed]]></value>
<value xml:lang="jp"><![CDATA[固定]]></value>
</item>
<item name="about_fixed">
<value xml:lang="ko"><![CDATA[체크하면 사이트 관리자가 이 설정을 변경할 수 없음.]]></value>
<value xml:lang="en"><![CDATA[Check this, and the site administrator cannot change this setting.]]></value>
<value xml:lang="jp"><![CDATA[選択すると、サイトマネージャーがこの設定を変更することができません。]]></value>
</item>
<item name="msg_not_exist_option">
<value xml:lang="ko"><![CDATA[이 애드온은 설정이 존재하지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[Configuration for this addon does not exist.]]></value>
<value xml:lang="jp"><![CDATA[このアドオンは、設定がありません。]]></value>
</item>
</lang>

View file

@ -1,17 +0,0 @@
<?php
/**
* @file ru.lang.php
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack
**/
$lang->addon = "Аддон";
$lang->addon_info = 'Информация об аддоне';
$lang->addon_maker = 'Автор аддона';
$lang->addon_license = 'License';
$lang->addon_history = 'История аддона';
$lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)";
$lang->about_addon = 'Аддон служит больше для контролирования действий, чем для отображения HTML-результатов.<br />Простым включением/выключением любых аддонов, Вы можете использовать очень полезные функции для администрирования Вашего веб-сайта';
?>

View file

@ -1,17 +0,0 @@
<?php
/**
* @file en.lang.php
* @author NHN (developers@xpressengine.com)
* @brief English Language Pack
**/
$lang->addon = "Eklentiler";
$lang->addon_info = 'Eklenti Özeti';
$lang->addon_maker = 'Eklenti Tasarımcısı';
$lang->addon_license = 'Lisans';
$lang->addon_history = 'Eklenti Geçmişi';
$lang->about_addon_mid = "Eklentiler, hedef seçebilirler.<br />(Herhangi bir seçim yapılmadığında, tüm hedefler seçilecektir.)";
$lang->about_addon = 'Eklentiler, HTML sonuçlarını göstermek yerine sitenizde gerçekleştirilen birçok eylemi kontrol ederler, .<br />Kullanışlı işlevleri, AÇIK/KAPALI anahtarını değiştirerek, kolayca kontrol edebilirsiniz.';
?>

View file

@ -1,19 +0,0 @@
<?php
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░ * @File : common/lang/vi.lang.php ░░
░░ * @Author : NHN (developers@xpressengine.com) ░░
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
░░ * @Website: http://vietxe.net ░░
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
$lang->addon = "Addon";
$lang->addon_info = 'Thông tin về Addon';
$lang->addon_maker = 'Tác giả của Addon';
$lang->addon_license = 'Giấy phép';
$lang->addon_history = 'Lịch sử';
$lang->about_addon_mid = "Addon có thể chọn những vị trí.<br />(Tất cả những vị trí mà chưa Addon nào sử dụng.)";
$lang->about_addon = 'Addon có nhiệm vụ hiển thị và kiểm soát kết quả HTML.<br />Bạn có thể mở hoặc tắt bất cứ Addon nào bạn muốn.';
?>

View file

@ -1,17 +0,0 @@
<?php
/**
* @file zh-CN.lang.php
* @author NHN (developers@xpressengine.com)
* @brief 简体中文语言包
**/
$lang->addon = "插件";
$lang->addon_info = '插件信息';
$lang->addon_maker = '插件作者';
$lang->addon_license = '版权';
$lang->addon_history = '更新纪录 ';
$lang->about_addon_mid = "可以指定使用插件的对象。<br />(全部解除表示可用在所有对象。)";
$lang->about_addon = '插件就是对动作(Action)的有效控制来给核心程序提供扩展功能的一种组件。<br />只需启用/禁用操作,即可为网站提供强大的扩展功能。';
?>

View file

@ -1,17 +0,0 @@
<?php
/**
* @file modules/addon/lang/zh-TW.lang.php
* @author NHN (developers@xpressengine.com) 翻譯royallin
* @brief 附加元件(addon)模組正體中文語言
**/
$lang->addon = "附加元件";
$lang->addon_info = '資料';
$lang->addon_maker = '作者';
$lang->addon_license = '版權';
$lang->addon_history = '更新紀錄';
$lang->about_addon_mid = "可以指定使用附加元件的目標。<br />(全部不選取表示可用在所有目標。)";
$lang->about_addon = '附加元件可擴展程式功能而不是顯示輸出HTML結果。<br />『啟用/禁用』附加元件,以增強網站的功能。';
?>

View file

@ -6,6 +6,8 @@
<column name="site_srl" var="site_srl" notnull="notnull" />
<column name="addon" var="addon" notnull="notnull" />
<column name="is_used" var="is_used" default="N" notnull="notnull" />
<column name="is_used_m" var="is_used_m" default="N" />
<column name="extra_vars" var="extra_vars" />
<column name="regdate" var="regdate" default="curdate()" />
</columns>
</query>

View file

@ -5,6 +5,7 @@
<columns>
<column name="is_used" var="is_used" />
<column name="is_used_m" var="is_used_m" />
<column name="is_fixed" var="fixed" />
<column name="extra_vars" var="extra_vars" />
</columns>
<conditions>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<customrules>
</customrules>
<fields>
<field name="addon_name" required="true" />
</fields>
</ruleset>

View file

@ -2,6 +2,7 @@
<column name="addon" type="varchar" size="250" notnull="notnull" primary_key="primary_key" />
<column name="is_used" type="char" size="1" default="Y" notnull="notnull" />
<column name="is_used_m" type="char" size="1" default="N" notnull="notnull" />
<column name="is_fixed" type="char" size="1" default="N" notnull="notnull" />
<column name="extra_vars" type="text" />
<column name="regdate" type="date" index="idx_regdate" />
</table>

View file

@ -1,86 +1,78 @@
<div id="popHeader" class="wide">
<h3 class="xeAdmin">{$lang->addon_maker}</h3>
</div>
<div id="popBody">
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->title}</div></th>
<td>{$addon_info->title} ver. {$addon_info->version}</td>
</tr>
<tr>
<th scope="row"><div>{$lang->author}</div></th>
<td>
<!--@foreach($addon_info->author as $author)-->
{$author->name} <!--@if($author->homepage || $author->email_address)-->(<!--@if($author->homepage)--><a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a><!--@end--><!--@if($author->homepage && $author->email_address)-->, <!--@end--><!--@if($author->email_address)--><a href="mailto:{$author->email_address}">{$author->email_address}</a><!--@end-->)<!--@end--><br />
<!--@endforeach-->
</td>
</tr>
<h1 class="h1">{$lang->addon_maker}</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="row">{$lang->title}</th>
<td>{$addon_info->title} ver. {$addon_info->version}</td>
</tr>
<tr>
<th scope="row">{$lang->author}</th>
<td>
<!--@foreach($addon_info->author as $author)-->
{$author->name} <!--@if($author->homepage || $author->email_address)-->(<!--@if($author->homepage)--><a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a><!--@end--><!--@if($author->homepage && $author->email_address)-->, <!--@end--><!--@if($author->email_address)--><a href="mailto:{$author->email_address}">{$author->email_address}</a><!--@end-->)<!--@end--><br />
<!--@endforeach-->
</td>
</tr>
<!--@if($addon_info->homepage)-->
<tr>
<th scope="row"><div>{$lang->homepage}</div></th>
<td><a href="{$addon_info->homepage}" onclick="window.open(this.href);return false;">{$addon_info->homepage}</a></td>
</tr><!--@end-->
<tr>
<th scope="row"><div>{$lang->regdate}</div></th>
<td>{zdate($addon_info->date, 'Y-m-d')}</td>
</tr>
<tr>
<th scope="row">{$lang->homepage}</th>
<td><a href="{$addon_info->homepage}" onclick="window.open(this.href);return false;">{$addon_info->homepage}</a></td>
</tr><!--@end-->
<tr>
<th scope="row">{$lang->regdate}</th>
<td>{zdate($addon_info->date, 'Y-m-d')}</td>
</tr>
<!--@if($addon_info->license || $addon_info->license_link)-->
<tr>
<th scope="row"><div>{$lang->addon_license}</div></th>
<td>
{nl2br(trim($addon_info->license))}
<!--@if($addon_info->license_link)-->
<p><a href="{$addon_info->license_link}" onclick="window.close(); return false;">{$addon_info->license_link}</a></p>
<!--@end-->
</td>
</tr><!--@end-->
<tr>
<th scope="row">{$lang->addon_license}</th>
<td>
{nl2br(trim($addon_info->license))}
<!--@if($addon_info->license_link)-->
<p><a href="{$addon_info->license_link}" onclick="window.close(); return false;">{$addon_info->license_link}</a></p>
<!--@end-->
</td>
</tr><!--@end-->
<!--@if($addon_info->description)-->
<tr>
<th scope="row"><div>{$lang->description}</div></th>
<td>{nl2br(trim($addon_info->description))}</td>
</tr><!--@end-->
</table>
<tr>
<th scope="row">{$lang->description}</th>
<td>{nl2br(trim($addon_info->description))}</td>
</tr><!--@end-->
</table>
</div>
<!--@if($addon_info->history)-->
<div id="popHistoryHeader">
<h3 class="xeAdmin">{$lang->addon_history}</h3>
</div>
<h1 class="h1">{$lang->addon_history}</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<col width="100" />
<col />
<div id="popHistoryBody">
<table cellspacing="0" class="rowTable">
<col width="100" />
<col />
<!--@foreach($addon_info->history as $history)-->
<tr>
<th scope="row"><div>
{$history->version}<br />
{$history->date}
</div></th>
<td>
<!--@foreach($history->author as $author)-->
<p>{$author->name} (<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a> / <a href="mailto:{$author->email_address}">{$author->email_address}</a>)</p>
<!--@endforeach-->
<!--@if($history->description)-->
<p>{nl2br(trim($history->description))}</p>
<!--@endif-->
<!--@if($history->logs)-->
<ul>
<!--@foreach($history->logs as $log)-->
<!--@if($log->link)-->
<li><a href="{$log->link}">{$log->text}</a></li>
<!--@else-->
<li>{$log->text}</li>
<!--@endif-->
<!--@endforeach-->
</ul>
<!--@endif-->
</td>
</tr>
<!--@endforeach-->
</table>
<!--@foreach($addon_info->history as $history)-->
<tr>
<th scope="row">
{$history->version}<br />
{$history->date} </th>
<td>
<!--@foreach($history->author as $author)-->
<p>{$author->name} (<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a> / <a href="mailto:{$author->email_address}">{$author->email_address}</a>)</p>
<!--@endforeach-->
<!--@if($history->description)-->
<p>{nl2br(trim($history->description))}</p>
<!--@endif-->
<!--@if($history->logs)-->
<ul>
<!--@foreach($history->logs as $log)-->
<!--@if($log->link)-->
<li><a href="{$log->link}">{$log->text}</a></li>
<!--@else-->
<li>{$log->text}</li>
<!--@endif-->
<!--@endforeach-->
</ul>
<!--@endif-->
</td>
</tr>
<!--@endforeach-->
</table>
</div>
<!--@endif-->

View file

@ -1,70 +1,54 @@
<!--%import("filter/toggle_activate_addon.xml")-->
<!--%import("js/addon.js")-->
<form action="./" method="post">
<input type="hidden" name="module" value="addon" />
<input type="hidden" name="act" value="procAddonAdminSaveActivate" />
<input type="hidden" name="sccess_return_url" value="{getRequestUriByServerEnviroment()}" />
<h3 class="xeAdmin">{$lang->addon} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="infoText">{nl2br($lang->about_addon)}</div>
<!-- xml js filter를 이용하기 위한 데이터 전달용 form -->
<form id="fo_addon" action="./" method="get">
<input type="hidden" name="addon" value="" />
<input type="hidden" name="type" value="" />
<h1 class="h1">{$lang->installed_addon}</h1>
<p>{$lang->about_installed_addon}</p>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div class="table even easyList">
<table width="100%" border="1" cellspacing="0">
<caption>All({$addon_count})</caption>
<thead>
<tr>
<th scope="col" class="title">{$lang->addon_name}</th>
<th scope="col">{$lang->version}</th>
<th scope="col">{$lang->author}</th>
<th scope="col">{$lang->installed_path}</th>
<th scope="col">{$lang->cmd_setup}</th>
<th scope="col">PC</th>
<th scope="col">Mobile</th>
<th scope="col">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<tr loop="$addon_list => $addon">
<td class="title">
<p><strong>{$addon->title}</strong></p>
<p>{$addon->description}</p>
<p cond="$addon->need_update == 'Y'" class="update">
{$lang->msg_avail_easy_update} <a href="{$addon->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a>
</p>
</td>
<td>{$addon->version}</td>
<td>
<block loop="$addon->author => $author">
<a cond="$author->homepage" href="{$author->homepage}" target="_blank">{$author->name}</a>
<block cond="!$author->homepage">{$author->name}</block>
</block>
</td>
<td>{$addon->path}</td>
<td><a href="{getUrl('act', 'dispAddonAdminSetup', 'selected_addon', $addon->addon_name)}">{$lang->cmd_setup}</a></td>
<td><input type="checkbox" name="pc[]" title="PC" value="{htmlspecialchars($addon->addon_name)}" checked="checked"|cond="$addon->activated" /></td>
<td><input type="checkbox" name="mobile[]" title="Mobile" value="{htmlspecialchars($addon->addon_name)}" checked="checked"|cond="$addon->mactivated" /></td>
<td><a cond="$addon->remove_url" href="{$addon->remove_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a></td>
</tr>
</tbody>
</table>
</div>
<div class="btnArea">
<span class="btn medium"><input type="submit" value="{$lang->cmd_save}" /></span>
</div>
</form>
<!-- 애드온의 목록 -->
<table cellspacing="0" class="crossTable">
<thead>
<tr>
<th scope="col"><div>{$lang->addon_name}</div></th>
<th scope="col"><div>{$lang->version}</div></th>
<th scope="col"><div>{$lang->author}</div></th>
<th scope="col"><div>{$lang->date}</div></th>
<th scope="col" class="wide"><div>{$lang->installed_path}</div></th>
<th scope="col"><div>{$lang->cmd_setup}</div></th>
<th scope="col"><div>PC</div></th>
<th scope="col"><div>Mobile</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($addon_list as $key => $val)-->
<tr>
<th scope="row" rowspan="2">
<div>
<a href="{getUrl('','module','addon','act','dispAddonAdminInfo','selected_addon',$val->addon)}" onclick="popopen(this.href,'addon_info');return false">{$val->title}</a> <br />
({$val->addon})
</div>
</th>
<td>{$val->version}</td>
<td>
<!--@foreach($val->author as $author)-->
<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->name}</a>
<!--@endforeach-->
</td>
<td>{zdate($val->date, 'Y-m-d')}</td>
<td>{$val->path}</td>
<td><a href="{getUrl('','module','addon','act','dispAddonAdminSetup','selected_addon',$val->addon)}" onclick="popopen(this.href,'addon_info');return false" title="{htmlspecialchars($lang->cmd_setup)}" class="buttonSet buttonSetting"><span>{$lang->cmd_setup}</span></a></td>
<td>
<!--@if($val->activated)-->
<a href="#" onclick="doToggleAddon('{$val->addon}');return false;" title="{htmlspecialchars($lang->use)}" class="buttonSet buttonActive"><span>{$lang->use}</span></a>
<!--@else-->
<a href="#" onclick="doToggleAddon('{$val->addon}');return false;" title="{htmlspecialchars($lang->notuse)}" class="buttonSet buttonDisable"><span>{$lang->notuse}</span></a>
<!--@end-->
</td>
<td>
<!--@if($val->mactivated)-->
<a href="#" onclick="doToggleAddon('{$val->addon}','mobile');return false;" title="{htmlspecialchars($lang->use)}" class="buttonSet buttonActive"><span>{$lang->use}</span></a>
<!--@else-->
<a href="#" onclick="doToggleAddon('{$val->addon}','mobile');return false;" title="{htmlspecialchars($lang->notuse)}" class="buttonSet buttonDisable"><span>{$lang->notuse}</span></a>
<!--@end-->
</td>
</tr>
<tr>
<td colspan="6">
{nl2br($val->description)}&nbsp;
</td>
</tr>
<!--@end-->
</tbody>
</table>

View file

@ -9,12 +9,3 @@ function doToggleAddon(addon, type) {
fo_obj.type.value = type;
procFilter(fo_obj, toggle_activate_addon);
}
// 관리자 제어판 페이지용
function doToggleAddonInAdmin(obj, addon, type) {
var params = new Array();
params['addon'] = addon;
if(typeof(type) == "undefined") type = "pc";
params['type'] = type;
exec_xml('addon','procAddonAdminToggleActivate',params,function() { if(/Active/.test(obj.className)) obj.className = "buttonSet buttonDisable"; else obj.className = "buttonSet buttonActive"; } );
}

View file

@ -1,105 +1,77 @@
<!--%import("filter/setup_addon.xml")-->
<!--%import("css/addon.css")-->
<!--%import("js/addon.js")-->
<div id="popHeader" class="wide">
<h3 class="xeAdmin">{$lang->cmd_setup}</h3>
<h1 class="h1">{$lang->installed_addon}</h1>
<h2 class="h2">{$addon_info->title}</h2>
<ul>
<li>{$lang->version}: {$addon_info->version} ({zdate($addon_info->date, 'Y-m-d')})</li>
<li>
{$lang->author}:
<block loop="$addon_info->author => $author">
{$author->name} (<a cond="$author->homepage" href="{$author->homepage}" target="_blank">{$author->homepage}</a>, <a cond="$author->email_address" href="mailto:{$author->email_address}">{$author->email_address}</a>) <br />
</block>
</li>
<li cond="$addon_info->homepage">{$lang->homepage}: <a href="{$addon_info->homepage}" target="_blank">{$addon_info->homepage}</a></li>
</ul>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form action="./" method="post" class="form">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="procAddonAdminSetupAddon" />
<input type="hidden" name="addon_name" value="{$addon_info->addon_name}" />
<form action="./" method="get" onsubmit="return procFilter(this, setup_addon);">
<input type="hidden" name="addon_name" value="{$addon_info->addon_name}" />
<div id="popBody">
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div><label for="textfield1">{$lang->title}</label></div></th>
<td>{$addon_info->title} ver. {$addon_info->version} ({zdate($addon_info->date, 'Y-m-d')})</td>
</tr>
<tr>
<th scope="row"><div>{$lang->author}</div></th>
<td>
<!--@foreach($addon_info->author as $author)-->
{$author->name} (<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a>, <a href="mailto:{$author->email_address}">{$author->email_address}</a>)<br />
<!--@endforeach-->
</td>
</tr>
<tr>
<th scope="row"><div><label for="textfield2">{$lang->homepage}</label></div></th>
<td class="blue"><a href="{$addon_info->homepage}" onclick="window.open(this.href);return false;">{$addon_info->homepage}</a>&nbsp;</td>
</tr>
<!--@foreach($addon_info->extra_vars as $id => $var)-->
<!--@if($var->group && ((!$group) || $group != $var->group))-->
{@$group = $var->group}
</table>
<h4 class="xeAdmin">{$group}</h4>
<table cellspacing="0" class="rowTable">
<col width="100" />
<col width="*" />
<!--@end-->
<tr class="row{$cycle_idx}">
<th scope="row"><div>{$var->title}</div></th>
<td>
<!--@if($var->type == 'text')-->
<input type="text" name="{$var->name}" id="{$var->name}" value="{htmlspecialchars($var->value)}" class="inputTypeText w400 lang_code" />
<!--@elseif($var->type == 'textarea')-->
<textarea name="{$var->name}" id="{$var->name}" class="inputTypeTextArea lang_code">{htmlspecialchars($var->value)}</textarea>
<!--@elseif($var->type == 'select')-->
<select name="{$var->name}">
<!--@foreach($var->options as $val)-->
<option value="{$val->value}"<!--@if($var->value == $val->value)--> selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
<!--@end-->
<p class="clear">{nl2br($var->description)}</p>
</td>
</tr>
<!--@end-->
<!--@if($group)-->
</table>
<table cellspacing="0" class="rowTable">
<!--@end-->
<!--@if($mid_list)-->
<tr>
<th scope="row"><div>
{$lang->module}
<input type="checkbox" onclick="XE.checkboxToggleAll('mid_list'); return false;" />
</div></th>
<td>
<p>{$lang->about_addon_mid}</p>
<!--@foreach($mid_list as $module_category_srl => $modules)-->
<div class="module_category_title">
<input type="checkbox" onclick="XE.checkboxToggleAll('mid_list', { wrap:'section_{$module_category_srl}' });" />
<!--@if($modules->title)-->
{$modules->title}
<!--@else-->
{$lang->none_category}
<!--@end-->
</div>
<div id="section_{$module_category_srl}">
<!--@foreach($modules->list as $key => $val)-->
<div class="module_list">
<input type="checkbox" value="{$key}" name="mid_list" id="chk_mid_list_{$key}" <!--@if(in_array($key, $addon_info->mid_list))-->checked="checked"<!--@end--> />
<label for="chk_mid_list_{$key}">{$key} ({$val->browser_title})</label>
</div>
<!--@end-->
</div>
<!--@end-->
</td>
</tr>
<!--@endif-->
</table>
</div>
<div id="popFooter">
<span class="button black strong"><input type="submit" value="{$lang->cmd_apply}" /></span>
</div>
<block cond="count($addon_info->extra_vars)">
<block loop="$addon_info->extra_vars => $id, $var">
<block cond="!$not_first && !$var->group"><ul></block>
<block cond="$group != $var->group">
<block cond="$not_first"></ul></block>
<h3 class="h3">{$var->group}</h3>
<ul>
{@$group = $var->group}
</block>
{@$not_first = true}
<li>
<p class="q"><label for="{$var->name}">{$var->title}</label></p>
<p class="a">
<input cond="$var->type == 'text'" type="text" name="{$var->name}" id="{$var->name}" value="{htmlspecialchars($var->value)}" class="lang_code">
<textarea cond="$var->type == 'textarea'" name="{$var->name}" id="{$var->name}" class="lang_code">{htmlspecialchars($var->value)}</textarea>
<select cond="$var->type == 'select'" name="{$var->name}" id="{$var->name}">
<option loop="$var->options => $option" value="{$option->value}" selected="selected"|cond="$var->value == $option->value">{$option->title}</option>
</select>
</p>
<p class="desc">{nl2br($var->description)}</p>
</li>
</block>
</ul>
</block>
<div cond="!count($addon_info->extra_vars)" class="message info">
<p>{$lang->msg_not_exist_option}</p>
</div>
<block cond="$mid_list">
<h3 class="h3">{$lang->module}</h3>
<p>{$lang->about_addon_mid}</p>
<p><input type="checkbox" id="check_all" /> <label for="check_all">Check all</label></p>
<fieldset loop="$mid_list => $module_category_srl, $modules" style="border: 1px solid #ccc; margin:1em 0; padding:.5em 1em">
<legend cond="$modules->title">{$modules->title}</legend>
<legend cond="!$modules->title">{$lang->none_category}</legend>
<div loop="$modules->list => $key, $val">
<input type="checkbox" value="{$key}" name="mid_list[]" id="chk_mid_list_{$key}" checked="checked"|cond="in_array($key, $addon_info->mid_list)"/>
<label for="chk_mid_list_{$key}">{$key} ({$val->browser_title})</label>
</div>
</fieldset>
</block>
<div class="btnArea">
<span class="btn medium"><input type="submit" value="{$lang->cmd_save}" /></span>
</div>
</form>
</block>
<script type="text/javascript">
(function($){
$('#check_all')
.bind('click', function(e){
if (this.checked){
$('input[name=mid_list\\[\\]]').attr('checked', 'checked');
}else{
$('input[name=mid_list\\[\\]]').removeAttr('checked');
}
});
})(jQuery);
</script>

View file

@ -1,83 +1,320 @@
<?php
/**
* @class adminAdminController
* @author NHN (developers@xpressengine.com)
* @brief admin controller class of admin module
**/
class adminAdminController extends admin {
/**
* @brief initialization
* @return none
**/
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");
}
/**
* @brief Regenerate all cache files
* @return none
**/
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 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);
}
}
$truncated = array();
$oObjectCacheHandler = &CacheHandler::getInstance();
$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');
}
$this->setMessage('success_updated');
}
/**
* @brief Logout
* @return none
**/
function procAdminLogout() {
$oMemberController = &getController('member');
$oMemberController->procMemberLogout();
header('Location: '.getNotEncodedUrl('', 'module','admin'));
}
}
?>
<?php
/**
* @class adminAdminController
* @author NHN (developers@xpressengine.com)
* @brief admin controller class of admin module
**/
class adminAdminController extends admin {
/**
* @brief initialization
* @return none
**/
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");
}
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'));
}
/**
* @brief Regenerate all cache files
* @return none
**/
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);
}
}
$this->setMessage('success_updated');
}
/**
* @brief Logout
* @return none
**/
function procAdminLogout() {
$oMemberController = &getController('member');
$oMemberController->procMemberLogout();
header('Location: '.getNotEncodedUrl('', 'module','admin'));
}
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;
$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 = &getController('module');
$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);
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminTheme');
header('location:'.$returnUrl);
return;
}
else return $output;
}
/**
* @brief Toggle favorite
**/
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);
$this->setRedirectUrl(Context::get('error_return_url'));
}
/**
* @brief enviroment gathering agreement
**/
function procAdminEnviromentGatheringAgreement()
{
$isAgree = Context::get('is_agree');
if($isAgree == 'true') $_SESSION['enviroment_gather'] = 'Y';
else $_SESSION['enviroment_gather'] = 'N';
$redirectUrl = getUrl('', 'module', 'admin');
$this->setRedirectUrl($redirectUrl);
}
/**
* @brief admin config update
**/
function procAdminUpdateConfig()
{
$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');
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup');
$this->setRedirectUrl($returnUrl);
return;
}
}
/**
* @brief admin logo delete
**/
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');
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup');
$this->setRedirectUrl($returnUrl);
return;
}
}
/**
* @brief Insert favorite
**/
function _insertFavorite($siteSrl, $module, $type = 'module')
{
$args->adminFavoriteSrl = getNextSequence();
$args->site_srl = $siteSrl;
$args->module = $module;
$args->type = $type;
$output = executeQuery('admin.insertFavorite', $args);
return $output;
}
/**
* @brief Delete favorite
**/
function _deleteFavorite($favoriteSrl)
{
$args->admin_favorite_srl = $favoriteSrl;
$output = executeQuery('admin.deleteFavorite', $args);
return $output;
}
/**
* @brief Delete favorite
**/
function _deleteAllFavorite()
{
$args = null;
$output = executeQuery('admin.deleteAllFavorite', $args);
return $output;
}
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');
}
}
?>

View file

@ -3,6 +3,7 @@
class adminAdminModel extends admin
{
var $pwd;
var $gnbLangBuffer;
function getSFTPList()
{
@ -42,7 +43,7 @@
set_time_limit(5);
require_once(_XE_PATH_.'libs/ftp.class.php');
$ftp_info = Context::getRequestVars();
if(!$ftp_info->ftp_user || !$ftp_info->ftp_password)
if(!$ftp_info->ftp_user || !$ftp_info->ftp_password)
{
return new Object(-1, 'msg_ftp_invalid_auth_info');
}
@ -54,8 +55,7 @@
$ftp_info->ftp_host = "127.0.0.1";
}
if (!$ftp_info->ftp_port)
{
if (!$ftp_info->ftp_port || !is_numeric ($ftp_info->ftp_port)) {
$ftp_info->ftp_port = "21";
}
@ -88,5 +88,360 @@
}
$this->add('list', $list);
}
}
?>
function getEnv($type='WORKING') {
$skip = array(
'ext' => array('pcre','json','hash','dom','session','spl','standard','date','ctype','tokenizer','apache2handler','filter','posix','reflection','pdo')
,'module' => array('addon','admin','autoinstall', 'comment', 'communication', 'counter', 'document', 'editor', 'file', 'importer', 'install', 'integration_search', 'layout', 'member', 'menu', 'message', 'module', 'opage', 'page', 'point', 'poll', 'rss', 'session', 'spamfilter', 'tag', 'trackback', 'trash', 'widget')
,'addon' => array('autolink', 'blogapi', 'captcha', 'counter', 'member_communication', 'member_extra_info', 'mobile', 'openid_delegation_id', 'point_level_icon', 'resize_image' )
);
$info = array();
$info['type'] = ($type !='INSTALL' ? 'WORKING' : 'INSTALL');
$info['location'] = _XE_LOCATION_;
$info['package'] = _XE_PACKAGE_;
$info['host'] = $db_type->default_url ? $db_type->default_url : getFullUrl();
$info['app'] = $_SERVER['SERVER_SOFTWARE'];
$info['xe_version'] = __ZBXE_VERSION__;
$info['php'] = phpversion();
$db_info = Context::getDBInfo();
$info['db_type'] = Context::getDBType();
$info['use_rewrite'] = $db_info->use_rewrite;
$info['use_db_session'] = $db_info->use_db_session == 'Y' ?'Y':'N';
$info['use_ssl'] = $db_info->use_ssl;
$info['phpext'] = '';
foreach (get_loaded_extensions() as $ext) {
$ext = strtolower($ext);
if(in_array($ext, $skip['ext'])) continue;
$info['phpext'] .= '|'. $ext;
}
$info['phpext'] = substr($info['phpext'],1);
$info['module'] = '';
$oModuleModel = &getModel('module');
$module_list = $oModuleModel->getModuleList();
foreach($module_list as $module){
if(in_array($module->module, $skip['module'])) continue;
$info['module'] .= '|'.$module->module;
}
$info['module'] = substr($info['module'],1);
$info['addon'] = '';
$oAddonAdminModel = &getAdminModel('addon');
$addon_list = $oAddonAdminModel->getAddonList();
foreach($addon_list as $addon){
if(in_array($addon->addon, $skip['addon'])) continue;
$info['addon'] .= '|'.$addon->addon;
}
$info['addon'] = substr($info['addon'],1);
$param = '';
foreach($info as $k => $v){
if($v) $param .= sprintf('&%s=%s',$k,urlencode($v));
}
$param = substr($param, 1);
return $param;
}
function getThemeList(){
$path = _XE_PATH_.'themes';
$list = FileHandler::readDir($path);
$theme_info = array();
if(count($list) > 0){
foreach($list as $val){
$theme_info[$val] = $this->getThemeInfo($val);
}
}
return $theme_info;
}
function getThemeInfo($theme_name, $layout_list = null){
if ($GLOBALS['__ThemeInfo__'][$theme_name]) return $GLOBALS['__ThemeInfo__'][$theme_name];
$info_file = _XE_PATH_.'themes/'.$theme_name.'/conf/info.xml';
if(!file_exists($info_file)) return;
$oXmlParser = new XmlParser();
$_xml_obj = $oXmlParser->loadXmlFile($info_file);
if(!$_xml_obj->theme) return;
$xml_obj = $_xml_obj->theme;
if(!$_xml_obj->theme) return;
// 스킨이름
$theme_info->name = $theme_name;
$theme_info->title = $xml_obj->title->body;
$thumbnail = './themes/'.$theme_name.'/thumbnail.png';
$theme_info->thumbnail = (file_exists($thumbnail))?$thumbnail:null;
$theme_info->version = $xml_obj->version->body;
sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d);
$theme_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$theme_info->description = $xml_obj->description->body;
$theme_info->path = './themes/'.$theme_name.'/';
if(!is_array($xml_obj->publisher)) $publisher_list[] = $xml_obj->publisher;
else $publisher_list = $xml_obj->publisher;
foreach($publisher_list as $publisher) {
unset($publisher_obj);
$publisher_obj->name = $publisher->name->body;
$publisher_obj->email_address = $publisher->attrs->email_address;
$publisher_obj->homepage = $publisher->attrs->link;
$theme_info->publisher[] = $publisher_obj;
}
$layout = $xml_obj->layout;
$layout_path = $layout->directory->attrs->path;
$layout_parse = explode('/',$layout_path);
switch($layout_parse[1]){
case 'themes' : {
$layout_info->name = $theme_name.'.'.$layout_parse[count($layout_parse)-1];
break;
}
case 'layouts' : {
$layout_info->name = $layout_parse[count($layout_parse)-1];
break;
}
}
$layout_info->path = $layout_path;
$site_info = Context::get('site_module_info');
// check layout instance
$is_new_layout = true;
$oLayoutModel = &getModel('layout');
$layout_info_list = array();
$layout_list = $oLayoutModel->getLayoutList($site_info->site_srl);
if ($layout_list){
foreach($layout_list as $val){
if ($val->layout == $layout_info->name){
$is_new_layout = false;
$layout_info->layout_srl = $val->layout_srl;
break;
}
}
}
if ($is_new_layout){
$site_module_info = Context::get('site_module_info');
$args->site_srl = (int)$site_module_info->site_srl;
$args->layout_srl = getNextSequence();
$args->layout = $layout_info->name;
$args->title = $layout_info->name.'InTheme';
$args->layout_type = "P";
// Insert into the DB
$oLayoutAdminController = &getAdminController('layout');
$output = $oLayoutAdminController->insertLayout($args);
$layout_info->layout_srl = $args->layout_srl;
}
$theme_info->layout_info = $layout_info;
$skin_infos = $xml_obj->skininfos;
if(is_array($skin_infos->skininfo))$skin_list = $skin_infos->skininfo;
else $skin_list = array($skin_infos->skininfo);
$oModuleModel = &getModel('module');
$skins = array();
foreach($skin_list as $val){
unset($skin_info);
unset($skin_parse);
$skin_parse = explode('/',$val->directory->attrs->path);
switch($skin_parse[1]){
case 'themes' : {
$is_theme = true;
$module_name = $skin_parse[count($skin_parse)-1];
$skin_info->name = $theme_name.'.'.$module_name;
break;
}
case 'modules' : {
$is_theme = false;
$module_name = $skin_parse[2];
$skin_info->name = $skin_parse[count($skin_parse)-1];
break;
}
}
$skin_info->path = $val->directory->attrs->path;
$skins[$module_name] = $skin_info;
if ($is_theme){
if (!$GLOBALS['__ThemeModuleSkin__'][$module_name]){
$GLOBALS['__ThemeModuleSkin__'][$module_name] = array();
$GLOBALS['__ThemeModuleSkin__'][$module_name]['skins'] = array();
$moduleInfo = $oModuleModel->getModuleInfoXml($module_name);
$GLOBALS['__ThemeModuleSkin__'][$module_name]['title'] = $moduleInfo->title;
}
$GLOBALS['__ThemeModuleSkin__'][$module_name]['skins'][$skin_info->name] = $oModuleModel->loadSkinInfo($skin_info->path, '', '');
}
}
$theme_info->skin_infos = $skins;
$GLOBALS['__ThemeInfo__'][$theme_name] = $theme_info;
return $theme_info;
}
function getModulesSkinList(){
if ($GLOBALS['__ThemeModuleSkin__']['__IS_PARSE__']) return $GLOBALS['__ThemeModuleSkin__'];
$searched_list = FileHandler::readDir('./modules');
sort($searched_list);
$searched_count = count($searched_list);
if(!$searched_count) return;
$exceptionModule = array('editor', 'poll', 'homepage', 'textyle');
$oModuleModel = &getModel('module');
foreach($searched_list as $val) {
$skin_list = $oModuleModel->getSkins('./modules/'.$val);
if (is_array($skin_list) && count($skin_list) > 0 && !in_array($val, $exceptionModule)){
if(!$GLOBALS['__ThemeModuleSkin__'][$val]){
$GLOBALS['__ThemeModuleSkin__'][$val] = array();
$moduleInfo = $oModuleModel->getModuleInfoXml($val);
$GLOBALS['__ThemeModuleSkin__'][$val]['title'] = $moduleInfo->title;
$GLOBALS['__ThemeModuleSkin__'][$val]['skins'] = array();
}
$GLOBALS['__ThemeModuleSkin__'][$val]['skins'] = array_merge($GLOBALS['__ThemeModuleSkin__'][$val]['skins'], $skin_list);
}
}
$GLOBALS['__ThemeModuleSkin__']['__IS_PARSE__'] = true;
return $GLOBALS['__ThemeModuleSkin__'];
}
function getAdminMenuLang()
{
$currentLang = Context::getLangType();
$cacheFile = sprintf('./files/cache/menu/admin_lang/adminMenu.%s.lang.php', $currentLang);
// Update if no cache file exists or it is older than xml file
if(!is_readable($cacheFile))
{
$oModuleModel = &getModel('module');
$installed_module_list = $oModuleModel->getModulesXmlInfo();
$this->gnbLangBuffer = '<?php ';
foreach($installed_module_list AS $key=>$value)
{
$moduleActionInfo = $oModuleModel->getModuleActionXml($value->module);
if(is_object($moduleActionInfo->menu))
{
foreach($moduleActionInfo->menu AS $key2=>$value2)
{
$lang->menu_gnb_sub[$key2] = $value2->title;
$this->gnbLangBuffer .=sprintf('$lang->menu_gnb_sub[\'%s\'] = \'%s\';', $key2, $value2->title);
}
}
}
$this->gnbLangBuffer .= ' ?>';
FileHandler::writeFile($cacheFile, $this->gnbLangBuffer);
}
else include $cacheFile;
return $lang->menu_gnb_sub;
}
/**
* @brief Get admin favorite list
**/
function getFavoriteList($siteSrl = 0, $isGetModuleInfo = false)
{
$args->site_srl = $siteSrl;
$output = executeQueryArray('admin.getFavoriteList', $args);
if (!$output->toBool()) return $output;
if (!$output->data) return new Object();
if($isGetModuleInfo && is_array($output->data))
{
$oModuleModel = &getModel('module');
foreach($output->data AS $key=>$value)
{
$moduleInfo = $oModuleModel->getModuleInfoXml($value->module);
$output->data[$key]->admin_index_act = $moduleInfo->admin_index_act;
$output->data[$key]->title = $moduleInfo->title;
}
}
$returnObject = new Object();
$returnObject->add('favoriteList', $output->data);
return $returnObject;
}
/**
* @brief Check available insert favorite
**/
function isExistsFavorite($siteSrl, $module)
{
$args->site_srl = $siteSrl;
$args->module = $module;
$output = executeQuery('admin.getFavorite', $args);
if (!$output->toBool()) return $output;
$returnObject = new Object();
if ($output->data)
{
$returnObject->add('result', true);
$returnObject->add('favoriteSrl', $output->data->admin_favorite_srl);
}
else
{
$returnObject->add('result', false);
}
return $returnObject;
}
/**
* @brief Return site list
**/
function getSiteAllList()
{
if(Context::get('domain')) $args->domain = Context::get('domain');
$columnList = array('domain', 'site_srl');
$siteList = array();
$output = executeQueryArray('admin.getSiteAllList', $args, $columnList);
if($output->toBool()) $siteList = $output->data;
$this->add('site_list', $siteList);
}
/**
* @brief Return site count
**/
function getSiteCountByDate($date = '')
{
if($date) $args->regDate = date('Ymd', strtotime($date));
$output = executeQuery('admin.getSiteCountByDate', $args);
if(!$output->toBool()) return 0;
return $output->data->count;
}
function getFaviconUrl()
{
return $this->iconUrlCheck('favicon.ico','faviconSample.png');
}
function getMobileIconUrl()
{
return $this->iconUrlCheck('mobicon.png','mobiconSample.png');
}
function iconUrlCheck($iconname,$default_icon_name)
{
$file_exsit = FileHandler::readFile(_XE_PATH_.'files/attach/xeicon/'.$iconname);
if(!$file_exsit){
$icon_url = './modules/admin/tpl/img/'.$default_icon_name ;
} else {
$icon_url = $db_info->default_url.'files/attach/xeicon/'.$iconname;
}
return $icon_url;
}
}

View file

@ -1,363 +1,499 @@
<?php
/**
* @class adminAdminView
* @author NHN (developers@xpressengine.com)
* @brief admin view class of admin module
**/
class adminAdminView extends admin {
/**
* @brief Initilization
* @return none
**/
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");
// change into administration layout
$this->setTemplatePath($this->module_path.'tpl');
$this->setLayoutPath($this->getTemplatePath());
$this->setLayoutFile('layout.html');
$this->loadSideBar();
// 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_spaceremover', $db_info->use_spaceremover?$db_info->use_spaceremover:'Y');
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");
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);
}
function loadSideBar()
{
$oModuleModel = &getModel('module');
$installed_module_list = $oModuleModel->getModulesXmlInfo();
$installed_modules = $package_modules = array();
$package_idx = 0;
foreach($installed_module_list as $key => $val) {
if($val->category == 'migration') $val->category = 'system';
if($val->category == 'interlock') $val->category = 'accessory';
if($val->category == 'statistics') $val->category = 'accessory';
if($val->module == 'admin' || !$val->admin_index_act) continue;
// get action information
$action_spec = $oModuleModel->getModuleActionXml($val->module);
$actions = array();
if($action_spec->default_index_act) $actions[] = $action_spec->default_index_act;
if($action_spec->admin_index_act) $actions[] = $action_spec->admin_index_act;
if($action_spec->action) foreach($action_spec->action as $k => $v) $actions[] = $k;
$obj = null;
$obj->category = $val->category;
$obj->title = $val->title;
$obj->description = $val->description;
$obj->index_act = $val->admin_index_act;
if(in_array(Context::get('act'), $actions)) $obj->selected = true;
// Packages
if($val->category == 'package') {
if($package_idx == 0) $obj->position = "first";
else $obj->position = "mid";
$package_modules[] = $obj;
$package_idx ++;
if($obj->selected) Context::set('package_selected',true);
// Modules
} else {
$installed_modules[] = $obj;
}
if($obj->selected) {
Context::set('selected_module_category', $val->category);
Context::set('selected_module_info', $val);
}
}
if(count($package_modules)) $package_modules[count($package_modules)-1]->position = 'end';
Context::set('package_modules', $package_modules);
Context::set('installed_modules', $installed_modules);
Context::setBrowserTitle("XE Admin Page");
// add javascript tooltip plugin - gony
Context::loadJavascriptPlugin('qtip');
Context::loadJavascriptPlugin('watchinput');
$security = new Security();
$security->encodeHTML('selected_module_info.', 'selected_module_info.author..', 'package_modules..', 'installed_modules..');
}
/**
* @brief Display main administration page
* @return none
**/
function dispAdminIndex() {
//Retrieve recent news and set them into context
$newest_news_url = sprintf("http://news.xpressengine.com/%s/news.php", Context::getLangType());
$cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_,Context::getLangType());
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);
}
Context::set('released_version', $buff->zbxe_news->attrs->released_version);
Context::set('download_link', $buff->zbxe_news->attrs->download_link);
}
// DB Information
$db_info = Context::getDBInfo();
Context::set('selected_lang', $db_info->lang_type);
// Current Version and Installed Path
Context::set('current_version', __ZBXE_VERSION__);
Context::set('installed_path', realpath('./'));
// Get list of modules
$oModuleModel = &getModel('module');
$module_list = $oModuleModel->getModuleList();
Context::set('module_list', $module_list);
// Get list of addons
$oAddonModel = &getAdminModel('addon');
$addon_list = $oAddonModel->getAddonList();
Context::set('addon_list', $addon_list);
// 방문자수
$time = time();
$w = date("D");
while(date("D",$time) != "Sat") {
$time += 60*60*24;
}
$end_time = $time;
$end_date = date("Ymd",$time);
$time -= 60*60*24;
while(date("D",$time)!="Sun") {
$thisWeek[] = date("Ymd",$time);
$time -= 60*60*24;
}
$start_time = $time;
$start_date = date("Ymd",$time-60*60*24*7);
$args->start_date = $start_date;
$args->end_date = $end_date;
$output = executeQueryArray('admin.getVisitors', $args);
if(count($output->data)) {
foreach($output->data as $key => $val) {
$visitors[$val->regdate] = $val->unique_visitor;
}
}
$output = executeQueryArray('admin.getSiteVisitors', $args);
if(count($output->data)) {
foreach($output->data as $key => $val) {
$visitors[$val->regdate] += $val->unique_visitor;
}
}
$status->week_max = 0;
if(count($visitors)) {
foreach($visitors as $key => $val) {
if($val>$status->week_max) $status->week_max = $val;
}
}
for($i=$start_time;$i<=$end_time;$i+=60*60*24) {
$status->thisWeekSum += $visitors[date("Ymd",$i)];
$status->week[date("Y.m.d",$i)]->this = (int)$visitors[date("Ymd",$i)];
$status->week[date("Y.m.d",$i)]->last = (int)$visitors[date("Ymd",$i-60*60*24*7)];
}
// 각종 통계 정보를 구함
$output = executeQuery('admin.getTotalVisitors');
$status->total_visitor = $output->data->count;
$output = executeQuery('admin.getTotalSiteVisitors');
$status->total_visitor += $output->data->count;
$status->visitor = $visitors[date("Ymd")];
// 오늘의 댓글 수
$args->regdate = date("Ymd");
$output = executeQuery('admin.getTodayCommentCount', $args);
$status->comment_count = $output->data->count;
// 오늘의 엮인글 수
$args->regdate = date("Ymd");
$output = executeQuery('admin.getTodayTrackbackCount', $args);
$status->trackback_count = $output->data->count;
Context::set('status', $status);
// Get statistics
$args->date = date("Ymd000000", time()-60*60*24);
$today = date("Ymd");
// Member Status
$output = executeQueryArray("admin.getMemberStatus", $args);
if($output->data) {
foreach($output->data as $var) {
if($var->date == $today) {
$status->member->today = $var->count;
} else {
$status->member->yesterday = $var->count;
}
}
}
$output = executeQuery("admin.getMemberCount", $args);
$status->member->total = $output->data->count;
// Document Status
$output = executeQueryArray("admin.getDocumentStatus", $args);
if($output->data) {
foreach($output->data as $var) {
if($var->date == $today) {
$status->document->today = $var->count;
} else {
$status->document->yesterday = $var->count;
}
}
}
$output = executeQuery("admin.getDocumentCount", $args);
$status->document->total = $output->data->count;
// Comment Status
$output = executeQueryArray("admin.getCommentStatus", $args);
if($output->data) {
foreach($output->data as $var) {
if($var->date == $today) {
$status->comment->today = $var->count;
} else {
$status->comment->yesterday = $var->count;
}
}
}
$output = executeQuery("admin.getCommentCount", $args);
$status->comment->total = $output->data->count;
// Trackback Status
$output = executeQueryArray("admin.getTrackbackStatus", $args);
if($output->data) {
foreach($output->data as $var) {
if($var->date == $today) {
$status->trackback->today = $var->count;
} else {
$status->trackback->yesterday = $var->count;
}
}
}
$output = executeQuery("admin.getTrackbackCount", $args);
$status->trackback->total = $output->data->count;
// Attached files Status
$output = executeQueryArray("admin.getFileStatus", $args);
if($output->data) {
foreach($output->data as $var) {
if($var->date == $today) {
$status->file->today = $var->count;
} else {
$status->file->yesterday = $var->count;
}
}
}
$output = executeQuery("admin.getFileCount", $args);
$status->file->total = $output->data->count;
// Reported documents Status
$output = executeQueryArray("admin.getDocumentDeclaredStatus", $args);
if($output->data) {
foreach($output->data as $var) {
if($var->date == $today) {
$status->documentDeclared->today = $var->count;
} else {
$status->documentDeclared->yesterday = $var->count;
}
}
}
$output = executeQuery("admin.getDocumentDeclaredCount", $args);
$status->documentDeclared->total = $output->data->count;
// Reported comments Status
$output = executeQueryArray("admin.getCommentDeclaredStatus", $args);
if($output->data) {
foreach($output->data as $var) {
if($var->date == $today) {
$status->commentDeclared->today = $var->count;
} else {
$status->commentDeclared->yesterday = $var->count;
}
}
}
$output = executeQuery("admin.getCommentDeclaredCount", $args);
$status->commentDeclared->total = $output->data->count;
$site_args->site_srl = 0;
$output = executeQuery('module.getSiteInfo', $site_args);
Context::set('start_module', $output->data);
Context::set('status', $status);
Context::set('layout','none');
$this->setTemplateFile('index');
$security = new Security();
$security->encodeHTML('news..', 'released_version', 'download_link', 'selected_lang', 'module_list..', 'module_list..author..', 'addon_list..', 'addon_list..author..', 'start_module.');
}
/**
* @brief Display Configuration(settings) page
* @return none
**/
function dispAdminConfig() {
$db_info = Context::getDBInfo();
Context::set('sftp_support', function_exists(ssh2_sftp));
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());
Context::set('use_mobile_view', $db_info->use_mobile_view=="Y"?'Y':'N');
$ftp_info = Context::getFTPInfo();
Context::set('ftp_info', $ftp_info);
$site_args->site_srl = 0;
$output = executeQuery('module.getSiteInfo', $site_args);
Context::set('start_module', $output->data);
Context::set('pwd',$pwd);
Context::set('layout','none');
$this->setTemplateFile('config');
}
}
?>
<?php
/**
* @class adminAdminView
* @author NHN (developers@xpressengine.com)
* @brief admin view class of admin module
**/
class adminAdminView extends admin {
var $layout_list;
var $easyinstallCheckFile = './files/env/easyinstall_last';
/**
* @brief Initilization
* @return none
**/
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");
// 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();
}
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;
}
$item = $oAutoinstallModel->getLatestPackage();
if(!$item || $item->updatedate < $updateDate)
{
$oController = &getAdminController('autoinstall');
$oController->_updateinfo();
}
$this->_markingCheckEasyinstall();
}
function _markingCheckEasyinstall()
{
$currentTime = time();
FileHandler::writeFile($this->easyinstallCheckFile, $currentTime);
}
function makeGnbUrl($module = 'admin')
{
global $lang;
$oAdminAdminModel = &getAdminModel('admin');
$lang->menu_gnb_sub = $oAdminAdminModel->getAdminMenuLang();
$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)
{
if(isset($value->acts) && is_array($value->acts) && in_array($currentAct, $value->acts))
{
$subMenuTitle = $value->title;
break;
}
}
$parentSrl = 0;
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'];
}
foreach($parentMenu['list'] as $childKey=>$childMenu)
{
if($subMenuTitle == $childMenu['text'])
{
$parentSrl = $childMenu['parent_srl'];
break;
}
}
}
// 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'));
Context::set('subMenuTitle', $subMenuTitle);
Context::set('gnbUrlList', $menu->list);
Context::set('parentSrl', $parentSrl);
Context::set('gnb_title_info', $gnbTitleInfo);
Context::setBrowserTitle($browserTitle);
}
function loadSideBar()
{
$oModuleModel = &getModel('module');
$installed_module_list = $oModuleModel->getModulesXmlInfo();
$installed_modules = $package_modules = array();
$package_idx = 0;
foreach($installed_module_list as $key => $val) {
if($val->category == 'migration') $val->category = 'system';
if($val->category == 'interlock') $val->category = 'accessory';
if($val->category == 'statistics') $val->category = 'accessory';
if($val->module == 'admin' || !$val->admin_index_act) continue;
// get action information
$action_spec = $oModuleModel->getModuleActionXml($val->module);
$actions = array();
if($action_spec->default_index_act) $actions[] = $action_spec->default_index_act;
if($action_spec->admin_index_act) $actions[] = $action_spec->admin_index_act;
if($action_spec->action) foreach($action_spec->action as $k => $v) $actions[] = $k;
$obj = null;
$obj->category = $val->category;
$obj->title = $val->title;
$obj->description = $val->description;
$obj->index_act = $val->admin_index_act;
if(in_array(Context::get('act'), $actions)) $obj->selected = true;
// Packages
if($val->category == 'package') {
if($package_idx == 0) $obj->position = "first";
else $obj->position = "mid";
$package_modules[] = $obj;
$package_idx ++;
if($obj->selected) Context::set('package_selected',true);
// Modules
} else {
$installed_modules[] = $obj;
}
if($obj->selected) {
Context::set('selected_module_category', $val->category);
Context::set('selected_module_info', $val);
}
}
if(count($package_modules)) $package_modules[count($package_modules)-1]->position = 'end';
Context::set('package_modules', $package_modules);
Context::set('installed_modules', $installed_modules);
Context::setBrowserTitle("XE Admin Page");
// add javascript tooltip plugin - gony
Context::loadJavascriptPlugin('qtip');
Context::loadJavascriptPlugin('watchinput');
$security = new Security();
$security->encodeHTML('selected_module_info.', 'selected_module_info.author..', 'package_modules..', 'installed_modules..');
}
/**
* @brief Display Super Admin Dashboard
* @return none
**/
function dispAdminIndex() {
// Get statistics
$args->date = date("Ymd000000", time()-60*60*24);
$today = date("Ymd");
// Member Status
$oMemberAdminModel = &getAdminModel('member');
$status->member->todayCount = $oMemberAdminModel->getMemberCountByDate($today);
$status->member->totalCount = $oMemberAdminModel->getMemberCountByDate();
// Document Status
$oDocumentAdminModel = &getAdminModel('document');
$statusList = array('PUBLIC', 'SECRET');
$status->document->todayCount = $oDocumentAdminModel->getDocumentCountByDate($today, array(), $statusList);
$status->document->totalCount = $oDocumentAdminModel->getDocumentCountByDate('', array(), $statusList);
// 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);
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);
//Retrieve recent news and set them into context
$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);
}
Context::set('released_version', $buff->zbxe_news->attrs->released_version);
Context::set('download_link', $buff->zbxe_news->attrs->download_link);
}
// Get list of modules
$oModuleModel = &getModel('module');
$module_list = $oModuleModel->getModuleList();
if(is_array($module_list))
{
$isUpdated = false;
foreach($module_list AS $key=>$value)
{
if($value->need_install || $value->need_update)
$isUpdated = true;
}
}
Context::set('module_list', $module_list);
Context::set('isUpdated', $isUpdated);
// gathering enviroment check
$path = FileHandler::getRealPath('./files/env/'.__ZBXE_VERSION__);
$isEnviromentGatheringAgreement = false;
if(file_exists($path)) $isEnviromentGatheringAgreement = true;
Context::set('isEnviromentGatheringAgreement', $isEnviromentGatheringAgreement);
Context::set('layout','none');
$this->setTemplateFile('index');
}
/**
* @brief Display Configuration(settings) page
* @return none
**/
function dispAdminConfigGeneral() {
Context::loadLang('modules/install/lang');
$db_info = Context::getDBInfo();
Context::set('sftp_support', function_exists(ssh2_sftp));
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.');
}
/**
* @brief Display Configuration(settings) page
* @return none
**/
function dispAdminConfigFtp() {
Context::loadLang('modules/install/lang');
$ftp_info = Context::getFTPInfo();
Context::set('ftp_info', $ftp_info);
$this->setTemplateFile('config_ftp');
// $security = new Security();
// $security->encodeHTML('ftp_info..');
}
/**
* @brief Display Admin Menu Configuration(settings) page
* @return none
**/
function dispAdminSetup()
{
$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');
}
function showSendEnv() {
if(Context::getResponseMethod() != 'HTML') return;
$server = 'http://collect.xpressengine.com/env/img.php?';
$path = './files/env/';
$install_env = $path . 'install';
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.__ZBXE_VERSION__,'1');
}
else if(isset($_SESSION['enviroment_gather']) && !file_exists(FileHandler::getRealPath($path.__ZBXE_VERSION__)))
{
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.__ZBXE_VERSION__,'1');
unset($_SESSION['enviroment_gather']);
}
}
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);
}
// 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/layout/%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;
}
}
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');
}
}

View file

@ -1,59 +1,285 @@
<?php
/**
* @class admin
* @author NHN (developers@xpressengine.com)
* @brief base class of admin module
**/
class admin extends ModuleObject {
/**
* @brief install admin module
* @return new Object
**/
function moduleInstall() {
return new Object();
}
/**
* @brief if update is necessary it returns true
**/
function checkUpdate() {
return false;
}
/**
* @brief update module
* @return new Object
**/
function moduleUpdate() {
return new Object();
}
/**
* @brief regenerate cache file
* @return none
**/
function recompileCache() {
// remove compiled templates
FileHandler::removeFilesInDir("./files/cache/template_compiled");
// remove optimized files
FileHandler::removeFilesInDir("./files/cache/optimized");
// remove js_filter_compiled files
FileHandler::removeFilesInDir("./files/cache/js_filter_compiled");
// remove cached queries
FileHandler::removeFilesInDir("./files/cache/queries");
// remove ./files/cache/news* files
$directory = dir(_XE_PATH_."files/cache/");
while($entry = $directory->read()) {
if(substr($entry,0,11)=='newest_news') FileHandler::removeFile("./files/cache/".$entry);
}
$directory->close();
}
}
?>
<?php
/**
* @class admin
* @author NHN (developers@xpressengine.com)
* @brief base class of admin module
**/
class admin extends ModuleObject {
/**
* @brief install admin module
* @return new Object
**/
function moduleInstall() {
return new Object();
}
/**
* @brief if update is necessary it returns true
**/
function checkUpdate() {
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists("admin_favorite", "type")) return true;
return false;
}
/**
* @brief update module
* @return new 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();
}
/**
* @brief regenerate cache file
* @return none
**/
function recompileCache() {
}
/**
* @brief regenerate xe admin default menu
* @return none
**/
function createXeAdminMenu()
{
//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);
// gnb item create
$gnbList = array('dashboard', 'site', 'user', 'content', 'theme', 'extensions', 'configuration');
foreach($gnbList AS $key=>$value)
{
//insert menu item
$args->menu_srl = $menuSrl;
$args->menu_item_srl = getNextSequence();
$args->name = '{$lang->menu_gnb[\''.$value.'\']}';
if($value == 'dashboard') $args->url = getUrl('', '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'),
),
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)
{
$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);
}
function _getGnbKey($menuName)
{
switch($menuName) {
case 'siteMap':
return 'site';
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';
}
}
}
?>

View file

@ -1,36 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">관리자 모듈</title>
<title xml:lang="en">Administrator Module</title>
<title xml:lang="vi">Administrator Module</title>
<title xml:lang="es">Módulo del administrador</title>
<title xml:lang="zh-CN">管理员模块</title>
<title xml:lang="jp">管理者用モジュール</title>
<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="en">This module shows a list of features of each module, and enables you to use a quite few of managers by applying layout for administrator.</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>
<description xml:lang="zh-CN">列出各模块的功能并使用管理员布局,可以让其使用管理功能的模块。</description>
<description xml:lang="jp">各モジュールの機能を表示し、かつ管理者用のレイアウトを適用させて、管理機能が使用出来るようにします。</description>
<description xml:lang="ru">Этот модуль показывает список возможностей каждого модуля, и позволяет Вам использовать несколько менеджеров, применяя лейаут для администратора.</description>
<description xml:lang="zh-TW">列出各模組的功能及使用管理員版面,並可使用管理功能的模組。</description>
<description xml:lang="tr">Bu modül size, her modülün özelliklerini barındıran bir liste gösterir ve yöneticiler için yerleşim düzeni uygulayarak, yöneticilerin birkaçını kullanma imkanı sunar.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>system</category>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
<name xml:lang="tr">NHN</name>
</author>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">관리자 모듈</title>
<title xml:lang="en">Administrator Module</title>
<title xml:lang="vi">Administrator Module</title>
<title xml:lang="es">Módulo del administrador</title>
<title xml:lang="zh-CN">管理员模块</title>
<title xml:lang="jp">管理者用モジュール</title>
<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="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>
<description xml:lang="zh-CN">列出各模块的功能并使用管理员布局,可以让其使用管理功能的模块。</description>
<description xml:lang="jp">各モジュールの機能を表示し、かつ管理者用のレイアウトを適用させて、管理機能が使用出来るようにします。</description>
<description xml:lang="ru">Этот модуль показывает список возможностей каждого модуля, и позволяет Вам использовать несколько менеджеров, применяя лейаут для администратора.</description>
<description xml:lang="zh-TW">列出各模組的功能及使用管理員版面,並可使用管理功能的模組。</description>
<description xml:lang="tr">Bu modül size, her modülün özelliklerini barındıran bir liste gösterir ve yöneticiler için yerleşim düzeni uygulayarak, yöneticilerin birkaçını kullanma imkanı sunar.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>system</category>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
<name xml:lang="tr">NHN</name>
</author>
</module>

View file

@ -4,10 +4,76 @@
<permissions />
<actions>
<action name="dispAdminIndex" type="view" standalone="true" index="true" />
<action name="dispAdminConfig" type="view" standalone="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="procAdminRecompileCacheFile" type="controller" standalone="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="procAdminToggleFavorite" type="controller" ruleset="toggleFavorite" />
<action name="procAdminEnviromentGatheringAgreement" type="controller" standalone="true" />
<action name="procAdminUpdateConfig" type="controller" standalone="true" />
<action name="procAdminDeleteLogo" type="controller" standalone="true" />
<action name="procAdminMenuReset" type="controller" />
<action name="getAdminFTPList" type="model" standalone="true" />
<action name="getSiteAllList" type="model" standalone="true" />
</actions>
<menus>
<menu name="adminConfigurationGeneral" type="all">
<title xml:lang="en">General</title>
<title xml:lang="ko">일반</title>
<title xml:lang="zh-CN">General</title>
<title xml:lang="jp">General</title>
<title xml:lang="es">General</title>
<title xml:lang="ru">General</title>
<title xml:lang="fr">General</title>
<title xml:lang="zh-TW">General</title>
<title xml:lang="vi">General</title>
<title xml:lang="mn">General</title>
<title xml:lang="tr">General</title>
</menu>
<menu name="adminMenuSetup" type="all">
<title xml:lang="en">Admin Setup</title>
<title xml:lang="ko">관리자 설정</title>
<title xml:lang="zh-CN">Admin Setup</title>
<title xml:lang="jp">Admin Setup</title>
<title xml:lang="es">Admin Setup</title>
<title xml:lang="ru">Admin Setup</title>
<title xml:lang="fr">Admin Setup</title>
<title xml:lang="zh-TW">Admin Setup</title>
<title xml:lang="vi">Admin Setup</title>
<title xml:lang="mn">Admin Setup</title>
<title xml:lang="tr">Admin Setup</title>
</menu>
<menu name="adminConfigurationFtp" type="all">
<title xml:lang="en">FTP Configuration</title>
<title xml:lang="ko">FTP 설정</title>
<title xml:lang="zh-CN">FTP Configuration</title>
<title xml:lang="jp">FTP Configuration</title>
<title xml:lang="es">FTP Configuration</title>
<title xml:lang="ru">FTP Configuration</title>
<title xml:lang="fr">FTP Configuration</title>
<title xml:lang="zh-TW">FTP Configuration</title>
<title xml:lang="vi">FTP Configuration</title>
<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">Theme</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,92 +0,0 @@
<?php
/**
* @file en.lang.php
* @author NHN (developers@xpressengine.com)
* @brief English Language Pack (Only basic words are included here)
**/
$lang->admin_info = 'Administrator Info';
$lang->admin_index = 'Index Admin Page';
$lang->control_panel = 'Dashboard';
$lang->start_module = 'Default Module';
$lang->about_start_module = 'You can specify default module of the site.';
$lang->module_category_title = array(
'service' => 'Services',
'member' => 'Members',
'content' => 'Contents',
'statistics' => 'Statistics',
'construction' => 'Construction',
'utility' => 'Utilities',
'interlock' => 'Embedded',
'accessory' => 'Accessories',
'migration' => 'Data Migration',
'system' => 'System Setting',
);
$lang->newest_news = "Latest News";
$lang->env_setup = "Setting";
$lang->default_url = "Default URL";
$lang->about_default_url = "If you use a virtual site feature (e.g., cafeXE), input default URL (parent-site's address), then SSO would be enabled, thus connection to documents/modules works properly. ";
$lang->env_information = "Environment Information";
$lang->current_version = "Current Version";
$lang->current_path = "Installed Path";
$lang->released_version = "Latest Version";
$lang->about_download_link = "New version of Zerboard XE is now available!\nPlease click the download link to get the latest version.";
$lang->item_module = "Module List";
$lang->item_addon = "Addon List";
$lang->item_widget = "Widget List";
$lang->item_layout = "Layout List";
$lang->module_name = "Module Name";
$lang->addon_name = "Addon Name";
$lang->version = "Version";
$lang->author = "Developer";
$lang->table_count = "Number of Table";
$lang->installed_path = "Installed Path";
$lang->cmd_shortcut_management = "Edit Menu";
$lang->msg_is_not_administrator = 'Administrator Only';
$lang->msg_manage_module_cannot_delete = 'Shortcuts of module, addon, layout, widget cannot be removed';
$lang->msg_default_act_is_null = 'Shortcut could not be registered because default admin Action is not set';
$lang->welcome_to_xe = 'Welcome to the admin page of XE';
$lang->about_admin_page = "Admin page is still under development,\nWe will add essential contents by accepting many good suggestions during Closebeta.";
$lang->about_lang_env = "To apply selected language as default language, click on the Save button.";
$lang->xe_license = 'XE complies with the GPL';
$lang->about_shortcut = 'You may remove shortcuts of modules which are registered on frequently using module list';
$lang->yesterday = "Yesterday";
$lang->today = "Today";
$lang->cmd_lang_select = "Language";
$lang->about_cmd_lang_select = "Only selected languages will be served.";
$lang->about_recompile_cache = "You can delete useless or invalid cache files.";
$lang->use_ssl = "Use SSL";
$lang->ssl_options = array(
'none' => "Never",
'optional' => "Optional",
'always' => "Always"
);
$lang->about_use_ssl = "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.";
$lang->server_ports = "Server Port";
$lang->about_server_ports = "If your web server does not use 80 for HTTP or 443 for HTTPS port, you should specify server ports";
$lang->use_db_session = 'Use Session DB';
$lang->about_db_session = '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.';
$lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
$lang->msg_self_restart_cache_engine = 'Please restart Memcached or cache daemon.';
$lang->mobile_view = 'Mobile View';
$lang->about_mobile_view = 'Mobile View will display the best layout when accessing with smartphones.';
$lang->autoinstall = 'EasyInstall';
$lang->last_week = 'Last week';
$lang->this_week = 'This week';
?>

View file

@ -1,94 +0,0 @@
<?php
/**
* @archivo es.lang.php
* @autor NHN (developers@xpressengine.com)
* @sumario Paquete del idioma español (sólo los básicos)
**/
$lang->admin_info = 'Administrador de Información';
$lang->admin_index = 'Índice de la página admin';
$lang->control_panel = 'Control panel';
$lang->start_module = 'Módulo de inicio';
$lang->about_start_module = 'Puede especificar el módulo de inicio por defecto.';
$lang->module_category_title = array(
'service' => 'Service Setting',
'member' => 'Member Setting',
'content' => 'Content Setting',
'statistics' => 'Statistics',
'construction' => 'Construction',
'utility' => 'Utility Setting',
'interlock' => 'Interlock Setting',
'accessory' => 'Accessories',
'migration' => 'Data Migration',
'system' => 'System Setting',
);
$lang->newest_news = "Noticias recientes";
$lang->env_setup = "Configuración";
$lang->default_url = "기본 URL";
$lang->about_default_url = "XE sitio virtual (cafeXE, etc) tiene que introducir la URL base, al utilizar las capacidades de trabajo virtual y el tema de autenticación sayiteugan / módulos y las conexiones se realizan correctamente. (Ej: http:// dominio / ruta de instalación)";
$lang->env_information = "Información Ambiental";
$lang->current_version = "Versión actual";
$lang->current_path = "Instalado Sendero";
$lang->released_version = "Versión más reciente";
$lang->about_download_link = "La versión más reciente Zerboard XE está disponible.\nPara descargar la versión más reciente, haga clic en enlace de descarga.";
$lang->item_module = "Lista de Módulos";
$lang->item_addon = "Lista de Addons";
$lang->item_widget = "Lista de Widgets";
$lang->item_layout = "Liasta de Diseños";
$lang->module_name = "Nombre del Módulo";
$lang->addon_name = "Nombre de Addon";
$lang->version = "Versión";
$lang->author = "Autor";
$lang->table_count = "Número de los tableros";
$lang->installed_path = "Ruta de instalación";
$lang->cmd_shortcut_management = "Editar el Menú";
$lang->msg_is_not_administrator = 'Sólo se permite el ingreso del administrador.';
$lang->msg_manage_module_cannot_delete = 'No se puede eliminar acceso directo del Módulo, Addon, Diseño y Widget.';
$lang->msg_default_act_is_null = 'No se puede registrar acceso directo por no estar determinada la acción del administrador predefinido.';
$lang->welcome_to_xe = 'Esta es la página del Administrador de XE';
$lang->about_admin_page = "La página del Administrador aún está en desarrollo.";
$lang->about_lang_env = "Para aplicar idioma seleccionado conjunto de los usuarios, como por defecto, haga clic en el botón [Guardar] el cambio.";
$lang->xe_license = 'XE está bajo la Licencia de GPL';
$lang->about_shortcut = 'Puede Eliminar los accesos directos de módulos, los cuales fueron registrados en la lista de módulos usados frecuentemente';
$lang->yesterday = "Yesterday";
$lang->today = "Today";
$lang->cmd_lang_select = "Selección de Idioma";
$lang->about_cmd_lang_select = "Seleccione el idioma es sólo el servicio";
$lang->about_recompile_cache = "Inválido inútil archivo de caché puede organizar jyeotgeona";
$lang->use_ssl = "Usar SSL";
$lang->ssl_options = array(
'none' => "Desactivar",
'optional' => "Opcionalmente el",
'always' => "Utilice siempre el"
);
$lang->about_use_ssl = "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";
$lang->server_ports = "Especifique el puerto del servidor";
$lang->about_server_ports = "80 de HTTP, HTTPS al puerto 443 si se utiliza otro que se especifique lo contrario, el puerto va a necesitar.";
$lang->use_db_session = '인증 세션 DB 사용';
$lang->about_db_session = '인증시 사용되는 PHP 세션을 DB로 사용하는 기능입니다.<br/>웹서버의 사용율이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다<br/>단 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.';
$lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
$lang->msg_self_restart_cache_engine = 'Please restart Memcached or cache daemon.';
$lang->mobile_view = 'Use Mobile View';
$lang->about_mobile_view = 'If accessing with a smartphone, display content with mobile layout.';
$lang->autoinstall = 'EasyInstall';
$lang->last_week = 'Last week';
$lang->this_week = 'This week';
?>

View file

@ -1,93 +0,0 @@
<?php
/**
* @file modules/admin/lang/fr.lang.php
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent(PierreDuvent@gamil.com)
* @brief Paquet du langage en français pour le module d\'Administration
**/
$lang->admin_info = 'Informations d\'Administrateur';
$lang->admin_index = 'Page de l\'indice pour l\'Administrateur';
$lang->control_panel = 'Control panel';
$lang->start_module = 'Start Module';
$lang->about_start_module = 'Vous pouvez spécifier début module par défaut.';
$lang->module_category_title = array(
'service' => 'Service Setting',
'member' => 'Member Setting',
'content' => 'Content Setting',
'statistics' => 'Statistics',
'construction' => 'Construction',
'utility' => 'Utility Setting',
'interlock' => 'Interlock Setting',
'accessory' => 'Accessories',
'migration' => 'Data Migration',
'system' => 'System Setting',
);
$lang->newest_news = "Dernières Nouvelles";
$lang->env_setup = "Configuration";
$lang->default_url = "기본 URL";
$lang->about_default_url = "XE 가상 사이트(cafeXE등)의 기능을 사용할때 기본 URL을 입력해 주셔야 가상 사이트간 인증 연동이 되고 게시글/모듈등의 연결이 정상적으로 이루어집니다. (ex: http://도메인/설치경로)";
$lang->env_information = "Informations de l'Environnement";
$lang->current_version = "Version Courante";
$lang->current_path = "Chemin Installé";
$lang->released_version = "Dernière Version";
$lang->about_download_link = "Nouvelle version est disponible.\nPour télécharger la dernière version, cliquez le lien.";
$lang->item_module = "Liste des Modules";
$lang->item_addon = "Liste des Compagnons";
$lang->item_widget = "Liste des Gadgets";
$lang->item_layout = "Liste des Mises en Pages";
$lang->module_name = "Nom de Module";
$lang->addon_name = "Nom de Compagnon";
$lang->version = "Version";
$lang->author = "Auteur";
$lang->table_count = "Somme de Tables";
$lang->installed_path = "Chemin Installé";
$lang->cmd_shortcut_management = "Editer le Menu";
$lang->msg_is_not_administrator = 'Administrateur seulement';
$lang->msg_manage_module_cannot_delete = 'On ne peut pas supprimer les raccourcis pour les modules, les compagnons, les mises en page ou les gadgets';
$lang->msg_default_act_is_null = 'on ne peut pas enrégistrer les raccourcis parce que les Actions Par Défaut de l\'Administrateur ne sont pas établies';
$lang->welcome_to_xe = 'Bienvenue sur la Page d\'Administration du XE';
$lang->about_admin_page = "La Page d\'Administration est encore en train de développer,\nNous allons ajouter des contenus essentiels par accepter beauoup de bons suggestions pendant Béta Proche.";
$lang->about_lang_env = "Vous pouvez fixer la Langue Par Défaut par cliquer le boutton [Conserver] au-dessous. Les visiteurs vont voir tous les menus et les messages en langue que vous choisissez.";
$lang->xe_license = 'XE s\'applique la GPL';
$lang->about_shortcut = 'Vous pouvez supprimer les raccourcis pour les modules qui sont enrgistrés sur le liste des modules qui sont utilisés fréquemment';
$lang->yesterday = "Yesterday";
$lang->today = "Today";
$lang->cmd_lang_select = "langue";
$lang->about_cmd_lang_select = "La langue choisie seulement sera servie";
$lang->about_recompile_cache = "Vous pouvez arranger les fichiers inutils ou les fichiers invalides d'antémémoire";
$lang->use_ssl = "Utiliser SSL";
$lang->ssl_options = array(
'none' => "Ne Pas utiliser",
'optional' => "Optionnel",
'always' => "Toujours"
);
$lang->about_use_ssl = "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.";
$lang->server_ports = "déclarer le port de serveur";
$lang->about_server_ports = "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.";
$lang->use_db_session = '인증 세션 DB 사용';
$lang->about_db_session = '인증시 사용되는 PHP 세션을 DB로 사용하는 기능입니다.<br/>웹서버의 사용율이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다<br/>단 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.';
$lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
$lang->msg_self_restart_cache_engine = 'Please restart Memcached or cache daemon.';
$lang->mobile_view = 'Use Mobile View';
$lang->about_mobile_view = 'If accessing with a smartphone, display content with mobile layout.';
$lang->autoinstall = 'EasyInstall';
$lang->last_week = 'Last week';
$lang->this_week = 'This week';
?>

View file

@ -1,93 +0,0 @@
<?php
/**
* @file modules/admin/lang/jp.lang.php
* @author NHN (developers@xpressengine.com) 翻訳RisaPapa、ミニミ // 細かい修正liahona
* @brief 日本語言語パッケージ(基本的な内容のみ)
**/
$lang->admin_info = '管理者情報';
$lang->admin_index = '管理者トップページ';
$lang->control_panel = 'コントロールパネル';
$lang->start_module = '初期起動モジュール';
$lang->about_start_module = 'デフォルトで起動するモジュールを指定することができます。';
$lang->module_category_title = array(
'service' => 'サービス管理',
'member' => '会員管理',
'content' => 'コンテンツ管理',
'statistics' => '統計確認',
'construction' => 'サイト設定',
'utility' => '機能設定',
'interlock' => '連動設定',
'accessory' => '付加機能設定',
'migration' => 'データ管理/復元',
'system' => 'システム管理',
);
$lang->newest_news = '最新ニュース';
$lang->env_setup = '環境設定';
$lang->default_url = '基本URL';
$lang->about_default_url = '複数のバーチャルVirtualサイトを運営する場合、どちらからログインしてもバーチャルVirtualサイトの間でログイン情報を維持出来るようにするためには、基本になるサイトでのXEをインストールしたurlを登録して下さい。 (例: http://ドメイン/インストールパス)';
$lang->env_information = '環境情報';
$lang->current_version = 'インストール済みバージョン';
$lang->current_path = 'インストールパス';
$lang->released_version = '最新バージョン';
$lang->about_download_link = "新しいバージョンが配布されています。\n「ダウンロード」リンクをクリックするとダウンロード出来ます。";
$lang->item_module = 'モジュールリスト';
$lang->item_addon = 'アドオンリスト';
$lang->item_widget = 'ウィジェットリスト';
$lang->item_layout = 'レイアウトリスト';
$lang->module_name = 'モジュール名';
$lang->addon_name = 'アドオン名';
$lang->version = 'バージョン';
$lang->author = '制作者';
$lang->table_count = 'テーブル数';
$lang->installed_path = 'インストールパス';
$lang->cmd_shortcut_management = 'メニューの編集';
$lang->msg_is_not_administrator = '管理者のみアクセス出来ます';
$lang->msg_manage_module_cannot_delete = 'モジュール、アドオン、ウィジェットのショットカットは削除出来ません。';
$lang->msg_default_act_is_null = 'デフォルトの管理者のアクションが指定されていないため、ショットカットを登録することが出来ません。';
$lang->welcome_to_xe = 'XEの管理者ページです。';
$lang->about_lang_env = '初めてサイトに訪問したユーザーに対し、上記の選択した言語でサイトを表示させるためには、必ず下記の「保存」ボタンをクリックして適用して下さい。';
$lang->xe_license = 'XEのライセンスはGPLです。';
$lang->about_shortcut = 'よく使用するモジュールに登録されたショートカットは削除出来ます。';
$lang->yesterday = '昨日';
$lang->today = '今日';
$lang->cmd_lang_select = '言語選択';
$lang->about_cmd_lang_select = '選択した言語だけでサービスを行います。';
$lang->about_recompile_cache = '要らないかごみのキャッシューファイルを整理します。';
$lang->use_ssl = 'SSL環境設定';
$lang->ssl_options = array(
'none' => '使わない',
'optional' => '部分的に使う',
'always' => '常に使う'
);
$lang->about_use_ssl = '「部分的に使う場合」は「会員登録/会員情報変更」など特定のactionでSSLを利用する場合、「常に使う」は全てのサービスがSSLを使う場合に選択します。';
$lang->server_ports = 'サーバーポート指定';
$lang->about_server_ports = '一般的に使われているHTTPの80、HTTPSの443以外の他のポートを使うために、ポートを指定して下さい。';
$lang->use_db_session = 'DBで認証セッション管理';
$lang->about_db_session = '認証の時に使われるPHPセッションをDBで使う機能です。<br />ウェブサーバーの負荷が低いサイトではこの機能をオフにすることでむしろサイトのレスポンスが向上されることもあります。<br />また、この機能をオンにすると、「現在ログイン中の会員」の機能が不可になります。';
$lang->sftp = "SFTP使用";
$lang->ftp_get_list = "ディレクトリ目録要請";
$lang->ftp_remove_info = 'FTP情報削除';
$lang->msg_ftp_invalid_path = '指定されたFTPパスへのアクセスに失敗しました。';
$lang->msg_self_restart_cache_engine = 'メムキャッシュドまたはキャッシュデーモンを再起動して下さい。';
$lang->mobile_view = 'モバイルスキン使用';
$lang->about_mobile_view = 'スマート携帯などを通じてサイトに接続した場合、モバイル画面に最適化されたレイアウトを使用するように設定します。';
$lang->autoinstall = 'イージーインストール';
$lang->last_week = '先週';
$lang->this_week = '今週';
?>

View file

@ -1,93 +0,0 @@
<?php
/**
* @file ko.lang.php
* @author NHN (developers@xpressengine.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
$lang->admin_info = '관리자 정보';
$lang->admin_index = '관리자 초기 페이지';
$lang->control_panel = '제어판';
$lang->start_module = '시작 모듈';
$lang->about_start_module = '사이트 접속 시 기본으로 호출될 모듈을 지정할 수 있습니다.';
$lang->module_category_title = array(
'service' => '서비스 관리',
'member' => '회원 관리',
'content' => '정보 관리',
'statistics' => '통계 열람',
'construction' => '사이트 설정',
'utility' => '기능 설정',
'interlock' => '연동 설정',
'accessory' => '부가 기능 설정',
'migration' => '데이터 관리/복원',
'system' => '시스템 관리',
);
$lang->newest_news = '최신 소식';
$lang->env_setup = '환경 설정';
$lang->default_url = '기본 URL';
$lang->about_default_url = 'XE 가상 사이트(cafeXE 등)의 기능을 사용할 때 기본 URL을 입력하셔야 가상 사이트간 인증 연동이 되고 게시글, 모듈 등의 연결이 정상적으로 이루어집니다. (예: http://도메인/설치경로)';
$lang->env_information = '환경 정보';
$lang->current_version = '설치된 버전';
$lang->current_path = '설치된 경로';
$lang->released_version = '최신 버전';
$lang->about_download_link = "최신 버전이 배포되었습니다.\ndownload 링크를 클릭하시면 다운 받으실 수 있습니다.";
$lang->item_module = '모듈 목록';
$lang->item_addon = '애드온 목록';
$lang->item_widget = '위젯 목록';
$lang->item_layout = '레이아웃 목록';
$lang->module_name = '모듈 이름';
$lang->addon_name = '애드온 이름';
$lang->version = '버전';
$lang->author = '제작자';
$lang->table_count = '테이블 수';
$lang->installed_path = '설치 경로';
$lang->cmd_shortcut_management = '메뉴 편집하기';
$lang->msg_is_not_administrator = '관리자만 접속이 가능합니다.';
$lang->msg_manage_module_cannot_delete = '모듈, 애드온, 레이아웃, 위젯 모듈의 바로가기는 삭제 불가능합니다.';
$lang->msg_default_act_is_null = '기본 관리자 Action이 지정되어 있지 않아 바로가기 등록을 할 수 없습니다.';
$lang->welcome_to_xe = 'XE 관리자';
$lang->about_lang_env = '처음 방문하는 사용자들의 언어 설정을 동일하게 하려면, 원하는 언어로 변경 후 아래 [저장] 버튼을 클릭하시면 됩니다.';
$lang->xe_license = 'XE는 GPL을 따릅니다.';
$lang->about_shortcut = '자주 사용하는 모듈에 등록된 모듈의 바로가기를 삭제할 수 있습니다.';
$lang->yesterday = '어제';
$lang->today = '오늘';
$lang->cmd_lang_select = '언어선택';
$lang->about_cmd_lang_select = '선택된 언어들만 서비스 됩니다.';
$lang->about_recompile_cache = '쓸모 없어졌거나 잘못된 캐시파일들을 정리할 수 있습니다.';
$lang->use_ssl = 'SSL 사용';
$lang->ssl_options = array(
'none' => '사용 안함',
'optional' => '선택적으로',
'always' => '항상 사용'
);
$lang->about_use_ssl = '\'선택적으로\'는 회원가입, 정보수정 등의 지정된 action에서 SSL을 사용하고 \'항상 사용\'은 모든 서비스에 SSL을 사용 합니다.';
$lang->server_ports = '서버포트지정';
$lang->about_server_ports = 'HTTP는 80, HTTPS는 443 이 아닌, 다른 포트를 사용할 경우에 포트를 지정해 주어야 합니다.';
$lang->use_db_session = '인증 세션 DB 사용';
$lang->about_db_session = '인증 시 사용되는 PHP 세션을 DB로 사용하는 기능입니다.<br/>웹서버의 사용률이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다.<br/>단 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.';
$lang->sftp = 'SFTP 사용';
$lang->ftp_get_list = '목록 가져오기';
$lang->ftp_remove_info = 'FTP 정보 삭제';
$lang->msg_ftp_invalid_path = 'FTP Path를 읽을 수 없습니다.';
$lang->msg_self_restart_cache_engine = 'Memcached 또는 캐쉬데몬을 재시작 해주세요.';
$lang->mobile_view = '모바일 뷰 사용';
$lang->about_mobile_view = '스마트폰 등을 이용하여 접속할 때 모바일 화면에 최적화된 레이아웃을 이용하도록 합니다.';
$lang->autoinstall = '쉬운 설치';
$lang->last_week = '지난 주';
$lang->this_week = '이번 주';
?>

1275
modules/admin/lang/lang.xml Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,91 +0,0 @@
<?php
/**
* @file ru.lang.php
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack for XE
**/
$lang->admin_info = 'Информация администратора';
$lang->admin_index = 'Индексная страница администратора';
$lang->control_panel = 'Контрольная панель';
$lang->start_module = 'Стартовый модуль';
$lang->about_start_module = 'Вы можете указать модуль запуска по умолчанию.';
$lang->module_category_title = array(
'service' => 'Service Setting',
'member' => 'Member Setting',
'content' => 'Content Setting',
'statistics' => 'Statistics',
'construction' => 'Construction',
'utility' => 'Utility Setting',
'interlock' => 'Interlock Setting',
'accessory' => 'Accessories',
'migration' => 'Data Migration',
'system' => 'System Setting',
);
$lang->newest_news = 'Последние новости';
$lang->env_setup = 'Настройка';
$lang->default_url = 'Основной URL';
$lang->about_default_url = 'If you use a virtual site feature (e.g., cafeXE), input default URL (parent-sites address), then SSO would be enabled, thus connection to documents/modules works properly';
$lang->env_information = 'Информация окружения';
$lang->current_version = 'Текущая версия';
$lang->current_path = 'Текущий путь';
$lang->released_version = 'Последняя версия';
$lang->about_download_link = 'Новая версия XE доступна.\nЧтобы скачать последнюю версию, нажмите ссылку закачки';
$lang->item_module = 'Список модулей';
$lang->item_addon = 'Список аддонов';
$lang->item_widget = 'Список виджетов';
$lang->item_layout = 'Список лейаутов';
$lang->module_name = 'Имя модуля';
$lang->addon_name = 'Имя аддона';
$lang->version = 'Версия';
$lang->author = 'Разработчик';
$lang->table_count = 'Номер таблицы';
$lang->installed_path = 'Путь установки';
$lang->cmd_shortcut_management = 'Редактировать меню';
$lang->msg_is_not_administrator = 'Только для администраторов!';
$lang->msg_manage_module_cannot_delete = 'Ярлыки модулей, аддонов, лейаутов, виджетов не могут быть удалены';
$lang->msg_default_act_is_null = 'Ярлык не может быть зарегистрирован, поскольку стандартное административное действие не установлено';
$lang->welcome_to_xe = 'Добро пожаловать на страницу администратора XE';
$lang->about_lang_env = 'Чтобы применить выбранный язык для пользователей как страндартный, нажмите кнопку Сохранить [Save] после изменения';
$lang->xe_license = 'XE подчиняется Стандартной Общественной Лицензии GPL';
$lang->about_shortcut = 'Вы можете удалить ярлыки модулей, зарегистрированных в списке часто используемых модулей';
$lang->yesterday = 'Вчера';
$lang->today = 'Сегодня';
$lang->cmd_lang_select = 'Выбор языка';
$lang->about_cmd_lang_select = 'Возможно использование только выбранных языков';
$lang->about_recompile_cache = 'You can delete useless or invalid cache files';
$lang->use_ssl = 'Использовать SSL';
$lang->ssl_options = array(
'none' => 'Никогда',
'optional' => 'На выбор',
'always' => 'Всегда'
);
$lang->about_use_ssl = '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';
$lang->server_ports = 'Server Port';
$lang->about_server_ports = 'If your web server does not use 80 for HTTP or 443 for HTTPS port, you should specify server ports';
$lang->use_db_session = 'Use Session DB';
$lang->about_db_session = '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';
$lang->sftp = 'Use SFTP';
$lang->ftp_get_list = 'Get List';
$lang->ftp_remove_info = 'Remove FTP Info';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
$lang->msg_self_restart_cache_engine = 'Please restart Memcached or cache daemon.';
$lang->mobile_view = 'Use Mobile View';
$lang->about_mobile_view = 'If accessing with a smartphone, display content with mobile layout.';
$lang->autoinstall = 'EasyInstall';
$lang->last_week = 'Last week';
$lang->this_week = 'This week';
?>

View file

@ -1,92 +0,0 @@
<?php
/**
* @file en.lang.php
* @author NHN (developers@xpressengine.com)
* @brief English Language Pack (Only basic words are included here)
**/
$lang->admin_info = 'Yönetici Bilgisi';
$lang->admin_index = 'Indeks Yönetici Sayfası';
$lang->control_panel = 'Dashboard';
$lang->start_module = 'Varsayılan Modül';
$lang->about_start_module = 'Sitenin varsayılan modülünü belirleyebilirsiniz.';
$lang->module_category_title = array(
'service' => 'Hizmetler',
'member' => 'Yöneticiler',
'content' => 'İçerikler',
'statistics' => 'İstatistikler',
'construction' => 'Yapı',
'utility' => 'Yardımcı Uygulamalar',
'interlock' => 'Gömülü',
'accessory' => 'Donatılar',
'migration' => 'Veri Geçişi',
'system' => 'Sistem Ayarları',
);
$lang->newest_news = "Son Gelişmeler";
$lang->env_setup = "Ayarlar";
$lang->default_url = "Varsayılan URL";
$lang->about_default_url = "Eğer sanal site özelliği kullanıyorsanız (örneğin, cafeXE), varsayılan URL girdisini yapınız (üst-sitenin adresi), SSO etkinleştirilecektir, böylece belgelere/modüllere sağlanan bağlantı uygun bir şekilde çalışacaktır. ";
$lang->env_information = "Ortam Bilgisi";
$lang->current_version = "Güncel Sürüm";
$lang->current_path = "Yükleme Yolu";
$lang->released_version = "Son Sürüm";
$lang->about_download_link = "Zeroboard XE'nin yeni sürümü yayımlandı!\nLütfen son sürümü için indirme linkine tıklayınız.";
$lang->item_module = "Modül Listesi";
$lang->item_addon = "Eklenti Listesi";
$lang->item_widget = "Widget Listesi";
$lang->item_layout = "Yerleşim Düzeni Listesi";
$lang->module_name = "Modül İsmi";
$lang->addon_name = "Eklenti İsmi";
$lang->version = "Sürüm";
$lang->author = "Geliştirici";
$lang->table_count = "Tablo Numarası";
$lang->installed_path = "Yükleme Yolu";
$lang->cmd_shortcut_management = "Menü Düzenle";
$lang->msg_is_not_administrator = 'Sadece Yöneticiler';
$lang->msg_manage_module_cannot_delete = 'Modüllerin, eklentilerin, yerleşim düzenlerinin, widgetların kısayolları silinemez.';
$lang->msg_default_act_is_null = 'Kısayol varsayılan yönetici eylemi ayarlanmadığından kayıt edilemiyor.';
$lang->welcome_to_xe = 'XE Yönetici Sayfasına Hoşgeldiniz';
$lang->about_admin_page = "Yönetici sayfası hâla geliştirilmektedir,\nClosebeta sürecinde birçok iyi öneriyi kabul ederek gerekli içerikleri ekleyeceğiz.";
$lang->about_lang_env = "Seçilen dili varsayılan dil olarak uygulamak için, lütfen Kaydet tuşuna basınız.";
$lang->xe_license = 'XE GPL ile uyumludur';
$lang->about_shortcut = 'Sık kullanılan modüller listesine kaydedilmiş modüllerin kısayollarını silebilirsiniz.';
$lang->yesterday = "Dün";
$lang->today = "Bugün";
$lang->cmd_lang_select = "Dil";
$lang->about_cmd_lang_select = "Sadece seçili dillerde hizmet verecektir.";
$lang->about_recompile_cache = "Gereksiz veya geçersiz önbellek dosyalarını silebilirsiniz.";
$lang->use_ssl = "SSL Kullan";
$lang->ssl_options = array(
'none' => "Hiçbir zaman",
'optional' => "İsteğe Bağlı",
'always' => "Her zaman"
);
$lang->about_use_ssl = "'İ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.";
$lang->server_ports = "Sunucu Bağlantı Noktası (port)";
$lang->about_server_ports = "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.";
$lang->use_db_session = 'Oturum Veritabanı Kullanımı';
$lang->about_db_session = '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.';
$lang->sftp = "SFTP Kullan";
$lang->ftp_get_list = "Listeyi Al";
$lang->ftp_remove_info = 'FTP Bilgisini Sil.';
$lang->msg_ftp_invalid_path = 'Belirtilen FTP Yolunu okuma işlemi başarız oldu.';
$lang->msg_self_restart_cache_engine = 'Lütfen önbellek geri plan yordamını veya Memcached\' ı yeniden başlatınız.';
$lang->mobile_view = 'Hareketli Görünümü';
$lang->about_mobile_view = 'Hareketli görünümü, mobil cihazlarla giriş yapılırken, mobil cihazlara uygun en iyi yerleşim düzenini göstermek içindir.';
$lang->autoinstall = 'KolayKurulum';
$lang->last_week = 'Geçen Hafta';
$lang->this_week = 'Bu Hafta';
?>

View file

@ -1,95 +0,0 @@
<?php
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░ * @File : common/lang/vi.lang.php ░░
░░ * @Author : NHN (developers@xpressengine.com) ░░
░░ * @Trans : DucDuy Dao (webmaster@xpressengine.vn) ░░
░░ * @Website: http://xpressengine.vn ░░
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
*/
$lang->admin_info = 'Thông tin Administrator';
$lang->admin_index = 'Trang chủ Admin';
$lang->control_panel = 'Bảng điều khiển';
$lang->start_module = 'Module trang chủ';
$lang->about_start_module = 'Bạn có thể chọn một Module và đặt là trang chủ của Website.';
$lang->module_category_title = array(
'service' => 'Thiết lập dịch vụ',
'member' => 'Thiết lập thành viên',
'content' => 'Thiết lập nội dung',
'statistics' => 'Thống kê',
'construction' => 'Xây dựng giao diện',
'utility' => 'Thiết lập tiện ích',
'interlock' => 'Tiện ích nâng cao',
'accessory' => 'Dịch vụ phụ',
'migration' => 'Chuyển đổi dữ liệu',
'system' => 'Thiết lập hệ thống',
);
$lang->newest_news = "Tin mới nhất";
$lang->env_setup = "Thiết lập ";
$lang->default_url = "URL mặc định";
$lang->about_default_url = "Nếu bạn sử dụng tính năng trang Web ảo (Ví dụ: PlanetXE, cafeXE), hãy chọn URL mặc định (địa chỉ trang chủ), khi khi kích hoạt SSO với thư mục hay Module làm việc.";
$lang->env_information = "Thông tin";
$lang->current_version = "Phiên bản";
$lang->current_path = "Thư mục cài đặt";
$lang->released_version = "Phiên bản mới nhất";
$lang->about_download_link = "Đã có phiên bản mới nhất của XE.\n Hãy bấm vào Link để Download.";
$lang->item_module = "Danh sách Module";
$lang->item_addon = "Danh sách Addon";
$lang->item_widget = "Danh sách Widget";
$lang->item_layout = "Danh sách Layout";
$lang->module_name = "Tên Module";
$lang->addon_name = "Tên Addon";
$lang->version = "Phiên bản";
$lang->author = "Thiết kế";
$lang->table_count = "Table";
$lang->installed_path = "Thư mục đã cài đặt";
$lang->cmd_shortcut_management = "Sửa Menu";
$lang->msg_is_not_administrator = 'Dành riêng Administrator';
$lang->msg_manage_module_cannot_delete = 'Không thể xóa những phím tắt của Module, Addon, Layout, Widget.';
$lang->msg_default_act_is_null = 'Phím tắt đã không được tạo, bởi vì bạn không được đặt quyền là quản lý toàn diện.';
$lang->welcome_to_xe = 'Chào mừng bạn đến với trang quản lý của XE!';
$lang->about_admin_page = "Trang Admin này vẫn đang được phát triển,\n Chúng tôi sẽ thêm vào những nội dung chủ yếu từ những ý kiến của người sử dụng.";
$lang->about_lang_env = "Để hiển thị ngôn ngữ đã chọn là mặc định. Hãy bấm [Lưu] phía dưới để lưu lại.";
$lang->xe_license = 'XE sử dụng giấy phép GPL';
$lang->about_shortcut = '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.';
$lang->yesterday = "Hôm qua";
$lang->today = "Hôm nay";
$lang->cmd_lang_select = "Ngôn ngữ";
$lang->about_cmd_lang_select = "Chỉ chọn được những ngôn ngữ có sẵn.";
$lang->about_recompile_cache = "Bạn có thể sắp xếp lại File Cache cho những việc đã làm hoặc bị lỗi.";
$lang->use_ssl = "Sử dụng SSL";
$lang->ssl_options = array(
'none' => "Không sử dụng",
'optional' => "Tùy chỉnh",
'always' => "Luôn luôn"
);
$lang->about_use_ssl = "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.";
$lang->server_ports = "Cổng kết nối";
$lang->about_server_ports = "Nếu Host của bạn sử dụng cổng khác cổng mặc định 80 cho HTTP, 443 cho HTTPS, bạn nên xác định và nhập chính xác cổng kết nối.";
$lang->use_db_session = 'Xác nhận Database';
$lang->about_db_session = 'PHP sẽ xác nhận với Database. Có thể cải thiện được tốc độ của Website.';
$lang->sftp = "Sử dụng SFTP";
$lang->ftp_get_list = "Nhận danh sách";
$lang->ftp_remove_info = 'Xóa thông tin FTP.';
$lang->msg_ftp_invalid_path = 'Không tìm thấy thông tin của thư mục bạn đã nhập trên FTP.';
$lang->msg_self_restart_cache_engine = 'Hãy thiết lập lại bộ nhớ Cache hoặc Deamon Cache.';
$lang->mobile_view = 'Xem bằng di động';
$lang->about_mobile_view = 'Nếu truy cập bằng thiết bị di động, nội dung sẽ được bố trí theo từng loại thiết bị.';
$lang->autoinstall = 'Cập nhật tự động';
$lang->last_week = 'Last week';
$lang->this_week = 'This week';
?>

View file

@ -1,92 +0,0 @@
<?php
/**
* @file zh-CN.lang.php
* @author NHN (developers@xpressengine.com)
* @brief 简体中文语言包
**/
$lang->admin_info = '管理员信息';
$lang->admin_index = '管理首页';
$lang->control_panel = '控制面板';
$lang->start_module = '首页模块';
$lang->about_start_module = '可指定用户访问网站时的默认首页模块。';
$lang->module_category_title = array(
'service' => '应用管理',
'member' => '用户管理',
'content' => '资源管理',
'statistics' => '统计管理',
'construction' => '界面管理',
'utility' => '扩展管理',
'interlock' => '辅助联动',
'accessory' => '附加功能',
'migration' => '数据导入',
'system' => '系统管理',
);
$lang->newest_news = "最新消息";
$lang->env_setup = "系统设置";
$lang->default_url = "XE通行证";
$lang->about_default_url = "请输入默认站点的XE安装地址(ex: http://域名/xe)。 <br /><strong>说明:</strong>简单的说,就是绑定帐号系统。只需要登录一次,就可以在用站点模块生成的多个子站点中随意漫游。";
$lang->env_information = "系统信息";
$lang->current_version = "安装版本";
$lang->current_path = "安装路径";
$lang->released_version = "最新版本";
$lang->about_download_link = "官方网站已发布最新版本XE。\n请点击[下载]链接下载最新版本。";
$lang->item_module = "模块目录";
$lang->item_addon = "插件目录";
$lang->item_widget = "控件目录";
$lang->item_layout = "布局目录";
$lang->module_name = "模块名称";
$lang->addon_name = "插件名称";
$lang->version = "版本";
$lang->author = "作者";
$lang->table_count = "表格数";
$lang->installed_path = "安装路径";
$lang->cmd_shortcut_management = "编辑菜单";
$lang->msg_is_not_administrator = '只允许管理员访问';
$lang->msg_manage_module_cannot_delete = '模块,插件,布局,控件模块的快捷菜单是不能删除的。';
$lang->msg_default_act_is_null = '没有指定默认管理员的动作,是不能添加到快捷菜单的。';
$lang->welcome_to_xe = 'XE 管理页面';
$lang->about_lang_env = "可以设置显示给首次访问者的同一语言环境。修改语言环境后请点击 [保存] 按钮进行保存。";
$lang->xe_license = 'XE遵循 GPL协议';
$lang->about_shortcut = '可以删除添加到常用模块中的快捷菜单。';
$lang->yesterday = "Yesterday";
$lang->today = "Today";
$lang->cmd_lang_select = "多国语言支持";
$lang->about_cmd_lang_select = "请选择要使用的语言。";
$lang->about_recompile_cache = "整理无用的或错误的缓冲文件。";
$lang->use_ssl = "SSL使用";
$lang->ssl_options = array(
'none' => "不使用",
'optional' => "选择性",
'always' => "使用"
);
$lang->about_use_ssl = "选择性使用选项应用于新用户注册/修改用户信息等已指定的action当中使用选项应用于所有服务。";
$lang->server_ports = "指定服务器端口";
$lang->about_server_ports = "使用除HTTP80, HTTPS443以外的端口时必须得指定该服务器端口号。";
$lang->use_db_session = 'DB储存认证会话';
$lang->about_db_session = '用DB储存认证时的PHP会话。<br/>服务器使用率较少的网站建议不要勾选此项(可提高网站访问速度)。<br/>只是无法统计在线会员。';
$lang->sftp = '使用sSFTP';
$lang->ftp_get_list = '载入列表';
$lang->ftp_remove_info = '删除FTP信息';
$lang->msg_ftp_invalid_path = '无法读取FTP路径。';
$lang->msg_self_restart_cache_engine = '请重新启动Memcached或CacheDaemon。';
$lang->mobile_view = '开启移动版';
$lang->about_mobile_view = '为智能手机访问网站,提供最佳视觉效果。';
$lang->autoinstall = '安装·更新';
$lang->last_week = 'Last week';
$lang->this_week = 'This week';
?>

View file

@ -1,92 +0,0 @@
<?php
/**
* @file modules/admin/lang/zh-TW.lang.php
* @author NHN (developers@xpressengine.com) 翻譯royallin
* @brief 管理(admin)模組正體中文語言 (包含基本內容)
**/
$lang->admin_info = '管理員資訊';
$lang->admin_index = '管理頁面';
$lang->control_panel = '控制介面';
$lang->start_module = '預設首頁';
$lang->about_start_module = '可將所選擇的模組作為預設首頁。';
$lang->module_category_title = array(
'service' => '服務設定',
'member' => '會員管理',
'content' => '內容管理',
'statistics' => '統計資料',
'construction' => '界面設定',
'utility' => '擴充功能',
'interlock' => '連動設定',
'accessory' => '附加功能管理',
'migration' => '資料轉換',
'system' => '系統管理',
);
$lang->newest_news = "最新消息";
$lang->env_setup = "系統設置";
$lang->default_url = "預設網址";
$lang->about_default_url = "XE虛擬網站必須要先輸入預設的網址確保虛擬網站的運作請輸入預設程式安裝路徑。<br />(例: http://網域名稱/安裝路徑)";
$lang->env_information = "系統資訊";
$lang->current_version = "安裝版本";
$lang->current_path = "安裝路徑";
$lang->released_version = "最新版本";
$lang->about_download_link = "官方網站已發佈最新版本。\n請按[下載]下載最新版本。";
$lang->item_module = "模組列表";
$lang->item_addon = "元件列表";
$lang->item_widget = "Widget列表";
$lang->item_layout = "版面列表";
$lang->module_name = "模組名稱";
$lang->addon_name = "元件名稱";
$lang->version = "版本";
$lang->author = "作者";
$lang->table_count = "表格數";
$lang->installed_path = "安裝路徑";
$lang->cmd_shortcut_management = "編輯選單";
$lang->msg_is_not_administrator = '只有管理員才可以檢視';
$lang->msg_manage_module_cannot_delete = '模組附加元件版面設計Widget的快速選單是無法刪除的。';
$lang->msg_default_act_is_null = '沒有指定預設管理員的動作,是無法新增到快速選單的。';
$lang->welcome_to_xe = 'XE管理頁面';
$lang->about_lang_env = "請選擇預設語言。選擇完畢後,請按[儲存]按鈕。";
$lang->xe_license = 'XE遵循 GPL 協議';
$lang->about_shortcut = '可以刪除新增到常用模組中的快速選單。';
$lang->yesterday = "昨天";
$lang->today = "今天";
$lang->cmd_lang_select = "選擇語言";
$lang->about_cmd_lang_select = "只提供所選擇的語言服務";
$lang->about_recompile_cache = "可有效的整理錯誤的暫存檔";
$lang->use_ssl = "SSL功能";
$lang->ssl_options = array(
'none' => "關閉",
'optional' => "手動",
'always' => "開啟"
);
$lang->about_use_ssl = "選擇手動時,在會員註冊或修改資料等動作時才會使用 SSL 功能。<br/>選擇開啟時,所有的服務都會使用 SSL 功能。";
$lang->server_ports = "主機埠口";
$lang->about_server_ports = "HTTP、HTTPS預設埠口分別是『80』、『443』<br />如果想使用其他的埠口的話,請自行設定。";
$lang->use_db_session = 'DB session認證';
$lang->about_db_session = '使用 PHP session 進行 DB 認證。<br/>關閉此功能對於負荷較低的網站可提高效率。<br/>使用此功能會無法統計線上人數。';
$lang->sftp = "使用 SFTP";
$lang->ftp_get_list = "取得列表";
$lang->ftp_remove_info = '移除 FTP 資料';
$lang->msg_ftp_invalid_path = '指定的 FTP 路徑讀取失敗。';
$lang->msg_self_restart_cache_engine = '請重新啟動 Memcached 快取程式。';
$lang->mobile_view = '手機瀏覽';
$lang->about_mobile_view = '使用手機瀏覽時將會顯示最適當的畫面。';
$lang->autoinstall = '自動安裝';
$lang->last_week = '上週';
$lang->this_week = '本週';
?>

View file

@ -0,0 +1,5 @@
<query id="deleteAllFavorite" action="delete">
<tables>
<table name="admin_favorite" />
</tables>
</query>

View file

@ -0,0 +1,8 @@
<query id="deleteFavorite" action="delete">
<tables>
<table name="admin_favorite" />
</tables>
<conditions>
<condition operation="equal" column="admin_favorite_srl" var="admin_favorite_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -0,0 +1,16 @@
<query id="getFavorite" action="select">
<tables>
<table name="admin_favorite" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="admin_favorite_srl" var="favorite_srl" />
<condition operation="equal" column="site_srl" var="site_srl" pipe="and" />
<condition operation="equal" column="module" var="module" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="admin_favorite_srl" order="desc" />
</navigation>
</query>

View file

@ -0,0 +1,12 @@
<query id="getFavoriteList" action="select">
<tables>
<table name="admin_favorite" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" />
<condition operation="equal" column="module" var="module" pipe="and" />
</conditions>
</query>

View file

@ -0,0 +1,12 @@
<query id="getSiteAllList" action="select">
<tables>
<table name="sites" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="in" column="site_srl" var="siteSrls" />
<condition operation="like" column="domain" var="domain" pipe="and" />
</conditions>
</query>

View file

@ -0,0 +1,11 @@
<query id="getSiteCountByDate" action="select">
<tables>
<table name="sites" />
</tables>
<columns>
<column name="count(*)" alias="count" />
</columns>
<conditions>
<condition operation="like_prefix" column="regdate" var="regDate" />
</conditions>
</query>

View file

@ -0,0 +1,11 @@
<query id="insertFavorite" action="insert">
<tables>
<table name="admin_favorite" />
</tables>
<columns>
<column name="admin_favorite_srl" var="adminFavoriteSrl" filter="number" notnull="notnull" />
<column name="site_srl" var="site_srl" filter="number" notnull="notnull" />
<column name="module" var="module" notnull="notnull" />
<column name="type" var="favoriteType" default="module" />
</columns>
</query>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<customrules>
</customrules>
<fields>
<field name="themeItem" required="true" />
<field name="layout" required="true" rule="number" />
</fields>
</ruleset>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<customrules />
<fields>
<field name="site_srl" required="true" rule="number" />
<field name="module_name" required="true" />
</fields>
</ruleset>

View file

@ -0,0 +1,6 @@
<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="site_srl" type="number" size="11" default="0" />
<column name="module" type="varchar" size="80" />
<column name="type" type="varchar" size="30" />
</table>

View file

@ -1,6 +0,0 @@
</div>
<hr />
<div class="footer">
<address><a href="http://www.xpressengine.com" onclick="window.open(this.href);return false;">Powered by <strong>X</strong>press <strong>E</strong>ngine</a></address>
</div>
</div>

View file

@ -1,60 +0,0 @@
<!--%import("css/layout.css")-->
<!--%import("js/admin.js")-->
<div id="xeAdmin" class="<!--@if($package_selected || strstr($act,'Autoinstall'))-->c<!--@elseif(!$act || ($act == 'dispAdminIndex' || $act == 'dispAdminConfig'))-->ece<!--@else-->ec<!--@end-->">
<div class="header">
<h1 class="xeAdmin"><a href="{getUrl('','module','admin')}">XpressEngine</a></h1>
<ul class="gnb">
<li><a href="{getUrl('module','admin','act','procAdminLogout')}">Sign out</a></li>
<!--@if($logged_info->is_admin=='Y')--><li><a href="{getUrl('','module','admin','act','dispAdminConfig')}">Settings</a></li><!--@end-->
<li><a href="#" onclick="toggleAdminLang();return false;">Language</a>
<ul id="adminLang">
<!--@foreach($lang_supported as $key => $val)-->
<li <!--@if($key == $lang_type)-->class="open"<!--@end-->><a href="#" onclick="doChangeLangType('{$key}'); return false;">{$val}</a></li>
<!--@end-->
</ul>
</li>
</ul>
<ul class="lnb">
<li class="core <!--@if(!$package_selected && !strstr($act,'Autoinstall'))-->selected<!--@end-->"><a href="{getUrl('','module','admin')}">{$lang->control_panel}</a></li>
<li class="core <!--@if(strstr($act, 'Autoinstall'))-->selected<!--@end-->"><a href="{getUrl('','module','admin','act','dispAutoinstallAdminIndex')}">{$lang->autoinstall}</a></li>
<!--@foreach($package_modules as $key => $val)-->
<li class="{$val->position} <!--@if($val->selected)-->selected<!--@end-->"><a href="{getUrl('','module','admin','act',$val->index_act)}" title="{trim($val->description)}">{$val->title}</a></li>
<!--@end-->
</ul>
</div>
<hr />
<div class="body">
<div class="extension e1">
<div class="section">
<div id="search_nav">
<input type="text" size="12" />
<button type="button"></button>
</div>
<ul class="navigation">
{@$_c = explode(',',$_COOKIE['XEAM'])}
<!--@foreach($lang->module_category_title as $key => $val)-->
<!--@if($key != 'migration' && $key != 'interlock' && $key != 'statistics')-->
<!--@if(in_array($key,$_c)&&$key!=$selected_module_category)-->
{@$_cs = true;}
<!--@else-->
{@$_cs = false;}
<!--@end-->
<li id="module_{$key}" class="parent <!--@if($_cs)-->close<!--@end--> <!--@if($key==$selected_module_category)-->active<!--@end-->"><a href="#" onclick="toggleModuleMenu('{$key}'); return false;" class="parent">{$val}</a>
<ul>
<!--@foreach($installed_modules as $k => $v)-->
<!--@if($v->category == $key)-->
<li <!--@if($v->selected)-->class="active"<!--@end-->><a href="{getUrl('','module','admin','act',$v->index_act)}" title="{$v->description}">{$v->title}</a></li>
<!--@end-->
<!--@end-->
</ul>
</li>
<!--@end-->
<!--@end-->
</ul>
</div>
</div>
<hr />

View file

@ -0,0 +1,20 @@
</div>
<div class="footer">
<p class="power">Powered by <strong><a href="{_XE_LOCATION_SITE_}">XE</a></strong> (ver. {__ZBXE_VERSION__}).</p>
<p class="cache">
<button type="button" class="text" onclick="doResetAdminMenu();">{$lang->cmd_admin_menu_reset}</button>
<button type="button" class="text" onclick="doRecompileCacheFile();">{$lang->cmd_remake_cache}</button>
<button type="button" class="text" onclick="doClearSession();">{$lang->cmd_clear_session}</button>
<a href="http://code.google.com/p/xe-core/issues/entry">{$lang->bug_report}</a>
</p>
</div>
</div>
<script type="text/javascript">
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,45 @@
{@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 jx">
<ul>
<li loop="$gnbUrlList=>$key,$value" class="activeOn"|cond="$parentSrl==$key"><a href="{$value['href']}">{$value['text']}</a>
<ul cond="count($value['list'])">
<li loop="$value['list']=>$key2,$value2"><a href="{$value2['href']}">{$value2['text']}</a></li>
</ul>
</li>
</ul>
</div>
<div class="bmk">
<a href="#bmk" class="tgAnchor" data-effect="fade" data-duration="200">{$lang->favorite}</a>
<ul id="bmk" class="tgContent">
<li loop="$favorite_list => $favorite">
<a href="{getUrl('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}">x</button>
</form>
</li>
<li cond="!is_array($favorite_list) || count($favorite_list) < 1">{$lang->no_data}</li>
</ul>
</div>
</div>
<div class="body">

View file

@ -0,0 +1,10 @@
<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="{html_entity_decode($value['href'])}">{$value['text']}</a></li>
<!--@end-->
<!--@end-->
</ul>
</div>

View file

@ -0,0 +1,85 @@
<load target="./js/menu_setup.js" usecdn="true" />
<div cond="$XE_VALIDATOR_MESSAGE" 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>
</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">
<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" />
<span>{$value['text']}</span> <span class="side"><a href="#editMenu" class="modalAnchor _add">{$lang->add}</a></span>
<ul cond="is_array($value['list']) && count($value['list'])>0">
<li loop="$value['list']=>$key2,$value2">
<input type="hidden" name="parent_key[]" value="{$value2['parent_srl']}" class="_parent_key" />
<input type="hidden" name="item_key[]" value="{$value2['node_srl']}" class="_item_key" />
<span>{$value2['text']}</span><span class="side"><a href="#delete" class="_child_delete">{$lang->delete}</a></span>
</li>
</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>
</fieldset>
</form>
<div class="modal" id="editMenu">
<div class="fg">
<form id="editForm" action="./" class="form">
<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="name">{$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>
</form>
</div>
</div>

View file

@ -1,224 +0,0 @@
<!--#include("_header.html")-->
<!--%import("./filter/update_env_config.xml")-->
<!--%import("./filter/update_lang_select.xml")-->
<!--%import("./filter/install_ftp_info.xml")-->
<!--%import("./filter/install_ftp_path.xml")-->
<!--%import("../../install/lang")-->
<!--%import("../../install/tpl/js/install_admin.js",optimized=false)-->
<!--%import("./js/config.js")-->
<script type="text/javascript">
function insertSelectedModule(id, module_srl, mid, browser_title) {
var obj= xGetElementById('_'+id);
var sObj = xGetElementById(id);
sObj.value = module_srl;
obj.value = decodeURIComponent(browser_title.replace(/\+/g," "))+' ('+mid+')';
}
var xe_root = "{_XE_PATH_}";
</script>
<div class="content">
<h4 class="xeAdmin">{$lang->cmd_setup}</h4>
<form action="./" method="get" onsubmit="return procFilter(this, update_env_config);">
<table cellspacing="0" class="rowTable">
<tr>
<th><div>{$lang->use_rewrite}</div></th>
<td>
<input type="checkbox" name="use_rewrite" value="Y" <!--@if($use_rewrite=='Y')-->checked="checked"<!--@end--> />
<p>{$lang->about_rewrite}</p>
</td>
</tr>
<tr>
<th><div>{$lang->use_sso}</div></th>
<td>
<input type="checkbox" name="use_sso" value="Y" <!--@if($use_sso=='Y')-->checked="checked"<!--@end--> />
<p>{$lang->about_sso}</p>
</td>
</tr>
<tr>
<th><div>{$lang->default_url}</div></th>
<td>
<input type="text" name="default_url" value="{$default_url}" class="inputTypeText w300"/>
<p>{$lang->about_default_url}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->start_module}</div></th>
<td>
<input type="hidden" name="index_module_srl" id="target_module" value="{$start_module->index_module_srl}" />
<input type="text" name="_target_module" id="_target_module" class="inputTypeText w300" value="{$start_module->mid} ({htmlspecialchars($start_module->browser_title)})" readonly="readonly" />
<a href="{getUrl('','module','module','act','dispModuleSelectList','id','target_module','type','single')}" onclick="popopen(this.href,'ModuleSelect');return false;" class="button green"><span>{$lang->cmd_select}</span></a>
</td>
</tr>
<tr>
<th><div>Language</div></th>
<td>
<select name="change_lang_type">
<!--@foreach($lang_supported as $key => $val)-->
<option value="{$key}" <!--@if($key==$selected_lang)-->selected="selected"<!--@end-->>{$val}</option>
<!--@endforeach-->
</select>
<p>{$lang->about_lang_env}</p>
</td>
</tr>
<tr>
<th><div>{$lang->time_zone}</div></th>
<td>
<select name="time_zone" class="fullWidth">
<!--@foreach($time_zone_list as $key => $val)-->
<option value="{$key}" <!--@if($time_zone==$key)-->selected="selected"<!--@end-->>{$val}</option>
<!--@endforeach-->
</select>
<p>{$lang->about_time_zone}</p>
</td>
</tr>
<tr>
<th><div>{$lang->qmail_compatibility}</div></th>
<td>
<input type="checkbox" name="qmail_compatibility" value="Y" <!--@if($qmail_compatibility=='Y')-->checked="checked"<!--@end--> />
<p>{$lang->about_qmail_compatibility}</p>
</td>
</tr>
<tr>
<th><div>{$lang->use_db_session}</div></th>
<td>
<input type="checkbox" name="use_db_session" value="Y" <!--@if($use_db_session=='Y')-->checked="checked"<!--@end--> />
<p>{$lang->about_db_session}</p>
</td>
</tr>
<tr>
<th><div>{$lang->use_ssl}</div></th>
<td>
<select name="use_ssl">
<!--@foreach($lang->ssl_options as $key => $val)-->
<option value="{$key}" <!--@if($key == $use_ssl)-->selected<!--@end--> >{$val}</option>
<!--@endforeach-->
</select>
<p>{$lang->about_use_ssl}</p>
</td>
</tr>
<tr>
<th><div>{$lang->server_ports}</div></th>
<td>
HTTP : <input type="text" name="http_port" class="inputTypeText" size="5" value="{$http_port}">,
HTTPS: <input type="text" name="https_port" class="inputTypeText" size="5" value="{$https_port}">
<p>{$lang->about_server_ports}</p>
</td>
</tr>
<tr>
<th><div>{$lang->mobile_view}</div></th>
<td>
<input type="checkbox" name="use_mobile_view" value="Y" <!--@if($use_mobile_view=='Y')-->checked="checked"<!--@end--> />
<p>{$lang->about_mobile_view}</p>
</td>
</tr>
<tr>
<th colspan="2" class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_save}" /></span>
</th>
</tr>
</table>
</form>
<h4 class="xeAdmin" id="ftpSetup">{$lang->ftp_form_title}</h4>
<p class="summary">{$lang->about_ftp_info}</p>
<form action="./" method="post" onsubmit="return procFilter(this, install_ftp_info);" id="ftp_form">
<table cellspacing="0" class="rowTable">
<tr>
<th scope="col"><div><label for="textfield21">{$lang->user_id}</label></div></th>
<td><input type="text" id="textfield21" name="ftp_user" value="{$ftp_info->ftp_user}" class="inputTypeText" />
</tr>
<tr>
<th scope="col"><div><label for="textfield22">{$lang->password} ({$lang->about_ftp_password})</label></div></th>
<td><input id="textfield22" type="password" name="ftp_password" value="" class="inputTypeText" /></td>
</tr>
<tr>
<th scope="col"><div><label for="textfield23">{$lang->ftp_host} (default: 127.0.0.1)</label></div></th>
<td><input id="textfield23" type="text" name="ftp_host" value="{$ftp_info->ftp_host}" class="inputTypeText" /></td>
</tr>
<tr>
<th scope="col"><div><label for="textfield24">{$lang->ftp_port} (default: 21) </label></div></th>
<td><input id="textfield24" type="text" name="ftp_port" value="{$ftp_info->ftp_port}" class="inputTypeText" /></td>
</tr>
<tr>
<th scope="col"><div><label for="checkboxpasv">FTP Passive mode</label></div></th>
<td><input type="checkbox" id="checkboxpasv" name="ftp_pasv" value="Y" <!--@if($ftp_info->ftp_pasv!="N")-->checked="checked"<!--@end--> /></td>
</tr>
<!--@if($sftp_support)-->
<tr>
<th scope="col"><div><label for="checkbox25">{$lang->sftp}</label></div></th>
<td><input type="checkbox" id="checkbox25" name="sftp" value="Y" <!--@if($ftp_info->sftp=="Y")-->checked="checked"<!--@end--> /></td>
</tr>
<!--@end-->
<tr>
<th scope="col" rowspan="2"><div>{$lang->msg_ftp_installed_ftp_realpath}<br /><br/>{$lang->msg_ftp_installed_realpath}:<br/> {_XE_PATH_}</div></th>
<td>
<input type="text" name="ftp_root_path" value="{$ftp_info->ftp_root_path}" class="inputTypeText w400" />
</td>
</tr>
<tr id="ftplist">
<td>
<div>
<span class="button blue strong"><input type="button" onclick="getFTPList(); return false;" value="{$lang->ftp_get_list}"></span>
</div>
</td>
</tr>
<tr>
<th colspan="2" class="button">
<span class="button blue strong"><input type="button" onclick="removeFTPInfo(); return false;" value="{$lang->ftp_remove_info}"></span>
<span class="button black strong"><input type="submit" value="{$lang->cmd_registration}" /></span>
</th>
</tr>
</table>
</form>
</div>
<hr />
<div class="extension e2">
<div class="section">
<h4 class="xeAdmin">{$lang->cmd_lang_select}</h4>
<p class="summary">{$lang->about_cmd_lang_select}</p>
<form action="./" method="get" onsubmit="return procFilter(this, update_lang_select);">
<table cellspacing="0" class="rowTable">
<!--@foreach($langs as $key => $val)-->
<tr>
<td>
<!--@if($key==$selected_lang)-->
<input type="hidden" name="selected_lang[]" value="{$key}" />
<input type="checkbox" checked="checked" disabled="disabled" />
<label>{$val}</label>
<!--@else-->
<input id="lang_{$key}" type="checkbox" name="selected_lang[]" value="{$key}" <!--@if(isset($lang_selected[$key]))-->checked="checked"<!--@end--> />
<label for="lang_{$key}">{$val}</label>
<!--@end-->
</td>
</tr>
<!--@endforeach-->
<tr>
<th class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_save}" /></span>
</th>
</tr>
</table>
</form>
<h4 class="xeAdmin">{$lang->cmd_remake_cache}</h4>
<p class="summary">{$lang->about_recompile_cache}</p>
<table cellspacing="0" class="colTable">
<tr>
<th class="button">
<span class="button black strong"><input type="button" value="{$lang->cmd_remake_cache}" onclick="doRecompileCacheFile(); return false;"/></span>
</th>
</tr>
</table>
</div>
</div>
<!--#include("_footer.html")-->

View file

@ -0,0 +1,62 @@
<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>
<form ruleset="installFtpInfo" 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="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 for="ftp_passive">{$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 for="sftp">{$lang->about_use_sftp_support}</label></p>
<p class="a">
<input type="radio" name="sftp" id="sftp_y" value="Y" <!--@if($ftp_info->sftp == 'Y')-->checked="checked" <!--@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_path">{$lang->msg_ftp_installed_ftp_realpath}</label></p>
<p class="a">
<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">
</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>
</div>
</form>

View file

@ -0,0 +1,225 @@
<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" />
<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">
<p class="q">{$lang->about_start_module}</p>
<p 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="#modalWindow" class="modalAnchor" onClick="viewSiteSearch()">{$lang->cmd_find}</a> </p>
<p class="site_keyword_search" style="display:none">
<input type="text" name="site_keyword" /> <a href="#suggestion3" class="tgAnchor findsite">{$lang->cmd_confirm}</a>
<div id="suggestion3" class="tgContent suggestion" >
<ul></ul>
</div>
</p>
<p>
<select class="moduleList" style="width:290px"></select>
</p>
<p>
<select class="moduleIdList" style="width:290px"></select>
<a href="#" id="sitefind_addBtn" onclick="setStartModule()" style="display:none;">{$lang->cmd_select}</a>
</p>
</p>
</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-->
</p>
</li>
<li>
<p class="q"><label for="">{$lang->about_default_lang}</label></p>
<p class="a">
<select name="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" class="fullWidth">
<!--@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="4" 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">
<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">{$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="4" 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 for="use_ssl">{$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">{$lang->server_ports}</p>
<p class="a">
<label for="">HTTP:</label> <input type="text" name="http_port" id="http_port" size="5" value="{$http_port}" style="width:40px" />
&nbsp;&nbsp;
<label for="">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 for="">{$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 for="use_sso">{$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 for="">{$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 for="">{$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>
</div>
</form>

View file

@ -1,227 +1,681 @@
@charset "utf-8";
/* NHN (developers@xpressengine.com) */
#xeAdmin .open{ display:block !important;}
#xeAdmin h1.xeAdmin { float:left; white-space:nowrap; margin:0;padding:0;}
#xeAdmin caption{ text-align:left;}
#xeAdmin button{ cursor:pointer;}
#xeAdmin hr{ display:none;}
#xeAdmin fieldset{ border:0;}
#xeAdmin fieldset legend{ font-size:0; line-height:0; position:absolute; visibility:hidden;}
#xeAdmin .section{ margin-bottom:20px;}
#xeAdmin .buttonArea{ text-align:center; padding:15px 0;}
#xeAdmin button.text{ background:none; border:0; color:#0000ee;}
#xeAdmin img.graphHr{ height:5px; vertical-align:middle;}
#xeAdmin .ac{ text-align:center;}
#xeAdmin .al{ text-align:left;}
#xeAdmin .ar{ text-align:right;}
.crossTable{ width:100%; border:0; margin:0 0 20px 0; padding:0;}
.crossTable th div { white-space:nowrap; }
.crossTable th,
.crossTable td{ border:0; padding:5px 10px; vertical-align:top;}
.crossTable th{ background:#f4f4f4;}
.crossTable thead th{ border-top:2px solid #cfcfcf; border-bottom:1px solid #e5e5e5; background-image:url(../img/lineVrText.gif); background-repeat:no-repeat; background-position:left center;}
.crossTable thead th:first-child{ background-image:none;}
.crossTable tbody th{ border-bottom:1px solid #e5e5e5; text-align:left;}
.crossTable td{ border-bottom:1px solid #f0f0f0;}
.colTable{ width:100%; border:0; margin:0 0 20px 0; padding:0;}
.colTable th div { white-space:nowrap; }
.colTable tr.bg0{ background:#fff;}
.colTable tr.bg1{ background:#f8f8f8;}
.colTable th,
.colTable td{ border:0; padding:5px 10px; vertical-align:top;}
.colTable th{ border-top:2px solid #cfcfcf; border-bottom:1px solid #e5e5e5; background:#f4f4f4; background-image:url(../img/lineVrText.gif); background-repeat:no-repeat; background-position:left center;}
.colTable th:first-child{ background-image:none;}
.colTable td{ border-bottom:1px solid #f0f0f0;}
.rowTable{ width:100%; border:0; border-top:2px solid #cfcfcf; margin:0 0 20px 0; padding:0;}
.rowTable th div { white-space:nowrap; }
.rowTable tr.bg0{ background:#fff;}
.rowTable tr.bg1{ background:#f8f8f8;}
.rowTable th,
.rowTable td{ border:0; padding:5px 10px; text-align:left; vertical-align:top;}
.rowTable th{ background:#f4f4f4;}
.rowTable tbody th{ border-bottom:1px solid #e5e5e5;}
.rowTable td{ border-bottom:1px solid #f0f0f0;}
.rowTable th.button, .colTable th.button, .crossTable th.button { text-align:right; }
.rowTable td.alert, .colTable td.alert, .crossTable td.alert { color:red !important; }
.rowTable td.alert a, .colTable td.alert a, .crossTable td.alert a { text-decoration:none; color:red !important; }
.colTable td.wide, .rowTable td.wide, .crossTable td.wide { width:100%;}
.e1 .navigation { list-style:none; position:relative; *zoom:1; margin:0; padding:0; border-bottom:1px solid #c2c2c2;}
.e1 .navigation ul { list-style:none; position:relative; *zoom:1; margin:0; padding:0;}
.e1 .navigation li { list-style:none; position:relative; *zoom:1; margin:0; padding:0; background-color:#f7f7f7; }
.e1 .navigation li a.parent { border-top:1px solid #c2c2c2; display:block; padding:10px 20px 10px 35px ;background-image:url(../img/iconNavigation.gif); background-repeat:no-repeat; background-position:160px -35px; font-weight:bold; color:#888; text-decoration:none;}
.e1 .navigation li.close a.parent { background-position:160px 13px; border-bottom:none; }
#module_service { background-image:url(../img/mIcon.gif); background-repeat:no-repeat; background-position:10px 10px;}
#module_member { background-image:url(../img/mIcon.gif); background-repeat:no-repeat; background-position:10px -40px;}
#module_content { background-image:url(../img/mIcon.gif); background-repeat:no-repeat; background-position:10px -90px;}
#module_construction { background-image:url(../img/mIcon.gif); background-repeat:no-repeat; background-position:10px -140px;}
#module_utility { background-image:url(../img/mIcon.gif); background-repeat:no-repeat; background-position:10px -190px;}
#module_accessory { background-image:url(../img/mIcon.gif); background-repeat:no-repeat; background-position:10px -240px;}
#module_system { background-image:url(../img/mIcon.gif); background-repeat:no-repeat; background-position:10px -290px;}
.e1 .navigation li ul{ border-top:1px solid #d2d2d2; margin:0; padding:5px 0; background-color:#fff;}
.e1 .navigation li ul li { margin:5px 0; padding:0 10px 0 35px; background-color:#fff;}
.e1 .navigation li.close ul{ display:none;}
.e1 .navigation li ul li a { text-decoration:none; }
.e1 .navigation li ul li a:hover { font-weight:bold; text-decoration:none; letter-spacing:-1px;}
.e1 .navigation li ul li.active a { color:#ea3f22; letter-spacing:-1px;}
.e2 .section{ margin-left:20px;}
.e2 .section h4.xeAdmin { margin:10px 0 0 0; padding:0 0 0 25px; }
.e2 .section .date{ background:url(../img/lineVrText.gif) no-repeat left center; font-size:9px; padding-left:5px;}
.e2 .section .contentBox { padding:10px 0; margin:0 0 20px 0; border-bottom:1px solid #ccc;}
.e2 table tbody td{ text-align:left; word-break:break-all; -ms-word-break:break-all; }
#xeAdmin .localNavigation { position:relative; border-bottom:1px solid #ccc; *zoom:1; margin:0 0 40px 0; padding:0; font-size:12px;}
#xeAdmin .localNavigation:after {content:""; display:block; clear:both;}
#xeAdmin .localNavigation ul{ display:none; position:absolute; top:40px; left:0; list-style:none; margin:0; padding:0; overflow:hidden;}
#xeAdmin .localNavigation li{ list-style:none; float:left; margin:0 -1px 0 0; padding:0;background:#fff;}
#xeAdmin .localNavigation li a{ float:left; padding:7px 15px 0 15px; height:18px; border:1px solid #ddd; border-bottom:none; background:url(../img/bgTab.gif) repeat-x; text-decoration:none !important; color:#666}
#xeAdmin .localNavigation li.on { margin-bottom:-1px;}
#xeAdmin .localNavigation li.on ul{ display:block;}
#xeAdmin .localNavigation li.on a{ height:19px; background:none; font-weight:bold;}
#xeAdmin .localNavigation li li{ position:relative; left:-1px; display:inline; float:none; margin:0; padding:0 6px 0 10px; border-left:1px solid #ddd;}
#xeAdmin .localNavigation li li a{ font-weight:normal !important; float:none; padding:0; height:auto; border:0; background:none;}
#xeAdmin .localNavigation li li.on a{ font-weight:bold !important;}
#xeAdmin h3.xeAdmin {border-bottom:2px solid #ccc; padding:5px 0 5px 25px; margin:0 0 10px 0; background:url(../img/iconH2.gif) no-repeat left center;}
#xeAdmin h4.xeAdmin {padding:5px 0 5px 20px; background:url(../img/iconH3.gif) no-repeat left center;}
#xeAdmin h4.xeAdmin span.vr { font-size:11px; color:#AAA; }
#xeAdmin h4.xeAdmin a.view { font-size:11px; font-family:vertical; color:#777e86; }
#xeAdmin p.summary, div.infoText { margin:0 0 15px 0; line-height:1.6;}
.layer { display:none; position:absolute; border:2px solid #777; margin:0; font-size:12px; background:#fff;}
.layer * { margin:0; padding:0; font-size:12px; }
.layer h4.xeAdmin { font-size:14px !important; font-family:Dotum; background:#f4f4f4 !important; padding:8px 30px 8px 15px !important; letter-spacing:-1px !important; }
.layer .xButton { position:absolute; top:9px; right:9px; width:15px; height:14px; background-color:transparent; background:url(../img/buttonClose.gif) no-repeat; border:0; cursor:pointer; overflow:hidden; }
.layer .xButton span { position:relative; z-index:-1; visibility:hidden; }
.layer .layerBody{ margin:15px;}
.boxModelControler select { margin-bottom:3px; }
.boxModelControler .inputText { border:1px solid #ccc; padding:2px 3px; margin-bottom:3px; vertical-align:top; *margin-top:-1px; }
.boxModelControler .inputCheck { width:13px; height:13px; vertical-align:middle; }
.boxModelControler .layerBody { margin:15px; }
.boxModelControler .preview{ overflow:hidden; margin-bottom:20px;}
.boxModelControler .dragAble { position:relative; padding:15px 0 0 15px; background:url(../img/bgRuler.gif) no-repeat; *zoom:1; cursor:move;}
.boxModelControler .dragAble .prevGrid { position:relative; margin:-1px; background:url(../img/bgGrid.gif) 0 0; border:1px solid #000; *zoom:1;}
.boxModelControler .dragAble .prevBox { position:relative; }
.boxModelControler .dragAble .prevBox .prevContent { position:relative; }
.boxModelControler .boxModelTable { width:100%; border:0; border-bottom:1px solid #ddd; margin:0; padding:0;}
.boxModelControler .boxModelTable th,
.boxModelControler .boxModelTable td { border:0; border-top:1px solid #ddd; vertical-align:top; padding:5px 10px; text-align:left; }
.boxModelControler .boxModelTable th { height:50px; *height:40px; background:#f1f1f1; padding-left:70px; background-repeat:no-repeat; background-position:10px 10px; }
.boxModelControler .boxModelTable th.width { background-image:url(../img/exWidth.gif); }
.boxModelControler .boxModelTable th.margin { background-image:url(../img/exMargin.gif); }
.boxModelControler .boxModelTable th.padding { background-image:url(../img/exPadding.gif); }
.boxModelControler .boxModelTable th.border { background-image:url(../img/exBorder.gif); }
.boxModelControler .boxModelTable th.bgColor { background-image:url(../img/exBgColor.gif); }
.boxModelControler .boxModelTable th.bgImage { background-image:url(../img/exBgImage.gif); }
.boxModelControler .boxModelTable th sup { font-weight:normal; font-size:11px; font-family:Dotum; color:#999; }
.boxModelControler .boxModelTable td dl.iList dt { display:inline; position:relative; top:3px; }
.boxModelControler .boxModelTable td dl.iList dd { display:inline; }
.boxModelControler .boxModelTable td dl.dList dt { float:left; clear:left; margin-right:5px; padding-top:3px; }
.boxModelControler .boxModelTable td dl.dList dd { clear:right; }
.boxModelControler .colorPicker { position:relative; display:inline; vertical-align:top; }
.boxModelControler .colorPicker .picker { position:relative; top:2px; left:-22px; width:16px; height:16px; border:1px solid #ccc; background-color:transparent; background-position:right top; cursor:pointer; vertical-align:top; }
.boxModelControler .colorPicker .picker span { font-size:0; line-height:0; z-index:-1; visibility:hidden; }
.boxModelControler .colorPicker .palette { position:absolute; top:0px; left:0; display:none; width:272px; height:64px; list-style:none; margin:0; padding:1px 0 0 1px; border:1px solid #ccc; background:#fff; overflow:hidden; }
.boxModelControler .colorPicker .palette.open { display:block; }
.boxModelControler .colorPicker .palette li { float:left; margin:0 1px 1px 0; font-size:0; line-height:0; }
.boxModelControler .colorPicker .palette li button { width:15px; height:15px; border:0; cursor:pointer; }
.boxModelControler .colorPicker .palette li button span { position:relative; z-index:-1; font-size:0; line-height:0; visibility:hidden; }
.boxModelControler .colorPicker .palette li button.transparent { background:url(../img/bgNone.gif) no-repeat right top; border:1px solid #ddd; }
.boxModelControler .borderDetach { display:none; }
.boxModelControler .borderDetach.open { display:block; }
.boxModelControler .buttonArea{ padding:15px 0 0 0; text-align:center;}
#popup_content { border:2px solid #777; margin:0; font-size:12px; background:#fff; position:relative;}
#popup_content .xButton { position:absolute; top:9px; right:18px; width:15px; height:14px; padding:0; background-color:transparent; background:url(../img/buttonClose.gif) no-repeat; border:0; cursor:pointer; overflow:hidden; }
#popup_content .xButton span { position:relative; z-index:-1; visibility:hidden; }
#popup_content * { font-size:12px; }
#popHeadder h4.xeAdmin, #popHeadder h1.xeAdmin, #popHeadder h3.xeAdmin { font-size:14px !important; font-family:Dotum !important; background:#f4f4f4 !important; padding:8px 30px 8px 15px !important; letter-spacing:-1px !important; border:none !important; margin:0 !important;}
#popHeader h4.xeAdmin, #popHeader h1.xeAdmin, #popHeader h3.xeAdmin { font-size:14px !important; font-family:Dotum !important; background:#f4f4f4 !important; padding:8px 30px 8px 15px !important; letter-spacing:-1px !important; border:none !important; margin:0 !important;}
#popHeader, #popBody, #popFooter { position:relative; *zoom:1; overflow:hidden;}
#popBody, #popHistoryBody { margin:15px !important;}
#popFooter { padding:10px 0 0 0; height:28px; text-align:center; background:#f4f4f4;}
#popHeader { }
#popHeader.wide { width:600px;}
.adminTable { width:100%; border:1px solid #EEE; border-bottom:none; border-right:none; margin-bottom:15px; }
.adminTable caption { background:url("../img/n_caption_head.gif") no-repeat left top; padding:8px 0 5px 30px; text-align:left; font-weight:bold !important; color:#FFFFFF !important; background-color:#888 !important; border-bottom:1px solid #FFFFFF; font-size:12px !important;}
.adminTable thead tr th div { text-align:center;}
.adminTable thead tr th { background-color:#AAA; color:#FFFFFF !important; }
.adminTable tr th { background-color:#FFFFFF; padding:6px; font-weight:bold; text-align:left; color:#666; border-right:1px solid #EEE; border-bottom:1px solid #EEE; }
.adminTable tr.row2 th { background-color:#F3F3F3; }
.adminTable tr th { width:10px; }
.adminTable tr th div { white-space:nowrap; margin:0 5px; }
.adminTable tr th select { height:20px; }
.adminTable tr th.wide { width:100%; }
.adminTable tr th.half_wide { width:50%; }
.adminTable tr th.quarter_wide { width:25%; }
.adminTable tr td.wide { width:100%; }
.adminTable tr td { background-color:#FFFFFF;white-space:normal; font-weight:normal; text-align:left; color:#222222; border-bottom:1px solid #EEE; border-right:1px solid #EEE; padding:4px 6px 4px 6px;}
.adminTable tr.row2 td { background-color:#F3F3F3; }
.adminTable tr a { color:#222222; text-decoration:none; }
.adminTable tr a:hover { color:#3D83B8; }
.adminTable tr td.nowrap { white-space:nowrap !important; }
.adminTable tr td.alert, .adminTable tr td.alert a { color:red; }
.adminTable tr td.number { font-size:8pt; font-family:tahoma; color:#27536C; }
.adminTable tr td.date,
.adminTable tr td span.date { font-size:8pt; font-family:tahoma; color:#666666;}
.adminTable tr td.center { text-align:center; }
.adminTable tr td.right { text-align:right; }
.adminTable tr td.paper { background:transparent url("../img/n_paper_bullet.gif") no-repeat 6px 8px; padding-left:20px; }
.adminTable tr.row2 td.paper { background:#F3F3F3 url("../img/n_paper_bullet.gif") no-repeat 6px 8px; padding-left:20px; }
.adminTable tr td.circle { background:#FFFFFF url("../img/n_circle_bullet.gif") no-repeat 6px 8px; padding-left:20px; }
.adminTable tr.row2 td.circle { background:#F3F3F3 url("../img/n_circle_bullet.gif") no-repeat 6px 8px; padding-left:20px; }
.adminTable tr td strong.alert { color:red; }
.adminTable tr td p { padding:0; margin:5px 0 0 5px; color:#777777; }
.adminTable tr td p a { color:#9F875F; font-weight:bold; text-decoration:underline; }
.adminTable tr td.modify a,
.adminTable tr td.delete a,
.adminTable tr td.copy a,
.adminTable tr td.setup a,
.adminTable tr td.activated a,
.adminTable tr td.deactivated a,
.adminTable tr td.moveupdown a,
.adminTable tr td.selectAll a,
.adminTable tr td.deSelectAll a,
.adminTable tr td.view a { margin:0 auto; }
.adminTable tr td.modify a { width:14px; height:14px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_icon_modify.gif") no-repeat left top; }
.adminTable tr td.delete a { width:14px; height:14px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_icon_delete.gif") no-repeat left top; }
.adminTable tr td.copy a { width:16px; height:16px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_icon_copy.gif") no-repeat left top; }
.adminTable tr td.view a { width:14px; height:14px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_icon_view.gif") no-repeat left top; }
.adminTable tr td.setup a { width:16px; height:16px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_setup.gif") no-repeat left top; }
.adminTable tr td.activated a { width:16px; height:16px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_light_on.gif") no-repeat left top; }
.adminTable tr td.deactivated a { width:16px; height:16px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_light_off.gif") no-repeat left top; }
.adminTable tr td.selectAll a { width:16px; height:16px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_icon_select_all.gif") no-repeat left top; }
.adminTable tr td.deSelectAll a { width:16px; height:16px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_icon_remove.gif") no-repeat left top; }
.adminTable tr td.moveupdown a.up { float:left; width:14px; height:14px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_button_up.gif") no-repeat left top; margin-right:5px; }
.adminTable tr td.moveupdown a.down{ float:left; width:14px; height:14px; overflow:hidden; display:block; font-size:1px; line-height:100px; background:url("../img/n_button_down.gif") no-repeat left top; }
.adminTable tr td.blue, .adminTable tr td.blue a { color:blue; }
.adminTable tr td.red, .adminTable tr td.red a { color:red; }
.fullWidth { width:80%; }
.adminLeftContent { float:left; width:60%; margin-right:2%; _margin-right:1.9%;}
.adminRightExtra { float:left; width:38%; }
.serverresponse { background: #FFFFFF url(../../../../common/tpl/images/loading.gif) no-repeat scroll 5px 5px; height:30px; padding-left:25px; padding-top:5px; }
#search_nav { border:3px solid #ccc; margin:0; padding:3px; }
#search_nav input { border:0; height:17px; width:140px; padding:3px 0 0 4px; vertical-align:middle;}
#search_nav button { padding:0; border:0; height:17px; width:17px; background:transparent url(../img/buttonSearch.gif) no-repeat center; vertical-align:middle;}
#search_nav button.close {background:transparent url(../img/buttonClose.gif) no-repeat center;}
.e1 .section ._result{ list-style:none; margin:10px 0 0 0; padding:0;}
.e1 .section ._result li{ margin:0;}
.e1 .section ._result a{ display:block; color:#767676; padding:4px 5px 4px 10px;}
.e1 .section ._result a:hover,
.e1 .section ._result a:active,
.e1 .section ._result a:focus{ background:#f8f8f8;}
/* Element Reset */
header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{display:block}
.x,
.x table,
.x input,
.x textarea,
.x select,
.x button{font-family:Tahoma,Geneva,sans-serif;font-size:12px;color:#333}
.x button,
.x input[type=submit],
.x input[type=reset],
.x input[type=button]{cursor:pointer;overflow:visible}
.x img{border:0}
.x p{line-height:1.5}
/* Section & Heading */
.x .section{margin:1em 0;padding:0;border:0}
.x .h1,
.x .h2,
.x .h3,
.x .h4{position:relative;border-style:solid;border-top:0;border-right:0;zoom:1;padding-left:8px}
.x .h1{border-width:4px;font-size:24px;border-color:#666}
.x .h2{border-width:3px;font-size:20px;border-color:#888}
.x .h3{border-width:2px;font-size:16px;border-color:#aaa}
.x .h4{border-width:1px;font-size:12px;border-color:#ccc}
.x .h1 + ul,
.x .h2 + ul,
.x .h3 + ul,
.x .h4 + ul,
.x .h1 + .table table,
.x .h2 + .table table,
.x .h3 + .table table,
.x .h4 + .table table{border-top:0 !important;margin-top:-1em !important}
/* Portlet */
.x .portlet{position:relative;border:1px solid #e9e9e9;margin:1em 0;padding:0;background:#fff;zoom:1;overflow:hidden;border-radius:5px}
.x .portlet h2,
.x .portlet h3{margin:0;padding:.5em 1em;font-size:14px;border:1px solid #fff;border-bottom:1px solid #e9e9e9;background:#f7f7f7;border-radius:5px 5px 0 0}
.x .portlet p{margin:1em 1.2em}
.x .portlet li{position:relative;padding-right:8em}
.x .portlet .lined{margin:1px !important;padding:0;list-style:none}
.x .portlet .lined li{padding:.5em 8em .5em 1em;border-top:1px solid #eee;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}
.x .portlet .lined li:first-child{border:0}
.x .portlet .side{position:absolute;top:0;_top:1px;right:0;color:#666;background:#fff;padding:0 1em}
.x .portlet .lined .side{padding:.5em 1em}
.x .portlet .more{position:absolute;top:.5em;right:1em;text-decoration:none !important;color:#666}
.x .portlet .more span{color:#999}
.x .portlet .action{text-align:right;top:0;right:0;padding:.5em 1em .5em 3em;background:#fff;background:-webkit-gradient(linear, 0% 0%, 100% 0%, from(rgba(255,255,255,0)), to(rgba(255,255,255,1)), color-stop(15%, #fff));background:-moz-linear-gradient(left, rgba(255,255,255,0) 0, rgba(255,255,255,1) 15%)}
.x .portlet .action a,
.x .portlet .action button{margin-left:1em}
.x .portlet .btnArea{border-top:1px solid #ddd;margin:0;padding:.5em 1em;margin:0 1px 1px 1px;background:#f7f7f7;border-radius:0 0 5px 5px}
/* Table */
.x .table{margin:1em 0}
.x .table table{width:100%;border:0;border-collapse:collapse;border-top:2px solid #ccc}
.x .table caption{font-weight:bold;text-align:left;line-height:22px;padding:5px 0}
.x .table caption:after{content:"";display:block;clear:both}
.x .table caption a{font-weight:normal}
.x .table caption em{float:right;margin-left:1em}
.x .table caption strong{color:#e00}
.x .table caption .side{float:right;font-weight:normal;margin-left:1em}
.x .table th,
.x .table td{border:0;padding:8px;vertical-align:top;text-align:left;border-bottom:1px solid #ddd;white-space:nowrap}
.x .table th{background:#f8f8f8}
.x .table thead th{border-bottom:1px solid #999}
.x .table tfoot td{font-weight:bold;background:#f8f8f8}
.x .table.even tbody tr:nth-of-type(even) td{background-color:#fafafa}
.x .table td>input[type=text]{margin:-1px 0 !important;vertical-align:middle}
.x .table img{vertical-align:middle}
.x .table em{font-style:normal;font-weight:normal;color:#e00}
.x .table th.title,
.x .table td.title,
.x .table th.text,
.x .table td.text{white-space:normal;width:100%}
.x .table td[colspan]{white-space:normal}
/* Form */
.x .form{margin:1em 0;padding:0}
.x .form fieldset{margin:0 0 2em 0;padding:0;border:0}
.x .form.search fieldset{border:1px solid #ccc;padding:5px 15px;border-radius:3px}
.x .form em{font-style:normal;color:#e00}
.x .form label{line-height:1;vertical-align:middle}
.x .form input[type=radio]+label,
.x .form input[type=checkbox]+label{margin-right:1em}
.x .form input[type=checkbox]+label,
.x .form input[type=radio]+label,
.x .form input[type=file]{cursor:pointer}
.x .form ul{position:relative;margin:1em 0;padding:0;list-style:none;border-top:2px solid #ccc;border-bottom:1px solid #ccc;zoom:1}
.x .form li{list-style:none;border:1px solid #ddd;border-left:0;border-right:0;margin:-1px 0;padding:8px 0;vertical-align:top;zoom:1}
.x .form li:first-child{border-top:0}
.x .form li>label:first-child{display:block;font-weight:bold}
.x .form li label em{font-weight:normal}
.x .form label.overlap{position:absolute;color:#aaa}
.x .form input[type=text],
.x .form input[type=password],
.x .form input[type=file],
.x .form textarea{position:relative;width:280px;margin:2px 0;border:1px solid #b7b7b7;border-right-color:#e1e1e1;border-bottom-color:#e1e1e1;background:transparent}
.x .form input[type=text],
.x .form input[type=password],
.x .form input[type=file]{height:22px;line-height:22px;vertical-align:middle;padding:0 4px}
.x .form input[type=text].loading,
.x .form input.loading[type=password]{padding-right:24px;width:260px;background:transparent url(../img/preLoader16.gif) no-repeat 265px center}
.x .form input[type=checkbox],
.x .form input[type=radio]{margin:0;padding:0;width:13px;height:13px;vertical-align:middle}
.x .form input[type=text][disabled=disabled],
.x .form input[type=password][disabled=disabled],
.x .form input[type=radio][disabled=disabled],
.x .form input[type=checkbox][disabled=disabled],
.x .form select[disabled=disabled],
.x .form textarea[disabled=disabled]{background:#ddd;text-shadow:1px 1px 0 #fff}
.x .form textarea{padding:3px 4px;vertical-align:top}
.x .form span.desc,
.x .form em.desc{line-height:22px;vertical-align:middle;margin:0 10px}
.x .form p.desc{margin:.25em 0;line-height:1.4}
.x .form .q{font-weight:bold;margin:0 0 5px 0}
.x .form .a{margin:0 0 5px 0}
.x .form .tgForm{margin-right:1em}
/* Global Navigation Bar */
.x .gnb{position:relative;clear:both;border:1px solid #c1c1c1;border-left:0;border-right:0;background-color:#efefef;background:#efefef -webkit-gradient(linear, 0% 0%, 0% 100%, from(#efefef), to(#dcdcdc));background:#efefef -moz-linear-gradient(top, #efefef, #dcdcdc);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#efefef, endColorStr=#dcdcdc);zoom:1}
.x .gnb ul{margin:0;padding:0 0 0 20px;list-style:none;border:1px solid #fff;border-left:0;border-right:0;zoom:1}
.x .gnb ul ul{position:absolute;top:30px;left:0;border:1px solid #ccc;border-top:0;padding:1px 0 0 0;background:#fff}
.x .gnb ul:after{content:"";display:block;clear:both}
.x .gnb li{position:relative;float:left;border:1px solid #fff;border-top:0;border-bottom:0;margin:0 -1px 0 0}
.x .gnb li li{float:none;clear:both;overflow:hidden;border:0;border-top:1px dotted #ccc;margin:0;padding:2px}
.x .gnb li li:first-child{border:0}
.x .gnb li a{float:left;font-weight:bold;color:#333;font-size:12px;height:14px;padding:8px 18px;white-space:nowrap;text-decoration:none;text-shadow:0 1px 0 #fff;zoom:1}
.x .gnb li a:hover,
.x .gnb li a:active,
.x .gnb li a:focus,
.x .gnb li.active a{background:#f4f4f4;border:1px solid #ccc;border-bottom:0;padding:7px 17px 8px 17px}
.x .gnb li.activeOn a{background:#fff;border:1px solid #ccc;border-bottom:0;padding:7px 17px 8px 17px}
.x .gnb li.active li a{display:block;float:none;color:#555;background:#fff;padding:5px 15px !important;font-weight:normal !important;border:0 !important}
.x .gnb li.active li a:hover,
.x .gnb li.active li a:active,
.x .gnb li.active li a:focus{border:0;background:#eee}
.x .gnb .setting{position:absolute;top:8px;right:2em;width:16px;height:0;padding:16px 0 0 0;overflow:hidden;background:url(../img/iconSetting.gif) no-repeat center}
.x .gnb.jx ul{display:block;position:static;padding:0}
.x .gnb.jx li{float:none;clear:both;border-top:1px solid #ccc}
.x .gnb.jx ul ul{border:0}
.x .gnb.jx li li{border:0}
.x .gnb.jx li a{float:none;display:block}
.x .gnb.jx li a:hover,
.x .gnb.jx li a:active,
.x .gnb.jx li a:focus{background:none}
.x .gnb.jx li.activeOn>a{background:#ddd}
@media only all and (max-width:860px){
.x .gnb ul{padding-left:1em}
.x .gnb .setting{right:1em}
}
@media only all and (max-width:640px){
.x .gnb ul{display:block;position:static;padding:0}
.x .gnb li{float:none;clear:both;border-top:1px solid #ccc}
.x .gnb ul ul{border:0;position:static}
.x .gnb li li{border:0}
.x .gnb li a{float:none;display:block}
.x .gnb li a:hover,
.x .gnb li a:active,
.x .gnb li a:focus{background:none}
.x .gnb li.activeOn>a{background:#ddd}
}
/* Favorite */
.x .bmk{position:absolute;right:20px;bottom:10px;padding:0 0 0 20px;background:url(../img/iconFavorite.gif) no-repeat 0 -16px}
.x .bmk>a{text-shadow:0 1px 0 #fff}
.x .bmk ul{position:absolute;top:140%;right:0;list-style:none;margin:0;padding:5px 10px;border:1px solid #aaa;border-radius:5px;background:#fff;box-shadow:1px 1px 3px #aaa}
.x .bmk li{position:relative;padding:3px 30px 3px 0;white-space:nowrap}
.x .bmk li .action{position:absolute;top:0;right:0}
.x .bmk li .action .text{text-decoration:none;width:16px;text-align:center;margin:0}
@media only all and (max-width:640px){
.x .bmk{position:static;background-color:#fff;padding:10px 20px;background:#fff}
.x .bmk .tgAnchor{display:block}
.x .bmk ul{position:relative;border:0;border-top:1px solid #ccc;border-radius:0;box-shadow:none;padding:0;margin:5px 0 0 0}
.x .bmk li{position:relative;top:-1px;border-top:1px dotted #ccc}
}
/* Local Navigation */
.x .lnb{position:relative;float:left;width:210px;margin:1em 0 1em -240px;line-height:normal;zoom:1;display:inline}
.x .lnb .h2{margin-top:0;border-left:0;padding-left:0}
.x .lnb ul{margin:0 !important;padding:0;list-style:none}
.x .lnb li{position:relative;margin:0 0 -1px 0;vertical-align:top;zoom:1}
.x .lnb li a{display:block;position:relative;padding:8px 10px;text-decoration:none;color:#666;font-weight:bold;background:#fafafa;border:1px solid #eee;zoom:1}
.x .lnb li a .i{position:absolute;top:50%;left:100%;margin:-4px 0 0 -16px;width:8px;height:8px;color:#ccc;background:url(../img/iconNavVr.gif) no-repeat left top}
.x .lnb li ul{padding:5px 0;background:#fff}
.x .lnb li li{margin:0;border-top:1px dotted #ddd}
.x .lnb li li:first-child{border:0}
.x .lnb li li a{font-weight:normal;background:#fff;padding:5px 10px;border:0}
.x .lnb li li a span{color:#666}
.x .lnb li.active{border:1px solid #ccc;z-index:2}
.x .lnb li li.active{border:0}
.x .lnb li.active a{color:#000;border:0}
.x .lnb li.active .i{background-position:0 -44px}
.x .lnb li.active li a{border:0}
.x .lnb li.active ul{display:block;border-top:1px solid #eee}
.x .lnb li.active li.active a span{color:#13b200;font-weight:bold;letter-spacing:-1px}
/* Content Navigation */
.x .cnb{margin:1em 0;position:relative;zoom:1}
.x .cnb:after{content:"";display:block;clear:both}
.x .cnb ul{list-style:none;margin:0;padding:0}
.x .cnb li{display:inline}
.x .cnb li:before{content:"| ";color:#ccc}
.x .cnb li:first-child:before{content:""}
.x .cnb .active,
.x .cnb .active a{font-weight:bold;color:#333;text-decoration:none}
.x .cnb .side{float:right}
/* Pagination */
.x .pagination{margin:1em 0;text-align:center;line-height:normal}
.x .pagination *{vertical-align:middle}
.x .pagination a,
.x .pagination strong{position:relative;display:inline-block;padding:2px 4px;font-weight:bold;text-decoration:none;line-height:normal;color:#333 !important;vertical-align:middle}
.x .pagination a:hover,
.x .pagination a:active,
.x .pagination a:focus{border:1px solid #ddd;margin:0 -1px}
.x .pagination strong{color:#e00 !important;font-size:20px}
.x .pagination .direction{font-weight:normal;white-space:nowrap}
.x .pagination .direction:hover,
.x .pagination .direction:active,
.x .pagination .direction:focus{border:0;margin:0;text-decoration:underline}
.x .pagination input{width:30px;text-align:center}
.x .pagination button{overflow:visible}
/* Star Rating */
.x .starRating,
.x .starRating span{display:inline-block;height:14px;background:transparent url(../img/iconStarRating.gif) no-repeat;overflow:hidden}
.x .starRating{width:79px;vertical-align:top}
.x .starRating span{font-size:0;line-height:0;vertical-align:top;text-indent:-100px;*text-indent:0;background-position:0 -14px}
/* Progress */
.x .prgrs{white-space:nowrap;line-height:normal;vertical-align:middle}
.x .prgrs *{vertical-align:middle}
.x .prgrs .pBar{position:relative;display:inline-block;background:#e9e9e9;margin:0 5px 0 0}
.x .prgrs .pAction{display:inline-block;vertical-align:top;background:#99a6b6}
.x .prgrs .pNum{position:absolute;width:100%;left:0;top:0;text-align:center;text-shadow:1px 1px 0 #fff}
.x .prgrs.prgrsSmall{font-size:14px;line-height:14px}
.x .prgrs.prgrsSmall .pBar,
.x .prgrs.prgrsSmall .pAction,
.x .prgrs.prgrsSmall .pNum{height:16px;line-height:16px;font-size:11px}
.x .prgrs.prgrsMedium{font-size:24px;line-height:24px}
.x .prgrs.prgrsMedium .pBar,
.x .prgrs.prgrsMedium .pAction,
.x .prgrs.prgrsMedium .pNum{height:22px;line-height:22px;font-size:12px}
.x .prgrs.prgrsLarge{font-size:38px;line-height:38px}
.x .prgrs.prgrsLarge .pBar,
.x .prgrs.prgrsLarge .pAction,
.x .prgrs.prgrsLarge .pNum{height:34px;line-height:34px;font-size:14px}
/* Modal Window */
.modal{position:absolute;top:0;left:0;width:100%;_height:100%;min-height:100%;z-index:100}
.modal .bg{position:absolute;background:#000;_background:none;width:100%;height:100%;opacity:.5;z-index:2;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);zoom:1}
.modal .fg{position:relative;width:80%;margin:5em auto;background:#fff;padding:0 1em;*padding:1em;border:8px solid #ddd;z-index:3;zoom:1;border-radius:5px;box-shadow:0 0 6px #000}
.modal ul,
.modal ol,
.modal .lined,
.modal .table{margin-bottom:1em}
.modal .ie6{position:absolute;left:0;top:0;width:100%;height:100%;border:0;opacity:0;filter:alpha(opacity=0);z-index:1}
.modalClose{position:absolute;right:-8px;top:-8px;border:0;background:#ddd;padding:0;width:28px;height:28px;font-size:14px;font-weight:bold;cursor:pointer;color:#999;border-radius:5px}
.modalBlur{position:absolute;top:0;right:0;border:0;background:none;padding:0;width:1px;height:1px;overflow:hidden}
html.modalContainer,
body.modalContainer{_height:100%;_width:100%} /* IE6 only */
/* Layer */
.x .layer,
.x.layer{position:absolute;background:#fff;padding:0 1em;*padding:1em;border:8px solid #ddd;z-index:2;zoom:1;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;box-shadow:0 0 6px #666;filter:progid:DXImageTransform.Microsoft.Shadow(color=#999999,direction=135, strength=5)}
.x .layer h2{font-size:14px}
.x .layer ul,
.x .layer ol,
.x .layer .lined,
.x .layer .table{margin-bottom:1em}
.x .layerClose{position:absolute;right:-8px;top:-8px;border:0;background:#ddd;padding:0;width:28px;height:28px;font-size:14px;font-weight:bold;cursor:pointer;color:#999;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px}
.x .layerBlur{position:absolute;top:0;right:0;border:0;background:none;padding:0;width:1px;height:1px;overflow:hidden}
/* H2 Anchor */
.x .h2Anchor{position:absolute;right:0;border:0;background:none;color:#00f;text-decoration:underline}
/* Skip Navigation */
.x .skipNav{margin:0;text-align:center}
.x .skipNav a{position:absolute;width:1px;height:1px;display:block;font-weight:bold;padding:10px 0}
.x .skipNav a:hover,
.x .skipNav a:active,
.x .skipNav a:focus{position:relative;width:auto;height:auto}
/* Header */
.x .header{position:relative;z-index:2;padding:30px 0 0 0;background:#4c4c4c;box-shadow:0 0 10px #aaa;zoom:1;border-radius:5px 5px 0 0}
.x .header:after{content:"";display:block;clear:both}
.x .header a{text-decoration:none}
.x .header h1{margin:0 15px 10px 20px;font-size:24px;line-height:32px;display:inline-block;zoom:1}
.x .header h1 *{vertical-align:middle}
.x .header h1 a{color:#fff;text-shadow:1px 1px 0 #000;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=1, OffY=1, Color=#000000, Positive=true);zoom:1}
.x .header h1 .url{font-size:12px;font-weight:normal}
.x .header .site{margin:0;display:inline-block;zoom:1}
.x .header .site a{color:#fff;text-decoration:underline}
.x .header #moveSiteList{padding:10px 1em 5px 1em;margin:0}
.x .header #moveSiteList ul{list-style:none;margin:0;padding:0}
.x .header #moveSiteList li{white-space:nowrap;margin:0;padding:4px 0;border-bottom:1px dotted #ccc}
.x .header #siteMapList{padding:0 1em 1em 1em;margin:0}
.x .header #siteMapList li{white-space:nowrap}
.x .header .account{position:absolute;z-index:3;width:100%;top:0;right:0;white-space:nowrap;text-align:right;background:#333;border-bottom:1px solid #656565;color:#fff;font-size:12px;border-radius:5px 5px 0 0}
.x .header .account ul{margin:0 2px 0 0;padding:5px 20px 5px 0;list-style:none}
.x .header .account li{position:relative;display:inline;border-left:1px solid #666;padding:0 6px 0 10px}
.x .header .account li:first-child{border:0}
.x .header .account a{color:#fff;display:inline-block;height:14px}
.x .header .account a.language{padding-right:16px;background:url(../img/iconArrow.gif) no-repeat right -160px}
.x .header #language{position:absolute;top:19px;right:-2em;padding:6px 4px !important;border:1px solid #666;border-top:0;background:#333}
.x .header #language li{border:0;display:block;padding:1px 8px 1px 10px;text-align:left;line-height:1}
.x .header #language li.selected{background:url(../img/iconCheck.gif) no-repeat left center}
.x .header #language li.selected a{text-decoration:underline}
.x .header h1 a:hover,
.x .header h1 a:active,
.x .header h1 a:focus,
.x .header .account a:hover,
.x .header .account a:active,
.x .header .account a:focus{color:#6e9cf2;text-decoration:underline}
/* Footer */
.x .footer{border-top:1px solid #ddd;text-align:center;font-size:12px;padding:1.5em 0;zoom:1}
.x .footer:after{content:"";display:block;clear:both}
.x .footer p{margin:0}
.x .footer .power{float:left}
.x .footer .cache{float:right}
/* Body */
.x .body{position:relative;z-index:1;padding:1em 20px 1em 260px;zoom:1}
.x .body:after{content:"";display:block;clear:both}
/* Content */
.x .content{float:right;width:100%;margin-left:-230px;zoom:1}
.x .content:after{content:"";display:block;clear:both}
.x .content a{color:#33a}
.x .content a:hover,
.x .content a:active,
.x .content a:focus{color:#a33}
.x .content .portlet a{text-decoration:none}
.x .content .portlet a:hover,
.x .content .portlet a:active,
.x .content .portlet a:focus{text-decoration:underline}
/* Dashboard */
.x .dashboard{position:relative;float:none;width:auto;margin-left:-230px}
.x .dashboard .portlet{float:left;width:48%;margin-right:1em}
.x .dashboard .portlet:nth-of-type(odd){float:left;width:49%;margin-right:0}
.x .dashboard .portlet:nth-of-type(even){float:right;width:49%;margin-right:0}
@media only all and (min-width:1300px){
.x .dashboard .portlet{float:left !important;width:32% !important;margin-right:1em !important}
}
/* Single Column*/
.x .single{position:relative;float:none;width:auto;margin-left:-240px}
/* Search */
.x .search{zoom:1}
.x .search:after{content:"";display:block;clear:both}
.x .search .pagination{float:left;text-align:left}
.x .search form{float:right;margin:1em 0}
.x .search form *{vertical-align:middle}
/* Site Map */
.x .siteMap h2 input{font-size:14px;font-weight:bold;padding:0 .5em}
.x .siteMap label{cursor:text}
.x .siteMap .lined ul{padding:0;margin:0;border-top:1px solid #eee;zoom:1}
.x .siteMap .lined li{position:relative;padding:0;margin:0;cursor:all-scroll;list-style:none;zoom:1}
.x .siteMap .lined li li{border-top:1px solid #eee}
.x .siteMap li li{text-indent:18px}
.x .siteMap li li li{text-indent:36px}
.x .siteMap li li li li{text-indent:54px}
.x .siteMap li li li li li{text-indent:72px}
.x .siteMap li li li li li li{text-indent:90px}
.x .siteMap li li li li li li li{text-indent:108px}
.x .siteMap li li li li li li li li{text-indent:126px}
.x .siteMap li li li li li li li li li{text-indent:144px}
.x .siteMap li li li li li li li li li li{text-indent:162px}
.x .siteMap li li li li li li li li li li li{text-indent:180px}
.x .siteMap li li li li li li li li li li li li{text-indent:198px}
.x .siteMap li *{vertical-align:middle}
.x .siteMap li .moveTo+input{width:200px;border:0;padding:0 .5em}
.x .siteMap li .moveTo+input:hover,
.x .siteMap li .moveTo+input:active,
.x .siteMap li .moveTo+input:focus{border:1px dotted #ccc;overflow:visible}
.x .siteMap .moveTo{position:relative;z-index:2;width:22px;height:32px;padding:32px 0 0 0;margin:0 3px;_margin-top:-1px;overflow:hidden;background:#fff url(../img/iconMoveTo.gif) no-repeat center 0;border:0;cursor:move}
.x .siteMap li.active,
.x .siteMap li.active .moveTo{background-color:#f7f7f7}
.x .siteMap li.active li,
.x .siteMap li.active ul{border-top-color:#f7f7f7}
.x .siteMap li.active .moveTo{background-position:center -32px}
.x .siteMap .vr,
.x .siteMap .hr{display:none;position:absolute;z-index:1;left:14px;border:0px solid #ccc;overflow:hidden}
.x .siteMap .vr{top:-16px;height:100%;border-left-width:1px}
.x .siteMap .hr{top:16px;width:16px;border-top-width:1px}
.x .siteMap li.active .vr,
.x .siteMap li.active li .hr{display:block}
.x .siteMap li li .vr,
.x .siteMap li li li .hr{left:32px}
.x .siteMap li li li .vr,
.x .siteMap li li li li .hr{left:50px}
.x .siteMap li li li li .vr,
.x .siteMap li li li li li .hr{left:68px}
.x .siteMap li li li li li .vr,
.x .siteMap li li li li li li .hr{left:86px}
.x .siteMap li li li li li li .vr,
.x .siteMap li li li li li li li .hr{left:104px}
.x .siteMap li li li li li li li .vr,
.x .siteMap li li li li li li li li .hr{left:122px}
.x .siteMap li li li li li li li li .vr,
.x .siteMap li li li li li li li li li .hr{left:140px}
.x .siteMap li li li li li li li li li .vr,
.x .siteMap li li li li li li li li li li .hr{left:158px}
.x .siteMap li li li li li li li li li li .vr,
.x .siteMap li li li li li li li li li li li .hr{left:176px}
.x .siteMap li li li li li li li li li li li .vr,
.x .siteMap li li li li li li li li li li li li .hr{left:336px}
.x .siteMap .side{padding-top:0 !important;padding-bottom:0 !important;line-height:30px;background:transparent !important}
.x .siteMap .side button{text-indent:0;line-height:1}
.x .siteMap .tgMap{position:absolute;top:12px;right:1em;padding:0 16px 0 0;line-height:16px;background:url(../img/iconArrow.gif) no-repeat right -126px}
.x .siteMap.fold .tgMap{background-position:right -158px}
.x .siteMap.fold .h2{border-bottom-color:#fff;border-radius:5px}
.x .siteMap .placeholder{background:#bbb}
.x .siteMap .draggable,
.x .siteMap .draggable .moveTo{background-color:#ddd}
.x .siteMap .draggable .summary{border-left:1px solid #ccc;padding-left:10px;margin-left:10px;font-size:11px;color:#999}
.x .siteMap a.ms{text-decoration:underline}
/* Multilingual */
.x .langEdit{background:#fff;position:absolute;*left:0;*margin-top:28px;z-index:10}
.x .langEdit ul{border-top:1px solid #ccc;border-left:1px solid #eee;border-right:1px solid #eee;margin:0}
.x .langEdit li{padding:.5em 10px}
.x .langEdit input[type=text]{width:220px;padding-right:40px}
.x .langEdit label{left:15px !important}
.x .langEdit .action{border:1px solid #eee;width:268px;padding:0 10px}
.x .langEdit p,
.x .langEdit .btnArea{white-space:normal}
.x .langEdit .langList,
.x .langEdit .langEditControls{box-shadow:3px 3px 6px #999;filter:progid:DXImageTransform.Microsoft.Shadow(color=#999999,direction=135, strength=5)}
.x .langEdit .langList{margin:0 -1px 0 0;display:none}
.x .langEdit .langList li{white-space:nowrap;color:#ccc;width:270px}
.x .langEdit .langList li span{display:inline-block;width:80px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#767676}
.x .langEdit .langList li a{display:inline-block;width:80px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.x .langEdit .langList li.active{background:url(../img/iconArrow.gif) no-repeat right -188px}
.x .langEdit.showChild .langList{display:block}
.x .langEdit .langInput{background:#fff}
.x .langEdit .langInput h2{padding:5px 10px;margin:0 0 -1px 0;font-size:12px;font-weight:normal;color:#666;border:1px solid #eee;border-top-color:#ccc}
.x .langEdit .langInput h2 strong{color:#000;font-size:14px}
.x .langEdit.showChild .langInput{position:absolute;left:285px;top:0}
.x .langEdit li.en input,
.x .langEdit li.en textarea,
.x .mLangEdit li.en textarea{background:url(../img/flag.us.gif) no-repeat 99% 5px}
.x .langEdit li.ko input,
.x .langEdit li.ko textarea,
.x .mLangEdit li.ko textarea{background:url(../img/flag.kr.gif) no-repeat 99% 5px}
.x .langEdit li.jp input,
.x .langEdit li.jp textarea,
.x .mLangEdit li.jp textarea{background:url(../img/flag.jp.gif) no-repeat 99% 5px}
.x .langEdit li.fr input,
.x .langEdit li.fr textarea,
.x .mLangEdit li.fr textarea{background:url(../img/flag.fr.gif) no-repeat 99% 5px}
.x .langEdit li.de input,
.x .langEdit li.de textarea,
.x .mLangEdit li.de textarea{background:url(../img/flag.de.gif) no-repeat 99% 5px}
.x .langEdit li.ru input,
.x .langEdit li.ru textarea,
.x .mLangEdit li.ru textarea{background:url(../img/flag.ru.gif) no-repeat 99% 5px}
.x .langEdit li.es input,
.x .langEdit li.es textarea,
.x .mLangEdit li.es textarea{background:url(../img/flag.es.gif) no-repeat 99% 5px}
.x .langEdit li.tr input,
.x .langEdit li.tr textarea,
.x .mLangEdit li.tr textarea{background:url(../img/flag.tr.gif) no-repeat 99% 5px}
.x .langEdit li.vi input,
.x .langEdit li.vi textarea,
.x .mLangEdit li.vi textarea{background:url(../img/flag.vn.gif) no-repeat 99% 5px}
.x .langEdit li.mn input,
.x .langEdit li.mn textarea,
.x .mLangEdit li.mn textarea{background:url(../img/flag.mn.gif) no-repeat 99% 5px}
.x .langEdit li.zh-CN input,
.x .langEdit li.zh-CN textarea,
.x .mLangEdit li.zh-CN textarea{background:url(../img/flag.cn.gif) no-repeat 99% 5px}
.x .langEdit li.zh-TW input,
.x .langEdit li.zh-TW textarea,
.x .mLangEdit li.zh-TW textarea{background:url(../img/flag.tw.gif) no-repeat 99% 5px}
.x .mLangEdit.en strong{background:url(../img/flag.us.gif) no-repeat 0 10px}
.x .mLangEdit.ko strong{background:url(../img/flag.kr.gif) no-repeat 0 10px}
.x .mLangEdit.jp strong{background:url(../img/flag.jp.gif) no-repeat 0 10px}
.x .mLangEdit.fr strong{background:url(../img/flag.fr.gif) no-repeat 0 10px}
.x .mLangEdit.de strong{background:url(../img/flag.de.gif) no-repeat 0 10px}
.x .mLangEdit.ru strong{background:url(../img/flag.ru.gif) no-repeat 0 10px}
.x .mLangEdit.es strong{background:url(../img/flag.es.gif) no-repeat 0 10px}
.x .mLangEdit.tr strong{background:url(../img/flag.tr.gif) no-repeat 0 10px}
.x .mLangEdit.vi strong{background:url(../img/flag.vn.gif) no-repeat 0 10px}
.x .mLangEdit.mn strong{background:url(../img/flag.mn.gif) no-repeat 0 10px}
.x .mLangEdit.zh-CN strong{background:url(../img/flag.cn.gif) no-repeat 0 10px}
.x .mLangEdit.zh-TW strong{background:url(../img/flag.tw.gif) no-repeat 0 10px}
.x .mLangEdit ul ul{border:0}
.x .mLangEdit li{position:relative;padding:0}
.x .mLangEdit li strong{display:inline-block;padding:6px 100px 8px 24px;font-weight:normal;line-height:1.5}
.x .mLangEdit li .side{position:absolute;top:8px;right:0;padding-right:18px;background:url(../img/iconArrow.gif) no-repeat right -160px}
.x .mLangEdit li li{border:0;padding-right:36px}
.x .mLangEdit li textarea{width:100%;height:16px;padding-right:30px;resize:vertical;line-height:1.4}
.x .mLangEdit li label{top:8px !important}
.x .mLangEdit li.active{background:#FFFDEF}
.x .mLangEdit li.active strong{font-weight:bold}
.x .mLangEdit li.active .side{background-position:right -128px}
.modal .mLangEdit ul{padding-bottom:1em}
.modal .mLangEdit li{border:0;padding-right:36px}
/* Suggestion */
.x .suggestion{display:none;position:absolute;background:#fff;z-index:10;_height:200px;max-height:200px;overflow:auto;*left:0;*margin-top:28px;box-shadow:3px 3px 6px #999;filter:progid:DXImageTransform.Microsoft.Shadow(color=#999999,direction=135, strength=5)}
.x .suggestion ul{border-top:1px solid #ccc;border-left:1px solid #eee;border-right:1px solid #eee;margin:0}
.x .suggestion li{padding:0}
.x .suggestion li:last-child{border-bottom:0}
.x .suggestion li button{border:0;background:#fff;text-align:left;width:288px;padding:2px 4px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.x .suggestion li button:hover,
.x .suggestion li button:active,
.x .suggestion li button:focus,
.x .suggestion li button.active{background:#eee}
/* Image Mark */
.x #imageMark{right:0}
/* Easy Installer */
.x .easyNav{position:relative;border:1px solid #e9e9e9;zoom:1}
.x .easyNav:after{content:"";display:block;clear:both}
.x .easyNav h2{font-size:16px}
.x .easyNav .category{width:30%;float:left;margin:0 2em;display:inline}
.x .easyNav .filter{position:absolute;top:0;right:0;margin:1em 2em;text-align:right}
.x .easyList td p{margin-top:0}
.x .easyList td p.update{background:#ffc;padding:.5em 1em;border:1px solid #fc9;border-left:0;border-right:0;text-align:center}
/* Font Preview */
.x .fontPreview{width:96%;border:1px solid #e9e9e9;zoom:1;padding:1em 2em;margin:.5em 0}
/* FTP Suggestion */
.x #ftpSuggestion{background:#fff;box-shadow:3px 3px 6px #999;filter:progid:DXImageTransform.Microsoft.Shadow(color=#999999,direction=135, strength=5)}
.x #ftpSuggestion ul{border-left:1px solid #eee;border-right:1px solid #eee}
.x #ftpSuggestion li{padding:0}
.x #ftpSuggestion li button{border:0;background:#fff;text-align:left;width:288px}
.x #ftpSuggestion li button:hover,
.x #ftpSuggestion li button:active,
.x #ftpSuggestion li button:focus{background:#eee}
/* Theme & Skin Preview */
.x .thumbPreview li{position:relative;padding-left:10px;padding-right:10px}
.x .thumbPreview li.active.highlight{background:#f9f9f9}
.x .thumbPreview .prevToggle{position:absolute;top:8px;right:10px;line-height:16px;padding:0 18px 0 0;text-decoration:none;background:url(../img/iconArrow.gif) no-repeat right -32px}
.x .thumbPreview li.active .prevToggle{background-position:right 0}
.x .thumbPreview .a{border:0;margin:0;zoom:1}
.x .thumbPreview .a:after{content:"";display:block;clear:both}
.x .thumbPreview .i{float:left;vertical-align:top;margin:0 1em 1em 0;padding:0;border:0;zoom:1}
.x .thumbPreview .i:after{content:"";display:block;clear:both}
.x .thumbPreview .i .thumb{position:relative;width:124px;height:84px;padding:0;margin-bottom:3px;text-align:center;overflow:hidden;border:1px solid #ddd;display:block;cursor:pointer;background:#fff}
.x .thumbPreview .i .thumb .frame{position:absolute;width:120px;height:80px;left:0;top:0;border:2px solid #fff;overflow:hidden}
.x .thumbPreview .i .thumb img{width:120px;margin:0}
.x .thumbPreview .i label{display:block;position:relative;top:0;left:2px;width:122px;height:1.1em;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.x .thumbPreview .i input{display:none}
.x .thumbPreview .i ul{display:none}
.x .thumbPreview .selected .i{display:block;float:none}
.x .thumbPreview .selected .i .thumb{float:left;width:186px;height:126px;margin:0 1em 0 0;border:2px solid #eee}
.x .thumbPreview .selected .i .thumb .frame{width:180px;height:120px;border-width:3px}
.x .thumbPreview li.active.highlight .selected .i .thumb{border-color:#5ea8f6}
.x .thumbPreview .selected .i .thumb img{width:180px;position:relative}
.x .thumbPreview li.active .selected .i .thumb img{z-index:auto}
.x .thumbPreview .selected .i label{cursor:text}
.x .thumbPreview .selected .i ul{display:block;list-style:none;border:0;margin:1em 0 1em 200px}
.x .thumbPreview .selected .i li{border:0;padding:0;margin:0 0 .2em 0}
.x .thumbPreview.jx .i label{display:inline;width:auto}
.x .thumbPreview.jx .i.noDirection{display:none}
.x .thumbPreview.jx .i input{display:inline}
.x #skin .showAll{float:right;border:0;overflow:visible;padding:0 18px 0 0;cursor:pointer;color:#00f;background:url(../img/iconArrow.gif) no-repeat right -32px}
.x #skin .showAll.hideAll{background-position:right 0}
/* Favorite On | Off */
.x .fvOff,
.x .fvOn{display:inline-block;width:16px;height:16px;overflow:hidden;text-indent:16px;background:url(../img/iconFavorite.gif) no-repeat}
.x .fvOn{background-position:0 -16px}
/* Up-Down Dragable */
.x .uDrag .wrap{position:relative;padding-left:20px}
.x .uDrag li>.wrap{margin:0 0 0 8px}
.x .uDrag .dragActive{background:#FFD}
.x .uDrag .dragActive th,
.x .uDrag .dragActive td{background:none !important}
.x .uDrag .dragBtn{position:absolute;width:8px;height:100%;padding:0;overflow:hidden;background:url(../img/bgDragable.gif);top:1px;left:0;text-indent:12px;border:0;cursor:n-resize;white-space:nowrap}
/* Favicon Preview */
.x .faviconPreview{position:relative;padding:60px 0 0 200px;background:url(../img/bgFavicon.gif) no-repeat}
.x .faviconPreview img{position:absolute}
.x .faviconPreview .fn1{top:30px;left:12px}
.x .faviconPreview .fn2{top:55px;left:68px}
/* Mobile Icon Preview */
.x .mobiconPreview{position:relative;padding:252px 0 0 200px;background:url(../img/bgMobileTop.png) no-repeat}
.x .mobiconPreview img{position:absolute;top:20px;left:10px}
.x .mobiconPreview span{position:absolute;width:32px;text-align:center;top:52px;left:10px;color:#fff;font-size:9px}
/* Text List */
.x .textList{border:1px solid #ddd !important;line-height:1.5em;height:18.5em;overflow:auto}
.x .textList li{border:0;padding:.25em 1em;height:1.5em;white-space:nowrap;overflow:hidden}
.x .textList li:nth-child(even){background:#eee}
.x .textList li a{float:right}
/* File Box */
.x .fileBox li{position:relative}
.x .fileBox li img{max-width:100%}
.x .fileBox .portlet ul{margin:1em;list-style:none;padding:0;border:0}
.x .fileBox .portlet li{border-top:1px solid #ddd;border-bottom:0;padding:8px 0}
.x .fileBox .side{position:absolute;top:8px;right:0}
/* Messages */
.x .desc.error{color:#f00}
.x .desc.success{color:#080}
/* Icon Button */
.x a.iSetting{display:inline-block;width:16px;height:0;padding:16px 0 0 0;overflow:hidden;vertical-align:middle;background:url(../img/iconSetting.gif) no-repeat}
.x a.cMenu{display:inline-block;width:16px;height:0;padding:16px 0 0 0;overflow:hidden;vertical-align:middle;background:url(../../../../common/img/icon.bubble.png) no-repeat}
/* Responsive Layout */
@media only all and (max-width:860px){
.x .header h1{margin-left:.7em}
.x .header .account ul{padding-right:10px}
.x .body{padding:0}
.x .content{float:none;margin-left:0}
.x .lnb{float:none;width:auto;margin:1em 0}
.x .dashboard .portlet{float:none !important;width:auto !important;margin-right:0}
.modal .fg,
.wfsr .fg{width:auto}
.x .easyNav .category{float:none;display:block;width:auto}
.x .easyNav .filter{position:static}
}
@media only all and (max-width:640px){
.x .skipNav a{position:relative;width:auto;height:auto}
.modal{position:absolute}
}
/* Legacy Code (Don't use it. It will be removed as soon as possible.) */
.x h3.xeAdmin,
.x h4.xeAdmin{position:relative;border-bottom-style:solid;border-bottom-color:#ccc;zoom:1}
.x h3.xeAdmin{border-bottom-width:4px;font-size:24px}
.x h4.xeAdmin{border-bottom-width:3px;font-size:20px}
.x h5.xeAdmin{border-bottom-width:2px;font-size:16px}
.x h6.xeAdmin{border-bottom-width:1px;font-size:12px}
.x .adminSearch{margin:1em 0}
.x .adminSearch fieldset{border:1px solid #ccc;margin:0;padding:.5em 1em}
.x .localNavigation{padding:0;list-style:none}
.x .localNavigation li{display:inline}
.x .localNavigation li.on a{font-weight:bold;color:#333;text-decoration:none}
.x .localNavigation li:before{content:"| "}
.x .localNavigation li:first-child:before{content:""}
.x .summary{margin:1em 0}
.x .rowTable,
.x .colTable,
.x .crossTable{margin:1em 0;border:0;border-collapse:collapse;border-top:2px solid #ccc;width:100%}
.x .rowTable caption,
.x .colTable caption,
.x .crossTable caption{font-weight:bold;text-align:left;line-height:22px;padding:5px 0}
.x .rowTable caption:after,
.x .colTable caption:after,
.x .crossTable caption:after{content:"";display:block;clear:both}
.x .rowTable caption a,
.x .colTable caption a,
.x .crossTable caption a{font-weight:normal}
.x .rowTable caption em,
.x .colTable caption em,
.x .crossTable caption em{float:right;font-style:normal;font-weight:normal;color:#e00;margin-left:1em}
.x .rowTable caption strong,
.x .colTable caption strong,
.x .crossTable caption strong{color:#e00}
.x .rowTable caption .side,
.x .colTable caption .side,
.x .crossTable caption .side{float:right;font-weight:normal;margin-left:1em}
.x .rowTable th,
.x .rowTable td,
.x .colTable th,
.x .rowTable td,
.x .crossTable th,
.x .rowTable td{border:0;padding:8px;vertical-align:top;text-align:left;border-bottom:1px solid #ddd}
.x .rowTable th,
.x .colTable th,
.x .crossTable th{background:#f8f8f8;white-space:nowrap}
.x .rowTable thead th,
.x .colTable thead th,
.x .crossTable thead th{border-bottom:1px solid #999}
.x .rowTable tfoot td,
.x .colTable tfoot td,
.x .crossTable tfoot td{font-weight:bold;background:#f8f8f8}
.x .rowTable.even tbody tr:nth-of-type(even) td,
.x .colTable.even tbody tr:nth-of-type(even) td,
.x .crossTable.even tbody tr:nth-of-type(even) td{background-color:#fafafa}
.x .rowTable td>input[type=text],
.x .colTable td>input[type=text],
.x .crossTable td>input[type=text]{margin:-1px 0 -3px 0 !important;vertical-align:middle}
.x .rowTable img,
.x .colTable img,
.x .crossTable img{vertical-align:middle}
.x .rowTable .title,
.x .colTable .title,
.x .crossTable .title,
.x .rowTable .text,
.x .colTable .text,
.x .crossTable .text{white-space:normal}
.x .rowTable input[type=text],
.x .colTable input[type=text],
.x .crossTable input[type=text],
.x .rowTable input[type=password],
.x .colTable input[type=password],
.x .crossTable input[type=password],
.x .rowTable input[type=file],
.x .colTable input[type=file],
.x .crossTable input[type=file],
.x .rowTable textarea,
.x .colTable textarea,
.x .crossTable textarea{position:relative;width:280px;margin:2px 0;border:1px solid #b7b7b7;border-right-color:#e1e1e1;border-bottom-color:#e1e1e1;background:transparent}
.x .rowTable input[type=text],
.x .colTable input[type=text],
.x .crossTable input[type=text],
.x .rowTable input[type=password],
.x .colTable input[type=password],
.x .crossTable input[type=password],
.x .rowTable input[type=file],
.x .colTable input[type=file],
.x .crossTable input[type=file]{height:22px;line-height:22px;vertical-align:middle;padding:0 4px}
.x .clear:after{content:"";display:block;clear:both}

1
modules/admin/tpl/css/admin.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,7 @@
@charset "utf-8";
.x,
.x table,
.x input,
.x textarea,
.x select,
.x button{font-family:"MS PGothic",Osaka,Arial,sans-serif}

View file

@ -0,0 +1,7 @@
@charset "utf-8";
.x,
.x table,
.x input,
.x textarea,
.x select,
.x button{font-family:,NanumGothic,"맑은 고딕","Malgun Gothic",AppleGothic,,Dotum,,Gulim,sans-serif}

View file

@ -1,123 +0,0 @@
/* Dashboard Header */
.dashboardHeader{ position:relative; padding:29px 0 23px 0; border-bottom:2px solid #cbd4df; background:url(../img/iconH3dashboard.gif) no-repeat left center;}
.dashboardHeader .h3{ font-size:18px; text-indent:50px; margin:0;}
/* Dashboard Notice */
.dashboardNotice{ padding:10px 0 0 0;}
.dashboardNotice .h4{ margin:0 0 12px 0; color:#ea3f22; font-size:11px;}
.dashboardNotice button{ position:absolute; top:10px; right:0; font-size:11px; color:#8b8b8b; padding:0 0 0 10px; text-align:right; border:0; background-color:transparent; background-image:url(../img/iconDashboardNoticeOpen.gif); background-repeat:no-repeat; background-position:left -25px; cursor:pointer; *zoom:1; overflow:visible;}
.dashboardNotice.open button{ background-position:left 5px;}
.dashboardNotice ul{ height:0; margin:0; padding:0; list-style:none; font-size:12px; line-height:1;}
.dashboardNotice.open ul{ height:auto; padding:10px 0 5px 9px; border-top:1px solid #ededed;}
.dashboardNotice li{ display:none; margin:0 0 7px 0; padding:0 0 0 13px; background:url(../img/iconDashboardSummary.gif) no-repeat left center;}
.dashboardNotice li.first{ position:absolute; top:11px; left:90px; display:block; background:none; padding:0; margin:0;}
.dashboardNotice li.first .date{ display:none;}
.dashboardNotice.open li{ display:block;}
.dashboardNotice.open li.first{ position:static; margin:0 0 7px 0; padding:0 0 0 13px; background:url(../img/iconDashboardSummary.gif) no-repeat left center;}
.dashboardNotice li a{ text-decoration:none; color:#555; margin-right:15px;}
.dashboardNotice li a:hover,
.dashboardNotice li a:active,
.dashboardNotice li a:focus{ text-decoration:underline;}
.dashboardNotice li .date{ color:#8b8b8b; font-size:11px;}
.dashboardNotice.open li.first .date{ display:inline;}
/* Dashboard Statistic */
.dashboardStatistic{ position:relative; width:100%; height:183px; _height:189px; *zoom:1; margin-bottom:30px;}
.dashboardStatistic .statistic{ position:relative; height:138px; padding:20px 20px 25px 20px; background:url(../img/bgDashboardStatistic.gif) repeat-x left top; font-size:12px; line-height:1;}
.dashboardStatistic .statistic:after{ content:""; display:block; clear:both;}
.dashboardStatistic .outline{position:absolute; overflow:hidden; font-size:0; line-height:0; background-image:url(../img/bgDashboardStatistic.gif);}
.dashboardStatistic .outline.ml{ top:0; left:-2px; width:4px; height:100%; background-position:left -300px; background-repeat:no-repeat;}
.dashboardStatistic .outline.mr{ top:0; right:-2px; width:4px; height:100%; background-position:right -300px; background-repeat:no-repeat;}
.dashboardStatistic .outline.tc{ top:0; left:0; width:100%; height:3px; background-position:left -600px; background-repeat:repeat-x;}
.dashboardStatistic .outline.bc{ bottom:0; left:0; width:100%; height:5px; background-position:left bottom; background-repeat:repeat-x;}
.dashboardStatistic .outline.tl{ top:0; left:-2px; width:4px; height:3px; background-position:left -603px; background-repeat:no-repeat;}
.dashboardStatistic .outline.tr{ top:0; right:-2px; width:4px; height:3px; background-position:right -603px; background-repeat:no-repeat;}
.dashboardStatistic .outline.bl{ bottom:0; left:-2px; width:4px; height:5px; background-position:left -606px; background-repeat:no-repeat;}
.dashboardStatistic .outline.br{ bottom:0; right:-2px; width:4px; height:5px; background-position:right -606px; background-repeat:no-repeat;}
.dashboardStatistic .statistic h4{ font-size:12px; height:22px; width:67%; margin:0 0 10px 0; background:url(../img/bgDashboardStatisticHeader.gif) repeat-x 0 -22px; text-align:center;}
.dashboardStatistic .statistic h4 span{ display:block; height:18px; padding-top:4px; margin:0 1px; color:#747482; background:url(../img/bgDashboardStatisticHeader.gif) repeat-x;}
.dashboardStatistic .statistic h4 em{ font-style:normal; font-size:9px; color:#b7b7c4; margin-left:5px;}
.dashboardStatistic dl{ position:relative; float:left; height:100px; margin:0; background:url(../img/vrDashboardStatistic.gif) no-repeat left center;}
.dashboardStatistic dt { position:absolute; width:0; height:0; overflow:hidden; font-size:0; line-height:0; visibility:hidden;}
.dashboardStatistic dd { position:absolute; margin:0; padding-top:40px; width:100%; text-align:center; background-image:url(../img/iconDashboardStatistic.gif); background-repeat:no-repeat; font-size:56px; font-weight:bold;}
.dashboardStatistic dd object,
.dashboardStatistic dd embed{ vertical-align:top;}
.dashboardStatistic dl.visit{ background:none; width:28%;}
.dashboardStatistic dl.visit dd{ background-position:center 5px; color:#e3391d ;}
.dashboardStatistic dl.reply { background:none; width:22%;}
.dashboardStatistic dl.reply dd{ background-position:center -195px; color:#28313d;}
.dashboardStatistic dl.trackback { background:none; width:15%;}
.dashboardStatistic dl.trackback dd{ background-position:center -395px; color:#4e4f54;}
.dashboardStatistic .summary{ float:right; width:30%; margin-top:-27px;}
.dashboardStatistic .summary caption{ position:relative; padding-bottom:20px; text-align:left; font-size:12px; line-height:1; font-weight:bold; color:#626972;}
.dashboardStatistic .summary table,
.dashboardStatistic .summary th,
.dashboardStatistic .summary td{ border-spacing:0; border:0; font-weight:normal; text-align:left;}
.dashboardStatistic .summary table{ width:100%; border-bottom:1px solid #e3e6e6;}
.dashboardStatistic .summary th,
.dashboardStatistic .summary td{ padding-top:6px; padding-bottom:6px; border-top:1px solid #e3e6e6; vertical-align:top;}
.dashboardStatistic .summary th{ padding-left:18px; padding-right:12px; white-space:nowrap; color:#8b8b8b; background:url(../img/iconDashboardSummary.gif) no-repeat 2px 9px;}
.dashboardStatistic .summary td{ color:#555;}
.dashboardStatistic .summary td strong{ font-size:11px; color:#ea3f22;}
.dashboardStatistic .summary td .description{ color:#8b8b8b;}
.dashboardStatistic .summary td .description strong{ color:#8b8b8b;}
/* Dashboard Wire */
.dashboardH4{ margin:0 0 7px 0; font-size:14px; color:#555;}
.dashboardH4 a { font-size:11px; color:#b1b1b1; font-style:normal; margin-left:5px;}
.dashboardH4 em{ font-size:11px; color:#b1b1b1; font-style:normal; margin-left:5px;}
.dashboardMoreTop{ position:absolute; top:4px; right:0; padding-left:7px; font-size:11px; display:block; white-space:nowrap; color:#8a919a; text-decoration:none; background:url(../img/iconMoreTop.gif) no-repeat left center;}
.dashboardWire{ position:relative; margin-bottom:40px; border-top:2px solid #cbd4df; border-left:1px solid #e3e5e7; border-right:1px solid #e3e5e7; border-bottom:1px solid #f1f1f1; background:#fff; *border-bottom:1px solid #d0d1d2; *zoom:1; *filter:progid:DXImageTransform.Microsoft.dropshadow(OffX='0', OffY='1', Color='#f1f1f1', positive='true');}
.dashboardWire:after{ content:""; display:block; height:1px; background:#d0d1d2; overflow:hidden;}
.dashboardWire .buttonArea{ padding:8px 14px; background:#fafafa; border-top:1px solid #e3e5e7; text-align:right; position:relative;}
.dashboardWire ul{ position:relative; list-style:none; margin:0; padding:0; font-size:12px; overflow:hidden;}
.dashboardWire li{ position:relative; top:-1px; border-top:1px solid #e3e5e7;}
.dashboardWire blockquote{ margin:0;}
.dashboardWire .noData{ color:#767676; padding:0 2em;}
.dashboardWire .legend{ position:absolute; top:15px; left:20px; margin:0; white-space:nowrap; font-size:12px;}
.dashboardWire .legend *{ display:inline;}
.dashboardWire .legend dt img{ border:1px solid;}
.dashboardWire .legend dt.past img{ border-color:#c3d1db;}
.dashboardWire .legend dt.today img{ border-color:#dc3835;}
.dashboardWire .legend dd{ font-size:11px; color:#b1b1b1; margin:0 5px 0 0;}
.dashboardWire .summary{ position:absolute; top:15px; right:20px; margin:0; white-space:nowrap; font-size:12px;}
.dashboardWire .summary *{ display:inline;}
.dashboardWire .summary dt{ margin-left:10px; color:#555;}
.dashboardWire .summary dd{ margin:0; font-size:11px; font-weight:bold; color:#ea3f22;}
.dashboardWire .graph{ position:relative; height:131px; padding-top:63px; margin:0 20px 26px 20px; background:url(../img/bgDashboardGraph.gif) repeat-x 0 63px;}
.dashboardWire .graph:after{ content:""; display:block; clear:both;}
.dashboardWire .graph dl{ position:relative; float:left; width:10%; height:100%; margin:0 2%; *margin:0 1.8%; _margin:0 2% 0 1.1%;}
.dashboardWire .graph dl dt{ position:absolute; width:100%; text-align:center; font-size:9px; bottom:-16px; color:#707070;}
.dashboardWire .graph dl dd{ position:absolute; bottom:6px; width:30%; margin:0; border:1px solid; font-size:0; line-height:0; overflow:hidden;}
.dashboardWire .graph dl dd.past{ left:0; border-color:#c3d1db; background:#d0dde5;}
.dashboardWire .graph dl dd.today{ right:0; border-color:#dc3835; background:#fe5656;}
.dashboardWire .graph dl dd span{ position:relative; width:0; height:0; font-size:0; line-height:0; overflow:hidden; z-index:-1; visibility:hidden;}
.dashboardWire .graph object,
.dashboardWire .graph embed{ margin-top:-20px;}
.dashboardWire a{ text-decoration:none; color:#648AB9;}
.dashboardWire a:hover,
.dashboardWire a:active,
.dashboardWire a:focus{ text-decoration:underline;}
.section table,
.section th,
.section td{ border-spacing:0; border:0; font-weight:normal; text-align:left;}
.section table{ width:100%; border-bottom:1px solid #e3e6e6;}
.section th,
.section td{ padding-top:6px; padding-bottom:6px; border-top:1px solid #e3e6e6; vertical-align:top;}
.section th{ padding-left:18px; padding-right:12px; color:#8b8b8b; background:url(../img/iconDashboardSummary.gif) no-repeat 2px 9px;}
.section td{ color:#555;}
.section td strong{ font-size:11px; color:#ea3f22;}
.section td.center { text-align:center;}
.section td .description{ color:#8b8b8b;}
.section td .description strong{ color:#8b8b8b;}
.section thead th{ background:none; background-color:#efefef; font-weight:bold; padding:6px 5px 6px 5px; }

View file

@ -1,60 +0,0 @@
@charset "utf-8";
/* NHN (developers@xpressengine.com) */
#xeAdmin{ font-family:Sans-serif;}
#xeAdmin a{ text-decoration:none !important;}
#xeAdmin a:hover,
#xeAdmin a:active,
#xeAdmin a:focus{ text-decoration:underline !important;}
#xeAdmin h1.xeAdmin a{ text-decoration:none !important; font-family:Arial; font-size:16px; color:#fff; margin:0; padding:0;}
#xeAdmin table th{ color:#666;}
#xeAdmin table th a { color:#666;}
#xeAdmin table td{ color:#767676;}
#xeAdmin table td a { color:#767676;}
#xeAdmin caption{ font-size:11px; font-family:Tahoma; color:#767676;}
#xeAdmin div.summary { font-size:11px; font-family:Tahoma; color:#767676;}
#xeAdmin div.summary strong { font-weight:normal; }
#xeAdmin button.text{ font-size:12px;}
#xeAdmin em,
#xeAdmin address{ font-style:normal;}
#xeAdmin select{ font-size:12px;}
#xeAdmin input{ font-size:12px;}
#xeAdmin .buttonTypeGo{ padding:0; cursor:pointer;}
#xeAdmin .footer address{ font:10px Tahoma;}
#xeAdmin .footer address a{ color:#777e86; }
#xeAdmin .gnb li a { color:#777e86; font-size:11px; font-family:Tahoma;}
#adminLang li a{ font-size:12px;}
#xeAdmin .lnb li,
#xeAdmin .lnb li a{ color:#fff; font-size:14px; font-family:Dotum, Tahoma;}
#xeAdmin .path{ color:#ccc; font-size:11px;}
#xeAdmin .path a{ color:#767676; font-size:11px; font-family:Dotum, Sans-serif;}
.e1 .navigation li a{ color:#000; text-decoration:none;}
.e1 .navigation li ul li a{ color:#767676;}
.e1 .navigation li ul li.active a{ font-weight:bold; color:#666;}
.e2 .section h2.xeAdmin { font-size:12px; margin:0; padding:0;}
.e2 .section h2.xeAdmin .date{ font:Tahoma; color:#999;}
.e2 table tbody th{ font-weight:normal; font-family:Dotum;}
.e2 .notice li a{ color:#666; }
.e2 .notice li .date{ color:#767676; font:10px Tahoma;}
.localNavigation li a{ text-decoration:none !important; color:#666;}
.localNavigation li.active a{ font-weight:bold; color:#1e6aac;}
#xeAdmin h2.xeAdmin { font-size:12px;}
#xeAdmin h3.xeAdmin { font-size:12px; color:#666; margin:0; padding:0;}
#xeAdmin p.summary{ color:#767676;}
#xeAdmin p.summary a { text-decoration:none; color:#767676; }
#xeAdmin p.summary.red { color:#A54D4D; }
#xeAdmin p.summary.red a { text-decoration:none; color:#A54D4D; }
#xeAdmin div.infoText { color:#767676;}
#xeAdmin div.infoText p.warning{ margin:0 0 10px 0; padding:0 0 0 25px; background:url(../img/iconWarning.gif) no-repeat left top;}
#xeAdmin div.infoText p.update{ margin:0 0 10px 0; padding:0 0 0 25px; background:url(../img/iconRefresh.gif) no-repeat left top;}
#xeAdmin .buttonAction{}

View file

@ -1,47 +0,0 @@
@charset "utf-8";
/* NHN (developers@xpressengine.com) */
#xeAdmin .header{ position:relative; height:62px; padding:10px 15px 10px 30px; background:url(../img/bgHeader.gif) repeat-x; z-index:10;}
#xeAdmin .footer{ height:26px; padding-top:10px; background:url(../img/bgFooter.gif) repeat-x; text-align:center;}
#xeAdmin .gnb{ position:relative; float:right; white-space:nowrap; clear:right; margin:0; padding:0;}
#xeAdmin .gnb li{ position:relative; float:left; margin:0 15px 0 0; padding:0;list-style:none;}
#xeAdmin .gnb #adminLang { position:absolute; top:18px; right:0; display:none; background:#fff; margin:0; padding:5px; border:1px solid #ddd; z-index:999;}
#xeAdmin .gnb #adminLang li{ float:none; margin:0;}
.body{ position:relative; margin:0; padding:0 0 0 200px; background:url(../img/lineBody.gif) repeat-y 180px 0; *zoom:1;}
.body:after {content:""; display:block; clear:both;}
.c .body { padding:20px; background:none; }
.ece .body {padding-right:340px;}
.ec .body {padding-right:20px;}
.extension{ position:relative;}
.body .e1 { float:left; width:180px; margin-right:-180px; left:-200px;}
.content { position:relative; width:100%; margin-right:-100%; float:left; padding:0;}
.ec .content { padding-top:10px; }
.c .e1, .c .e2 { display:none; }
.ece .e2 { width:300px; float:right; right:-320px; border-left:1px solid #ddd; padding-bottom:20px;}
.ec .e2 { display:none;}
#xeAdmin .lnb { position:relative; left:-3px; float:left; clear:left; margin:5px 0 0 0; padding:0;}
#xeAdmin .lnb li,
#xeAdmin .lnb li a{ position:relative; float:left; background:url(../img/buttonLNB.gif) no-repeat; white-space:nowrap;}
#xeAdmin .lnb li{ margin:0 1px 0 0; padding:0;list-style:none; background-position:0 0;}
#xeAdmin .lnb li a{ left:1px; height:30px; padding:10px 15px 0 15px; text-decoration:none !important; background-position:right 0;}
#xeAdmin .lnb li.core{ margin-right:6px; background-position:0 -50px;}
#xeAdmin .lnb li.core a{ padding-right:20px; left:5px; background-position:right -50px;}
#xeAdmin .lnb li.first{ background-position:0 -50px; margin-right:5px;}
#xeAdmin .lnb li.first a{ left:5px;}
#xeAdmin .lnb li.end{}
#xeAdmin .lnb li.end a{ padding-right:20px; background-position:right -50px;}
#xeAdmin .lnb li.core.selected { background-position:0 -150px;}
#xeAdmin .lnb li.core.selected a{ background-position:right -150px;}
#xeAdmin .lnb li.first.selected { background-position:0 -150px;}
#xeAdmin .lnb li.first.selected a{ background-position:right -100px;}
#xeAdmin .lnb li.mid.selected { background-position:0 -100px;}
#xeAdmin .lnb li.mid.selected a{ background-position:right -100px;}
#xeAdmin .lnb li.end.selected { background-position:0 -100px;}
#xeAdmin .lnb li.end.selected a{ background-position:right -150px;}
#xeAdmin .path{ padding:0 0 0 25px; margin:0 0 20px 0; background:url(../img/iconPath.gif) no-repeat left center;}

View file

@ -1,85 +0,0 @@
@charset "utf-8";
/* NHN (developers@xpressengine.com) */
/* Pagination Reset */
#xeAdmin .pagination{ padding:15px 0; margin:0; text-align:center; clear:both; }
#xeAdmin .pagination *{ margin:0; padding:0;}
#xeAdmin .pagination img{ border:0;}
#xeAdmin .pagination a,
#xeAdmin .pagination strong{ position:relative; display:inline-block; text-decoration:none; line-height:normal; color:#333; font-family:Tahoma, Sans-serif; vertical-align:middle;}
#xeAdmin .pagination a:hover,
#xeAdmin .pagination a:active,
#xeAdmin .pagination a:focus{ background-color:#f4f4f4 !important; }
#xeAdmin .pagination strong{ color:#ff6600 !important;}
#xeAdmin .pagination a.prev,
#xeAdmin .pagination a.prevEnd,
#xeAdmin .pagination a.next,
#xeAdmin .pagination a.nextEnd{ font-weight:normal !important; border:none !important; margin:0 !important; white-space:nowrap; }
/* Pagination A1 */
#xeAdmin .pagination.a1 a,
#xeAdmin .pagination.a1 strong{ margin:0 -4px; padding:1px 10px 1px 8px; border:none; border-left:1px solid #ccc; border-right:1px solid #ddd; font-weight:bold; font-size:12px; background:#fff;}
#xeAdmin .pagination.a1 a.prev{ padding-left:10px; background:#fff url(../img/arrowPrevA1.gif) no-repeat left center; }
#xeAdmin .pagination.a1 a.prevEnd{ padding-left:15px; background:#fff url(../img/arrowPrevEndA1.gif) no-repeat left center; }
#xeAdmin .pagination.a1 a.next{ padding-right:10px; background:#fff url(../img/arrowNextA1.gif) no-repeat right center; }
#xeAdmin .pagination.a1 a.nextEnd{ padding-right:15px; background:#fff url(../img/arrowNextEndA1.gif) no-repeat right center; }
/* Pagination A2 */
#xeAdmin .pagination.a2 a,
#xeAdmin .pagination.a2 strong{ margin:0 -4px; padding:0 10px 0 8px; font-weight:bold; font-size:11px; border:none; border-left:1px solid #ddd; border-right:1px solid #ccc; background:#fff; }
#xeAdmin .pagination.a2 a.prev{ padding-left:10px; background:#fff url(../img/arrowPrevA1.gif) no-repeat left center; }
#xeAdmin .pagination.a2 a.prevEnd{ padding-left:15px; background:#fff url(../img/arrowPrevEndA1.gif) no-repeat left center; }
#xeAdmin .pagination.a2 a.next{ padding-right:10px; background:#fff url(../img/arrowNextA1.gif) no-repeat right center; }
#xeAdmin .pagination.a2 a.nextEnd{ padding-right:15px; background:#fff url(../img/arrowNextEndA1.gif) no-repeat right center; }
/* Pagination B1 */
#xeAdmin .pagination.b1 a,
#xeAdmin .pagination.b1 strong{ margin:0 -2px; padding:2px 8px; font-weight:bold; font-size:12px;}
#xeAdmin .pagination.b1 a.prev,
#xeAdmin .pagination.b1 a.prevEnd{ padding-left:16px; background:url(../img/arrowPrevB1.gif) no-repeat left center; }
#xeAdmin .pagination.b1 a.next,
#xeAdmin .pagination.b1 a.nextEnd{ padding-right:16px; background:url(../img/arrowNextB1.gif) no-repeat right center; }
/* Pagination B2 */
#xeAdmin .pagination.b2 a,
#xeAdmin .pagination.b2 strong{ margin:0 -2px; padding:2px 6px; font-size:11px;}
#xeAdmin .pagination.b2 a.prev,
#xeAdmin .pagination.b2 a.prevEnd{ padding-left:12px; background:url(../img/arrowPrevB1.gif) no-repeat left center; }
#xeAdmin .pagination.b2 a.next,
#xeAdmin .pagination.b2 a.nextEnd{ padding-right:12px; background:url(../img/arrowNextB1.gif) no-repeat right center; }
/* Pagination C1 */
#xeAdmin .pagination.c1 a,
#xeAdmin .pagination.c1 strong{ margin:0 -2px; padding:2px 4px; font-size:12px;}
#xeAdmin .pagination.c1 a.prev,
#xeAdmin .pagination.c1 a.prevEnd,
#xeAdmin .pagination.c1 a.next,
#xeAdmin .pagination.c1 a.nextEnd{ display:inline-block; width:13px; height:14px; padding:3px 4px; margin:0;}
#xeAdmin .pagination.c1 a.prev,
#xeAdmin .pagination.c1 a.prevEnd{ background:url(../img/arrowPrevC1.gif) no-repeat center;}
#xeAdmin .pagination.c1 a.next,
#xeAdmin .pagination.c1 a.nextEnd{ background:url(../img/arrowNextC1.gif) no-repeat center;}
#xeAdmin .pagination.c1 a.prev span,
#xeAdmin .pagination.c1 a.prevEnd span,
#xeAdmin .pagination.c1 a.next span,
#xeAdmin .pagination.c1 a.nextEnd span{ position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;}
/* Pagination C2 */
#xeAdmin .pagination.c2 a,
#xeAdmin .pagination.c2 strong{ margin:0 -2px; padding:2px 4px; font-size:11px;}
#xeAdmin .pagination.c2 a.prev,
#xeAdmin .pagination.c2 a.prevEnd,
#xeAdmin .pagination.c2 a.next,
#xeAdmin .pagination.c2 a.nextEnd{ display:inline-block; width:13px; height:14px; padding:3px 4px; margin:0;}
#xeAdmin .pagination.c2 a.prev,
#xeAdmin .pagination.c2 a.prevEnd{ background:url(../img/arrowPrevC1.gif) no-repeat center;}
#xeAdmin .pagination.c2 a.next,
#xeAdmin .pagination.c2 a.nextEnd{ background:url(../img/arrowNextC1.gif) no-repeat center;}
#xeAdmin .pagination.c2 a.prev span,
#xeAdmin .pagination.c2 a.prevEnd span,
#xeAdmin .pagination.c2 a.next span,
#xeAdmin .pagination.c2 a.nextEnd span{ position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;}

View file

@ -1,7 +1,7 @@
<filter name="install_ftp_info" module="install" act="procInstallAdminSaveFTPInfo" >
<form>
<node target="ftp_user" required="true" />
<node target="ftp_port" required="true" />
<node target="ftp_port" required="false" filter="number" />
<node target="ftp_root_path" required="true" />
<node target="sftp" />
</form>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 588 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 B

Some files were not shown because too many files have changed in this diff Show more