css 및 js 호출순서 조정기능 추가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@5785 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2009-03-06 05:33:56 +00:00
parent 4f380d9c48
commit 61851f1dfe
2149 changed files with 109090 additions and 18689 deletions

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">위젯</title>
<title xml:lang="zh-CN">控件</title>
<title xml:lang="zh-CN">控件管理</title>
<title xml:lang="jp">ウィジェット</title>
<title xml:lang="en">Widget</title>
<title xml:lang="es">Widget</title>
@ -16,7 +16,7 @@
<description xml:lang="zh-TW">控件管理模組。</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>manager</category>
<category>construction</category>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>

View file

@ -1,14 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<grants />
<permissions />
<actions>
<action name="dispWidgetInfo" type="view" standalone="true" />
<action name="dispWidgetGenerateCode" type="view" standalone="true" />
<action name="dispWidgetGenerateCodeInPage" type="view" standalone="true" />
<action name="dispWidgetStyleGenerateCodeInPage" type="view" standalone="true" />
<action name="dispWidgetAdminDownloadedList" type="view" standalone="true" admin_index="true" />
<action name="dispWidgetAdminAddContent" type="view" standalone="true" />
<action name="procWidgetGenerateCode" type="controller" standalone="true" />
<action name="procWidgetStyleExtraImageUpload" type="controller" standalone="true" />
<action name="procWidgetStyleGenerateCodeInPage" type="controller" standalone="true" />
<action name="procWidgetAddContent" type="controller" standalone="true" />
<action name="procWidgetInsertDocument" type="controller" standalone="true" />
<action name="procWidgetCopyDocument" type="controller" standalone="true" />
@ -16,5 +19,8 @@
<action name="procWidgetGenerateCodeInPage" type="controller" standalone="true" />
<action name="procWidgetGetColorsetList" type="controller" standalone="true" />
<action name="procWidgetRemoveContents" type="controller" standalone="true" />
<action name="procWidgetStyleExtraImageUpload" type="controller" standalone="true" />
<action name="procWidgetStyleGenerateCodeInPage" type="controller" standalone="true" />
</actions>
</module>
</module>

View file

@ -33,6 +33,7 @@
$lang->about_widget_cache = 'Cached data can be used during the time you have set.';
$lang->generated_code = 'Generated Code';
$lang->widgetstyle= '위젯스타일';
$lang->msg_widget_is_not_exists = "'%s' does not exist.";
$lang->msg_widget_object_is_null = "Object of '%s' could not be created.";

View file

@ -33,6 +33,7 @@
$lang->about_widget_cache = 'Se puede usar datos de caché creado durante el tiempo asignado.';
$lang->generated_code = 'Generar códigos';
$lang->widgetstyle= '위젯스타일';
$lang->msg_widget_is_not_exists = 'No existe widget %s .';
$lang->msg_widget_object_is_null = 'No puede ser creado el objeto de widget %s.';

View file

@ -33,6 +33,7 @@
$lang->about_widget_cache = 'Les données d\'antémémoire peuvent être utilisées pendant le temps que vous désignez.';
$lang->generated_code = 'Code généré';
$lang->widgetstyle= '위젯스타일';
$lang->msg_widget_is_not_exists = "Le Gadget de(d') '%s' n'existe pas.";
$lang->msg_widget_object_is_null = "L'Objet de '%s' n'a pas pu être créé.";

View file

@ -33,6 +33,7 @@
$lang->about_widget_cache = '指定された時間内にキャッシュされたデータが利用できます。';
$lang->generated_code = '生成コード';
$lang->widgetstyle= '위젯스타일';
$lang->msg_widget_is_not_exists = '%s ウィジェットが見つかりません。';
$lang->msg_widget_object_is_null = '%s ウィジェットのオブジェクトが生成できません。';

View file

@ -33,6 +33,7 @@
$lang->about_widget_cache = '지정된 시간동안 캐시된 데이터를 이용할 수 있습니다.';
$lang->generated_code = '생성된 코드';
$lang->widgetstyle= '위젯스타일';
$lang->msg_widget_is_not_exists = '%s 위젯을 찾을 수 없습니다';
$lang->msg_widget_object_is_null = '%s 위젯의 객체 생성을 할 수가 없습니다';
@ -43,25 +44,25 @@
$lang->about_widget_code_in_page = '아래 필요한 값들을 입력하신 후 추가 버튼을 누르시면 페이지 내에 위젯이 삽입이 됩니다';
$lang->about_widget = "위젯은 레이아웃이나 페이지 모듈에서 사용되는 작은 구성요소입니다.\n내부 모듈 또는 외부 open api와 연동될 수도 있고 설정을 통해서 다양한 응용이 가능합니다.\nXE의 페이지 모듈이나 레이아웃 모듈을 사용하지 않더라도 [코드생성] 기능을 통해 직접 위젯 추가도 할 수 있습니다";
$lang->cmd_content_insert = "내용 직접 추가";
$lang->cmd_box_widget_insert = "상자 위젯 추가";
$lang->cmd_remove_all_widgets = "내용 모두 지우기";
$lang->cmd_content_insert = '내용 직접 추가';
$lang->cmd_box_widget_insert = '상자 위젯 추가';
$lang->cmd_remove_all_widgets = '내용 모두 지우기';
$lang->cmd_widget_size = "위젯 크기";
$lang->cmd_widget_align = "위젯 정렬";
$lang->cmd_widget_align_left = "왼쪽";
$lang->cmd_widget_align_right = "오른쪽";
$lang->cmd_widget_margin = "외부 여백";
$lang->cmd_widget_padding = "내부 여백";
$lang->cmd_widget_border = "위젯 테두리";
$lang->cmd_widget_border_solid = "실선";
$lang->cmd_widget_border_dotted = "점선";
$lang->cmd_widget_background_color = "배경색";
$lang->cmd_widget_background_image_url = "배경 이미지";
$lang->cmd_widget_background_image_repeat = "반복";
$lang->cmd_widget_background_image_no_repeat = "고정";
$lang->cmd_widget_background_image_x_repeat = "가로 반복";
$lang->cmd_widget_background_image_y_repeat = "세로 반복";
$lang->cmd_widget_background_image_x = "가로 위치";
$lang->cmd_widget_background_image_y = "세로 위치";
$lang->cmd_widget_size = '위젯 크기';
$lang->cmd_widget_align = '위젯 정렬';
$lang->cmd_widget_align_left = '왼쪽';
$lang->cmd_widget_align_right = '오른쪽';
$lang->cmd_widget_margin = '외부 여백';
$lang->cmd_widget_padding = '내부 여백';
$lang->cmd_widget_border = '위젯 테두리';
$lang->cmd_widget_border_solid = '실선';
$lang->cmd_widget_border_dotted = '점선';
$lang->cmd_widget_background_color = '배경색';
$lang->cmd_widget_background_image_url = '배경 이미지';
$lang->cmd_widget_background_image_repeat = '반복';
$lang->cmd_widget_background_image_no_repeat = '고정';
$lang->cmd_widget_background_image_x_repeat = '가로 반복';
$lang->cmd_widget_background_image_y_repeat = '세로 반복';
$lang->cmd_widget_background_image_x = '가로 위치';
$lang->cmd_widget_background_image_y = '세로 위치';
?>

View file

@ -33,6 +33,7 @@
$lang->about_widget_cache = 'Кешированные данные будут использоваться на указанный срок.';
$lang->generated_code = 'Сгенерированный код';
$lang->widgetstyle= '위젯스타일';
$lang->msg_widget_is_not_exists = '%s виджет не существует.';
$lang->msg_widget_object_is_null = '%s объектов виджета не могут быть созданы.';

View file

@ -1,8 +1,8 @@
<?php
/**
* @file modules/widget/lang/zh-CN.lang.php
* @author zero <zero@nzeo.com>
* @brief 控件(widget) 模块语言包
* @author zero <zero@nzeo.com> 翻译guny
* @brief 控件(widget)模块简体中文语言包
**/
$lang->cmd_generate_code = '生成代码';
@ -33,13 +33,14 @@
$lang->about_widget_cache = '指定的时间内可以利用已缓冲的数据。';
$lang->generated_code = '已生成的代码';
$lang->widgetstyle= '控件样式';
$lang->msg_widget_is_not_exists = '找不到%s控件';
$lang->msg_widget_object_is_null = '无法生成%s控件对象';
$lang->msg_widget_proc_is_null = '不能执行%s控件的 proc()';
$lang->msg_widget_skin_is_null = '위젯의 스킨을 선택해 주셔야 정상적으로 동작할 수 있습니다';
$lang->msg_widget_skin_is_null = '请选择控件皮肤!';
$lang->about_widget_code = '输入选控件所需要的下列各项后,按『代码生成』按钮,即可在页面下方获得可以用在布局模版代码片断。';
$lang->about_widget_code = '输入选控件所需要的下列各项后,按『代码生成』按钮,即可在页面下方获得可以用在布局模版代码片断。';
$lang->about_widget_code_in_page = '输入下列各项必要值后,按『生成代码』按钮,即可把控件插入到页面当中。';
$lang->about_widget = "控件是在布局或页面模块中使用的一种小部件。\n不仅可以关联内部模块或外部open api而且通过设置可以用在多种用途。\n即使不使用XE的页面模块或布局模块也可以通过『代码生成』功能直接可以添加相应控件。";

View file

@ -33,11 +33,12 @@
$lang->about_widget_cache = '指定的時間內可以利用已暫存的資料。';
$lang->generated_code = '已建立的原始碼';
$lang->widgetstyle= '控件樣式';
$lang->msg_widget_is_not_exists = '找不到%s控件';
$lang->msg_widget_object_is_null = '無法建立%s控件目標';
$lang->msg_widget_proc_is_null = '無法執行%s控件的 proc()';
$lang->msg_widget_skin_is_null = '위젯의 스킨을 선택해 주셔야 정상적으로 동작할 수 있습니다';
$lang->msg_widget_skin_is_null = '請選擇一個可正常使用的控件面板';
$lang->about_widget_code = '輸入所選控件所需要的各項資料後,按『建立原始碼』按鈕,即可在頁面下方獲得運用在版面設計中的部分原始碼。';
$lang->about_widget_code_in_page = '輸入下列各項必要資料後,按『建立原始碼』按鈕,即可把控件插入到頁面當中。';

View file

@ -1,7 +1,10 @@
<!--%import("js/widget.js")-->
<!--%import("css/widget.css")-->
<div class="pageAddContent"></div>
<div id="popHeader" class="wide">
<h3 class="xeAdmin">{$lang->cmd_content_insert}</h3>
</div>
<form action="./" method="get" onsubmit="return addContentWidget(this); return false;" id="content_fo">
<input type="hidden" name="content" value="{$oDocument->getContentText()}" />
<input type="hidden" name="mid" value="{$module_info->mid}" />
@ -13,17 +16,20 @@
<input type="hidden" name="widget_padding_top" value="" />
<input type="hidden" name="widget_padding_bottom" value="" />
<div class="editor">
{$editor}
</div>
<div id="popBody">
<div class="pageAddContent"></div>
<div class="tCenter help">
<span class="button"><input type="submit" value="{$lang->cmd_insert}" class="editor_button" accesskey="s" /></span>
<a href="#" onclick="window.close(); return false;" class="button"><span>{$lang->cmd_close}</span></a>
</div>
<div class="editor">
{$editor}
</div>
<script type="text/javascript">
xAddEventListener(window, 'load', doSyncPageContent);
</script>
</div>
<div id="popFooter">
<span class="button black strong"><input type="submit" value="{$lang->cmd_save}" class="editor_button" accesskey="s" /></span>
</div>
</form>
<script type="text/javascript">
xAddEventListener(window, 'load', doSyncPageContent);
</script>

View file

@ -26,6 +26,7 @@
#widgetButton { background-color:#C7DBE9;left:0; top:0;}
#widgetBoxButton { background-color:#D2E9C7; right:0; top:0;}
.widgetButtons div { float:left; }
.widgetButtons .widgetStyle { background:transparent url("../images/widgetstyle_setup.gif") no-repeat 1px 1px; width:14px; height:14px; cursor:pointer; z-index:1000;}
.widgetButtons .widgetSetup { background:transparent url("../images/widget_setup.gif") no-repeat 1px 1px; width:14px; height:14px; cursor:pointer; z-index:1000;}
.widgetButtons .widgetCopy { background:transparent url("../images/widget_copy.gif") no-repeat 1px 1px; width:14px; height:14px; cursor:pointer; z-index:1000;}
.widgetButtons .widgetSize { background:transparent url("../images/widget_size.gif") no-repeat 1px 1px; width:14px; height:14px; cursor:pointer; z-index:1000;}
@ -55,3 +56,7 @@ div.editor { width:700px; }
ul.midCommand { float:left; margin:0 0 0 10px;; padding:0; *zoom:1; }
ul.midCommand li { display:block; margin-bottom:5px; list-style:none;}
a.widgetStyle { float:left; margin-right:10px; border:1px solid #CCC; overflow:hidden; *zoom:1; }
a.widgetStyle:hover { border:1px solid #444; }
a.widgetStyle.selected { border:1px solid #000; }
a.widgetStyle img {width:96px; height:96px; margin:1px; }

View file

@ -1,10 +1,10 @@
<h3>{$lang->widget} <span class="gray">{$lang->cmd_management}</span></h3>
<h3 class="xeAdmin">{$lang->widget} <span class="gray">{$lang->cmd_management}</span></h3>
<!-- 설명 -->
<div class="infoText">{nl2br($lang->about_widget)}</div>
<!-- 위젯의 목록 -->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="crossTable">
<thead>
<tr>
<th scope="col"><div>{$lang->widget_name}<div></th>

View file

@ -0,0 +1,9 @@
<filter name="style_generate_code_in_page" module="widget" act="procWidgetGenerateCodeInPage">
<response callback_func="completeGenerateCodeInPage">
<tag name="error" />
<tag name="message" />
<tag name="widget_code" />
<tag name="tpl" />
<tag name="css_header" />
</response>
</filter>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

View file

@ -6,19 +6,19 @@
/* document.write(ln)의 경우 ajax로 처리시 가로채기 위한 함수 */
document.write = document.writeln = function(str){
if ( str.match(/^<\//) ) return;
if ( !window.opera ) str = str.replace(/&(?![#a-z0-9]+;)/g, "&");
if ( str.match(/^<\//) ) return;
if ( !window.opera ) str = str.replace(/&(?![#a-z0-9]+;)/g, "&");
str = str.replace(/(<[a-z]+)/g, "$1 xmlns='http://www.w3.org/1999/xhtml'");
var div = null;
if(document.createElementNS) div = document.createElementNS("http://www.w3.org/1999/xhtml","div");
else div = xCreateElement('div');
xInnerHtml(div, str);
var pos;
var pos;
pos = document.getElementsByTagName("*");
pos = pos[pos.length - 1];
var nodes = div.childNodes;
while ( nodes.length ) {
pos.parentNode.appendChild( nodes[0] );
var nodes = div.childNodes;
while ( nodes.length ) {
pos.parentNode.appendChild( nodes[0] );
}
};
@ -61,7 +61,9 @@ function doStartPageModify(zoneID, module_srl) {
var dummy = xCreateElement("div");
xInnerHtml(dummy, xInnerHtml(obj));
dummy.id="pageSizeLayer";
dummy.className=obj.className;
dummy.style.visibility = "hidden";
dummy.style.display = "block";
dummy.style.position = "absolute";
dummy.style.left = 0;
dummy.style.top = 0;
@ -115,21 +117,54 @@ function getWidgetContent(obj) {
}
childObj = childObj.nextSibling;
}
return html;
}
// 컨텐츠 위젯 코드 구함
function getContentWidgetCode(childObj, widget) {
var cobj = childObj.firstChild;
while(cobj) {
if(cobj.nodeName == "DIV" && cobj.className == "widgetContent") {
var body = xInnerHtml(cobj);
var document_srl = childObj.getAttribute('document_srl');
if(document_srl>0) body = '';
return '<img src="./common/tpl/images/widget_bg.jpg" class="zbxe_widget_output" widget="widgetContent" style="'+getStyle(childObj)+'" body="'+body+'" document_srl="'+document_srl+'" widget_padding_left="'+getPadding(childObj,'left')+'" widget_padding_right="'+getPadding(childObj, 'right')+'" widget_padding_top="'+getPadding(childObj, 'top')+'" widget_padding_bottom="'+getPadding(childObj,'bottom')+'" />';
var widgetContent = jQuery('div.widgetContent',childObj);
var body = '';
var document_srl = 0;
var attrs ='';
if(widgetContent.size() > 0){
document_srl = jQuery(childObj).attr('document_srl');
if(document_srl>0){
body = '';
}else{
body = widgetContent.html();
}
cobj = cobj.nextSibling;
for(var i=0;i<childObj.attributes.length;i++) {
if(!childObj.attributes[i].nodeName || !childObj.attributes[i].nodeValue) continue;
var name = childObj.attributes[i].nodeName.toLowerCase();
if(name == "contenteditable"
|| name == "id"
|| name=="style"
|| name=="src"
|| name=="widget"
|| name == "body"
|| name == "class"
|| name == "widget_width"
|| name == "widget_width_type"
|| name == "xdpx"
|| name == "xdpy"
|| name == "height"
|| name == "document_srl"
|| name == "widget_padding_left"
|| name == "widget_padding_right"
|| name == "widget_padding_top"
|| name == "widget_padding_bottom") continue;
var value = childObj.attributes[i].nodeValue;
if(!value) continue;
attrs += name+'="'+escape(value)+'" ';
}
return '<img src="./common/tpl/images/widget_bg.jpg" class="zbxe_widget_output" widget="widgetContent" style="'+getStyle(childObj)+'" body="'+body+'" document_srl="'+document_srl+'" widget_padding_left="'+getPadding(childObj,'left')+'" widget_padding_right="'+getPadding(childObj, 'right')+'" widget_padding_top="'+getPadding(childObj, 'top')+'" widget_padding_bottom="'+getPadding(childObj,'bottom')+'" '+attrs+' />';
}else{
return '';
}
}
@ -180,6 +215,7 @@ function doAddContent(mid) {
// 직접 내용을 입력하기 위한 에디터 활성화 작업 및 form 데이터 입력
function doSyncPageContent() {
if(opener && opener.selectedWidget) {
var fo_obj = xGetElementById("content_fo");
var sel_obj = opener.selectedWidget;
fo_obj.style.value = getStyle(opener.selectedWidget);
@ -211,7 +247,6 @@ function addContentWidget(fo_obj) {
var module_srl = fo_obj.module_srl.value;
var document_srl = fo_obj.document_srl.value;
var content = editorGetContent(editor_sequence);
var response_tags = new Array('error','message','document_srl');
var params = new Array();
params['editor_sequence'] = editor_sequence;
@ -219,12 +254,19 @@ function addContentWidget(fo_obj) {
params['module_srl'] = module_srl;
params['document_srl'] = document_srl;
exec_xml('widget',"procWidgetInsertDocument",params,completeAddContent,response_tags,params,fo_obj);
return false;
}
function completeAddContent(ret_obj, response_tags, params, fo_obj) {
var document_srl = ret_obj['document_srl'];
var contentWidget = opener.jQuery('div.widgetOutput[widget=widgetContent][document_srl='+document_srl+']');
var attr = null;
if(contentWidget.size()>0) {
attr = contentWidget.get(0).attributes;
}
var tpl = ''+
'<div class="widgetOutput" style="'+fo_obj.style.value+'" widget_padding_left="'+fo_obj.widget_padding_left.value+'" widget_padding_right="'+fo_obj.widget_padding_right.value+'" widget_padding_top="'+fo_obj.widget_padding_top.value+'" widget_padding_bottom="'+fo_obj.widget_padding_bottom.value+'" document_srl="'+document_srl+'" widget="widgetContent">'+
'<div class="widgetResize"></div>'+
@ -235,6 +277,17 @@ function completeAddContent(ret_obj, response_tags, params, fo_obj) {
'<div class="widgetContent" style="display:none;width:1px;height:1px;overflow:hidden;"></div>'+
'</div>';
var oTpl = jQuery(tpl);
if(attr) {
jQuery.each(attr,function(i){
if(!oTpl.attr(attr[i].name)){
oTpl.attr(attr[i].name,attr[i].value);
}
});
}
oTpl = jQuery('<div>').append(oTpl);
tpl = oTpl.html();
opener.doAddWidgetCode(tpl);
window.close();
}
@ -345,7 +398,17 @@ function doCheckWidget(e) {
if(!widget) return;
selectedWidget = p_obj;
if(widget == 'widgetContent') popopen(request_uri+"?module=widget&act=dispWidgetAdminAddContent&module_srl="+zoneModuleSrl+"&document_srl="+p_obj.getAttribute("document_srl"), "addContent");
else popopen(request_uri+"?module=widget&act=dispWidgetGenerateCodeInPage&selected_widget="+widget,'GenerateCodeInPage');
else popopen(request_uri+"?module=widget&act=dispWidgetGenerateCodeInPage&selected_widget="+widget+"&widgetstyle="+widgetstyle,'GenerateCodeInPage');
return;
// 위젯 스타일
} else if(obj.className == 'widgetStyle') {
var p_obj = obj.parentNode.parentNode;
var widget = p_obj.getAttribute("widget");
var widgetstyle = p_obj.getAttribute("widgetstyle");
if(!widget) return;
selectedWidget = p_obj;
popopen(request_uri+"?module=widget&act=dispWidgetStyleGenerateCodeInPage&selected_widget="+widget+"&widgetstyle="+widgetstyle,'GenerateCodeInPage');
return;
// 위젯 복사
@ -471,7 +534,7 @@ function doCheckWidgetDrag(e) {
doHideWidgetSizeSetup();
if(obj.className == 'widgetSetup' || obj.className == 'widgetCopy' || obj.className == 'widgetBoxCopy' || obj.className == 'widgetSize' || obj.className == 'widgetBoxSize' || obj.className == 'widgetRemove' || obj.className == 'widgetBoxRemove') return;
if(obj.className == 'widgetSetup' || obj.className == 'widgetStyle' || obj.className == 'widgetCopy' || obj.className == 'widgetBoxCopy' || obj.className == 'widgetSize' || obj.className == 'widgetBoxSize' || obj.className == 'widgetRemove' || obj.className == 'widgetBoxRemove') return;
p_obj = obj;
while(p_obj) {
@ -733,20 +796,15 @@ function showWidgetButton(name, obj) {
var widgetButton = xGetElementById(name);
if(!widgetButton) return;
widgetButton.style.visibility = 'visible';
obj.insertBefore(widgetButton, obj.firstChild);
/*
var cobj = obj.firstChild;
while(cobj) {
if(cobj.nodeName == "DIV" && cobj.className == "widgetBorder") {
if(/embed/i.test(xInnerHtml(cobj))) {
hideElements[hideElements.length] = cobj;
cobj.style.paddingTop = '20px';
}
}
cobj = cobj.nextSibling;
}
obj.appendChild(widgetButton);
*/
}
function widgetSetup(evt) {

View file

@ -7,7 +7,8 @@
/* 생성된 코드를 textarea에 출력 */
function completeGenerateCode(ret_obj) {
var widget_code = ret_obj["widget_code"];
widget_code = widget_code.replace(/&/g, "&amp;");
widget_code = widget_code.replace(/\'/g, "&apos;");
var zone = xGetElementById("widget_code");
zone.value = widget_code;
}
@ -21,7 +22,6 @@ function completeGenerateCodeInPage(ret_obj,response_tags,params,fo_obj) {
}
opener.doAddWidgetCode(widget_code);
window.close();
}
@ -68,9 +68,30 @@ function completeGetSkinColorset(ret_obj, response_tags, params, fo_obj) {
setFixedPopupSize();
}
/* 페이지 모듈에서 내용의 위젯을 더블클릭하여 수정하려고 할 경우 */
var selected_node = null;
/* 페이지 모듈에서 위젯스타일 수정하려고 할 경우 */
function getWidgetVars() {
if(!opener || !opener.selectedWidget || !opener.selectedWidget.getAttribute("widget")) return;
selected_node = opener.selectedWidget;
var fo_widget = jQuery('#fo_widget');
var attrs = selected_node.attributes;
for (i=0; i< attrs.length ; i++){
var input = jQuery("[name='"+attrs[i].name+"']" ,'#fo_widget');
if( input.size() == 0 && attrs[i].name != 'style'){
fo_widget.prepend('<input type="hidden" name="'+attrs[i].name+'" value="'+attrs[i].value+'" />');
}else{
if(!input.val() && attrs[i].value ){
input.val(attrs[i].value);
}
}
}
}
/* 페이지 모듈에서 내용의 위젯을 더블클릭하여 수정하려고 할 경우 */
function doFillWidgetVars() {
if(!opener || !opener.selectedWidget || !opener.selectedWidget.getAttribute("widget")) return;
selected_node = opener.selectedWidget;
@ -80,12 +101,30 @@ function doFillWidgetVars() {
var colorset = selected_node.getAttribute("colorset");
var widget_sequence = parseInt(selected_node.getAttribute("widget_sequence"),10);
var fo_widget = jQuery("#fo_widget");
var fo_obj = xGetElementById("fo_widget");
jQuery('#widget_skin').val(skin);
// 위젯 스타일 유지를 위한 hidden input 추가하고 값을 저장
var attrs = selected_node.attributes;
for (i=0; i< attrs.length ; i++){
var name = attrs[i].name;
var value = jQuery(selected_node).attr(name);
if(jQuery("[name="+name+"]",fo_widget).size()>0 || !value || name == 'style') continue;
var dummy = xCreateElement("input");
dummy.type = 'hidden';
dummy.name = name;
dummy.value = value;
fo_obj.appendChild(dummy);
}
// 위젯의 속성 설정
var obj_list = new Array();
jQuery('form input, form select, form textarea').each( function() {
obj_list.push(this);
});
for(var j=0;j<obj_list.length;j++) {
var node = obj_list[j];
if(node.name.indexOf('_')==0) continue;
@ -97,6 +136,8 @@ function doFillWidgetVars() {
switch(type) {
case "hidden" :
if(jQuery('[name=_' + node.name+']').size() == 0) continue;
case "text" :
case "textarea" :
var val = selected_node.getAttribute(name);
@ -111,8 +152,8 @@ function doFillWidgetVars() {
if(fo_obj[name].length) {
for(var i=0;i<fo_obj[name].length;i++) {
var v = fo_obj[name][i].value;
for(var j=0;j<val.length;j++) {
if(v == val[j]) {
for(var k=0;k<val.length;k++) {
if(v == val[k]) {
fo_obj[name][i].checked=true;
break;
}
@ -327,3 +368,126 @@ function selectWidget(val){
var url =current_url.setQuery('selected_widget', val);
document.location.href = url;
}
function widgetstyle_extra_image_upload(f){
f.act.value='procWidgetStyleExtraImageUpload';
f.submit();
}
function MultiOrderSet(id){
var selectedObj = jQuery("[name='selected_"+id+"']").get(0);
var value = [];
for(i=0;i<selectedObj.options.length;i++){
value.push(selectedObj.options[i].value);
}
jQuery("[name='"+id+"']").val(value.join(','));
}
function MultiOrderAdd(id){
var showObj = jQuery("[name='show_"+id+"']").get(0);
var selectedObj = jQuery("[name='selected_"+id+"']").get(0);
var defaultObj = jQuery("[name='default_"+id+"']").val().split(',');
if(showObj.selectedIndex<0) return;
var idx = showObj.selectedIndex;
var svalue = showObj.options[idx].value;
for(i=0;i<selectedObj.options.length;i++){
if(selectedObj.options[i].value == svalue) return;
}
selectedObj.options.add(new Option(svalue, svalue, false, false));
MultiOrderSet(id);
}
function MultiOrderDelete(id){
var showObj = jQuery("[name='show_"+id+"']").get(0);
var selectedObj = jQuery("[name='selected_"+id+"']").get(0);
var defaultObj = jQuery("[name='default_"+id+"']").val().split(',');
var idx = selectedObj.selectedIndex;
if(idx<0) return;
for(i=0;i<defaultObj.length;i++){
if(jQuery.inArray(selectedObj.options[idx].value, defaultObj) > -1) return;
}
selectedObj.remove(idx);
idx = idx-1;
if(idx < 0) idx = 0;
if(selectedObj.options.length) selectedObj.selectedIndex = idx;
MultiOrderSet(id);
}
function MultiOrderUp(id){
var selectedObj = jQuery("[name='selected_"+id+"']").get(0);
if(selectedObj.selectedIndex<0) return;
var idx = selectedObj.selectedIndex;
if(idx < 1) return;
var s_obj = selectedObj.options[idx];
var t_obj = selectedObj.options[idx-1];
var value = s_obj.value;
var text = s_obj.text;
s_obj.value = t_obj.value;
s_obj.text = t_obj.text;
t_obj.value = value;
t_obj.text = text;
selectedObj.selectedIndex = idx-1;
MultiOrderSet(id);
}
function MultiOrderDown(id){
var selectedObj = jQuery("[name='selected_"+id+"']").get(0);
if(selectedObj.selectedIndex<0) return;
var idx = selectedObj.selectedIndex;
if(idx == selectedObj.options.length-1) return;
var s_obj = selectedObj.options[idx];
var t_obj = selectedObj.options[idx+1];
var value = s_obj.value;
var text = s_obj.text;
s_obj.value = t_obj.value;
s_obj.text = t_obj.text;
t_obj.value = value;
t_obj.text = text;
selectedObj.selectedIndex = idx+1;
MultiOrderSet(id);
}
function initMultiOrder(id){
var selectedObj = jQuery("[name='selected_"+id+"']").get(0);
var init_value = jQuery("[name='init_"+id+"']").val();
var save_value = jQuery("[name='"+id+"']").val();
if(save_value){
var arr_save_value = save_value.split(',');
for(i=0;i<arr_save_value.length;i++){
if(arr_save_value[i].length>0){
var opt = new Option(arr_save_value[i], arr_save_value[i]);
selectedObj.options.add(opt);
}
}
}else{
var arr_init_value = init_value.split(',');
for(i=0;i<arr_init_value.length;i++){
if(arr_init_value[i].length>0){
var opt = new Option(arr_init_value[i], arr_init_value[i]);
selectedObj.options.add(opt);
}
}
}
MultiOrderSet(id);
}

View file

@ -0,0 +1,91 @@
<!--%import("../../admin/tpl/css/admin.css")-->
<div id="popHeader" class="wide">
<h3 class="xeAdmin">{$skin_info->title}</h3>
</div>
<div id="popBody">
<table cellspacing="0" class="rowTable">
<col width="100" />
<col />
<tr>
<th scope="row"><label for="textfield1">{$lang->title}</label></th>
<td>{$skin_info->title}</td>
</tr>
<tr>
<th scope="row"><label for="textfield2">{$lang->author}</label></th>
<td class="blue">
<!--@foreach($skin_info->author as $author)-->
{$author->name} <!--@if($author->homepage || $author->email_address)-->(<!--@if($author->homepage)--><a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a><!--@end--><!--@if($author->homepage && $author->email_address)-->, <!--@end--><!--@if($author->email_address)--><a href="mailto:{$author->email_address}">{$author->email_address}</a><!--@end-->)<!--@end--><br />
<!--@endforeach-->
</td>
</tr>
<!--@if($skin_info->homepage)-->
<tr>
<th scope="row"><label for="textfield2">{$lang->homepage}</label></th>
<td class="blue"><a href="{$skin_info->homepage}" onclick="window.open(this.href);return false;">{$skin_info->homepage}</a></td>
</tr>
<!--@endif-->
<tr>
<th scope="row"><label for="textfield2">{$lang->regdate}</label></th>
<td>{zdate($skin_info->date, 'Y-m-d')}</td>
</tr>
<!--@if($skin_info->license || $skin_info->license_link)-->
<tr>
<th scope="row">{$lang->skin_license}</th>
<td>
{nl2br(trim($skin_info->license))}
<!--@if($skin_info->license_link)-->
<p><a href="{$skin_info->license_link}" onclick="window.close(); return false;">{$skin_info->license_link}</a></p>
<!--@end-->
</td>
</tr>
<!--@end-->
<!--@if($skin_info->description)-->
<tr>
<th scope="row" class="borderBottomNone">{$lang->description}</th>
<td class="borderBottomNone">{nl2br(trim($skin_info->description))}</td>
</tr>
<!--@end-->
</table>
</div>
<!--@if($skin_info->history)-->
<div id="popHistoryHeadder">
<h3 class="xeAdmin">{$lang->skin_history}</h3>
</div>
<div id="popHistoryBody">
<table cellspacing="0" class="rowTable">
<col width="100" />
<col />
<!--@foreach($skin_info->history as $history)-->
<tr>
<th scope="row">
{$history->version}<br />
{$history->date}
</th>
<td>
<!--@foreach($history->author as $author)-->
<p>{$author->name} (<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a> / <a href="mailto:{$author->email_address}">{$author->email_address}</a>)</p>
<!--@endforeach-->
<!--@if($history->description)-->
<p>{nl2br(trim($history->description))}</p>
<!--@endif-->
<!--@if($history->logs)-->
<ul>
<!--@foreach($history->logs as $log)-->
<!--@if($log->link)-->
<li><a href="{$log->link}">{$log->text}</a></li>
<!--@else-->
<li>{$log->text}</li>
<!--@endif-->
<!--@endforeach-->
</ul>
<!--@endif-->
</td>
</tr>
<!--@endforeach-->
</table>
</div>
<!--@endif-->

View file

@ -1,9 +1,13 @@
<!--%import("css/widget.css")-->
<!--%import("../../admin/tpl/css/admin.css")-->
<div id="popHeader" class="wide">
<h3 class="xeAdmin">{$lang->widget}</h3>
</div>
<div id="popBody">
<table cellspacing="0" class="adminTable">
<caption>{$lang->widget_maker}</caption>
<h4 class="xeAdmin">{$lang->widget_maker}</h4>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->title}</div></th>
<td>{$widget_info->title} ver {$widget_info->version}</td>
@ -45,12 +49,12 @@
</div>
<!--@if($widget_info->history)-->
<div id="popHistoryHeadder">
<h3>{$lang->widget_history}</h3>
<div id="popHistoryHeader">
<h3 class="xeAdmin">{$lang->widget_history}</h3>
</div>
<div id="popHistoryBody">
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<!--@foreach($widget_info->history as $history)-->
<tr>
<th scope="row"><div>
@ -79,7 +83,3 @@
</table>
</div>
<!--@endif-->
<div id="popFooter" class="tCenter gap1">
<a href="#" onclick="window.close(); return false;" class="button"><span>{$lang->cmd_close}</span></a>
</div>

View file

@ -4,28 +4,23 @@
<!--%import("../../admin/tpl/css/admin.css")-->
<form action="./" method="get" onsubmit="return procFilter(this, generate_code);" id="fo_widget">
<div id="popHeadder">
<h3>{$lang->cmd_generate_code}</h3>
<div id="popHeader" class="wide">
<h3 class="xeAdmin">{$lang->cmd_generate_code}</h3>
</div>
<div id="popBody">
{@ $_caption = $lang->about_widget_code}
<!--#include("widget_generate_code.include.html")-->
<table cellspacing="0" class="adminTable">
<col width="100" />
<col width="*" />
<h3 class="xeAdmin">{$lang->widget_code}</h3>
<table cellspacing="0" class="rowTable">
<tr>
<th><div>{$lang->widget_code}</div></th>
<td><textarea readonly="true" id="widget_code" class="inputTypeTextArea w400"></textarea></td>
<td class="wide"><textarea readonly="true" id="widget_code" class="inputTypeTextArea fullWidth"></textarea></td>
</tr>
</table>
</div>
<div id="popFooter" class="tCenter gap1">
<span class="button green"><input type="submit" value="{$lang->cmd_generate_code}" /></span>
<a href="#" onclick="window.close(); return false;" class="button red"><span>{$lang->cmd_close}</span></a>
<div id="popFooter">
<span class="button black strong"><input type="submit" value="{$lang->cmd_generate_code}" /></span>
</div>
</form>

View file

@ -1,123 +1,183 @@
<table cellspacing="0" class="adminTable">
<caption>{nl2br($_caption)}</caption>
<tr>
<th scope="row"><div>{$lang->widget}</div></th>
<td>
<select name="selected_widget">
<!--@foreach($widget_list as $widget)-->
<option value="{$widget->widget}" <!--@if($widget_info->widget == $widget->widget)--> selected="selected" <!--@end-->>{$widget->title} ver {$widget_info->version}</option>
<!--@end-->
</select>
<a href="#" class="button small" onclick="selectWidget(jQuery('select[name=selected_widget]').val())"><span>{$lang->cmd_select}</span></a>
<!--@if($widget_info->author->description)-->
<div class="widget_description">{nl2br(trim($widget_info->author->description))}</div>
<!--@end-->
</td>
</tr>
<!--@if(count($skin_list))-->
<tr>
<th scope="row"><div>{$lang->skin}</div></th>
<td>
<select name="skin" id="widget_skin">
<option value="">&nbsp;</option>
<!--@foreach($skin_list as $key => $val)-->
<option value="{$key}">{$val->title} ({$key})</option>
<!--@end-->
</select>
<p class="summary">{nl2br($_caption)}</p>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->widget}</div></th>
<td>
<select name="selected_widget" class="fullWidth">
<!--@foreach($widget_list as $widget)-->
<option value="{$widget->widget}" <!--@if($widget_info->widget == $widget->widget)--> selected="selected" <!--@end-->>{$widget->title} ver {$widget_info->version}</option>
<!--@end-->
</select>
<a href="#" class="button small" onclick="selectWidget(jQuery('select[name=selected_widget]').val())"><span>{$lang->cmd_select}</span></a>
<!--@if($widget_info->author->description)-->
<div class="widget_description">{nl2br(trim($widget_info->author->description))}</div>
<!--@end-->
</td>
</tr>
<!--@if(count($skin_list))-->
<tr>
<th scope="row"><div>{$lang->skin}</div></th>
<td>
<select name="skin" id="widget_skin" class="fullWidth">
<option value="">&nbsp;</option>
<!--@foreach($skin_list as $key => $val)-->
<option value="{$key}">{$val->title} ({$key})</option>
<!--@end-->
</select>
<a href="#" class="button small" onclick="doDisplaySkinColorset(jQuery('#widget_skin').get(0))"><span>{$lang->cmd_select}</span></a>
<div id="colorset_area" style="display:none">
<div class="header">{$lang->colorset}</div>
<div class="footer">
<select name="colorset" id="widget_colorset">
</select>
</div>
</div>
</td>
</tr>
<!--@end-->
<tr>
<th scope="row"><div>{$lang->widget_cache}</div></th>
<td>
<input type="text" name="widget_cache" value="0" class="inputTypeText" size="2" />{$lang->unit_min}
<p>{$lang->about_widget_cache}</p>
</td>
</tr>
<!--@foreach($widget_info->extra_var as $id => $var)-->
<!--@if($var->group && ((!$group) || $group != $var->group))-->
{@$group = $var->group}
</table>
<table cellspacing="0" class="adminTable">
<caption>{$group}</caption>
<!--@end-->
<tr class="row{$cycle_idx}">
<th scope="row">
<div>
{$var->name}
<!--@if($var->type == "mid_list")-->
<input type="checkbox" onclick="XE.checkboxToggleAll('{$id}'); return false;" />
<!--@end-->
</div>
</th>
<td>
<!--@if($var->type == "text")-->
<input type="text" name="{$id}" value="" class="inputTypeText w400" />
<!--@elseif($var->type == "textarea")-->
<textarea name="{$id}" class="inputTypeTextArea w400"></textarea>
<!--@elseif($var->type == "select")-->
<select name="{$id}">
<!--@foreach($var->options as $key => $val)-->
<option value="{$key}">{$val}</option>
<!--@end-->
<div id="colorset_area" style="display:none">
<div class="header">{$lang->colorset}</div>
<div class="footer">
<select name="colorset" id="widget_colorset">
</select>
</div>
</div>
</td>
</tr>
<!--@end-->
<tr>
<th scope="row"><div>{$lang->widget_cache}</div></th>
<td>
<input type="text" name="widget_cache" value="0" class="inputTypeText" size="2" />{$lang->unit_min}
<p>{$lang->about_widget_cache}</p>
</td>
</tr>
<!--@foreach($widget_info->extra_var as $id => $var)-->
<!--@elseif($var->type == "mid_list")-->
<!--@if($var->group && ((!$group) || $group != $var->group))-->
{@$group = $var->group}
</table>
<!--@foreach($mid_list as $module_category_srl => $modules)-->
<!--@if($modules->title)-->
<div class="widget_title">{$modules->title}</div>
<!--@else-->
<div class="widget_title">{$lang->none_category}</div>
<!--@end-->
<!--@foreach($modules->list as $key => $val)-->
<div class="widget_mid_list">
<input type="checkbox" value="{$key}" name="{$id}" id="chk_mid_list_{$key}" />
<label for="chk_mid_list_{$key}">{$key} ({$val->browser_title})</label>
</div>
<!--@end-->
<!--@end-->
<h3 class="xeAdmin">{$group}</h3>
<table cellspacing="0" class="rowTable">
<!--@end-->
<tr class="row{$cycle_idx}">
<th scope="row">
<div>
{$var->name}
<!--@if($var->type == "mid_list")-->
<input type="checkbox" onclick="XE.checkboxToggleAll('{$id}'); return false;" />
<!--@end-->
</div>
</th>
<td>
<!--@if($var->type == "text")-->
<input type="text" name="{$id}" value="" class="inputTypeText fullWidth" />
<!--@elseif($var->type == "module_srl_list")-->
<input type="hidden" name="{$id}" id="{$id}" value="" />
<select name="_{$id}" id="_{$id}" size="8" class="w300 fl"></select>
<ul class="midCommand">
<li><a href="{getUrl('','module','module','act','dispModuleAdminSelectList','id',$id)}" onclick="popopen(this.href, 'ModuleSelect');return false;" class="button blue"><span>{$lang->cmd_insert}</span></a></li>
<li><a href="#" onclick="midMoveUp('{$id}');return false;" class="button black"><span>{$lang->cmd_move_up}</span></a></li>
<li><a href="#" onclick="midMoveDown('{$id}');return false;" class="button black"><span>{$lang->cmd_move_down}</span></a></li>
<li><a href="#" onclick="midRemove('{$id}');return false;" class="button red"><span>{$lang->cmd_delete}</span></a></li>
</ul>
<script type="text/javascript">
if(typeof(getModuleSrlList)!=='undefined') {
doAddWindowLoadEventLoader( function() { getModuleSrlList('{$id}'); } );
}
</script>
<!--@elseif($var->type == "mid")-->
<input type="hidden" name="{$id}" id="{$id}" value="" />
<input type="text" name="_{$id}" id="_{$id}" value="" class="inputTypeText w300" readonly="readonly"/><a href="{getUrl('','module','module','act','dispModuleAdminSelectList','id',$id,'type','single')}" onclick="popopen(this.href, 'ModuleSelect');return false;" class="button blue"><span>{$lang->cmd_select}</span></a>
<script type="text/javascript">
if(typeof(getModuleSrlList)!=='undefined') {
doAddWindowLoadEventLoader( function() { getModuleSrl('{$id}'); });
}
</script>
<!--@elseif($var->type == "textarea")-->
<textarea name="{$id}" class="inputTypeTextArea fullWidth"></textarea>
<!--@elseif($var->type == "select")-->
<select name="{$id}">
<!--@foreach($var->options as $key => $val)-->
<option value="{$key}">{$val}</option>
<!--@end-->
</select>
<!--@elseif($var->type == "select-multi-order")-->
<input type="hidden" name="{$id}" value="" />
<input type="hidden" name="default_{$id}" value="" />
<input type="hidden" name="init_{$id}" value="" />
<div style="float:left;margin-left:30px;">
<select name="show_{$id}" size="8" class="w100">
<!--@foreach($var->options as $key => $val)-->
<option value="{$key}">{$key}</option>
<!--@end-->
<p class="clear">{nl2br($var->description)}</p>
</td>
</tr>
</select>
</div>
<div style="float:left;margin-left:30px;">
<a class="buttonSet buttonRight" onclick="MultiOrderAdd('{$id}'); return false;" href="#"></a>
<br/><br/>
<a class="buttonSet buttonLeft" onclick="MultiOrderDelete('{$id}'); return false;" href="#"></a>
<br/><br/>
<a class="buttonSet buttonUp" onclick="MultiOrderUp('{$id}'); return false;" href="#"></a>
<br/><br/>
<a class="buttonSet buttonDown" onclick="MultiOrderDown('{$id}'); return false;" href="#"></a>
</div>
<div style="float:left;margin-left:30px;">
<select name="selected_{$id}" name="selected_{$id}" size="8" class="w100">
</select>
</div>
<script type="text/javascript">
<!--@foreach($var->options as $key => $val)-->
<!--@if($var->default_options[$key] == true)-->
jQuery("[name='default_{$id}']").get(0).value += '{$key},';
<!--@end-->
<!--@if($var->init_options[$key] == true)-->
jQuery("[name='init_{$id}']").get(0).value += ','+'{$key}';
<!--@end-->
<!--@end-->
if(typeof(initMultiOrder)!=='undefined') {
doAddWindowLoadEventLoader( function() { initMultiOrder('{$id}'); } );
}
// MultiOrderSet('{$id}');
</script>
<!--@elseif($var->type == "mid_list")-->
<!--@foreach($mid_list as $module_category_srl => $modules)-->
<!--@if($modules->title)-->
<div class="widget_title">{$modules->title}</div>
<!--@else-->
<div class="widget_title">{$lang->none_category}</div>
<!--@end-->
<!--@foreach($modules->list as $key => $val)-->
<div class="widget_mid_list">
<input type="checkbox" value="{$key}" name="{$id}" id="chk_mid_list_{$key}" />
<label for="chk_mid_list_{$key}">{$key} ({$val->browser_title})</label>
</div>
<!--@end-->
<!--@end-->
<!--@elseif($var->type == "member_group")-->
<!--@foreach($group_list as $key => $val)-->
<input type="checkbox" value="{$key}" name="{$id}" id="chk_member_gruop_{$id}_{$key}" />
<label for="chk_member_gruop_{$id}_{$key}">{$val->title}</label>
<!--@end-->
<!--@elseif($var->type == "module_srl_list")-->
<input type="hidden" name="{$id}" id="{$id}" value="" />
<select name="_{$id}" id="_{$id}" size="8" class="w300 fl"></select>
<ul class="midCommand">
<li><a href="{getUrl('','module','module','act','dispModuleSelectList','id',$id)}" onclick="popopen(this.href, 'ModuleSelect');return false;" class="button blue"><span>{$lang->cmd_insert}</span></a></li>
<li><a href="#" onclick="midMoveUp('{$id}');return false;" class="button black"><span>{$lang->cmd_move_up}</span></a></li>
<li><a href="#" onclick="midMoveDown('{$id}');return false;" class="button black"><span>{$lang->cmd_move_down}</span></a></li>
<li><a href="#" onclick="midRemove('{$id}');return false;" class="button red"><span>{$lang->cmd_delete}</span></a></li>
</ul>
<script type="text/javascript">
if(typeof(getModuleSrlList)!=='undefined') {
doAddWindowLoadEventLoader( function() { getModuleSrlList('{$id}'); } );
}
</script>
<!--@elseif($var->type == "mid")-->
<input type="hidden" name="{$id}" id="{$id}" value="" />
<input type="text" name="_{$id}" id="_{$id}" value="" class="inputTypeText w300" readonly="readonly"/><a href="{getUrl('','module','module','act','dispModuleSelectList','id',$id,'type','single')}" onclick="popopen(this.href, 'ModuleSelect');return false;" class="button blue"><span>{$lang->cmd_select}</span></a>
<script type="text/javascript">
if(typeof(getModuleSrlList)!=='undefined') {
doAddWindowLoadEventLoader( function() { getModuleSrl('{$id}'); });
}
</script>
<!--@elseif($var->type == "menu")-->
<select name="{$id}" class="w300 fl">
<option value="">-</option>
<!--@foreach($menu_list as $key => $val)-->
<option value="{$val->menu_srl}">{$val->title}</option>
<!--@end-->
</select>
<!--@end-->
</table>
<p class="clear">{nl2br($var->description)}</p>
</td>
</tr>
<!--@end-->
</table>

View file

@ -16,8 +16,8 @@
<input type="hidden" name="widget_padding_top" value="" />
<input type="hidden" name="widget_padding_bottom" value="" />
<div id="popHeadder">
<h3>{$lang->cmd_generate_code}</h3>
<div id="popHeader" class="wide">
<h3 class="xeAdmin">{$lang->cmd_generate_code}</h3>
</div>
<div id="popBody">
@ -27,7 +27,6 @@
</div>
<div id="popFooter" class="tCenter gap1">
<span class="button green"><input type="submit" value="{$lang->cmd_generate_code}" /></span>
<a href="#" onclick="window.close(); return false;" class="button red"><span>{$lang->cmd_close}</span></a>
<span class="button black strong"><input type="submit" value="{$lang->cmd_generate_code}" /></span>
</div>
</form>

View file

@ -1,6 +1,10 @@
<div id="tmpPageSizeLayer" style="visibility:hidden;">
<form action="./" onsubmit="doApplyWidgetSize(this); return false;">
<table cellspacing="0">
<div id="tmpPageSizeLayer" class="layer boxModelController">
<form action="./" onsubmit="doApplyWidgetSize(this); return false;">
<h4 class="xeAdmin">&nbsp;</h4>
<!--button class="xButton" type="button" onclick="hideCategoryInfo();return false" ><span>{$lang->cmd_close}</span></button-->
<div class="layerBody">
<table cellspacing="0" class="adminTable">
<col width="140" />
<col />
<col />
@ -103,10 +107,11 @@
</td>
</tr>
<tr>
<td colspan="3" class="buttonBox">
<input type="submit" value="{$lang->cmd_save}" class="submit"/>
</td>
<th colspan="3">
<span class="button black strong"><input type="submit" value="{$lang->cmd_save}" class="submit"/></span>
</th>
</tr>
</table>
</form>
</div>
</form>
</div>

View file

@ -0,0 +1,105 @@
<!--%import("filter/style_generate_code_in_page.xml")-->
<!--%import("js/widget_admin.js")-->
<!--%import("css/widget.css")-->
<!--%import("../../admin/tpl/css/admin.css")-->
<!--%load_js_plugin("filebox")-->
<script type="text/javascript">
doAddWindowLoadEventLoader(getWidgetVars);
</script>
<div id="popHeader" class="wide">
<h3 class="xeAdmin">{$lang->widgetstyle}</h3>
</div>
<form action="{getUrl('')}" method="post" enctype="multipart/form-data" target="hidden_iframe" onsubmit="return procFilter(this, style_generate_code_in_page);" id="fo_widget">
<input type="hidden" name="module" value="widget" />
<input type="hidden" name="act" value="" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="widgetstyle" value="{$widgetstyle}" />
<input type="hidden" name="widget_sequence" value="" />
<input type="hidden" name="style" value="float:left;width:100%;margin:none;padding:none;" />
<input type="hidden" name="selected_widget" value="{$selected_widget}" />
<div id="popBody">
<a href="{getUrl('widgetstyle','none')}" class="widgetStyle"><img src="images/widgetstyle_none.gif" title="{$lang->notuse}" /></a>
<!--@foreach($widgetStyle_list as $key => $widgetStyle)-->
<!--@if($widgetStyle->preview)-->
<a href="{getUrl('widgetstyle',$widgetStyle->widgetStyle)}" class="widgetStyle <!--@if($widgetStyle->widgetStyle==$widgetstyle)-->selected<!--@end-->"><img src="{getUrl()}{$widgetStyle->preview}" title="{$widgetStyle->title}" /></a>
<!--@end-->
<!--@end-->
<div class="clear"></div>
<!--@if($widgetstyle_info)-->
<h4 class="xeAdmin">{$widgetstyle_info->title} ver {$widgetstyle_info->version}</h4>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->description}</div></th>
<td>{$widgetstyle_info->description}</td>
</tr>
<tr>
<th scope="row"><div>{$lang->author}</div></th>
<td>
<!--@foreach($widgetstyle_info->author as $k => $author)-->
{$author->name} ({$author->homepage})
<!--@end-->
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->regdate}</div></th>
<td>{zdate($widgetstyle_info->date,'Y-m-d')}</td>
</tr>
</table>
<h4 class="xeAdmin">{$lang->cmd_setup}</h4>
<table cellspacing="0" class="rowTable">
<!--@foreach($widgetstyle_info->extra_var as $id => $var)-->
<tr>
<th scope="row">
<div>
{$var->name}
</div>
</th>
<td>
<!--@if($var->type == "text")-->
<input type="text" name="{$id}" value="" class="inputTypeText w400" />
<!--@elseif($var->type == "textarea")-->
<textarea name="{$id}" class="inputTypeTextArea w400"></textarea>
<!--@elseif($var->type == "select")-->
<select name="{$id}">
<!--@foreach($var->options as $key => $val)-->
<option value="{$key}">{$val}</option>
<!--@end-->
</select>
<!--@elseif($var->type == "filebox")-->
<div id="filebox_preview_{$id}" style="width:100px;height:100px;display:none" ></div>
<input type="hidden" name="{$id}" value="" />
<span class="button black"><button type="button" onclick="XE.filebox.open(jQuery('[name={$id}]', '#fo_widget').get(0), '{$var->filter}')">{$lang->cmd_select}</button></span>
<span id="filebox_cancel_{$id}" class="button red" style="display:none" ><button type="button" onclick="XE.filebox.cancel('{$id}')">{$lang->cmd_delete}</button></span>
<script type="text/javascript">//<![CDATA[
XE.filebox.init('{$id}');
//]]></script>
<!--@end-->
<p class="clear">{nl2br($var->description)}</p>
</td>
</tr>
<!--@end-->
</table>
<!--@end-->
</div>
<div id="popFooter">
<span class="button black strong"><input type="submit" value="{$lang->cmd_setup}" /></span>
</div>
</form>
<iframe name="hidden_iframe" frameborder="0" style="display:none"></iframe>

View file

@ -53,11 +53,14 @@
$option->enable_default_component = true;
$option->enable_component = true;
$option->resizable = false;
$option->height = 300;
$option->height = 200;
$editor = $oEditorModel->getEditor($module_srl, $option);
Context::set('editor', $editor);
$this->setTemplateFile('add_content_widget');
}
}
?>

View file

@ -11,13 +11,6 @@
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
// action forward에 등록 (관리자 모드에서 사용하기 위함)
$oModuleController = &getController('module');
$oModuleController->insertActionForward('widget', 'view', 'dispWidgetInfo');
$oModuleController->insertActionForward('widget', 'view', 'dispWidgetGenerateCode');
$oModuleController->insertActionForward('widget', 'view', 'dispWidgetGenerateCodePage');
$oModuleController->insertActionForward('widget', 'view', 'dispWidgetAdminDownloadedList');
// widget 에서 사용할 cache디렉토리 생성
FileHandler::makeDir('./files/cache/widget');
FileHandler::makeDir('./files/cache/widget_cache');
@ -50,57 +43,5 @@
FileHandler::removeFilesInDir("./files/cache/widget_cache");
}
/**
* @brief Action중 Admin이 들어갔을 경우 권한 체크
**/
function checkAdminActionGrant() {
if(!Context::get('is_logged')) return false;
$logged_info = Context::get('logged_info');
if($logged_info->is_admin=='Y') return true;
$oModuleModel = &getModel('module');
if($oModuleModel->isSiteAdmin()) return true;
return false;
}
/**
* @brief 권한 체크를 실행하는 method
* 모듈 객체가 생성된 경우는 직접 권한을 체크하지만 기능성 모듈등 스스로 객체를 생성하지 않는 모듈들의 경우에는
* ModuleObject에서 직접 method를 호출하여 권한을 확인함
*
* isAdminGrant는 관리권한 이양시에만 사용되도록 하고 기본은 false로 return 되도록 하여 잘못된 권한 취약점이 생기지 않도록 주의하여야
**/
function isAdmin() {
// 로그인이 되어 있지 않으면 무조건 return false
$is_logged = Context::get('is_logged');
if(!$is_logged) return false;
// 사용자 아이디를 구함
$logged_info = Context::get('logged_info');
// 모듈 요청에 사용된 변수들을 가져옴
$args = Context::getRequestVars();
// act의 값에 따라서 관리 권한 체크
switch($args->act) {
case 'dispWidgetAdminAddContent' :
// 레이아웃 정보에 할당된 srl이 없으면 패스
if(!$args->module_srl) return false;
// 모듈중 레이아웃이 해당 srl에 연결될 것이 있는지 확인
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($args->module_srl);
if($oModuleModel->isModuleAdmin($module_info,$logged_info)) $is_granted = true;
else $is_granted = false;
return $is_granted;
break;
}
return false;
}
}
?>

View file

@ -21,6 +21,8 @@
$widget_info = $oWidgetModel->getWidgetInfo($widget);
$widget = $vars->selected_widget;
$vars->widgetstyle = $request_vars->widgetstyle;
$vars->skin = trim($request_vars->skin);
$vars->colorset = trim($request_vars->colorset);
$vars->widget_sequence = (int)($request_vars->widget_sequence);
@ -30,12 +32,29 @@
$vars->widget_padding_right = trim($request_vars->widget_padding_right);
$vars->widget_padding_top = trim($request_vars->widget_padding_top);
$vars->widget_padding_bottom = trim($request_vars->widget_padding_bottom);
$vars->document_srl= trim($request_vars->document_srl);
if(count($widget_info->extra_var)) {
foreach($widget_info->extra_var as $key=>$val) {
$vars->{$key} = trim($request_vars->{$key});
$vars->{$key} = trim($request_vars->{$key});
}
}
// 위젯 스타일이 있는 경우
if($request_vars->widgetstyle){
$widgetStyle_info = $oWidgetModel->getWidgetStyleInfo($request_vars->widgetstyle);
if(count($widgetStyle_info->extra_var)) {
foreach($widgetStyle_info->extra_var as $key=>$val) {
if($val->type =='text' || $val->type =='select' || $val->type =='filebox'){
$vars->{$key} = trim($request_vars->{$key});
}
}
}
}
if($vars->widget_sequence) {
$cache_path = './files/cache/widget_cache/';
$cache_file = sprintf('%s%d.%s.cache', $cache_path, $vars->widget_sequence, Context::getLangType());
@ -51,8 +70,8 @@
continue;
}
if(strpos($val,'|@|') > 0) $val = str_replace('|@|', ',', $val);
$vars->{$key} = htmlspecialchars($val);
$attribute[] = sprintf('%s="%s"', $key, $val);
$vars->{$key} = htmlspecialchars(Context::convertEncodingStr($val));
$attribute[] = sprintf('%s="%s"', $key, Context::convertEncodingStr($val));
}
return $attribute;
@ -80,8 +99,7 @@
function procWidgetGenerateCodeInPage() {
$widget = Context::get('selected_widget');
if(!$widget) return new Object(-1,'msg_invalid_request');
if(!Context::get('skin')) return new Object(-1,Context::getLang('msg_widget_skin_is_null'));
// if(!Context::get('skin')) return new Object(-1,Context::getLang('msg_widget_skin_is_null'));
$attribute = $this->arrangeWidgetVars($widget, Context::getRequestVars(), $vars);
// 결과물을 구함
@ -91,6 +109,17 @@
$this->add('widget_code', $widget_code);
}
function procWidgetStyleExtraImageUpload(){
$attribute = $this->arrangeWidgetVars($widget, Context::getRequestVars(), $vars);
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('default_layout.html');
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile("top_refresh.html");
}
/**
* @brief 선택된 위젯 - 스킨의 컬러셋을 return
**/
@ -115,7 +144,11 @@
* @breif 특정 content의 위젯 태그들을 변환하여 return
**/
function transWidgetCode($content, $include_info = false) {
// 사용자 정의 언어 변경
$oModuleController = &getController('module');
$oModuleController->replaceDefinedLangCode($content);
// 편집 정보 포함 여부 체크
$this->include_info = $include_info;
// 내용중 위젯을 또다시 구함 (기존 버전에서 페이지 수정해 놓은것과의 호환을 위해서)
@ -214,16 +247,24 @@
* @brief 컨텐츠 위젯 추가
**/
function procWidgetInsertDocument() {
// 변수 구함
$module_srl = Context::get('module_srl');
$document_srl = Context::get('document_srl');
$content = Context::get('content');
$editor_sequence = Context::get('editor_sequence');
$err = 0;
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($module_srl);
if(!$layout_info || $layout_info->type != 'faceoff') $err++;
// 대상 페이지 모듈 정보 구함
$oModuleModel = &getModel('module');
$page_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if(!$page_info->module_srl || $page_info->module != 'page') return new Object(-1,'msg_invalid_request');
if(!$page_info->module_srl || $page_info->module != 'page') $err++;
if($err > 1) return new Object(-1,'msg_invalid_request');
// 권한 체크
$is_logged = Context::get('is_logged');
@ -235,14 +276,14 @@
foreach($user_group as $group_srl => $group_info) {
if(in_array($group_srl, $manager_group)) $is_admin = true;
}
}
if(!$is_admin && !$is_logged && $logged_info->is_admin != 'Y' && !$oModuleModel->isSiteAdmin() && !(is_array($page_info->admin_id) && in_array($logged_infoi->user_id, $page_info->admin_id))) return new Object(-1,'msg_not_permitted');
}
if(!$is_admin && !$is_logged && $logged_info->is_admin != 'Y' && !$oModuleModel->isSiteAdmin($logged_info) && !(is_array($page_info->admin_id) && in_array($logged_infoi->user_id, $page_info->admin_id))) return new Object(-1,'msg_not_permitted');
// 글 입력
$oDocumentModel = &getModel('document');
$oDocumentController = &getController('document');
$obj->module_srl = $module_srl;
$obj->content = $content;
$obj->document_srl = $document_srl;
@ -292,8 +333,8 @@
foreach($user_group as $group_srl => $group_info) {
if(in_array($group_srl, $manager_group)) $is_admin = true;
}
}
if(!$is_admin && !$is_logged && $logged_info->is_admin != 'Y' && !$oModuleModel->isSiteAdmin() && !(is_array($page_info->admin_id) && in_array($logged_infoi->user_id, $page_info->admin_id))) return new Object(-1,'msg_not_permitted');
}
if(!$is_admin && !$is_logged && $logged_info->is_admin != 'Y' && !$oModuleModel->isSiteAdmin($logged_info) && !(is_array($page_info->admin_id) && in_array($logged_infoi->user_id, $page_info->admin_id))) return new Object(-1,'msg_not_permitted');
$output = $oDocumentAdminController->copyDocumentModule(array($oDocument->get('document_srl')), $oDocument->get('module_srl'),0);
if(!$output->toBool()) return $output;
@ -332,8 +373,8 @@
foreach($user_group as $group_srl => $group_info) {
if(in_array($group_srl, $manager_group)) $is_admin = true;
}
}
if(!$is_admin && !$is_logged && $logged_info->is_admin != 'Y' && !$oModuleModel->isSiteAdmin() && !(is_array($page_info->admin_id) && in_array($logged_infoi->user_id, $page_info->admin_id))) return new Object(-1,'msg_not_permitted');
}
if(!$is_admin && !$is_logged && $logged_info->is_admin != 'Y' && !$oModuleModel->isSiteAdmin($logged_info) && !(is_array($page_info->admin_id) && in_array($logged_infoi->user_id, $page_info->admin_id))) return new Object(-1,'msg_not_permitted');
$output = $oDocumentController->deleteDocument($oDocument->get('document_srl'), true);
if(!$output->toBool()) return $output;
@ -361,8 +402,8 @@
foreach($user_group as $group_srl => $group_info) {
if(in_array($group_srl, $manager_group)) $is_admin = true;
}
}
if(!$is_admin && !$is_logged && $logged_info->is_admin != 'Y' && !$oModuleModel->isSiteAdmin() && !(is_array($page_info->admin_id) && in_array($logged_infoi->user_id, $page_info->admin_id))) return new Object(-1,'msg_not_permitted');
}
if(!$is_admin && !$is_logged && $logged_info->is_admin != 'Y' && !$oModuleModel->isSiteAdmin($logged_info) && !(is_array($page_info->admin_id) && in_array($logged_infoi->user_id, $page_info->admin_id))) return new Object(-1,'msg_not_permitted');
// 등록된 글 목록 구함
$oDocumentModel = &getModel('document');
@ -376,5 +417,8 @@
}
return new Object();
}
}
?>

View file

@ -24,6 +24,26 @@
return "";
}
/**
* @brief 위젯 스타일의 경로를 구함
**/
function getWidgetStylePath($widgetStyle_name) {
$path = sprintf('./widgetstyles/%s/', $widgetStyle_name);
if(is_dir($path)) return $path;
return "";
}
/**
* @brief 위젯 스타일의 경로를 구함
**/
function getWidgetStyleTpl($widgetStyle_name) {
$path = $this->getWidgetStylePath($widgetStyle_name);
$tpl = sprintf('%swidgetstyle.html', $path);
return $tpl;
}
/**
* @brief 위젯의 종류와 정보를 구함
* 다운로드되어 있는 위젯의 종류 (생성과 다른 의미)
@ -48,6 +68,31 @@
return $list;
}
/**
* @brief 위젯의 종류와 정보를 구함
* 다운로드되어 있는 위젯의 종류 (생성과 다른 의미)
**/
function getDownloadedWidgetStyleList() {
// 다운받은 위젯과 설치된 위젯의 목록을 구함
$searched_list = FileHandler::readDir('./widgetstyles');
$searched_count = count($searched_list);
if(!$searched_count) return;
sort($searched_list);
// 찾아진 위젯 목록을 loop돌면서 필요한 정보를 간추려 return
for($i=0;$i<$searched_count;$i++) {
// 위젯의 이름
$widgetStyle = $searched_list[$i];
// 해당 위젯의 정보를 구함
$widgetStyle_info = $this->getWidgetStyleInfo($widgetStyle);
$list[] = $widgetStyle_info;
}
return $list;
}
/**
* @brief 모듈의 conf/info.xml 읽어서 정보를 구함
* 이것 역시 캐싱을 통해서 xml parsing 시간을 줄인다..
@ -192,6 +237,14 @@
$options_count = count($options);
for($j=0;$j<$options_count;$j++) {
$buff .= sprintf('$widget_info->extra_var->%s->options["%s"] = "%s";', $id, $options[$j]->value->body, $options[$j]->name->body);
if($options[$j]->attrs->default && $options[$j]->attrs->default=='true'){
$buff .= sprintf('$widget_info->extra_var->%s->default_options["%s"] = true;', $id, $options[$j]->value->body);
}
if($options[$j]->attrs->init && $options[$j]->attrs->init=='true'){
$buff .= sprintf('$widget_info->extra_var->%s->init_options["%s"] = true;', $id, $options[$j]->value->body);
}
}
}
@ -205,5 +258,144 @@
return $widget_info;
}
/**
* @brief 모듈의 conf/info.xml 읽어서 정보를 구함
* 이것 역시 캐싱을 통해서 xml parsing 시간을 줄인다..
**/
function getWidgetStyleInfo($widgetStyle) {
$widgetStyle_path = $this->getWidgetStylePath($widgetStyle);
if(!$widgetStyle_path) return;
$xml_file = sprintf("%sskin.xml", $widgetStyle_path);
if(!file_exists($xml_file)) return;
// cache 파일을 비교하여 문제 없으면 include하고 $widgetStyle_info 변수를 return
$cache_file = sprintf('./files/cache/widgetstyles/%s.%s.cache.php', $widgetStyle, Context::getLangType());
if(file_exists($cache_file)&&filemtime($cache_file)>filemtime($xml_file)) {
@include($cache_file);
return $widgetStyle_info;
}
// cache 파일이 없으면 xml parsing하고 변수화 한 후에 캐시 파일에 쓰고 변수 바로 return
$oXmlParser = new XmlParser();
$tmp_xml_obj = $oXmlParser->loadXmlFile($xml_file);
$xml_obj = $tmp_xml_obj->widgetstyle;
if(!$xml_obj) return;
$buff = '';
// 위젯의 제목, 버전
$buff .= sprintf('$widgetStyle_info->widgetStyle = "%s";', $widgetStyle);
$buff .= sprintf('$widgetStyle_info->path = "%s";', $widgetStyle_path);
$buff .= sprintf('$widgetStyle_info->title = "%s";', $xml_obj->title->body);
$buff .= sprintf('$widgetStyle_info->description = "%s";', $xml_obj->description->body);
$buff .= sprintf('$widgetStyle_info->version = "%s";', $xml_obj->version->body);
sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d);
$date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$buff .= sprintf('$widgetStyle_info->date = "%s";', $date);
$buff .= sprintf('$widgetStyle_info->homepage = "%s";', $xml_obj->link->body);
$buff .= sprintf('$widgetStyle_info->license = "%s";', $xml_obj->license->body);
$buff .= sprintf('$widgetStyle_info->license_link = "%s";', $xml_obj->license->attrs->link);
// preview
$preview_file = sprintf("%spreview.jpg", $widgetStyle_path);
if(file_exists($preview_file)) $buff .= sprintf('$widgetStyle_info->preview = "%s";', $preview_file);
// 작성자 정보
if(!is_array($xml_obj->author)) $author_list[] = $xml_obj->author;
else $author_list = $xml_obj->author;
for($i=0; $i < count($author_list); $i++) {
$buff .= sprintf('$widgetStyle_info->author['.$i.']->name = "%s";', $author_list[$i]->name->body);
$buff .= sprintf('$widgetStyle_info->author['.$i.']->email_address = "%s";', $author_list[$i]->attrs->email_address);
$buff .= sprintf('$widgetStyle_info->author['.$i.']->homepage = "%s";', $author_list[$i]->attrs->link);
}
// history
if($xml_obj->history) {
if(!is_array($xml_obj->history)) $history_list[] = $xml_obj->history;
else $history_list = $xml_obj->history;
for($i=0; $i < count($history_list); $i++) {
sscanf($history_list[$i]->attrs->date, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d);
$date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$buff .= sprintf('$widgetStyle_info->history['.$i.']->description = "%s";', $history_list[$i]->description->body);
$buff .= sprintf('$widgetStyle_info->history['.$i.']->version = "%s";', $history_list[$i]->attrs->version);
$buff .= sprintf('$widgetStyle_info->history['.$i.']->date = "%s";', $date);
if($history_list[$i]->author) {
(!is_array($history_list[$i]->author)) ? $obj->author_list[] = $history_list[$i]->author : $obj->author_list = $history_list[$i]->author;
for($j=0; $j < count($obj->author_list); $j++) {
$buff .= sprintf('$widgetStyle_info->history['.$i.']->author['.$j.']->name = "%s";', $obj->author_list[$j]->name->body);
$buff .= sprintf('$widgetStyle_info->history['.$i.']->author['.$j.']->email_address = "%s";', $obj->author_list[$j]->attrs->email_address);
$buff .= sprintf('$widgetStyle_info->history['.$i.']->author['.$j.']->homepage = "%s";', $obj->author_list[$j]->attrs->link);
}
}
if($history_list[$i]->log) {
(!is_array($history_list[$i]->log)) ? $obj->log_list[] = $history_list[$i]->log : $obj->log_list = $history_list[$i]->log;
for($j=0; $j < count($obj->log_list); $j++) {
$buff .= sprintf('$widgetStyle_info->history['.$i.']->logs['.$j.']->text = "%s";', $obj->log_list[$j]->body);
$buff .= sprintf('$widgetStyle_info->history['.$i.']->logs['.$j.']->link = "%s";', $obj->log_list[$j]->attrs->link);
}
}
}
}
// 추가 변수 (템플릿에서 사용할 제작자 정의 변수)
$extra_var_groups = $xml_obj->extra_vars->group;
if(!$extra_var_groups) $extra_var_groups = $xml_obj->extra_vars;
if(!is_array($extra_var_groups)) $extra_var_groups = array($extra_var_groups);
foreach($extra_var_groups as $group){
$extra_vars = $group->var;
if(!is_array($group->var)) $extra_vars = array($group->var);
if($extra_vars[0]->attrs->id || $extra_vars[0]->attrs->name) {
$extra_var_count = count($extra_vars);
$buff .= sprintf('$widgetStyle_info->extra_var_count = "%s";', $extra_var_count);
for($i=0;$i<$extra_var_count;$i++) {
unset($var);
unset($options);
$var = $extra_vars[$i];
$id = $var->attrs->id?$var->attrs->id:$var->attrs->name;
$name = $var->name->body?$var->name->body:$var->title->body;
$type = $var->attrs->type?$var->attrs->type:$var->type->body;
$buff .= sprintf('$widgetStyle_info->extra_var->%s->group = "%s";', $id, $group->title->body);
$buff .= sprintf('$widgetStyle_info->extra_var->%s->name = "%s";', $id, $name);
$buff .= sprintf('$widgetStyle_info->extra_var->%s->type = "%s";', $id, $type);
if($type =='filebox') $buff .= sprintf('$widgetStyle_info->extra_var->%s->filter = "%s";', $id, $var->attrs->filter);
$buff .= sprintf('$widgetStyle_info->extra_var->%s->value = $vars->%s;', $id, $id);
$buff .= sprintf('$widgetStyle_info->extra_var->%s->description = "%s";', $id, str_replace('"','\"',$var->description->body));
$options = $var->options;
if(!$options) continue;
if(!is_array($options)) $options = array($options);
$options_count = count($options);
for($j=0;$j<$options_count;$j++) {
$buff .= sprintf('$widgetStyle_info->extra_var->%s->options["%s"] = "%s";', $id, $options[$j]->value->body, $options[$j]->name->body);
}
}
}
}
$buff = '<?php if(!defined("__ZBXE__")) exit(); '.$buff.' ?>';
FileHandler::writeFile($cache_file, $buff);
if(file_exists($cache_file)) @include($cache_file);
return $widgetStyle_info;
}
}
?>
?>

View file

@ -18,6 +18,9 @@
* @brief 위젯의 상세 정보(conf/info.xml) 팝업 출력
**/
function dispWidgetInfo() {
// 위젯 스킨명이 있을 경우 위젯 스킨 상세 정보 함수로 출력
if(Context::get('skin')) return $this->dispWidgetSkinInfo();
// 선택된 위젯 정보를 구함
$oWidgetModel = &getModel('widget');
$widget_info = $oWidgetModel->getWidgetInfo(Context::get('selected_widget'));
@ -30,6 +33,28 @@
$this->setTemplateFile('widget_detail_info');
}
/**
* @brief 위젯 스킨의 상세 정보(skin.xml) 팝업 출력
**/
function dispWidgetSkinInfo() {
$widget = Context::get('selected_widget');
$skin = Context::get('skin');
$path = sprintf('./widgets/%s/', $widget);
// 선택된 위젯 정보를 구함
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($path, $skin);
Context::set('skin_info',$skin_info);
// 위젯을 팝업으로 지정
$this->setLayoutFile('popup_layout');
// 템플릿 파일 지정
$this->setTemplateFile('skin_info');
}
/**
* @brief 위젯의 코드 생성기
**/
@ -37,7 +62,6 @@
// 선택된 위젯 정보를 구함
$oWidgetModel = &getModel('widget');
$oWidgetModel = &getModel('widget');
$widget_list = $oWidgetModel->getDownloadedWidgetList();
$selected_widget = Context::get('selected_widget');
if(!$selected_widget) $selected_widget = $widget_list[0]->widget;
@ -57,6 +81,11 @@
$args->site_srl = $site_module_info->site_srl;
$mid_list = $oModuleModel->getMidList($args);
// 그룹 목록을 가져옴
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups($site_module_info->site_srl);
Context::set('group_list', $group_list);
// module_category와 module의 조합
if($module_categories) {
foreach($mid_list as $module_srl => $module) {
@ -68,6 +97,11 @@
Context::set('mid_list',$module_categories);
// 메뉴 목록을 구함
$output = executeQueryArray('menu.getMenus');
Context::set('menu_list',$output->data);
// 스킨의 정보를 구함
$skin_list = $oModuleModel->getSkins($widget_info->path);
Context::set('skin_list', $skin_list);
@ -95,5 +129,26 @@
$this->setTemplateFile('widget_generate_code_in_page');
}
/**
* @brief 페이지 관리에서 사용될 위젯 스타일 코드 생성 팝업
**/
function dispWidgetStyleGenerateCodeInPage() {
// 위젯 스타일 목록
$oWidgetModel = &getModel('widget');
$widgetStyle_list = $oWidgetModel->getDownloadedWidgetStyleList();
Context::set('widgetStyle_list',$widgetStyle_list);
// 선택된 위젯 스타일 목록
$widgetstyle = Context::get('widgetstyle');
$widgetstyle_info = $oWidgetModel->getWidgetStyleInfo($widgetstyle);
if($widgetstyle && $widgetstyle_info){
Context::set('widgetstyle_info',$widgetstyle_info);
}
$this->dispWidgetGenerateCode();
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('widget_style_generate_code_in_page');
}
}
?>