Extra Form
PHP PHP 8.1
CMS XpressEngine1

안녕하세요.

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;
}

 

부분에서 if(!$oDocument->isExists() || abs($oDocument->get('member_srl'))==abs($member_srl))를 추가하면 될것같았는데 안되서 글을 남겨봅니다.

감사합니다.

  • profile

    $oComment에 댓글 정보가 담기네요

    그럼 $oComment->get('member_srl') 정보를 가져와서 실제로 로그인되어있는 정보랑 비교해서 같으면 ㄱeturn 하시면 됩니다.

    if($oComment->get('member_srl') == Context::get('logged_info')->member_srl)
    {
    return;
    }

  • profile profile
    • form
    • 질문기여자
    답변감사합니다.
    알려주신대로 적용해봤는데 안됩니다.
    게시물 작성자와 댓글 작성자가 같을경우 포인트가 회수되지 않도록 하기위해서

    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()) 조건문을 써도 안됩니다.
  • profile profile
    람보님 말씀은 본문의 소스 10행 다음 줄 즈음에 댓글로 제안하신 소스를 넣어보라는 말씀이신 것 같은데요.
  • profile profile
    • form
    • 질문기여자
    if($oComment->get('member_srl') == Context::get('logged_info')->member_srl)
    {
    return;
    }

    이 소스는 댓글 회원과 로그인한 회원이 같을 경우 리턴되는것 아닌가요?
    제가 하고자하는건 게시물작성자와 댓글 작성자가 다르면 진행하고 게시물 작성자와 댓글 작성자가 같을 경우 리턴되게 하고싶습니다.
  • profile profile

    그러면 문서 객체를 불러와야겠네요.


    $oDocumentModel = getModel('document');
    $oDocument = $oDocumentModel->getDocument($oComment->get('document_srl'));
    if($oComment->get('member_srl') == $oDocument->get('member_srl'))
    {
    return;
    }

    이런 식이 되지 않을까요?

  • profile profile
    • form
    • 질문기여자
    답변 감사합니다.
    적용해보았으나 안됩니다.
    다른회원의 글에 댓글을 작성하면 포인트가 증가하고 삭제하면 차감되는데
    본인의 글에 댓글을 작성하면 포인트가 증가하지 않지만 삭제하면 차감하네요.
  • profile profile

    근데 위의 저 _triggerBeforeDeleteComment 함수가 포인트 차감이랑 관계가 있는 거예요?
    가만 보니 포인트 차감을 실행시키는 함수나 쿼리는 잘 안 보여서요.

     

    덧. 그러네요.

    포인트 차감이 아니라 삭제 명령을 실행하면 삭제 대신에 지워진 댓글이라고 내용을 바꿔치기해주는 함수네요.

    그래서 똥남기기군요 ㅎㅎ

  • profile profile
    • form
    • 질문기여자
    네 맞습니다^^
    윤삼님이 답변주신 방법으로해도 안되지만 연구해보겠습니다.
    감사합니다.
  • profile profile
    네, 암튼 포인트 차감을 실행하는 함수는 다른 곳에 있을 테니 찾으셔서 잘 리턴 시키시면 될 것 같습니다 :)