CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 7.0 |
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();
}
$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();
}
위 부분이 게시글 삭제시 삭제된게시글로 남기게 하는 부분일 것입니다.
위 부분에서 게글이 댓글을 가지고 있지 않다면 저기서 리턴시키는 부분을 추가해주고 싶습니다.
글 작성한 직후 아직 다른 회원의 참여가 없는 상태에서는 삭제를 제공하고 싶어서요.
댓글 2
function _triggerBeforeDeleteDocument(&$obj) 함수 에
if (!$oDocument->getCommentCount()){
return new Object();
}
로 리턴 시키니 잘 되네요.
댓글이 없는 경우는 그냥 삭제 / 댓글이 있는 경우는 삭제된 게시글로 존치되어 댓글 보호
위에 함수는 이미 삭제된 게시글을 삭제할 경우 메시지를 출력하기 위한 함수 같습니다.
언더바 안붙은건 게시글 삭제 화면?(dispBoardDelete) 출력 전에
언더바 붙은건 게시글 삭제(procBoardDeleteDocument)하기 전에 동작하는 트리거가 아닌가 싶네요
게시글 댓글 개수는 $oDocument->getCommentCount() 이걸로 구하고
조건문 처리 해서 return new Object(); 으로 리턴시키면 될 것 같기도 합니다.
(PHP7.2 버전이상이면 BaseObject 리턴)
똥남기는 모듈 구경하느라 댓글을 늦게 달았더니 이미 해결 하셨네요 ㅋ
그냥 남겨둡니다.