diff --git a/config/config.inc.php b/config/config.inc.php index b3e18ff9e..b245bef4b 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -18,7 +18,7 @@ /** * @brief debug mode = true 일때 files/_debug_message.php 에 디버그 내용이 쌓임 **/ - define('__DEBUG__', true); + define('__DEBUG__', false); if(__DEBUG__) { // php5이상이면 error handling을 handleError() 로 set diff --git a/modules/board/board.controller.php b/modules/board/board.controller.php index 972bddc54..349fd2dfd 100644 --- a/modules/board/board.controller.php +++ b/modules/board/board.controller.php @@ -93,7 +93,7 @@ $oDocumentController = &getController('document'); // 삭제 시도 - $output = $oDocumentController->deleteDocument($document_srl); + $output = $oDocumentController->deleteDocument($document_srl, $this->grant->manager); if(!$output->toBool()) return $output; $this->add('mid', Context::get('mid')); @@ -232,17 +232,16 @@ } // 글이 없을 경우 에러 - if(!$data) return $this->doError('msg_invalid_request'); + if(!$data) return new Object(-1, 'msg_invalid_request'); // 문서의 비밀번호와 입력한 비밀번호의 비교 - if($data->password != $password) return $this->doError('msg_invalid_password'); + if($data->password != $password) return new Object(-1, 'msg_invalid_password'); // 해당 글에 대한 권한 부여 if($comment_srl) { $oCommentController = &getController('comment'); $oCommentController->addGrant($comment_srl); } else { - $_SESSION['own_document'][$document_srl] = true; $oDocumentController = &getController('document'); $oDocumentController->addGrant($document_srl); } @@ -291,7 +290,7 @@ * file_srl : 파일의 sequence\n * sid : db에 저장된 비교 값, 틀리면 다운로드 하지 낳음\n **/ - function procDownload() { + function procDownloadFile() { // 다운로드에 필요한 변수 체크 $file_srl = Context::get('file_srl'); $sid = Context::get('sid'); diff --git a/modules/board/board.view.php b/modules/board/board.view.php index d6bfcf630..05c268c7b 100644 --- a/modules/board/board.view.php +++ b/modules/board/board.view.php @@ -143,7 +143,7 @@ } // 삭제하려는 글이 없으면 에러 - if(!$document) return $this->list(); + if(!$document) return $this->dispContent(); // 권한이 없는 경우 비밀번호 입력화면으로 if($document&&!$document->is_granted) return $this->setTemplateFile('input_password_form'); @@ -169,7 +169,7 @@ // 해당 댓글를 찾아본다 $oCommentModel = &getModel('comment'); - $source_comment = $oCommentModel->getComment($parent_srl); + $source_comment = $oCommentModel->getComment($parent_srl, $this->grant->manager); // 댓글이 없다면 오류 if(!$source_comment) return $this->dispMessage('msg_invalid_request'); @@ -199,7 +199,7 @@ // 해당 댓글를 찾아본다 $oCommentModel = &getModel('comment'); - $comment = $oCommentModel->getComment($comment_srl); + $comment = $oCommentModel->getComment($comment_srl, $this->grant->manager); // 댓글이 없다면 오류 if(!$comment) return $this->dispMessage('msg_invalid_request'); @@ -228,11 +228,11 @@ // 삭제하려는 댓글가 있는지 확인 if($comment_srl) { $oCommentModel = &getModel('comment'); - $comment = $oCommentModel->getComment($comment_srl); + $comment = $oCommentModel->getComment($comment_srl, $this->grant->manager); } // 삭제하려는 글이 없으면 에러 - if(!$comment) return $this->list(); + if(!$comment) return $this->dispContent(); // 권한이 없는 경우 비밀번호 입력화면으로 if($comment_srl&&$comment&&!$comment->is_granted) return $this->setTemplateFile('input_password_form'); @@ -364,7 +364,7 @@ * @brief 게시판의 정보 출력 **/ function dispAdminBoardInfo() { - if(!Context::get('module_srl')) return $this->list(); + if(!Context::get('module_srl')) return $this->dispContent(); // 템플릿 파일 지정 $this->setTemplateFile('info'); @@ -382,7 +382,7 @@ * @brief 게시판 삭제 화면 출력 **/ function dispAdminDeleteBoard() { - if(!Context::get('module_srl')) return $this->list(); + if(!Context::get('module_srl')) return $this->dispContent(); $module_info = Context::get('module_info'); diff --git a/modules/board/conf/module.xml b/modules/board/conf/module.xml index ff5552cc1..16d71dad8 100644 --- a/modules/board/conf/module.xml +++ b/modules/board/conf/module.xml @@ -57,7 +57,7 @@ - + diff --git a/modules/board/skins/default/comment.html b/modules/board/skins/default/comment.html index 0846027c7..b2f1f96bd 100644 --- a/modules/board/skins/default/comment.html +++ b/modules/board/skins/default/comment.html @@ -46,7 +46,7 @@ - + diff --git a/modules/board/skins/default/comment_form.html b/modules/board/skins/default/comment_form.html index 18d835492..c11a330ed 100644 --- a/modules/board/skins/default/comment_form.html +++ b/modules/board/skins/default/comment_form.html @@ -15,14 +15,6 @@ {$lang->user_name} {$source_comment->user_name} - - {$lang->readed_count} - {$source_comment->readed_count} - - - {$lang->voted_count} - {$source_comment->voted_count} - {$lang->content} {nl2br($source_comment->content)} diff --git a/modules/board/skins/default/filter/insert_comment.xml b/modules/board/skins/default/filter/insert_comment.xml index 4792227e8..4f156424f 100644 --- a/modules/board/skins/default/filter/insert_comment.xml +++ b/modules/board/skins/default/filter/insert_comment.xml @@ -1,4 +1,4 @@ - +
@@ -9,7 +9,6 @@ - diff --git a/modules/board/skins/default/filter/search.xml b/modules/board/skins/default/filter/search.xml index 1c527db76..6c85e1254 100644 --- a/modules/board/skins/default/filter/search.xml +++ b/modules/board/skins/default/filter/search.xml @@ -1,14 +1,14 @@ - +
- + - + - + diff --git a/modules/board/skins/default/filter/vote.xml b/modules/board/skins/default/filter/vote.xml index 0260d17dc..9b77bb93d 100644 --- a/modules/board/skins/default/filter/vote.xml +++ b/modules/board/skins/default/filter/vote.xml @@ -1,10 +1,9 @@ - +
- diff --git a/modules/board/skins/default/js/board.js b/modules/board/skins/default/js/board.js index 8b0b18c95..b110ae284 100644 --- a/modules/board/skins/default/js/board.js +++ b/modules/board/skins/default/js/board.js @@ -30,7 +30,7 @@ function completeDeleteDocument(ret_obj) { } /* 검색 실행 */ -function completeSearch(fo_obj, args) { +function completeSearch(fo_obj, params) { fo_obj.submit(); } @@ -44,7 +44,6 @@ function completeVote(ret_obj) { var error = ret_obj['error']; var message = ret_obj['message']; alert(message); - location.href = location.href; } @@ -99,7 +98,7 @@ function completeDeleteTrackback(ret_obj) { } /* 카테고리 이동 */ -function completeChangeCategory(sel_obj, 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/board/skins/default/list.html b/modules/board/skins/default/list.html index dc04c114f..b4424f3af 100644 --- a/modules/board/skins/default/list.html +++ b/modules/board/skins/default/list.html @@ -49,7 +49,7 @@
- @@ -105,14 +105,15 @@
+ - + - +
diff --git a/modules/board/skins/default/view_document.html b/modules/board/skins/default/view_document.html index b4518d819..21857a03d 100644 --- a/modules/board/skins/default/view_document.html +++ b/modules/board/skins/default/view_document.html @@ -4,7 +4,6 @@
-
diff --git a/modules/comment/comment.controller.php b/modules/comment/comment.controller.php index 20c361730..55dd3cc0e 100644 --- a/modules/comment/comment.controller.php +++ b/modules/comment/comment.controller.php @@ -35,7 +35,7 @@ // 원본글을 가져옴 $document = $oDocumentModel->getDocument($document_srl); - if(!$document_srl) return new Object(-1,'msg_invalid_document'); + if($document_srl != $document->document_srl) return new Object(-1,'msg_invalid_document'); if($document->lock_comment=='Y') return new Object(-1,'msg_invalid_request'); // 댓글를 입력 @@ -55,13 +55,16 @@ // 해당 글의 전체 댓글 수를 구해옴 $comment_count = $oCommentModel->getCommentCount($document_srl); + // document의 controller 객체 생성 + $oDocumentController = &getController('document'); + // 해당글의 댓글 수를 업데이트 - $output = $this->updateCommentCount($document_srl, $comment_count); + $output = $oDocumentController->updateCommentCount($document_srl, $comment_count); // 댓글의 권한을 부여 $this->addGrant($obj->comment_srl); - $output->add('comment_srl', $obj->comment_srl); + $output->add('comment_srl', $obj->comment_srl); return $output; } diff --git a/modules/comment/comment.model.php b/modules/comment/comment.model.php index 8753efac4..9a2602bbb 100644 --- a/modules/comment/comment.model.php +++ b/modules/comment/comment.model.php @@ -35,10 +35,11 @@ /** * @brief 댓글 가져오기 **/ - function getComment($comment_srl) { + function getComment($comment_srl, $is_admin = false) { $oDB = &DB::getInstance(); $args->comment_srl = $comment_srl; $output = $oDB->executeQuery('comment.getComment', $args); + if($is_admin || $this->isGranted($comment_srl)) $output->data->is_granted = true; return $output->data; } @@ -68,7 +69,7 @@ /** * @brief document_srl에 해당하는 문서의 댓글 목록을 가져옴 **/ - function getCommentList($document_srl) { + function getCommentList($document_srl, $is_admin = false) { $oDB = &DB::getInstance(); $args->document_srl = $document_srl; diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index c8ce57a51..9f495bc08 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -42,7 +42,8 @@ // 카테고리가 있나 검사하여 없는 카테고리면 0으로 세팅 if($obj->category_srl) { - $category_list = $this->getCategoryList($obj->module_srl); + $oDocumentModel = &getModel('document'); + $category_list = $oDocumentModel->getCategoryList($obj->module_srl); if(!$category_list[$obj->category_srl]) $obj->category_srl = 0; } @@ -130,20 +131,17 @@ /** * @brief 문서 삭제 **/ - function deleteDocument($obj) { - // 변수 세팅 - $document_srl = $obj->document_srl; - $category_srl = $obj->category_srl; + function deleteDocument($document_srl, $is_admin = false) { // document의 model 객체 생성 $oDocumentModel = &getModel('document'); // 기존 문서가 있는지 확인 - $document = $oDocumentModel->getDocument($document_srl); + $document = $oDocumentModel->getDocument($document_srl, $is_admin); if($document->document_srl != $document_srl) return new Object(-1, 'msg_invalid_document'); // 권한이 있는지 확인 - if(!$document->is_granted) return new Object(-1, 'msg_not_permitted'); + if(!$document->is_granted&&!$is_admin) return new Object(-1, 'msg_not_permitted'); $oDB = &DB::getInstance(); @@ -242,16 +240,61 @@ * @brief 해당 document의 추천수 증가 **/ function updateVotedCount($document_srl) { + // 세션 정보에 추천 정보가 있으면 중단 if($_SESSION['voted_document'][$document_srl]) return new Object(-1, 'failed_voted'); + // 문서 원본을 가져옴 + $oDocumentModel = &getModel('document'); + $document = $oDocumentModel->getDocument($document_srl, false, false); + + // 글의 작성 ip와 현재 접속자의 ip가 동일하면 패스 + if($document->ipaddress == $_SERVER['REMOTE_ADDR']) { + $_SESSION['voted_document'][$document_srl] = true; + return new Object(-1, 'failed_voted'); + } + + // document의 작성자가 회원일때 조사 + if($document->member_srl) { + // member model 객체 생성 + $oMemberModel = &getModel('member'); + $member_srl = $oMemberModel->getLoggedMemberSrl(); + + // 글쓴이와 현재 로그인 사용자의 정보가 일치하면 읽었다고 생각하고 세션 등록후 패스 + if($member_srl && $member_srl == $document->member_srl) { + $_SESSION['voted_document'][$document_srl] = true; + return new Object(-1, 'failed_voted'); + } + } + + // DB 객체 생성 $oDB = &DB::getInstance(); + // 로그인 사용자이면 member_srl, 비회원이면 ipaddress로 판단 + if($member_srl) { + $args->member_srl = $member_srl; + } else { + $args->ipaddress = $_SERVER['REMOTE_ADDR']; + } $args->document_srl = $document_srl; + $output = $oDB->executeQuery('document.getDocumentVotedLogInfo', $args); + + // 로그 정보에 추천 로그가 있으면 세션 등록후 패스 + if($output->data->count) { + $_SESSION['voted_document'][$document_srl] = true; + return new Object(-1, 'failed_voted'); + } + + // 추천수 업데이트 $output = $oDB->executeQuery('document.updateVotedCount', $args); + // 로그 남기기 + $output = $oDB->executeQuery('document.insertDocumentVotedLog', $args); + + // 세션 정보에 남김 $_SESSION['voted_document'][$document_srl] = true; - return $output; + // 결과 리턴 + return new Object(0, 'success_voted'); } /** diff --git a/modules/document/document.model.php b/modules/document/document.model.php index 3fd0fff93..b98e7b39c 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -116,23 +116,23 @@ function getDocumentList($obj) { // 검색 키워드가 있으면 공백을 % 로 변경하여 키워드 or 연산이 되도록 수정 - if($obj->keyword) $obj->keyword = str_replace(' ','%',$obj->keyword); + if($obj->search_keyword) $obj->search_keyword = str_replace(' ','%',$obj->search_keyword); - if($obj->search_target && $obj->keyword) { + if($obj->search_target && $obj->search_keyword) { switch($obj->search_target) { case 'title' : - $search_obj->s_title = $obj->keyword; + $search_obj->s_title = $obj->search_keyword; break; case 'content' : - $search_obj->s_content = $obj->keyword; + $search_obj->s_content = $obj->search_keyword; break; case 'title_content' : - $search_obj->s_title = $obj->keyword; - $search_obj->s_content = $obj->keyword; + $search_obj->s_title = $obj->search_keyword; + $search_obj->s_content = $obj->search_keyword; break; case 'user_name' : - $search_obj->s_user_name = $obj->keyword; + $search_obj->s_user_name = $obj->search_keyword; break; } } @@ -142,12 +142,12 @@ // 변수 설정 $args->module_srl = $obj->module_srl; - $args->s_title = $obj->search_target=='title'?$obj->keyword:''; - $args->s_content = $obj->search_target=='content'?$obj->keyword:''; - $args->s_user_name = $obj->search_target=='user_name'?$obj->keyword:''; - $args->s_member_srl = $obj->search_target=='member'?$obj->keyword:''; - $args->s_ipaddress = $obj->search_target=='ipaddress'?$obj->keyword:''; - $args->s_regdate = $obj->search_target=='regdate'?$obj->keyword:''; + $args->s_title = $obj->search_target=='title'?$obj->search_keyword:''; + $args->s_content = $obj->search_target=='content'?$obj->search_keyword:''; + $args->s_user_name = $obj->search_target=='user_name'?$obj->search_keyword:''; + $args->s_member_srl = $obj->search_target=='member'?$obj->search_keyword:''; + $args->s_ipaddress = $obj->search_target=='ipaddress'?$obj->search_keyword:''; + $args->s_regdate = $obj->search_target=='regdate'?$obj->search_keyword:''; $args->category_srl = $obj->category_srl?$obj->category_srl:''; $args->sort_index = $obj->sort_index; @@ -266,7 +266,7 @@ **/ function transContent($content) { // 멀티미디어 코드의 변환 - $content = preg_replace_callback('!]*)editor_multimedia([^\>]*?)>!is', array('Document','_transMultimedia'), $content); + $content = preg_replace_callback('!]*)editor_multimedia([^\>]*?)>!is', array($this,'_transMultimedia'), $content); //
코드 변환 $content = str_replace(array("
","
","
"),"
", $content); diff --git a/modules/document/queries/getDocumentVotedLogInfo.xml b/modules/document/queries/getDocumentVotedLogInfo.xml new file mode 100644 index 000000000..4be2f7b06 --- /dev/null +++ b/modules/document/queries/getDocumentVotedLogInfo.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/modules/document/queries/insertDocumentVotedLog.xml b/modules/document/queries/insertDocumentVotedLog.xml new file mode 100644 index 000000000..0c2cd0c0c --- /dev/null +++ b/modules/document/queries/insertDocumentVotedLog.xml @@ -0,0 +1,11 @@ + + +
+ + + + + + + + diff --git a/modules/document/schemas/document_voted_log.xml b/modules/document/schemas/document_voted_log.xml new file mode 100644 index 000000000..249d77045 --- /dev/null +++ b/modules/document/schemas/document_voted_log.xml @@ -0,0 +1,6 @@ +
+ + + + +