virtual site + homepage package 추가. 아직 미완성 버전이므로 서비스 반영하지 말아주세요. 테스트중

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4871 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-11-17 10:45:57 +00:00
parent c5dbc3405c
commit e745b70268
171 changed files with 5243 additions and 274 deletions

View file

@ -3,11 +3,8 @@
* @class Context
* @author zero (zero@nzeo.com)
* @brief Request Argument/환경변수등의 모든 Context를 관리
*
* Context 클래스는 Context::methodname() 처럼 쉽게 사용하기 위해 만들어진 객체를 받아서
* 호출하는 구조를 위해 이중 method 구조를 가지고 있다.
* php5에서 static variables를 사용하게 된다면 불필요한 구조를 제거할 있다.
* php5 쓰고 싶당.. .
**/
define('FOLLOW_REQUEST_SSL',0);
@ -35,7 +32,6 @@
/**
* @brief 언어 정보
*
* 기본으로 ko. HTTP_USER_AGENT나 사용자의 직접 세팅(쿠키이용)등을 통해 변경됨
**/
var $lang_type = ''; ///< 언어 종류
@ -50,7 +46,6 @@
/**
* @brief 유일한 Context 객체를 반환 (Singleton)
*
* Context는 어디서든 객체 선언없이 사용하기 위해서 static 하게 사용
**/
function &getInstance() {
@ -61,9 +56,7 @@
/**
* @brief DB정보, Request Argument등을 세팅
*
* Context::init() 한번만 호출되어야 하며 init()시에
* Request Argument, DB/언어/세션정보등의 모든 정보를 세팅한다
* Context::init() 한번만 호출되어야 하며 init()시에 Request Argument, DB/언어/세션정보등의 모든 정보를 세팅한다
**/
function init() {
// context 변수를 $GLOBALS의 변수로 지정
@ -114,6 +107,11 @@
// 인증 관련 정보를 Context와 세션에 설정
if(Context::isInstalled()) {
// site_module_info를 구함
$oModuleModel = &getModel('module');
$site_module_info = $oModuleModel->getDefaultMid();
Context::set('site_module_info', $site_module_info);
// 인증관련 데이터를 Context에 설정
$oMemberModel = &getModel('member');
$oMemberController = &getController('member');
@ -665,15 +663,20 @@
/**
* @brief 요청받은 url에 args_list를 적용하여 return
**/
function getUrl($num_args=0, $args_list=array()) {
function getUrl($num_args=0, $args_list=array(), $domain = null) {
$oContext = &Context::getInstance();
return $oContext->_getUrl($num_args, $args_list);
return $oContext->_getUrl($num_args, $args_list, $domain);
}
/**
* @brief 요청받은 url에 args_list를 적용하여 return
**/
function _getUrl($num_args=0, $args_list=array()) {
function _getUrl($num_args=0, $args_list=array(), $domain = null) {
if($domain) {
$domain = preg_replace('/^(http|https):\/\//i','', trim($domain));
if(substr($domain,-1) != '/') $domain .= '/';
}
if(!$this->get_vars || $args_list[0]=='') {
$get_vars = null;
if($args_list[0]=='') {
@ -698,11 +701,16 @@
if($get_vars['act'] == 'dispMemberFriend') $get_vars['act'] = 'dispCommunicationFriend';
elseif($get_vars['act'] == 'dispMemberMessages') $get_vars['act'] = 'dispCommunicationMessages';
$var_count = count($get_vars);
if(!$var_count) return '';
if(!$domain) {
if($get_vars['act'] && $this->isExistsSSLAction($get_vars['act'])) $path = $this->getRequestUri(ENFORCE_SSL);
else $path = $this->getRequestUri(RELEASE_SSL);
} else {
if($get_vars['act'] && $this->isExistsSSLAction($get_vars['act'])) $path = 'https://'.$domain;
else $path = 'http://'.$domain;
}
if($get_vars['act'] && $this->isExistsSSLAction($get_vars['act'])) $path = $this->getRequestUri(ENFORCE_SSL);
else $path = $this->getRequestUri(RELEASE_SSL);
$var_count = count($get_vars);
if(!$var_count) return $path;
// rewrite모듈을 사용할때 getUrl()을 이용한 url 생성
if($this->allow_rewrite) {
@ -768,6 +776,10 @@
* @brief 요청이 들어온 URL에서 argument를 제거하여 return
**/
function getRequestUri($ssl_mode = FOLLOW_REQUEST_SSL) {
static $url = array();
if(isset($url[$ssl_mode])) return $url[$ssl_mode];
switch($ssl_mode) {
case FOLLOW_REQUEST_SSL :
if($_SERVER['HTTPS']=='on') $use_ssl = true;
@ -781,7 +793,16 @@
break;
}
return sprintf("%s://%s%s",$use_ssl?'https':'http',$_SERVER['HTTP_HOST'], getScriptPath());
$site_module_info = Context::get('site_module_info');
$domain = trim($site_module_info->domain);
if($domain) {
$domain = preg_replace('/^(http|https):\/\//i','', trim($domain));
if(substr($domain,-1) != '/') $domain .= '/';
} else $domain = $_SERVER['HTTP_HOST'].getScriptPath();
$url[$ssl_mode] = sprintf("%s://%s",$use_ssl?'https':'http',$domain);
return $url[$ssl_mode];
}
/**

View file

@ -307,7 +307,7 @@
break;
case 'number' :
case 'numbers' :
if(!preg_match('/^[0-9,]+$/is', $val)) return new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key}?$lang->{$key}:$key));
if(!preg_match('/^(-?)[0-9,]+$/is', $val)) return new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key}?$lang->{$key}:$key));
break;
case 'alpha' :
if(!preg_match('/^[a-z]+$/is', $val)) return new Object(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key}?$lang->{$key}:$key));

View file

@ -248,6 +248,15 @@
$this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf("drop %s index %s on %s%s", $is_unique?'unique':'', $index_name, $this->prefix, $table_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/

View file

@ -418,6 +418,15 @@
@ibase_commit($this->fd);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf('DROP INDEX "%s" ON "%s%s"', $index_name, $this->prefix, $table_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/

View file

@ -260,6 +260,15 @@
$this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf("alter table %s%s drop index %s;", $this->prefix, $table_name, $index_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/

View file

@ -270,6 +270,14 @@
$this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf("alter table %s%s drop index %s;", $this->prefix, $table_name, $index_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/

View file

@ -249,6 +249,20 @@
$this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
if(strpos($table_name,$this->prefix)===false) $table_name = $this->prefix.$table_name;
// index_name의 경우 앞에 table이름을 붙여줘서 중복을 피함
$index_name = $table_name.$index_name;
$query = sprintf("drop index %s", $index_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/

View file

@ -242,6 +242,15 @@
return $this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("DROP INDEX %s", $this->prefix, $table_name, $key_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/

View file

@ -265,6 +265,15 @@
$this->_execute();
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("DROP INDEX %s", $this->prefix, $table_name, $key_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/

View file

@ -73,6 +73,9 @@
// ModuleModel 객체 생성
$oModuleModel = &getModel('module');
$site_module_info = Context::get('site_module_info');
$site_srl = $site_module_info->site_srl;
// document_srl만 있을 경우 document_srl로 모듈과 모듈 정보를 구함
if($this->document_srl && !$this->mid && !$this->module_srl) {
$module_info = $oModuleModel->getModuleInfoByDocumentSrl($this->document_srl);
@ -81,10 +84,18 @@
// 아직 모듈을 못 찾았고 $mid값이 있으면 $mid로 모듈을 구함
if(!$module_info && $this->mid) {
$module_info = $oModuleModel->getModuleInfoByMid($this->mid);
$module_info = $oModuleModel->getModuleInfoByMid($this->mid, $site_srl);
if($this->module && $module_info->module != $this->module) unset($module_info);
}
// 모듈정보와 사이트 모듈정보가 다르면(다른 사이트이면) 페이지 리다이렉트
if($module_info && $site_module_info && $module_info->site_srl != $site_module_info->site_srl) {
$site_info = $oModuleModel->getSiteInfo($module_info->site_srl);
$redirect_url = getSiteUrl($site_info->domain, 'mid',Context::get('mid'),'document_srl',Context::get('document_srl'),'module_srl',Context::get('module_srl'));
header("location:".$redirect_url);
return false;
}
// 모듈을 여전히(;;) 못 찾고 $module_srl이 있으면 해당 모듈을 구함
if(!$module_info && $this->module_srl) {
$module_info = $oModuleModel->getModuleInfoByModuleSrl($this->module_srl);
@ -92,7 +103,13 @@
}
// 역시 모듈을 못 찾았고 $module이 없다면 기본 모듈을 찾아봄
if(!$module_info && !$this->module) $module_info = $oModuleModel->getModuleInfoByMid();
if(!$module_info && !$this->module) $module_info = $site_module_info;
if($module_info && $site_module_info && $site_module_info->site_srl != $module_info->site_srl) {
unset($site_module_info);
$site_module_info = $oModuleModel->getSiteInfo($module_info->site_srl);
}
Context::set('site_module_info', $site_module_info);
// 모듈 정보가 찾아졌을 경우 모듈 정보에서 기본 변수들을 구함, 모듈 정보에서 module 이름을 구해움
if($module_info) {
@ -117,7 +134,12 @@
// 실제 동작을 하기 전에 trigger 호출
$output = ModuleHandler::triggerCall('display', 'before', $content);
if(!$output->toBool()) die($output->getMessage());
if(!$output->toBool()) {
$this->error = $output->getMessage();
return false;
}
return true;
}
/**
@ -251,9 +273,6 @@
// 컨텐츠 출력
$oDisplayHandler = new DisplayHandler();
$oDisplayHandler->printContent($oModule);
// DB 및 기타 자원의 종결 처리
Context::close();
}
/**

View file

@ -86,6 +86,8 @@
$user_group = $logged_info->group_list;
$grant->is_admin = false;
$oModuleModel = &getModel('module');
// 로그인되어 있다면 관리자 여부를 확인
if($is_logged) {
/* 로그인 사용자에 대한 관리자 여부는 다양한 방법으로 체크가 됨 */
@ -93,11 +95,16 @@
if($logged_info->is_admin == 'Y') {
$grant->is_admin = true;
// 2. 최고 관리자는 아니지만 모듈 object가 있고 admin_id 컬럼에 로그인 사용자의 아이디가 있을 경우
// 2. 사이트 관리자일 경우 사이트 관리 권한을 줌
} elseif($oModuleModel->isSiteAdmin()) {
$grant->is_admin = true;
// 3. 최고 관리자는 아니지만 모듈 object가 있고 admin_id 컬럼에 로그인 사용자의 아이디가 있을 경우
} elseif($this->module_info->admin_id) {
if(is_array($this->module_info->admin_id) && in_array($user_id, $this->module_info->admin_id)) $grant->is_admin = true;
// 4. 1/2번이 아닐 경우 그룹을 체크하고 직접 모듈에 요청을 하여 체크를 함. (모듈.class.php에 정의)
// 4. 1/2/3번이 아닐 경우 그룹을 체크하고 직접 모듈에 요청을 하여 체크를 함. (모듈.class.php에 정의)
} else {
$manager_group = $this->module_info->grants['manager'];
if(count($user_group) && count($manager_group)) {
@ -123,7 +130,7 @@
$title = $grant_item->title;
$default = $grant_item->default;
// 관리자이면 모든 권한에 대해 true 설정
// 최고 관리자이면 모든 권한에 대해 true 설정
if($grant->is_admin) {
$grant->{$grant_name} = true;
continue;
@ -153,7 +160,7 @@
if($is_logged) $grant->{$grant_name} = true;
break;
case 'root' :
if($grant->is_admin) $grant->{$grant_name} = true;
if($logged_info->is_admin == 'Y') $grant->{$grant_name} = true;
break;
default :
$grant->{$grant_name} = true;
@ -172,11 +179,12 @@
}
}
// act값에 admin이 들어 있는데 관리자가 아닌 경우 오류 표시
// act값에 admin이 들어 있는데 관리자가 아닌 경우 해당 모듈의 관리자 체크
if(substr_count($this->act, 'Admin')) {
// 로그인 되어 있지 않다면 무조건 금지
if(!$is_logged) $this->setAct("dispMemberLoginForm");
elseif(!$grant->is_admin) $this->stop('msg_not_permitted_act');
else if($logged_info->is_admin != 'Y' && (!method_exists($this, 'checkAdminActionGrant') || !$this->checkAdminActionGrant())) {
$this->stop('msg_not_permitted_act');
}
}
// 권한변수 설정

View file

@ -482,7 +482,7 @@ function displayPopupMenu(ret_obj, response_tags, params) {
} else {
if(menus) {
var item = menus['item'];
if(item.length<1) item = new Array(item);
if(typeof(item.length)=='undefined' || item.length<1) item = new Array(item);
if(item.length) {
for(var i=0;i<item.length;i++) {
var url = item[i].url;

View file

@ -14,7 +14,7 @@
* 내용은 제로보드XE의 버전을 관리자 페이지에 표시하기 위한 용도이며
* config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야
**/
define('__ZBXE_VERSION__', '1.0.6');
define('__ZBXE_VERSION__', '1.1.0');
/**
* @brief 디버깅 메세지 출력

View file

@ -192,7 +192,7 @@
}
/**
* @brief Context::getUrl($args_list) 쓰기 쉽게 함수로 선언
* @brief Context::getUrl() 쓰기 쉽게 함수로 선언
* @return string
*
* getUrl() 현재 요청된 RequestURI에 주어진 인자의 값으로 변형하여 url을 리턴한다\n
@ -210,6 +210,25 @@
return Context::getUrl($num_args, $args_list);
}
/**
* @brief Context::getUrl() 쓰기 쉽게 함수로 선언
* @return string
*
* getSiteUrl() 지정된 도메인에 대해 주어진 인자의 값으로 변형하여 url을 리턴한다\n
* 인자는 도메인(http://등이 제외된)+path 여야 .
**/
function getSiteUrl() {
$num_args = func_num_args();
$args_list = func_get_args();
if(!$num_args) return Context::getRequestUri();
$domain = array_shift($args_list);
$num_args = count($args_list);
return Context::getUrl($num_args, $args_list, $domain);
}
/**
* @brief 주어진 문자를 주어진 크기로 자르고 잘라졌을 경우 주어진 꼬리를
* @param string 자를 문자열

View file

@ -60,7 +60,10 @@
* 그리고 해당 모듈을 실행후 컨텐츠를 출력한다\n
**/
$oModuleHandler = new ModuleHandler();
$oModuleHandler->init();
$oModule = &$oModuleHandler->procModule();
$oModuleHandler->displayContent($oModule);
if($oModuleHandler->init()) {
$oModule = &$oModuleHandler->procModule();
$oModuleHandler->displayContent($oModule);
}
$oContext->close();
?>

View file

@ -7,6 +7,7 @@
<!--@if($logged_info->is_admin=='Y')--><li><a href="{getUrl('','module','admin','act','dispAdminConfig')}">{$lang->cmd_setup}</a></li><!--@end-->
<li><a href="{getUrl('','module','admin','act','dispMemberLogout')}">{$lang->cmd_logout}</a></li>
</ul>
<!--@if($logged_info->is_admin=='Y')-->
<div class="mainNavigator">
<ul class="mainNavigator">
<!--@foreach($lang->module_category_title as $key => $val)-->
@ -28,6 +29,7 @@
<!--@end-->
</ul>
</div>
<!--@end-->
</div>
<div class="adminFolder"><a href="#" onclick="toggleXEMainNavigator(); return false;"><img src="./images/n_folder_btn<!--@if($_COOKIE['XEMN']=='none')-->_off<!--@end-->.png" alt="folding" id="btnFolder"/></a></div>

View file

@ -30,6 +30,7 @@
Context::set('module_srl','');
$this->act = 'list';
} else {
ModuleModel::syncModuleToSite($module_info);
$this->module_info = $module_info;
Context::set('module_info',$module_info);
}
@ -60,7 +61,9 @@
$args->list_count = 40;
$args->page_count = 10;
$args->s_module_category_srl = Context::get('module_category_srl');
$output = executeQuery('board.getBoardList', $args);
$output = executeQueryArray('board.getBoardList', $args);
ModuleModel::syncModuleToSite($output->data);
// 템플릿에 쓰기 위해서 context::set
Context::set('total_count', $output->total_count);
@ -158,7 +161,7 @@
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
if(!$skin_info) {
$skin = 'xe_default';
$skin = 'xe_board';
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
}

View file

@ -37,31 +37,6 @@
// 2007. 10. 17 아이디 클릭시 나타나는 팝업메뉴에 작성글 보기 기능 추가
$oModuleController->insertTrigger('member.getMemberMenu', 'board', 'controller', 'triggerMemberMenu', 'after');
// 기본 게시판 생성
$output = executeQuery('module.getDefaultMidInfo');
if($output->data) return new Object();
// 기본 모듈을 찾음
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByMid();
// 기본 모듈이 없으면 새로 등록
if(!$module_info->module_srl) {
$args->board_name = 'board';
$args->browser_title = 'test module';
$args->is_default = 'Y';
$args->skin = 'xe_default';
// board 라는 이름의 모듈이 있는지 확인
$module_info = $oModuleModel->getModuleInfoByMid($args->board_name);
if($module_info->module_srl) $args->module_srl = $module_info->module_srl;
else $args->module_srl = 0;
// 게시판 controller 생성
$oBoardController = &getAdminController('board');
$oBoardController->procBoardAdminInsertBoard($args);
}
return new Object();
}
@ -118,5 +93,23 @@
**/
function recompileCache() {
}
/**
* @brief Action중 Admin이 들어갔을 경우 권한 체크
**/
function checkAdminActionGrant() {
if(!Context::get('is_logged')) return false;
$logged_info = Context::get('logged_info');
if($logged_info->is_admin=='Y') return true;
$actions = array('getBoardAdminCategoryTplInfo','dispBoardAdminCategoryInfo','procBoardAdminInsertCategory','procBoardAdminUpdateCategory','procBoardAdminDeleteCategory','procBoardAdminMoveCategory');
if(!in_array($this->act, $actions)) return false;
$oModuleModel = &getModel('module');
if($oModuleModel->isSiteAdmin()) return true;
return false;
}
}
?>

View file

@ -48,7 +48,7 @@
// 만약 스킨 경로가 없다면 xe_board로 변경
if(!is_dir($template_path)) {
$this->module_info->skin = 'xe_default';
$this->module_info->skin = 'xe_board';
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
}

View file

@ -7,7 +7,7 @@
<!--@if($module_info)-->
<div class="header4">
<!--@if($module_info->mid)-->
<h4>{$module_info->mid} <!--@if($module_info->is_default=='Y')--><span class="bracket">({$lang->is_default})</span><!--@end--> <span class="vr">|</span> <a href="{getUrl('','mid',$module_info->mid)}" onclick="window.open(this.href); return false;" class="view">View</a></h4>
<h4>{$module_info->mid} <!--@if($module_info->is_default=='Y')--><span class="bracket">({$lang->is_default})</span><!--@end--> <span class="vr">|</span> <a href="{getSiteUrl($module_info->domain,'','mid',$module_info->mid)}" onclick="window.open(this.href); return false;" class="view">View</a></h4>
<!--@end-->
<ul class="localNavigation">

View file

@ -50,7 +50,7 @@
<td><a href="{getUrl('act','dispBoardAdminBoardInfo','module_srl',$val->module_srl)}">{htmlspecialchars($val->mid)}</a></td>
<td><a href="{getUrl('act','dispBoardAdminBoardInfo','module_srl',$val->module_srl)}">{htmlspecialchars($val->browser_title)}</a></td>
<td class="date center nowrap">{zdate($val->regdate,"Y-m-d")}</td>
<td class="view center"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
<td class="view center"><a href="{getSiteUrl($val->domain,'','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
<td class="copy center"><a href="./?module=module&amp;act=dispModuleAdminCopyModule&amp;module_srl={$val->module_srl}" onclick="popopen(this.href);return false;">{$lang->cmd_copy}</a></td>
<td class="delete center"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispBoardAdminDeleteBoard','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@else-->&nbsp;<!--@end--></td>
</tr>

View file

@ -68,30 +68,5 @@
return $output;
}
/**
* @brief 댓글의 모듈별 추가 확장 폼을 저장
**/
function procCommentAdminInsertModuleConfig() {
$module_srl = Context::get('target_module_srl');
if(preg_match('/^([0-9,]+)$/',$module_srl)) $module_srl = explode(',',$module_srl);
else $module_srl = array($module_srl);
$comment_config = null;
$comment_config->comment_count = (int)Context::get('comment_count');
if(!$comment_config->comment_count) $comment_config->comment_count = 50;
$oModuleController = &getController('module');
for($i=0;$i<count($module_srl);$i++) {
$srl = trim($module_srl[$i]);
if(!$srl) continue;
$output = $oModuleController->insertModulePartConfig('comment',$srl,$comment_config);
}
$this->setError(-1);
$this->setMessage('success_updated');
}
}
?>

View file

@ -563,5 +563,27 @@
Context::set('comment_popup_menu_list', $comment_popup_menu_list);
}
/**
* @brief 댓글의 모듈별 추가 확장 폼을 저장
**/
function procCommentInsertModuleConfig() {
$module_srl = Context::get('target_module_srl');
if(preg_match('/^([0-9,]+)$/',$module_srl)) $module_srl = explode(',',$module_srl);
else $module_srl = array($module_srl);
$comment_config = null;
$comment_config->comment_count = (int)Context::get('comment_count');
if(!$comment_config->comment_count) $comment_config->comment_count = 50;
$oModuleController = &getController('module');
for($i=0;$i<count($module_srl);$i++) {
$srl = trim($module_srl[$i]);
if(!$srl) continue;
$output = $oModuleController->insertModulePartConfig('comment',$srl,$comment_config);
}
$this->setError(-1);
$this->setMessage('success_updated');
}
}
?>

View file

@ -8,8 +8,8 @@
<action name="procCommentVoteUp" type="controller" standalone="true" />
<action name="procCommentVoteDown" type="controller" standalone="true" />
<action name="procCommentDeclare" type="controller" standalone="true" />
<action name="procCommentInsertModuleConfig" type="controller" standalone="true" />
<action name="procCommentAdminDeleteChecked" type="controller" standalone="true" />
<action name="procCommentAdminCancelDeclare" type="controller" standalone="true" />
<action name="procCommentAdminInsertModuleConfig" type="controller" standalone="true" />
</actions>
</module>

View file

@ -1,4 +1,4 @@
<filter name="insert_comment_module_config" module="comment" act="procCommentAdminInsertModuleConfig" confirm_msg_code="confirm_submit">
<filter name="insert_comment_module_config" module="comment" act="procCommentInsertModuleConfig" confirm_msg_code="confirm_submit">
<form />
<response>
<tag name="error" />

View file

@ -116,31 +116,35 @@
$module_categories = $oModuleModel->getModuleCategories();
// 모듈의 목록을 가져옴
$module_list = $oModuleModel->getMidList();
$site_module_info = Context::get('site_module_info');
$args->site_srl = $site_module_info->site_srl;
$module_list = $oModuleModel->getMidList($args);
// 최고 관리자가 아닌 경우 자신의 관리 대상 모듈만 구해옴
$logged_info = Context::get('logged_info');
$user_id = $logged_info->user_id;
$group_list = $logged_info->group_list;
// 사이트 운영자가 아닌 경우
if(!$oModuleModel->isSiteAdmin()) {
$logged_info = Context::get('logged_info');
$user_id = $logged_info->user_id;
$group_list = $logged_info->group_list;
if($logged_info->is_admin != 'Y') {
foreach($module_list as $key => $val) {
$info = $oModuleModel->arrangeModuleInfo($val);
if($logged_info->is_admin != 'Y') {
foreach($module_list as $key => $val) {
$info = $oModuleModel->arrangeModuleInfo($val);
// 직접 최고 관리자로 지정이 안되어 있으면 그룹을 체크
if(!in_array($user_id, $info->admin_id)) {
// 직접 최고 관리자로 지정이 안되어 있으면 그룹을 체크
if(!in_array($user_id, $info->admin_id)) {
$is_granted = false;
$manager_group = $info->grants['manager'];
if(count($group_list) && count($manager_group)) {
foreach($group_list as $group_srl => $group_info) {
if(in_array($group_srl, $manager_group)) {
$is_granted = true;
break;
$is_granted = false;
$manager_group = $info->grants['manager'];
if(count($group_list) && count($manager_group)) {
foreach($group_list as $group_srl => $group_info) {
if(in_array($group_srl, $manager_group)) {
$is_granted = true;
break;
}
}
}
if(!$is_granted) unset($module_list[$key]);
}
if(!$is_granted) unset($module_list[$key]);
}
}
}

View file

@ -205,6 +205,24 @@
FileHandler::removeFilesInDir(_XE_PATH_."files/cache/document_category");
}
/**
* @brief Action중 Admin이 들어갔을 경우 권한 체크
**/
function checkAdminActionGrant() {
if(!Context::get('is_logged')) return false;
$logged_info = Context::get('logged_info');
if($logged_info->is_admin=='Y') return true;
$actions = array('procDocumentAdminAddCart','dispDocumentAdminManageDocument','procDocumentAdminManageCheckedDocument');
if(!in_array($this->act, $actions)) return false;
$oModuleModel = &getModel('module');
if($oModuleModel->isSiteAdmin()) return true;
return false;
}
/**
* @brief 권한 체크를 실행하는 method
* 모듈 객체가 생성된 경우는 직접 권한을 체크하지만 기능성 모듈등 스스로 객체를 생성하지 않는 모듈들의 경우에는

View file

@ -9,13 +9,14 @@
<action name="dispEditorAdminSetupComponent" type="view" standalone="true" />
<action name="dispEditorAdminSkinColorset" type="view" standalone="true" />
<action name="dispEditorPreview" type="view" />
<action name="dispEditorSkinColorset" type="view" />
<action name="procEditorSaveDoc" type="controller" standalone="true" />
<action name="procEditorRemoveSavedDoc" type="controller" standalone="true" />
<action name="procEditorCall" type="controller" standalone="true" />
<action name="procEditorInsertModuleConfig" type="controller" standalone="true" />
<action name="procEditorAdminInsertModuleConfig" type="controller" standalone="true" />
<action name="procEditorAdminEnableComponent" type="controller" standalone="true" />
<action name="procEditorAdminDisableComponent" type="controller" standalone="true" />
<action name="procEditorAdminMoveListOrder" type="controller" standalone="true" />

View file

@ -99,80 +99,6 @@
$this->setMessage('success_updated');
}
/**
* @brief 에디터의 모듈별 추가 확장 폼을 저장
**/
function procEditorAdminInsertModuleConfig() {
$module_srl = Context::get('target_module_srl');
// 여러개의 모듈 일괄 설정일 경우
if(preg_match('/^([0-9,]+)$/',$module_srl)) $module_srl = explode(',',$module_srl);
else $module_srl = array($module_srl);
$editor_config = null;
$editor_config->editor_skin = Context::get('editor_skin');
$editor_config->comment_editor_skin = Context::get('comment_editor_skin');
$editor_config->sel_editor_colorset = Context::get('sel_editor_colorset');
$editor_config->sel_comment_editor_colorset = Context::get('sel_comment_editor_colorset');
$enable_html_grant = trim(Context::get('enable_html_grant'));
if($enable_html_grant) $editor_config->enable_html_grant = explode('|@|', $enable_html_grant);
else $editor_config->enable_html_grant = array();
$enable_comment_html_grant = trim(Context::get('enable_comment_html_grant'));
if($enable_comment_html_grant) $editor_config->enable_comment_html_grant = explode('|@|', $enable_comment_html_grant);
else $editor_config->enable_comment_html_grant = array();
$upload_file_grant = trim(Context::get('upload_file_grant'));
if($upload_file_grant) $editor_config->upload_file_grant = explode('|@|', $upload_file_grant);
else $editor_config->upload_file_grant = array();
$comment_upload_file_grant = trim(Context::get('comment_upload_file_grant'));
if($comment_upload_file_grant) $editor_config->comment_upload_file_grant = explode('|@|', $comment_upload_file_grant);
else $editor_config->comment_upload_file_grant = array();
$enable_default_component_grant = trim(Context::get('enable_default_component_grant'));
if($enable_default_component_grant) $editor_config->enable_default_component_grant = explode('|@|', $enable_default_component_grant);
else $editor_config->enable_default_component_grant = array();
$enable_comment_default_component_grant = trim(Context::get('enable_comment_default_component_grant'));
if($enable_comment_default_component_grant) $editor_config->enable_comment_default_component_grant = explode('|@|', $enable_comment_default_component_grant);
else $editor_config->enable_comment_default_component_grant = array();
$enable_component_grant = trim(Context::get('enable_component_grant'));
if($enable_component_grant) $editor_config->enable_component_grant = explode('|@|', $enable_component_grant);
else $editor_config->enable_component_grant = array();
$enable_comment_component_grant = trim(Context::get('enable_comment_component_grant'));
if($enable_comment_component_grant) $editor_config->enable_comment_component_grant = explode('|@|', $enable_comment_component_grant);
else $editor_config->enable_comment_component_grant = array();
$editor_config->editor_height = (int)Context::get('editor_height');
$editor_config->comment_editor_height = (int)Context::get('comment_editor_height');
$editor_config->enable_height_resizable = Context::get('enable_height_resizable');
$editor_config->enable_comment_height_resizable = Context::get('enable_comment_height_resizable');
$editor_config->enable_autosave = Context::get('enable_autosave');
if($editor_config->enable_height_resizable != 'Y') $editor_config->enable_height_resizable = 'N';
if($editor_config->enable_comment_height_resizable != 'Y') $editor_config->enable_comment_height_resizable = 'N';
if($editor_config->enable_autosave != 'Y') $editor_config->enable_autosave = 'N';
$oModuleController = &getController('module');
for($i=0;$i<count($module_srl);$i++) {
$srl = trim($module_srl[$i]);
if(!$srl) continue;
$oModuleController->insertModulePartConfig('editor',$srl,$editor_config);
}
$this->setError(-1);
$this->setMessage('success_updated');
}
/**
* @brief 컴포넌트를 DB에 추가
**/

View file

@ -68,12 +68,5 @@
$this->setLayoutFile("popup_layout");
}
function dispEditorAdminSkinColorset(){
$skin = Context::get('skin');
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path,$skin);
$colorset = $skin_info->colorset;
Context::set('colorset', $colorset);
}
}
?>

View file

@ -6,8 +6,8 @@
**/
class editorAPI extends editor {
function dispEditorAdminSkinColorset(&$oModule) {
function dispEditorSkinColorset(&$oModule) {
$oModule->add('colorset', Context::get('colorset'));
}
}
?>
?>

View file

@ -102,5 +102,80 @@
// 일단 이전 저장본 삭제
return executeQuery('editor.deleteSavedDoc', $args);
}
/**
* @brief 에디터의 모듈별 추가 확장 폼을 저장
**/
function procEditorInsertModuleConfig() {
$module_srl = Context::get('target_module_srl');
// 여러개의 모듈 일괄 설정일 경우
if(preg_match('/^([0-9,]+)$/',$module_srl)) $module_srl = explode(',',$module_srl);
else $module_srl = array($module_srl);
$editor_config = null;
$editor_config->editor_skin = Context::get('editor_skin');
$editor_config->comment_editor_skin = Context::get('comment_editor_skin');
$editor_config->sel_editor_colorset = Context::get('sel_editor_colorset');
$editor_config->sel_comment_editor_colorset = Context::get('sel_comment_editor_colorset');
$enable_html_grant = trim(Context::get('enable_html_grant'));
if($enable_html_grant) $editor_config->enable_html_grant = explode('|@|', $enable_html_grant);
else $editor_config->enable_html_grant = array();
$enable_comment_html_grant = trim(Context::get('enable_comment_html_grant'));
if($enable_comment_html_grant) $editor_config->enable_comment_html_grant = explode('|@|', $enable_comment_html_grant);
else $editor_config->enable_comment_html_grant = array();
$upload_file_grant = trim(Context::get('upload_file_grant'));
if($upload_file_grant) $editor_config->upload_file_grant = explode('|@|', $upload_file_grant);
else $editor_config->upload_file_grant = array();
$comment_upload_file_grant = trim(Context::get('comment_upload_file_grant'));
if($comment_upload_file_grant) $editor_config->comment_upload_file_grant = explode('|@|', $comment_upload_file_grant);
else $editor_config->comment_upload_file_grant = array();
$enable_default_component_grant = trim(Context::get('enable_default_component_grant'));
if($enable_default_component_grant) $editor_config->enable_default_component_grant = explode('|@|', $enable_default_component_grant);
else $editor_config->enable_default_component_grant = array();
$enable_comment_default_component_grant = trim(Context::get('enable_comment_default_component_grant'));
if($enable_comment_default_component_grant) $editor_config->enable_comment_default_component_grant = explode('|@|', $enable_comment_default_component_grant);
else $editor_config->enable_comment_default_component_grant = array();
$enable_component_grant = trim(Context::get('enable_component_grant'));
if($enable_component_grant) $editor_config->enable_component_grant = explode('|@|', $enable_component_grant);
else $editor_config->enable_component_grant = array();
$enable_comment_component_grant = trim(Context::get('enable_comment_component_grant'));
if($enable_comment_component_grant) $editor_config->enable_comment_component_grant = explode('|@|', $enable_comment_component_grant);
else $editor_config->enable_comment_component_grant = array();
$editor_config->editor_height = (int)Context::get('editor_height');
$editor_config->comment_editor_height = (int)Context::get('comment_editor_height');
$editor_config->enable_height_resizable = Context::get('enable_height_resizable');
$editor_config->enable_comment_height_resizable = Context::get('enable_comment_height_resizable');
$editor_config->enable_autosave = Context::get('enable_autosave');
if($editor_config->enable_height_resizable != 'Y') $editor_config->enable_height_resizable = 'N';
if($editor_config->enable_comment_height_resizable != 'Y') $editor_config->enable_comment_height_resizable = 'N';
if($editor_config->enable_autosave != 'Y') $editor_config->enable_autosave = 'N';
$oModuleController = &getController('module');
for($i=0;$i<count($module_srl);$i++) {
$srl = trim($module_srl[$i]);
if(!$srl) continue;
$oModuleController->insertModulePartConfig('editor',$srl,$editor_config);
}
$this->setError(-1);
$this->setMessage('success_updated');
}
}
?>
?>

View file

@ -48,6 +48,9 @@
if($editor_config->enable_comment_height_resizable!='Y') $editor_config->enable_comment_height_resizable= "N";
if($editor_config->enable_autosave!='N') $editor_config->enable_autosave = "Y";
if(!$editor_config->editor_skin) $editor_config->editor_skin = 'default';
if(!$editor_config->comment_editor_skin) $editor_config->comment_editor_skin = 'default';
return $editor_config;
}

View file

@ -88,7 +88,8 @@
// 그룹 목록을 구함
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups();
$site_module_info = Context::get('site_module_info');
$group_list = $oMemberModel->getGroups($site_module_info->site_srl);
Context::set('group_list', $group_list);
// 템플릿 파일 지정
@ -104,5 +105,13 @@
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('preview');
}
function dispEditorSkinColorset(){
$skin = Context::get('skin');
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path,$skin);
$colorset = $skin_info->colorset;
Context::set('colorset', $colorset);
}
}
?>
?>

View file

@ -1,4 +1,4 @@
<filter name="insert_editor_module_config" module="editor" act="procEditorAdminInsertModuleConfig" confirm_msg_code="confirm_submit">
<filter name="insert_editor_module_config" module="editor" act="procEditorInsertModuleConfig" confirm_msg_code="confirm_submit">
<form />
<response>
<tag name="error" />

View file

@ -2,7 +2,7 @@ function getEditorSkinColorList(skin_name,selected_colorset,type){
if(skin_name.length>0){
type = type || 'board';
var response_tags = new Array('error','message','colorset');
exec_xml('editor','dispEditorAdminSkinColorset',{skin:skin_name},resultGetEditorSkinColorList,response_tags,{'selected_colorset':selected_colorset,'type':type});
exec_xml('editor','dispEditorSkinColorset',{skin:skin_name},resultGetEditorSkinColorList,response_tags,{'selected_colorset':selected_colorset,'type':type});
}
}

View file

@ -38,7 +38,8 @@
// 그룹의 설정을 위한 권한 가져오기
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups();
$site_module_info = Context::get('site_module_info');
$group_list = $oMemberModel->getGroups($site_module_info->site_srl);
Context::set('group_list', $group_list);
// 템플릿 파일 지정

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">홈페이지</title>
<description xml:lang="ko">XE의 여러 모듈들을 조합하여 홈페이지를 생성하기 가장 좋은 관리자 기능을 제공합니다</description>
<version>0.1</version>
<date>2008-11-04</date>
<category>package</category>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
</author>
</module>

View file

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<grants />
<actions>
<action name="dispHomepageManage" type="view" standalone="true" index="true" />
<action name="dispHomepageTopMenu" type="view" standalone="true" />
<action name="dispHomepageBottomMenu" type="view" standalone="true" />
<action name="dispHomepageMidSetup" type="view" standalone="true" />
<action name="dispHomepageBoardInfo" type="view" standalone="true" />
<action name="dispHomepageBoardAddition" type="view" standalone="true" />
<action name="dispHomepageBoardGrant" type="view" standalone="true" />
<action name="dispHomepageBoardSkin" type="view" standalone="true" />
<action name="getHomepageMenuItem" type="model" standalone="true" />
<action name="procHomepageChangeLayout" type="controller" standalone="true" />
<action name="procHomepageLayoutUpdate" type="controller" standalone="true" />
<action name="procHomepageInsertMenuItem" type="controller" standalone="true" />
<action name="procHomepageDeleteMenuItem" type="controller" standalone="true" />
<action name="procHomepageMenuItemMove" type="controller" standalone="true" />
<action name="procHomepageMenuUploadButton" type="controller" standalone="true" />
<action name="procHomepageDeleteButton" type="controller" standalone="true" />
<action name="procHomepageDeleteGroup" type="controller" standalone="true" />
<action name="procHomepageInsertGroup" type="controller" standalone="true" />
<action name="procHomepageUpdateMemberGroup" type="controller" standalone="true" />
<action name="procHomepageInsertBoard" type="controller" standalone="true" />
<action name="procHomepageInsertPage" type="controller" standalone="true" />
<action name="procHomepageUpdateBoardSkin" type="controller" standalone="true" />
<action name="procHomepageInsertBoardGrant" type="controller" standalone="true" />
<action name="procHomepageChangeIndex" type="controller" standalone="true" />
<action name="dispHomepageAdminContent" type="view" standalone="true" admin_index="true" />
<action name="dispHomepageAdminSetup" type="view" standalone="true" />
<action name="dispHomepageAdminDelete" type="view" standalone="true" />
<action name="procHomepageAdminInsertHomepage" type="controller" />
<action name="procHomepageAdminUpdateHomepage" type="controller" />
<action name="procHomepageAdminDeleteHomepage" type="controller" />
</actions>
</module>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,21 @@
<?php
/**
* @class homepageAdminModel
* @author zero (zero@nzeo.com)
* @brief homepage 모듈의 admin model class
**/
class homepageAdminModel extends homepage {
function init() {
}
function getHomepageList($page) {
if(!$page) $page = 1;
$args->page = $page;
$output = executeQueryArray('homepage.getHomepageList', $args);
return $output;
}
}
?>

View file

@ -0,0 +1,57 @@
<?php
/**
* @class homepageAdminView
* @author zero (zero@nzeo.com)
* @brief homepage 모듈의 admin view class
**/
class homepageAdminView extends homepage {
function init() {
$template_path = sprintf("%stpl/",$this->module_path);
$this->setTemplatePath($template_path);
}
function dispHomepageAdminContent() {
$oHompageAdminModel = &getAdminModel('homepage');
$page = Context::get('page');
$output = $oHompageAdminModel->getHomepageList($page);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('homepage_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('index');
}
function dispHomepageAdminSetup() {
$site_srl = Context::get('site_srl');
$oHomepageModel = &getModel('homepage');
$homepage_info = $oHomepageModel->getHomepageInfo($site_srl);
Context::set('homepage_info', $homepage_info);
$oModuleModel = &getModel('module');
$admin_list = $oModuleModel->getSiteAdmin($site_srl);
Context::set('admin_list', $admin_list);
$this->setTemplateFile('setup');
}
function dispHomepageAdminDelete() {
$site_srl = Context::get('site_srl');
$oHomepageModel = &getModel('homepage');
$homepage_info = $oHomepageModel->getHomepageInfo($site_srl);
Context::set('homepage_info', $homepage_info);
$oModuleModel = &getModel('module');
$admin_list = $oModuleModel->getSiteAdmin($site_srl);
Context::set('admin_list', $admin_list);
$this->setTemplateFile('delete');
}
}
?>

View file

@ -0,0 +1,64 @@
<?php
/**
* @class homepage
* @author zero (zero@nzeo.com)
* @brief homepage package
**/
class homepage extends ModuleObject {
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
$oModuleController = &getController('module');
$oModuleController->insertActionForward('homepage', 'view', 'dispHomepageAdminContent');
$oModuleController->insertActionForward('homepage', 'view', 'dispHomepageAdminSetup');
$oModuleController->insertActionForward('homepage', 'view', 'dispHomepageAdminDelete');
// 신규 홈페이지 추가
$tmp_url = parse_url(Context::getRequestUri());
$domain = sprintf('%s%s', $tmp_url['host'], $tmp_url['path']);
$oHomepageAdminController = &getAdminController('homepage');
$oHomepageAdminController->insertHomepage('homepage', $domain);
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
$oModuleModel = &getModel('module');
if(!$oModuleModel->getActionForward('dispHomepageAdminContent')) return true;
if(!$oModuleModel->getActionForward('dispHomepageAdminSetup')) return true;
if(!$oModuleModel->getActionForward('dispHomepageAdminDelete')) return true;
return false;
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
if(!$oModuleModel->getActionForward('dispHomepageAdminContent'))
$oModuleController->insertActionForward('homepage', 'view', 'dispHomepageAdminContent');
if(!$oModuleModel->getActionForward('dispHomepageAdminSetup'))
$oModuleController->insertActionForward('homepage', 'view', 'dispHomepageAdminSetup');
if(!$oModuleModel->getActionForward('dispHomepageAdminDelete'))
$oModuleController->insertActionForward('homepage', 'view', 'dispHomepageAdminDelete');
return new Object(0, 'success_updated');
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
}
}
?>

View file

@ -0,0 +1,394 @@
<?php
/**
* @class homepageController
* @author zero (zero@nzeo.com)
* @brief homepage 모듈의 controller class
**/
class homepageController extends homepage {
var $site_module_info = null;
var $site_srl = null;
var $homepage_info = null;
var $selected_layout = null;
function init() {
$oModuleModel = &getModel('module');
if(!$oModuleModel->isSiteAdmin()) return $this->stop('msg_not_permitted');
// site_module_info값으로 홈페이지의 정보를 구함
$this->site_module_info = Context::get('site_module_info');
$this->site_srl = $this->site_module_info->site_srl;
$oHomepageModel = &getModel('homepage');
$this->homepage_info = $oHomepageModel->getHomepageInfo($this->site_srl);
$oLayoutModel = &getModel('layout');
$this->selected_layout = $oLayoutModel->getLayout($this->homepage_info->layout_srl);
}
function procHomepageChangeLayout() {
$layout = Context::get('layout');
if(!$layout || !is_dir(_XE_PATH_.'layouts/'.$layout)) return new Object(-1,'msg_invalid_request');
$layout_srl = $this->selected_layout->layout_srl;
if($layout == $this->selected_layout->layout) return;
$oLayoutAdminController = &getAdminController('layout');
$args->layout_srl = $layout_srl;
$args->layout = $layout;
$args->layout_path = '';
return $oLayoutAdminController->updateLayout($args);
}
function procHomepageLayoutUpdate() {
$layout_srl = Context::get('layout_srl');
if(!$layout_srl || $layout_srl!=$this->selected_layout->layout_srl) exit();
$oLayoutAdminController = &getAdminController('layout');
$oLayoutAdminController->procLayoutAdminUpdate();
$this->setLayoutPath( $oLayoutAdminController->getLayoutPath() );
$this->setLayoutFile( $oLayoutAdminController->getLayoutFile() );
$this->setTemplatePath( $oLayoutAdminController->getTemplatePath() );
$this->setTemplateFile( $oLayoutAdminController->getTemplateFile() );
}
function procHomepageInsertMenuItem() {
global $lang;
// 기본 변수 체크
$source_args = Context::getRequestVars();
unset($source_args->body);
unset($source_args->module);
unset($source_args->act);
unset($source_args->module_type);
unset($source_args->module_id);
unset($source_args->url);
if($source_args->menu_open_window!="Y") $source_args->menu_open_window = "N";
if($source_args->menu_expand !="Y") $source_args->menu_expand = "N";
$source_args->group_srls = str_replace('|@|',',',$source_args->group_srls);
$source_args->parent_srl = (int)$source_args->parent_srl;
$module_type = Context::get('module_type');
$browser_title = trim(Context::get('browser_title'));
$url = trim(Context::get('url'));
$module_id = trim(Context::get('module_id'));
$oMenuAdminModel = &getAdminModel('menu');
$oMenuAdminController = &getAdminController('menu');
// 메뉴 이름 체크
$lang_supported = Context::get('lang_supported');
$name_inserted = false;
foreach($lang_supported as $key => $val) {
$menu_name[$key] = $source_args->{"menu_name_".strtolower($key )};
if($menu_name[$key]) $name_inserted = true;
}
if(!$name_inserted) {
return new Object(-1, sprintf($lang->filter->isnull, $lang->menu_name));
}
$mode = Context::get('mode');
// module_type이 url이 아니면 게시판 또는 페이지를 생성한다
if($module_type != 'url' && $mode == 'insert') {
if(!$browser_title) return new Object(-1, sprintf($lang->filter->isnull, $lang->browser_title));
if(!$module_id) return new Object(-1, sprintf($lang->filter->isnull, $lang->module_id));
// 모듈이름을 검사
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByMid($module_id, $this->site_srl);
if($module_info->mid == $module_id) return new Object(-1,'msg_module_name_exists');
$oHomepageAdminController = &getAdminController('homepage');
if($module_type == 'page') {
$oHomepageAdminController->makePage($this->site_srl, $module_id, $browser_title, '', $this->selected_layout->layout_srl);
} else {
$oHomepageAdminController->makeBoard($this->site_srl, $module_id, $browser_title, $this->selected_layout->layout_srl);
}
}
// 변수를 다시 정리 (form문의 column과 DB column이 달라서)
$args->menu_srl = $source_args->menu_srl;
$args->menu_item_srl = $source_args->menu_item_srl;
$args->parent_srl = $source_args->parent_srl;
$args->menu_srl = $source_args->menu_srl;
$args->name = serialize($menu_name);
if($module_type=='url') $args->url = 'http://'.preg_replace('/^(http|https):\/\//i','',$url);
else $args->url = $module_id;
$args->open_window = $source_args->menu_open_window;
$args->expand = $source_args->menu_expand;
$args->normal_btn = $source_args->normal_btn;
$args->hover_btn = $source_args->hover_btn;
$args->active_btn = $source_args->active_btn;
$args->group_srls = $source_args->group_srls;
switch($mode) {
case 'insert' :
$args->menu_item_srl = getNextSequence();
$args->listorder = -1*$args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
if(!$output->toBool()) return $output;
break;
case 'update' :
$source_menu_info = $oMenuAdminModel->getMenuItemInfo($args->menu_item_srl);
$output = executeQuery('menu.updateMenuItem', $args);
if(!$output->toBool()) return $output;
if($module_type != 'url') {
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByMid($source_menu_info->url, $this->site_srl);
if($module_info->mid != $module_id || $module_info->browser_title != $browser_title) {
$module_info->browser_title = $browser_title;
$module_info->mid = $module_id;
$oModuleController = &getController('module');
$oModuleController->updateModule($module_info);
}
}
break;
default :
return new Object(-1,'msg_invalid_request');
break;
}
// 해당 메뉴의 정보를 구함
$menu_info = $oMenuAdminModel->getMenu($args->menu_srl);
$menu_title = $menu_info->title;
// XML 파일을 갱신하고 위치을 넘겨 받음
$xml_file = $oMenuAdminController->makeXmlFile($args->menu_srl);
$this->add('xml_file', $xml_file);
}
function procHomepageDeleteMenuItem() {
$menu_item_srl = Context::get('menu_item_srl');
if(!$menu_item_srl) return new Object(-1,'msg_invalid_request');
$oMenuAdminModel = &getAdminModel('menu');
$oMenuAdminController = &getAdminController('menu');
$menu_info = $oMenuAdminModel->getMenuItemInfo($menu_item_srl);
if(!$menu_info || $menu_info->menu_item_srl != $menu_item_srl) return new Object(-1,'msg_invalid_request');
Context::set('menu_srl', $menu_info->menu_srl);
$output = $oMenuAdminController->procMenuAdminDeleteItem();
if(is_object($output) && !$output->toBool()) return $output;
$this->add('xml_file', $oMenuAdminController->get('xml_file'));
$mid = $menu_info->url;
if(!preg_match('/^http/i',$mid)) {
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByMid($mid, $this->site_srl);
if($module_info && $module_info->mid == $mid) {
$oModuleController = &getController('module');
$output = $oModuleController->deleteModule($module_info->module_srl, $this->site_srl);
}
}
}
function procHomepageMenuUploadButton() {
$menu_srl = Context::get('menu_srl');
$menu_item_srl = Context::get('menu_item_srl');
$target = Context::get('target');
$target_file = Context::get($target);
// 필수 요건이 없거나 업로드된 파일이 아니면 오류 발생
if(!$menu_srl || !$menu_item_srl || !$target_file || !is_uploaded_file($target_file['tmp_name']) || !preg_match('/\.(gif|jpeg|jpg|png)/i',$target_file['name'])) {
Context::set('error_messge', Context::getLang('msg_invalid_request'));
// 요건을 만족하고 업로드된 파일이면 지정된 위치로 이동
} else {
$tmp_arr = explode('.',$target_file['name']);
$ext = $tmp_arr[count($tmp_arr)-1];
$path = sprintf('./files/attach/menu_button/%d/', $menu_srl);
$filename = sprintf('%s%d.%s.%s', $path, $menu_item_srl, $target, $ext);
if(!is_dir($path)) FileHandler::makeDir($path);
move_uploaded_file($target_file['tmp_name'], $filename);
Context::set('filename', $filename);
}
$this->setTemplatePath('./modules/menu/tpl');
$this->setTemplateFile('menu_file_uploaded');
}
function procHomepageDeleteButton() {
$menu_srl = Context::get('menu_srl');
$menu_item_srl = Context::get('menu_item_srl');
$target = Context::get('target');
$filename = Context::get('filename');
FileHandler::removeFile($filename);
$this->add('target', $target);
}
function procHomepageMenuItemMove() {
$menu_srl = Context::get('menu_srl');
$mode = Context::get('mode');
$parent_srl = Context::get('parent_srl');
$source_srl = Context::get('source_srl');
$target_srl = Context::get('target_srl');
if(!$menu_srl || !$mode || !$target_srl) return new Object(-1,'msg_invalid_request');
// 원본 메뉴들을 구함
$oMenuAdminModel = &getAdminModel('menu');
$oMenuAdminController = &getAdminController('menu');
$target_item = $oMenuAdminModel->getMenuItemInfo($target_srl);
if($target_item->menu_item_srl != $target_srl) return new Object(-1,'msg_invalid_request');
// 위치 이동 (순서 조절)
if($mode == 'move') {
$args->parent_srl = $parent_srl;
$args->menu_srl = $menu_srl;
if($source_srl) {
$source_item = $oMenuAdminModel->getMenuItemInfo($source_srl);
if($source_item->menu_item_srl != $source_srl) return new Object(-1,'msg_invalid_request');
$args->listorder = $source_item->listorder-1;
} else {
$output = executeQuery('menu.getMaxListorder', $args);
if(!$output->toBool()) return $output;
$args->listorder = (int)$output->data->listorder;
if(!$args->listorder) $args->listorder= 0;
}
$args->parent_srl = $parent_srl;
$output = executeQuery('menu.updateMenuItemListorder', $args);
if(!$output->toBool()) return $output;
$args->parent_srl = $parent_srl;
$args->menu_item_srl = $target_srl;
$output = executeQuery('menu.updateMenuItemNode', $args);
if(!$output->toBool()) return $output;
// 자식으로 추가
} elseif($mode == 'insert') {
$args->menu_item_srl = $target_srl;
$args->parent_srl = $parent_srl;
$args->listorder = -1*getNextSequence();
$output = executeQuery('menu.updateMenuItemNode', $args);
if(!$output->toBool()) return $output;
}
$xml_file = $oMenuAdminController->makeXmlFile($menu_srl);
$this->add('xml_file', $xml_file);
}
function procHomepageInsertBoard() {
$oBoardAdminController = &getAdminController('board');
$output = $oBoardAdminController->procBoardAdminInsertBoard();
if(is_object($output) && !$output->toBool()) return $output;
$this->add('module_srl', $oBoardAdminController->get('module_srl'));
$this->setMessage($oBoardAdminController->getMessage());
}
function procHomepageDeleteGroup() {
$oMemberAdminController = &getAdminController('member');
$group_srl = Context::get('group_srl');
$output = $oMemberAdminController->deleteGroup($group_srl, $this->site_srl);
if(!$output->toBool()) return $output;
}
function procHomepageInsertGroup() {
$args->group_srl = Context::get('group_srl');
$args->title = Context::get('title');
$args->is_default = Context::get('is_default');
if($args->is_default!='Y') $args->is_default = 'N';
$args->description = Context::get('description');
$args->site_srl = $this->site_srl;
$oMemberAdminController = &getAdminController('member');
if($args->group_srl) {
$output = $oMemberAdminController->updateGroup($args);
} else {
$output = $oMemberAdminController->insertGroup($args);
}
if(!$output->toBool()) return $output;
}
function procHomepageUpdateMemberGroup() {
if(!Context::get('cart')) return new Object();
$args->site_srl = $this->site_srl;
$args->member_srl = explode('|@|',Context::get('cart'));
$args->group_srl = Context::get('group_srl');
$oMemberController = &getController('member');
return $oMemberController->replaceMemberGroup($args);
}
function procHomepageUpdateBoardSkin() {
$oBoardAdminController = &getAdminController('board');
$oBoardAdminController->procBoardAdminUpdateSkinInfo();
$this->setLayoutPath($oBoardAdminController->getLayoutPath());
$this->setLayoutFile($oBoardAdminController->getLayoutFile());
$this->setTemplatePath($oBoardAdminController->getTemplatePath());
$this->setTemplateFile($oBoardAdminController->getTemplateFile());
}
function procHomepageInsertBoardGrant() {
$module_srl = Context::get('module_srl');
// 현 모듈의 권한 목록을 가져옴
$oModuleModel = &getModel('module');
$xml_info = $oModuleModel->getModuleActionXml('board');
$grant_list = $xml_info->grant;
if(count($grant_list)) {
foreach($grant_list as $key => $val) {
$group_srls = Context::get($key);
if($group_srls) $arr_grant[$key] = explode('|@|',$group_srls);
}
$grants = serialize($arr_grant);
}
$oModuleController = &getController('module');
$oModuleController->updateModuleGrant($module_srl, $grants);
$this->add('module_srl',Context::get('module_srl'));
$this->setMessage('success_registed');
}
function procHomepageInsertPage() {
$module_srl = Context::get('module_srl');
// 현 모듈의 권한 목록을 가져옴
$oModuleModel = &getModel('module');
$xml_info = $oModuleModel->getModuleActionXml('page');
$grant_list = $xml_info->grant;
if(count($grant_list)) {
foreach($grant_list as $key => $val) {
$group_srls = Context::get($key);
if($group_srls) $arr_grant[$key] = explode('|@|',$group_srls);
}
$grants = serialize($arr_grant);
}
$oModuleController = &getController('module');
$oModuleController->updateModuleGrant($module_srl, $grants);
$this->add("module_srl", $args->module_srl);
$this->setMessage('success_registed');
}
function procHomepageChangeIndex() {
$index_mid = Context::get('index_mid');
if(!$index_mid) return new Object(-1,'msg_invalid_request');
$args->index_module_srl = $index_mid;
$args->domain = $this->homepage_info->domain;
$args->site_srl= $this->site_srl;
$oModuleController = &getController('module');
$output = $oModuleController->updateSite($args);
debugPrint($output);
return $output;
}
}
?>

View file

@ -0,0 +1,50 @@
<?php
/**
* @class homepageModel
* @author zero (zero@nzeo.com)
* @brief homepage 모듈의 model class
**/
class homepageModel extends homepage {
var $site_module_info = null;
var $site_srl = 0;
function init() {
// site_module_info값으로 홈페이지의 정보를 구함
$this->site_module_info = Context::get('site_module_info');
$this->site_srl = $this->site_module_info->site_srl;
}
function getHomepageInfo($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('homepage.getHomepageInfo', $args);
if(!$output->toBool() || !$output->data) return;
return $output->data;
}
function getHomepageMenuItem() {
$node_srl = Context::get('node_srl');
if(!$node_srl) return new Object(-1,'msg_invalid_request');
$oMenuAdminModel = &getAdminModel('menu');
$menu_info = $oMenuAdminModel->getMenuItemInfo($node_srl);
if(!preg_match('/^http/i',$menu_info->url)) {
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByMid($menu_info->url, $this->site_srl);
if($module_info->mid == $menu_info->url) {
$menu_info->module_type = $module_info->module;
$menu_info->module_id = $module_info->mid;
$menu_info->browser_title = $module_info->browser_title;
unset($menu_info->url);
}
} else {
$menu_info->module_type = 'url';
$menu_info->url = preg_replace('/^(http|https):\/\//i','',$menu_info->url);
}
$this->add('menu_info', $menu_info);
}
}
?>

View file

@ -0,0 +1,247 @@
<?php
/**
* @class homepageView
* @author zero (zero@nzeo.com)
* @brief homepage 모듈의 view class
**/
class homepageView extends homepage {
var $site_module_info = null;
var $site_srl = 0;
var $homepage_info = null;
function init() {
$oModuleModel = &getModel('module');
if(!$oModuleModel->isSiteAdmin()) return $this->stop('msg_not_permitted');
// site_module_info값으로 홈페이지의 정보를 구함
$this->site_module_info = Context::get('site_module_info');
$this->site_srl = $this->site_module_info->site_srl;
if(!$this->site_srl) exit();
// 홈페이지 정보를 추출하여 세팅
$oHomepageModel = &getModel('homepage');
$this->homepage_info = $oHomepageModel->getHomepageInfo($this->site_srl);
Context::set('homepage_info', $this->homepage_info);
// 기본 스킨 디렉토리를 구함
$template_path = sprintf("%sskins/xe_official",$this->module_path);
$this->setTemplatePath($template_path);
// 홈페이지 관리 화면은 별도의 레이아웃으로 설정하여 운영
$this->setLayoutPath($template_path);
$this->setLayoutFile('layout');
// 레이아웃 정보 가져옴
$oLayoutModel = &getModel('layout');
$this->selected_layout = $oLayoutModel->getLayout($this->homepage_info->layout_srl);
Context::set('selected_layout', $this->selected_layout);
}
function dispHomepageManage() {
// 다운로드 되어 있는 레이아웃 목록을 구함
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList();
Context::set('layout_list', $layout_list);
// 메뉴 목록을 가져옴
$oMenuAdminModel = &getAdminModel('menu');
$menu_list = $oMenuAdminModel->getMenus();
Context::set('menu_list', $menu_list);
$this->setTemplateFile('index');
}
function dispHomepageMemberGroupManage() {
// 멤버모델 객체 생성
$oMemberModel = &getModel('member');
// group_srl이 있으면 미리 체크하여 selected_group 세팅
$group_srl = Context::get('group_srl');
if($group_srl) {
$selected_group = $oMemberModel->getGroup($group_srl);
Context::set('selected_group',$selected_group);
}
// group 목록 가져오기
$this->group_list = $oMemberModel->getGroups($this->site_srl);
Context::set('group_list', $this->group_list);
$this->setTemplateFile('group_list');
}
function dispHomepageTopMenu() {
// 메뉴 정보 가져오기
$menu_srl = $this->homepage_info->first_menu_srl;
$oMenuModel = &getAdminModel('menu');
$menu_info = $oMenuModel->getMenu($menu_srl);
Context::set('menu_info', $menu_info);
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups();
Context::set('group_list', $group_list);
$_menu_info = get_object_vars($this->selected_layout->menu);
$menu = array_shift($_menu_info);
Context::set('menu_max_depth', $menu->maxdepth);
$this->setTemplateFile('menu_manage');
}
function dispHomepageBottomMenu() {
// 메뉴 정보 가져오기
$menu_srl = $this->homepage_info->second_menu_srl;
$oMenuModel = &getAdminModel('menu');
$menu_info = $oMenuModel->getMenu($menu_srl);
Context::set('menu_info', $menu_info);
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups();
Context::set('group_list', $group_list);
$_menu_info = get_object_vars($this->selected_layout->menu);
$menu = array_pop($_menu_info);
Context::set('menu_max_depth', $menu->maxdepth);
$this->setTemplateFile('menu_manage');
}
function dispHomepageMidSetup() {
// 현재 site_srl 에 등록된 것들을 가져오기
$args->site_srl = $this->site_srl;
$oModuleModel = &getModel('module');
$mid_list = $oModuleModel->getMidList($args);
Context::set('mid_list', $mid_list);
$this->setTemplateFile('mid_list');
}
function dispHomepageBoardInfo() {
$module_srl = Context::get('module_srl');
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if(!$module_info || $module_info->site_srl != $this->site_srl) return new Object(-1,'msg_invalid_request');
Context::set('module_info', $module_info);
// 스킨 목록을 구해옴
$oModuleModel = &getModel('module');
$skin_list = $oModuleModel->getSkins($this->module_path);
Context::set('skin_list',$skin_list);
// 템플릿 파일 지정
if($module_info->module == 'board') {
$oBoardAdminView = &getAdminView('board');
$oBoardAdminView->init();
$this->setTemplateFile('board_insert');
} else {
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups($this->site_srl);
Context::set('group_list', $group_list);
$xml_info = $oModuleModel->getModuleActionXml('page');
$grant_list = $xml_info->grant;
Context::set('grant_list', $grant_list);
$oPage = &getClass('page');
$this->setTemplateFile('page_insert');
}
}
function dispHomepageBoardAddition() {
$module_srl = Context::get('module_srl');
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if(!$module_info || $module_info->site_srl != $this->site_srl) return new Object(-1,'msg_invalid_request');
Context::set('module_info', $module_info);
// content는 다른 모듈에서 call by reference로 받아오기에 미리 변수 선언만 해 놓음
$content = '';
// 추가 설정을 위한 트리거 호출
// 게시판 모듈이지만 차후 다른 모듈에서의 사용도 고려하여 trigger 이름을 공용으로 사용할 수 있도록 하였음
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'before', $content);
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'after', $content);
Context::set('setup_content', $content);
// 템플릿 파일 지정
$this->setTemplateFile('board_addition_setup');
}
function dispHomepageBoardGrant() {
$module_srl = Context::get('module_srl');
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if(!$module_info || $module_info->site_srl != $this->site_srl) return new Object(-1,'msg_invalid_request');
Context::set('module_info', $module_info);
$xml_info = $oModuleModel->getModuleActionXml('board');
$grant_list = $xml_info->grant;
Context::set('grant_list', $grant_list);
// 권한 그룹의 목록을 가져온다
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups($this->site_srl);
Context::set('group_list', $group_list);
$this->setTemplateFile('board_grant_list');
}
function dispHomepageBoardSkin() {
$module_srl = Context::get('module_srl');
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if(!$module_info || $module_info->site_srl != $this->site_srl) return new Object(-1,'msg_invalid_request');
Context::set('module_info', $module_info);
$skin = $module_info->skin;
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo('./modules/board/', $skin);
if(!$skin_info) {
$skin = 'xe_board';
$skin_info = $oModuleModel->loadSkinInfo('./modules/board/', $skin);
}
// skin_info에 extra_vars 값을 지정
if(count($skin_info->extra_vars)) {
foreach($skin_info->extra_vars as $key => $val) {
$group = $val->group;
$name = $val->name;
$type = $val->type;
$value = $module_info->{$name};
if($type=="checkbox"&&!$value) $value = array();
$skin_info->extra_vars[$key]->value= $value;
}
}
Context::set('skin_info', $skin_info);
$this->setTemplateFile('board_skin_info');
}
function dispHomepageMemberManage() {
// member model 객체 생성후 목록을 구해옴
$oMemberAdminModel = &getAdminModel('member');
$oMemberModel = &getModel('member');
$output = $oMemberAdminModel->getSiteMemberList($this->site_srl);
$members = array();
foreach($output->data as $key=>$val) {
$members[] = $val->member_srl;
}
$members_groups = $oMemberModel->getMembersGroups($members, $this->site_srl);
Context::set('members_groups',$members_groups);
$group_list = $oMemberModel->getGroups($this->site_srl);
Context::set('group_list', $group_list);
// 템플릿에 쓰기 위해서 context::set
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('member_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('member_list');
}
}
?>

View file

@ -0,0 +1,87 @@
<?php
/**
* @file ko.lang.php
* @author zero (zero@nzeo.com)
* @brief 홈페이지(homepage) 모듈의 기본 언어팩
**/
$lang->homepage = "홈페이지";
$lang->homepage_title = "홈페이지 이름";
$lang->domain = "도메인";
$lang->module_type = "대상";
$lang->board = "게시판";
$lang->page = "페이지";
$lang->url = "URL";
$lang->module_id = "모듈 ID";
$lang->item_group_grant = "보여줄 그룹";
$lang->homepage_admin = "홈페이지 관리자";
$lang->do_selected_member = "선택된 회원을 : ";
$lang->homepage_default_menus = array(
'first' => array(
'home' => '홈',
'notice' => '공지사항',
'download' => '자료실',
'gallery' => '갤러리',
'community' => '커뮤니티',
'freeboard' => '자유게시판',
'humor' => '재밌는 이야기',
'qa' => '질문&답변',
),
'second' => array(
'profile' => '홈페이지 소개',
'rule' => '운영원칙',
),
'menu' => array(
'first' => '기본메뉴',
'second' => '아래메뉴',
),
'widget' => array(
'download_rank' => '다운로드 순위',
),
);
$lang->cmd_homepage_menus = array(
"dispHomepageManage" => "홈페이지 설정",
"dispHomepageMemberGroupManage" => "회원그룹관리",
"dispHomepageMemberManage" => "회원 목록",
"dispHomepageTopMenu" => "기본 메뉴 관리",
"dispHomepageBottomMenu" => "하부 메뉴 관리",
"dispHomepageMidSetup" => "모듈 세부 설정",
);
$lang->cmd_homepage_registration = "홈페이지 생성";
$lang->cmd_homepage_setup = "홈페이지 설정";
$lang->cmd_homepage_delete = "홈페이지 삭제";
$lang->cmd_go_home = "홈으로 이동";
$lang->cmd_go_homepage_admin = '홈페이지 전체 관리';
$lang->cmd_change_layout = "변경";
$lang->cmd_change_layout = "변경";
$lang->cmd_select_index = "초기화면 선택";
$lang->cmd_add_new_menu = "새로운 메뉴 추가";
$lang->about_homepage_act = array(
"dispHomepageManage" => "홈페이지의 모양을 꾸밀 수 있습니다",
"dispHomepageMemberGroupManage" => "홈페이지 내에서 사용되는 그룹 관리를 할 수 있습니다",
"dispHomepageMemberManage" => "홈페이지에 등록된 회원들을 보거나 관리할 수 있습니다",
"dispHomepageTopMenu" => "홈페이지의 상단이나 좌측등에 나타나는 일반적인 메뉴를 수정하거나 추가할 수 있습니다",
"dispHomepageBottomMenu" => "홈페이지의 하단에 나타나는 작은 메뉴들을 수정하거나 추가할 수 있습니다",
"dispHomepageMidSetup" => "홈페이지에서 사용하는 게시판, 페이지등의 모듈 세부 설정을 할 수 있습니다",
);
$lang->about_homepage = "홈페이지 서비스 관리자는 다수의 홈페이지를 만들 수 있고 또 각 홈페이지를 편하게 설정할 수 있도록 합니다.";
$lang->about_homepage_title = "홈페이지 이름은 관리를 위해서만 사용될 뿐 서비스에는 나타나지 않습니다";
$lang->about_domain = "1개 이상의 홈페이지를 만들기 위해서는 전용 도메인이 있어야 합니다.<br/>독립 도메인이나 서브 도메인이 있으면 되고 XE가 설치된 경로까지 같이 넣어주세요.<br />ex) www.zeroboard.com/zbxe";
$lang->about_menu_names = "홈페이지에 나타날 메뉴 이름을 언어에 따라서 지정할 수 있습니다.<br/>하나만 입력하셔도 모두 같이 적용됩니다";
$lang->about_menu_option = "메뉴를 선택시 새창으로 열지를 선택할 수 있습니다.<br />펼침 메뉴는 레이아웃에 따라 동작합니다";
$lang->about_group_grant = "그룹을 선택하면 선택된 그룹만 메뉴가 보입니다.<br/>모두 해제하면 비회원도 볼 수 있습니다";
$lang->about_module_type = "게시판,페이지는 모듈을 생성하고 URL은 링크만 합니다.<br/>생성후 수정할 수 없습니다";
$lang->about_browser_title = "메뉴에 접속시 브라우저의 제목으로 나타날 내용입니다";
$lang->about_module_id = "게시판,페이지등 접속할때 사용될 주소입니다.<br/>예) http://도메인/[모듈ID], http://도메인/?mid=[모듈ID]";
$lang->about_menu_item_url = "대상을 URL로 할때 연결할 링크주소입니다.<br/>http://는 빼고 입력해주세요";
$lang->about_menu_image_button = "메뉴명 대신 이미지로 메뉴를 사용할 수 있습니다.";
$lang->about_homepage_delete = "홈페이지를 삭제하게 되면 연결되어 있는 모든 모듈(게시판,페이지등)과 그에 따른 글들이 삭제됩니다.<br />주의가 필요합니다";
$lang->about_homepage_admin = "홈페이지 관리자를 설정할 수 있습니다.<br/>홈페이지 관리자는 http://주소/?module=homepage 로 관리자 페이지로 접속할 수 있으며 존재하지 않는 사용자는 관리자로 등록되지 않습니다";
$lang->confirm_change_layout = "레이아웃을 변경할 경우 레이아웃 정보들 중 일부가 사라질 수가 있습니다. 변경하시겠습니까?";
$lang->confirm_delete_menu_item = "메뉴 항목 삭제시 연결되어 있는 게시판이나 페이지 모듈도 같이 삭제가 됩니다. 그래도 삭제하시겠습니까?";
$lang->msg_already_registed_domain = "이미 등록된 도메인입니다. 다른 도메인을 사용해주세요";
?>

View file

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

View file

@ -0,0 +1,17 @@
<query id="getHomepageInfo" action="select">
<tables>
<table name="homepages" />
<table name="sites" />
<table name="modules" />
</tables>
<columns>
<column name="homepages.*" />
<column name="sites.domain" alias="domain" />
<column name="modules.*" />
</columns>
<conditions>
<condition operation="equal" column="homepages.site_srl" var="site_srl" filter="number" notnull="notnull" />
<condition operation="equal" column="sites.site_srl" default="homepages.site_srl" filter="number" notnull="notnull" pipe="and" />
<condition operation="equal" column="modules.module_srl" default="sites.index_module_srl" pipe="and" />
</conditions>
</query>

View file

@ -0,0 +1,23 @@
<query id="getHomepageList" action="select">
<tables>
<table name="homepages" />
<table name="sites" />
<table name="modules" />
</tables>
<columns>
<column name="homepages.site_srl" alias="site_srl" />
<column name="homepages.title" alias="homepage_title" />
<column name="sites.domain" alias="domain" />
<column name="modules.*" />
</columns>
<conditions>
<condition operation="equal" column="sites.site_srl" default="homepages.site_srl" filter="number" notnull="notnull" />
<condition operation="equal" column="modules.module_srl" default="sites.index_module_srl" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="homepages.list_order" order="asc" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>

View file

@ -0,0 +1,14 @@
<query id="insertHomepage" action="insert">
<tables>
<table name="homepages" />
</tables>
<columns>
<column name="site_srl" var="site_srl" notnull="notnull" />
<column name="title" var="title" notnull="notnull" />
<column name="layout_srl" var="layout_srl" notnull="notnull" />
<column name="first_menu_srl" var="first_menu_srl" notnull="notnull" />
<column name="second_menu_srl" var="second_menu_srl" notnull="notnull" />
<column name="list_order" var="list_order" notnull="notnull" />
<column name="regdate" default="curdate()" />
</columns>
</query>

View file

@ -0,0 +1,12 @@
<query id="updateHomepage" action="update">
<tables>
<table name="homepages" />
</tables>
<columns>
<column name="title" var="title" notnull="notnull" />
<column name="domain" var="layout_srl" notnull="notnull" />
</columns>
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -0,0 +1,11 @@
<query id="updateHomepageTitle" action="update">
<tables>
<table name="homepages" />
</tables>
<columns>
<column name="title" var="title" notnull="notnull" />
</columns>
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -0,0 +1,9 @@
<table name="homepages">
<column name="site_srl" type="number" size="11" notnull="notnull" primary_key="primary_key" />
<column name="title" type="varchar" size="255" notnull="notnull" />
<column name="layout_srl" type="number" size="11" default="0" />
<column name="first_menu_srl" type="number" size="11" notnull="notnull" />
<column name="second_menu_srl" type="number" size="11" notnull="notnull" />
<column name="list_order" type="number" size="11" notnull="notnull" index="idx_list_order" />
<column name="regdate" type="date" />
</table>

View file

@ -0,0 +1,3 @@
<!--#include("board_header.html")-->
{$setup_content}

View file

@ -0,0 +1,38 @@
<!--#include("./board_header.html")-->
<!--%import("filter/insert_grant.xml")-->
<form action="./" method="post" onsubmit="return procFilter(this, insert_grant)">
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_srl?$module_srl:$module_srls}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->about_grant}</caption>
<thead>
<tr>
<th scope="col"><div>{$lang->grant}</div></th>
<th scope="col" colspan="3"><div>{$lang->target}</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($grant_list as $key => $val)-->
<tr class="row{$cycle_idx}">
<th scope="row"><div>{$val->title}</div></th>
<td class="wide">
<!--@foreach($group_list as $k => $v)-->
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
<!--@end-->
</td>
<td class="selectAll center"><a href="#" onclick="doSelectAll(this, '{$key}');return false;">{$lang->cmd_select_all}</a></td>
<td class="deSelectAll center"><a href="#" onclick="doUnSelectAll(this, '{$key}');return false;">{$lang->cmd_unselect_all}</a></td>
</tr>
<!--@end-->
<tr>
<td colspan="4" class="right">
<span class="button blue"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
</td>
</tr>
</tbody>
</table>
</form>

View file

@ -0,0 +1,9 @@
<h3 class="title">{$lang->board} > {$module_info->browser_title} <span class="gray">{$lang->cmd_setup}</span></h3>
<ul class="localNavigation">
<li><a href="{getUrl('act','dispHomepageBoardInfo','module_srl',$module_srl)}">{$lang->cmd_setup}</a></li>
<li><a href="{getUrl('act','dispHomepageBoardAddition','module_srl',$module_srl)}">{$lang->cmd_addition_setup}</a></li>
<li><a href="{getUrl('act','dispHomepageBoardGrant','module_srl',$module_srl)}">{$lang->grant}</a></li>
<li><a href="{getUrl('act','dispHomepageBoardSkin','module_srl',$module_srl)}">{$lang->skin}</a></li>
<li><a href="{getUrl('','mid',$module_info->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></li>
</ul>

View file

@ -0,0 +1,171 @@
<!--%import("./filter/insert_board.xml")-->
<!--#include("board_header.html")-->
<form action="./" method="post" onsubmit="return procFilter(this, insert_board)" enctype="multipart/form-data">
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
<input type="hidden" name="is_default" value="N" />
<input type="hidden" name="mid" value="{$module_info->mid}" />
<input type="hidden" name="layout_srl" value="{$module_info->layout_srl}" />
<input type="hidden" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" />
<table cellspacing="0" class="adminTable">
<tr class="row2">
<th scope="row"><div>{$lang->skin}</div></th>
<td>
<select name="skin">
<!--@foreach($skin_list as $key=>$val)-->
<option value="{$key}" <!--@if($module_info->skin==$key ||(!$module_info->skin && $key=='xe_board'))-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
<p>{$lang->about_skin}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->use_category}</div></th>
<td>
<input type="checkbox" name="use_category" value="Y" <!--@if($module_info->use_category=='Y')-->checked="checked"<!--@end--> class="checkbox" id="fld_for_category" />
<a href="{getUrl('','act','dispBoardAdminCategoryInfo','module_srl',$module_info->module_srl)}" onclick="winopen(this.href,'BoardMenu','width=850,height=800,resizable=yes,scrollbars=yes,toolbars=no');return false;">{$lang->cmd_manage_category}</a>
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->order_target}</div></th>
<td>
<select name="order_target">
<!--@foreach($order_target as $key => $val)-->
<option value="{$key}" <!--@if($module_info->order_target == $key)-->selected="selected"<!--@end-->>{$val}</option>
<!--@end-->
</select>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->order_type}</div></th>
<td>
<select name="order_type">
<option value="asc" <!--@if($module_info->order_type != 'desc')-->selected="selected"<!--@end-->>{$lang->order_asc}</option>
<option value="desc" <!--@if($module_info->order_type == 'desc')-->selected="selected"<!--@end-->>{$lang->order_desc}</option>
</select>
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->list_count}</div></th>
<td>
<input type="text" name="list_count" value="{$module_info->list_count?$module_info->list_count:20}" class="inputTypeText" />
<p>{$lang->about_list_count}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->search_list_count}</div></th>
<td>
<input type="text" name="search_list_count" value="{$module_info->search_list_count?$module_info->search_list_count:20}" class="inputTypeText" />
<p>{$lang->about_search_list_count}</p>
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->page_count}</div></th>
<td>
<input type="text" name="page_count" value="{$module_info->page_count?$module_info->page_count:10}" class="inputTypeText" />
<p>{$lang->about_page_count}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->except_notice}</div></th>
<td>
<input type="checkbox" name="except_notice" value="Y" <!--@if($module_info->except_notice!='N')-->checked="checked"<!--@end--> />
<p>{$lang->about_except_notice}</p>
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->consultation}</div></th>
<td>
<input type="checkbox" name="consultation" value="Y" <!--@if($module_info->consultation=='Y')-->checked="checked"<!--@end--> />
<p>{nl2br($lang->about_consultation)}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->admin_mail}</div></th>
<td>
<input type="text" name="admin_mail" value="{$module_info->admin_mail}" class="inputTypeText w400" />
<p>{$lang->about_admin_mail}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->header_text}</div></th>
<td>
<textarea name="header_text" class="inputTypeTextArea fixWidth">{htmlspecialchars($module_info->header_text)}</textarea>
<p>{$lang->about_header_text}</p>
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->footer_text}</div></th>
<td>
<textarea name="footer_text" class="inputTypeTextArea fixWidth">{htmlspecialchars($module_info->footer_text)}</textarea>
<p>{$lang->about_footer_text}</p>
</td>
</tr>
<tr class="row2">
<td colspan="2" class="right">
<span class="button blue"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</td>
</table>
<!--@if(!$module_srls)-->
<!--@for($i=1;$i<=20;$i++)-->
<div class="gap1"></div>
{@ $extra_vars_name = ''}
{@ $extra_vars_type = ''}
{@ $extra_vars_is_required = ''}
{@ $extra_vars_default_value = ''}
{@ $extra_vars_desc = ''}
{@ $extra_vars_search = ''}
<!--@if($module_info->extra_vars[$i])-->
{@ $extra_vars_name = $module_info->extra_vars[$i]->name}
{@ $extra_vars_type = $module_info->extra_vars[$i]->type}
{@ $extra_vars_is_required = $module_info->extra_vars[$i]->is_required}
{@ $extra_vars_default_value = $module_info->extra_vars[$i]->default}
{@ $extra_vars_desc = $module_info->extra_vars[$i]->desc}
{@ $extra_vars_search = $module_info->extra_vars[$i]->search}
<!--@end-->
<table cellspacing="0" class="adminTable">
<caption>{$lang->extra_vars} {$i}</caption>
<tr class="row2">
<th><div>{$lang->column_name}</div></th>
<td class="wide"><input type="text" name="extra_vars_{$i}_name" value="{$extra_vars_name}" class="inputTypeText w200" /> </td>
</tr>
<tr>
<th><div>{$lang->column_type}</div></th>
<td>
<select name="extra_vars_{$i}_type">
<!--@foreach($lang->column_type_list as $key => $val)-->
<!--@if($key != 'kr_zip')-->
<option value="{$key}" <!--@if($extra_vars_type==$key)-->selected="selected"<!--@end-->>{$lang->column_type_list[$key]}</option>
<!--@end-->
<!--@end-->
</select>
</td>
</tr>
<tr class="row2">
<th><div>{$lang->is_required}</div></th>
<td><input type="checkbox" name="extra_vars_{$i}_is_required" value="Y" <!--@if($extra_vars_is_required=='Y')-->checked="checked"<!--@end--> /></td>
</tr>
<tr>
<th><div>{$lang->default_value}</div></th>
<td><input type="text" name="extra_vars_{$i}_default" value="{$extra_vars_default_value}" class="inputTypeText w400" /><p>{$lang->about_extra_vars_default_value}</p></td>
</tr>
<tr class="row2">
<th><div>{$lang->description}</div></th>
<td><input type="text" name="extra_vars_{$i}_desc" value="{$extra_vars_desc}" class="inputTypeText w400" /></td>
</tr>
<tr>
<th><div>{$lang->cmd_search}</div></th>
<td><input type="checkbox" name="extra_vars_{$i}_search" value="Y" <!--@if($extra_vars_search=='Y')-->checked="checked"<!--@end--> /></td>
</tr>
<tr class="row2">
<td colspan="2" class="right"><span class="button blue"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span></div></th>
</tr>
</table>
<!--@end-->
<!--@end-->
</form>

View file

@ -0,0 +1,146 @@
<!--#include("./board_header.html")-->
<form action="{Context::getRequestUri()}" method="post" enctype="multipart/form-data" target="hidden_iframe">
<input type="hidden" name="module" value="homepage" />
<input type="hidden" name="act" value="procHomepageUpdateBoardSkin" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="page" value="{$page}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->skin_default_info}</caption>
<tr>
<th scope="row"><div>{$lang->skin}</div></th>
<td class="wide" >{$skin_info->title}</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->skin_author}</div></th>
<td>
<!--@foreach($skin_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>{$lang->homepage}</div></th>
<td><a href="{$skin_info->homepage}" onclick="window.open(this.href);return false;">{$skin_info->homepage}</a></td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->date}</div></th>
<td>{zdate($skin_info->date, 'Y-m-d')}&nbsp;</td>
</tr>
<tr>
<th scope="row"><div>{$lang->skin_license}</div></th>
<td>
{nl2br(trim($skin_info->license))}
<!--@if($skin_info->license_link)-->
<p><a href="{$skin_info->license_link}" onclick="window.close(); return false;">{$skin_info->license_link}</a></p>
<!--@end-->
&nbsp;
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->description}</div></th>
<td>{nl2br(trim($skin_info->description))}</td>
</tr>
</table>
<table cellspacing="0" class="adminTable">
<caption>{$lang->extra_vars}</caption>
<tr valign="top">
<th scope="row"><div>{$lang->colorset}</div></th>
<td class="wide">
<!--@foreach($skin_info->colorset as $key => $val)-->
<!--@if($val->screenshot)-->
{@ $_img_info = getImageSize($val->screenshot); $_height = $_img_info[1]+40; $_width = $_img_info[0]+20; $_talign = "center"; }
<!--@else-->
{@ $_width = 200; $_height = 20; $_talign = "left"; }
<!--@end-->
<div style="float:left;text-align:{$_talign};margin-bottom:1em;width:{$_width}px;height:{$_height}px;margin-right:10px;">
<input type="radio" name="colorset" value="{$val->name}" id="colorset_{$key}" <!--@if($module_info->colorset==$val->name)-->checked="checked"<!--@end-->/>
<label for="colorset_{$key}">{$val->title}</label>
<!--@if($val->screenshot)-->
<br />
<img src="{$val->screenshot}" alt="{$val->title}" style="border:1px solid #888888;padding:2px;margin:2px;"/>
<!--@end-->
</div>
<!--@end-->
</td>
</tr>
<!--@foreach($skin_info->extra_vars as $key => $val)-->
<!--@if($val->group && ((!$group) || $group != $val->group))-->
{@$group = $val->group}
</table>
<table cellspacing="0" class="adminTable">
<caption>{$group}</caption>
<!--@end-->
<tr class="row{$cycle_idx}">
<th scope="row"><div>{$val->title}</div></th>
<td class="wide">
<!--@if($val->type=="text")-->
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w400" />
<!--@elseif($val->type=="textarea")-->
<textarea name="{$val->name}" class="inputTypeTextArea w400">{htmlspecialchars($val->value)}</textarea>
<!--@elseif($val->type=="select")-->
<select name="{$val->name}">
<!--@foreach($val->options as $k=>$v)-->
<option value="{$v->value}" <!--@if($v->value == $val->value)-->selected="selected"<!--@end-->>{$v->title}</option>
<!--@end-->
</select>
<!--@elseif($val->type=="checkbox")-->
<!--@foreach($val->default as $k=>$v)-->
<span>
<input type="checkbox" name="{$val->name}[]" value="{$v}" id="ch_{$key}_{$k}" <!--@if(in_array($v, $val->value))-->checked="checked"<!--@end--> class="checkbox" />
<label for="ch_{$key}_{$k}">{$v}</label>
</span>
<!--@end-->
<!--@elseif($val->type=="radio")-->
<!--@foreach($val->default as $k=>$v)-->
<span>
<input type="radio" name="{$val->name}" value="{$v}" id="ch_{$key}_{$k}" <!--@if($v==$val->value)-->checked="checked"<!--@end-->/>
<label for="ch_{$key}_{$k}">{$v}</label>
</span>
<!--@end-->
<!--@elseif($val->type=="image")-->
<!--@if($val->value)-->
<div>
<img src="{$val->value}" /><br />
<input type="checkbox" name="del_{$val->name}" value="Y" id="del_{$val->name}" class="checkbox" />
<label for="del_{$val->name}">{$lang->cmd_delete}</label>
</div>
<!--@end-->
<input type="file" name="{$val->name}" value="" />
<!--@end-->
<!--@if($val->description)-->
<p>{nl2br(trim($val->description))}</p>
<!--@end-->
</td>
</tr>
<!--@end-->
<!--@if($group)-->
</table>
<table cellspacing="0" class="adminTable">
<!--@end-->
<tr class="row2">
<td colspan="2" class="right">
<span class="button blue"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</td>
</tr>
</table>
</form>
<iframe name="hidden_iframe" frameborder="0" style="display:none"></iframe>

View file

@ -0,0 +1,196 @@
@charset "utf-8";
#menu ul { margin-top:10px; }
#menu li { padding-bottom:10px; }
#menuItem { visibility:hidden; position:absolute; left:0; top:0; background-color:#FFFFFF; z-index:1000; border:2px solid #DDDDDD; padding:10px;}
#menu_normal_btn_zone { display:none; }
#menu_hover_btn_zone { display:none; }
#menu_active_btn_zone { display:none; }
.topGap { margin-top:10px; }
.rightGap { margin-right:10px; }
.bottomGap { margin-bottom:15px; }
.leftGap { margin-left:10px; }
textarea { padding:.3em 0 0 .3em;}
h3.title { margin:0; padding:8px 0 0 10px; border:1px solid #5E95BC; border-left:1px solid #8EB9D8; border-top:1px solid #8EB9D8; background:url("../images/n_title_bg.gif") repeat-x left top; font-size:1em; color:#27536C; height:22px;}
h3.title .gray { color:#8AB2CE;}
.infoText { background:#FFFFFF; padding:10px; color:#27536C; border-left:1px solid #8AB2CE; border-bottom:1px solid #8AB2CE; border-right:1px solid #8AB2CE; line-height:1.5; margin-bottom:10px; }
.subInfoText { background:#FFFFFF; padding:10px; color:#27536C; border:1px solid #EEEEEE; line-height:1.5; margin-bottom:10px; }
h4 { text-align:right; font-size:12pt; color:#f2250d; padding-left:10px; margin:0;}
h4 .bracket { font-weight:normal; color:#9d9d9d;}
h4 .vr { font-weight:normal; color:#d1d1d1;}
h4 .view { color:#158692; padding-right:.6em; font:bold 9pt Tahoma; text-decoration:none; }
div.summary { clear:both; font:8pt tahoma; color:#636363; margin-bottom:5px; }
div.summary .vr { font-weight:normal; color:#d1d1d1; }
div.summary em { color:#ff1d00; font-style:normal;}
.adminLeftContent { float:left; width:60%; margin-right:2%; _margin-right:1.9%;}
.adminRightExtra { float:left; width:38%; }
.adminTable { width:100%; border:1px solid #9BC2DE; border-bottom:none; border-right:none; margin-bottom:15px; }
.adminTable caption { background:url("../images/n_caption_head.gif") no-repeat left top; padding:8px 0 5px 30px; text-align:left; font-weight:bold; color:#FFFFFF; background-color:#548DB5; border-bottom:1px solid #FFFFFF; }
.adminTable thead tr th div { text-align:center;}
.adminTable thead tr th { background-color:#70A2C6; color:#FFFFFF; }
.adminTable tr th { background-color:#FFFFFF; padding:6px; font-weight:bold; text-align:left; color:#666; border-right:1px solid #9BC2DE; border-bottom:1px solid #9BC2DE; }
.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 #9BC2DE; border-right:1px solid #9BC2DE; 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("../images/n_paper_bullet.gif") no-repeat 6px 8px; padding-left:20px; }
.adminTable tr.row2 td.paper { background:#F3F3F3 url("../images/n_paper_bullet.gif") no-repeat 6px 8px; padding-left:20px; }
.adminTable tr td.circle { background:#FFFFFF url("../images/n_circle_bullet.gif") no-repeat 6px 8px; padding-left:20px; }
.adminTable tr.row2 td.circle { background:#F3F3F3 url("../images/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("../images/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("../images/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("../images/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("../images/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("../images/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("../images/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("../images/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("../images/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("../images/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("../images/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("../images/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; }
ul.localNavigation { position:relative; clear:both; margin:10px 0 10px 0; padding:0 0 0 10px; height:25px; overflow:hidden; border-bottom:1px solid #86B4D2; }
ul.localNavigation li { list-style:none; background:url("../images/n_small_tab.gif") no-repeat scroll left -26px; float:left; margin-right:10px; position:relative; text-align:center; top:4px; height:25px;}
ul.localNavigation li a { background:url("../images/n_small_tab.gif") no-repeat scroll right -26px; color:#27536C; display:block; float:left; left:3px; padding:5px 15px 0 10px; position:relative; text-decoration:none; height:25px;}
ul.localNavigation li a:hover { color:#000000; }
ul.localNavigation li.on { background-position:left top; top:0; height:25px; }
ul.localNavigation li.on a { background-position:right top; padding:8px 15px 5px 10px; height:25px; color:#222227; font-weight:bold; }
#popHeadder, #popHistoryHeadder { margin-bottom:10px;}
#popHeadder h1, #popHistoryHeadder h1 { background:url("../images/top_head_title_bg.gif") repeat-x left top; font-size:1em; border:1px solid #E3E3E2; padding:9px; color:#555555; margin:0; }
#popBody, #popHistoryBody { width:600px; padding:10px; background:#ffffff;}
#popHistoryBody { height: 200px; overflow: auto; padding-right:0; }
#popFooter { width:620px; background:#70A2C6; border-top:1px solid #e8e8e7; padding:.5em 0 .5em 0; overflow:hidden; }
#popFooter .close { position:relative; left:50%; margin-left:-1em; float:left;}
.adminSearch { text-align:right; clear:both; width:100%; margin:0 0 10px 0;}
.adminSearch fieldset { border:none; display:inline; overflow:visible; padding:0;}
.adminSearch * { vertical-align:middle;}
.buttonTypeGo { border:none; cursor:pointer; width:24px; height:20px; position:relative; top:-1px; font:.75em Tahoma; text-align:center; background:url(../images/buttonTypeInput24.gif) no-repeat; }
.layout_editor { width:99%; height:500px; border:0px; font-size:1em; }
.layout_editor_box { padding:10px; border:1px solid #DDDDDD; }
.fixWidth { width:90%; }
/* Pagination Reset */
.pagination{ padding:15px 0; margin:0; text-align:center;}
.pagination *{ margin:0; padding:0;}
.pagination img{ border:0;}
.pagination a,
.pagination strong{ position:relative; display:inline-block; text-decoration:none; line-height:normal; color:#333; font-family:Tahoma, Sans-serif; vertical-align:middle;}
.pagination a:hover,
.pagination a:active,
.pagination a:focus{ background-color:#f4f4f4 !important; }
.pagination strong{ color:#ff6600 !important;}
.pagination a.prev,
.pagination a.prevEnd,
.pagination a.next,
.pagination a.nextEnd{ font-weight:normal !important; border:none !important; margin:0 !important; white-space:nowrap; }
/* Pagination A1 */
.pagination.a1 a,
.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;}
.pagination.a1 a.prev{ padding-left:10px; background:#fff url(../images/arrowPrevA1.gif) no-repeat left center; }
.pagination.a1 a.prevEnd{ padding-left:15px; background:#fff url(../images/arrowPrevEndA1.gif) no-repeat left center; }
.pagination.a1 a.next{ padding-right:10px; background:#fff url(../images/arrowNextA1.gif) no-repeat right center; }
.pagination.a1 a.nextEnd{ padding-right:15px; background:#fff url(../images/arrowNextEndA1.gif) no-repeat right center; }
/* Pagination A2 */
.pagination.a2 a,
.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; }
.pagination.a2 a.prev{ padding-left:10px; background:#fff url(../images/arrowPrevA1.gif) no-repeat left center; }
.pagination.a2 a.prevEnd{ padding-left:15px; background:#fff url(../images/arrowPrevEndA1.gif) no-repeat left center; }
.pagination.a2 a.next{ padding-right:10px; background:#fff url(../images/arrowNextA1.gif) no-repeat right center; }
.pagination.a2 a.nextEnd{ padding-right:15px; background:#fff url(../images/arrowNextEndA1.gif) no-repeat right center; }
/* Pagination B1 */
.pagination.b1 a,
.pagination.b1 strong{ margin:0 -2px; padding:2px 8px; font-weight:bold; font-size:12px;}
.pagination.b1 a.prev{ padding-left:16px; background:url(../images/arrowPrevB1.gif) no-repeat left center; }
.pagination.b1 a.next{ padding-right:16px; background:url(../images/arrowNextB1.gif) no-repeat right center; }
/* Pagination B2 */
.pagination.b2 a,
.pagination.b2 strong{ margin:0 -2px; padding:2px 6px; font-size:11px;}
.pagination.b2 a.prev{ padding-left:12px; background:url(../images/arrowPrevB1.gif) no-repeat left center; }
.pagination.b2 a.next{ padding-right:12px; background:url(../images/arrowNextB1.gif) no-repeat right center; }
/* Pagination C1 */
.pagination.c1 a,
.pagination.c1 strong{ margin:0 -2px; padding:2px 4px; font-size:12px;}
.pagination.c1 a.prev,
.pagination.c1 a.next{ display:inline-block; width:13px; height:14px; padding:3px 4px; margin:0;}
.pagination.c1 a.prev{ background:url(../images/arrowPrevC1.gif) no-repeat center;}
.pagination.c1 a.next{ background:url(../images/arrowNextC1.gif) no-repeat center;}
.pagination.c1 a.prev span,
.pagination.c1 a.next span{ position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;}
/* Pagination C2 */
.pagination.c2 a,
.pagination.c2 strong{ margin:0 -2px; padding:2px 4px; font-size:11px;}
.pagination.c2 a.prev,
.pagination.c2 a.next{ display:inline-block; width:13px; height:14px; padding:3px 4px; margin:0;}
.pagination.c2 a.prev{ background:url(../images/arrowPrevC1.gif) no-repeat center;}
.pagination.c2 a.next{ background:url(../images/arrowNextC1.gif) no-repeat center;}
.pagination.c2 a.prev span,
.pagination.c2 a.next span{ position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;}
.midDefault { border:1px solid #EEEEEE; padding:10px; margin-bottom:10px; color:#888888;}
.midDefault select { margin-left:5px; }
div.page { padding-left:20px; background:transparent url("../images/page.gif") no-repeat left 5px; }
div.page { color:#444444; font-weight:bold; }
div.page a.insert img { background:transparent url("../images/btn_insert.gif") no-repeat left top; width:14px; height:14px; margin-left:10px;}
div.page a.modify img { background:transparent url("../images/btn_modify.gif") no-repeat left top; width:14px; height:14px; margin-left:2px;}
div.page a.delete img { background:transparent url("../images/btn_delete.gif") no-repeat left top; width:14px; height:14px; margin-left:2px;}
ul.nav { margin:0 !important; padding:0; border:1px solid #EEEEEE; background-color:#EFEFEF;}
ul.nav li { margin:5px; padding:8px !important; border:1px solid #5E95BC; list-style:none; background-color:#FFFFFF;}
ul.nav li.active { background-color:#70A2C6; }
ul.nav li a { color:#27536C; text-decoration:none; }
ul.nav li.active a { font-weight:bold; color:#FFFFFF; }
div.blog_widget_ ul.items li { text-decoration:none; color:#000000; margin-bottom:5px;}
div.blog_widget_ ul.items li a { text-decoration:none; color:#000000;}

View file

@ -0,0 +1,44 @@
@charset "utf-8";
@import url("./layoutTemplate.css");
/* NHN > UIT Center > Open UI Technology Team > Jeong Chan Myeong(dece24@nhncorp.com) */
/* Reset */
body { margin:2em; font-size:.75em; font-family:Sans-serif; }
.liquid hr { display:none; }
.liquid address { font-style:normal; }
.liquid h1.title { margin:0;}
.liquid ul.gnb { position:absolute; right:0; top:0; margin:0; padding:0;}
.liquid ul.gnb li { display:inline; margin:0; padding:0;}
/* Container */
#container { margin:0 auto; } /* alignCenter = margin:0 auto | alignLeft = margin:0 | alignRight = margin:0 0 0 auto */
/* Header */
#header { margin-bottom:2em; border-bottom:3px solid #5E95BC; }
#header h1 a { color:#000000; text-decoration:none; color:#27536C;}
/* Body */
#body { *margin-bottom:2em; }
/* Content */
#content { text-align:justify; margin-bottom:2em; }
#content .section { margin-bottom:2em; }
/* Navigation */
#navigation { }
#navigation .section { margin-bottom:2em; }
#navigation .section .nav{ padding:0; margin:0; margin-left:1.25em;}
/* Extra */
#extra { }
#extra .section { margin-bottom:2em; }
#extra .section ul{ padding:0; margin:0; margin-left:1.25em;}
/* Footer */
#footer { padding:1em 0; border-top:1px solid #000; }
/* Heading : h1~h6 */
#body h2 { position:relative; border-bottom:2px solid #ddd; margin:0 0 1em 0; }
#body p{ margin:0 0 1em 0;}

View file

@ -0,0 +1,555 @@
@charset "utf-8";
/* NHN > UIT Center > Open UI Technology Team > Jeong Chan Myeong(dece24@nhncorp.com) */
/* Float Clear */
.fClear { display:block; float:none; clear:both; margin:0; padding:0; width:0; height:0; overflow:hidden; font:0/0 Sans-serif; visibility:hidden; } /* Use it when you want to float clearing */
/* Container */
#container { position:relative; height:auto !important;}
/* Header */
#header { position:relative; *zoom:1; }
/* Body */
#body { position:relative; *zoom:1; }
#body:after { content:""; display:block; clear:both; }
/* Content */
#content { position:relative; }
#content .section { position:relative; }
/* Navigation */
#navigation { position:relative; }
#navigation .section { position:relative; }
/* Extra */
#extra { position:relative; }
#extra .section { position:relative; }
/* Footer */
#footer { position:relative; }
/* ---------- Common Display ---------- */
/* c = #content, n = #navigation, e = #extra */
.c1 #navigation,
.c2 #navigation,
.c3 #navigation,
.c1 #extra,
.c2 #extra,
.c3 #extra
.cn #extra,
.nc #extra { display:none; }
.cn #navigation,
.nc #navigation,
.ce #navigation,
.ec #navigation,
.ne #navigation,
.en #navigation,
.cne #navigation,
.ecn #navigation,
.nec #navigation,
.cen #navigation,
.nce #navigation,
.enc #navigation,
.cee #navigation,
.eec #navigation,
.ece #navigation,
.ce #extra,
.ec #extra,
.ne #extra,
.en #extra,
.cne #extra,
.ecn #extra,
.nec #extra,
.cen #extra,
.nce #extra,
.enc #extra,
.cee #extra,
.eec #extra,
.ece #extra { display:block; }
#extra .section{ display:none; }
.e0 #extra { display:none;}
.e1 #extra,
.e2 #extra,
.e3 #extra,
.e4 #extra,
.e5 #extra,
.e6 #extra,
.e7 #extra,
.e8 #extra,
.e9 #extra,
.e10 #extra,
.e1 #extra .extra1,
.e2 #extra .extra1,
.e2 #extra .extra2,
.e3 #extra .extra1,
.e3 #extra .extra2,
.e3 #extra .extra3,
.e4 #extra .extra1,
.e4 #extra .extra2,
.e4 #extra .extra3,
.e4 #extra .extra4,
.e5 #extra .extra1,
.e5 #extra .extra2,
.e5 #extra .extra3,
.e5 #extra .extra4,
.e5 #extra .extra5,
.e6 #extra .extra1,
.e6 #extra .extra2,
.e6 #extra .extra3,
.e6 #extra .extra4,
.e6 #extra .extra5,
.e6 #extra .extra6,
.e7 #extra .extra1,
.e7 #extra .extra2,
.e7 #extra .extra3,
.e7 #extra .extra4,
.e7 #extra .extra5,
.e7 #extra .extra6,
.e7 #extra .extra7,
.e8 #extra .extra1,
.e8 #extra .extra2,
.e8 #extra .extra3,
.e8 #extra .extra4,
.e8 #extra .extra5,
.e8 #extra .extra6,
.e8 #extra .extra7,
.e8 #extra .extra8,
.e9 #extra .extra1,
.e9 #extra .extra2,
.e9 #extra .extra3,
.e9 #extra .extra4,
.e9 #extra .extra5,
.e9 #extra .extra6,
.e9 #extra .extra7,
.e9 #extra .extra8,
.e9 #extra .extra9,
.e10 #extra .extra1,
.e10 #extra .extra2,
.e10 #extra .extra3,
.e10 #extra .extra4,
.e10 #extra .extra5,
.e10 #extra .extra6,
.e10 #extra .extra7,
.e10 #extra .extra8,
.e10 #extra .extra9,
.e10 #extra .extra10 { display:block;}
.nTop #navigation { display:block; }
.ne #navigation,
.ne #extra,
.ne #extra .section { float:left; }
.en #navigation,
.en #extra,
.en #extra .section { float:right; }
/* ---------- Fixed Layout Preset ---------- */
/* c = #content, n = #navigation, e = #extra */
/* Width */
.fixed #container { width:960px; }
.fixed #body { width:auto; }
.fixed #navigation,
.fixed #extra .section { width:200px; }
.fixed .c1 #content { width:100%; }
.fixed .c1 #navigation { width:300px; }
.fixed .c1 #extra { width:auto; }
.fixed .c1 #extra .section { width:300px; }
.fixed .c2 #content { width:740px; }
.fixed .c3 #content { width:520px;}
.fixed .cee #extra,
.fixed .eec #extra{ width:420px;}
.fixed .ece #extra { width:100%;}
/* Floating 1 Columns */
.fixed .c1 #content { clear:both; }
.fixed .ne #navigation,
.fixed .ne #extra .extra1,
.fixed .ne #extra .extra3,
.fixed .ne #extra .extra5,
.fixed .ne #extra .extra7,
.fixed .ne #extra .extra9 { margin-right:30px; clear:left; *clear:none; }
.fixed .ne #extra .extra2,
.fixed .ne #extra .extra4,
.fixed .ne #extra .extra6,
.fixed .ne #extra .extra8,
.fixed .ne #extra .extra10 { clear:right; }
.fixed .en #navigation,
.fixed .en #extra .extra1,
.fixed .en #extra .extra3,
.fixed .en #extra .extra5,
.fixed .en #extra .extra7
.fixed .en #extra .extra9 { margin-left:30px; clear:right; *clear:none; }
.fixed .en #extra .extra2,
.fixed .en #extra .extra4,
.fixed .en #extra .extra6,
.fixed .en #extra .extra8,
.fixed .en #extra .extra10 { clear:left; }
/* Floating 2 Columns */
.fixed .cn #content { float:left; }
.fixed .cn #navigation,
.fixed .cn #extra { float:right; }
.fixed .nc #content { float:right; }
.fixed .nc #navigation,
.fixed .nc #extra { float:left; }
.fixed .ce #content { float:left; }
.fixed .ce #navigation,
.fixed .ce #extra { float:right; *float:none; *left:20px; _left:17px; }
.fixed .ec #content { float:right; }
.fixed .ec #navigation,
.fixed .ec #extra { float:left; *float:none; }
/* Floating 3 Columns */
.fixed .cne #content { float:left; margin-right:20px; }
.fixed .cne #navigation { float:left; }
.fixed .cne #extra { float:right; }
.fixed .ecn #content { float:left; margin-right:-520px; left:220px; }
.fixed .ecn #navigation { float:right; }
.fixed .ecn #extra { float:left; }
.fixed .nec #content { float:right; }
.fixed .nec #navigation { float:left; margin-right:20px; }
.fixed .nec #extra { float:left; }
.fixed .cen #content { float:left; margin-right:20px; }
.fixed .cen #navigation { float:right; }
.fixed .cen #extra { float:left; }
.fixed .nce #content { float:left; margin-right:-520px; left:220px; }
.fixed .nce #navigation { float:left; }
.fixed .nce #extra { float:right; }
.fixed .enc #content { float:right; margin-left:20px; }
.fixed .enc #navigation { float:right; }
.fixed .enc #extra { float:left; }
.fixed .cee #content { float:left; _margin-right:-3px; }
.fixed .cee #extra { float:right; *float:none; *left:20px; }
.fixed .cee .section { float:left; }
.fixed .cee .extra1,
.fixed .cee .extra3,
.fixed .cee .extra5,
.fixed .cee .extra7,
.fixed .cee .extra9{ margin-right:20px; }
.fixed .eec #content { float:right; _margin-left:-3px; }
.fixed .eec #extra { float:left; *float:none; *left:0; }
.fixed .eec .section{ float:left;}
.fixed .eec .extra1,
.fixed .eec .extra3,
.fixed .eec .extra5,
.fixed .eec .extra7,
.fixed .eec .extra9{ margin-right:20px; }
.fixed .ece #content { float:left; margin-right:-100%; left:220px;}
.fixed .ece #extra { float:left; }
.fixed .ece .extra1,
.fixed .ece .extra3,
.fixed .ece .extra5,
.fixed .ece .extra7,
.fixed .ece .extra9 { float:left; clear:left; *clear:both;}
.fixed .ece .extra2,
.fixed .ece .extra4,
.fixed .ece .extra6,
.fixed .ece .extra8,
.fixed .ece .extra10 { float:right; clear:right; }
/* ---------- Liquid Layout Preset ---------- */
/* c = #content, n = #navigation, e = #extra */
/* Width */
.liquid #container { width:100%; }
.liquid #body { width:auto; }
.liquid .c1 #content { width:100%; }
.liquid .c1 #navigation { width:32%; }
.liquid .c1 #extra { width:66%; }
.liquid .c1 #extra .section { width:48.4%; }
.liquid .c2 #content { width:75%; }
.liquid .c2 #navigation,
.liquid .c2 #extra { width:23%; }
.liquid .c3 #content { width:56%; }
.liquid .c3 #navigation { width:20%; }
.liquid .c3 #extra { width:20%; }
.liquid .cee #extra,
.liquid .eec #extra { width:42%;}
.liquid .ece #extra { width:100%;}
.liquid .cee #extra .section,
.liquid .eec #extra .section{ width:48%; }
.liquid .ece #extra .section { width:20%; }
/* Floating 1 Columns */
.liquid .c1 #content { clear:both; }
.liquid .ne #navigation { margin-right:2%; }
.liquid .ne #extra .extra1,
.liquid .ne #extra .extra3,
.liquid .ne #extra .extra5,
.liquid .ne #extra .extra7,
.liquid .ne #extra .extra9 { float:left; clear:left; }
.liquid .ne #extra .extra2,
.liquid .ne #extra .extra4,
.liquid .ne #extra .extra6,
.liquid .ne #extra .extra8,
.liquid .ne #extra .extra10 { float:right; clear:right; }
.liquid .en #navigation { margin-left:2%; }
.liquid .en #extra .extra1,
.liquid .en #extra .extra3,
.liquid .en #extra .extra5,
.liquid .en #extra .extra7,
.liquid .en #extra .extra9 { float:right; clear:right; }
.liquid .en #extra .extra2,
.liquid .en #extra .extra4,
.liquid .en #extra .extra6,
.liquid .en #extra .extra8,
.liquid .en #extra .extra10 { float:left; clear:left; }
/* Floating 2 Columns */
.liquid .cn #content { float:left; }
.liquid .cn #navigation,
.liquid .cn #extra { float:right; }
.liquid .nc #content { float:right; }
.liquid .nc #navigation,
.liquid .nc #extra { float:left; }
.liquid .ce #content { float:left; _margin-right:-3px; }
.liquid .ce #navigation,
.liquid .ce #extra { float:right; *float:none; *left:2%; }
.liquid .ec #content { float:right; }
.liquid .ec #navigation,
.liquid .ec #extra { float:left; *float:none; }
/* Floating 3 Columns */
.liquid .cne #content { float:left; margin-right:2%; }
.liquid .cne #navigation { float:left; }
.liquid .cne #extra { float:right; }
.liquid .ecn #content { float:left; margin-right:-100%; left:22%; }
.liquid .ecn #navigation { float:right; }
.liquid .ecn #extra { float:left; }
.liquid .nec #content { float:right; }
.liquid .nec #navigation { float:left; margin-right:2%; }
.liquid .nec #extra { float:left; }
.liquid .cen #content { float:left; margin-right:2%; }
.liquid .cen #navigation { float:right; }
.liquid .cen #extra { float:left; }
.liquid .nce #content { float:left; margin-right:-100%; left:22%; }
.liquid .nce #navigation { float:left; }
.liquid .nce #extra { float:right; }
.liquid .enc #content { float:right; margin-left:2%; }
.liquid .enc #navigation { float:right; }
.liquid .enc #extra { float:left; }
.liquid .cee #content { float:left; _margin-right:-3px; }
.liquid .cee #extra { float:right; *float:none; *left:2%; }
.liquid .cee .extra1,
.liquid .cee .extra3,
.liquid .cee .extra5,
.liquid .cee .extra7,
.liquid .cee .extra9 { float:left; clear:left; }
.liquid .cee .extra2,
.liquid .cee .extra4,
.liquid .cee .extra6,
.liquid .cee .extra8,
.liquid .cee .extra10 { float:right; clear:right; }
.liquid .eec #content { float:right; _margin-left:-3px; }
.liquid .eec #extra { float:left; *float:none; *left:0; }
.liquid .eec .extra1,
.liquid .eec .extra3,
.liquid .eec .extra5,
.liquid .eec .extra7,
.liquid .eec .extra9 { float:left; clear:left; }
.liquid .eec .extra2,
.liquid .eec .extra4,
.liquid .eec .extra6,
.liquid .eec .extra8,
.liquid .eec .extra10 { float:right; clear:right; }
.liquid .ece #content { float:left; margin-right:-100%; left:22%;}
.liquid .ece #extra { float:left; }
.liquid .ece .extra1,
.liquid .ece .extra3,
.liquid .ece .extra5,
.liquid .ece .extra7,
.liquid .ece .extra9 { float:left; clear:left; *clear:both; }
.liquid .ece .extra2,
.liquid .ece .extra4,
.liquid .ece .extra6,
.liquid .ece .extra8,
.liquid .ece .extra10 { float:right; clear:right; }
/* ---------- Hybrid Layout Preset ---------- */
/* c = #content, n = #navigation, e = #extra */
/* Width */
.hybrid #container { width:100%; }
.hybrid #body { width:auto; }
.hybrid #content { width:100%; }
.hybrid #navigation { width:200px; }
.hybrid #extra { width:200px; }
.hybrid .c1 #navigation { width:300px; }
.hybrid .c1 #extra { width:auto; }
.hybrid .c1 #extra .section { width:300px; }
.hybrid .cee #extra,
.hybrid .eec #extra { width:420px;}
.hybrid .ece #extra { width:100%;}
.hybrid .cee #extra .section,
.hybrid .eec #extra .section,
.hybrid .ece #extra .section { width:200px; }
/* Floating 1 Columns */
.hybrid .c1 #content { clear:both; }
.hybrid .ne #navigation,
.hybrid .ne #extra .extra1,
.hybrid .ne #extra .extra3,
.hybrid .ne #extra .extra5,
.hybrid .ne #extra .extra7,
.hybrid .ne #extra .extra9 { margin-right:30px; clear:left; *clear:none; }
.hybrid .ne #extra .extra2,
.hybrid .ne #extra .extra4,
.hybrid .ne #extra .extra6,
.hybrid .ne #extra .extra8,
.hybrid .ne #extra .extra10 { margin-left:30px; clear:right; }
.hybrid .en #navigation,
.hybrid .en #extra .extra1,
.hybrid .en #extra .extra3,
.hybrid .en #extra .extra5,
.hybrid .en #extra .extra7,
.hybrid .en #extra .extra9 { margin-left:30px; clear:right; *clear:none; }
.hybrid .en #extra .extra2,
.hybrid .en #extra .extra4,
.hybrid .en #extra .extra6,
.hybrid .en #extra .extra8,
.hybrid .en #extra .extra10 { margin-right:30px; clear:left; }
/* Floating 2 Columns */
.hybrid .cn #body { margin-right:220px; }
.hybrid .cn #content { float:left; margin-right:-100%; }
.hybrid .cn #navigation,
.hybrid .cn #extra { float:right; left:220px; clear:right; }
.hybrid .nc #body { margin-left:220px; }
.hybrid .nc #content { float:right; margin-left:-100%; *margin-left:0; }
.hybrid .nc #navigation,
.hybrid .nc #extra { float:left; left:-220px; clear:left; }
.hybrid .ce #body { margin-right:220px; }
.hybrid .ce #content { float:left; margin-right:-100%; }
.hybrid .ce #navigation,
.hybrid .ce #extra { float:right; left:220px; clear:right; *float:none; *left:100%; *margin-left:20px; *margin-right:-200px; }
.hybrid .ce #navigation { width:100% !important; right:-220px; }
.hybrid .ec #body { margin-left:220px; }
.hybrid .ec #content { float:right; margin-left:-100%; _float:left; _margin-left:0; _margin-right:-100%; }
.hybrid .ec #navigation,
.hybrid .ec #extra { float:left; left:-220px; clear:left; *float:none; *margin-right:-200px; }
.hybrid .ec #navigation { width:100% !important; }
/* Floating 3 Columns */
.hybrid .cne #body { margin-right:440px; }
.hybrid .cne #content { float:left; }
.hybrid .cne #navigation { float:left; margin-right:-200px; left:20px; }
.hybrid .cne #extra { float:right; margin-left:-200px; left:440px; }
.hybrid .ecn #body { margin-left:220px; margin-right:220px; }
.hybrid .ecn #content { float:left; margin-right:-100%; }
.hybrid .ecn #navigation { float:right; margin-left:-200px; left:220px; }
.hybrid .ecn #extra { float:left; left:-220px; }
.hybrid .nec #body { margin-left:440px; }
.hybrid .nec #content { float:right; }
.hybrid .nec #navigation { float:left; margin-right:-200px; left:-440px; }
.hybrid .nec #extra { float:left; margin-right:-200px; left:-220px; }
.hybrid .cen #body { margin-right:440px; }
.hybrid .cen #content { float:left; }
.hybrid .cen #navigation { float:right; margin-left:-200px; left:440px; }
.hybrid .cen #extra { float:left; margin-right:-200px; left:20px; }
.hybrid .nce #body { margin-left:220px; margin-right:220px; }
.hybrid .nce #content { float:left; margin-right:-100%; }
.hybrid .nce #navigation { float:left; margin-right:-200px; left:-220px; }
.hybrid .nce #extra { float:right; right:-220px; }
.hybrid .enc #body { margin-left:440px; }
.hybrid .enc #content { float:right; }
.hybrid .enc #navigation { float:right; margin-left:-200px; left:-20px; }
.hybrid .enc #extra { float:left; margin-right:-200px; left:-440px; }
.hybrid .cee #body { margin-right:440px;}
.hybrid .cee #content { float:left; margin-right:-100%; }
.hybrid .cee #navigation { right:-440px;}
.hybrid .cee #extra { float:right; left:440px; *float:none; *left:100%; *margin-left:20px; *margin-right:-420px; }
.hybrid .cee .extra1,
.hybrid .cee .extra3,
.hybrid .cee .extra5,
.hybrid .cee .extra7,
.hybrid .cee .extra9{ float:left; clear:left; }
.hybrid .cee .extra2,
.hybrid .cee .extra4,
.hybrid .cee .extra6,
.hybrid .cee .extra8,
.hybrid .cee .extra10{ float:right; clear:right; }
.hybrid .eec #body { margin-left:440px;}
.hybrid .eec #content { float:left; margin-right:-100%; }
.hybrid .eec #extra { float:left; left:-440px; *float:none; *margin-right:-420px; }
.hybrid .eec .section{ float:left;}
.hybrid .eec .extra1,
.hybrid .eec .extra3,
.hybrid .eec .extra5,
.hybrid .eec .extra7,
.hybrid .eec .extra9{ float:left; clear:left; }
.hybrid .eec .extra2,
.hybrid .eec .extra4,
.hybrid .eec .extra6,
.hybrid .eec .extra8,
.hybrid .eec .extra10{ float:right; clear:right; }
.hybrid .ece #body { margin:0 220px; }
.hybrid .ece #content { float:left; margin-right:-100%; }
.hybrid .ece #navigation { right:-220px; }
.hybrid .ece #extra { float:left; }
.hybrid .ece .extra1,
.hybrid .ece .extra3,
.hybrid .ece .extra5,
.hybrid .ece .extra7,
.hybrid .ece .extra9{ float:left; left:-220px; margin-right:-200px; *margin-right:0; clear:left; *clear:both; }
.hybrid .ece .extra2,
.hybrid .ece .extra4,
.hybrid .ece .extra6,
.hybrid .ece .extra8,
.hybrid .ece .extra10{ float:right; right:-220px; margin-left:-200px; *margin-left:0; clear:right; *clear:both; }
/* Navigation Top */
.nTop #navigation { position:absolute; float:right !important; width:960px !important; margin:0 !important; *clear:none !important; overflow:visible; top:-4em; left:auto !important; right:0; }
.nTop #navigation .section { position:absolute; float:right; top:0; right:0; width:auto; margin:0; padding:0; }
.nTop #navigation .section:after { content:""; display:block; clear:both; width:0; height:0; overflow:hidden; visibility:hidden; font:0/0 Sans-serif;}
.nTop #navigation h2 { position:absolute; left:0; top:0; width:0; height:0; border:0; overflow:hidden; visibility:hidden; font:0/0 Sans-serif; }
.nTop #navigation ul.nav { position:relative; display:block; float:right; margin:0; padding:0; list-style:none; overflow:hidden; text-align:right; white-space:nowrap; }
.nTop #navigation ul.nav li { position:relative; left:-1px; display:inline; white-space:nowrap; border-left:1px solid #ccc; padding-left:5px; }

View file

@ -0,0 +1,9 @@
<filter name="change_layout" module="homepage" act="procHomepageChangeLayout" confirm_msg_code="confirm_change_layout">
<form>
<node target="layout" required="true" />
</form>
<response callback_func="completeChangeLayout">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,9 @@
<filter name="delete_group" module="homepage" act="procHomepageDeleteGroup" confirm_msg_code="confirm_delete">
<form>
<node target="title" required="true" />
</form>
<response callback_func="completeDeleteGroup">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,10 @@
<filter name="delete_menu_item" module="homepage" act="procHomepageDeleteMenuItem" confirm_msg_code="confirm_delete_menu_item">
<form>
<node target="menu_item_srl" required="true" />
</form>
<response callback_func="completeInsertMenuItem">
<tag name="error" />
<tag name="message" />
<tag name="xml_file" />
</response>
</filter>

View file

@ -0,0 +1,159 @@
<filter name="insert_board" module="homepage" act="procHomepageInsertBoard" confirm_msg_code="confirm_submit">
<form>
<node target="mid" required="true" filter="alpha_number" />
<node target="browser_title" required="true" maxlength="250" />
<node target="list_count" required="true" filter="number" />
<node target="search_list_count" required="true" filter="number" />
<node target="page_count" required="true" filter="number" />
</form>
<parameter>
<param name="board_name" target="mid" />
<param name="module_srl" target="module_srl" />
<param name="module_category_srl" target="module_category_srl" />
<param name="layout_srl" target="layout_srl" />
<param name="skin" target="skin" />
<param name="browser_title" target="browser_title" />
<param name="use_category" target="use_category" />
<param name="order_target" target="order_target" />
<param name="order_type" target="order_type" />
<param name="list_count" target="list_count" />
<param name="search_list_count" target="search_list_count" />
<param name="except_notice" target="except_notice" />
<param name="consultation" target="consultation" />
<param name="admin_mail" target="admin_mail" />
<param name="page_count" target="page_count" />
<param name="is_default" target="is_default" />
<param name="description" target="description" />
<param name="header_text" target="header_text" />
<param name="footer_text" target="footer_text" />
<param name="admin_id" target="admin_id" />
<param name="extra_vars_1_name" target="extra_vars_1_name" />
<param name="extra_vars_1_type" target="extra_vars_1_type" />
<param name="extra_vars_1_is_required" target="extra_vars_1_is_required" />
<param name="extra_vars_1_search" target="extra_vars_1_search" />
<param name="extra_vars_1_default" target="extra_vars_1_default" />
<param name="extra_vars_1_desc" target="extra_vars_1_desc" />
<param name="extra_vars_2_name" target="extra_vars_2_name" />
<param name="extra_vars_2_type" target="extra_vars_2_type" />
<param name="extra_vars_2_is_required" target="extra_vars_2_is_required" />
<param name="extra_vars_2_search" target="extra_vars_2_search" />
<param name="extra_vars_2_default" target="extra_vars_2_default" />
<param name="extra_vars_2_desc" target="extra_vars_2_desc" />
<param name="extra_vars_3_name" target="extra_vars_3_name" />
<param name="extra_vars_3_type" target="extra_vars_3_type" />
<param name="extra_vars_3_is_required" target="extra_vars_3_is_required" />
<param name="extra_vars_3_search" target="extra_vars_3_search" />
<param name="extra_vars_3_default" target="extra_vars_3_default" />
<param name="extra_vars_3_desc" target="extra_vars_3_desc" />
<param name="extra_vars_4_name" target="extra_vars_4_name" />
<param name="extra_vars_4_type" target="extra_vars_4_type" />
<param name="extra_vars_4_is_required" target="extra_vars_4_is_required" />
<param name="extra_vars_4_search" target="extra_vars_4_search" />
<param name="extra_vars_4_default" target="extra_vars_4_default" />
<param name="extra_vars_4_desc" target="extra_vars_4_desc" />
<param name="extra_vars_5_name" target="extra_vars_5_name" />
<param name="extra_vars_5_type" target="extra_vars_5_type" />
<param name="extra_vars_5_is_required" target="extra_vars_5_is_required" />
<param name="extra_vars_5_search" target="extra_vars_5_search" />
<param name="extra_vars_5_default" target="extra_vars_5_default" />
<param name="extra_vars_5_desc" target="extra_vars_5_desc" />
<param name="extra_vars_6_name" target="extra_vars_6_name" />
<param name="extra_vars_6_type" target="extra_vars_6_type" />
<param name="extra_vars_6_is_required" target="extra_vars_6_is_required" />
<param name="extra_vars_6_search" target="extra_vars_6_search" />
<param name="extra_vars_6_default" target="extra_vars_6_default" />
<param name="extra_vars_6_desc" target="extra_vars_6_desc" />
<param name="extra_vars_7_name" target="extra_vars_7_name" />
<param name="extra_vars_7_type" target="extra_vars_7_type" />
<param name="extra_vars_7_is_required" target="extra_vars_7_is_required" />
<param name="extra_vars_7_search" target="extra_vars_7_search" />
<param name="extra_vars_7_default" target="extra_vars_7_default" />
<param name="extra_vars_7_desc" target="extra_vars_7_desc" />
<param name="extra_vars_8_name" target="extra_vars_8_name" />
<param name="extra_vars_8_type" target="extra_vars_8_type" />
<param name="extra_vars_8_is_required" target="extra_vars_8_is_required" />
<param name="extra_vars_8_search" target="extra_vars_8_search" />
<param name="extra_vars_8_default" target="extra_vars_8_default" />
<param name="extra_vars_8_desc" target="extra_vars_8_desc" />
<param name="extra_vars_9_name" target="extra_vars_9_name" />
<param name="extra_vars_9_type" target="extra_vars_9_type" />
<param name="extra_vars_9_is_required" target="extra_vars_9_is_required" />
<param name="extra_vars_9_search" target="extra_vars_9_search" />
<param name="extra_vars_9_default" target="extra_vars_9_default" />
<param name="extra_vars_9_desc" target="extra_vars_9_desc" />
<param name="extra_vars_10_name" target="extra_vars_10_name" />
<param name="extra_vars_10_type" target="extra_vars_10_type" />
<param name="extra_vars_10_is_required" target="extra_vars_10_is_required" />
<param name="extra_vars_10_search" target="extra_vars_10_search" />
<param name="extra_vars_10_default" target="extra_vars_10_default" />
<param name="extra_vars_10_desc" target="extra_vars_10_desc" />
<param name="extra_vars_11_name" target="extra_vars_11_name" />
<param name="extra_vars_11_type" target="extra_vars_11_type" />
<param name="extra_vars_11_is_required" target="extra_vars_11_is_required" />
<param name="extra_vars_11_search" target="extra_vars_11_search" />
<param name="extra_vars_11_default" target="extra_vars_11_default" />
<param name="extra_vars_11_desc" target="extra_vars_11_desc" />
<param name="extra_vars_12_name" target="extra_vars_12_name" />
<param name="extra_vars_12_type" target="extra_vars_12_type" />
<param name="extra_vars_12_is_required" target="extra_vars_12_is_required" />
<param name="extra_vars_12_search" target="extra_vars_12_search" />
<param name="extra_vars_12_default" target="extra_vars_12_default" />
<param name="extra_vars_12_desc" target="extra_vars_12_desc" />
<param name="extra_vars_13_name" target="extra_vars_13_name" />
<param name="extra_vars_13_type" target="extra_vars_13_type" />
<param name="extra_vars_13_is_required" target="extra_vars_13_is_required" />
<param name="extra_vars_13_search" target="extra_vars_13_search" />
<param name="extra_vars_13_default" target="extra_vars_13_default" />
<param name="extra_vars_13_desc" target="extra_vars_13_desc" />
<param name="extra_vars_14_name" target="extra_vars_14_name" />
<param name="extra_vars_14_type" target="extra_vars_14_type" />
<param name="extra_vars_14_is_required" target="extra_vars_14_is_required" />
<param name="extra_vars_14_search" target="extra_vars_14_search" />
<param name="extra_vars_14_default" target="extra_vars_14_default" />
<param name="extra_vars_14_desc" target="extra_vars_14_desc" />
<param name="extra_vars_15_name" target="extra_vars_15_name" />
<param name="extra_vars_15_type" target="extra_vars_15_type" />
<param name="extra_vars_15_is_required" target="extra_vars_15_is_required" />
<param name="extra_vars_15_search" target="extra_vars_15_search" />
<param name="extra_vars_15_default" target="extra_vars_15_default" />
<param name="extra_vars_15_desc" target="extra_vars_15_desc" />
<param name="extra_vars_16_name" target="extra_vars_16_name" />
<param name="extra_vars_16_type" target="extra_vars_16_type" />
<param name="extra_vars_16_is_required" target="extra_vars_16_is_required" />
<param name="extra_vars_16_search" target="extra_vars_16_search" />
<param name="extra_vars_16_default" target="extra_vars_16_default" />
<param name="extra_vars_16_desc" target="extra_vars_16_desc" />
<param name="extra_vars_17_name" target="extra_vars_17_name" />
<param name="extra_vars_17_type" target="extra_vars_17_type" />
<param name="extra_vars_17_is_required" target="extra_vars_17_is_required" />
<param name="extra_vars_17_search" target="extra_vars_17_search" />
<param name="extra_vars_17_default" target="extra_vars_17_default" />
<param name="extra_vars_17_desc" target="extra_vars_17_desc" />
<param name="extra_vars_18_name" target="extra_vars_18_name" />
<param name="extra_vars_18_type" target="extra_vars_18_type" />
<param name="extra_vars_18_is_required" target="extra_vars_18_is_required" />
<param name="extra_vars_18_search" target="extra_vars_18_search" />
<param name="extra_vars_18_default" target="extra_vars_18_default" />
<param name="extra_vars_18_desc" target="extra_vars_18_desc" />
<param name="extra_vars_19_name" target="extra_vars_19_name" />
<param name="extra_vars_19_type" target="extra_vars_19_type" />
<param name="extra_vars_19_is_required" target="extra_vars_19_is_required" />
<param name="extra_vars_19_search" target="extra_vars_19_search" />
<param name="extra_vars_19_default" target="extra_vars_19_default" />
<param name="extra_vars_19_desc" target="extra_vars_19_desc" />
<param name="extra_vars_20_name" target="extra_vars_20_name" />
<param name="extra_vars_20_type" target="extra_vars_20_type" />
<param name="extra_vars_20_is_required" target="extra_vars_20_is_required" />
<param name="extra_vars_20_search" target="extra_vars_20_search" />
<param name="extra_vars_20_default" target="extra_vars_20_default" />
<param name="extra_vars_20_desc" target="extra_vars_20_desc" />
</parameter>
<response callback_func="completeInsertBoard">
<tag name="error" />
<tag name="message" />
<tag name="module" />
<tag name="act" />
<tag name="page" />
<tag name="module_srl" />
</response>
</filter>

View file

@ -0,0 +1,11 @@
<filter name="insert_grant" module="homepage" act="procHomepageInsertBoardGrant" confirm_msg_code="confirm_submit">
<form>
<node target="module_srl" required="true" />
</form>
<response callback_func="completeInsertGrant">
<tag name="error" />
<tag name="message" />
<tag name="page" />
<tag name="module_srl" />
</response>
</filter>

View file

@ -0,0 +1,9 @@
<filter name="insert_group" module="homepage" act="procHomepageInsertGroup" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" />
</form>
<response callback_func="completeInsertGroup">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,10 @@
<filter name="insert_menu_item" module="homepage" act="procHomepageInsertMenuItem" confirm_msg_code="confirm_submit">
<form>
<node target="menu_srl" required="true" />
</form>
<response callback_func="completeInsertMenuItem">
<tag name="error" />
<tag name="message" />
<tag name="xml_file" />
</response>
</filter>

View file

@ -0,0 +1,10 @@
<filter name="insert_page" module="homepage" act="procHomepageInsertPage" confirm_msg_code="confirm_submit">
<form>
<node target="module_srl" required="true" filter="number" />
</form>
<parameter />
<response callback_func="completeInsertPage">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,9 @@
<filter name="update_index_mid" module="homepage" act="procHomepageChangeIndex" confirm_msg_code="confirm_update">
<form>
<node target="index_mid" required="true" />
</form>
<response>
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,11 @@
<filter name="update_member_group" module="homepage" act="procHomepageUpdateMemberGroup" confirm_msg_code="confirm_submit">
<form />
<parameter>
<param name="cart" target="cart" />
<param name="group_srl" target="group_srl" />
</parameter>
<response>
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,84 @@
<!--%import("filter/insert_group.xml")-->
<!--%import("filter/delete_group.xml")-->
<h3 class="title">{$lang->cmd_homepage_menus[$act]}</h3>
<p class="infoText">{$lang->about_homepage_act[$act]}</p>
<form id="fo_group">
<input type="hidden" name="group_srl" value=""/>
</form>
<table cellspacing="0" class="adminTable">
<thead>
<tr>
<th scope="col" class="half_wide"><div>{$lang->group_title}</div></th>
<th scope="col" class="half_wide"><div>{$lang->description}</div></th>
<th scope="col"><div>{$lang->regdate}</div></th>
<th scope="col"><div>{$lang->is_default}</div></th>
<th scope="col" colspan="2"><div>&nbsp;</div></th>
</tr>
</thead>
<tbody>
<!--@if(!count($group_list))-->
<tr>
<td colspan="7">{$lang->msg_group_is_null}</td>
</tr>
<!--@end-->
<!--@foreach($group_list as $group_srl => $group_info)-->
<tr class="row{$cycle_idx}">
<td class="nowrap">{$group_info->title}</td>
<td>{nl2br($group_info->description)}&nbsp;</td>
<td class="date center nowrap">{zdate($group_info->regdate,"Y-m-d H:i:s")}</td>
<td class="center number"><!--@if($group_info->is_default=='Y')-->Y<!--@else-->&nbsp;<!--@end--></td>
<td class="modify"><a href="{getUrl('group_srl',$group_info->group_srl)}">{$lang->cmd_modify}</a></td>
<td class="delete">
<!--@if($group_info->is_default!='Y' && $group_info->is_admin !='Y')-->
<a href="#" onclick="doDeleteGroup({$group_info->group_srl});return false;">{$lang->cmd_delete}</a>
<!--@else-->
&nbsp;
<!--@end-->
</td>
</tr>
<!--@end-->
</tbody>
</table>
<br />
<!-- 그룹 추가 -->
<form action="./" method="get" onsubmit="return procFilter(this, insert_group)">
<input type="hidden" name="group_srl" value="{$selected_group->group_srl}" />
<!--@if($selected_group->group_srl && $selected_group->is_default == 'Y')-->
<input type="hidden" name="is_default" value="Y" />
<!--@end-->
<table cellspacing="0" class="adminTable">
<tr>
<th scope="row"><div>{$lang->group_title}</div></th>
<td class="wide"><input type="text" name="title" value="{$selected_group->title}" class="inputTypeText w400" /></td>
</tr>
<!--@if(!$selected_group->group_srl || $selected_group->is_default != 'Y')-->
<tr class="row2">
<th scope="row"><div>{$lang->is_default}</div></th>
<td><input type="checkbox" name="is_default" value="Y" class="checkbox" <!--@if($selected_group->is_default=='Y')-->checked="checked"<!--@end--> /> {$lang->about_member_default}</td>
</tr>
<!--@end-->
<tr>
<th scope="row"><div>{$lang->description}</div></th>
<td><textarea name="description" class="inputTypeTextArea w400">{$selected_group->description}</textarea></td>
</tr>
<tr class="row2">
<td colspan="2" class="right">
<!--@if($selected_group->group_srl)-->
<span class="button blue"><input type="submit" value="{$lang->cmd_modify}" accesskey="s" /></span>
<span class="button"><input type="button" value="{$lang->cmd_cancel}" onclick="location.href=current_url.setQuery('group_srl','');return false;"/></span>
<!--@else-->
<span class="button blue"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
<!--@end-->
</td>
</tr>
</table>
</form>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,018 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,134 @@
<h3 class="title">{$lang->cmd_homepage_menus[$act]}</h3>
<p class="infoText">{$lang->about_homepage_act[$act]}</p>
<!--%import("./filter/change_layout.xml")-->
<form action="./" method="post" onsubmit="return procFilter(this, change_layout);">
<table cellspacing="0" class="adminTable">
<caption>{$lang->layout}</caption>
<tr class="row2">
<th scope="row"><div>{$lang->layout}</div></th>
<td>
<select name="layout">
<!--@foreach($layout_list as $key => $val)-->
<option value="{$val->layout}" <!--@if($selected_layout->layout == $val->layout)-->selected="selected"<!--@end-->>{$val->title} ver {$val->version} ({$val->layout})</option>
<!--@end-->
</select>
<span class="button blue"><input type="submit" value="{$lang->cmd_change_layout}" /></span>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->path}</div></th>
<td>{$selected_layout->path}</td>
</tr>
<!--@if(count($selected_layout->author))-->
<tr class="row2">
<th scope="row"><div>{$lang->author}</div></th>
<td>
<!--@foreach($selected_layout->author as $k => $v)-->
<a href="{$v->homepage}" onclick="window.open(this.href);return false;" class="blue">{$v->name}</a>
<!--@end-->
</td>
</tr>
<!--@end-->
<!--@if($selected_layout->description)-->
<tr class="row2">
<th scope="row"><div>{$lang->description}</div></th>
<td>{nl2br(trim($selected_layout->description))}</td>
</tr>
<!--@end-->
</table>
</form>
<form id="fo_layout" action="./" method="post" enctype="multipart/form-data" target="hidden_iframe">
<input type="hidden" name="module" value="homepage" />
<input type="hidden" name="act" value="procHomepageLayoutUpdate" />
<input type="hidden" name="layout_srl" value="{$selected_layout->layout_srl}" />
<input type="hidden" name="title" value="{htmlspecialchars($homepage_info->title)}" />
<!--@if($logged_info->is_admin != 'Y')-->
<!--@foreach($selected_layout->menu as $menu_name => $menu_info)-->
<input type="hidden" name="{$menu_name}" value="{$menu_info->menu_srl}" />
<!--@end-->
<!--@end-->
<table cellspacing="0" class="adminTable">
<tr class="row2">
<th scope="row"><div>{$lang->header_script}</div></th>
<td>
<textarea name="header_script" class="inputTypeTextArea w400">{htmlspecialchars($selected_layout->header_script)}</textarea>
<p>{$lang->about_header_script}</p>
</td>
</tr>
<!--@foreach($selected_layout->extra_var as $name => $var)-->
<!--@if($var->group && ((!$group) || $group != $var->group))-->
{@$group = $var->group}
</table>
<table cellspacing="0" class="adminTable">
<col width="150" />
<col width="*" />
<caption>{$group}</caption>
<!--@end-->
<tr class="row{$cycle_idx+1}">
<th scope="row"><div>{$var->title}</div></th>
<td>
<!--@if($var->type == "text")-->
<input type="text" name="{$name}" value="{htmlspecialchars($var->value)}" class="inputTypeText w400"/>
<!--@elseif($var->type == "textarea")-->
<textarea name="{$name}" class="inputTypeTextArea w400">{htmlspecialchars($var->value)}</textarea>
<!--@elseif($var->type=="image")-->
<!--@if($var->value)-->
<div>
<img src="{$var->value}" alt="image" /><br />
<input type="checkbox" name="del_{$name}" value="Y" id="del_{$name}" class="checkbox" />
<label for="del_{$name}">{$lang->cmd_delete}</label>
</div>
<!--@end-->
<input type="file" name="{$name}" value="" />
<!--@elseif($var->type == "select")-->
<select name="{$name}">
<!--@foreach($var->options as $key => $val)-->
<option value="{$key}" <!--@if($key==$var->value)-->selected="selected"<!--@end-->>{$val}</option>
<!--@end-->
</select>
<!--@end-->
<p>{$var->description}</p>
</td>
</tr>
<!--@end-->
<!--@if($var->group)-->
<!--@end-->
<!--@if($logged_info->is_admin == 'Y')-->
<!--@foreach($selected_layout->menu as $menu_name => $menu_info)-->
<tr>
<th scope="row"><div>{$menu_info->title}<br />({$menu_name})</div></th>
<td class="left tahoma">
<select name="{$menu_name}">
<option value="0">------------------------</option>
<!--@foreach($menu_list as $key => $val)-->
<option value="{$val->menu_srl}" <!--@if($val->menu_srl == $menu_info->menu_srl)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
</td>
</tr>
<!--@end-->
<!--@end-->
<tr class="row2">
<td colspan="2" class="right">
<span class="button strong blue"><input type="submit" value="{$lang->cmd_save}" /></span>
</td>
</tr>
</table>
<iframe name="hidden_iframe" frameborder="0" style="display:none"></iframe>
</form>

View file

@ -0,0 +1,579 @@
var max_menu_depth = 1;
var menuList = new Array();
var mousePos = {x:0,y:0}
function chkMousePosition(evt) {
var e = new xEvent(evt);
mousePos = {x:e.pageX, y:e.pageY};
var pobj = e.target;
while(pobj) {
pobj = pobj.parentNode;
if(pobj && pobj.id == 'menuItem') return;
}
hideMenuItem();
}
function homepageLoadMenuInfo(xml_file) {
var oXml = new xml_handler();
oXml.reset();
oXml.xml_path = xml_file;
oXml.request(completeHomepageLoadMenuInfo, oXml);
}
function completeHomepageLoadMenuInfo(oXml) {
var waiting_obj = xGetElementById("waitingforserverresponse");
if(waiting_obj) waiting_obj.style.visibility = "hidden";
var xmlDoc = oXml.getResponseXml();
if(!xmlDoc) return null;
// node 태그에 해당하는 값들을 가져와서 html을 작성
var node_list = xmlDoc.getElementsByTagName("node");
if(node_list.length<1) return;
// select 내용 없앰
xInnerHtml('menu','');
var root = xmlDoc.getElementsByTagName("root")[0];
root.setAttribute('node_srl',0);
root.setAttribute('parent_srl',0);
xGetElementById('menu').appendChild(getGabItem(0,0,0));
homepageInsertMenuObject(xGetElementById('menu'), root, 0);
}
function getGabItem(parent_srl, up_srl, depth) {
if(typeof(parent_srl)=='undefined' || !parent_srl) parent_srl = 0;
if(typeof(up_srl)=='undefined' || !up_srl) up_srl = 0;
if(typeof(depth)=='undefined' || !depth) depth = 0;
var gabObj = xCreateElement('div');
gabObj.id = 'gab_'+parent_srl+'_'+up_srl;
gabObj.style.cursor = "pointer";
gabObj.style.width = '100%';
gabObj.style.height = '1px';
gabObj.style.marign = '5px 0 0 0';
gabObj.style.padding = '0 0 5px 0';
gabObj.style.overflow = "hidden";
gabObj.style.whitespace = "nowrap";
return gabObj;
}
// root부터 시작해서 recursive하게 노드를 표혐
function homepageInsertMenuObject(drawObj, parent_node, depth) {
for (var i=0; i< parent_node.childNodes.length; i++) {
var html = "";
var node = parent_node.childNodes.item(i);
if(node.nodeName!="node") continue;
var node_srl = node.getAttribute("node_srl");
var parent_srl = node.getAttribute("parent_srl");
var text = node.getAttribute("text");
var url = node.getAttribute("url");
if(!text) continue;
var itemObj = xCreateElement('div');
itemObj.style.margin = "0 0 0 "+(depth*20)+"px";
if(parent_srl>0 && i<1) itemObj.appendChild(getGabItem(parent_srl, 0, depth));
var textObj = xCreateElement('div');
textObj.className = "page";
textObj.style.cursor = "pointer";
textObj.id = "node_"+node_srl;
textObj.style.padding = "5px 0 5px 20px";
xInnerHtml(textObj, text);
if(depth < max_menu_depth-1)
xInnerHtml(textObj, xInnerHtml(textObj) + '<a href="#" onclick="homepageAddMenu('+node_srl+'); return false;" class="insert"><img src="./common/tpl/images/blank.gif" alt="" /></a> ');
xInnerHtml(textObj, xInnerHtml(textObj) + '<a href="#" onclick="homepageModifyMenu('+node_srl+'); return false;" class="modify"><img src="./common/tpl/images/blank.gif" alt="" /></a> ');
if(!node.hasChildNodes()) {
xInnerHtml(textObj, xInnerHtml(textObj) + '<a href="#" onclick="homepageDeleteMenu('+node_srl+'); return false;" class="delete"><img src="./common/tpl/images/blank.gif" alt="" /></a> ');
}
itemObj.appendChild(textObj);
if(node.hasChildNodes()) homepageInsertMenuObject(itemObj, node, depth+1);
itemObj.appendChild(getGabItem(parent_srl, node_srl, depth));
drawObj.appendChild(itemObj);
}
}
function homepageAddMenu(node_srl) {
menuFormReset();
var obj = new Array();
obj['mode'] = 'insert';
if(typeof(node_srl)!='undefined' && node_srl > 0) {
obj['parent_srl'] = node_srl;
}
menuFormInsert(obj)
showMenuItem();
}
function homepageModifyMenu(node_srl) {
var params = new Array();
params['node_srl'] = node_srl;
var response_tags = new Array('error','message','menu_info');
exec_xml('homepage','getHomepageMenuItem', params, completeModifyMenu, response_tags);
}
function completeModifyMenu(ret_obj) {
var menu_info = ret_obj['menu_info'];
menu_info['mode'] = 'update';
menuFormInsert(menu_info)
showMenuItem();
showMenuButton();
}
function homepageDeleteMenu(node_srl) {
var fo_obj = xGetElementById('menu_item_form');
fo_obj.menu_item_srl.value = node_srl;
procFilter(fo_obj, delete_menu_item);
}
function completeChangeLayout(ret_obj) {
location.reload();
}
function hideMenuItem() {
xGetElementById('menuItem').style.visibility = 'hidden';
menuFormReset();
}
function showMenuButton() {
xGetElementById('itemAttr4').style.display = 'block';
}
function showMenuItem() {
var obj = xGetElementById('menuItem');
xLeft(obj, mousePos.x - xWidth('navigation') - 40);
xTop(obj, mousePos.y - xHeight('header') - 70 );
obj.style.visibility = 'visible';
}
function menuFormReset() {
var fo_obj = xGetElementById("fo_menu");
fo_obj.parent_srl.value = '';
fo_obj.menu_item_srl.value = '';
fo_obj.mode.value = '';
var names = xGetElementsByClassName("menu_names");
for(var i in names) names[i].value = "";
fo_obj.browser_title.value = '';
fo_obj.menu_open_window.checked = false;
fo_obj.menu_expand.checked = false;
for(var i=0; i<fo_obj.group_srls.length;i++) fo_obj.group_srls[i].checked = false;
fo_obj.module_type.selectedIndex = 0;
fo_obj.module_type.disabled = "";
fo_obj.module_id.value = '';
fo_obj.url.value = '';
xGetElementById('itemAttr3').style.display = "none";
xGetElementById("menu_normal_btn_zone").style.display = "none";
xGetElementById('menu_normal_btn_img').src = "";
xGetElementById("menu_hover_btn_zone").style.display = "none";
xGetElementById('menu_hover_btn_img').src = "";
xGetElementById("menu_active_btn_zone").style.display = "none";
xGetElementById('menu_active_btn_img').src = "";
xGetElementById('itemAttr4').style.display = 'none';
fo_obj.reset();
}
function menuFormInsert(obj) {
if(typeof(obj)=='undefined') return;
var fo_obj = xGetElementById("fo_menu");
if(typeof(obj.parent_srl)!='undefined') fo_obj.parent_srl.value = obj.parent_srl;
if(typeof(obj.menu_item_srl)!='undefined') fo_obj.menu_item_srl.value = obj.menu_item_srl;
if(typeof(obj.mode)!='undefined') fo_obj.mode.value = obj.mode;
if(typeof(obj.name)!='undefined') {
for(var i in obj.name) {
var o = fo_obj['menu_name_'+i];
if(!o) continue;
o.value = obj.name[i];
}
}
if(typeof(obj.browser_title)!='undefined') fo_obj.browser_title.value = obj.browser_title;
if(typeof(obj.open_window)!='undefined' && obj.open_window=='Y') fo_obj.menu_open_window.checked = true;
if(typeof(obj.expand)!='undefined' && obj.expand=='Y') fo_obj.menu_expand.checked = true;
if(typeof(obj.group_srls)!='undefined' && obj.group_srls && typeof(obj.group_srls.item)!='undefined' && obj.group_srls.item) {
for(var j in obj.group_srls.item) {
for(var i=0; i<fo_obj.group_srls.length;i++) {
if(obj.group_srls.item[j]==fo_obj.group_srls[i].value) fo_obj.group_srls[i].checked = true;
}
}
}
if(typeof(obj.module_type)!='undefined') {
if(obj.module_type == 'url') {
fo_obj.module_type.selectedIndex = 2;
if(typeof(obj.url)!='undefined') fo_obj.url.value = obj.url;
fo_obj.module_type.disabled = "disabled";
xGetElementById('itemAttr2').style.display = 'none';
xGetElementById('itemAttr3').style.display = 'block';
} else {
if(obj.module_type == 'page') fo_obj.module_type.selectedIndex = 1;
else fo_obj.module_type.selectedIndex = 1;
if(typeof(obj.module_id)!='undefined') fo_obj.module_id.value = obj.module_id;
fo_obj.module_type.disabled = "disabled";
xGetElementById('itemAttr2').style.display = 'block';
xGetElementById('itemAttr3').style.display = 'none';
}
}
if(typeof(obj.normal_btn)!='undefined' && obj.normal_btn) {
xGetElementById('menu_normal_btn_img').src = obj.normal_btn;
xGetElementById('menu_normal_btn_zone').style.display = "block";
xGetElementById('itemAttr4').style.display = 'block';
fo_obj.normal_btn.value = obj.normal_btn;
}
if(typeof(obj.hover_btn)!='undefined' && obj.hover_btn) {
xGetElementById('menu_hover_btn_img').src = obj.hover_btn;
xGetElementById('menu_hover_btn_zone').style.display = "block";
xGetElementById('itemAttr4').style.display = 'block';
fo_obj.hover_btn.value = obj.hover_btn;
}
if(typeof(obj.active_btn)!='undefined' && obj.active_btn) {
xGetElementById('menu_active_btn_img').src = obj.active_btn;
xGetElementById('menu_active_btn_zone').style.display = "block";
xGetElementById('itemAttr4').style.display = 'block';
fo_obj.active_btn.value = obj.active_btn;
}
}
function changeMenuType(obj) {
if(obj.selectedIndex == 2) {
xGetElementById('itemAttr2').style.display = 'none';
xGetElementById('itemAttr3').style.display = 'block';
return;
}
xGetElementById('itemAttr2').style.display = 'block';
xGetElementById('itemAttr3').style.display = 'none';
}
function completeInsertMenuItem(ret_obj) {
var xml_file = ret_obj['xml_file'];
if(!xml_file) return;
hideMenuItem();
homepageLoadMenuInfo(xml_file);
}
function doHomepageMenuUploadButton(obj) {
// 이미지인지 체크
if(!/\.(gif|jpg|jpeg|png)$/i.test(obj.value)) return alert(alertImageOnly);
var fo_obj = xGetElementById("fo_menu");
var act = fo_obj.act.value;
fo_obj.act.value = "procHomepageMenuUploadButton";
fo_obj.target.value = obj.name;
fo_obj.submit();
fo_obj.act.value = act;
fo_obj.target.value = "";
}
/* 메뉴 이미지 업로드 후처리 */
function completeMenuUploadButton(target, filename) {
var column_name = target.replace(/^menu_/,'');
var fo_obj = xGetElementById("fo_menu");
var zone_obj = xGetElementById(target+'_zone');
var img_obj = xGetElementById(target+'_img');
fo_obj[column_name].value = filename;
var img = new Image();
img.src = filename;
img_obj.src = img.src;
zone_obj.style.display = "block";
}
function doDeleteButton(target) {
var fo_obj = xGetElementById("fo_menu");
var col_name = target.replace(/^menu_/,'');
var params = new Array();
params['target'] = target;
params['menu_srl'] = fo_obj.menu_srl.value;
params['menu_item_srl'] = fo_obj.menu_item_srl.value;
params['filename'] = fo_obj[col_name].value;
var response_tags = new Array('error','message', 'target');
exec_xml('homepage','procHomepageDeleteButton', params, completeDeleteButton, response_tags);
}
function completeDeleteButton(ret_obj) {
var target = ret_obj['target'];
var column_name = target.replace(/^menu_/,'');
var fo_obj = xGetElementById("fo_menu");
var zone_obj = xGetElementById(target+'_zone');
var img_obj = xGetElementById(target+'_img');
fo_obj[column_name].value = "";
img_obj.src = "";
zone_obj.style.display = "none";
}
/* drag item */
xAddEventListener(document, 'mousedown', dragItem);
var dragObj = null;
var dragTarget = null;
var dragTmpObjectect = new Array();
var dragDisappear = 0;
function dragItem(evt) {
var e = new xEvent(evt);
if(!e.target) return;
var obj = e.target;
while(obj) {
if(obj && obj.nodeName == 'DIV' && typeof(obj.id)!='undefined' && obj.id.indexOf('node_')>-1) {
dragEnable(obj, evt);
return;
}
obj = obj.parentNode;
}
}
function getDragTmpObject(obj) {
if(!dragTmpObjectect[obj.id]) {
tmpObj = xCreateElement('div');
tmpObj.id = obj.id + '_tmp';
tmpObj.style.display = 'none';
tmpObj.style.position = 'absolute';
tmpObj.style.opacity = 0.5;
tmpObj.style.filter = 'alpha(opacity=50)';
tmpObj.style.cursor = "pointer";
xInnerHtml(tmpObj,xInnerHtml(obj));
document.body.appendChild(tmpObj);
dragTmpObjectect[obj.id] = tmpObj;
}
return dragTmpObjectect[obj.id];
}
function removeDragTmpObject(obj) {
if(!dragTmpObjectect[obj.id]) return;
dragTmpObjectect[obj.id] = null;
}
function dragEnable(obj, evt) {
if(obj.id.indexOf('node_')<0) return;
obj.draggable = true;
dragObj = obj;
dragObj.id = obj.id;
var e = new xEvent(evt);
xPreventDefault(evt);
obj.xDPX = e.pageX;
obj.xDPY = e.pageY;
xAddEventListener(document, 'mouseup', dragUp, false);
xAddEventListener(document, 'mousemove', dragMove, false);
var tmpObj = getDragTmpObject(obj);
xLeft(tmpObj, e.pageX+1);
xTop(tmpObj, e.pageY+1);
xWidth(tmpObj, xWidth(obj));
xHeight(tmpObj, xHeight(obj));
xDisplay(tmpObj, 'block');
}
function dragMove(evt) {
if(!dragObj) return;
var e = new xEvent(evt);
var target = e.target;
var obj = dragObj;
var tobj = getDragTmpObject(obj);
xLeft(tobj, e.pageX+1);
xTop(tobj, e.pageY+1);
if(target && target.nodeName == "DIV" && typeof(target.id)!='undefined' && (target.id.indexOf('gab_')>-1||target.id.indexOf('node_')>-1)) {
var isChilds = false;
var pObj = target.parentNode;
while(pObj) {
if(pObj.firstChild && typeof(pObj.firstChild.id)!='undefined' && pObj.firstChild.id == dragObj.id) {
isChilds = true;
break;
}
pObj = pObj.parentNode;
}
if(dragTarget) {
dragTarget.style.backgroundColor = '';
dragTarget.style.borderTop = '0px solid #000';
dragTarget = null;
}
if(!isChilds) {
dragTarget = target;
if(target.id.indexOf('gab_')>-1) {
dragTarget.style.borderTop = '1px solid #000';
} else {
dragTarget.style.backgroundColor = '#DDDDDD';
}
}
} else if(dragTarget) {
dragTarget.style.backgroundColor = '';
dragTarget.style.borderTop = '0px solid #000';
dragTarget = null;
}
xPreventDefault(evt);
}
function dragUp(evt) {
if(!dragObj) return;
if(dragTarget && dragTarget.id != dragObj.id && confirm(confirmMenuMove)) {
var mode = null;
if(dragTarget.id.indexOf('gab_')>-1) mode = 'move';
else mode = 'insert';
var tmpArr = dragTarget.id.split('_');
var parent_srl = tmpArr[1];
var source_srl = mode=='move'?tmpArr[2]:0;
var tmpArr = dragObj.id.split('_');
var target_srl = tmpArr[1];
var params = new Array();
params['menu_srl'] = xGetElementById('fo_menu').menu_srl.value;
params['mode'] = mode;
params['parent_srl'] = parent_srl;
params['source_srl'] = source_srl;
params['target_srl'] = target_srl;
var response_tags = new Array('error','message','xml_file');
exec_xml('homepage','procHomepageMenuItemMove', params, completeInsertMenuItem, response_tags);
}
var tobj = getDragTmpObject(dragObj);
xRemoveEventListener(document, 'mouseup', dragUp, false);
xRemoveEventListener(document, 'mousemove', dragMove, false);
dragDisappear = dragDisapearObject(tobj, dragObj);
var e = new xEvent(evt);
xPreventDefault(evt);
dragObj = null;
if(dragTarget) {
dragTarget.style.backgroundColor = '';
dragTarget.style.borderTop = '0px solid #000';
dragTarget = null;
}
}
// 스르르 사라지게 함;;
function dragDisapearObject(obj, tobj) {
var it = 20;
var ib = 20;
var x = parseInt(xPageX(obj),10);
var y = parseInt(xPageY(obj),10);
var ldt = (x - parseInt(xPageX(tobj),10)) / ib;
var tdt = (y - parseInt(xPageY(tobj),10)) / ib;
return setInterval(function() {
if(ib < 1) {
clearInterval(dragDisappear);
xDisplay(obj, 'none');
removeDragTmpObject(tobj);
return;
}
ib -= 3;
x-=ldt;
y-=tdt;
xLeft(obj, x);
xTop(obj, y);
}, it/ib);
}
function completeInsertBoard(ret_obj) {
alert(ret_obj['message']);
location.reload();
}
function completeInsertPage(ret_obj) {
alert(ret_obj['message']);
location.reload();
}
function doDeleteGroup(group_srl) {
var fo_obj = xGetElementById('fo_group');
fo_obj.group_srl.value = group_srl;
procFilter(fo_obj, delete_group);
}
function completeInsertGroup(ret_obj) {
location.href = current_url.setQuery('group_srl','');
}
function completeDeleteGroup(ret_obj) {
location.href = current_url.setQuery('group_srl','');
}
function doSelectAll(obj, key) {
var fo_obj = obj.parentNode;
while(fo_obj.nodeName != 'FORM') {
fo_obj = fo_obj.parentNode;
}
for(var i=0;i<fo_obj.length;i++) {
var tobj = fo_obj[i];
if(tobj.name == key) tobj.checked=true;
}
}
function doUnSelectAll(obj, key) {
var fo_obj = obj.parentNode;
while(fo_obj.nodeName != 'FORM') {
fo_obj = fo_obj.parentNode;
}
for(var i=0;i<fo_obj.length;i++) {
var tobj = fo_obj[i];
if(tobj.name == key) tobj.checked = false;
}
}
function completeInsertGrant(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
var page = ret_obj['page'];
var module_srl = ret_obj['module_srl'];
alert(message);
}

View file

@ -0,0 +1,50 @@
<!--%import("./css/layout.css",optimized=false)-->
<!--%import("./css/default.css",optimized=false)-->
<!--%import("./js/homepage.js",optimized=false)-->
<div class="liquid">
<div id="container" class="c3 nce e2">
<div id="header">
<h1 class="title"><a href="{getUrl('','module','homepage','act','dispHomepageManage')}">{$homepage_info->title}</a></h1>
<ul class="gnb">
<!--@if($logged_info->is_admin == 'Y')--><li><a href="{getUrl('','module','admin','act','dispHomepageAdminContent')}" class="button red"><span>{$lang->cmd_go_homepage_admin}</span></a></li><!--@end-->
<li><a href="{getSiteUrl($site_module_info->domain, '', 'mid', $site_module_info->mid)}" class="button blue"><span>{$lang->cmd_go_home}</span></a></li>
</ul>
</div>
<hr />
<div id="body">
<div id="content">
<div class="section">
{$content}
</div>
</div>
<hr />
<div id="navigation">
<div class="section">
<ul class="nav">
<!--@foreach($lang->cmd_homepage_menus as $key => $val)-->
<li <!--@if($key==$act)-->class="active"<!--@end-->><a href="{getUrl('','module','homepage','act', $key)}" <!--@if($act==$val)-->class="selected"<!--@end-->>{$val}</a></li>
<!--@end-->
</ul>
</div>
</div>
<div id="extra">
<div class="section extra1">
<img widget="newest_document" skin="blog_newest_document" colorset="layout" list_count="5" subject_cut_size="100"/>
</div>
<div class="section extra2">
<img widget="newest_comment" skin="blog_newest_comment" colorset="layout" list_count="5" />
</div>
</div>
<div class="fClear"></div>
</div>
<hr />
</div>
</div>

View file

@ -0,0 +1,63 @@
<!--%import("filter/update_member_group.xml")-->
<h3 class="title">{$lang->cmd_homepage_menus[$act]}</h3>
<p class="infoText">{$lang->about_homepage_act[$act]}</p>
<form method="post" action="./" onsubmit="return procFilter(this,update_member_group);">
<table cellspacing="0" class="adminTable">
<thead>
<tr>
<th scope="col"><div>{$lang->no}</div></th>
<th scope="col" class="quarter_wide"><div>{$lang->user_id}</div></th>
<th scope="col"><div>{$lang->user_name}</div></th>
<th scope="col"><div>{$lang->nick_name}</div></th>
<th scope="col"><div>{$lang->group}</div></th>
<th scope="col"><div>{$lang->signup_date}</div></th>
<th scope="col"><div>{$lang->last_login}</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($member_list as $no => $val)-->
{@ $val->group_list = implode(', ', $val->group_list)}
<tr class="row{$cycle_idx}">
<td class="center number" >{$no}</td>
<td><input type="checkbox" name="cart" value="{$val->member_srl}" />{htmlspecialchars($val->user_id)}</td>
<td>{htmlspecialchars($val->user_name)}</td>
<td>{htmlspecialchars($val->nick_name)}</td>
<td class="nowrap">
<!--@if($members_groups[$val->member_srl])-->
{implode(',',$members_groups[$val->member_srl])}
<!--@else-->
&nbsp;
<!--@end-->
</td>
<td><span class="member_{$val->member_srl}">{htmlspecialchars($val->nick_name)}</span></td>
<td class="date center nowrap">{zdate($val->last_login,"Y-m-d H:i:s")}</td>
</tr>
<!--@end-->
<tr class="row1">
<td colspan="8">
{$lang->do_selected_member}
<select name="group_srl">
<!--@foreach($group_list as $key=>$val)-->
<option value="{$val->group_srl}">{$val->title}</option>
<!--@end-->
</select><input type="submit" value="{$lang->cmd_modify}" />
</td>
</tr>
</tbody>
</table>
</form>
<!-- 페이지 네비게이션 -->
<div class="pagination a1">
<a href="{getUrl('page','','module_srl','')}" class="prevEnd">{$lang->first_page}</a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<strong>{$page_no}</strong>
<!--@else-->
<a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="nextEnd">{$lang->last_page}</a>
</div>

View file

@ -0,0 +1,158 @@
<!--%import("./filter/insert_menu_item.xml")-->
<!--%import("./filter/delete_menu_item.xml")-->
<!--%import("./filter/move_up_menu_item.xml")-->
<!--%import("./filter/move_down_menu_item.xml")-->
<h3 class="title">{$lang->cmd_homepage_menus[$act]}</h1>
<p class="infoText">{$lang->about_homepage_act[$act]}</p>
<form method="post" action="./" id="menu_item_form">
<input type="hidden" name="menu_item_srl" value="" />
</form>
<form method="post" action="./" id="menu_form">
<input type="hidden" name="menu_srl" value="{$menu_info->menu_srl}" />
<div id="menu"></div>
<br />
<a href="#" onclick="homepageAddMenu(); return false;" class="button blue"><span>{$lang->cmd_add_new_menu}</span></a>
</form>
<div id="menuItem">
<form id="fo_menu" action="./" method="post" onsubmit="return procFilter(this, insert_menu_item);" class="clear" target="tmp_upload_iframe" enctype="multipart/form-data">
<input type="hidden" name="module" value="homepage" />
<input type="hidden" name="act" value="procHompageUpdateMenuItem" />
<input type="hidden" name="menu_srl" value="{$menu_info->menu_srl}" />
<input type="hidden" name="parent_srl" value="" />
<input type="hidden" name="menu_item_srl" value="" />
<input type="hidden" name="mode" value="" />
<input type="hidden" name="target" value="" />
<input type="hidden" name="normal_btn" value="" />
<input type="hidden" name="hover_btn" value="" />
<input type="hidden" name="active_btn" value="" />
<table cellspacing="0" class="adminTable" id="itemAttr1">
{@ $_row = 0;}
<!--@foreach($lang_supported as $key => $val)-->
<tr>
<!--@if($_row==0)--><th scope="row" rowspan="{count($lang_supported)+1}"><div>{$lang->menu_name}</div></th><!--@end-->
<th><div>{$val}</div></th>
<td><input type="text" name="menu_name_{$key}" value="" class="inputTypeText w400 menu_names"/></td>
{@ $_row ++ }
</tr>
<!--@end-->
<tr>
<td colspan="2">{$lang->about_menu_names}</td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->cmd_option}</div></th>
<td>
<input type="checkbox" id="menu_open_window" name="menu_open_window" value="Y" />
<label for="menu_open_window">{$lang->menu_open_window}</label>
<input type="checkbox" id="menu_expand" name="menu_expand" value="Y" />
<label for="menu_expand">{$lang->menu_expand}</label>
<p>{$lang->about_menu_option}</p>
</td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->item_group_grant}</div></th>
<td>
<!--@foreach($group_list as $key=>$val)-->
<input type="checkbox" name="group_srls" value="{$key}" id="group_{$key}" <!--@if(is_array($item_info->group_srls)&&in_array($key, $item_info->group_srls))-->checked="checked"<!--@end-->/>
<label for="group_{$key}">{$val->title}</label>
<!--@end-->
<p>{$lang->about_group_grant}</p>
</td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->module_type}</div></th>
<td>
<select name="module_type" onchange="changeMenuType(this)">
<option value="board">{$lang->board}</option>
<option value="page">{$lang->page}</option>
<option value="url">{$lang->url}</option>
</select>
<p>{$lang->about_module_type}</p>
</td>
</tr>
</table>
<table cellspacing="0" class="adminTable" id="itemAttr2">
<tr>
<th scope="row"><div>{$lang->browser_title}</div></th>
<td>
<input type="text" name="browser_title" value="" class="inputTypeText w400" />
<p>{$lang->about_browser_title}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->module_id}</div></th>
<td>
<input type="text" name="module_id" value="" class="inputTypeText w400" />
<p>{$lang->about_module_id}</p>
</td>
</tr>
</table>
<table cellspacing="0" class="adminTable" id="itemAttr3">
<tr>
<th scope="row"><div>{$lang->url}</div></th>
<td>
http://<input type="text" name="url" value="" class="inputTypeText w400" />
<p>{$lang->about_menu_item_url}</p>
</td>
</tr>
</table>
<table cellspacing="0" class="adminTable" id="itemAttr4">
<tr>
<th scope="row" rowspan="4"><div>{$lang->menu_img_btn}</div></th>
<th scope="row"><div>{$lang->menu_normal_btn}</div></th>
<td>
<div id="menu_normal_btn_zone" <!--@if(!$item_info->normal_btn)-->style="display:none;"<!--@end-->>
<img src="" alt="" id="menu_normal_btn_img" /><br />
<a href="#" onclick="doDeleteButton('menu_normal_btn');return false;" class="button"><span>{$lang->cmd_delete}</span></a>
</div>
<input type="file" name="menu_normal_btn" value="" class="inputTypeText" onchange="doHomepageMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_hover_btn}</div></th>
<td>
<div id="menu_hover_btn_zone") <!--@if(!$item_info->hover_btn)-->style="display:none;"<!--@end-->>
<img src="" alt="" id="menu_hover_btn_img" /><br />
<a href="#" onclick="doDeleteButton('menu_hover_btn');return false;" class="button"><span>{$lang->cmd_delete}</span></a>
</div>
<input type="file" name="menu_hover_btn" value="" class="inputTypeText" onchange="doHomepageMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_active_btn}</div></th>
<td>
<div id="menu_active_btn_zone" <!--@if(!$item_info->active_btn)-->style="display:none;"<!--@end-->>
<img src="" alt="" id="menu_active_btn_img" /><br />
<a href="#" onclick="doDeleteButton('menu_active_btn');return false;" class="button"><span>{$lang->cmd_delete}</span></a>
</div>
<input type="file" name="menu_active_btn" value="" class="inputTypeText" onchange="doHomepageMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<td colspan="2">{$lang->about_menu_image_button}</td>
</tr>
</table>
<span class="button green"><input type="submit" value="{$lang->cmd_save}" /></span>
<a href="#" onclick="hideMenuItem();return false" class="button red"><span>{$lang->cmd_close}</span></a>
</form>
</div>
<iframe id='tmp_upload_iframe' name='tmp_upload_iframe' style='display:none;width:1px;height:1px;position:absolute;top:-10px;left:-10px'></iframe>
<script type="text/javascript">
max_menu_depth = {$menu_max_depth};
xAddEventListener(window,'load',function() { homepageLoadMenuInfo("{$menu_info->xml_file}"); } );
xAddEventListener(document,'mousedown',chkMousePosition);
var alertImageOnly = "{$lang->alert_image_only}";
var confirmMenuMove = "{$lang->confirm_move}";
</script>

View file

@ -0,0 +1,45 @@
<h3 class="title">{$lang->cmd_homepage_menus[$act]}</h1>
<p class="infoText">{$lang->about_homepage_act[$act]}</p>
<!--%import("filter/update_index_mid.xml")-->
<form method="post" action="./" onsubmit="return procFilter(this,update_index_mid)" class="midDefault">
{$lang->cmd_select_index}
<select name="index_mid">
<!--@foreach($mid_list as $no => $val)-->
<option value="{$val->module_srl}" <!--@if($val->module_srl==$homepage_info->module_srl)-->selected="selected"<!--@end-->>{$val->browser_title} ({$val->mid})</option>
<!--@end-->
</select>
<span class="button"><input type="submit" value="{$lang->cmd_select}" /></span>
</form>
<table cellspacing="0" class="adminTable">
<thead>
<tr>
<th scope="col"><div>{$lang->module}</div></th>
<th scope="col" class="half_wide"><div>{$lang->mid}</div></th>
<th scope="col" class="half_wide"><div>{$lang->browser_title}</div></th>
<th scope="col"><div>{$lang->regdate}</div></th>
<th scope="col"><div>{$lang->cmd_setup}</div></th>
<th scope="col"><div>{$lang->cmd_view}</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($mid_list as $no => $val)-->
<tr class="row{$cycle_idx}">
<td class="center">{Context::getLang($val->module)}</td>
<td>{htmlspecialchars($val->mid)}</td>
<td>{htmlspecialchars($val->browser_title)}</td>
<td class="date center nowrap">{zdate($val->regdate,"Y-m-d")}</td>
<!--@if($val->module=='board')-->
<td class="setup center"><a href="{getUrl('act','dispHomepageBoardInfo','module_srl',$val->module_srl)}">{$lang->cmd_setup}</a></td>
<!--@else-->
<td class="setup center"><a href="{getUrl('act','dispHomepageBoardInfo','module_srl',$val->module_srl)}">{$lang->cmd_setup}</a></td>
<!--@end-->
<td class="view center"><a href="{getSiteUrl($site_module_info->domain,'','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
</tr>
<!--@end-->
</tbody>
</table>
</form>

View file

@ -0,0 +1,35 @@
<!--%import("filter/insert_page.xml")-->
<h3 class="title">{$lang->page} > {$module_info->browser_title}</h1>
<form action="./" method="post" onsubmit="return procFilter(this, insert_page)" enctype="multipart/form-data">
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
<table cellspacing="0" class="adminTable">
<thead>
<tr>
<th scope="col"><div>{$lang->grant}</div></th>
<th scope="col" colspan="3" >{$lang->target}</th>
</tr>
</thead>
<!--@foreach($grant_list as $key => $val)-->
<tr class="row{$cycle_idx}">
<th scope="row"><div>{$val->title}</div></th>
<td class="wide">
<!--@foreach($group_list as $k => $v)-->
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
<!--@end-->
</td>
<td class="center selectAll"><a href="#" onclick="doSelectAll(this, '{$key}'); return false;">{$lang->cmd_select_all}</a></td>
<td class="center deSelectAll"><a href="#" onclick="doUnSelectAll(this, '{$key}'); return false;">{$lang->cmd_unselect_all}</a></td>
</tr>
<!--@end-->
<tr class="row2">
<td colspan="4" class="right">
<span class="button blue"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
</td>
</tr>
</table>
</form>

View file

@ -0,0 +1,45 @@
<!--%import("./js/homepage.js",optimized=false)-->
<!--%import("./filter/delete_homepage.xml")-->
<h3>{$lang->homepage} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="infoText">{nl2br($lang->about_homepage)}</div>
<form action="./" method="post" onsubmit="return procFilter(this, delete_homepage)" id="fo_homepage">
<input type="hidden" name="site_srl" value="{$homepage_info->site_srl}" />
<table cellspacing="0" class="adminTable">
<thead>
<tr>
<th colspan="2">{$lang->cmd_homepage_delete}</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row"><div>{$lang->homepage_title}</div></th>
<td>{$homepage_info->title}</td>
</tr>
<tr>
<th scope="row"><div>{$lang->domain}</div></th>
<td>http://{$homepage_info->domain}</td>
</tr>
<tr>
<th scope="row"><div>{$lang->homepage_admin}</div></th>
<td>
<!--@foreach($admin_list as $key => $val)-->
{$val->nick_name} ({$val->user_id})<br />
<!--@end-->
</td>
</tr>
<tr>
<td colspan="2" class="red">
<p>{$lang->about_homepage_delete}</p>
</td>
</tr>
<tr class="row2">
<td colspan="2" class="right">
<span class="button red strong"><input type="submit" value="{$lang->cmd_delete}" accesskey="s" /></span></div>
</th>
</tr>
</tbody>
</table>
</form>

View file

@ -0,0 +1,12 @@
<filter name="delete_homepage" module="homepage" act="procHomepageAdminDeleteHomepage" confirm_msg_code="confirm_delete">
<form>
<node target="site_srl" required="true" maxlength="250" />
</form>
<parameter>
<param name="site_srl" target="site_srl" />
</parameter>
<response callback_func="completeDeleteHomepage">
<tag name="error" />
<tag name="message" />
</response>
</filter>

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