From 196367218edea5a16c08540a7c6430250ee17893 Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 10 Jun 2008 05:03:52 +0000 Subject: [PATCH] =?UTF-8?q?=EA=B8=80=20=EC=82=AD=EC=A0=9C=20=EC=9D=B4?= =?UTF-8?q?=EC=A0=84=EC=97=90=20trigger=EB=A5=BC=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EC=96=B4=20=ED=95=B4=EB=8B=B9=20=EA=B8=80=EC=97=90=20=EB=8B=AC?= =?UTF-8?q?=EB=A6=B0=20=EB=8C=93=EA=B8=80=EC=9D=98=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EB=B3=84=20=EA=B0=9C=EC=88=98=EB=A5=BC=20=ED=8C=8C?= =?UTF-8?q?=EC=95=85=ED=95=98=EC=97=AC=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20?= =?UTF-8?q?=EA=B0=90=EC=86=8C=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95.=20=EC=9E=90=EC=8B=A0=EC=9D=98?= =?UTF-8?q?=20=EA=B8=80=EC=97=90=20=EB=8C=93=EA=B8=80=EC=9D=84=20=EB=8B=AC?= =?UTF-8?q?=20=EA=B2=BD=EC=9A=B0=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=A6=9D?= =?UTF-8?q?=EA=B0=80=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= 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@4266 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/point/point.class.php | 4 ++ modules/point/point.controller.php | 67 +++++++++++++++++++++-- modules/point/queries/getCommentUsers.xml | 16 ++++++ 3 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 modules/point/queries/getCommentUsers.xml diff --git a/modules/point/point.class.php b/modules/point/point.class.php index 02a6c36e4..26252dd33 100644 --- a/modules/point/point.class.php +++ b/modules/point/point.class.php @@ -89,6 +89,7 @@ // 가입/글작성/댓글작성/파일업로드/다운로드에 대한 트리거 추가 $oModuleController->insertTrigger('member.insertMember', 'point', 'controller', 'triggerInsertMember', 'after'); $oModuleController->insertTrigger('document.insertDocument', 'point', 'controller', 'triggerInsertDocument', 'after'); + $oModuleController->insertTrigger('document.deleteDocument', 'point', 'controller', 'triggerBeforeDeleteDocument', 'before'); $oModuleController->insertTrigger('document.deleteDocument', 'point', 'controller', 'triggerDeleteDocument', 'after'); $oModuleController->insertTrigger('comment.insertComment', 'point', 'controller', 'triggerInsertComment', 'after'); $oModuleController->insertTrigger('comment.deleteComment', 'point', 'controller', 'triggerDeleteComment', 'after'); @@ -117,6 +118,7 @@ // 가입/글작성/댓글작성/파일업로드/다운로드에 대한 트리거 추가 if(!$oModuleModel->getTrigger('member.insertMember', 'point', 'controller', 'triggerInsertMember', 'after')) return true; if(!$oModuleModel->getTrigger('document.insertDocument', 'point', 'controller', 'triggerInsertDocument', 'after')) return true; + if(!$oModuleModel->getTrigger('document.deleteDocument', 'point', 'controller', 'triggerBeforeDeleteDocument', 'before')) return true; if(!$oModuleModel->getTrigger('document.deleteDocument', 'point', 'controller', 'triggerDeleteDocument', 'after')) return true; if(!$oModuleModel->getTrigger('comment.insertComment', 'point', 'controller', 'triggerInsertComment', 'after')) return true; if(!$oModuleModel->getTrigger('comment.deleteComment', 'point', 'controller', 'triggerDeleteComment', 'after')) return true; @@ -149,6 +151,8 @@ $oModuleController->insertTrigger('member.insertMember', 'point', 'controller', 'triggerInsertMember', 'after'); if(!$oModuleModel->getTrigger('document.insertDocument', 'point', 'controller', 'triggerInsertDocument', 'after')) $oModuleController->insertTrigger('document.insertDocument', 'point', 'controller', 'triggerInsertDocument', 'after'); + if(!$oModuleModel->getTrigger('document.deleteDocument', 'point', 'controller', 'triggerBeforeDeleteDocument', 'before')) + $oModuleController->insertTrigger('document.deleteDocument', 'point', 'controller', 'triggerBeforeDeleteDocument', 'before'); if(!$oModuleModel->getTrigger('document.deleteDocument', 'point', 'controller', 'triggerDeleteDocument', 'after')) $oModuleController->insertTrigger('document.deleteDocument', 'point', 'controller', 'triggerDeleteDocument', 'after'); if(!$oModuleModel->getTrigger('comment.insertComment', 'point', 'controller', 'triggerInsertComment', 'after')) diff --git a/modules/point/point.controller.php b/modules/point/point.controller.php index 1f39bfc74..7ba55e0b3 100644 --- a/modules/point/point.controller.php +++ b/modules/point/point.controller.php @@ -101,26 +101,79 @@ return new Object(); } + /** + * @brief 게시글 삭제 이전에 게시글의 댓글에 대한 포인트 감소 처리를 하는 trigger + **/ + function triggerBeforeDeleteDocument(&$obj) { + $document_srl = $obj->document_srl; + $member_srl = $obj->member_srl; + + // point 모듈 정보 가져옴 + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('point'); + + // 지울 대상 글의 댓글에 대한 처리 + $comment_point = $config->module_point[$module_srl]['insert_comment']; + if(!isset($comment_point)) $comment_point = $config->insert_comment; + + // 댓글 포인트가 있으면 처리 + if(!$comment_point) return new Object(); + + // 해당 글에 포함된 모든 댓글을 추출 + $cp_args->document_srl = $document_srl; + $output = executeQueryArray('point.getCommentUsers', $cp_args); + + // 대상이 없으면 return + if(!$output->data) return new Object(); + + // 대상 회원 번호를 정리 + $member_srls = array(); + $cnt = count($output->data); + for($i=0;$i<$cnt;$i++) { + if($output->data[$i]->member_srl<1) continue; + $member_srls[$output->data[$i]->member_srl] = $output->data[$i]->count; + } + + // 원글 작성 회원의 번호는 제거 + if($member_srl) unset($member_srls[$member_srl]); + if(!count($member_srls)) return new Object(); + + // 각 회원들을 모두 돌면서 포인트 감소 + $oPointModel = &getModel('point'); + + // 포인트를 구해옴 + $point = $config->module_point[$module_srl]['download_file']; + foreach($member_srls as $member_srl => $cnt) { + $cur_point = $oPointModel->getPoint($member_srl, true); + $cur_point -= $cnt * $comment_point; + $this->setPoint($member_srl,$cur_point); + } + + return new Object(); + } + /** * @brief 게시글 삭제 포인트 적용 trigger **/ function triggerDeleteDocument(&$obj) { $module_srl = $obj->module_srl; $member_srl = $obj->member_srl; + + // 지울 대상 글에 대한 처리 if(!$module_srl || !$member_srl) return new Object(); // 로그인 상태일때만 실행 $logged_info = Context::get('logged_info'); if(!$logged_info->member_srl) return new Object(); - // point 모듈 정보 가져옴 - $oModuleModel = &getModel('module'); - $config = $oModuleModel->getModuleConfig('point'); - // 대상 회원의 포인트를 구함 $oPointModel = &getModel('point'); $cur_point = $oPointModel->getPoint($member_srl, true); + // point 모듈 정보 가져옴 + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('point'); + $point = $config->module_point[$module_srl]['insert_document']; if(!isset($point)) $point = $config->insert_document; $cur_point -= $point; @@ -144,6 +197,12 @@ $member_srl = $obj->member_srl; if(!$module_srl || !$member_srl) return new Object(); + // 원글이 본인의 글이라면 포인트를 올리지 않음 + $document_srl = $obj->document_srl; + $oDocumentModel = &getModel('document'); + $oDocument = $oDocumentModel->getDocument($document_srl); + if(!$oDocument->isExists() || $oDocument->get('member_srl')==$member_srl) return new Object(); + // point 모듈 정보 가져옴 $oModuleModel = &getModel('module'); $config = $oModuleModel->getModuleConfig('point'); diff --git a/modules/point/queries/getCommentUsers.xml b/modules/point/queries/getCommentUsers.xml new file mode 100644 index 000000000..5ff50aecc --- /dev/null +++ b/modules/point/queries/getCommentUsers.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + +