똥남기기 모듈시 포인트 문의드립니다.
CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 8.1 |
안녕하세요.
XE를 이용하여 사이트를 운영하고 있습니다.
똥남기기 모듈을 사용하면서 문의가 있어서 글을 남깁니다.
타인의 게시물에 댓글을 작성하면 포인트를 지급받고, 자신의 게시물에 댓글을 작성하면 포인트를 지급받지 않는데 이때 댓글을 삭제하면 이 경우 모두 포인트를 회수합니다.
자신의 게시물의 댓글 삭제시에는 지급받은 포인트가 없으니 회수를 하지 않아야할텐데 어떻게 해야할까요?
gamezot.controller.php 파일의
function _triggerBeforeDeleteComment(&$obj){
$oGamezotModel = getModel('gamezot');
$logged_info = Context::get('logged_info');
if($isBoardAdmin || $logged_info->is_admin == 'Y'){
return new BaseObject();
}
$comment_srl = Context::get('comment_srl');
$oCommentModel = getModel('comment');
$oComment = $oCommentModel->getComment($comment_srl);
if (!$oComment->isExists()){
return new Object();
}
if(!$oComment->isGranted()){
return new Object(-1, 'msg_not_permitted');
}
$comment_content = $oComment->get('content');
if($this->_isDeletedContentByComment($comment_content)){
return new Object(-1, 'msg_already_comment_deleted');
}
global $lang;
$args = (object)$oComment->variables;
$args->content = sprintf('<!--DeletedComment--><span style="color:#888888">%s (삭제일시:%s)</span>', $lang->msg_comment_deleted, date("Y.m.d H:i:s"));
$args->uploaded_count = 0;
$output = executeQuery('comment.updateComment', $args);
if (!$output->toBool()) {
return $output;
}
$oGamezotModel = getModel('gamezot');
$logged_info = Context::get('logged_info');
if($isBoardAdmin || $logged_info->is_admin == 'Y'){
return new BaseObject();
}
$comment_srl = Context::get('comment_srl');
$oCommentModel = getModel('comment');
$oComment = $oCommentModel->getComment($comment_srl);
if (!$oComment->isExists()){
return new Object();
}
if(!$oComment->isGranted()){
return new Object(-1, 'msg_not_permitted');
}
$comment_content = $oComment->get('content');
if($this->_isDeletedContentByComment($comment_content)){
return new Object(-1, 'msg_already_comment_deleted');
}
global $lang;
$args = (object)$oComment->variables;
$args->content = sprintf('<!--DeletedComment--><span style="color:#888888">%s (삭제일시:%s)</span>', $lang->msg_comment_deleted, date("Y.m.d H:i:s"));
$args->uploaded_count = 0;
$output = executeQuery('comment.updateComment', $args);
if (!$output->toBool()) {
return $output;
}
부분에서 if(!$oDocument->isExists() || abs($oDocument->get('member_srl'))==abs($member_srl))를 추가하면 될것같았는데 안되서 글을 남겨봅니다.
감사합니다.
댓글 9
$oComment에 댓글 정보가 담기네요
그럼 $oComment->get('member_srl') 정보를 가져와서 실제로 로그인되어있는 정보랑 비교해서 같으면 ㄱeturn 하시면 됩니다.
if($oComment->get('member_srl') == Context::get('logged_info')->member_srl)
{
return;
}
알려주신대로 적용해봤는데 안됩니다.
게시물 작성자와 댓글 작성자가 같을경우 포인트가 회수되지 않도록 하기위해서
if($member_srl){
$module_srl = $oComment->get('module_srl');
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('point');
$module_config = $oModuleModel->getModulePartConfig('point', $module_srl);
$point = $module_config['insert_comment'] ? $module_config['insert_comment'] : 0;
if($point){
$oPointController = getController('point');
$oPointController->setPoint($member_srl, $point, 'minus');
}
}
이 함수에 if(!$oComment->isGranted()) 조건문을 써도 안됩니다.
{
return;
}
이 소스는 댓글 회원과 로그인한 회원이 같을 경우 리턴되는것 아닌가요?
제가 하고자하는건 게시물작성자와 댓글 작성자가 다르면 진행하고 게시물 작성자와 댓글 작성자가 같을 경우 리턴되게 하고싶습니다.
그러면 문서 객체를 불러와야겠네요.
$oDocumentModel = getModel('document');
$oDocument = $oDocumentModel->getDocument($oComment->get('document_srl'));
if($oComment->get('member_srl') == $oDocument->get('member_srl'))
{
return;
}
이런 식이 되지 않을까요?
적용해보았으나 안됩니다.
다른회원의 글에 댓글을 작성하면 포인트가 증가하고 삭제하면 차감되는데
본인의 글에 댓글을 작성하면 포인트가 증가하지 않지만 삭제하면 차감하네요.
근데 위의 저 _triggerBeforeDeleteComment 함수가 포인트 차감이랑 관계가 있는 거예요?
가만 보니 포인트 차감을 실행시키는 함수나 쿼리는 잘 안 보여서요.
덧. 그러네요.
포인트 차감이 아니라 삭제 명령을 실행하면 삭제 대신에 지워진 댓글이라고 내용을 바꿔치기해주는 함수네요.
그래서 똥남기기군요 ㅎㅎ
윤삼님이 답변주신 방법으로해도 안되지만 연구해보겠습니다.
감사합니다.