git-svn-id: http://xe-core.googlecode.com/svn/trunk@1540 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2007-06-04 06:00:47 +00:00
parent 86e8af5b3f
commit f2e47e336d
37 changed files with 27 additions and 3019 deletions

View file

@ -32,7 +32,6 @@
$oModuleController->insertActionForward('board', 'controller', 'procBoardAdminUpdateSkinInfo');
// 기본 게시판 생성
// 설치된 기본 모듈이 있는지 확인
$output = executeQuery('module.getDefaultMidInfo');
if($output->data) return new Object();
@ -43,7 +42,7 @@
$args->skin = 'default';
// 게시판 controller 생성
$oBoardController = &getController('board');
$oBoardController = &getAdminController('board');
$oBoardController->procBoardAdminInsertBoard($args);
return new Object();

View file

@ -217,306 +217,5 @@
}
}
/**
* @brief 관리자가 선택시 세션에 담음
**/
function procBoardAdminAddCart() {
$document_srl = Context::get('srl');
$check_flag = Context::get('check_flag');
if(!$document_srl || !in_array($check_flag, array('add','remove'))) return;
$flag_list = $_SESSION['document_management'][$this->module_srl];
if($check_flag == 'remove') unset($flag_list[$document_srl]);
else $flag_list[$document_srl] = true;
$_SESSION['document_management'][$this->module_srl] = $flag_list;
}
/**
* @brief 세션에 담긴 선택글의 이동/ 삭제
**/
function procBoardAdminManageCheckedDocument() {
$type = Context::get('type');
$module_srl = Context::get('target_board');
$flag_list = $_SESSION['document_management'][$this->module_srl];
$document_srl_list = array_keys($flag_list);
$oDocumentController = &getController('document');
$document_srl_count = count($document_srl_list);
if($type == 'move') {
if(!$module_srl) return new Object(-1, 'fail_to_move');
else {
$output = $oDocumentController->moveDocumentModule($document_srl_list, $module_srl, $this->module_srl);
if(!$output->toBool()) return new Object(-1, 'fail_to_move');
$msg_code = 'success_moved';
$_SESSION['document_management'][$this->module_srl] = null;
}
} elseif($type =='delete') {
$oDB = &DB::getInstance();
$oDB->begin();
for($i=0;$i<$document_srl_count;$i++) {
$document_srl = $document_srl_list[$i];
$output = $oDocumentController->deleteDocument($document_srl, true);
if(!$output->toBool()) return new Object(-1, 'fail_to_delete');
}
$oDB->commit();
$msg_code = 'success_deleted';
$_SESSION['document_management'][$this->module_srl] = null;
}
$this->setMessage($msg_code);
}
/**
* @brief 권한 추가
**/
function procBoardAdminInsertGrant() {
$module_srl = Context::get('module_srl');
// 현 모듈의 권한 목록을 가져옴
$grant_list = $this->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');
}
/**
* @brief 스킨 정보 업데이트
**/
function procBoardAdminUpdateSkinInfo() {
// module_srl에 해당하는 정보들을 가져오기
$module_srl = Context::get('module_srl');
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
$skin = $module_info->skin;
// 스킨의 정보르 구해옴 (extra_vars를 체크하기 위해서)
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
// 입력받은 변수들을 체크 (mo, act, module_srl, page등 기본적인 변수들 없앰)
$obj = Context::getRequestVars();
unset($obj->act);
unset($obj->module_srl);
unset($obj->page);
// 원 skin_info에서 extra_vars의 type이 image일 경우 별도 처리를 해줌
if($skin_info->extra_vars) {
foreach($skin_info->extra_vars as $vars) {
if($vars->type!='image') continue;
$image_obj = $obj->{$vars->name};
// 삭제 요청에 대한 변수를 구함
$del_var = $obj->{"del_".$vars->name};
unset($obj->{"del_".$vars->name});
if($del_var == 'Y') {
@unlink($module_info->{$vars->name});
continue;
}
// 업로드 되지 않았다면 이전 데이터를 그대로 사용
if(!$image_obj['tmp_name']) {
$obj->{$vars->name} = $module_info->{$vars->name};
continue;
}
// 정상적으로 업로드된 파일이 아니면 무시
if(!is_uploaded_file($image_obj['tmp_name'])) {
unset($obj->{$vars->name});
continue;
}
// 이미지 파일이 아니어도 무시
if(!eregi("\.(jpg|jpeg|gif|png)$", $image_obj['name'])) {
unset($obj->{$vars->name});
continue;
}
// 경로를 정해서 업로드
$path = sprintf("./files/attach/images/%s/", $module_srl);
// 디렉토리 생성
if(!FileHandler::makeDir($path)) return false;
$filename = $path.$image_obj['name'];
// 파일 이동
if(!move_uploaded_file($image_obj['tmp_name'], $filename)) {
unset($obj->{$vars->name});
continue;
}
// 변수를 바꿈
unset($obj->{$vars->name});
$obj->{$vars->name} = $filename;
}
}
// serialize하여 저장
$skin_vars = serialize($obj);
$oModuleController = &getController('module');
$oModuleController->updateModuleSkinVars($module_srl, $skin_vars);
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('default_layout.html');
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile("top_refresh.html");
}
/**
* @brief 게시판 추가
**/
function procBoardAdminInsertBoard($args = null) {
// 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리
if(!$args) {
$args = Context::gets('module_srl','module_category_srl','board_name','layout_srl','skin','browser_title','description','is_default','header_text','footer_text','admin_id','open_rss');
}
$args->module = 'board';
$args->mid = $args->board_name;
unset($args->board_name);
if($args->is_default!='Y') $args->is_default = 'N';
// 기본 값외의 것들을 정리
$extra_var = delObjectVars(Context::getRequestVars(), $args);
if($extra_var->use_category!='Y') $extra_var->use_category = 'N';
unset($extra_var->act);
unset($extra_var->page);
unset($extra_var->board_name);
// module_srl이 넘어오면 원 모듈이 있는지 확인
if($args->module_srl) {
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($args->module_srl);
// 만약 원래 모듈이 없으면 새로 입력하기 위한 처리
if($module_info->module_srl != $args->module_srl) unset($args->module_srl);
}
// $extra_var를 serialize
$args->extra_vars = serialize($extra_var);
// module 모듈의 controller 객체 생성
$oModuleController = &getController('module');
// is_default=='Y' 이면
if($args->is_default=='Y') $oModuleController->clearDefaultModule();
// module_srl의 값에 따라 insert/update
if(!$args->module_srl) {
$output = $oModuleController->insertModule($args);
$msg_code = 'success_registed';
// 파일업로드, 댓글 파일업로드, 관리에 대한 권한 지정
if($output->toBool()) {
$oMemberModel = &getModel('member');
$admin_group = $oMemberModel->getAdminGroup();
$admin_group_srl = $admin_group->group_srl;
$module_srl = $output->get('module_srl');
$grants = serialize(array('fileupload'=>array($admin_group_srl), 'comment_fileupload'=>array($admin_group_srl), 'manager'=>array($admin_group_srl)));
$oModuleController->updateModuleGrant($module_srl, $grants);
}
} else {
$output = $oModuleController->updateModule($args);
$msg_code = 'success_updated';
}
if(!$output->toBool()) return $output;
$this->add('page',Context::get('page'));
$this->add('module_srl',$output->get('module_srl'));
$this->setMessage($msg_code);
}
/**
* @brief 게시판 삭제
**/
function procBoardAdminDeleteBoard() {
$module_srl = Context::get('module_srl');
// 원본을 구해온다
$oModuleController = &getController('module');
$output = $oModuleController->deleteModule($module_srl);
if(!$output->toBool()) return $output;
$this->add('module','board');
$this->add('page',Context::get('page'));
$this->setMessage('success_deleted');
}
/**
* @brief 카테고리 추가
**/
function procBoardAdminInsertCategory() {
// 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리
$module_srl = Context::get('module_srl');
$category_title = Context::get('category_title');
// module_srl이 있으면 원본을 구해온다
$oDocumentController = &getController('document');
$output = $oDocumentController->insertCategory($module_srl, $category_title);
if(!$output->toBool()) return $output;
$this->add('page',Context::get('page'));
$this->add('module_srl',$module_srl);
$this->setMessage('success_registed');
}
/**
* @brief 카테고리의 내용 수정
**/
function procBoardAdminUpdateCategory() {
$module_srl = Context::get('module_srl');
$category_srl = Context::get('category_srl');
$mode = Context::get('mode');
$oDocumentModel = &getModel('document');
$oDocumentController = &getController('document');
switch($mode) {
case 'up' :
$output = $oDocumentController->moveCategoryUp($category_srl);
$msg_code = 'success_moved';
break;
case 'down' :
$output = $oDocumentController->moveCategoryDown($category_srl);
$msg_code = 'success_moved';
break;
case 'delete' :
$output = $oDocumentController->deleteCategory($category_srl);
$msg_code = 'success_deleted';
break;
case 'update' :
$selected_category = $oDocumentModel->getCategory($category_srl);
$args->category_srl = $selected_category->category_srl;
$args->title = Context::get('category_title');
$args->list_order = $selected_category->list_order;
$output = $oDocumentController->updateCategory($args);
$msg_code = 'success_updated';
break;
}
if(!$output->toBool()) return $output;
$this->add('module_srl', $module_srl);
$this->setMessage($msg_code);
}
}
?>

View file

@ -13,49 +13,6 @@
* board 모듈은 일반 사용과 관리자용으로 나누어진다.\n
**/
function init() {
if(substr_count($this->act, 'Admin')) $this->initAdmin();
else $this->initNormal();
}
/**
* @brief 관리자 act 호출시에 관련 정보들 세팅해줌
**/
function initAdmin() {
// module_srl이 있으면 미리 체크하여 존재하는 모듈이면 module_info 세팅
$module_srl = Context::get('module_srl');
if(!$module_srl && $this->module_srl) {
$module_srl = $this->module_srl;
Context::set('module_srl', $module_srl);
}
// module model 객체 생성
$oModuleModel = &getModel('module');
// module_srl이 넘어오면 해당 모듈의 정보를 미리 구해 놓음
if($module_srl) {
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if(!$module_info) {
Context::set('module_srl','');
$this->act = 'list';
} else {
$this->module_info = $module_info;
Context::set('module_info',$module_info);
}
}
// 모듈 카테고리 목록을 구함
$module_category = $oModuleModel->getModuleCategories();
Context::set('module_category', $module_category);
// 템플릿 경로 지정 (board의 경우 tpl에 관리자용 템플릿 모아놓음)
$template_path = sprintf("%stpl/",$this->module_path);
$this->setTemplatePath($template_path);
}
/**
* @brief 일반 게시판 호출시에 관련 정보를 세팅해줌
**/
function initNormal() {
// 카테고리를 사용하는지 확인후 사용시 카테고리 목록을 구해와서 Context에 세팅
if($this->module_info->use_category=='Y') {
$oDocumentModel = &getModel('document');
@ -370,198 +327,5 @@
Context::set('comment_editor', $comment_editor);
}
/**
* @brief 게시판 관리 목록 보여줌
**/
function dispBoardAdminContent() {
// 등록된 board 모듈을 불러와 세팅
$args->sort_index = "module_srl";
$args->page = Context::get('page');
$args->list_count = 40;
$args->page_count = 10;
$args->s_module_category_srl = Context::get('module_category_srl');
$output = executeQuery('board.getBoardList', $args);
// 템플릿에 쓰기 위해서 context::set
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('board_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
// 템플릿 파일 지정
$this->setTemplateFile('index');
}
/**
* @brief 선택된 게시판의 정보 출력
**/
function dispBoardAdminBoardInfo() {
// module_srl 값이 없다면 그냥 index 페이지를 보여줌
if(!Context::get('module_srl')) return $this->dispBoardAdminContent();
// 레이아웃이 정해져 있다면 레이아웃 정보를 추가해줌(layout_title, layout)
if($this->module_info->layout_srl) {
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($this->module_info->layout_srl);
$this->module_info->layout = $layout_info->layout;
$this->module_info->layout_title = $layout_info->layout_title;
}
// 정해진 스킨이 있으면 해당 스킨의 정보를 구함
if($this->module_info->skin) {
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $this->module_info->skin);
$this->module_info->skin_title = $skin_info->title;
}
// 템플릿 파일 지정
$this->setTemplateFile('board_info');
}
/**
* @brief 게시판 추가 출력
**/
function dispBoardAdminInsertBoard() {
// 스킨 목록을 구해옴
$oModuleModel = &getModel('module');
$skin_list = $oModuleModel->getSkins($this->module_path);
Context::set('skin_list',$skin_list);
// 레이아웃 목록을 구해옴
$oLayoutMode = &getModel('layout');
$layout_list = $oLayoutMode->getLayoutList();
Context::set('layout_list', $layout_list);
// 템플릿 파일 지정
$this->setTemplateFile('board_insert');
}
/**
* @brief 게시판 삭제 화면 출력
**/
function dispBoardAdminDeleteBoard() {
if(!Context::get('module_srl')) return $this->dispBoardAdminContent();
$module_info = Context::get('module_info');
$oDocumentModel = &getModel('document');
$document_count = $oDocumentModel->getDocumentCount($module_info->module_srl);
$module_info->document_count = $document_count;
Context::set('module_info',$module_info);
// 템플릿 파일 지정
$this->setTemplateFile('board_delete');
}
/**
* @brief 스킨 정보 보여줌
**/
function dispBoardAdminSkinInfo() {
// 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음
$module_info = Context::get('module_info');
$skin = $module_info->skin;
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
// skin_info에 extra_vars 값을 지정
if(count($skin_info->extra_vars)) {
foreach($skin_info->extra_vars as $key => $val) {
$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('skin_info');
}
/**
* @brief 카테고리의 정보 출력
**/
function dispBoardAdminCategoryInfo() {
// module_srl을 구함
$module_srl = Context::get('module_srl');
// 카테고리의 목록을 구해옴
$oDocumentModel = &getModel('document');
$category_list = $oDocumentModel->getCategoryList($module_srl);
Context::set('category_list', $category_list);
// 수정하려는 카테고리가 있다면해당 카테고리의 정보를 가져옴
$category_srl = Context::get('category_srl');
if($category_srl) {
$selected_category = $oDocumentModel->getCategory($category_srl);
if(!$selected_category) Context::set('category_srl','');
else Context::set('selected_category',$selected_category);
$this->setTemplateFile('category_update_form');
} else {
$this->setTemplateFile('category_list');
}
}
/**
* @brief 권한 목록 출력
**/
function dispBoardAdminGrantInfo() {
// module_srl을 구함
$module_srl = Context::get('module_srl');
// module.xml에서 권한 관련 목록을 구해옴
$grant_list = $this->xml_info->grant;
Context::set('grant_list', $grant_list);
// 권한 그룹의 목록을 가져온다
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups();
Context::set('group_list', $group_list);
$this->setTemplateFile('grant_list');
}
/**
* @brief 선택한 목록 출력
**/
function dispBoardAdminManageDocument() {
// 선택한 목록을 세션에서 가져옴
$flag_list = $_SESSION['document_management'][$this->module_srl];
// 목록이 있으면 게시글을 가져옴
if(count($flag_list)) $document_srl_list = array_keys($flag_list);
if(is_array($document_srl_list) && count($document_srl_list)) {
$oDocumentModeul = &getModel('document');
$document_list = $oDocumentModeul->getDocuments($document_srl_list, $this->grant->is_admin);
Context::set('document_list', $document_list);
}
// 게시판의 목록을 가져옴
$output = executeQuery('board.getAllBoard', $args);
$board_list = $output->data;
if($board_list && !is_array($board_list)) $board_list = array($board_list);
Context::set('board_list', $board_list);
// 팝업 레이아웃 선택
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('checked_list');
}
}
?>

View file

@ -1,9 +1,8 @@
<!--%import("filter/insert_comment.xml")-->
<!--%import("js/board.js")-->
<!--@if($source_comment)-->
<!--#include("header.html")-->
<!--@else-->
<!--%import("js/board.js")-->
<!--@end-->
<!-- 만약 댓글의 답을 다는 것이라면 원문 보여줌 -->
@ -31,7 +30,7 @@
<!-- 글쓰기 폼 -->
<form action="./" method="post" onsubmit="return procFilter(this, insert_comment)" <!--@if($grant->fileupload)-->enctype="multipart/form-data"<!--@end-->>
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="document_srl" value="{$document_srl?$document_srl:$comment->document_srl}" />
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
<input type="hidden" name="content" value="{htmlspecialchars($comment->content)}" />
<input type="hidden" name="parent_srl" value="{$parent_srl}" />