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

@ -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>

View file

@ -0,0 +1,16 @@
<filter name="insert_homepage" module="homepage" act="procHomepageAdminInsertHomepage" confirm_msg_code="confirm_submit">
<form>
<node target="homepage_title" required="true" maxlength="250" />
<node target="domain" required="true" maxlength="250" />
</form>
<parameter>
<param name="title" target="homepage_title" />
<param name="domain" target="domain" />
</parameter>
<response callback_func="completeInsertHomepage">
<tag name="error" />
<tag name="message" />
<tag name="site_srl" />
<tag name="url" />
</response>
</filter>

View file

@ -0,0 +1,18 @@
<filter name="update_homepage" module="homepage" act="procHomepageAdminUpdateHomepage" confirm_msg_code="confirm_submit">
<form>
<node target="site_srl" required="true" maxlength="250" />
<node target="homepage_title" required="true" maxlength="250" />
<node target="domain" required="true" maxlength="250" />
</form>
<parameter>
<param name="site_srl" target="site_srl" />
<param name="title" target="homepage_title" />
<param name="domain" target="domain" />
<param name="homepage_admin" target="homepage_admin" />
</parameter>
<response callback_func="completeUpdateHomepage">
<tag name="error" />
<tag name="message" />
<tag name="site_srl" />
</response>
</filter>

View file

@ -0,0 +1,84 @@
<!--%import("./js/homepage.js",optimized=false)-->
<!--%import("./filter/insert_homepage.xml")-->
<h3>{$lang->homepage} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="infoText">{nl2br($lang->about_homepage)}</div>
<div class="summary">
<strong>Total</strong> <em>{number_format($total_count)}</em>, Page <strong>{number_format($page)}</strong>/{number_format($total_page)}
</div>
<div class="adminLeftContent">
<table cellspacing="0" class="adminTable">
<thead>
<tr>
<th scope="col"><div>{$lang->no}</div></th>
<th scope="col" class="wide"><div>{$lang->title}</div></th>
<th scope="col"><div>{$lang->domain}</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_delete}</div></th>
<th scope="col"><div>{$lang->cmd_view}</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($homepage_list as $no => $val)-->
<tr class="row{$cycle_idx}">
<td class="center number">{$no}</td>
<td><a href="{getSiteUrl($val->domain,'module','homepage','act','dispHomepageManage','site_srl',$val->site_srl)}">{htmlspecialchars($val->homepage_title)}</a></td>
<td class="nowrap">{$val->domain}</td>
<td class="date center nowrap">{zdate($val->regdate,"Y-m-d")}</td>
<td class="setup center"><a href="{getUrl('act','dispHomepageAdminSetup','site_srl',$val->site_srl)}">{$lang->cmd_setup}</a></td>
<td class="delete center"><a href="{getUrl('act','dispHomepageAdminDelete','site_srl',$val->site_srl)}">{$lang->cmd_delete}</a></td>
<td class="view center"><a href="{getSiteUrl($val->domain)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
</tr>
<!--@end-->
</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>
</div>
<div class="adminRightExtra">
<form action="./" method="post" onsubmit="return procFilter(this, insert_homepage)">
<table cellspacing="0" class="adminTable">
<thead>
<tr>
<th colspan="2"><div>{$lang->cmd_homepage_registration}</div></th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row"><div>{$lang->homepage_title}</div></th>
<td>
<input type="text" name="homepage_title" value="" class="inputTypeText w200" />
<p>{$lang->about_homepage_title}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->domain}</div></th>
<td>
http://<input type="text" name="domain" value="" class="inputTypeText w200" />
<p>{$lang->about_domain}</p>
</td>
</tr>
<tr class="row2">
<td colspan="2" class="right"><span class="button"><input type="submit" value="{$lang->cmd_make}" accesskey="s" /></span></div></th>
</tr>
</tbody>
</table>
</form>
</div>

View file

@ -0,0 +1,49 @@
function completeInsertHomepage(ret_obj) {
var site_srl = ret_obj['site_srl'];
location.href = current_url.setQuery('site_srl',site_srl).setQuery('act','dispHomepageAdminSetup');
}
function doHomepageInsertAdmin() {
var fo_obj = xGetElementById("fo_homepage");
var sel_obj = fo_obj.admin_list;
var admin_id = fo_obj.admin_id.value;
if(!admin_id) return;
var opt = new Option(admin_id,admin_id,true,true);
sel_obj.options[sel_obj.options.length] = opt;
fo_obj.admin_id.value = '';
sel_obj.size = sel_obj.options.length;
sel_obj.selectedIndex = -1;
}
function doHomepageDeleteAdmin() {
var fo_obj = xGetElementById("fo_homepage");
var sel_obj = fo_obj.admin_list;
sel_obj.remove(sel_obj.selectedIndex);
sel_obj.size = sel_obj.options.length;
sel_obj.selectedIndex = -1;
}
function doUpdateHomepage(fo_obj, func) {
var sel_obj = fo_obj.admin_list;
var arr = new Array();
for(var i=0;i<sel_obj.options.length;i++) {
arr[arr.length] = sel_obj.options[i].value;
}
fo_obj.homepage_admin.value = arr.join(',');
procFilter(fo_obj, func);
return false;
}
function completeUpdateHomepage(ret_obj) {
alert(ret_obj['message']);
location.reload();
}
function completeDeleteHomepage(ret_obj) {
alert(ret_obj['message']);
location.href = current_url.setQuery('act','dispHomepageAdminContent').setQuery('site_srl','');
}

View file

@ -0,0 +1,55 @@
<!--%import("./js/homepage.js",optimized=false)-->
<!--%import("./filter/update_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 doUpdateHomepage(this, update_homepage)" id="fo_homepage">
<input type="hidden" name="site_srl" value="{$homepage_info->site_srl}" />
<input type="hidden" name="homepage_admin" value="<!--@foreach($admin_list as $key=>$val)-->{$val->member_srl},<!--@end-->" />
<table cellspacing="0" class="adminTable">
<thead>
<tr>
<th colspan="2">{$lang->cmd_homepage_setup}</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row"><div>{$lang->homepage_title}</div></th>
<td>
<input type="text" name="homepage_title" value="{$homepage_info->title}" class="inputTypeText w200" />
<p>{$lang->about_homepage_title}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->domain}</div></th>
<td>
http://<input type="text" name="domain" value="{$homepage_info->domain}" class="inputTypeText w200" />
<a href="{getSiteUrl($homepage_info->domain, '')}" onclick="window.open(this.href); return false;" class="button"><span>{$lang->cmd_move}</span></a>
<p>{$lang->about_domain}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->homepage_admin}</div></th>
<td>
<select name="admin_list" multiple="multiple" size="{count($admin_list)?count($admin_list):1}" class="w200">
<!--@foreach($admin_list as $key => $val)-->
<option value="{$val->admin_id}">{$val->nick_name} ({$val->user_id})</option>
<!--@end-->
</select>
<br />
<input type="text" name="admin_id" class="inputTypeText w100" />
<span class="button blue"><button type="button" onclick="doHomepageInsertAdmin()">{$lang->cmd_insert}</button></span>
<span class="button red"><button type="button" onclick="doHomepageDeleteAdmin()">{$lang->cmd_delete}</button></span>
<p>{$lang->about_homepage_admin}</p>
</td>
</tr>
<tr class="row2">
<td colspan="2" class="right">
<span class="button red strong"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span></div>
</th>
</tr>
</tbody>
</table>
</form>

View file

@ -199,13 +199,7 @@
* 모든 module의 schemas 디렉토리를 확인하여 schema xml을 이용, 테이블 생성
**/
function installDownloadedModule() {
// 수동으로 설치를 할 목록
$manual_modules = array('install','module','member');
// install, module 모듈은 미리 설치
$this->installModule('install', './modules/install/');
$this->installModule('module', './modules/module/');
$this->installModule('member', './modules/member/');
$oModuleModel = &getModel('module');
// 각 모듈의 schemas/*.xml 파일을 모두 찾아서 table 생성
$module_list = FileHandler::readDir('./modules/', NULL, false, true);
@ -214,10 +208,21 @@
$tmp_arr = explode('/',$module_path);
$module = $tmp_arr[count($tmp_arr)-1];
// 미리 수동으로 설치한 모듈이면 패스~
if(in_array($module, $manual_modules)) continue;
$xml_info = $oModuleModel->getModuleInfoXml($module);
if(!$xml_info) continue;
$modules[$xml_info->category][] = $module;
}
$this->installModule($module, $module_path);
// 모듈을 category에 의거 설치 순서를 정함
$install_step = array('base','utility','manager','accessory','service','package');
foreach($install_step as $category) {
foreach($modules[$category] as $module) {
$this->installModule($module, sprintf('./modules/%s', $module));
$oModule = &getClass($module);
if($oModule->checkUpdate()) $oModule->moduleUpdate();
}
}
return new Object();

View file

@ -20,6 +20,7 @@
// 설정 정보를 받아옴 (module model 객체를 이용)
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('integration_search');
if(!$config->skin) $config->skin = 'default';
$this->target_mid = $config->target_mid;
if(!$this->target_mid) $this->target_mid = array();
@ -37,15 +38,16 @@
function IS() {
// 검색이 가능한 목록을 구하기 위해 전체 목록을 구해옴
$oModuleModel = &getModel('module');
$site_module_info = Context::get('site_module_info');
$args->site_srl = (int)$site_module_info->site_srl;
$module_list = $oModuleModel->getMidList($args);
// 대상 모듈을 정리함
$module_srl_list = array();
foreach($module_list as $mid => $val) {
$mid_list[$val->module_srl] = $val;
if(in_array($mid, $this->target_mid)) {
$module_srl_list[] = $val->module_srl;
}
if(count($this->target_mid) && !in_array($mid, $this->target_mid)) continue;
$module_srl_list[] = $val->module_srl;
}
// 검색대상 변수 설정

View file

@ -5,6 +5,7 @@
<columns>
<column name="title" var="title" />
<column name="extra_vars" var="extra_vars" />
<column name="layout" var="layout" />
<column name="layout_path" var="layout_path" />
</columns>
<conditions>

View file

@ -335,11 +335,12 @@
* @brief 그룹 등록
**/
function insertGroup($args) {
if(!$args->site_srl) $args->site_srl = 0;
// is_default값을 체크, Y일 경우 일단 모든 is_default에 대해서 N 처리
if($args->is_default!='Y') {
$args->is_default = 'N';
} else {
$output = executeQuery('member.updateGroupDefaultClear');
$output = executeQuery('member.updateGroupDefaultClear', $args);
if(!$output->toBool()) return $output;
}
@ -353,7 +354,7 @@
// is_default값을 체크, Y일 경우 일단 모든 is_default에 대해서 N 처리
if($args->is_default!='Y') $args->is_default = 'N';
else {
$output = executeQuery('member.updateGroupDefaultClear');
$output = executeQuery('member.updateGroupDefaultClear', $args);
if(!$output->toBool()) return $output;
}
@ -363,7 +364,7 @@
/**
* 그룹 삭제
**/
function deleteGroup($group_srl) {
function deleteGroup($group_srl, $site_srl = null) {
// 멤버모델 객체 생성
$oMemberModel = &getModel('member');
@ -374,7 +375,7 @@
if($group_info->is_default == 'Y') return new Object(-1, 'msg_not_delete_default');
// is_default == 'Y'인 그룹을 가져옴
$default_group = $oMemberModel->getDefaultGroup();
$default_group = $oMemberModel->getDefaultGroup($site_srl);
$default_group_srl = $default_group->group_srl;
// default_group_srl로 변경

View file

@ -78,6 +78,21 @@
return executeQuery($query_id, $args);
}
/**
* @brief 사이트별 회원 목록을 구함
**/
function getSiteMemberList($site_srl, $page = 1) {
$args->site_srl = $site_srl;
$args->page = $page;
$args->list_count = 40;
$args->page_count = 10;
$query_id = 'member.getSiteMemberList';
$output = executeQueryArray($query_id, $args);
if(!$output->data) return array();
return $output;
}
/**
* @brief 회원 모듈의 특정 스킨에 속한 컬러셋 목록을 return
**/

View file

@ -46,7 +46,7 @@
// 개인별로 그룹목록을 가져 옴
if($output->data) {
foreach($output->data as $key => $member) {
$output->data[$key]->group_list = $oMemberModel->getMemberGroups($member->member_srl);
$output->data[$key]->group_list = $oMemberModel->getMemberGroups($member->member_srl,0);
}
}

View file

@ -67,6 +67,9 @@
$oModuleController->insertActionForward('member', 'controller', 'procMemberDeleteImageName');
$oModuleController->insertActionForward('member', 'controller', 'procMemberDeleteImageMark');
$oDB = &DB::getInstance();
$oDB->addIndex("member_group","idx_site_title", array("site_srl","title"),true);
$oModuleModel = &getModel('module');
$args = $oModuleModel->getModuleConfig('member');
@ -190,6 +193,11 @@
$act = $oDB->isColumnExists("member_auth_mail", "is_register");
if(!$act) return true;
// member_group_member 테이블에 site_srl 추가 (2008. 11. 15)
if(!$oDB->isColumnExists("member_group_member", "site_srl")) return true;
if(!$oDB->isColumnExists("member_group", "site_srl")) return true;
if($oDB->isIndexExists("member_group","uni_member_group_title")) return true;
return false;
}
@ -220,6 +228,19 @@
$oDB->addColumn("member_auth_mail", "is_register", "char", 1, "N", true);
}
// member_group_member 테이블에 site_srl 추가 (2008. 11. 15)
if (!$oDB->isColumnExists("member_group_member", "site_srl")) {
$oDB->addColumn("member_group_member", "site_srl", "number", 11, 0, true);
$oDB->addIndex("member_group_member", "idx_site_srl", "site_srl", false);
}
if (!$oDB->isColumnExists("member_group", "site_srl")) {
$oDB->addColumn("member_group", "site_srl", "number", 11, 0, true);
$oDB->addIndex("member_group","idx_site_title", array("site_srl","title"),true);
}
if($oDB->isIndexExists("member_group","uni_member_group_title")) {
$oDB->dropIndex("member_group","uni_member_group_title",true);
}
return new Object(0, 'success_updated');
}

View file

@ -862,14 +862,40 @@
/**
* @brief member_srl에 group_srl을 추가
**/
function addMemberToGroup($member_srl,$group_srl) {
function addMemberToGroup($member_srl,$group_srl,$site_srl=0) {
$args->member_srl = $member_srl;
$args->group_srl = $group_srl;
if($site_srl) $args->site_srl = $site_srl;
// 추가
return executeQuery('member.addMemberToGroup',$args);
}
/**
* @brief 특정 회원들의 그룹을 일괄 변경
**/
function replaceMemberGroup($args) {
$obj->site_srl = $args->site_srl;
$obj->member_srl = implode(',',$args->member_srl);
$output = executeQuery('member.deleteMembersGroup', $obj);
if(!$output->toBool()) return $output;
$inserted_members = array();
foreach($args->member_srl as $key => $val) {
if($inserted_members[$val]) continue;
$inserted_members[$val] = true;
unset($obj);
$obj->member_srl = $val;
$obj->group_srl = $args->group_srl;
$obj->site_srl = $args->site_srl;
$output = executeQuery('member.addMemberToGroup', $obj);
if(!$output->toBool()) return $output;
}
return new Object();
}
/**
* @brief 자동 로그인 시킴
**/
@ -993,12 +1019,13 @@
$_SESSION['is_logged'] = true;
$_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['member_srl'] = $member_info->member_srl;
$_SESSION['is_admin'] = false;
$_SESSION['is_admin'] = '';
// 비밀번호는 세션에 저장되지 않도록 지워줌;;
unset($member_info->password);
// 사용자 그룹 설정
/*
if($member_info->group_list) {
$group_srl_list = array_keys($member_info->group_list);
$_SESSION['group_srls'] = $group_srl_list;
@ -1006,8 +1033,9 @@
// 관리자 그룹일 경우 관리자로 지정
$oMemberModel = &getModel('member');
$admin_group = $oMemberModel->getAdminGroup();
if($admin_group->group_srl && in_array($admin_group->group_srl, $group_srl_list)) $_SESSION['is_admin'] = true;
if($admin_group->group_srl && in_array($admin_group->group_srl, $group_srl_list)) $_SESSION['is_admin'] = 'Y';
}
*/
// 세션에 로그인 사용자 정보 저장
$_SESSION['logged_info'] = $member_info;
@ -1119,7 +1147,7 @@
// 입력된 그룹 값이 없으면 기본 그룹의 값을 등록
if(!$args->group_srl_list) {
$default_group = $oMemberModel->getDefaultGroup();
$default_group = $oMemberModel->getDefaultGroup(0);
// 기본 그룹에 추가
$output = $this->addMemberToGroup($args->member_srl,$default_group->group_srl);

View file

@ -10,7 +10,6 @@
/**
* @brief 자주 호출될거라 예상되는 데이터는 내부적으로 가지고 있자...
**/
var $member_groups = NULL;
var $join_form_list = NULL;
/**
@ -117,7 +116,37 @@
**/
function getLoggedInfo() {
// 로그인 되어 있고 세션 정보를 요청하면 세션 정보를 return
if($this->isLogged()) return $_SESSION['logged_info'];
if($this->isLogged()) {
$logged_info = $_SESSION['logged_info'];
// site_module_info에 따라서 관리자/ 그룹 목록을 매번 재지정
$site_module_info = Context::get('site_module_info');
if($site_module_info) {
unset($logged_info->group_list);
$site_srl = $site_module_info->site_srl;
$groups = $this->getMemberGroups($logged_info->member_srl, $site_srl);
// 만약 현재 접속된 사이트의 그룹이 없으면 기본 그룹을 지정
if(!count($groups)) {
$default_group = $this->getDefaultGroup($site_module_info->site_srl);
$oMemberController = &getController('member');
$oMemberController->addMemberToGroup($logged_info->member_srl, $default_group->group_srl, $site_srl);
$groups[$default_group->group_srl] = $default_group->title;
}
$logged_info->group_list = $groups;
$oModuleModel = &getModel('module');
if($oModuleModel->isSiteAdmin()) $logged_info->is_site_admin = true;
else $logged_info->is_site_admin = false;
} else {
$logged_info->is_site_admin = false;
}
$_SESSION['logged_info'] = $logged_info;
return $logged_info;
}
return NULL;
}
@ -216,9 +245,11 @@
/**
* @brief member_srl이 속한 group 목록을 가져옴
**/
function getMemberGroups($member_srl) {
if(!$this->member_groups[$member_srl]) {
function getMemberGroups($member_srl, $site_srl = 0) {
static $member_groups = array();
if(!$member_groups[$member_srl][$site_srl]) {
$args->member_srl = $member_srl;
$args->site_srl = $site_srl;
$output = executeQuery('member.getMemberGroups', $args);
if(!$output->data) return array();
@ -228,16 +259,33 @@
foreach($group_list as $group) {
$result[$group->group_srl] = $group->title;
}
$this->member_groups[$member_srl] = $result;
$member_groups[$member_srl][$site_srl] = $result;
}
return $this->member_groups[$member_srl];
return $member_groups[$member_srl][$site_srl];
}
/**
* @brief member_srl들이 속한 group 목록을 가져옴
**/
function getMembersGroups($member_srls, $site_srl = 0) {
$args->member_srls = implode(',',$member_srls);
$args->site_srl = $site_srl;
$output = executeQuery('member.getMembersGroups', $args);
if(!$output->data) return array();
$result = array();
foreach($output->data as $key=>$val) {
$result[$val->member_srl][] = $val->title;
}
return $result;
}
/**
* @brief 기본 그룹을 가져옴
**/
function getDefaultGroup() {
$output = executeQuery('member.getDefaultGroup');
function getDefaultGroup($site_srl = 0) {
$args->site_srl = $site_srl;
$output = executeQuery('member.getDefaultGroup', $args);
return $output->data;
}
@ -261,8 +309,9 @@
/**
* @brief 그룹 목록을 가져옴
**/
function getGroups() {
$output = executeQuery('member.getGroups');
function getGroups($site_srl = 0) {
$args->site_srl = $site_srl;
$output = executeQuery('member.getGroups', $args);
if(!$output->data) return;
$group_list = $output->data;

View file

@ -5,6 +5,7 @@
<columns>
<column name="group_srl" var="group_srl" notnull="notnull" />
<column name="member_srl" var="member_srl" notnull="notnull" />
<column name="site_srl" var="site_srl" default="0" />
<column name="regdate" default="curdate()" />
</columns>
</query>

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