From 17c29c695776a751ffebf27ebee8a15014636cb7 Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 22 Feb 2007 03:06:50 +0000 Subject: [PATCH] git-svn-id: http://xe-core.googlecode.com/svn/trunk@153 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 1 + classes/display/DisplayHandler.class.php | 6 -- classes/module/ModuleHandler.class.php | 71 ++++++++++++++++-------- classes/module/ModuleObject.class.php | 25 ++++----- common/lang/ko.lang.php | 5 +- index.php | 23 ++------ modules/admin/conf/module.xml | 12 ++-- modules/board/board.view.php | 3 - modules/board/conf/module.xml | 34 ++++++------ modules/install/conf/module.xml | 8 +-- modules/member/conf/module.xml | 2 +- modules/message/conf/module.xml | 5 +- modules/message/message.view.php | 4 +- modules/module/conf/module.xml | 4 +- modules/module/module.model.php | 12 ++-- 15 files changed, 108 insertions(+), 107 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index d240193c3..694d1637a 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -244,6 +244,7 @@ * 만약 code에 해당하는 문자열이 없다면 code를 그대로 리턴 **/ function getLang($code) { + if(!$code) return; if($GLOBALS['lang']->{$code}) return $GLOBALS['lang']->{$code}; return $code; } diff --git a/classes/display/DisplayHandler.class.php b/classes/display/DisplayHandler.class.php index 9d6d8e9a5..fd8d92592 100644 --- a/classes/display/DisplayHandler.class.php +++ b/classes/display/DisplayHandler.class.php @@ -19,12 +19,6 @@ **/ function printContent(&$oModule) { - // 모듈이 정상적이지 않으면 system message 출력 - if(!is_object($oModule)) { - $oModule = &getView('message'); - Context::set('system_message', Context::getLang('msg_invalid_request_module')); - } - // header 출력 $this->_printHeader(); diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 7a4ec9511..720c5b37f 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -21,7 +21,7 @@ var $module_info = NULL; ///< 모듈의 정보 - var $check_standalone = false; ///< 요청된 모듈의 standalone을 체크할 것인지에 설정 + var $error = NULL; ///< 진행 도중 에러 발생시 에러 코드를 정의, message 모듈을 호출시 사용 /** * @brief constructor @@ -52,9 +52,6 @@ * @brief module, mid, document_srl을 이용하여 모듈을 찾고 act를 실행하기 위한 준비를 함 **/ function init() { - // 일반적인 요청으로 간주 standalone를 체크하도록 설정 - $this->check_standalone = true; - // ModuleModel 객체 생성 $oModuleModel = &getModel('module'); @@ -76,10 +73,7 @@ } // 여기까지도 모듈 정보를 찾지 못했다면 깔끔하게 시스템 오류 표시 - if(!$this->module) { - $this->module = 'message'; - Context::set('system_message', Context::getLang('msg_mid_not_exists')); - } + if(!$this->module) $this->error = 'msg_module_is_not_exists'; // mid값이 있을 경우 mid값을 세팅 if($this->mid) Context::set('mid', $this->mid, true); @@ -90,8 +84,8 @@ * @brief 모듈과 관련된 정보를 이용하여 객체를 구하고 act 실행까지 진행시킴 **/ function procModule() { - // $module이 세팅되어 있지 않다면 return NULL, 이럴 경우가 없어야 함 - if(!$this->module) return; + // 에러가 있으면 return + if($this->error) return; // ModuleModel 객체 생성 $oModuleModel = &getModel('module'); @@ -99,33 +93,64 @@ // 해당 모듈의 conf/action.xml 을 분석하여 action 정보를 얻어옴 $xml_info = $oModuleModel->getModuleXmlInfo($this->module); - // module_info가 없고(mid가 없다는 의미) standalone이 false이면 오류 표시 - if($this->check_standalone && !$this->mid && !$xml_info->standalone) { - $this->module = 'message'; - Context::set('system_message', Context::getLang('msg_invalid_request_module')); - $xml_info = $oModuleModel->getModuleXmlInfo($this->module); - } - // 현재 요청된 act가 있으면 $xml_info에서 type을 찾음, 없다면 기본 action을 이용 if(!$this->act || !$xml_info->action->{$this->act}) $this->act = $xml_info->default_action; + // 설정된 mid가 없을 경우 요청된 act의 standalone 여부 체크 + if(!$this->mid && !$xml_info->action->{$this->act}->standalone) return $this->error = 'msg_module_is_not_standalone'; + // type, grant 값 구함 $type = $xml_info->action->{$this->act}->type; $grant = $xml_info->action->{$this->act}->grant; // 모듈 객체 생성 - $oModule = &$this->getModuleInstance($this->module, $type); - if(!is_object($oModule)) return; + $this->oModule = &$this->getModuleInstance($this->module, $type); + if(!is_object($this->oModule)) return $this->error = 'msg_module_is_not_exists'; // 모듈에 act값을 세팅 - $oModule->setAct($this->act); + $this->oModule->setAct($this->act); // 모듈 정보 세팅 - $oModule->setModuleInfo($this->module_info, $xml_info); + $this->oModule->setModuleInfo($this->module_info, $xml_info); - $oModule->proc(); + // 모듈을 수행하고 결과가 false이면 message 모듈 호출 지정 + if(!$this->oModule->proc()) $this->error = $this->oModule->getMessage(); + } - return $oModule; + /** + * @ 실행된 모듈의 컨텐츠를 출력 + **/ + function displayContent() { + // 설정된 모듈이 정상이지 않을 경우 message 모듈 객체 생성 + if(!$this->oModule || !is_object($this->oModule)) { + $this->error = 'msg_module_is_not_exists'; + } + + // 에러가 발생하였을시 처리 + if($this->error) { + // message 모듈 객체를 생성해서 컨텐츠 생성 + $oModule = &getView('message'); + $oModule->setError(-1); + $oModule->setMessage($this->error); + $oModule->dispContent(); + + // 정상적으로 호출된 객체가 있을 경우 해당 객체의 template를 변경 + if($this->oModule) { + $this->oModule->setTemplatePath($oModule->getTemplatePath()); + $this->oModule->setTemplateFile($oModule->getTemplateFile()); + + // 그렇지 않으면 message 객체를 호출된 객체로 지정 + } else { + $this->oModule = $oModule; + } + } + + // 컨텐츠 출력 + $oDisplayHandler = new DisplayHandler(); + $oDisplayHandler->printContent($this->oModule); + + // DB 및 기타 자원의 종결 처리 + Context::close(); } /** diff --git a/classes/module/ModuleObject.class.php b/classes/module/ModuleObject.class.php index c8132ad2f..e68890e42 100644 --- a/classes/module/ModuleObject.class.php +++ b/classes/module/ModuleObject.class.php @@ -23,7 +23,7 @@ var $layout_path = './common/tpl/'; ///< 레이아웃 경로 var $layout_file = 'default_layout.html'; ///< 레이아웃 파일 - var $stop_proc = false; ///< action 수행중 dispMessage를 호출하면 ModuleObject::proc()를 수행하지 않음 + var $stop_proc = false; ///< action 수행중 stop()를 호출하면 ModuleObject::proc()를 수행하지 않음 /** * @brief 현재 모듈의 이름을 지정 @@ -126,21 +126,13 @@ /** * @brief 메세지 출력 **/ - function dispMessage($msg_code) { + function stop($msg_code) { // proc 수행을 중지 시키기 위한 플래그 세팅 $this->stop_proc = true; - // RequestMethod가 XMLRPC일 경우를 대비 - if(Context::getRequestMethod()=='XMLRPC') { - $this->setError(-1); - $this->setMessage($msg_code); - } else { - Context::set('system_message', Context::getLang($msg_code)); - $oMessageView = &getView('message'); - $oMessageView->dispMessage(); - $this->setTemplatePath($oMessageView->getTemplatePath()); - $this->setTemplateFile($oMessageView->getTemplateFile()); - } + // 에러 처리 + $this->setError(-1); + $this->setMessage($msg_code); } /** @@ -213,10 +205,10 @@ **/ function proc() { // stop_proc==true이면 그냥 패스 - if($this->stop_proc==true) return; + if($this->stop_proc==true) return false; // 기본 act조차 없으면 return - if(!method_exists($this, $this->act)) return; + if(!method_exists($this, $this->act)) return false; // this->act값으로 method 실행 $output = call_user_method($this->act, $this); @@ -224,7 +216,10 @@ if(is_a($output, 'Object') || is_subclass_of($output, 'Object')) { $this->setError($output->getError()); $this->setMessage($output->getMessage()); + return false; } + + return true; } } ?> diff --git a/common/lang/ko.lang.php b/common/lang/ko.lang.php index 8e407cee4..d471baccc 100644 --- a/common/lang/ko.lang.php +++ b/common/lang/ko.lang.php @@ -108,8 +108,6 @@ // 메세지 관련 $lang->msg_call_server = '서버에 요청중입니다. 잠시만 기다려주세요.'; $lang->msg_db_not_setted = 'DB설정이 되어 있지 않습니다'; - $lang->msg_mid_not_exists = '설정이 되어 있지 않습니다. 관리자 페이지에서 기본 설정을 해주시기 바랍니다.'; - $lang->msg_invalid_request_module = '잘못된 모듈 요청입니다'; $lang->msg_invalid_queryid = 'Query ID값이 잘못 지정되었습니다'; $lang->msg_not_permitted = '권한이 없습니다'; $lang->msg_input_password = '비밀번호를 입력하여 주세요'; @@ -119,6 +117,9 @@ $lang->msg_error_occured = '오류가 발생하였습니다'; $lang->msg_not_founded = '대상을 찾을 수 없습니다'; + $lang->msg_module_is_not_exists = '요청하신 모듈을 찾을 수 없습니다'; + $lang->msg_module_is_not_standalone = '요청하신 모듈은 독립적으로 동작할 수가 없습니다'; + $lang->success_registed = '등록되었습니다'; $lang->success_updated = '수정되었습니다'; $lang->success_deleted = '삭제되었습니다'; diff --git a/index.php b/index.php index df9b7a1a5..a0bb8e7e1 100644 --- a/index.php +++ b/index.php @@ -34,28 +34,13 @@ * @brief ModuleHandler 객체를 생성/ 실행 * * 모듈 핸들러는 Request Argument를 바탕으로 모듈을 찾아서\n - * 객체를 생성하고 기본 정보를 setting 해줌\n + * 객체를 생성하고 기본 정보를 setting 해준다.\n * ModuleHandler는 이 외에도 설치가 되어 있는지에 대한 체크를\n * 하여 미설치시 Install 모듈을 실행하도록 한다\n - * 그리고 해당 모듈을 실행후 모듈 객체를 return한다 - * 이 모듈 객체는 DisplayHandler에 의해 content 출력시 사용된다. + * 그리고 해당 모듈을 실행후 컨텐츠를 출력한다\n **/ $oModuleHandler = new ModuleHandler(); $oModuleHandler->init(); - $oModule = &$oModuleHandler->procModule(); - - /** - * @brief DisplayHandler 객체를 생성하여 모듈의 처리 결과를 출력 - * - * ModuleHandler에 의해 주어진 모듈 객체는 Object 클래스의 상속을 받으므로\n - * RequestMethod의 종류(GET/POST/XML)에 따라 적절한 헤더 정보를 발송하고\n - * XML 데이터 혹은 HTML 데이터를 출력한다 - **/ - $oDisplayHandler = new DisplayHandler(); - $oDisplayHandler->printContent($oModule); - - /** - * @brief Context::close()를 통해서 DB및 기타 사용된 자원들의 처리 - **/ - $oContext->close(); + $oModuleHandler->procModule(); + $oModuleHandler->displayContent(); ?> diff --git a/modules/admin/conf/module.xml b/modules/admin/conf/module.xml index 4cb3249d0..84870214a 100644 --- a/modules/admin/conf/module.xml +++ b/modules/admin/conf/module.xml @@ -1,10 +1,10 @@ - + - - - - - + + + + + diff --git a/modules/board/board.view.php b/modules/board/board.view.php index bf9a11b17..842217896 100644 --- a/modules/board/board.view.php +++ b/modules/board/board.view.php @@ -375,9 +375,6 @@ // module_srl 값이 없다면 그냥 index 페이지를 보여줌 if(!Context::get('module_srl')) return $this->dispAdminContent(); - // template 경로를 변경 - $this->setTemplatePath( - // 요청받은 모듈의 정보를 구함 $oModuleModel = &getModel('module'); $module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl); diff --git a/modules/board/conf/module.xml b/modules/board/conf/module.xml index 2ae890d26..ddd69738e 100644 --- a/modules/board/conf/module.xml +++ b/modules/board/conf/module.xml @@ -1,5 +1,5 @@ - + 목록 @@ -35,18 +35,9 @@ - + - - - - - - - - - @@ -59,11 +50,20 @@ - - - - - - + + + + + + + + + + + + + + + diff --git a/modules/install/conf/module.xml b/modules/install/conf/module.xml index 4bd769dc1..0daf357d5 100644 --- a/modules/install/conf/module.xml +++ b/modules/install/conf/module.xml @@ -1,9 +1,9 @@ - + - - - + + + diff --git a/modules/member/conf/module.xml b/modules/member/conf/module.xml index 5c14b4f78..c1a25188f 100644 --- a/modules/member/conf/module.xml +++ b/modules/member/conf/module.xml @@ -1,5 +1,5 @@ - + diff --git a/modules/message/conf/module.xml b/modules/message/conf/module.xml index efc0af07c..2d8198dd1 100644 --- a/modules/message/conf/module.xml +++ b/modules/message/conf/module.xml @@ -1,6 +1,7 @@ - + + - + diff --git a/modules/message/message.view.php b/modules/message/message.view.php index 5561548f4..81cc574e0 100644 --- a/modules/message/message.view.php +++ b/modules/message/message.view.php @@ -11,13 +11,15 @@ * @brief 초기화 **/ function init() { + // 템플릿 경로를 지정 $this->setTemplatePath($this->module_path.'tpl'); } /** * @brief 메세지 출력 **/ - function dispMessage() { + function dispContent() { + Context::set('system_message', $this->getMessage()); $this->setTemplateFile('system_message'); } } diff --git a/modules/module/conf/module.xml b/modules/module/conf/module.xml index ddf65f705..4a9de63e6 100644 --- a/modules/module/conf/module.xml +++ b/modules/module/conf/module.xml @@ -1,6 +1,6 @@ - + - + diff --git a/modules/module/module.model.php b/modules/module/module.model.php index e70de9e17..b197f7494 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -26,9 +26,7 @@ $xml_obj = XmlParser::loadXmlFile($xml_file); if(!count($xml_obj->module)) return; - $output->standalone = $xml_obj->module->attrs->standalone=='true'?true:false; ///< 모듈 자체적으로 실행이 가능한지에 대한 값 (기본=false) $output->default_action = $xml_obj->module->attrs->default_action; ///< 별도의 action이 지정되지 않으면 호출될 action - $output->management_action = $xml_obj->module->attrs->management_action; ///< 관리자용으로 사용될 기본 action $grants = $xml_obj->module->grants->grant; ///< 권한 정보 (없는 경우도 있음) $actions = $xml_obj->module->actions->action; ///< action list (필수) @@ -40,9 +38,8 @@ foreach($grant_list as $grant) { $name = $grant->attrs->name; - $default = $grant->attrs->default; + $default = $grant->attrs->default?$grant->attrs->default:'guest'; $title = $grant->title->body; - if(!$default) $default = 'guest'; $output->grant->{$name}->title = $title; $output->grant->{$name}->default = $default; @@ -56,11 +53,14 @@ foreach($action_list as $action) { $name = $action->attrs->name; + $type = $action->attrs->type; - $grant = $action->attrs->grant; - if(!$grant) $grant = 'guest'; + $grant = $action->attrs->grant?$action->attrs->grant:'guest'; + $standalone = $action->attrs->standalone=='true'?true:false; + $output->action->{$name}->type = $type; $output->action->{$name}->grant = $grant; + $output->action->{$name}->standalone= $standalone; } }