git-svn-id: http://xe-core.googlecode.com/svn/trunk@413 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2007-03-14 06:48:17 +00:00
parent 3f1265e10a
commit b1bdf645d5
17 changed files with 5 additions and 606 deletions

View file

@ -48,7 +48,7 @@
require_once("./classes/db/DB.class.php");
require_once("./classes/file/FileHandler.class.php");
require_once("./classes/object/Object.class.php");
require_once("./classes/module/Plugin.class.php");
require_once("./classes/plugin/Plugin.class.php");
require_once("./classes/module/ModuleObject.class.php");
require_once("./classes/module/ModuleHandler.class.php");
require_once("./classes/display/DisplayHandler.class.php");

View file

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1">
<title xml:lang="ko">레이아웃 관리</title>
<title xml:lang="en">layout management</title>
<title xml:lang="ko">플러그인 관리</title>
<title xml:lang="en">plugin management</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</name>
<name xml:lang="en">zero</name>
<description xml:lang="ko">레이아웃 관리 모듈</description>
<description xml:lang="en">layout management</description>
<description xml:lang="ko">플러그인 관리 모듈</description>
<description xml:lang="en">plugin management</description>
</author>
</module>

View file

@ -1,19 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<actions>
<action name="dispContent" type="view" admin_index="true" standalone="true" />
<action name="dispInsertLayout" type="view" standalone="true" />
<action name="dispLayoutMenu" type="view" standalone="true" />
<action name="dispDownloadedLayoutList" type="view" standalone="true" />
<action name="dispLayoutInfo" type="view" standalone="true" />
<action name="getLayoutMenuSrl" type="model" standalone="true" />
<action name="getMenuTplInfo" type="model" standalone="true" />
<action name="procInsertLayout" type="controller" standalone="true" />
<action name="procUpdateLayout" type="controller" standalone="true" />
<action name="procDeleteLayout" type="controller" standalone="true" />
<action name="procInsertLayoutMenu" type="controller" standalone="true" />
<action name="procDeleteLayoutMenu" type="controller" standalone="true" />
<action name="procMakeXmlFile" type="controller" standalone="true" />
<action name="procMoveLayoutMenu" type="controller" standalone="true" />
</actions>
</module>

View file

@ -1,37 +0,0 @@
<!--#include("header.html")-->
<!-- 레이아웃의 목록 -->
<div>
<table border="1" width="100%">
<tr>
<td>{$lang->layout_name}</td>
<td>{$lang->version}</td>
<td>{$lang->author}</td>
<td>{$lang->menu_count}</td>
<td>{$lang->date}</td>
<td>{$lang->path}</td>
<td>{$lang->layout_info}</td>
<td>{$lang->cmd_make}</td>
</tr>
<!--@foreach($layout_list as $key => $val)-->
<tr>
<td rowspan="2">
{$val->title} <br />
({$val->layout})
</td>
<td>{$val->version}</td>
<td><a href="#" onclick="window.open('{$val->author->homepage}')">{$val->author->name}</a></td>
<td>{$val->menu_count}</td>
<td>{$val->author->date}</td>
<td>{$val->path}</td>
<td><a href="#" onclick="winopen('{getUrl('','module','layout','act','dispLayoutInfo','selected_layout',$val->layout)}','layout_info','width=10,height=10,toolbars=no,scrollbars=yes,resizable=yes');return false">{$lang->cmd_view}</a></td>
<td><a href="{getUrl('mo','layout','act','dispInsertLayout','layout',$val->layout)}">{$lang->cmd_make}</a></td>
</tr>
<tr>
<td colspan="7">
{nl2br($val->author->description)}
</td>
</tr>
<!--@end-->
</table>
</div>

View file

@ -1,9 +0,0 @@
<filter name="delete_layout" module="layout" act="procDeleteLayout" confirm_msg_code="confirm_delete">
<form>
<node target="layout_srl" required="true" />
</form>
<response>
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -1,16 +0,0 @@
<filter name="delete_layout_menu" module="layout" act="procDeleteLayoutMenu" confirm_msg_code="confirm_delete">
<form>
<node target="layout_srl" required="true" />
<node target="layout" required="true" />
<node target="menu_srl" required="true" />
<node target="menu_id" required="true" />
</form>
<response callback_func="completeInsertLayoutMenu">
<tag name="error" />
<tag name="message" />
<tag name="menu_srl" />
<tag name="xml_file" />
<tag name="menu_id" />
<tag name="menu_title" />
</response>
</filter>

View file

@ -1,14 +0,0 @@
<filter name="insert_layout" module="layout" act="procInsertLayout" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" />
</form>
<parameter>
<param name="layout" target="layout" />
<param name="title" target="title" />
</parameter>
<response callback_func="completeInsertLayout">
<tag name="error" />
<tag name="message" />
<tag name="layout_srl" />
</response>
</filter>

View file

@ -1,17 +0,0 @@
<filter name="insert_layout_menu" module="layout" act="procInsertLayoutMenu" confirm_msg_code="confirm_submit">
<form>
<node target="layout_srl" required="true" />
<node target="layout" required="true" />
<node target="menu_srl" required="true" />
<node target="menu_id" required="true" />
<node target="menu_name" required="true" />
</form>
<response callback_func="completeInsertLayoutMenu">
<tag name="error" />
<tag name="message" />
<tag name="menu_srl" />
<tag name="xml_file" />
<tag name="menu_id" />
<tag name="menu_title" />
</response>
</filter>

View file

@ -1,10 +0,0 @@
<filter name="move_layout_menu" module="layout" act="procMoveLayoutMenu" confirm_msg_code="confirm_move">
<form />
<parameter />
<response callback_func="completeMoveLayoutMenu">
<tag name="error" />
<tag name="message" />
<tag name="menu_id" />
<tag name="source_node_srl" />
</response>
</filter>

View file

@ -1,9 +0,0 @@
<filter name="update_layout_info" module="layout" act="procUpdateLayout" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" />
</form>
<response>
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -1,7 +0,0 @@
<!--%import("js/admin.js")-->
<div style="margin-bottom:20px;">
<span <!--@if($act=='dispContent')-->style="font-weight:bold"<!--@end-->>[<a href="{getUrl('act','dispContent')}">{$lang->layout_list}</a>]</span>
<span <!--@if($act=='dispDownloadedLayoutList')-->style="font-weight:bold"<!--@end-->>[<a href="{getUrl('act','dispDownloadedLayoutList')}">{$lang->downloaded_list}</a>]</span>
</div>

View file

@ -1,40 +0,0 @@
<!--%import("js/admin.js")-->
<!--%import("filter/delete_layout.xml")-->
<!--#include("header.html")-->
<div>
{$lang->total_count} {number_format(count($layout_list))}
</div>
<!-- 삭제를 위한 임시 form -->
<form id="fo_layout" action="./" method="get" onsubmit="return procFilter(this, delete_layout)">
<input type="hidden" name="layout_srl" value="" />
</form>
<!-- 목록 -->
<div>
<table>
<tr>
<th>{$lang->no}</th>
<th>{$lang->layout}</th>
<th>{$lang->title}</th>
<th>{$lang->regdate}</th>
<th>{$lang->cmd_delete}</th>
</tr>
<!--@foreach($layout_list as $no => $val)-->
<tr>
<td>{$no+1}</td>
<td>{$val->layout}</td>
<td><a href="#" onclick="location.href='{getUrl('act','dispLayoutMenu','layout_srl',$val->layout_srl)}';return false;">{$val->title}</a></td>
<td>{zdate($val->regdate,"Y-m-d")}</td>
<td><a href="#" onclick="doDeleteLayout('{$val->layout_srl}');return false;">{$lang->cmd_delete}</a></td>
</tr>
<!--@end-->
</table>
</div>
<!-- 버튼 -->
<div>
[<a href="{getUrl('act','dispInsertLayout','layout_srl','')}">{$lang->cmd_make}</a>]
</div>

View file

@ -1,34 +0,0 @@
<!--%import("js/admin.js")-->
<!--%import("filter/insert_layout.xml")-->
<!--#include("header.html")-->
<form action="./" method="get" onsubmit="return procFilter(this, insert_layout)">
<div style="margin-bottom:10px;">
<table border="1" width="100%">
<tr>
<th>{$lang->layout_name}</th>
<td>
<select name="layout">
<!--@foreach($layout_list as $key => $val)-->
<option value="{$val->layout}" <!--@if($layout == $val->layout)-->selected="true"<!--@end-->>{$val->title} ({$val->layout})</option>
<!--@end-->
</select>
</td>
</tr>
<tr>
<th rowspan="2">{$lang->title}</th>
<td><input type="text" name="title" value="{$info->title}" /></td>
</tr>
<tr>
<td>{$lang->about_title}</td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="{$lang->cmd_list}" onclick="location.href='{getUrl('act',dispContent)}';return false;" />
<input type="submit" value="{$lang->cmd_next}" />
</td>
</tr>
</table>
</div>
</form>

View file

@ -1,130 +0,0 @@
/* 레이아웃 신규 생성시 완료 후 요청하는 함수 */
function completeInsertLayout(ret_obj) {
var layout_srl = ret_obj['layout_srl'];
location.href="./?module=admin&mo=layout&act=dispLayoutMenu&layout_srl="+layout_srl;
}
/* 레이아웃메뉴 입력후 */
function completeInsertLayoutMenu(ret_obj) {
var menu_id = ret_obj['menu_id'];
var xml_file = ret_obj['xml_file'];
var menu_title = ret_obj['menu_title'];
var menu_srl = ret_obj['menu_srl'];
if(!xml_file) return;
loadTreeMenu(xml_file, menu_id, "menu_zone_"+menu_id, menu_title, doGetMenuInfo, menu_srl, doMoveTree);
if(!menu_srl) {
xInnerHtml("menu_zone_info_"+menu_id, "");
}
}
/* 레이아웃 삭제 */
function doDeleteLayout(layout_srl) {
var fo_obj = xGetElementById("fo_layout");
if(!fo_obj) return;
fo_obj.layout_srl.value = layout_srl;
procFilter(fo_obj, delete_layout);
}
/* 레이아웃 메뉴 삭제 */
function doDeleteLayoutMenu(menu_srl, menu_id) {
var fo_obj = xGetElementById("fo_"+menu_id);
if(!fo_obj) return;
procFilter(fo_obj, delete_layout_menu);
}
/* 레이아웃 메뉴에를 클릭시 적용할 함수 */
function doGetMenuInfo(menu_id, obj) {
// layout, menu_id, node_srl을 추출
var fo_obj = xGetElementById("fo_layout");
var layout = fo_obj.layout.value;
var node_srl = 0;
var parent_srl = 0;
if(typeof(obj.getAttribute)!="undefined") {
node_srl = obj.getAttribute("node_srl");
} else {
node_srl = obj.node_srl;
parent_srl = obj.parent_srl;
}
var params = new Array();
params["menu_id"] = menu_id;
params["layout"] = layout;
params["menu_srl"] = node_srl;
params["parent_srl"] = parent_srl;
// 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다.
var response_tags = new Array('error','message','menu_id', 'tpl');
exec_xml('layout', 'getMenuTplInfo', params, completeGetMenuInfo, response_tags, params);
}
/* 메뉴를 드래그하여 이동한 후 실행할 함수 , 이동하는 node_srl과 대상 node_srl을 받음 */
function doMoveTree(menu_id, source_node_srl, target_node_srl) {
var fo_obj = xGetElementById("fo_move_menu");
fo_obj.menu_id.value = menu_id;
fo_obj.source_node_srl.value = source_node_srl;
fo_obj.target_node_srl.value = target_node_srl;
// 이동 취소를 선택하였을 경우 다시 그림;;
if(!procFilter(fo_obj, move_layout_menu)) {
var params = new Array();
params["menu_id"] = menu_id;
params["source_node_srl"] = source_node_srl;
completeMoveLayoutMenu(params);
}
}
function completeMoveLayoutMenu(ret_obj) {
var menu_id = ret_obj['menu_id'];
var source_node_srl = ret_obj['source_node_srl'];
var fo_menu = xGetElementById("fo_"+menu_id);
if(!fo_menu) return;
var params = new Array();
params["menu_id"] = menu_id;
params["layout"] = fo_menu.layout.value;
params["layout_srl"] = fo_menu.layout_srl.value;
var xml_file = fo_menu.xml_file.value;
var menu_title = fo_menu.menu_title.value;
var tmp = source_node_srl.split('_');
var menu_srl = tmp[tmp.length-1];
loadTreeMenu(xml_file, menu_id, "menu_zone_"+menu_id, menu_title, doGetMenuInfo, menu_srl, doMoveTree);
}
/* 서버로부터 받아온 메뉴 정보를 출력 */
function completeGetMenuInfo(ret_obj, response_tags) {
var menu_id = ret_obj['menu_id'];
var tpl = ret_obj['tpl'];
xInnerHtml("menu_zone_info_"+menu_id, "");
xInnerHtml("menu_zone_info_"+menu_id, tpl);
var fo_obj = xGetElementById("fo_"+menu_id);
fo_obj.menu_name.focus();
}
/* 빈 메뉴 추가시 사용 */
function doInsertLayoutMenu(menu_id, parent_srl) {
if(typeof(parent_srl)=='undefined') parent_srl = 0;
var params = {node_srl:0, parent_srl:parent_srl}
doGetMenuInfo(menu_id, params);
deSelectNode();
}
/* 메뉴 목록 갱신 */
function doReloadTreeMenu(menu_id) {
var fo_obj = xGetElementById("fo_"+menu_id);
if(!fo_obj) return;
var params = new Array();
params["menu_id"] = menu_id;
params["layout"] = fo_obj.layout.value;
params["layout_srl"] = fo_obj.layout_srl.value;
// 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다.
var response_tags = new Array('error','message','menu_id', 'xml_file', 'menu_title');
exec_xml('layout', 'procMakeXmlFile', params, completeInsertLayoutMenu, response_tags, params);
}

View file

@ -1,56 +0,0 @@
<table border="1" width="400">
<col width="100" />
<col width="300" />
<tr>
<th colspan="2">{$lang->layout_maker}</th>
</tr>
<tr>
<th>{$lang->title}</th>
<td>{$layout_info->title} ver {$layout_info->version}</td>
</tr>
<tr>
<th>{$lang->author}</th>
<td><a href="mailto:{$layout_info->author->email_address}">{$layout_info->author->name}</a></td>
</tr>
<tr>
<th>{$lang->homepage}</th>
<td><a href="#" onclick="window.open('{$layout_info->author->homepage}');return false;">{$layout_info->author->homepage}</a></td>
</tr>
<tr>
<th>{$lang->regdate}</th>
<td>{$layout_info->author->date}</td>
</tr>
<tr>
<th>{$lang->description}</th>
<td>{nl2br($layout_info->author->description)}</td>
</tr>
<tr>
<th colspan="2">{$lang->layout_history}</th>
</tr>
<!--@foreach($layout_info->history as $history)-->
<!--@if($history->name)-->
<tr>
<th>{$lang->name}</th>
<td><a href="mailto:{$history->email_address}">{$history->name}</a></td>
</tr>
<tr>
<th>{$lang->homepage}</th>
<td><a href="#" onclick="window.open('{$history->homepage}');return false;">{$history->homepage}</a></td>
</tr>
<tr>
<th>{$lang->regdate}</th>
<td>{$history->date}</td>
</tr>
<tr>
<th>{$lang->description}</th>
<td>{nl2br($history->description)}</td>
</tr>
<!--@end-->
<!--@end-->
<tr>
<td colspan="2">
<a href="#" onclick="self.close()">{$lang->cmd_close}</a>
</td>
</tr>
</table>

View file

@ -1,128 +0,0 @@
<!--%import("js/admin.js")-->
<!--%import("filter/update_layout_info.xml")-->
<!--%import("filter/insert_layout_menu.xml")-->
<!--%import("filter/delete_layout_menu.xml")-->
<!--%import("filter/move_layout_menu.xml")-->
<!--#include("header.html")-->
<!-- 메뉴 이동을 위해 임시로 사용하는 form -->
<form id="fo_move_menu">
<input type="hidden" name="menu_id" />
<input type="hidden" name="source_node_srl" />
<input type="hidden" name="target_node_srl" />
</form>
<div style="margin-bottom:10px;">
<table border="1" width="100%">
<col width="140" />
<col width="*" />
<tr>
<th>{$lang->layout}</th>
<td>{$layout_info->title} ver {$layout_info->version} ({$layout_info->layout})</td>
</tr>
<tr>
<th>{$lang->path}</th>
<td>{$layout_info->path}</td>
</tr>
<tr>
<th>{$lang->author}</th>
<td><a href="#" onclick="window.open('{$layout_info->author->homepage}');return false;">{$layout_info->author->name}</a></td>
</tr>
<tr>
<th>{$lang->description}</th>
<td>{nl2br($layout_info->author->description)}</td>
</tr>
</table>
</div>
<div style="margin-bottom:10px;">
<form id="fo_layout" action="./" method="get" onsubmit="return procFilter(this, update_layout_info)">
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="layout" value="{$layout_info->layout}" />
<table border="1" width="100%">
<col width="140" />
<col width="*" />
<tr>
<th>{$lang->title}</th>
<td><input type="text" name="title" value="{$layout_info->layout_title}" /></td>
</tr>
<!--@foreach($layout_info->extra_var as $id => $var)-->
<tr>
<th>{$var->name}</th>
<!--@if($var->type == "text")-->
<td><input type="text" name="{$id}" value="{$var->value}" /></td>
<!--@elseif($var->type == "textarea")-->
<td><textarea name="{$id}">{$var->value}</textarea></td>
<!--@elseif($var->type == "select")-->
<td>
<select name="{$id}">
<!--@foreach($var->options as $key => $val)-->
<option value="{$val}" <!--@if($val==$var->value)-->selected="true"<!--@end-->>{$val}</option>
<!--@end-->
</select>
<!--@end-->
</tr>
<!--@end-->
<tr>
<td colspan="2" align="center">
<input type="button" value="{$lang->cmd_list}" onclick="location.href='{getUrl('act','dispContent')}';return false;"/>
<input type="submit" value="{$lang->cmd_save}" />
</td>
</tr>
</table>
</form>
</div>
<div style="margin-bottom:10px;">
<table border="1" width="100%">
<col width="140" />
<col width="*" />
<tr>
<th>{$lang->menu_management}</th>
<td>{nl2br($lang->about_menu_management)}</td>
</tr>
<!--@foreach($layout_info->menu as $menu_id => $menu)-->
<tr>
<th>
{$menu->name} <br />
({$menu->maxdepth} {$lang->depth})
</th>
<td>
<form id="fo_{$menu_id}" action="./" method="get" onsubmit="return procFilter(this, insert_layout_menu)">
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="layout" value="{$layout_info->layout}" />
<input type="hidden" name="menu_id" value="{$menu_id}" />
<input type="hidden" name="menu_title" value="{$menu->name}" />
<input type="hidden" name="xml_file" value="{$menu->xml_file}" />
<table border="0">
<tr valign="top">
<td width="350">
<div id="menu_zone_{$menu_id}"></div>
<div>
<input type="checkbox" id="{$menu_id}_enable_move" /> <label for="{$menu_id}_enable_move">{$lang->cmd_enable_move_menu}</label>
</div>
<div>
<input type="button" value="{$lang->cmd_insert}" onclick="doInsertLayoutMenu('{$menu_id}');return false;" />
<input type="button" value="{$lang->cmd_open_all}" onclick="openAllTreeMenu('{$menu_id}');return false;" />
<input type="button" value="{$lang->cmd_close_all}" onclick="closeAllTreeMenu('{$menu_id}');return false;" />
<input type="button" value="{$lang->cmd_remake_cache}" onclick="doReloadTreeMenu('{$menu_id}');return false;" />
</div>
</td>
<td>
<div id="menu_zone_info_{$menu_id}">
</div>
</td>
</tr>
</table>
</form>
<script type="text/javascript">
loadTreeMenu("{$menu->xml_file}", "{$menu_id}", "menu_zone_{$menu_id}", "{$menu->name}", doGetMenuInfo, 0, doMoveTree);
</script>
</td>
</tr>
<!--@end-->
</table>
</div>

View file

@ -1,81 +0,0 @@
<input type="hidden" name="menu_srl" value="{$menu_info->menu_srl}" />
<input type="hidden" name="parent_srl" value="{$menu_info->parent_srl}" />
<table border="1" width="100%">
<col width="100" />
<col width="*" />
<!--@if($menu_info->parent_menu_name)-->
<tr>
<th>{$lang->parent_menu_name}</th>
<td>{$menu_info->parent_menu_name}</td>
</tr>
<!--@end-->
<tr>
<th rowspan="2">{$lang->menu_name}</th>
<td><input type="text" name="menu_name" value="{htmlspecialchars($menu_info->name)}" /></td>
</tr>
<tr>
<td>{$lang->about_menu_name}</td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_url}</th>
<td><input type="text" name="menu_url" value="{htmlspecialchars($menu_info->url)}" /></td>
</tr>
<tr>
<td>{$lang->about_menu_url}</td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_open_window}</th>
<td><input type="checkbox" name="menu_open_window" value="Y" <!--@if($menu_info->open_window=="Y")-->checked="true"<!--@end--> /></td>
</tr>
<tr>
<td>{$lang->about_menu_open_window}</td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_expand}</th>
<td><input type="checkbox" name="menu_expand" value="Y" <!--@if($menu_info->expand=="Y")-->checked="true"<!--@end--> /></td>
</tr>
<tr>
<td>{$lang->about_menu_expand}</td>
</tr>
<tr>
<th>{$lang->menu_img_btn}</th>
<td>{$lang->about_menu_img_btn}</td>
</tr>
<tr>
<td>{$lang->menu_normal_btn}</td>
<td><input type="text" name="menu_normal_btn" value="{htmlspecialchars($menu_info->normal_btn)}" /></td>
</tr>
<tr>
<td>{$lang->menu_hover_btn}</td>
<td><input type="text" name="menu_hover_btn" value="{htmlspecialchars($menu_info->hover_btn)}" /></td>
</tr>
<tr>
<td>{$lang->menu_active_btn}</td>
<td><input type="text" name="menu_active_btn" value="{htmlspecialchars($menu_info->active_btn)}" /></td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_group_srls}</th>
<td>
<!--@foreach($group_list as $key=>$val)-->
<input type="checkbox" name="group_srls" value="{$key}" id="group_{$key}" <!--@if(in_array($key, $menu_info->group_srls))-->checked="true"<!--@end-->/>
<label for="group_{$key}">{$val->title}</label>
<!--@end-->
</td>
</tr>
<tr>
<td>{$lang->about_menu_group_srls}</td>
</tr>
<tr>
<td colspan="2">
<!--@if($menu_info->name)-->
<input type="submit" value="{$lang->cmd_save}" />
<input type="button" value="{$lang->cmd_make_child}" onclick="doInsertLayoutMenu('{$menu_info->menu_id}','{$menu_info->menu_srl}');return false" />
<input type="button" value="{$lang->cmd_delete}" onclick="doDeleteLayoutMenu('{$menu_srl}','{$menu_info->menu_id}');return false" />
<!--@else-->
<input type="submit" value="{$lang->cmd_submit}" />
<!--@end-->
</td>
</tr>
</table>