diff --git a/modules/addon/addon.class.php b/modules/addon/addon.class.php new file mode 100644 index 000000000..24b1de595 --- /dev/null +++ b/modules/addon/addon.class.php @@ -0,0 +1,11 @@ + diff --git a/modules/addon/addon.model.php b/modules/addon/addon.model.php new file mode 100644 index 000000000..4a87122b4 --- /dev/null +++ b/modules/addon/addon.model.php @@ -0,0 +1,167 @@ +addon)) return; ///< xml 내용중에 addon 태그가 없다면 오류;; + + $grants = $xml_obj->addon->grants->grant; ///< 권한 정보 (없는 경우도 있음) + $actions = $xml_obj->addon->actions->action; ///< action list (필수) + + $default_index = $admin_index = ''; + + // 권한 정보의 정리 + if($grants) { + if(is_array($grants)) $grant_list = $grants; + else $grant_list[] = $grants; + + foreach($grant_list as $grant) { + $name = $grant->attrs->name; + $default = $grant->attrs->default?$grant->attrs->default:'guest'; + $title = $grant->title->body; + + $info->grant->{$name}->title = $title; + $info->grant->{$name}->default = $default; + + $buff .= sprintf('$info->grant->%s->title=\'%s\';', $name, $title); + $buff .= sprintf('$info->grant->%s->default=\'%s\';', $name, $default); + } + } + + // actions 정리 + if($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?$action->attrs->grant:'guest'; + $standalone = $action->attrs->standalone=='true'?'true':'false'; + + $index = $action->attrs->index; + $admin_index = $action->attrs->admin_index; + + $output->action->{$name}->type = $type; + $output->action->{$name}->grant = $grant; + $output->action->{$name}->standalone= $standalone; + + $info->action->{$name}->type = $type; + $info->action->{$name}->grant = $grant; + $info->action->{$name}->standalone = $standalone=='true'?true:false; + + $buff .= sprintf('$info->action->%s->type=\'%s\';', $name, $type); + $buff .= sprintf('$info->action->%s->grant=\'%s\';', $name, $grant); + $buff .= sprintf('$info->action->%s->standalone=%s;', $name, $standalone); + + if($index=='true') { + $default_index_act = $name; + $info->default_index_act = $name; + } + if($admin_index=='true') { + $admin_index_act = $name; + $info->admin_index_act = $name; + } + } + } + $buff = sprintf('default_index_act = \'%s\';$info->admin_index_act = \'%s\';%s?>', $default_index_act, $admin_index_act, $buff); + + FileHandler::writeFile($cache_file, $buff); + + return $info; + } + + include $cache_file; + + return $info; + } + + /** + * @brief 모듈의 conf/info.xml 을 읽어서 정보를 구함 + **/ + function getModuleInfoXml($addon) { + // 요청된 모듈의 경로를 구한다. 없으면 return + $addon_path = ModuleHandler::getModulePath($addon); + if(!$addon_path) return; + + // 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음 + $xml_file = sprintf("%s/conf/info.xml", $addon_path); + if(!file_exists($xml_file)) return; + + $oXmlParser = new XmlParser(); + $tmp_xml_obj = $oXmlParser->loadXmlFile($xml_file); + $xml_obj = $tmp_xml_obj->addon; + + if(!$xml_obj) return; + + $info->title = $xml_obj->title->body; + + // 작성자 정보 + $addon_info->title = $xml_obj->title->body; + $addon_info->version = $xml_obj->attrs->version; + $addon_info->author->name = $xml_obj->author->name->body; + $addon_info->author->email_address = $xml_obj->author->attrs->email_address; + $addon_info->author->homepage = $xml_obj->author->attrs->link; + $addon_info->author->date = $xml_obj->author->attrs->date; + $addon_info->author->description = $xml_obj->author->description->body; + + // history + if(!is_array($xml_obj->history->author)) $history[] = $xml_obj->history->author; + else $history = $xml_obj->history->author; + + foreach($history as $item) { + unset($obj); + $obj->name = $item->name->body; + $obj->email_address = $item->attrs->email_address; + $obj->homepage = $item->attrs->link; + $obj->date = $item->attrs->date; + $obj->description = $item->description->body; + $addon_info->history[] = $obj; + } + + // action 정보를 얻어서 admin_index를 추가 + $action_info = $this->getModuleActionXml($addon); + $addon_info->admin_index_act = $action_info->admin_index_act; + + return $addon_info; + } + + } +?> diff --git a/modules/addon/conf/info.xml b/modules/addon/conf/info.xml new file mode 100644 index 000000000..dd61ab1ed --- /dev/null +++ b/modules/addon/conf/info.xml @@ -0,0 +1,11 @@ + + + 애드온 관리 + addon management + + 제로 + zero + 애드온 관리 모듈 + addon management + + diff --git a/modules/addon/conf/module.xml b/modules/addon/conf/module.xml new file mode 100644 index 000000000..098df60c2 --- /dev/null +++ b/modules/addon/conf/module.xml @@ -0,0 +1,4 @@ + + + + diff --git a/modules/admin/admin.model.php b/modules/admin/admin.model.php index 0aa352ef6..81894d6d8 100644 --- a/modules/admin/admin.model.php +++ b/modules/admin/admin.model.php @@ -63,5 +63,54 @@ return $list; } + /** + * @brief 애드온의 종류와 정보를 구함 + **/ + function getAddonList() { + // addon model 객체 생성 + $oAddonModel = &getModel('addon'); + + // DB 객체 생성 + $oDB = &DB::getInstance(); + + // 다운받은 애드온과 설치된 애드온의 목록을 구함 + $downloaded_list = FileHandler::readDir('./files/addons'); + $installed_list = FileHandler::readDir('./addons'); + $searched_list = array_merge($downloaded_list, $installed_list); + $searched_count = count($searched_list); + if(!$searched_count) return; + + for($i=0;$i<$searched_count;$i++) { + // 애드온의 이름 + $addon_name = $searched_list[$i]; + + // 애드온의 경로 (files/addons가 우선) + $path = AddonHandler::getAddonPath($addon_name); + + // schemas내의 테이블 생성 xml파일수를 구함 + $tmp_files = FileHandler::readDir($path."schemas"); + $table_count = count($tmp_files); + + // 테이블이 설치되어 있는지 체크 + $created_table_count = 0; + for($j=0;$jisTableExists($table_name)) $created_table_count ++; + } + + // 해당 애드온의 정보를 구함 + $info = $oAddonModel->getAddonInfoXml($addon_name); + unset($obj); + + $info->addon = $addon_name; + $info->created_table_count = $created_table_count; + $info->table_count = $table_count; + $info->path = $path; + $info->admin_index_act = $info->admin_index_act; + + $list[] = $info; + } + return $list; + } } ?> diff --git a/modules/admin/admin.view.php b/modules/admin/admin.view.php index f1ecb298b..8913580aa 100644 --- a/modules/admin/admin.view.php +++ b/modules/admin/admin.view.php @@ -66,7 +66,7 @@ * @brief 모듈의 목록을 보여줌 **/ function dispModuleList() { - // 관리자 모듈 목록을 세팅 + // 모듈 목록을 세팅 $oAdminModel = &getModel('admin'); $module_list = $oAdminModel->getModuleList(); Context::set('module_list', $module_list); @@ -74,6 +74,18 @@ $this->setTemplateFile('module_list'); } + /** + * @brief 애드온의 목록을 보여줌 + **/ + function dispAddonList() { + // 애드온 목록을 세팅 + $oAdminModel = &getModel('admin'); + $addon_list = $oAdminModel->getAddonList(); + Context::set('addon_list', $addon_list); + + $this->setTemplateFile('addon_list'); + } + /** * @brief 관리자 로그인 페이지 출력 **/ diff --git a/modules/admin/conf/module.xml b/modules/admin/conf/module.xml index 542ad44a5..a67895fec 100644 --- a/modules/admin/conf/module.xml +++ b/modules/admin/conf/module.xml @@ -3,6 +3,7 @@ + diff --git a/modules/admin/lang/ko.lang.php b/modules/admin/lang/ko.lang.php index 5a776007c..3f6dbebdc 100644 --- a/modules/admin/lang/ko.lang.php +++ b/modules/admin/lang/ko.lang.php @@ -11,11 +11,12 @@ $lang->item_layout = "레이아웃"; $lang->module_name = "모듈 이름"; - $lang->module_version = "버전"; - $lang->module_author = "제작자"; - $lang->module_table_count = "테이블수"; - $lang->module_date = "제작일"; - $lang->module_installed_path = "설치경로"; + $lang->addon_name = "애드온 이름"; + $lang->version = "버전"; + $lang->author = "제작자"; + $lang->table_count = "테이블수"; + $lang->date = "제작일"; + $lang->installed_path = "설치경로"; $lang->msg_is_not_administrator = '관리자만 접속이 가능합니다'; ?> diff --git a/modules/admin/tpl/addon_list.html b/modules/admin/tpl/addon_list.html new file mode 100644 index 000000000..527032e21 --- /dev/null +++ b/modules/admin/tpl/addon_list.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + +
{$lang->addon_name}{$lang->version}{$lang->author}{$lang->date}{$lang->table_count}{$lang->installed_path}
+ + {$val->title}
({$val->module}) + + {$val->title}
+ ({$val->module}) + +
{$val->version}{$val->author->name}{$val->author->date}{$val->created_table_count}/{$val->table_count}{$val->path}
+ {nl2br($val->author->description)} +
diff --git a/modules/admin/tpl/module_list.html b/modules/admin/tpl/module_list.html index 82e259dd7..52b28484a 100644 --- a/modules/admin/tpl/module_list.html +++ b/modules/admin/tpl/module_list.html @@ -1,11 +1,11 @@ - - - - - + + + + + diff --git a/modules/install/install.controller.php b/modules/install/install.controller.php index 3e680fd02..3987767d0 100644 --- a/modules/install/install.controller.php +++ b/modules/install/install.controller.php @@ -145,6 +145,7 @@ './files/cache/js_filter_compiled', './files/cache/template_compiled', './files/cache/module_info', + './files/cache/addon_info', './files/attach', './files/attach/images', './files/attach/binaries',
{$lang->module_name}{$lang->module_version}{$lang->module_author}{$lang->module_date}{$lang->module_table_count}{$lang->module_installed_path}{$lang->version}{$lang->author}{$lang->date}{$lang->table_count}{$lang->installed_path}