글 삭제 시 저장한 정보를 삭제하기

function moduleInstall()
{
    $oModuleController = &getController('module');
    $oModuleController->insertTrigger('document.deleteDocument', 'triggersample', 'controller', 'triggerDeleteTriggersample', 'after');

    return new Object();
}

function checkUpdate()
{
    $oModuleModel = &getModel('module');
    if(!$oModuleModel->getTrigger('document.deleteDocument', 'triggersample', 'controller', 'triggerDeleteTriggersample', 'after'))
    {
        return true;
    }

    return false;
}

function moduleUpdate()
{
    $oModuleModel = &getModel('module');
    $oModuleController = &getController('module');
    if(!$oModuleModel->getTrigger('document.deleteDocument', 'triggersample', 'controller', 'triggerDeleteTriggersample', 'after'))
    {
        $oModuleController->insertTrigger('document.deleteDocument', 'triggersample', 'controller', 'triggerDeleteTriggersample', 'after');
    }


    return new Object(0,'success_updated');
}
/**
 * @brief 정보 삭제
 **/
function triggerDeleteTriggersample(&$obj)
{
    $args->module_srl = $obj->module_srl;
    $args->document_srl = $obj->document_srl;

    $this->deleteTriggersample($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;
}

 

접속자를 확인 후 특정 IP차단하기

function moduleInstall()
{
    $oModuleController = &getController('module');
    $oModuleController->insertTrigger('moduleObject.proc', 'triggersample', 'controller', 'triggerProcTriggersample', 'before');

    return new Object();
}

function checkUpdate()
{
    $oModuleModel = &getModel('module');
    if(!$oModuleModel->getTrigger('moduleObject.proc', 'triggersample', 'controller', 'triggerProcTriggersample', 'before'))
    {
        return true;
    }

    return false;
}

function moduleUpdate()
{
    $oModuleModel = &getModel('module');
    $oModuleController = &getController('module');
    if(!$oModuleModel->getTrigger('moduleObject.proc', 'triggersample', 'controller', 'triggerProcTriggersample', 'before'))
    {
        $oModuleController->insertTrigger('moduleObject.proc', 'triggersample', 'controller', 'triggerProcTriggersample', 'before');
    }


    return new Object(0,'success_updated');
}
/**
 * @brief IP차단하기
 **/
function triggerProcTriggersample()
{
    // 로그인 정보 가져오기
    $logged_info = Context::get('logged_info');
    if($logged_info->is_admin == 'Y')
    {
        return;
    }

    if($_SERVER['REMOTE_ADDR'] == '127.0.0.1')
    {
        Context::setResponseMethod('XMLRPC');
        $header_message = sprintf("%s %s", 403, 'Forbidden');
        header("HTTP/1.0 ".$header_message);
        header("Status: ".$header_message);
        header("Content-Type: text/html; charset=UTF-8");
        $html = sprintf(
            '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html lang="en" xml:lang="en"><head><title>'.
            '%s</title></head><body><h1>%s</h1>IP block..</body></html>',
            $header_message, 'Forbidden'
        );

        die($html);
        return new Object();
    }
}

 

 

본문출력 전 메시지 출력하기

function moduleInstall()
{
    $oModuleController = &getController('module');
    $oModuleController->insertTrigger('display', 'triggersample', 'controller', 'triggerDisplayTriggersample', 'before');

    return new Object();
}

function checkUpdate()
{
    $oModuleModel = &getModel('module');
    if(!$oModuleModel->getTrigger('display', 'triggersample', 'controller', 'triggerDisplayTriggersample', 'before'))
    {
        return true;
    }

    return false;
}

function moduleUpdate()
{
    $oModuleModel = &getModel('module');
    $oModuleController = &getController('module');
    if(!$oModuleModel->getTrigger('display', 'triggersample', 'controller', 'triggerDisplayTriggersample', 'before'))
    {
        $oModuleController->insertTrigger('display', 'triggersample', 'controller', 'triggerDisplayTriggersample', 'before');
    }


    return new Object(0,'success_updated');
}
/**
 * @brief 본문출력 전 메시지 출력하기
 **/
function triggerDisplayTriggersample(&$output)
{
    if((Context::get('module') != 'admin') && !Context::get('act'))
    {
        $message = "<font style='font-size:30px;font-weight:bold;'>Triggersample 예제입니다.</font>
";
        $output = "{$message}{$output}";
    }
}

 

 

관리자페이지 설정메뉴 트리거 사용하기

 

function moduleInstall()
{
    $oModuleController = &getController('module');
    $oModuleController->insertTrigger('module.dispAdditionSetup', 'triggersample', 'controller', 'triggerDispTriggersampleAdditionSetup', 'after');

    return new Object();
}

function checkUpdate()
{
    $oModuleModel = &getModel('module');
    if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'triggersample', 'controller', 'triggerDispTriggersampleAdditionSetup', 'after'))
    {
        return true;
    }

    return false;
}

function moduleUpdate()
{
    $oModuleModel = &getModel('module');
    $oModuleController = &getController('module');
    if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'triggersample', 'controller', 'triggerDispTriggersampleAdditionSetup', 'after'))
    {
        $oModuleController->insertTrigger('module.dispAdditionSetup', 'triggersample', 'controller', 'triggerDispTriggersampleAdditionSetup', 'after');
    }


    return new Object(0,'success_updated');
}
/**
 * @brief 관리자페이지 게시판 추가설정에 표시하기
 **/
function triggerDispTriggersampleAdditionSetup(&$obj)
{

    $oTemplate = &TemplateHandler::getInstance();
    $tpl = $oTemplate->compile($this->module_path.'tpl', 'triggersample_setup');
    $obj .= $tpl;

    return new Object();
}

 

내 모듈에서 트리거 만들기

/**
 * @brief 정보 추가
 **/
function insertTriggersample($args = NULL)
{
    if($args == NULL)
    {
        return new Object(-1, "msg_error_occured");
    }

    // trigger 호출 (before)
    $output = ModuleHandler::triggerCall('triggersample.insertTriggersample', 'before', $args);
    if(!$output->toBool()) return $output;

    // begin transaction
    $oDB = &DB::getInstance();
    $oDB->begin();

    $output = executeQuery('triggersample.insertTriggersample', $args);
    if(!$output->toBool())
    {
        $oDB->rollback();
        return new Object(-1, "msg_error_occured");
    }

    // trigger 호출 (after)
    if($output->toBool()) {
        $trigger_output = ModuleHandler::triggerCall('triggersample.insertTriggersample', 'after', $args);
        if(!$trigger_output->toBool()) {
            $oDB->rollback();
            return $trigger_output;
        }
    }

    // commit
    $oDB->commit();

    return $output;
}

 

3편 마무리

의외의 분량이 나왔기에 트리거가 없는 대상 처리는 다음편에서 다루겠습니다. 이번 내용은 그간 1, 2편에서 설명했던 내용을 토대로 기본 예제를 만들어 구현을 해보았습니다. 예제는 첨부파일에 모듈로 만들어져있으며, 본 예제와 4편의 예제를 포함한 모듈입니다. 다음 4편에서는 트리거가 없는 대상 트리거 만들기를 통하여 일반 Javscript에서 jQuery, JAF를 이용한 방법까지 예제를 적어보겠습니다.