From 21dcd2d1918d0b1813d247c46c4a3f86a2fe9daa Mon Sep 17 00:00:00 2001 From: zero Date: Fri, 22 Feb 2008 19:42:50 +0000 Subject: [PATCH] =?UTF-8?q?=EB=8C=93=EA=B8=80=EC=9D=84=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EC=9E=90=EA=B0=80=20=EC=A0=95=ED=95=9C=20=EC=88=98?= =?UTF-8?q?=EB=A7=8C=ED=81=BC=20=ED=8E=98=EC=9D=B4=EC=A7=95=EC=9D=84=20?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EB=B3=B4=EC=97=AC=EC=A3=BC=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80.=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=EC=9D=98=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=ED=95=84=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3757 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 2 +- classes/db/DB.class.php | 8 +- modules/board/skins/cozy_board/comment.html | 14 ++ modules/board/skins/cozy_board/css/blue.css | 2 +- .../skins/cozy_board/css/bluish_green.css | 2 +- modules/board/skins/cozy_board/css/common.css | 10 ++ modules/board/skins/cozy_board/css/green.css | 2 +- modules/board/skins/cozy_board/css/pink.css | 2 +- modules/board/skins/cozy_board/css/red.css | 2 +- modules/board/skins/xe_board/comment.html | 13 ++ modules/board/skins/xe_guestbook/comment.html | 13 ++ modules/comment/comment.admin.controller.php | 39 ++++++ modules/comment/comment.class.php | 10 ++ modules/comment/comment.controller.php | 51 ++++++- modules/comment/comment.model.php | 132 ++++++++++++++---- modules/comment/comment.view.php | 48 +++++++ modules/comment/conf/module.xml | 1 + modules/comment/lang/en.lang.php | 3 + modules/comment/lang/es.lang.php | 3 + modules/comment/lang/jp.lang.php | 3 + modules/comment/lang/ko.lang.php | 3 + modules/comment/lang/ru.lang.php | 3 + modules/comment/lang/zh-CN.lang.php | 3 + modules/comment/queries/deleteCommentList.xml | 8 ++ .../comment/queries/deleteCommentsList.xml | 8 ++ .../queries/deleteModuleCommentsList.xml | 8 ++ modules/comment/queries/getCommentList.xml | 4 +- .../comment/queries/getCommentListItem.xml | 11 ++ .../comment/queries/getCommentPageList.xml | 21 +++ modules/comment/queries/insertCommentList.xml | 14 ++ .../queries/updateCommentListArrange.xml | 13 ++ .../queries/updateCommentListModule.xml | 11 ++ modules/comment/schemas/comments_list.xml | 9 ++ .../comment/tpl/comment_module_config.html | 27 ++++ .../filter/insert_comment_module_config.xml | 7 + .../document/document.admin.controller.php | 6 + modules/document/document.item.php | 19 ++- 37 files changed, 490 insertions(+), 45 deletions(-) create mode 100644 modules/comment/comment.view.php create mode 100644 modules/comment/queries/deleteCommentList.xml create mode 100644 modules/comment/queries/deleteCommentsList.xml create mode 100644 modules/comment/queries/deleteModuleCommentsList.xml create mode 100644 modules/comment/queries/getCommentListItem.xml create mode 100644 modules/comment/queries/getCommentPageList.xml create mode 100644 modules/comment/queries/insertCommentList.xml create mode 100644 modules/comment/queries/updateCommentListArrange.xml create mode 100644 modules/comment/queries/updateCommentListModule.xml create mode 100644 modules/comment/schemas/comments_list.xml create mode 100644 modules/comment/tpl/comment_module_config.html create mode 100644 modules/comment/tpl/filter/insert_comment_module_config.xml diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 415d34a23..26d458e5c 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -456,7 +456,7 @@ if(!count($_REQUEST)) return; foreach($_REQUEST as $key => $val) { - if($key == "page" || substr($key,-3)=="srl") $val = (int)$val; + if($key == "page" || $key == "cpage" || substr($key,-3)=="srl") $val = (int)$val; if(is_array($val)) { for($i=0;$i $table) { $table_filename = sprintf('%s/cache.%s%s', $this->count_cache_path, $this->prefix, $table) ; - if(file_exists($table_filename) && filemtime($table_filename) > $cache_mtime) return false; + if(!file_exists($table_filename) || filemtime($table_filename) > $cache_mtime) return false; } $count = (int)FileHandler::readFile($cache_filename); @@ -480,7 +480,11 @@ if(!is_dir($this->count_cache_path)) return FileHandler::makeDir($this->count_cache_path); if(!is_array($tables)) $tables = array($tables); - foreach($tables as $alias => $table) FileHandler::writeFile( sprintf('%s/cache.%s%s', $this->count_cache_path, $this->prefix, $table), '' ); + foreach($tables as $alias => $table) { + $filename = sprintf('%s/cache.%s%s', $this->count_cache_path, $this->prefix, $table); + @unlink($filename); + FileHandler::writeFile( $filename, '' ); + } return true; } diff --git a/modules/board/skins/cozy_board/comment.html b/modules/board/skins/cozy_board/comment.html index f454e4645..07e86775a 100644 --- a/modules/board/skins/cozy_board/comment.html +++ b/modules/board/skins/cozy_board/comment.html @@ -85,5 +85,19 @@ {@ $idx++} + + + + +
+ {$lang->first_page} + + + {$page_no} + + {$page_no} + + + {$lang->last_page}
diff --git a/modules/board/skins/cozy_board/css/blue.css b/modules/board/skins/cozy_board/css/blue.css index 085c6985c..f8b5f2ba6 100644 --- a/modules/board/skins/cozy_board/css/blue.css +++ b/modules/board/skins/cozy_board/css/blue.css @@ -8,7 +8,7 @@ .boardList td .replyAndTrackback { font:.8em Tahoma; color:#007ed5; cursor:default; position:relative; top:-.2em;} .boardList td.recommend { font:bold .8em Tahoma; color:#007ed5; text-align:center;} -.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#007ed5; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } +.pageNavigation .current, .commentPageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#007ed5; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } .boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #1187d8;} .boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #1187d8; overflow:hidden;} diff --git a/modules/board/skins/cozy_board/css/bluish_green.css b/modules/board/skins/cozy_board/css/bluish_green.css index 9c221ce62..df89f4bcb 100644 --- a/modules/board/skins/cozy_board/css/bluish_green.css +++ b/modules/board/skins/cozy_board/css/bluish_green.css @@ -8,7 +8,7 @@ .boardList td .replyAndTrackback { font:.8em Tahoma; color:#9ab09f; cursor:default; position:relative; top:-.2em;} .boardList td.recommend { font:bold .8em Tahoma; color:#9ab09f; text-align:center;} -.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#9ab09f; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } +.pageNavigation .current , .commentPageNavigation .current{ margin-left:-4px; font:bold .8em Tahoma; color:#9ab09f; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } .boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #9ab09f;} .boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #9ab09f; overflow:hidden;} diff --git a/modules/board/skins/cozy_board/css/common.css b/modules/board/skins/cozy_board/css/common.css index f8fd5e7d6..9a0ef1dd8 100644 --- a/modules/board/skins/cozy_board/css/common.css +++ b/modules/board/skins/cozy_board/css/common.css @@ -128,6 +128,16 @@ Jeong, Chan Myeong 070601~070630 .pageNavigation a.goToFirst img, .pageNavigation a.goToLast img { vertical-align:middle;} +/* comment pageNavigation */ +.commentPageNavigation { overflow:hidden; margin:5px 0 10px 0; text-align:center; font:bold .8em Tahoma; } +.commentPageNavigation a, .commentPageNavigation a:visited, .commentPageNavigation a:active { margin-left:-4px; font:bold .8em Tahoma; color:#676767; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } +.commentPageNavigation a:hover { text-decoration:none; } +.commentPageNavigation a.goToFirst, +.commentPageNavigation a.goToLast { border:none; border-right:1px solid #ffffff; border-left:1px solid #ffffff; z-index:99; padding:1px 5px 3px 4px;} +.commentPageNavigation a.goToFirst img, +.commentPageNavigation a.goToLast img { vertical-align:middle;} + + .buttonBox { float:right; margin:1.2em 0 0 0; } /* boardRead */ diff --git a/modules/board/skins/cozy_board/css/green.css b/modules/board/skins/cozy_board/css/green.css index 592d74f50..fe99a4fe3 100644 --- a/modules/board/skins/cozy_board/css/green.css +++ b/modules/board/skins/cozy_board/css/green.css @@ -8,7 +8,7 @@ .boardList td .replyAndTrackback { font:.8em Tahoma; color:#27a939; cursor:default; position:relative; top:-.2em;} .boardList td.recommend { font:bold .8em Tahoma; color:#27a939; text-align:center;} -.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#27a939; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } +.pageNavigation .current , .commentPageNavigation .current{ margin-left:-4px; font:bold .8em Tahoma; color:#27a939; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } .boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #8dc63f;} .boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #8dc63f; overflow:hidden;} diff --git a/modules/board/skins/cozy_board/css/pink.css b/modules/board/skins/cozy_board/css/pink.css index 7269ac2a4..5a5d5a5ad 100644 --- a/modules/board/skins/cozy_board/css/pink.css +++ b/modules/board/skins/cozy_board/css/pink.css @@ -8,7 +8,7 @@ .boardList td .replyAndTrackback { font:.8em Tahoma; color:#f70795; cursor:default; position:relative; top:-.2em;} .boardList td.recommend { font:bold .8em Tahoma; color:#f70795; text-align:center;} -.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#f70795; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } +.pageNavigation .current , .commentPageNavigation .current{ margin-left:-4px; font:bold .8em Tahoma; color:#f70795; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } .boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #f70795;} .boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #f70795; overflow:hidden;} diff --git a/modules/board/skins/cozy_board/css/red.css b/modules/board/skins/cozy_board/css/red.css index b703a9dbb..a7b8adc9a 100644 --- a/modules/board/skins/cozy_board/css/red.css +++ b/modules/board/skins/cozy_board/css/red.css @@ -8,7 +8,7 @@ .boardList td .replyAndTrackback { font:.8em Tahoma; color:#ed1f29; cursor:default; position:relative; top:-.2em;} .boardList td.recommend { font:bold .8em Tahoma; color:#ec2127; text-align:center;} -.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#ff6600; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } +.pageNavigation .current , .commentPageNavigation .current{ margin-left:-4px; font:bold .8em Tahoma; color:#ff6600; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; } .boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #ed2228;} .boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #ee202a; overflow:hidden;} diff --git a/modules/board/skins/xe_board/comment.html b/modules/board/skins/xe_board/comment.html index 9650390cb..dfccda3e3 100644 --- a/modules/board/skins/xe_board/comment.html +++ b/modules/board/skins/xe_board/comment.html @@ -89,5 +89,18 @@ + + + diff --git a/modules/board/skins/xe_guestbook/comment.html b/modules/board/skins/xe_guestbook/comment.html index b1113298d..bc674662a 100644 --- a/modules/board/skins/xe_guestbook/comment.html +++ b/modules/board/skins/xe_guestbook/comment.html @@ -84,5 +84,18 @@ + + + diff --git a/modules/comment/comment.admin.controller.php b/modules/comment/comment.admin.controller.php index ad93f1868..00f0c27f8 100644 --- a/modules/comment/comment.admin.controller.php +++ b/modules/comment/comment.admin.controller.php @@ -62,8 +62,47 @@ function deleteModuleComments($module_srl) { $args->module_srl = $module_srl; $output = executeQuery('comment.deleteModuleComments', $args); + if(!$output->toBool()) return $output; + + $output = executeQuery('comment.deleteModuleCommentsList', $args); return $output; } + + /** + * @brief 댓글의 모듈별 추가 확장 폼을 저장 + **/ + function procCommentAdminInsertModuleConfig() { + // 기존 설정을 가져옴 + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('comment'); + + // 대상을 구함 + $module_srl = Context::get('target_module_srl'); + + // 여러개의 모듈 일괄 설정일 경우 + if(preg_match('/^([0-9,]+)$/',$module_srl)) $module_srl = explode(',',$module_srl); + else $module_srl = array($module_srl); + + $comment_config = null; + + $comment_config->comment_count = (int)Context::get('comment_count'); + if(!$comment_config->comment_count) $comment_config->comment_count = 50; + + for($i=0;$imodule_config[$srl] = $comment_config; + } + + // module Controller 객체 생성하여 입력 + $oModuleController = &getController('module'); + $output = $oModuleController->insertModuleConfig('comment',$config); + + $this->setError(-1); + $this->setMessage('success_updated'); + } + + } ?> diff --git a/modules/comment/comment.class.php b/modules/comment/comment.class.php index ca04f48ba..04e4952d4 100644 --- a/modules/comment/comment.class.php +++ b/modules/comment/comment.class.php @@ -24,6 +24,9 @@ // 2007. 10. 17 모듈이 삭제될때 등록된 댓글도 모두 삭제하는 트리거 추가 $oModuleController->insertTrigger('module.deleteModule', 'comment', 'controller', 'triggerDeleteModuleComments', 'after'); + // 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가 + $oModuleController->insertTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before'); + return new Object(); } @@ -46,6 +49,9 @@ if(!$oModuleModel->getActionForward('dispCommentAdminDeclared')) return true; + // 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가 + if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before')) return true; + return false; } @@ -78,6 +84,10 @@ if(!$oModuleModel->getActionForward('dispCommentAdminDeclared')) $oModuleController->insertActionForward('comment', 'view', 'dispCommentAdminDeclared'); + // 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가 + if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before')) + $oModuleController->insertTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before'); + return new Object(0, 'success_updated'); } diff --git a/modules/comment/comment.controller.php b/modules/comment/comment.controller.php index 523f266bc..20d66c04c 100644 --- a/modules/comment/comment.controller.php +++ b/modules/comment/comment.controller.php @@ -118,11 +118,11 @@ // 내용에서 제로보드XE만의 태그를 삭제 $obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content); + $obj->regdate = date("YmdHis"); // 세션에서 최고 관리자가 아니면 iframe, script 제거 if($logged_info->is_admin != 'Y') $obj->content = removeHackTag($obj->content); - if(!$obj->notify_message) $obj->notify_message = 'N'; if(!$obj->is_secret) $obj->is_secret = 'N'; @@ -130,15 +130,48 @@ $oDB = &DB::getInstance(); $oDB->begin(); - // 댓글을 입력 - $output = executeQuery('comment.insertComment', $obj); + // 댓글 목록 부분을 먼저 입력 + $list_args->comment_srl = $obj->comment_srl; + $list_args->document_srl = $obj->document_srl; + $list_args->module_srl = $obj->module_srl; + $list_args->regdate = $obj->regdate; - // 입력에 이상이 없으면 해당 글의 댓글 수를 올림 + // 부모댓글이 없으면 바로 데이터를 설정 + if(!$obj->parent_srl) { + $list_args->head = $list_args->arrange = $obj->comment_srl; + $list_args->depth = 0; + + // 부모댓글이 있으면 부모글의 정보를 구해옴 + } else { + // 부모댓글의 정보를 구함 + $parent_args->comment_srl = $obj->parent_srl; + $parent_output = executeQuery('comment.getCommentListItem', $parent_args); + + // 부모댓글이 존재하지 않으면 return + if(!$parent_output->toBool() || !$parent_output->data) return; + $parent = $parent_output->data; + + $list_args->head = $parent->head; + $list_args->depth = $parent->depth+1; + if($list_args->depth<2) $list_args->arrange = $obj->comment_srl; + else { + $list_args->arrange = $parent->arrange; + $output = executeQuery('comment.updateCommentListArrange', $list_args); + if(!$output->toBool()) return $output; + } + } + + $output = executeQuery('comment.insertCommentList', $list_args); + if(!$output->toBool()) return $output; + + // 댓글 본문을 입력 + $output = executeQuery('comment.insertComment', $obj); if(!$output->toBool()) { $oDB->rollback(); return $output; } + // 입력에 이상이 없으면 해당 글의 댓글 수를 올림 if(!$manual_inserted) { // comment model객체 생성 $oCommentModel = &getModel('comment'); @@ -155,6 +188,7 @@ // 댓글의 권한을 부여 $this->addGrant($obj->comment_srl); } + // trigger 호출 (after) if($output->toBool()) { @@ -301,6 +335,8 @@ return $output; } + $output = executeQuery('comment.deleteCommentList', $args); + // 댓글 수를 구해서 업데이트 $comment_count = $oCommentModel->getCommentCount($document_srl); @@ -341,9 +377,14 @@ $oDocument = $oDocumentModel->getDocument($document_srl); if(!$oDocument->isExists() || !$oDocument->isGranted()) return new Object(-1, 'msg_not_permitted'); - // 삭제 + // 댓글 본문 삭제 $args->document_srl = $document_srl; $output = executeQuery('comment.deleteComments', $args); + if(!$output->toBool()) return $output; + + // 댓글 목록 삭제 + $output = executeQuery('comment.deleteCommentsList', $args); + return $output; } diff --git a/modules/comment/comment.model.php b/modules/comment/comment.model.php index c831920e4..afa7040ba 100644 --- a/modules/comment/comment.model.php +++ b/modules/comment/comment.model.php @@ -158,13 +158,62 @@ /** * @brief document_srl에 해당하는 문서의 댓글 목록을 가져옴 **/ - function getCommentList($document_srl, $is_admin = false) { + function getCommentList($document_srl, $page = 1, $is_admin = false) { + // 해당 문서의 모듈에 해당하는 댓글 수를 구함 + $oDocumentModel = &getModel('document'); + $oDocument = $oDocumentModel->getDocument($document_srl); + + // 문서가 존재하지 않으면 return~ + if(!$oDocument->isExists()) return; + + // 댓글수가 없으면 return~ + if($oDocument->getCommentCount()<1) return; + + // 정해진 댓글수에 따른 댓글 목록 구함 + $module_srl = $oDocument->get('module_srl'); + $comment_config = $this->getCommentConfig($module_srl); + $comment_count = $comment_config->comment_count; + if(!$comment_count) $comment_count = 50; + + if(!$page) !$page = 1; + + // 정해진 수에 따라 목록을 구해옴 + $args->document_srl = $document_srl; + $args->list_count = $comment_count; + $args->page = $page; + $args->page_count = 10; + $output = executeQueryArray('comment.getCommentPageList', $args); + + // 쿼리 결과에서 오류가 생기면 그냥 return + if(!$output->toBool()) return; + + // 만약 구해온 결과값이 저장된 댓글수와 다르다면 기존의 데이터로 판단하고 댓글 목록 테이블에 데이터 입력 + if(!$output->data) { + $this->fixCommentList($oDocument->get('module_srl'), $document_srl); + $output = executeQueryArray('comment.getCommentPageList', $args); + if(!$output->toBool()) return; + } + + return $output; + } + + /** + * @brief document_srl에 해당하는 댓글 목록을 갱신 + * 정식버전 이전에 사용되던 데이터를 위한 처리 + **/ + function fixCommentList($module_srl, $document_srl) { + // 일괄 작업이라서 lock 파일을 생성하여 중복 작업이 되지 않도록 한다 + $lock_file = "./files/cache/tmp/lock.".$document_srl; + if(file_exists($lock_file) && filemtime($lock_file)+60*60*10document_srl = $document_srl; $args->list_order = 'list_order'; $output = executeQuery('comment.getCommentList', $args); if(!$output->toBool()) return $output; - $source_list= $output->data; + $source_list = $output->data; if(!is_array($source_list)) $source_list = array($source_list); // 댓글를 계층형 구조로 정렬 @@ -172,26 +221,18 @@ $root = NULL; $list = NULL; + $comment_list = array(); // 로그인 사용자의 경우 로그인 정보를 일단 구해 놓음 $logged_info = Context::get('logged_info'); + // loop를 돌면서 코멘트의 계층 구조 만듬 for($i=$comment_count-1;$i>=0;$i--) { $comment_srl = $source_list[$i]->comment_srl; $parent_srl = $source_list[$i]->parent_srl; - $member_srl = $source_list[$i]->member_srl; - - // OL/LI 태그를 위한 치환 처리 - //$source_list[$i]->content = preg_replace('!<(ol|ul|blockquote)>!is','<\\1 style="margin-left:40px;">',$source_list[$i]->content); - - // url에 대해서 정규표현식으로 치환 - $source_list[$i]->content = preg_replace('!([^>^"^\'^=])(http|https|ftp|mms):\/\/([^ ^<^"^\']*)!is','$1$2://$3',' '.$source_list[$i]->content); - if(!$comment_srl) continue; - //if($is_admin || $this->isGranted($comment_srl) || $member_srl == $logged_info->member_srl) $source_list[$i]->is_granted = true; - // 목록을 만듬 $list[$comment_srl] = $source_list[$i]; @@ -201,35 +242,48 @@ $root->child[] = &$list[$comment_srl]; } } - $this->_arrangeComment($comment_list, $root->child, 0); - return $comment_list; + $this->_arrangeComment($comment_list, $root->child, 0, null); + + // 구해진 값을 db에 입력함 + if(count($comment_list)) { + foreach($comment_list as $comment_srl => $item) { + $comment_args = null; + $comment_args->comment_srl = $comment_srl; + $comment_args->document_srl = $document_srl; + $comment_args->head = $item->head; + $comment_args->arrange = $item->arrange; + $comment_args->module_srl = $module_srl; + $comment_args->regdate = $item->regdate; + $comment_args->depth = $item->depth; + + executeQuery('comment.insertCommentList', $comment_args); + } + } + + // 성공시 lock파일 제거 + @unlink($lock_file); } /** * @brief 댓글을 계층형으로 재배치 **/ - function _arrangeComment(&$comment_list, $list, $depth, $set_grant = false) { + function _arrangeComment(&$comment_list, $list, $depth, $parent = null) { if(!count($list)) return; foreach($list as $key => $val) { - $oCommentItem = new commentItem(); + + if($parent) $val->head = $parent->head; + else $val->head = $val->comment_srl; + $val->arrange = count($comment_list)+1; if($val->child) { - $tmp = $val; - $tmp->depth = $depth; - $oCommentItem->setAttribute($tmp); - - $comment_list[$tmp->comment_srl] = $oCommentItem; - if($set_grant) $oCommentItem->setAccessible(); - - $this->_arrangeComment($comment_list,$val->child,$depth+1, $oCommentItem->isGranted()); + $val->depth = $depth; + $comment_list[$val->comment_srl] = $val; + $this->_arrangeComment($comment_list,$val->child,$depth+1, $val); + unset($val->child); } else { $val->depth = $depth; - $oCommentItem->setAttribute($val); - - if($set_grant) $oCommentItem->setAccessible(); - $comment_list[$val->comment_srl] = $oCommentItem; + $comment_list[$val->comment_srl] = $val; } - } } @@ -297,5 +351,25 @@ return $output; } + + /** + * @brief 모듈별 댓글 설정을 return + **/ + function getCommentConfig($module_srl) { + if(!$GLOBLAS['__comment_module_config__']) { + // 선택된 모듈의 trackback설정을 가져옴 + $oModuleModel = &getModel('module'); + $GLOBLAS['__comment_module_config__'] = $oModuleModel->getModuleConfig('comment'); + } + + $comment_config = $GLOBLAS['__comment_module_config__']->module_config[$module_srl]; + + if(!is_object($comment_config)) $comment_config = null; + + if(!isset($comment_config->comment_count)) $comment_count->comment_count = 50; + + return $comment_config; + } + } ?> diff --git a/modules/comment/comment.view.php b/modules/comment/comment.view.php new file mode 100644 index 000000000..a6c35f2fb --- /dev/null +++ b/modules/comment/comment.view.php @@ -0,0 +1,48 @@ +module_srl; + if(!$current_module_srl) return new Object(); + } + + // 댓글 설정을 구함 + $oCommentModel = &getModel('comment'); + $comment_config = $oCommentModel->getCommentConfig($current_module_srl); + Context::set('comment_config', $comment_config); + + // 그룹 목록을 구함 + $oMemberModel = &getModel('member'); + $group_list = $oMemberModel->getGroups(); + Context::set('group_list', $group_list); + + // 템플릿 파일 지정 + $oTemplate = &TemplateHandler::getInstance(); + $tpl = $oTemplate->compile($this->module_path.'tpl', 'comment_module_config'); + $obj .= $tpl; + + return new Object(); + } + } +?> diff --git a/modules/comment/conf/module.xml b/modules/comment/conf/module.xml index 03fa6b95c..ae5a4c69b 100644 --- a/modules/comment/conf/module.xml +++ b/modules/comment/conf/module.xml @@ -10,5 +10,6 @@ + diff --git a/modules/comment/lang/en.lang.php b/modules/comment/lang/en.lang.php index ed4d26b82..93353ca00 100644 --- a/modules/comment/lang/en.lang.php +++ b/modules/comment/lang/en.lang.php @@ -10,6 +10,9 @@ $lang->comment_list = 'Comments List'; $lang->cmd_delete_checked_comment = 'Delete selected item'; + $lang->comment_count = '댓글 수'; + $lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.'; + $lang->msg_cart_is_null = 'Please select an article to delete'; $lang->msg_checked_comment_is_deleted = '%d comment(s) is(are) successfully deleted.'; diff --git a/modules/comment/lang/es.lang.php b/modules/comment/lang/es.lang.php index 95b01c425..17b0bc84b 100644 --- a/modules/comment/lang/es.lang.php +++ b/modules/comment/lang/es.lang.php @@ -10,6 +10,9 @@ $lang->comment_list = 'Comentarios Lista'; $lang->cmd_delete_checked_comment = 'Eliminar lo seleccionado' ; + $lang->comment_count = '댓글 수'; + $lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.'; + $lang->msg_cart_is_null = 'Selecciona el commentario que desea eliminar'; $lang->msg_checked_comment_is_deleted = '%d comentario eliminado correctamente.'; diff --git a/modules/comment/lang/jp.lang.php b/modules/comment/lang/jp.lang.php index 4ba0c0471..acf314cc0 100644 --- a/modules/comment/lang/jp.lang.php +++ b/modules/comment/lang/jp.lang.php @@ -11,6 +11,9 @@ $lang->cmd_toggle_checked_comment = '選択項目の反転'; $lang->cmd_delete_checked_comment = '選択項目削除'; + $lang->comment_count = '댓글 수'; + $lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.'; + $lang->msg_cart_is_null = '削除するコメントを選択してください。'; $lang->msg_checked_comment_is_deleted = '%d個のコメントを削除しました。'; diff --git a/modules/comment/lang/ko.lang.php b/modules/comment/lang/ko.lang.php index 732411f48..c8692772a 100644 --- a/modules/comment/lang/ko.lang.php +++ b/modules/comment/lang/ko.lang.php @@ -11,6 +11,9 @@ $lang->cmd_toggle_checked_comment = '선택항목 반전'; $lang->cmd_delete_checked_comment = '선택항목 삭제'; + $lang->comment_count = '댓글 수'; + $lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.'; + $lang->msg_cart_is_null = '삭제할 글을 선택해주세요'; $lang->msg_checked_comment_is_deleted = '%d개의 댓글이 삭제되었습니다'; diff --git a/modules/comment/lang/ru.lang.php b/modules/comment/lang/ru.lang.php index c9ca0a266..01eeaaa09 100644 --- a/modules/comment/lang/ru.lang.php +++ b/modules/comment/lang/ru.lang.php @@ -10,6 +10,9 @@ $lang->comment_list = 'Список комментариев'; $lang->cmd_delete_checked_comment = 'Удалить выбранный объект'; + $lang->comment_count = '댓글 수'; + $lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.'; + $lang->msg_cart_is_null = 'Пожалуйста, выберите статью для удаления.'; $lang->msg_checked_comment_is_deleted = '%d комментарий(-ия) успешно удален(о).'; diff --git a/modules/comment/lang/zh-CN.lang.php b/modules/comment/lang/zh-CN.lang.php index 25499ac08..e5bba3c8c 100644 --- a/modules/comment/lang/zh-CN.lang.php +++ b/modules/comment/lang/zh-CN.lang.php @@ -11,6 +11,9 @@ $lang->cmd_toggle_checked_comment = '反选'; $lang->cmd_delete_checked_comment = '删除所选'; + $lang->comment_count = '댓글 수'; + $lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.'; + $lang->msg_cart_is_null = '请选择要删除的评论。'; $lang->msg_checked_comment_is_deleted = '已删除%d个评论。'; diff --git a/modules/comment/queries/deleteCommentList.xml b/modules/comment/queries/deleteCommentList.xml new file mode 100644 index 000000000..59f1e8497 --- /dev/null +++ b/modules/comment/queries/deleteCommentList.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/modules/comment/queries/deleteCommentsList.xml b/modules/comment/queries/deleteCommentsList.xml new file mode 100644 index 000000000..16a0a41ca --- /dev/null +++ b/modules/comment/queries/deleteCommentsList.xml @@ -0,0 +1,8 @@ + + +
+ + + + + diff --git a/modules/comment/queries/deleteModuleCommentsList.xml b/modules/comment/queries/deleteModuleCommentsList.xml new file mode 100644 index 000000000..dd4858c70 --- /dev/null +++ b/modules/comment/queries/deleteModuleCommentsList.xml @@ -0,0 +1,8 @@ + + +
+ + + + + diff --git a/modules/comment/queries/getCommentList.xml b/modules/comment/queries/getCommentList.xml index a7461f7f8..490d40f0a 100644 --- a/modules/comment/queries/getCommentList.xml +++ b/modules/comment/queries/getCommentList.xml @@ -3,7 +3,9 @@
- + + + diff --git a/modules/comment/queries/getCommentListItem.xml b/modules/comment/queries/getCommentListItem.xml new file mode 100644 index 000000000..e964057c2 --- /dev/null +++ b/modules/comment/queries/getCommentListItem.xml @@ -0,0 +1,11 @@ + + +
+ + + + + + + + diff --git a/modules/comment/queries/getCommentPageList.xml b/modules/comment/queries/getCommentPageList.xml new file mode 100644 index 000000000..4e7737fce --- /dev/null +++ b/modules/comment/queries/getCommentPageList.xml @@ -0,0 +1,21 @@ + + +
+
+ + + + + + + + + + + + + + + + + diff --git a/modules/comment/queries/insertCommentList.xml b/modules/comment/queries/insertCommentList.xml new file mode 100644 index 000000000..50269ed71 --- /dev/null +++ b/modules/comment/queries/insertCommentList.xml @@ -0,0 +1,14 @@ + + +
+ + + + + + + + + + + diff --git a/modules/comment/queries/updateCommentListArrange.xml b/modules/comment/queries/updateCommentListArrange.xml new file mode 100644 index 000000000..53d40f71a --- /dev/null +++ b/modules/comment/queries/updateCommentListArrange.xml @@ -0,0 +1,13 @@ + + +
+ + + + + + + + + + diff --git a/modules/comment/queries/updateCommentListModule.xml b/modules/comment/queries/updateCommentListModule.xml new file mode 100644 index 000000000..9cb2a16d4 --- /dev/null +++ b/modules/comment/queries/updateCommentListModule.xml @@ -0,0 +1,11 @@ + + +
+ + + + + + + + diff --git a/modules/comment/schemas/comments_list.xml b/modules/comment/schemas/comments_list.xml new file mode 100644 index 000000000..62fde55a8 --- /dev/null +++ b/modules/comment/schemas/comments_list.xml @@ -0,0 +1,9 @@ +
+ + + + + + + +
diff --git a/modules/comment/tpl/comment_module_config.html b/modules/comment/tpl/comment_module_config.html new file mode 100644 index 000000000..d30feaeb6 --- /dev/null +++ b/modules/comment/tpl/comment_module_config.html @@ -0,0 +1,27 @@ + + +
+ + + + + + + + + + + + + + + +
{$lang->comment}
{$lang->comment_count} + +
{$lang->about_comment_count}
+ +
+ +
+ +
diff --git a/modules/comment/tpl/filter/insert_comment_module_config.xml b/modules/comment/tpl/filter/insert_comment_module_config.xml new file mode 100644 index 000000000..0ba885b16 --- /dev/null +++ b/modules/comment/tpl/filter/insert_comment_module_config.xml @@ -0,0 +1,7 @@ + +
+ + + + + diff --git a/modules/document/document.admin.controller.php b/modules/document/document.admin.controller.php index 56c93d851..cc572ce90 100644 --- a/modules/document/document.admin.controller.php +++ b/modules/document/document.admin.controller.php @@ -207,6 +207,12 @@ return $output; } + $output = executeQuery('comment.updateCommentListModule', $args); + if(!$output->toBool()) { + $oDB->rollback(); + return $output; + } + // 엮인글의 이동 $output = executeQuery('trackback.updateTrackbackModule', $args); if(!$output->toBool()) { diff --git a/modules/document/document.item.php b/modules/document/document.item.php index ae8098e9a..0c6854ff3 100644 --- a/modules/document/document.item.php +++ b/modules/document/document.item.php @@ -375,9 +375,24 @@ if(!$this->allowComment() || !$this->getCommentCount()) return; if(!$this->isGranted() && $this->isSecret()) return; + $cpage = Context::get('cpage'); + if(!$cpage) $cpage = 1; + $oCommentModel = &getModel('comment'); - $output = $oCommentModel->getCommentList($this->document_srl, $is_admin); - return $output; + $output = $oCommentModel->getCommentList($this->document_srl, $cpage, $is_admin); + if(!$output->toBool() || !count($output->data)) return; + + $oCommentModel = &getModel('comment'); + foreach($output->data as $key => $val) { + $oCommentItem = new commentItem(); + $oCommentItem->setAttribute($val); + $comment_list[$val->comment_srl] = $oCommentItem; + } + + Context::set('comment_page_navigation', $output->page_navigation); + Context::set('cpage', $output->page_navigation->cur_page); + + return $comment_list; } function getTrackbackCount() {