https://github.com/huhani/xe-gamezot/blob/master/gamezot.controller.php#L56-L150

 

위에 보면 

function triggerBeforeDeleteDocument(&$obj) {

}

 

function _triggerBeforeDeleteDocument(&$obj) {

}

 

이렇게 _가 있는 것과 없는것을 구분해서 작성하는 이유는 뭔가요??

 

그리고 이 글의 실제 질문인데요.

 

function triggerBeforeDeleteDocument(&$obj){
$oGamezotModel = getModel('gamezot');
$isBoardAdmin = $oGamezotModel->checkIsBoardAdmin();
if($isBoardAdmin){
return new Object();
}

$document_srl = $obj->document_srl ? $obj->document_srl : Context::get('document_srl');
$oDocumentModel = getModel('document');
$oDocumentController = getController('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
if (!$oDocument->isExists()){
return new Object();
}

$document_content = $oDocument->get('content');
if($this->_isDeletedContentByDocument($document_content)){
return new Object(-1, 'msg_document_deleted');
}
return new Object();
}

function _triggerBeforeDeleteDocument(&$obj){
$oGamezotModel = getModel('gamezot');
$isBoardAdmin = $oGamezotModel->checkIsBoardAdmin();
if($isBoardAdmin){
return new Object();
}

$document_srl = Context::get('document_srl');
$oDocumentModel = getModel('document');
$oDocumentController = getController('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
if (!$oDocument->isExists()){
return new Object();
}

if(!$oDocument->isGranted()){
return new Object(-1, 'msg_not_permitted');
}

$document_content = $oDocument->get('content');
if($this->_isDeletedContentByDocument($document_content)){
return new Object(-1, 'msg_document_deleted');
}

global $lang;
$args = (object)$oDocument->variables;
$args->title = $lang->msg_document_deleted;
$args->title_bold = 'N';
$args->title_color = '888888';
$args->content = sprintf('<!--DeletedDocument--><p>%s</p>', $lang->msg_document_deleted);
$args->comment_status = $args->commentStatus = 'DENY';
$output = executeQuery('document.updateDocument', $args);
if(!$output->toBool()){
return $output;
}

$oFileController = getController('file');
$output = $oFileController->deleteFiles($document_srl);
$oCacheHandler = CacheHandler::getInstance('object');
if($oCacheHandler->isSupport()){
$cache_key = 'document_item:'. getNumberingPath($document_srl) . $document_srl;
$oCacheHandler->delete($cache_key);
}

$member_srl = $oDocument->get('member_srl');
if($member_srl){
$module_srl = $oDocument->get('module_srl');
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('point');
$module_config = $oModuleModel->getModulePartConfig('point', $module_srl);
$point = $module_config['insert_document'] ? $module_config['insert_document'] : 0;
if($point){
$oPointController = getController('point');
$oPointController->setPoint($member_srl, $point, 'minus');
}
}

$obj->setRedirectUrl(getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', '', 'page', Context::get('page'), 'document_srl', ''));
$obj->add('mid', Context::get('mid'));
$obj->add('page', Context::get('page'));
if(Context::get('xeVirtualRequestMethod') !== 'xml'){
$obj->setMessage('success_deleted');
}
$obj->act = '';
return new Object();
}

 

 

위 부분이 게시글 삭제시 삭제된게시글로 남기게 하는 부분일 것입니다.

 

위 부분에서 게글이 댓글을 가지고 있지 않다면 저기서 리턴시키는 부분을 추가해주고 싶습니다.

 

글 작성한 직후 아직 다른 회원의 참여가 없는 상태에서는 삭제를 제공하고 싶어서요.

  • profile
    자답
    function _triggerBeforeDeleteDocument(&$obj) 함수 에


    if (!$oDocument->getCommentCount()){
    return new Object();
    }

    로 리턴 시키니 잘 되네요.
    댓글이 없는 경우는 그냥 삭제 / 댓글이 있는 경우는 삭제된 게시글로 존치되어 댓글 보호

    위에 함수는 이미 삭제된 게시글을 삭제할 경우 메시지를 출력하기 위한 함수 같습니다.
  • ?

    언더바 안붙은건 게시글 삭제 화면?(dispBoardDelete) 출력 전에
    언더바 붙은건 게시글 삭제(procBoardDeleteDocument)하기 전에 동작하는 트리거가 아닌가 싶네요

    게시글 댓글 개수는 $oDocument->getCommentCount() 이걸로 구하고
    조건문 처리 해서 return new Object(); 으로 리턴시키면 될 것 같기도 합니다.
    (PHP7.2 버전이상이면 BaseObject 리턴)

     

    똥남기는 모듈 구경하느라 댓글을 늦게 달았더니 이미 해결 하셨네요 ㅋ

    그냥 남겨둡니다.