diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php
index b8bfd443f..408f906eb 100644
--- a/classes/context/Context.class.php
+++ b/classes/context/Context.class.php
@@ -87,6 +87,15 @@
}
}
+ /**
+ * @brief DB및 기타 자원들의 close
+ **/
+ function close() {
+ // DB close
+ $oDB = &DB::getInstance();
+ if($oDB) $oDB->close();
+ }
+
/**
* @brief DB 정보를 설정하고 DB Type과 DB 정보를 return
**/
diff --git a/classes/display/DisplayHandler.class.php b/classes/display/DisplayHandler.class.php
index 7ba7c924d..5a46b537a 100644
--- a/classes/display/DisplayHandler.class.php
+++ b/classes/display/DisplayHandler.class.php
@@ -128,7 +128,8 @@
if($GLOBALS['__db_elapsed_time__']) $buff .= sprintf("\tDB queries elapsed time\t\t: %0.5f sec\n", $GLOBALS['__db_elapsed_time__']);
$buff .= sprintf("\tclass file load elapsed time \t: %0.5f sec\n", __RequireClassEndTime__-__RequireClassStartTime__);
$buff .= sprintf("\tTemplate compile elapsed time\t: %0.5f sec\n", $GLOBALS['__template_elapsed__']);
- $buff .= sprintf("\tPHP elapsed time \t\t: %0.5f sec\n", $end-__StartTime__-$GLOBALS['__template_elapsed__']-$GLOBALS['__db_elapsed_time__']-(__RequireClassEndTime__-__RequireClassStartTime__));
+ $buff .= sprintf("\tXmlParse compile elapsed time\t: %0.5f sec\n", $GLOBALS['__xmlparse_elapsed__']);
+ $buff .= sprintf("\tPHP elapsed time \t\t: %0.5f sec\n", $end-__StartTime__-$GLOBALS['__template_elapsed__']-$GLOBALS['__xmlparse_elapsed__']-$GLOBALS['__db_elapsed_time__']-(__RequireClassEndTime__-__RequireClassStartTime__));
$buff .= sprintf("\tTotal elapsed time \t\t: %0.5f sec", $end-__StartTime__);
debugPrint($buff, false);
diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php
index f681e3082..835f1f3fe 100644
--- a/classes/module/ModuleHandler.class.php
+++ b/classes/module/ModuleHandler.class.php
@@ -57,14 +57,14 @@
}
// 해당 모듈의 conf/action.xml 을 분석하여 action 정보를 얻어옴
- $action_info = $oModuleModel->getActionInfo($module);
+ $xml_info = $oModuleModel->getModuleXmlInfo($module);
- // 현재 요청된 act가 있으면 $action_info에서 type을 찾음, 없다면 기본 action을 이용
- if(!$act || !$action_info->{$act}) $act = $action_info->default_action;
+ // 현재 요청된 act가 있으면 $xml_info에서 type을 찾음, 없다면 기본 action을 이용
+ if(!$act || !$xml_info->{$act}) $act = $xml_info->default_action;
// type, grant 값 구함
- $type = $action_info->{$act}->type;
- $grant = $action_info->{$act}->grant;
+ $type = $xml_info->action->{$act}->type;
+ $grant = $xml_info->action->{$act}->grant;
// act값을 Context에 세팅
Context::set('act', $act, true);
@@ -73,7 +73,7 @@
$oModule = &$this->getModuleInstance($module, $type);
// 모듈 정보 세팅
- $oModule->setModuleInfo($module_info);
+ $oModule->setModuleInfo($module_info, $xml_info);
if(!is_object($oModule)) return;
diff --git a/classes/module/ModuleObject.class.php b/classes/module/ModuleObject.class.php
index 308df62e2..6040036bf 100644
--- a/classes/module/ModuleObject.class.php
+++ b/classes/module/ModuleObject.class.php
@@ -42,7 +42,8 @@
/**
* @brief 모듈의 정보 세팅
**/
- function setModuleInfo($module_info) {
+ function setModuleInfo($module_info, $xml_info) {
+
// 기본 변수 설정
$this->mid = $module_info->mid;
$this->module = $module_info->module;
@@ -63,29 +64,43 @@
}
// 권한 설정
- if($this->grant_list) {
- foreach($this->grant_list as $grant_name) {
+ if($xml_info->grant) {
+ foreach($xml_info->grant as $grant_name => $grant_item) {
+ $title = $grant_item->title;
+ $default = $grant_item->default;
+
$grant->{$grant_name} = false;
- if($grant->is_admin || !$this->module_info->grant[$grant_name]) {
+ if($grant->is_admin) {
$grant->{$grant_name} = true;
continue;
}
if(count($user_group)) {
foreach($user_group as $group_srl) {
- if(in_array($group_srl, $this->module_info->grant[$grant_name])) {
+ if(in_array($group_srl, $this->module_info->grants[$grant_name])) {
$grant->{$grant_name} = true;
break;
}
}
+ } else {
+ switch($default) {
+ case 'guest' :
+ $grant->{$grant_name} = true;
+ break;
+ case 'member' :
+ if($is_logged) $grant->{$grant_name} = true;
+ break;
+ case 'root' :
+ if($grant->is_admin) $grant->{$grant_name} = true;
+ break;
+ }
}
}
}
// 권한변수 설정
$this->grant = $grant;
- Context::set('grant',$this->grant);
// 모듈의 init method 실행
$this->init();
diff --git a/classes/xml/XmlParser.class.php b/classes/xml/XmlParser.class.php
index bba6c7e14..bf74f1e5a 100644
--- a/classes/xml/XmlParser.class.php
+++ b/classes/xml/XmlParser.class.php
@@ -35,6 +35,9 @@
* @brief xml 파싱
**/
function parse($input = '') {
+ // 디버그를 위한 컴파일 시작 시간 저장
+ if(__DEBUG__) $start = getMicroTime();
+
$this->lang = Context::getLangType();
$this->input = $input?$input:$GLOBALS['HTTP_RAW_POST_DATA'];
@@ -68,7 +71,16 @@
xml_parser_free($this->oParser);
if(!count($this->output)) return;
- return array_shift($this->output);
+
+ $output = array_shift($this->output);
+
+ // 디버그를 위한 컴파일 시작 시간 저장
+ if(__DEBUG__) {
+ $parsing_elapsed = getMicroTime() - $start;
+ $GLOBALS['__xmlparse_elapsed__'] += $parsing_elapsed;
+ }
+
+ return $output;
}
/**
diff --git a/index.php b/index.php
index 9c7d75319..50775e6c9 100644
--- a/index.php
+++ b/index.php
@@ -51,4 +51,9 @@
**/
$oDisplayHandler = new DisplayHandler();
$oDisplayHandler->printContent($oModule);
+
+ /**
+ * @brief Context::close()를 통해서 DB및 기타 사용된 자원들의 처리
+ **/
+ $oContext->close();
?>
diff --git a/modules/admin/conf/action.xml b/modules/admin/conf/module.xml
similarity index 53%
rename from modules/admin/conf/action.xml
rename to modules/admin/conf/module.xml
index f521e2044..33168e9eb 100644
--- a/modules/admin/conf/action.xml
+++ b/modules/admin/conf/module.xml
@@ -1,4 +1,6 @@
-
+
+
+
diff --git a/modules/board/board.class.php b/modules/board/board.class.php
index 603175007..02fc37206 100644
--- a/modules/board/board.class.php
+++ b/modules/board/board.class.php
@@ -14,14 +14,6 @@
var $page_count = 10; ///< 페이지의 수
var $category_list = NULL; ///< 카테고리 목록
- var $grant_list = array(
- 'list',
- 'view',
- 'write_document',
- 'write_comment',
- 'fileupload',
- ); ///< 권한의 종류를 미리 설정
-
var $editor = 'default'; ///< 에디터 종류
}
diff --git a/modules/board/conf/action.xml b/modules/board/conf/action.xml
deleted file mode 100644
index 8f4737571..000000000
--- a/modules/board/conf/action.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/board/conf/module.xml b/modules/board/conf/module.xml
new file mode 100644
index 000000000..c452a8da2
--- /dev/null
+++ b/modules/board/conf/module.xml
@@ -0,0 +1,49 @@
+
+
+
+
+ 목록
+ list
+
+
+ 열람
+ view
+
+
+ 글 작성
+ write document
+
+
+ 댓글 작성
+ write comment
+
+
+ 파일 첨부
+ file upload
+
+
+ 관리
+ management
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/install/conf/action.xml b/modules/install/conf/action.xml
deleted file mode 100644
index 3b092c488..000000000
--- a/modules/install/conf/action.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/install/conf/module.xml b/modules/install/conf/module.xml
new file mode 100644
index 000000000..ce0cd7e5a
--- /dev/null
+++ b/modules/install/conf/module.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/modules/member/conf/action.xml b/modules/member/conf/action.xml
deleted file mode 100644
index d11593cee..000000000
--- a/modules/member/conf/action.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/member/conf/module.xml b/modules/member/conf/module.xml
new file mode 100644
index 000000000..0e70be153
--- /dev/null
+++ b/modules/member/conf/module.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/modules/module/conf/action.xml b/modules/module/conf/module.xml
similarity index 52%
rename from modules/module/conf/action.xml
rename to modules/module/conf/module.xml
index e015a3b2d..68f3ea310 100644
--- a/modules/module/conf/action.xml
+++ b/modules/module/conf/module.xml
@@ -1,4 +1,6 @@
-
+
+
+
diff --git a/modules/module/module.model.php b/modules/module/module.model.php
index 45c457584..ee2bb44a2 100644
--- a/modules/module/module.model.php
+++ b/modules/module/module.model.php
@@ -14,30 +14,49 @@
}
/**
- * @brief module의 conf/action.xml 을 통해 act값에 해당하는 action type을 return
+ * @brief module의 conf/module.xml 을 통해 grant(권한) 및 action 데이터를 return
**/
- function getActionInfo($module) {
+ function getModuleXmlInfo($module) {
$class_path = ModuleHandler::getModulePath($module);
if(!$class_path) return;
- $action_xml_file = sprintf("%sconf/action.xml", $class_path);
+ $action_xml_file = sprintf("%sconf/module.xml", $class_path);
if(!file_exists($action_xml_file)) return;
$xml_obj = XmlParser::loadXmlFile($action_xml_file);
if(!count($xml_obj->module)) return;
- $output->default_action = $xml_obj->module->attrs->default_action;
- $output->manage_action = $xml_obj->module->attrs->manage_action;
+ $output->default_action = $xml_obj->module->attrs->default_action; ///< 별도의 action이 지정되지 않으면 호출될 action
+ $output->manage_action = $xml_obj->module->attrs->manage_action; ///< 관리자용으로 사용될 기본 action
- if(is_array($xml_obj->module->action)) $action_list = $xml_obj->module->action;
- else $action_list[] = $xml_obj->module->action;
+ $grants = $xml_obj->module->grants->grant; ///< 권한 정보 (없는 경우도 있음)
+ $actions = $xml_obj->module->actions->action; ///< action list (필수)
+
+ // 권한 정보의 정리
+ if(is_array($grants)) $grant_list = $grants;
+ else $grant_list[] = $grants;
+
+ foreach($grant_list as $grant) {
+ $name = $grant->attrs->name;
+ $default = $grant->attrs->default;
+ $title = $grant->title->body;
+ if(!$default) $default = 'guest';
+
+ $output->grant->{$name}->title = $title;
+ $output->grant->{$name}->default = $default;
+ }
+
+ // actions 정리
+ if(is_array($actions)) $action_list = $actions;
+ else $action_list[] = $actions;
foreach($action_list as $action) {
$name = $action->attrs->name;
$type = $action->attrs->type;
$grant = $action->attrs->grant;
- $output->{$name}->type = $type;
- $output->{$name}->grant = $grant;
+ if(!$grant) $grant = 'guest';
+ $output->action->{$name}->type = $type;
+ $output->action->{$name}->grant = $grant;
}
return $output;