XE Trigger 완전 정복하기 3-1편
들어가기전에
이번 3편은 예제 위주의 소개가 되기 때문에 특별한 설명보다는 다양한 예제를 중점적으로 소개하겠습니다. 그리고 트리거가 없는 대상의 경우는 조금 부연설명과 함께 소개하도록 하겠습니다. 본 예제들은 triggersample.zip 이라는 모듈명으로 만들어 놓았으니 테스트해보시고 필요한 곳에 응용하시기 바랍니다.
목차
XE에 심어져 있는 트리거 사용하기
- 글 등록 시 몇가지 정보를 저장하기
- 글 수정 시 비교 후 정보를 저장하기
- 글 삭제 시 저장한 정보를 삭제하기
- 접속자를 확인 후 특정 IP차단하기
- 본문출력 전 메시지 출력하기
- 관리자페이지 설명메뉴 트리거 사용하기
- 내 모듈에서 트리거 만들기
XE에 심어져 있는 트리거 사용하기
글 등록 시 몇가지 정보를 저장하기
function moduleInstall()
{
$oModuleController = &getController('module');
$oModuleController->insertTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInsertTriggersample', 'after');
return new Object();
}
function checkUpdate()
{
$oModuleModel = &getModel('module');
if(!$oModuleModel->getTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInsertTriggersample', 'after'))
{
return true;
}
return false;
}
function moduleUpdate()
{
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
if(!$oModuleModel->getTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInserttriggersample', 'after'))
{
$oModuleController->insertTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInserttriggersample', 'after');
}
return new Object(0,'success_updated');
}
{
$oModuleController = &getController('module');
$oModuleController->insertTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInsertTriggersample', 'after');
return new Object();
}
function checkUpdate()
{
$oModuleModel = &getModel('module');
if(!$oModuleModel->getTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInsertTriggersample', 'after'))
{
return true;
}
return false;
}
function moduleUpdate()
{
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
if(!$oModuleModel->getTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInserttriggersample', 'after'))
{
$oModuleController->insertTrigger('document.insertDocument', 'triggersample', 'controller', 'triggerInserttriggersample', 'after');
}
return new Object(0,'success_updated');
}
/**
* @brief 등록 정보 추가
**/
function triggerInsertTriggersample(&$obj)
{
$args->module_srl = $obj->module_srl;
$args->document_srl = $obj->document_srl;
$args->type = 'insert';
$this->insertTriggersample($args);
}
/**
* @brief 정보 추가
**/
function insertTriggersample($args = NULL)
{
if($args == NULL)
{
return new Object(-1, "msg_error_occured");
}
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
$output = executeQuery('triggersample.insertTriggersample', $args);
if(!$output->toBool())
{
$oDB->rollback();
return new Object(-1, "msg_error_occured");
}
// commit
$oDB->commit();
return $output;
}
* @brief 등록 정보 추가
**/
function triggerInsertTriggersample(&$obj)
{
$args->module_srl = $obj->module_srl;
$args->document_srl = $obj->document_srl;
$args->type = 'insert';
$this->insertTriggersample($args);
}
/**
* @brief 정보 추가
**/
function insertTriggersample($args = NULL)
{
if($args == NULL)
{
return new Object(-1, "msg_error_occured");
}
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
$output = executeQuery('triggersample.insertTriggersample', $args);
if(!$output->toBool())
{
$oDB->rollback();
return new Object(-1, "msg_error_occured");
}
// commit
$oDB->commit();
return $output;
}
글 수정 시 비교 후 정보를 저장하기
function moduleInstall()
{
$oModuleController = &getController('module');
$oModuleController->insertTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before');
return new Object();
}
function checkUpdate()
{
$oModuleModel = &getModel('module');
if(!$oModuleModel->getTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before'))
{
return true;
}
return false;
}
function moduleUpdate()
{
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
if(!$oModuleModel->getTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before'))
{
$oModuleController->insertTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before');
}
return new Object(0,'success_updated');
}
{
$oModuleController = &getController('module');
$oModuleController->insertTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before');
return new Object();
}
function checkUpdate()
{
$oModuleModel = &getModel('module');
if(!$oModuleModel->getTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before'))
{
return true;
}
return false;
}
function moduleUpdate()
{
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
if(!$oModuleModel->getTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before'))
{
$oModuleController->insertTrigger('document.updateDocument', 'triggersample', 'controller', 'triggerUpdateTriggersample', 'before');
}
return new Object(0,'success_updated');
}
/**
* @brief 수정 정보 추가
**/
function triggerUpdateTriggersample(&$obj)
{
$oDocumentModel = &getModel('document');
// 제목이 없는 글은 본문의 내용으로 대체한다.
if(isset($obj->title))
{
if($obj->title == '') $document_obj->title = cut_str(strip_tags($obj->content), 20, '...');
if($obj->title == '') $document_obj->title = 'Untitled';
}
// 특정 문구를 제거
$document_obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content);
// 관리자 그룹이 아닐경우 본문에 HackTag를 제거
if(Context::get('is_logged'))
{
$logged_info = Context::get('logged_info');
if($logged_info->is_admin != 'Y')
{
$document_obj->content = removeHackTag($document_obj->content);
}
}
// 현재 글 수정 시 입력받은 값과 비교할 기존의 글 정보를 가져옴
$oDocument = $oDocumentModel->getDocument($obj->document_srl, FALSE, FALSE);
$oldDocument = $oDocument->variables;
if($oldDocument['title'] != $obj->title)
{
$args->type = 'update';
}
elseif($oldDocument['content'] != $obj->content)
{
$args->type = 'update';
}
$args->module_srl = $obj->module_srl;
$args->document_srl = $obj->document_srl;
if($args->type == 'update')
{
$this->insertTriggersample($args);
}
}
/**
* @brief 정보 추가
**/
function insertTriggersample($args = NULL)
{
if($args == NULL)
{
return new Object(-1, "msg_error_occured");
}
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
$output = executeQuery('triggersample.insertTriggersample', $args);
if(!$output->toBool())
{
$oDB->rollback();
return new Object(-1, "msg_error_occured");
}
// commit
$oDB->commit();
return $output;
}
* @brief 수정 정보 추가
**/
function triggerUpdateTriggersample(&$obj)
{
$oDocumentModel = &getModel('document');
// 제목이 없는 글은 본문의 내용으로 대체한다.
if(isset($obj->title))
{
if($obj->title == '') $document_obj->title = cut_str(strip_tags($obj->content), 20, '...');
if($obj->title == '') $document_obj->title = 'Untitled';
}
// 특정 문구를 제거
$document_obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content);
// 관리자 그룹이 아닐경우 본문에 HackTag를 제거
if(Context::get('is_logged'))
{
$logged_info = Context::get('logged_info');
if($logged_info->is_admin != 'Y')
{
$document_obj->content = removeHackTag($document_obj->content);
}
}
// 현재 글 수정 시 입력받은 값과 비교할 기존의 글 정보를 가져옴
$oDocument = $oDocumentModel->getDocument($obj->document_srl, FALSE, FALSE);
$oldDocument = $oDocument->variables;
if($oldDocument['title'] != $obj->title)
{
$args->type = 'update';
}
elseif($oldDocument['content'] != $obj->content)
{
$args->type = 'update';
}
$args->module_srl = $obj->module_srl;
$args->document_srl = $obj->document_srl;
if($args->type == 'update')
{
$this->insertTriggersample($args);
}
}
/**
* @brief 정보 추가
**/
function insertTriggersample($args = NULL)
{
if($args == NULL)
{
return new Object(-1, "msg_error_occured");
}
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
$output = executeQuery('triggersample.insertTriggersample', $args);
if(!$output->toBool())
{
$oDB->rollback();
return new Object(-1, "msg_error_occured");
}
// commit
$oDB->commit();
return $output;
}
댓글 1