From 7b910c0f18e8bb53e3c3488ddbc5bb40cb751036 Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 18 Apr 2007 09:19:16 +0000 Subject: [PATCH] git-svn-id: http://xe-core.googlecode.com/svn/trunk@1221 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/blog/board.class.php | 58 ++ modules/blog/board.controller.php | 519 +++++++++++++++ modules/blog/board.view.php | 617 ++++++++++++++++++ modules/blog/conf/info.xml | 8 + modules/blog/conf/module.xml | 71 ++ modules/blog/lang/ko.lang.php | 53 ++ modules/blog/queries/getAllBoard.xml | 14 + modules/blog/queries/getBoardList.xml | 24 + modules/blog/skins/default/comment.html | 75 +++ modules/blog/skins/default/comment_form.html | 79 +++ .../skins/default/delete_comment_form.html | 23 + modules/blog/skins/default/delete_form.html | 27 + .../skins/default/delete_trackback_form.html | 23 + .../skins/default/filter/delete_comment.xml | 18 + .../skins/default/filter/delete_document.xml | 16 + .../skins/default/filter/delete_trackback.xml | 18 + .../skins/default/filter/input_password.xml | 16 + modules/blog/skins/default/filter/insert.xml | 18 + .../skins/default/filter/insert_comment.xml | 28 + modules/blog/skins/default/filter/search.xml | 15 + modules/blog/skins/default/filter/vote.xml | 13 + modules/blog/skins/default/footer.html | 1 + modules/blog/skins/default/header.html | 32 + .../skins/default/input_password_form.html | 27 + modules/blog/skins/default/js/board.js | 129 ++++ modules/blog/skins/default/list.html | 121 ++++ modules/blog/skins/default/message.html | 11 + modules/blog/skins/default/skin.xml | 53 ++ modules/blog/skins/default/trackback.html | 46 ++ modules/blog/skins/default/view_document.html | 130 ++++ modules/blog/skins/default/write_form.html | 104 +++ modules/blog/tpl/board_config.html | 19 + modules/blog/tpl/board_delete.html | 33 + modules/blog/tpl/board_info.html | 65 ++ modules/blog/tpl/board_insert.html | 132 ++++ modules/blog/tpl/category_list.html | 55 ++ modules/blog/tpl/category_update_form.html | 21 + modules/blog/tpl/checked_list.html | 35 + modules/blog/tpl/filter/delete_board.xml | 10 + modules/blog/tpl/filter/insert_board.xml | 32 + modules/blog/tpl/filter/insert_category.xml | 12 + modules/blog/tpl/filter/insert_config.xml | 7 + modules/blog/tpl/filter/insert_grant.xml | 11 + .../tpl/filter/manage_checked_document.xml | 7 + modules/blog/tpl/filter/update_category.xml | 11 + modules/blog/tpl/grant_list.html | 45 ++ modules/blog/tpl/header.html | 28 + modules/blog/tpl/index.html | 77 +++ modules/blog/tpl/js/board_admin.js | 116 ++++ modules/blog/tpl/skin_info.html | 127 ++++ modules/blog/tpl/top_refresh.html | 3 + 51 files changed, 3233 insertions(+) create mode 100644 modules/blog/board.class.php create mode 100644 modules/blog/board.controller.php create mode 100644 modules/blog/board.view.php create mode 100644 modules/blog/conf/info.xml create mode 100644 modules/blog/conf/module.xml create mode 100644 modules/blog/lang/ko.lang.php create mode 100644 modules/blog/queries/getAllBoard.xml create mode 100644 modules/blog/queries/getBoardList.xml create mode 100644 modules/blog/skins/default/comment.html create mode 100644 modules/blog/skins/default/comment_form.html create mode 100644 modules/blog/skins/default/delete_comment_form.html create mode 100644 modules/blog/skins/default/delete_form.html create mode 100644 modules/blog/skins/default/delete_trackback_form.html create mode 100644 modules/blog/skins/default/filter/delete_comment.xml create mode 100644 modules/blog/skins/default/filter/delete_document.xml create mode 100644 modules/blog/skins/default/filter/delete_trackback.xml create mode 100644 modules/blog/skins/default/filter/input_password.xml create mode 100644 modules/blog/skins/default/filter/insert.xml create mode 100644 modules/blog/skins/default/filter/insert_comment.xml create mode 100644 modules/blog/skins/default/filter/search.xml create mode 100644 modules/blog/skins/default/filter/vote.xml create mode 100644 modules/blog/skins/default/footer.html create mode 100644 modules/blog/skins/default/header.html create mode 100644 modules/blog/skins/default/input_password_form.html create mode 100644 modules/blog/skins/default/js/board.js create mode 100644 modules/blog/skins/default/list.html create mode 100644 modules/blog/skins/default/message.html create mode 100644 modules/blog/skins/default/skin.xml create mode 100644 modules/blog/skins/default/trackback.html create mode 100644 modules/blog/skins/default/view_document.html create mode 100644 modules/blog/skins/default/write_form.html create mode 100644 modules/blog/tpl/board_config.html create mode 100644 modules/blog/tpl/board_delete.html create mode 100644 modules/blog/tpl/board_info.html create mode 100644 modules/blog/tpl/board_insert.html create mode 100644 modules/blog/tpl/category_list.html create mode 100644 modules/blog/tpl/category_update_form.html create mode 100644 modules/blog/tpl/checked_list.html create mode 100644 modules/blog/tpl/filter/delete_board.xml create mode 100644 modules/blog/tpl/filter/insert_board.xml create mode 100644 modules/blog/tpl/filter/insert_category.xml create mode 100644 modules/blog/tpl/filter/insert_config.xml create mode 100644 modules/blog/tpl/filter/insert_grant.xml create mode 100644 modules/blog/tpl/filter/manage_checked_document.xml create mode 100644 modules/blog/tpl/filter/update_category.xml create mode 100644 modules/blog/tpl/grant_list.html create mode 100644 modules/blog/tpl/header.html create mode 100644 modules/blog/tpl/index.html create mode 100644 modules/blog/tpl/js/board_admin.js create mode 100644 modules/blog/tpl/skin_info.html create mode 100644 modules/blog/tpl/top_refresh.html diff --git a/modules/blog/board.class.php b/modules/blog/board.class.php new file mode 100644 index 000000000..9908984fd --- /dev/null +++ b/modules/blog/board.class.php @@ -0,0 +1,58 @@ +insertActionForward('board', 'view', 'dispBoardAdminContent'); + $oModuleController->insertActionForward('board', 'view', 'dispBoardAdminModuleConfig'); + $oModuleController->insertActionForward('board', 'view', 'dispBoardAdminBoardInfo'); + $oModuleController->insertActionForward('board', 'view', 'dispBoardAdminInsertBoard'); + $oModuleController->insertActionForward('board', 'view', 'dispBoardAdminDeleteBoard'); + $oModuleController->insertActionForward('board', 'view', 'dispBoardAdminSkinInfo'); + $oModuleController->insertActionForward('board', 'view', 'dispBoardAdminCategoryInfo'); + $oModuleController->insertActionForward('board', 'view', 'dispBoardAdminGrantInfo'); + //$oModuleController->insertActionForward('board', 'controller', 'procBoardAdminInsertGrant'); + $oModuleController->insertActionForward('board', 'controller', 'procBoardAdminUpdateSkinInfo'); + //$oModuleController->insertActionForward('board', 'controller', 'procBoardAdminDeleteBoard'); + //$oModuleController->insertActionForward('board', 'controller', 'procBoardAdminInsertCategory'); + //$oModuleController->insertActionForward('board', 'controller', 'procBoardAdminUpdateCategory'); + //$oModuleController->insertActionForward('board', 'controller', 'procBoardAdminInsertConfig'); + + return new Object(); + } + + /** + * @brief 설치가 이상이 없는지 체크하는 method + **/ + function moduleIsInstalled() { + return new Object(); + } + + /** + * @brief 업데이트 실행 + **/ + function moduleUpdate() { + return new Object(); + } + + } +?> diff --git a/modules/blog/board.controller.php b/modules/blog/board.controller.php new file mode 100644 index 000000000..256cacd18 --- /dev/null +++ b/modules/blog/board.controller.php @@ -0,0 +1,519 @@ +module_srl = $this->module_srl; + if($obj->is_notice!='Y'||!$this->grant->manager) $obj->is_notice = 'N'; + + // document module의 model 객체 생성 + $oDocumentModel = &getModel('document'); + + // document module의 controller 객체 생성 + $oDocumentController = &getController('document'); + + // 이미 존재하는 글인지 체크 + $document = $oDocumentModel->getDocument($obj->document_srl, $this->grant->manager); + + // 이미 존재하는 경우 수정 + if($document->document_srl == $obj->document_srl) { + $output = $oDocumentController->updateDocument($document, $obj); + $msg_code = 'success_updated'; + + // 그렇지 않으면 신규 등록 + } else { + $output = $oDocumentController->insertDocument($obj); + $msg_code = 'success_registed'; + $obj->document_srl = $output->get('document_srl'); + } + + // 오류 발생시 멈춤 + if(!$output->toBool()) return $output; + + // 트랙백이 있으면 트랙백 발송 + $trackback_url = Context::get('trackback_url'); + $trackback_charset = Context::get('trackback_charset'); + if($trackback_url) { + $oTrackbackController = &getController('trackback'); + $oTrackbackController->sendTrackback($obj, $trackback_url, $trackback_charset); + } + + // 결과를 리턴 + $this->add('mid', Context::get('mid')); + $this->add('document_srl', $output->get('document_srl')); + + // 성공 메세지 등록 + $this->setMessage($msg_code); + } + + /** + * @brief 문서 삭제 + **/ + function procBoardDeleteDocument() { + // 문서 번호 확인 + $document_srl = Context::get('document_srl'); + + // 문서 번호가 없다면 오류 발생 + if(!$document_srl) return $this->doError('msg_invalid_document'); + + // document module model 객체 생성 + $oDocumentController = &getController('document'); + + // 삭제 시도 + $output = $oDocumentController->deleteDocument($document_srl, $this->grant->manager); + if(!$output->toBool()) return $output; + + // 성공 메세지 등록 + $this->add('mid', Context::get('mid')); + $this->add('page', $output->get('page')); + $this->setMessage('success_deleted'); + } + + /** + * @brief 추천 + **/ + function procBoardVoteDocument() { + // document module controller 객체 생성 + $oDocumentController = &getController('document'); + + $document_srl = Context::get('document_srl'); + return $oDocumentController->updateVotedCount($document_srl); + } + + /** + * @brief 코멘트 추가 + **/ + function procBoardInsertComment() { + // 댓글 입력에 필요한 데이터 추출 + $obj = Context::gets('document_srl','comment_srl','parent_srl','content','password','nick_name','nick_name','member_srl','email_address','homepage'); + $obj->module_srl = $this->module_srl; + + // comment 모듈의 model 객체 생성 + $oCommentModel = &getModel('comment'); + + // comment 모듈의 controller 객체 생성 + $oCommentController = &getController('comment'); + + // comment_srl이 존재하는지 체크 + $comment = $oCommentModel->getComment($obj->comment_srl, $this->grant->manager); + + // comment_srl이 없을 경우 신규 입력 + if($comment->comment_srl != $obj->comment_srl) { + + // parent_srl이 있으면 답변으로 + if($obj->parent_srl) { + $parent_comment = $oCommentModel->getComment($obj->parent_srl); + if(!$parent_comment->comment_srl) return new Object(-1, 'msg_invalid_request'); + + $output = $oCommentController->insertComment($obj); + + // 없으면 신규 + } else { + $output = $oCommentController->insertComment($obj); + } + + // comment_srl이 있으면 수정으로 + } else { + $obj->parent_srl = $comment->parent_srl; + $output = $oCommentController->updateComment($obj); + $comment_srl = $obj->comment_srl; + } + + if(!$output->toBool()) return $output; + + $this->setMessage('success_registed'); + $this->add('mid', Context::get('mid')); + $this->add('document_srl', $obj->document_srl); + $this->add('comment_srl', $comment_srl); + } + + /** + * @brief 코멘트 삭제 + **/ + function procBoardDeleteComment() { + // 댓글 번호 확인 + $comment_srl = Context::get('comment_srl'); + if(!$comment_srl) return $this->doError('msg_invalid_request'); + + // comment 모듈의 controller 객체 생성 + $oCommentController = &getController('comment'); + + $output = $oCommentController->deleteComment($comment_srl, $this->grant->manager); + if(!$output->toBool()) return $output; + + $this->add('mid', Context::get('mid')); + $this->add('page', Context::get('page')); + $this->add('document_srl', $output->get('document_srl')); + $this->setMessage('success_deleted'); + } + + /** + * @brief 엮인글 삭제 + **/ + function procBoardDeleteTrackback() { + $trackback_srl = Context::get('trackback_srl'); + + // trackback module의 controller 객체 생성 + $oTrackbackController = &getController('trackback'); + $output = $oTrackbackController->deleteTrackback($trackback_srl, $this->grant->manager); + if(!$output->toBool()) return $output; + + $this->add('mid', Context::get('mid')); + $this->add('page', Context::get('page')); + $this->add('document_srl', $output->get('document_srl')); + $this->setMessage('success_deleted'); + } + + /** + * @brief 문서와 댓글의 비밀번호를 확인 + **/ + function procBoardVerificationPassword() { + // 비밀번호와 문서 번호를 받음 + $password = md5(Context::get('password')); + $document_srl = Context::get('document_srl'); + $comment_srl = Context::get('comment_srl'); + + // comment_srl이 있을 경우 댓글이 대상 + if($comment_srl) { + // 문서번호에 해당하는 글이 있는지 확인 + $oCommentModel = &getModel('comment'); + $data = $oCommentModel->getComment($comment_srl); + // comment_srl이 없으면 문서가 대상 + } else { + // 문서번호에 해당하는 글이 있는지 확인 + $oDocumentModel = &getModel('document'); + $data = $oDocumentModel->getDocument($document_srl); + } + + // 글이 없을 경우 에러 + if(!$data) return new Object(-1, 'msg_invalid_request'); + + // 문서의 비밀번호와 입력한 비밀번호의 비교 + if($data->password != $password) return new Object(-1, 'msg_invalid_password'); + + // 해당 글에 대한 권한 부여 + if($comment_srl) { + $oCommentController = &getController('comment'); + $oCommentController->addGrant($comment_srl); + } else { + $oDocumentController = &getController('document'); + $oDocumentController->addGrant($document_srl); + } + } + + /** + * @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->setTemplatePath($this->module_path.'tpl'); + $this->setTemplateFile("top_refresh.html"); + } + + /** + * @brief 게시판 추가 + **/ + function procBoardAdminInsertBoard() { + // 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리 + $args = Context::gets('module_srl','module_category_srl','board_name','skin','browser_title','description','is_default','header_text','footer_text','admin_id'); + $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->mo); + 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'; + } 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); + } + + /** + * @brief 게시판 기본 정보의 추가 + **/ + function procBoardAdminInsertConfig() { + // 기본 정보를 받음 + $args = Context::gets('test'); + + // module Controller 객체 생성하여 입력 + $oModuleController = &getController('module'); + $output = $oModuleController->insertModuleConfig('board',$args); + return $output; + } + } +?> diff --git a/modules/blog/board.view.php b/modules/blog/board.view.php new file mode 100644 index 000000000..4af582fa9 --- /dev/null +++ b/modules/blog/board.view.php @@ -0,0 +1,617 @@ +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'); + $this->category_list = $oDocumentModel->getCategoryList($this->module_srl); + Context::set('category_list', $this->category_list); + } + + // 템플릿에서 사용할 변수를 Context::set() + if($this->module_srl) Context::set('module_srl',$this->module_srl); + + Context::set('module_info',$this->module_info); + + // 기본 모듈 정보들 설정 + $this->list_count = $this->module_info->list_count?$this->module_info->list_count:20; + $this->page_count = $this->module_info->page_count?$this->module_info->page_count:10; + + // 스킨 템플릿 경로 지정 + $template_path = sprintf("%sskins/%s/",$this->module_path, $this->skin); + $this->setTemplatePath($template_path); + + // rss url + if($this->grant->view) Context::set('rss_url', getUrl('','mid',$this->mid,'act','dispBoardRss')); + } + + /** + * @brief 목록 및 선택된 글 출력 + **/ + function dispBoardContent() { + // 권한 체크 + if(!$this->grant->list) return $this->dispBoardMessage('msg_not_permitted'); + + // 목록 구현에 필요한 변수들을 가져온다 + $document_srl = Context::get('document_srl'); + $page = Context::get('page'); + + // document 객체를 생성. 기본 데이터 구조의 경우 document모듈만 쓰면 만사 해결.. -_-; + $oDocumentModel = &getModel('document'); + + // document_srl이 있다면 해당 글을 구해오자 + if($this->grant->view && $document_srl) { + + // 글을 구함 + $document = $oDocumentModel->getDocument($document_srl, $this->grant->manager, true); + + // 찾아지지 않았다면 초기화 + if($document->document_srl != $document_srl) { + unset($document); + unset($document_srl); + Context::set('document_srl','',true); + + // 글이 찾아졌으면 댓글 권한과 허용 여부를 체크하여 댓글 에디터 세팅 + } elseif($this->grant->write_comment && $document->allow_comment == 'Y' && $document->lock_comment != 'Y') { + + // 브라우저 타이틀 + $browser_title = $this->module_info->browser_title.' - '.$document->title; + Context::setBrowserTitle($browser_title); + + // 댓글 + $this->setCommentEditor(); + } + + Context::set('document', $document); + } + + // 만약 document_srl은 있는데 page가 없다면 글만 호출된 경우 page를 구해서 세팅해주자.. + if($document_srl && !$page) { + $page = $oDocumentModel->getDocumentPage($document_srl, $this->module_srl, $this->list_count); + Context::set('page', $page); + } + + // 목록을 구하기 위한 옵션 + $args->module_srl = $this->module_srl; ///< 현재 모듈의 module_srl + $args->page = $page; ///< 페이지 + $args->list_count = $this->list_count; ///< 한페이지에 보여줄 글 수 + $args->page_count = $this->page_count; ///< 페이지 네비게이션에 나타날 페이지의 수 + + // 검색 옵션 + $args->search_target = Context::get('search_target'); ///< 검색 대상 (title, contents...) + $args->search_keyword = Context::get('search_keyword'); ///< 검색어 + if($this->module_info->use_category=='Y') $args->category_srl = Context::get('category'); ///< 카테고리 사용시 선택된 카테고리 + + $args->sort_index = 'list_order'; ///< 소팅 값 + + // 목록 구함, document->getDocumentList 에서 걍 알아서 다 해버리는 구조이다... (아.. 이거 나쁜 버릇인데.. ㅡ.ㅜ 어쩔수 없다) + $output = $oDocumentModel->getDocumentList($args); + + // 템플릿에 쓰기 위해서 document_model::getDocumentList() 의 return object에 있는 값들을 세팅 + Context::set('total_count', $output->total_count); + Context::set('total_page', $output->total_page); + Context::set('page', $output->page); + Context::set('document_list', $output->data); + Context::set('page_navigation', $output->page_navigation); + + // 템플릿에서 사용할 검색옵션 세팅 + $count_search_option = count($this->search_option); + for($i=0;$i<$count_search_option;$i++) { + $search_option[$this->search_option[$i]] = Context::getLang($this->search_option[$i]); + } + Context::set('search_option', $search_option); + + // 관리자일 경우 체크한 문서들의 목록을 세팅 + if($this->grant->is_admin) { + Context::set('check_list',$_SESSION['document_management'][$this->module_srl]); + } + + $this->setTemplateFile('list'); + } + + /** + * @brief 글 작성 화면 출력 + **/ + function dispBoardWrite() { + // 권한 체크 + if(!$this->grant->write_document) return $this->dispBoardMessage('msg_not_permitted'); + + // GET parameter에서 document_srl을 가져옴 + $document_srl = Context::get('document_srl'); + + // document 모듈 객체 생성 + $oDocumentModel = &getModel('document'); + + // 지정된 글이 없다면 (신규) 새로운 번호를 만든다 + if($document_srl) { + $document = $oDocumentModel->getDocument($document_srl, $this->grant->manager); + if(!$document) { + unset($document_srl); + Context::set('document_srl',''); + } + } + + if(!$document_srl) $document_srl = getNextSequence(); + + // 글을 수정하려고 할 경우 권한이 없는 경우 비밀번호 입력화면으로 + if($document&&!$document->is_granted) return $this->setTemplateFile('input_password_form'); + + Context::set('document_srl',$document_srl); + Context::set('document', $document); + + // 에디터 모듈의 getEditor를 호출하여 세팅 + $oEditorModel = &getModel('editor'); + $editor = $oEditorModel->getEditor($document_srl, $this->grant->fileupload, true); + Context::set('editor', $editor); + + $this->setTemplateFile('write_form'); + } + + /** + * @brief 문서 삭제 화면 출력 + **/ + function dispBoardDelete() { + // 권한 체크 + if(!$this->grant->write_document) return $this->dispBoardMessage('msg_not_permitted'); + + // 삭제할 문서번호를 가져온다 + $document_srl = Context::get('document_srl'); + + // 지정된 글이 있는지 확인 + if($document_srl) { + $oDocumentModel = &getModel('document'); + $document = $oDocumentModel->getDocument($document_srl); + } + + // 삭제하려는 글이 없으면 에러 + if(!$document) return $this->dispBoardContent(); + + // 권한이 없는 경우 비밀번호 입력화면으로 + if($document&&!$document->is_granted) return $this->setTemplateFile('input_password_form'); + + Context::set('document',$document); + + $this->setTemplateFile('delete_form'); + } + + /** + * @brief 댓글의 답글 화면 출력 + **/ + function dispBoardReplyComment() { + // 권한 체크 + if(!$this->grant->write_comment) return $this->dispBoardMessage('msg_not_permitted'); + + // 목록 구현에 필요한 변수들을 가져온다 + $document_srl = Context::get('document_srl'); + $parent_srl = Context::get('comment_srl'); + + // 지정된 원 댓글이 없다면 오류 + if(!$parent_srl) return new Object(-1, 'msg_invalid_request'); + + // 해당 댓글를 찾아본다 + $oCommentModel = &getModel('comment'); + $source_comment = $oCommentModel->getComment($parent_srl, $this->grant->manager); + + // 댓글이 없다면 오류 + if(!$source_comment) return $this->dispBoardMessage('msg_invalid_request'); + + // 필요한 정보들 세팅 + Context::set('document_srl',$document_srl); + Context::set('parent_srl',$parent_srl); + Context::set('comment_srl',NULL); + Context::set('source_comment',$source_comment); + + // 댓글 에디터 세팅 + $this->setCommentEditor(); + + $this->setTemplateFile('comment_form'); + } + + /** + * @brief 댓글 수정 폼 출력 + **/ + function dispBoardModifyComment() { + // 권한 체크 + if(!$this->grant->write_comment) return $this->dispBoardMessage('msg_not_permitted'); + + // 목록 구현에 필요한 변수들을 가져온다 + $document_srl = Context::get('document_srl'); + $comment_srl = Context::get('comment_srl'); + + // 지정된 댓글이 없다면 오류 + if(!$comment_srl) return new Object(-1, 'msg_invalid_request'); + + // 해당 댓글를 찾아본다 + $oCommentModel = &getModel('comment'); + $comment = $oCommentModel->getComment($comment_srl, $this->grant->manager); + + // 댓글이 없다면 오류 + if(!$comment) return $this->dispBoardMessage('msg_invalid_request'); + + // 글을 수정하려고 할 경우 권한이 없는 경우 비밀번호 입력화면으로 + if($comment_srl&&$comment&&!$comment->is_granted) return $this->setTemplateFile('input_password_form'); + + // 필요한 정보들 세팅 + Context::set('document_srl',$document_srl); + Context::set('comment_srl',$comment_srl); + Context::set('comment', $comment); + + // 댓글 에디터 세팅 + $this->setCommentEditor($comment_srl); + + $this->setTemplateFile('comment_form'); + } + + /** + * @brief 댓글 삭제 화면 출력 + **/ + function dispBoardDeleteComment() { + // 권한 체크 + if(!$this->grant->write_comment) return $this->dispBoardMessage('msg_not_permitted'); + + // 삭제할 댓글번호를 가져온다 + $comment_srl = Context::get('comment_srl'); + + // 삭제하려는 댓글가 있는지 확인 + if($comment_srl) { + $oCommentModel = &getModel('comment'); + $comment = $oCommentModel->getComment($comment_srl, $this->grant->manager); + } + + // 삭제하려는 글이 없으면 에러 + if(!$comment) return $this->dispBoardContent(); + + // 권한이 없는 경우 비밀번호 입력화면으로 + if($comment_srl&&$comment&&!$comment->is_granted) return $this->setTemplateFile('input_password_form'); + + Context::set('comment',$comment); + + $this->setTemplateFile('delete_comment_form'); + } + + /** + * @brief 엮인글 삭제 화면 출력 + **/ + function dispBoardDeleteTrackback() { + // 삭제할 댓글번호를 가져온다 + $trackback_srl = Context::get('trackback_srl'); + + // 삭제하려는 댓글가 있는지 확인 + $oTrackbackModel = &getModel('trackback'); + $output = $oTrackbackModel->getTrackback($trackback_srl); + $trackback = $output->data; + + // 삭제하려는 글이 없으면 에러 + if(!$trackback) return $this->dispBoardContent(); + + Context::set('trackback',$trackback); + + $this->setTemplateFile('delete_trackback_form'); + } + + /** + * @brief 메세지 출력 + **/ + function dispBoardMessage($msg_code) { + $msg = Context::getLang($msg_code); + if(!$msg) $msg = $msg_code; + Context::set('message', $msg); + $this->setTemplateFile('message'); + } + + /** + * @brief RSS 출력 + **/ + function dispBoardRss() { + // 권한 체크 + if(!$this->grant->list) return $this->dispBoardMessage('msg_not_permitted'); + + // 컨텐츠 추출 + $args->module_srl = $this->module_srl; ///< 현재 모듈의 module_srl + $args->page = Context::get('page'); ///< 페이지 + $args->list_count = $this->list_count; ///< 한페이지에 보여줄 글 수 + $args->page_count = $this->page_count; ///< 페이지 네비게이션에 나타날 페이지의 수 + + $args->search_target = Context::get('search_target'); ///< 검색 대상 (title, contents...) + $args->search_keyword = Context::get('search_keyword'); ///< 검색어 + if($this->module_info->use_category=='Y') $args->category_srl = Context::get('category'); ///< 카테고리 사용시 선택된 카테고리 + + $args->sort_index = 'list_order'; ///< 소팅 값 + + $oDocumentModel = &getModel('document'); + $output = $oDocumentModel->getDocumentList($args); + $document_list = $output->data; + + // rss 제목 및 정보등을 추출 + $info->title = Context::getBrowserTitle(); + $info->description = $this->module_info->description; + $info->language = Context::getLangType(); + $info->date = gmdate("D, d M Y H:i:s"); + $info->link = sprintf("%s?mid=%s", Context::getRequestUri(), Context::get('mid')); + $info->total_count = $output->total_count; + + // RSS 모듈을 불러서 출력할 내용을 지정 + $oRssView = &getView('rss'); + $oRssView->dispRss($info, $document_list); + + // RSS 모듈의 tempate을 가져옴 + $this->setTemplatePath($oRssView->getTemplatePath()); + $this->setTemplateFile($oRssView->getTemplateFile()); + } + + /** + * @brief 댓글의 editor 를 세팅 + * 댓글의 경우 수정하는 경우가 아니라면 고유값이 없음.\n + * 따라서 고유값이 없을 경우 고유값을 가져와서 지정해 주어야 함 + **/ + function setCommentEditor($comment_srl=0) { + if(!$comment_srl) { + $comment_srl = getNextSequence(); + Context::set('comment_srl', $comment_srl); + } + + // 에디터 모듈의 getEditor를 호출하여 세팅 + $oEditorModel = &getModel('editor'); + $comment_editor = $oEditorModel->getEditor($comment_srl, $this->grant->fileupload); + 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 dispBoardAdminModuleConfig() { + + // 설정 정보를 받아옴 (module model 객체를 이용) + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('board'); + Context::set('config',$config); + + // 템플릿 파일 지정 + $this->setTemplateFile('board_config'); + } + + /** + * @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); + + // 템플릿 파일 지정 + $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'); + } + } +?> diff --git a/modules/blog/conf/info.xml b/modules/blog/conf/info.xml new file mode 100644 index 000000000..9fb19deff --- /dev/null +++ b/modules/blog/conf/info.xml @@ -0,0 +1,8 @@ + + + 게시판 + + 제로 + 게시판의 기능을 담당하는 모듈. 게시판의 생성/추가 관리등의 관리자 기능도 포함합니다. + + diff --git a/modules/blog/conf/module.xml b/modules/blog/conf/module.xml new file mode 100644 index 000000000..f9926b816 --- /dev/null +++ b/modules/blog/conf/module.xml @@ -0,0 +1,71 @@ + + + + + 목록 + list + + + 열람 + view + + + 글 작성 + write document + + + 댓글 작성 + write comment + + + 파일 첨부 + file upload + + + 관리 + manager + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/blog/lang/ko.lang.php b/modules/blog/lang/ko.lang.php new file mode 100644 index 000000000..1b6ceacae --- /dev/null +++ b/modules/blog/lang/ko.lang.php @@ -0,0 +1,53 @@ +cmd_board_list = '게시판 목록'; + $lang->cmd_module_config = '게시판 공통 설정'; + $lang->cmd_view_info = '게시판 정보'; + $lang->cmd_manage_category = '분류관리'; + $lang->cmd_manage_grant = '권한관리'; + $lang->cmd_manage_skin = '스킨관리'; + $lang->cmd_manage_document = '게시글 관리'; + + // 항목 + $lang->header_text = '상단 내용'; + $lang->footer_text = '하단 내용'; + $lang->use_category = '분류 사용'; + $lang->category_title = '분류명'; + $lang->checked_count = '선택된 글 수'; + + $lang->skin_default_info = '스킨 기본정보'; + $lang->skin_maker = '스킨제작자'; + $lang->skin_maker_homepage = '홈페이지'; + + $lang->test = '테스트'; + $lang->about_test = '테스트는 블라블라...'; + + // 주절 주절.. + $lang->about_mid = '모듈이름은 http://주소/?mid=모듈이름 처럼 직접 호출할 수 있는 값입니다. (영문+숫자만 가능)'; + $lang->about_category = '분류를 통한 관리를 할 수 있도록 합니다. 모듈 분류의 관리는 모듈관리 > 모듈카테고리에서 하실 수 있습니다.'; + $lang->about_browser_title = '브라우저의 제목에 나타나는 값입니다. RSS/Trackback에서도 사용됩니다.'; + $lang->about_description= '관리용으로 사용되는 설명입니다'; + $lang->about_default = '선택하시면 사이트에 mid값 없이 접속하였을 경우 기본으로 보여줍니다'; + $lang->about_header_text = '모듈의 상단에 표시되는 내용입니다 (html 태그 사용 가능)'; + $lang->about_footer_text = '모듈의 하단에 표시되는 내용입니다 (html 태그 사용 가능)'; + $lang->about_skin = '모듈의 스킨을 선택하실 수 있습니다'; + $lang->about_use_category = '선택하시면 분류기능을 사용할 수 있습니다'; + $lang->about_list_count = '한페이지에 표시될 글의 수를 지정하실 수 있습니다. (기본 20개)'; + $lang->about_page_count = '목록 하단 페이지 이동 하는 링크의 수를 지정하실 수 있습니다. (기본 10개)'; + + $lang->about_admin_id = '해당 모듈에 대해 최고 권한을 가지는 관리자를 지정할 수 있습니다.
,(콤마)로 다수 아이디 지정이 가능합니다. (관리자페이지 접근은 불가능)'; + $lang->about_grant = '특정 권한의 대상을 모두 해제하시면 로그인하지 않은 회원까지 권한을 가질 수 있습니다'; + + $lang->msg_new_module = '모듈 생성'; + $lang->msg_update_module = '모듈 수정'; + $lang->msg_category_is_null = '등록된 분류가 없습니다'; + $lang->msg_grant_is_null = '등록된 권한 대상이 없습니다'; + $lang->msg_no_checked_document = '선택된 게시물이 없습니다'; + $lang->msg_move_failed = '이동 실패하였습니다'; +?> diff --git a/modules/blog/queries/getAllBoard.xml b/modules/blog/queries/getAllBoard.xml new file mode 100644 index 000000000..49554aeac --- /dev/null +++ b/modules/blog/queries/getAllBoard.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/modules/blog/queries/getBoardList.xml b/modules/blog/queries/getBoardList.xml new file mode 100644 index 000000000..efc53c312 --- /dev/null +++ b/modules/blog/queries/getBoardList.xml @@ -0,0 +1,24 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/blog/skins/default/comment.html b/modules/blog/skins/default/comment.html new file mode 100644 index 000000000..4eab1c6dd --- /dev/null +++ b/modules/blog/skins/default/comment.html @@ -0,0 +1,75 @@ + + +
+ {$lang->comment} : {count($document->comment_list)} +
+ + +
+ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->date}{zdate($val->regdate, "Y-m-d H:i:s")}
{$lang->writer}
{htmlspecialchars($val->nick_name)}
{$lang->homepage}{htmlspecialchars($val->homepage)}
{$lang->content}{$val->content}
ipaddress{$val->ipaddress}
{$lang->uploaded_file} + + + +
+ [{$lang->cmd_reply}] + + + [{$lang->cmd_modify}] + [{$lang->cmd_delete}] + +
+ + + + + + + + + + + + diff --git a/modules/blog/skins/default/comment_form.html b/modules/blog/skins/default/comment_form.html new file mode 100644 index 000000000..0a0a7cd94 --- /dev/null +++ b/modules/blog/skins/default/comment_form.html @@ -0,0 +1,79 @@ + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
{$lang->date}{$source_comment->regdate}
{$lang->writer}
{htmlspecialchars($source_comment->nick_name)}
{$lang->content}{$source_comment->content}
+
+ + + +
fileupload)-->enctype="multipart/form-data"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->writer}
{$lang->password}
{$lang->email_address}
{$lang->homepage}
{$comment_editor}
+ + + + + +
+
+ + + + diff --git a/modules/blog/skins/default/delete_comment_form.html b/modules/blog/skins/default/delete_comment_form.html new file mode 100644 index 000000000..a3ed7cf27 --- /dev/null +++ b/modules/blog/skins/default/delete_comment_form.html @@ -0,0 +1,23 @@ + + + +
+ + + + + + + + + + + + +
{$lang->confirm_delete}
+ + +
+
+ + diff --git a/modules/blog/skins/default/delete_form.html b/modules/blog/skins/default/delete_form.html new file mode 100644 index 000000000..1f552303e --- /dev/null +++ b/modules/blog/skins/default/delete_form.html @@ -0,0 +1,27 @@ + + + +
+ + + + + + + + + + + + + + + +
{$lang->confirm_delete}
{$lang->title}{$document->title}
+ + +
+ +
+ + diff --git a/modules/blog/skins/default/delete_trackback_form.html b/modules/blog/skins/default/delete_trackback_form.html new file mode 100644 index 000000000..4ca0aabfc --- /dev/null +++ b/modules/blog/skins/default/delete_trackback_form.html @@ -0,0 +1,23 @@ + + + +
+ + + + + + + + + + + + +
{$lang->confirm_delete}
+ + +
+
+ + diff --git a/modules/blog/skins/default/filter/delete_comment.xml b/modules/blog/skins/default/filter/delete_comment.xml new file mode 100644 index 000000000..115ea00d9 --- /dev/null +++ b/modules/blog/skins/default/filter/delete_comment.xml @@ -0,0 +1,18 @@ + +
+ + + + + + + + + + + + + + + +
diff --git a/modules/blog/skins/default/filter/delete_document.xml b/modules/blog/skins/default/filter/delete_document.xml new file mode 100644 index 000000000..7627f5a63 --- /dev/null +++ b/modules/blog/skins/default/filter/delete_document.xml @@ -0,0 +1,16 @@ + +
+ + + + + + + + + + + + + +
diff --git a/modules/blog/skins/default/filter/delete_trackback.xml b/modules/blog/skins/default/filter/delete_trackback.xml new file mode 100644 index 000000000..2140675f8 --- /dev/null +++ b/modules/blog/skins/default/filter/delete_trackback.xml @@ -0,0 +1,18 @@ + +
+ + + + + + + + + + + + + + + +
diff --git a/modules/blog/skins/default/filter/input_password.xml b/modules/blog/skins/default/filter/input_password.xml new file mode 100644 index 000000000..55cb6d8e0 --- /dev/null +++ b/modules/blog/skins/default/filter/input_password.xml @@ -0,0 +1,16 @@ + +
+ + + + + + + + + + + + + +
diff --git a/modules/blog/skins/default/filter/insert.xml b/modules/blog/skins/default/filter/insert.xml new file mode 100644 index 000000000..85d1ed4ce --- /dev/null +++ b/modules/blog/skins/default/filter/insert.xml @@ -0,0 +1,18 @@ + +
+ + + + + + + + + + + + + + + +
diff --git a/modules/blog/skins/default/filter/insert_comment.xml b/modules/blog/skins/default/filter/insert_comment.xml new file mode 100644 index 000000000..ba2216c8a --- /dev/null +++ b/modules/blog/skins/default/filter/insert_comment.xml @@ -0,0 +1,28 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/modules/blog/skins/default/filter/search.xml b/modules/blog/skins/default/filter/search.xml new file mode 100644 index 000000000..6c85e1254 --- /dev/null +++ b/modules/blog/skins/default/filter/search.xml @@ -0,0 +1,15 @@ + +
+ + + + + + + + + + + + +
diff --git a/modules/blog/skins/default/filter/vote.xml b/modules/blog/skins/default/filter/vote.xml new file mode 100644 index 000000000..0870a7551 --- /dev/null +++ b/modules/blog/skins/default/filter/vote.xml @@ -0,0 +1,13 @@ + +
+ + + + + + + + + + +
diff --git a/modules/blog/skins/default/footer.html b/modules/blog/skins/default/footer.html new file mode 100644 index 000000000..9d5404ca8 --- /dev/null +++ b/modules/blog/skins/default/footer.html @@ -0,0 +1 @@ +{$module_info->footer_text} diff --git a/modules/blog/skins/default/header.html b/modules/blog/skins/default/header.html new file mode 100644 index 000000000..68ffc0dae --- /dev/null +++ b/modules/blog/skins/default/header.html @@ -0,0 +1,32 @@ + +{$module_info->header_text} + + +
+ + {$lang->document_count} : {number_format($total_count)}, + {$lang->page_count} : {number_format($page)} / {number_format($total_page)} + + + + rss + + + + [ + {$lang->cmd_view_member_info} | + {$lang->cmd_logout} + ] + + + [ + {$lang->cmd_signup} | + {$lang->cmd_login} + ] + + + + [{$lang->cmd_management}] + +
+ diff --git a/modules/blog/skins/default/input_password_form.html b/modules/blog/skins/default/input_password_form.html new file mode 100644 index 000000000..0a26427de --- /dev/null +++ b/modules/blog/skins/default/input_password_form.html @@ -0,0 +1,27 @@ + + + +
+ + + + + + + + + + + + + + + + +
{$lang->msg_input_password}
{$lang->password}
+ + +
+
+ + diff --git a/modules/blog/skins/default/js/board.js b/modules/blog/skins/default/js/board.js new file mode 100644 index 000000000..a9757df89 --- /dev/null +++ b/modules/blog/skins/default/js/board.js @@ -0,0 +1,129 @@ +/** + * @file modules/board/js/board.js + * @author zero (zero@nzeo.com) + * @brief board 모듈의 javascript + **/ + +/* 관리자가 카트 선택시 세션에 넣음 */ +function doAddCart(mid, obj) { + var srl = obj.value; + var check_flag = obj.checked?'add':'remove'; + + var params = new Array(); + params["mid"] = mid; + params["srl"] = srl; + params["check_flag"] = check_flag; + + exec_xml("board","procBoardAdminAddCart", params, null); +} + +/* 글쓰기 작성후 */ +function completeDocumentInserted(ret_obj) { + var error = ret_obj['error']; + var message = ret_obj['message']; + var mid = ret_obj['mid']; + var document_srl = ret_obj['document_srl']; + var category_srl = ret_obj['category_srl']; + + alert(message); + + var url = location.href.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act',''); + if(category_srl) url = url.setQuery('category',category_srl); + location.href = url; +} + +/* 글 삭제 */ +function completeDeleteDocument(ret_obj) { + var error = ret_obj['error']; + var message = ret_obj['message']; + var mid = ret_obj['mid']; + var page = ret_obj['page']; + + var url = "./?mid="+mid; + if(page) url += "&page="+page; + + alert(message); + + location.href = url; +} + +/* 검색 실행 */ +function completeSearch(fo_obj, params) { + fo_obj.submit(); +} + +/* 추천, 추천은 별도의 폼입력이 필요 없어 직접 필터 사용 */ +function doVote() { + var fo_obj = document.getElementById('fo_document_info'); + procFilter(fo_obj, vote); +} + +function completeVote(ret_obj) { + var error = ret_obj['error']; + var message = ret_obj['message']; + alert(message); + location.href = location.href; +} + +// 현재 페이지 reload +function completeReload(ret_obj) { + var error = ret_obj['error']; + var message = ret_obj['message']; + + location.href = location.href; +} + +/* 댓글 글쓰기 작성후 */ +function completeInsertComment(ret_obj) { + var error = ret_obj['error']; + var message = ret_obj['message']; + var mid = ret_obj['mid']; + var document_srl = ret_obj['document_srl']; + var comment_srl = ret_obj['comment_srl']; + + var url = "./?mid="+mid+"&document_srl="+document_srl; + if(comment_srl) url += "#comment_"+comment_srl; + + alert(message); + + location.href = url; +} + +/* 댓글 삭제 */ +function completeDeleteComment(ret_obj) { + var error = ret_obj['error']; + var message = ret_obj['message']; + var mid = ret_obj['mid']; + var document_srl = ret_obj['document_srl']; + var page = ret_obj['page']; + + var url = "./?mid="+mid+'&document_srl='+document_srl; + if(page) url += "&page="+page; + + alert(message); + + location.href = url; +} + +/* 트랙백 삭제 */ +function completeDeleteTrackback(ret_obj) { + var error = ret_obj['error']; + var message = ret_obj['message']; + var mid = ret_obj['mid']; + var document_srl = ret_obj['document_srl']; + var page = ret_obj['page']; + + var url = "./?mid="+mid+'&document_srl='+document_srl; + if(page) url += "&page="+page; + + alert(message); + + location.href = url; +} + +/* 카테고리 이동 */ +function doChangeCategory(sel_obj, url) { + var category_srl = sel_obj.options[sel_obj.selectedIndex].value; + if(!category_srl) location.href=url; + else location.href=url+'&category='+category_srl; +} diff --git a/modules/blog/skins/default/list.html b/modules/blog/skins/default/list.html new file mode 100644 index 000000000..eda1f4cfc --- /dev/null +++ b/modules/blog/skins/default/list.html @@ -0,0 +1,121 @@ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->no} +
+ +
+
{$lang->title}{$lang->writer}{$lang->readed_count}{$lang->voted_count}{$lang->date}
{$no}{$category_list[$val->category_srl]->title} + + document_srl])-->checked="true" /> + + + + {htmlspecialchars($val->title)} + + {htmlspecialchars($val->title)} + + + + [{$val->comment_count}] + + + + [{$val->trackback_count}] + + +
{$val->nick_name}
{$val->readed_count}{$val->voted_count}{zdate($val->regdate,"Y-m-d")}
+
+ + +
+ + + [{$lang->cmd_write}] + + + + + [{$lang->cmd_manage_document}] + +
+ + + + +
+
+ + + + + + + +
+
+ + +
+[{$lang->first_page}] + + + +{$page_no} + +[{$page_no}] + + + +[{$lang->last_page}] +
+ + + + diff --git a/modules/blog/skins/default/message.html b/modules/blog/skins/default/message.html new file mode 100644 index 000000000..00bf01814 --- /dev/null +++ b/modules/blog/skins/default/message.html @@ -0,0 +1,11 @@ + + +
+ {$message} +
+ + + {$lang->cmd_login} + + + diff --git a/modules/blog/skins/default/skin.xml b/modules/blog/skins/default/skin.xml new file mode 100644 index 000000000..89ae20ddc --- /dev/null +++ b/modules/blog/skins/default/skin.xml @@ -0,0 +1,53 @@ + + + 게시판 기본 스킨 + + 제로 + board모듈의 default스킨 + + + + 기본 + + + 이상한거 + + + + + 제목 + 그냥 테스트용입니다 + + + 제목 2 + haha + + + 내용 + 내용의 기본값 + + + 선택1 + 1 + 2 + 3 + 4 + 5 + + + 다중선택 + a + b + c + + + 하나선택 + A + B + C + + + 로고이미지 + + + diff --git a/modules/blog/skins/default/trackback.html b/modules/blog/skins/default/trackback.html new file mode 100644 index 000000000..97e9d5d1d --- /dev/null +++ b/modules/blog/skins/default/trackback.html @@ -0,0 +1,46 @@ + +
+ {$lang->trackback} : {count($document->trackback_list)} +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->title}{$val->title}
{$lang->date}{zdate($val->regdate, "Y-m-d H:i:s")}
{$lang->blog_name}{$val->blog_name}
{$lang->excerpt}{nl2br($val->excerpt)}
ipaddress{$val->ipaddress}
+ [{$lang->cmd_delete}] +
+
+ + +
+ diff --git a/modules/blog/skins/default/view_document.html b/modules/blog/skins/default/view_document.html new file mode 100644 index 000000000..328ac5532 --- /dev/null +++ b/modules/blog/skins/default/view_document.html @@ -0,0 +1,130 @@ + + + +
+ + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->category}{$category_list[$document->category_srl]->title}
{$lang->title}{htmlspecialchars($document->title)}
{$lang->homepage}{htmlspecialchars($document->homepage)}
{$lang->date}{zdate($document->regdate,"Y-m-d H:i:s")}
{$lang->writer}
{htmlspecialchars($document->nick_name)}
{$lang->readed_count}{$document->readed_count}
{$lang->voted_count}{$document->voted_count}
{$lang->content}{$document->content}
{$lang->document_url}{getUrl()}{$document->document_srl}
{$lang->trackback_url}{getUrl()}trackback/{$document->document_srl}
{$lang->tag} + + {htmlspecialchars($val)} + +
{$lang->uploaded_file} + + + +
ipaddress{$document->ipaddress}
+ + {$lang->allow_comment} + + + + {$lang->lock_comment} + + + + {$lang->allow_trackback} + +
+
+ + + + + + + + + + + + + + + + diff --git a/modules/blog/skins/default/write_form.html b/modules/blog/skins/default/write_form.html new file mode 100644 index 000000000..2a8f6d27e --- /dev/null +++ b/modules/blog/skins/default/write_form.html @@ -0,0 +1,104 @@ + + + +
fileupload)-->enctype="multipart/form-data"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->category} + +
{$lang->writer}
{$lang->password}
{$lang->email_address}
{$lang->homepage}
{$lang->title}
+ + is_notice== "Y")-->checked="true" id="is_notice" /> + + + + is_secret== "Y")-->checked="true" id="is_secret" /> + + + allow_comment != "N")-->checked="true" id="allow_comment" /> + + + lock_comment == "Y")-->checked="true" id="lock_comment" /> + + + allow_trackback != "N")-->checked="true" id="allow_trackback" /> + +
{$editor}
{$lang->cmd_send_trackback} + + +
{$lang->tag} +
+ {$lang->about_tag} +
+ + +
+ +
+ + diff --git a/modules/blog/tpl/board_config.html b/modules/blog/tpl/board_config.html new file mode 100644 index 000000000..bf07fc6a0 --- /dev/null +++ b/modules/blog/tpl/board_config.html @@ -0,0 +1,19 @@ + + + +
+ + + + + + + + + + + +
{$lang->test}
{$lang->about_test}
+ +
+
diff --git a/modules/blog/tpl/board_delete.html b/modules/blog/tpl/board_delete.html new file mode 100644 index 000000000..93d298485 --- /dev/null +++ b/modules/blog/tpl/board_delete.html @@ -0,0 +1,33 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
{$lang->confirm_delete}
{$lang->module_name}{$module_info->mid}
{$lang->module}{$module_info->module}
{$lang->document_count}{$module_info->document_count}
+ + +
+ +
+ diff --git a/modules/blog/tpl/board_info.html b/modules/blog/tpl/board_info.html new file mode 100644 index 000000000..508f039c3 --- /dev/null +++ b/modules/blog/tpl/board_info.html @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->category} + + {$lang->not_exists} + + {$module_category[$module_info->module_category_srl]->title} + +
{$lang->layout} + + {$module_info->layout_title} ({$module_info->layout}) + + {$lang->not_exists} + +
{$lang->skin}{$module_info->skin_title} ({$module_info->skin})
{$lang->browser_title}{htmlspecialchars($module_info->browser_title)}
{$lang->use_category}{$lang->use}{$lang->notuse}
{$lang->list_count}{$module_info->list_count?$module_info->list_count:20}
{$lang->page_count}{$module_info->page_count?$module_info->page_count:10}
{$lang->description}{nl2br(htmlspecialchars($module_info->description))}
{$lang->header_text}{htmlspecialchars($module_info->header_text)}
{$lang->footer_text}{htmlspecialchars($module_info->footer_text)}
{$lang->admin_id}{implode(",",$module_info->admin_id)}
+ +
diff --git a/modules/blog/tpl/board_insert.html b/modules/blog/tpl/board_insert.html new file mode 100644 index 000000000..0ba0aabae --- /dev/null +++ b/modules/blog/tpl/board_insert.html @@ -0,0 +1,132 @@ + + + + + + + +
+ + {$lang->msg_new_module} + + {$lang->msg_update_module} + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->mid}
{$lang->about_mid}
{$lang->category} + +
{$lang->about_category}
{$lang->browser_title}
{$lang->about_browser_title}
{$lang->skin} + +
{$lang->about_skin}
{$lang->use_category}use_category=='Y')-->checked="true" />
{$lang->about_use_category}
{$lang->list_count}
{$lang->about_list_count}
{$lang->page_count}
{$lang->about_page_count}
{$lang->is_default}is_default=='Y')-->checked="true"/>
{$lang->about_default}
{$lang->description}
{$lang->about_description}
{$lang->header_text}
{$lang->about_header_text}
{$lang->footer_text}
{$lang->about_footer_text}
{$lang->admin_id}
{$lang->about_admin_id}
+ + +
+
diff --git a/modules/blog/tpl/category_list.html b/modules/blog/tpl/category_list.html new file mode 100644 index 000000000..23d786305 --- /dev/null +++ b/modules/blog/tpl/category_list.html @@ -0,0 +1,55 @@ + + + + + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->category_title}{$lang->last_update}{$lang->cmd_modify}{$lang->cmd_move}{$lang->cmd_delete}
{$lang->msg_category_is_null}
{htmlspecialchars($category_info->title)}{zdate($category_info->last_update,"Y-m-d H:i:s")}{$lang->cmd_modify}{$lang->cmd_move_up}{$lang->cmd_move_down}{$lang->cmd_delete}
+
+ + +
+ + + + +
+ {$lang->category_title} : + + +
+ +
diff --git a/modules/blog/tpl/category_update_form.html b/modules/blog/tpl/category_update_form.html new file mode 100644 index 000000000..51ffc8ce3 --- /dev/null +++ b/modules/blog/tpl/category_update_form.html @@ -0,0 +1,21 @@ + + + + + + + +
+ + + + +
+ {$lang->category_title} : + + + +
+ +
+ diff --git a/modules/blog/tpl/checked_list.html b/modules/blog/tpl/checked_list.html new file mode 100644 index 000000000..6ad21a3b9 --- /dev/null +++ b/modules/blog/tpl/checked_list.html @@ -0,0 +1,35 @@ + + + +
+ +
{$lang->cmd_manage_document}
+ + +
{$lang->msg_no_checked_document}
+ +
+ + +
{$lang->checked_count} : {count($document_list)}
+ + + + +
+ + {$lang->cmd_move} +
+ +
+ + + + +
diff --git a/modules/blog/tpl/filter/delete_board.xml b/modules/blog/tpl/filter/delete_board.xml new file mode 100644 index 000000000..cba763914 --- /dev/null +++ b/modules/blog/tpl/filter/delete_board.xml @@ -0,0 +1,10 @@ + +
+ + + + + + + +
diff --git a/modules/blog/tpl/filter/insert_board.xml b/modules/blog/tpl/filter/insert_board.xml new file mode 100644 index 000000000..3655b3fcc --- /dev/null +++ b/modules/blog/tpl/filter/insert_board.xml @@ -0,0 +1,32 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/modules/blog/tpl/filter/insert_category.xml b/modules/blog/tpl/filter/insert_category.xml new file mode 100644 index 000000000..9aed519d1 --- /dev/null +++ b/modules/blog/tpl/filter/insert_category.xml @@ -0,0 +1,12 @@ + +
+ + + + + + + + + +
diff --git a/modules/blog/tpl/filter/insert_config.xml b/modules/blog/tpl/filter/insert_config.xml new file mode 100644 index 000000000..c0a674180 --- /dev/null +++ b/modules/blog/tpl/filter/insert_config.xml @@ -0,0 +1,7 @@ + +
+ + + + + diff --git a/modules/blog/tpl/filter/insert_grant.xml b/modules/blog/tpl/filter/insert_grant.xml new file mode 100644 index 000000000..8ac809f0b --- /dev/null +++ b/modules/blog/tpl/filter/insert_grant.xml @@ -0,0 +1,11 @@ + + + + + + + + + + +
diff --git a/modules/blog/tpl/filter/manage_checked_document.xml b/modules/blog/tpl/filter/manage_checked_document.xml new file mode 100644 index 000000000..f2bd9641c --- /dev/null +++ b/modules/blog/tpl/filter/manage_checked_document.xml @@ -0,0 +1,7 @@ + +
+ + + + + diff --git a/modules/blog/tpl/filter/update_category.xml b/modules/blog/tpl/filter/update_category.xml new file mode 100644 index 000000000..ff7e59f62 --- /dev/null +++ b/modules/blog/tpl/filter/update_category.xml @@ -0,0 +1,11 @@ + + + + + + + + + + +
diff --git a/modules/blog/tpl/grant_list.html b/modules/blog/tpl/grant_list.html new file mode 100644 index 000000000..432d7f464 --- /dev/null +++ b/modules/blog/tpl/grant_list.html @@ -0,0 +1,45 @@ + + + +
+ + + +
+ {$lang->about_grant} +
+ + + + + + + + + + + + + + + + + +
{$lang->grant}{$lang->target}
{$val->title} +
+ + + grants)&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="true"/> + + + +
+
+ + +
+
+ +
+ +
diff --git a/modules/blog/tpl/header.html b/modules/blog/tpl/header.html new file mode 100644 index 000000000..e25950779 --- /dev/null +++ b/modules/blog/tpl/header.html @@ -0,0 +1,28 @@ + + + +
+ style="font-weight:bold">[{$lang->cmd_board_list}] + style="font-weight:bold">[{$lang->cmd_module_config}] +
+ + + +
+ + [{$lang->cmd_back}] + + style="font-weight:bold">[{$lang->cmd_view_info}] + style="font-weight:bold">[{$lang->cmd_manage_category}] + style="font-weight:bold">[{$lang->cmd_manage_grant}] + style="font-weight:bold">[{$lang->cmd_manage_skin}] +
+ +
+ {$lang->mid} : {$module_info->mid} + + ({$lang->cmd_move}) + + [{$lang->is_default}] +
+ diff --git a/modules/blog/tpl/index.html b/modules/blog/tpl/index.html new file mode 100644 index 000000000..7c939fd12 --- /dev/null +++ b/modules/blog/tpl/index.html @@ -0,0 +1,77 @@ + + + +
+ {$lang->total_count} {number_format($total_count)}, + {$lang->page_count} : {number_format($page)} / {number_format($total_page)} +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->no} +
+ +
+
{$lang->mid}{$lang->browser_title}{$lang->is_default}{$lang->skin}{$lang->admin_id}{$lang->regdate}{$lang->cmd_move}{$lang->cmd_delete}
{$no} + + {$lang->not_exists} + + {$module_category[$val->module_category_srl]->title} + + {$val->mid}{htmlspecialchars($val->browser_title)}{$val->is_default}{$val->skin}{$val->admin_id}{zdate($val->regdate,"Y-m-d")}{$lang->cmd_move}{$lang->cmd_delete}
+
+ + + + + +
+ [{$lang->first_page}] + + + + {$page_no} + + [{$page_no}] + + + + [{$lang->last_page}] +
diff --git a/modules/blog/tpl/js/board_admin.js b/modules/blog/tpl/js/board_admin.js new file mode 100644 index 000000000..148562b46 --- /dev/null +++ b/modules/blog/tpl/js/board_admin.js @@ -0,0 +1,116 @@ +/** + * @file modules/board/js/board_admin.js + * @author zero (zero@nzeo.com) + * @brief board 모듈의 관리자용 javascript + **/ + +/* 모듈 생성 후 */ +function completeInsertBoard(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); + + var url = location.href.setQuery('module_srl',module_srl).setQuery('act','dispBoardAdminBoardInfo'); + if(page) url.setQuery('page',page); + location.href = url; +} + +/* 모듈 삭제 후 */ +function completeDeleteBoard(ret_obj) { + var error = ret_obj['error']; + var message = ret_obj['message']; + var page = ret_obj['page']; + alert(message); + + var url = location.href.setQuery('act','dispBoardAdminContent').setQuery('module_srl',''); + if(page) url = url.setQuery('page',page); + location.href = url; +} + +/* 카테고리 관련 작업들 */ +function doUpdateCategory(category_srl, mode, message) { + if(typeof(message)!='undefined'&&!confirm(message)) return; + + var fo_obj = xGetElementById('fo_category_info'); + fo_obj.category_srl.value = category_srl; + fo_obj.mode.value = mode; + + procFilter(fo_obj, update_category); +} + +/* 카테고리 정보 수정 후 */ +function completeUpdateCategory(ret_obj) { + var error = ret_obj['error']; + var message = ret_obj['message']; + var module_srl = ret_obj['module_srl']; + var page = ret_obj['page']; + alert(message); + + var url = location.href.setQuery('module_srl',module_srl).setQuery('act','dispBoardAdminCategoryInfo'); + if(page) url.setQuery('page',page); + location.href = url; +} + +/* 권한 관련 */ +function doSelectAll(obj, key) { + var fo_obj = obj.parentNode; + while(fo_obj.nodeName != 'FORM') { + fo_obj = fo_obj.parentNode; + } + + for(var i=0;i + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lang->skin_default_info}
{$lang->skin}{$skin_info->title}
{$lang->skin_maker}{$skin_info->maker->name} ({$skin_info->maker->email_address})
{$lang->skin_maker_homepage}{$skin_info->maker->homepage}
{$lang->date}{$skin_info->maker->date}
{$lang->description}{nl2br($skin_info->maker->description)}
{$lang->colorset} + + +
+ + {$val->title} + + + colorset==$val->name)-->checked="true"/> + +
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + + +
{$lang->extra_vars}
description)-->rowspan="2">{$val->title} + + + + + + + + + + + + + value))-->checked="true"/> + + + + + + + + value)-->checked="true"/> + + + + + + + +
+
+ + +
+ + + + + +
{nl2br($val->description)}
+ +
+ + +
+ +
+
+ + diff --git a/modules/blog/tpl/top_refresh.html b/modules/blog/tpl/top_refresh.html new file mode 100644 index 000000000..2f4983d1d --- /dev/null +++ b/modules/blog/tpl/top_refresh.html @@ -0,0 +1,3 @@ +