layout module

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@8920 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
flyskyko 2011-08-26 08:48:29 +00:00
parent d48bcf6a6a
commit 2601043ee8
18 changed files with 767 additions and 510 deletions

View file

@ -4,27 +4,31 @@
<permissions />
<actions>
<action name="dispLayoutInfo" type="view" standalone="true" />
<action name="dispLayoutAdminContent" type="view" admin_index="true" standalone="true" />
<action name="dispLayoutAdminInsert" type="view" standalone="true" />
<action name="dispLayoutAdminModify" type="view" standalone="true" />
<action name="dispLayoutAdminEdit" type="view" standalone="true" />
<action name="dispLayoutAdminDownloadedList" type="view" standalone="true" />
<action name="dispLayoutAdminPreview" type="view" standalone="true" />
<action name="dispLayoutAdminContent" type="view" standalone="true" />
<action name="dispLayoutAdminInfo" type="view" standalone="true" />
<action name="dispLayoutAdminLayoutModify" type="view" standalone="true" />
<action name="dispLayoutAdminLayoutImageList" type="view" standalone="true" />
<action name="dispLayoutAdminMobileContent" type="view" standalone="true" />
<action name="dispLayoutAdminDownloadedMobileList" type="view" standalone="true" />
<action name="dispLayoutAdminInstalledList" type="view" admin_index="true" menu_name="installedLayout" menu_index="true" />
<action name="dispLayoutAdminInstalledMobileList" type="view" menu_name="installedLayout" />
<action name="dispLayoutAdminInstanceList" type="view" menu_name="installedLayout" />
<action name="dispLayoutAdminInsert" type="view" menu_name="installedLayout" />
<action name="dispLayoutAdminModify" type="view" menu_name="installedLayout" />
<action name="dispLayoutAdminEdit" type="view" menu_name="installedLayout" />
<action name="dispLayoutPreview" type="view" />
<action name="procLayoutAdminUpdate" type="controller" ruleset="updateLayout" />
<action name="procLayoutAdminCodeUpdate" type="controller" ruleset="codeUpdate" />
<action name="procLayoutAdminUserImageUpload" type="controller" ruleset="imageUpload" />
<action name="procLayoutAdminUserImageDelete" type="controller" />
<action name="procLayoutAdminDelete" type="controller" ruleset="deleteLayout" />
<action name="procLayoutAdminInsert" type="controller" standalone="true" ruleset="insertLayout" />
<action name="procLayoutAdminUpdate" type="controller" standalone="true" ruleset="updateLayout" />
<action name="procLayoutAdminDelete" type="controller" standalone="true" />
<action name="procLayoutAdminCodeUpdate" type="controller" standalone="true" ruleset="codeUpdate" />
<action name="procLayoutAdminCodeReset" type="controller" standalone="true" />
<action name="procLayoutAdminUserImageUpload" type="controller" standalone="true" ruleset="imageUpload" />
<action name="procLayoutAdminUserImageDelete" type="controller" standalone="true" />
<action name="procLayoutAdminUserValueInsert" type="controller" standalone="true" />
<action name="procLayoutAdminUserLayoutExport" type="controller" standalone="true" />
<action name="procLayoutAdminUserLayoutImport" type="controller" standalone="true" ruleset="userLayoutImport" />
@ -33,7 +37,7 @@
<menus>
<menu name="installedLayout">
<title xml:lang="en">Installed Layout</title>
<title xml:lang="ko">레이아웃</title>
<title xml:lang="ko">설치된 레이아웃</title>
<title xml:lang="zh-CN">Installed Layout</title>
<title xml:lang="jp">Installed Layout</title>
<title xml:lang="es">Installed Layout</title>

View file

@ -24,7 +24,7 @@
<value xml:lang="es"><![CDATA[Editar el Diseño]]></value>
<value xml:lang="tr"><![CDATA[Yerleşim Düzeni Düzenle]]></value>
<value xml:lang="vi"><![CDATA[Sửa giao diện]]></value>
<value xml:lang="mn"><![CDATA[ÐÑ<E280BA>Ð¹Ð°ÑƒÑ Ó©Ó©Ñ€Ñ‡Ð»Ó©Ñ…]]></value>
</item>
<item name="layout_name">
<value xml:lang="ko"><![CDATA[레이아웃 이름]]></value>
@ -203,7 +203,7 @@
<value xml:lang="es"><![CDATA[Módulo del diseño ayuda a usted para crear el diseño de la página web fácilmente.<br />Por usar la configuración del diseño y el menú de conección, completa con varios módulos la forma de la página web que a ser mostrados<br />* Esos diseños que no pueden ser modificados ni eliminados son propios de blog y de otros módulos, por lo cual para la configuración de ellos debe hacerse en los modulos correspondientes.]]></value>
<value xml:lang="tr"><![CDATA[Yerleşim düzeni (layout) modülü size, sitenin yerleşim düzenini kolayca oluşturma imkanı sunar.<br />Yerleşim düzeni ayarını ve menü bağlantısını kullandığınzda, websitelerin çeşitli modüllerle tamamlanmış şekilleri gösterilecektir.<br />* Blogların veya diğer modüllerin varsayılan yerleşim düzenlerini silemezseniz; onları, kendi ayar sayfalarından silmeniz gerekmektedir. ]]></value>
<value xml:lang="vi"><![CDATA[Module giao diện giúp bạn tạo ra giao diện của Website một cách dễ dàng.<br />Bằng cách sử dụng thiết lập giao diện và kết nối Menu, hình dạng hoàn thành của Website sẽ được trình bày bổ xung với nhiều Module.<br />Giao diện nào xuất hiện (<font color='red'>*</font>) là những giao diện không thể xóa hay điều chỉnh được Module. ]]></value>
<value xml:lang="mn"><![CDATA[ÐÑ<E280BA>Ð¹Ð°ÑƒÑ Ð½ÑŒ модиулын гадаад байдлыг чимж өгнө. ДÑ<E2809D>Ñ<EFBFBD>рх лÑ<C2BB>Ð¹Ð°ÑƒÑ Ð¼ÐµÐ½ÑŽÐ½Ñ<C2BD>Ñ<EFBFBD>Ñ<EFBFBD> удирдаж болно]]></value>
</item>
<item name="about_layout_code">
<value xml:lang="ko"><![CDATA[아래 레이아웃의 코드를 직접 수정 후 저장하시면 서비스에 반영이 됩니다.
@ -297,7 +297,7 @@
<value xml:lang="de"><![CDATA[L]]></value>
<value xml:lang="tr"><![CDATA[Yerleşim Düzeni Yöneticisi]]></value>
<value xml:lang="vi"><![CDATA[Quản lý giao diện]]></value>
<value xml:lang="mn"><![CDATA[Ð]]></value>
</item>
<item name="1">
<value xml:lang="ko"><![CDATA[저장]]></value>
@ -308,7 +308,7 @@
<value xml:lang="de"><![CDATA[a]]></value>
<value xml:lang="tr"><![CDATA[Kaydet]]></value>
<value xml:lang="vi"><![CDATA[Lưu lại]]></value>
<value xml:lang="mn"><![CDATA[]]></value>
</item>
<item name="2">
<value xml:lang="ko"><![CDATA[취소]]></value>
@ -319,7 +319,7 @@
<value xml:lang="de"><![CDATA[y]]></value>
<value xml:lang="tr"><![CDATA[İptal]]></value>
<value xml:lang="vi"><![CDATA[Loại bỏ]]></value>
<value xml:lang="mn"><![CDATA[Ñ]]></value>
</item>
<item name="3">
<value xml:lang="ko"><![CDATA[형태]]></value>
@ -329,7 +329,7 @@
<value xml:lang="zh-TW"><![CDATA[模式]]></value>
<value xml:lang="de"><![CDATA[o]]></value>
<value xml:lang="tr"><![CDATA[Biçim]]></value>
<value xml:lang="mn"><![CDATA[<5B>]]></value>
</item>
<item name="4">
<value xml:lang="ko"><![CDATA[배열]]></value>
@ -340,7 +340,7 @@
<value xml:lang="de"><![CDATA[u]]></value>
<value xml:lang="tr"><![CDATA[Dizi]]></value>
<value xml:lang="vi"><![CDATA[Giãn ra]]></value>
<value xml:lang="mn"><![CDATA[Ð]]></value>
</item>
<item name="5">
<value xml:lang="ko"><![CDATA[정렬]]></value>
@ -351,7 +351,7 @@
<value xml:lang="de"><![CDATA[t]]></value>
<value xml:lang="tr"><![CDATA[Yerleştir]]></value>
<value xml:lang="vi"><![CDATA[Thu lại]]></value>
<value xml:lang="mn"><![CDATA[¹]]></value>
</item>
<item name="6">
<value xml:lang="ko"><![CDATA[고정 레이아웃]]></value>
@ -362,7 +362,7 @@
<value xml:lang="de"><![CDATA[-]]></value>
<value xml:lang="tr"><![CDATA[Sabit Yerleşim Düzeni]]></value>
<value xml:lang="vi"><![CDATA[Cố định giao diện]]></value>
<value xml:lang="mn"><![CDATA[Ð]]></value>
</item>
<item name="7">
<value xml:lang="ko"><![CDATA[가변 레이아웃]]></value>
@ -373,7 +373,7 @@
<value xml:lang="de"><![CDATA[E]]></value>
<value xml:lang="tr"><![CDATA[Değişken Yerleşim Düzeni]]></value>
<value xml:lang="vi"><![CDATA[Giao diện biến thiên]]></value>
<value xml:lang="mn"><![CDATA[°]]></value>
</item>
<item name="8">
<value xml:lang="ko"><![CDATA[고정+가변(내용)]]></value>
@ -384,7 +384,7 @@
<value xml:lang="de"><![CDATA[i]]></value>
<value xml:lang="tr"><![CDATA[Sabit+Değişken (İçerik)]]></value>
<value xml:lang="vi"><![CDATA[Cố định+Biến thiên (Nội dung)]]></value>
<value xml:lang="mn"><![CDATA[Ñ]]></value>
</item>
<item name="9">
<value xml:lang="ko"><![CDATA[1칸]]></value>
@ -395,7 +395,7 @@
<value xml:lang="de"><![CDATA[n]]></value>
<value xml:lang="tr"><![CDATA[Hücre 1]]></value>
<value xml:lang="vi"><![CDATA[1 ô]]></value>
<value xml:lang="mn"><![CDATA[ƒ]]></value>
</item>
<item name="10">
<value xml:lang="ko"><![CDATA[2칸 (내용 왼쪽)]]></value>
@ -406,7 +406,7 @@
<value xml:lang="de"><![CDATA[s]]></value>
<value xml:lang="tr"><![CDATA[Hücre 2 (içeriğin sol kısmında)]]></value>
<value xml:lang="vi"><![CDATA[2 ô (Trái của nội dung)]]></value>
<value xml:lang="mn"><![CDATA[Ñ]]></value>
</item>
<item name="11">
<value xml:lang="ko"><![CDATA[2칸 (내용 오른쪽)]]></value>
@ -417,7 +417,7 @@
<value xml:lang="de"><![CDATA[t]]></value>
<value xml:lang="tr"><![CDATA[Hücre 2 (içeriğin sağ kısmında)]]></value>
<value xml:lang="vi"><![CDATA[2 ô (Phải của nội dung)]]></value>
<value xml:lang="mn"><![CDATA[]]></value>
</item>
<item name="12">
<value xml:lang="ko"><![CDATA[3칸 (내용 왼쪽)]]></value>
@ -428,7 +428,7 @@
<value xml:lang="de"><![CDATA[e]]></value>
<value xml:lang="tr"><![CDATA[Hücre 3 (içeriğin sol kısmında)]]></value>
<value xml:lang="vi"><![CDATA[3 ô (Trái của nội dung)]]></value>
<value xml:lang="mn"><![CDATA[ ]]></value>
</item>
<item name="13">
<value xml:lang="ko"><![CDATA[3칸 (내용 가운데)]]></value>
@ -439,7 +439,7 @@
<value xml:lang="de"><![CDATA[l]]></value>
<value xml:lang="tr"><![CDATA[Hücre 3 (içeriğin orta kısmında)]]></value>
<value xml:lang="vi"><![CDATA[3 ô (Giữa của nội dung)]]></value>
<value xml:lang="mn"><![CDATA[Ñ]]></value>
</item>
<item name="14">
<value xml:lang="ko"><![CDATA[3칸 (내용 오른쪽)]]></value>
@ -450,7 +450,7 @@
<value xml:lang="de"><![CDATA[l]]></value>
<value xml:lang="tr"><![CDATA[Hücre 3 (içeriğin sol kısmında)]]></value>
<value xml:lang="vi"><![CDATA[3 ô (Phải của nội dung)]]></value>
<value xml:lang="mn"><![CDATA[ƒ]]></value>
</item>
<item name="15">
<value xml:lang="ko"><![CDATA[왼쪽]]></value>
@ -461,7 +461,7 @@
<value xml:lang="de"><![CDATA[u]]></value>
<value xml:lang="tr"><![CDATA[Sol]]></value>
<value xml:lang="vi"><![CDATA[Trái]]></value>
<value xml:lang="mn"><![CDATA[Ð]]></value>
</item>
<item name="16">
<value xml:lang="ko"><![CDATA[가운데]]></value>
@ -472,7 +472,7 @@
<value xml:lang="de"><![CDATA[n]]></value>
<value xml:lang="tr"><![CDATA[Orta]]></value>
<value xml:lang="vi"><![CDATA[Giữa]]></value>
<value xml:lang="mn"><![CDATA[´]]></value>
</item>
<item name="17">
<value xml:lang="ko"><![CDATA[오른쪽]]></value>
@ -483,7 +483,7 @@
<value xml:lang="de"><![CDATA[g]]></value>
<value xml:lang="tr"><![CDATA[Sağ]]></value>
<value xml:lang="vi"><![CDATA[Phải]]></value>
<value xml:lang="mn"><![CDATA[Ð]]></value>
</item>
<item name="18">
<value xml:lang="ko"><![CDATA[전체]]></value>
@ -494,7 +494,7 @@
<value xml:lang="de"><![CDATA[e]]></value>
<value xml:lang="tr"><![CDATA[Tümü]]></value>
<value xml:lang="vi"><![CDATA[Dàn đều]]></value>
<value xml:lang="mn"><![CDATA[¸]]></value>
</item>
<item name="19">
<value xml:lang="ko"><![CDATA[레이아웃]]></value>
@ -505,7 +505,7 @@
<value xml:lang="de"><![CDATA[n]]></value>
<value xml:lang="tr"><![CDATA[Yerleşim Düzeni]]></value>
<value xml:lang="vi"><![CDATA[Giao diện]]></value>
<value xml:lang="mn"><![CDATA[Ñ]]></value>
</item>
<item name="20">
<value xml:lang="ko"><![CDATA[위젯 추가]]></value>
@ -515,7 +515,7 @@
<value xml:lang="zh-TW"><![CDATA[新增Widget]]></value>
<value xml:lang="tr"><![CDATA[Widget ekle]]></value>
<value xml:lang="vi"><![CDATA[Thêm Widget]]></value>
<value xml:lang="mn"><![CDATA[€]]></value>
</item>
<item name="21">
<value xml:lang="ko"><![CDATA[내용 위젯 추가]]></value>
@ -525,7 +525,7 @@
<value xml:lang="zh-TW"><![CDATA[新增內容]]></value>
<value xml:lang="tr"><![CDATA[İçerik Widgetı ekle]]></value>
<value xml:lang="vi"><![CDATA[Thêm Widget nội dung]]></value>
<value xml:lang="mn"><![CDATA[Ð]]></value>
</item>
<item name="22">
<value xml:lang="ko"><![CDATA[속성]]></value>
@ -535,7 +535,7 @@
<value xml:lang="zh-TW"><![CDATA[屬性]]></value>
<value xml:lang="tr"><![CDATA[Öznitelik]]></value>
<value xml:lang="vi"><![CDATA[Thuộc tính]]></value>
<value xml:lang="mn"><![CDATA[´]]></value>
</item>
<item name="23">
<value xml:lang="ko"><![CDATA[위젯 스타일]]></value>
@ -545,7 +545,7 @@
<value xml:lang="zh-TW"><![CDATA[Widget樣式]]></value>
<value xml:lang="tr"><![CDATA[Widget Tarzı]]></value>
<value xml:lang="vi"><![CDATA[Kiểu dáng Widget]]></value>
<value xml:lang="mn"><![CDATA[Ð]]></value>
</item>
<item name="24">
<value xml:lang="ko"><![CDATA[수정]]></value>
@ -555,7 +555,7 @@
<value xml:lang="zh-TW"><![CDATA[修改]]></value>
<value xml:lang="tr"><![CDATA[Düzenle]]></value>
<value xml:lang="vi"><![CDATA[Điều chỉnh]]></value>
<value xml:lang="mn"><![CDATA[°]]></value>
</item>
<item name="25">
<value xml:lang="ko"><![CDATA[삭제]]></value>
@ -565,7 +565,7 @@
<value xml:lang="zh-TW"><![CDATA[刪除]]></value>
<value xml:lang="tr"><![CDATA[Sil]]></value>
<value xml:lang="vi"><![CDATA[Xóa]]></value>
<value xml:lang="mn"><![CDATA[Ñ]]></value>
</item>
<item name="26">
<value xml:lang="ko"><![CDATA[정렬]]></value>
@ -575,7 +575,7 @@
<value xml:lang="zh-TW"><![CDATA[對齊]]></value>
<value xml:lang="tr"><![CDATA[Hizala]]></value>
<value xml:lang="vi"><![CDATA[Căn chỉnh]]></value>
<value xml:lang="mn"><![CDATA[…]]></value>
</item>
<item name="27">
<value xml:lang="ko"><![CDATA[한줄 차지]]></value>
@ -1001,4 +1001,8 @@
<value xml:lang="tr"><![CDATA[Hareketli cihazlarla bağlanırken, bağlı tüm modüller hareketli görünüme geçerler.]]></value>
<value xml:lang="vi"><![CDATA[All connected module use mobile view to display when accessing with mobile device.]]></value>
</item>
<item name="installed_layout">
<value xml:lang="ko"><![CDATA[설치된 레이아웃]]></value>
<value xml:lang="en"><![CDATA[Installed Layout]]></value>
</item>
</lang>

View file

@ -13,6 +13,7 @@
function init() {
}
// deprecated
/**
* @brief Create a new layout
* Insert a title into "layouts" table in order to create a layout
@ -26,19 +27,20 @@
$args->title = Context::get('title');
$args->layout_type = Context::get('layout_type');
if(!$args->layout_type) $args->layout_type = "P";
// Insert into the DB
// Insert into the DB
$output = $this->insertLayout($args);
if(!$output->toBool()) return $output;
// initiate if it is faceoff layout
$this->initLayout($args->layout_srl, $args->layout);
// Return result
$this->add('layout_srl', $args->layout_srl);
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispLayoutAdminContent');
header('location:'.$returnUrl);
return;
}
// initiate if it is faceoff layout
$this->initLayout($args->layout_srl, $args->layout);
// update layout info
Context::set('layout_srl', $args->layout_srl);
$output = $this->procLayoutAdminUpdate();
if (!$output->toBool()) return $output;
$this->setRedirectUrl(Context::get('success_return_url'));
}
// Insert layout information into the DB
@ -157,7 +159,7 @@
$extra_vars->{$name} = $filename;
}
}
// Save header script into "config" of layout module
// Save header script into "config" of layout module
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
$layout_config->header_script = Context::get('header_script');
@ -170,15 +172,8 @@
$output = $this->updateLayout($args);
if(!$output->toBool()) return $output;
//$this->setLayoutPath('./common/tpl');
//$this->setLayoutFile('default_layout.html');
//$this->setTemplatePath($this->module_path.'tpl');
//$this->setTemplateFile("top_refresh.html");
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispLayoutAdminModify', 'layout_srl', Context::get('layout_srl'));
header('location:'.$returnUrl);
return;
}
$this->setRedirectUrl(Context::get('error_return_url'));
return new Object();
}
function updateLayout($args) {
@ -189,7 +184,7 @@
FileHandler::removeFile($cache_file);
//remove from cache
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport())
if($oCacheHandler->isSupport())
{
$cache_key = 'object:'.$args->layout_srl;
$oCacheHandler->delete($cache_key);
@ -204,6 +199,7 @@
**/
function procLayoutAdminDelete() {
$layout_srl = Context::get('layout_srl');
$this->setRedirectUrl(Context::get('error_return_url'));
return $this->deleteLayout($layout_srl);
}
@ -220,7 +216,7 @@
$output = executeQuery("layout.deleteLayout", $args);
//remove from cache
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport())
if($oCacheHandler->isSupport())
{
$cache_key = 'object:'.$layout_srl;
$oCacheHandler->delete($cache_key);
@ -234,10 +230,12 @@
* @brief Adding Layout Code
**/
function procLayoutAdminCodeUpdate() {
$mode = Context::get('mode');
if ($mode == 'reset') return $this->procLayoutAdminCodeReset();
$layout_srl = Context::get('layout_srl');
$code = Context::get('code');
$code_css = Context::get('code_css');
$return_url = Context::get('_return_url');
$is_post = (Context::getRequestMethod() == 'POST');
if(!$layout_srl || !$code) return new Object(-1, 'msg_invalid_request');
@ -248,11 +246,7 @@
$layout_css_file = $oLayoutModel->getUserLayoutCss($layout_srl);
FileHandler::writeFile($layout_css_file, $code_css);
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispLayoutAdminEdit', 'layout_srl', $layout_srl);
header('location:'.$returnUrl);
return;
}
$this->setRedirectUrl(Context::get('error_return_url'));
$this->setMessage('success_updated');
}
@ -279,6 +273,7 @@
$this->initLayout($layout_srl, $info->layout);
$this->setMessage('success_reset');
$this->setRedirectUrl(Context::get('error_return_url'));
}
@ -297,11 +292,7 @@
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile("top_refresh.html");
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispLayoutAdminEdit', 'layout_srl', Context::get('layout_srl'));
header('location:'.$returnUrl);
return;
}
$this->setRedirectUrl(Context::get('error_return_url'));
}
/**
@ -344,9 +335,10 @@
$layout_srl = Context::get('layout_srl');
$this->removeUserLayoutImage($layout_srl,$filename);
$this->setMessage('success_deleted');
$this->setRedirectUrl(Context::get('error_return_url'));
}
// deprecated
/**
* @brief Save layout configuration
* save in "ini" format for faceoff
@ -449,6 +441,7 @@
}
}
// deprecated
/**
* @brief faceoff export
*
@ -483,6 +476,7 @@
exit();
}
// deprecated
/**
* @brief faceoff import
*

View file

@ -14,10 +14,168 @@
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* @brief Display a installed layout list
**/
function dispLayoutAdminInstalledList() {
// Set a layout list
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList('P', true);
Context::set('type', 'P');
$pcLayoutCount = $oLayoutModel->getInstalledLayoutCount('P');
$mobileLayoutCount = $oLayoutModel->getInstalledLayoutCount('M');
Context::set('pcLayoutCount', $pcLayoutCount);
Context::set('mobileLayoutCount', $mobileLayoutCount);
$this->setTemplateFile('installed_layout_list');
$security = new Security($layout_list);
$layout_list = $security->encodeHTML('..', '..author..');
foreach($layout_list as $no => $layout_info)
{
$layout_list[$no]->description = nl2br(trim($layout_info->description));
}
Context::set('layout_list', $layout_list);
}
/**
* @brief Display a installed mobile layout list
*/
function dispLayoutAdminInstalledMobileList() {
// Set a layout list
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList('M', true);
Context::set('type', 'M');
$pcLayoutCount = $oLayoutModel->getInstalledLayoutCount('P');
$mobileLayoutCount = $oLayoutModel->getInstalledLayoutCount('M');
Context::set('pcLayoutCount', $pcLayoutCount);
Context::set('mobileLayoutCount', $mobileLayoutCount);
$this->setTemplateFile('installed_layout_list');
$security = new Security($layout_list);
$layout_info = $security->encodeHTML('..', '..author..');
foreach($layout_list as $no => $layout_info)
{
$layout_list[$no]->description = nl2br(trim($layout_info->description));
}
Context::set('layout_list', $layout_list);
}
/**
* @brief Display list of pc layout instance
*/
function dispLayoutAdminInstanceList()
{
$type = Context::get('type');
$layout = Context::get('layout');
if (!in_array($type, array('P', 'M'))) $type = 'P';
if (!$layout) return $this->stop('msg_invalid_request');
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayoutInfo($layout, null, $type);
if (!$layout_info) return $this->stop('msg_invalid_request');
Context::set('layout_info', $layout_info);
$columnList = array('layout_srl', 'layout', 'module_srl', 'title', 'regdate');
$layout_list = $oLayoutModel->getLayoutInstanceList(0, $type, $layout, $columnList);
Context::set('layout_list', $layout_list);
$this->setTemplateFile('layout_instance_list');
$security = new Security();
$security->encodeHTML('layout_list..');
}
/**
* @brief Layout setting page
* Once select a layout with empty value in the DB, then adjust values
**/
function dispLayoutAdminInsert() {
$oModel = &getModel('layout');
$type = Context::get('type');
if (!in_array($type, array('P', 'M'))) $type = 'P';
// Get layout info
$layout = Context::get('layout');
$layout_info = $oModel->getLayoutInfo($layout, null, $type);
if (!$layout_info) return $this->stop('msg_invalid_request');
// get Menu list
$oMenuAdminModel = &getAdminModel('menu');
$menu_list = $oMenuAdminModel->getMenus();
Context::set('menu_list', $menu_list);
$security = new Security();
$security->encodeHTML('menu_list..');
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', 'author..', 'extra_var..', 'extra_var....');
$layout_info->description = nl2br(trim($layout_info->description));
if (!is_object($layout_info->extra_var)) $layout_info->extra_var = new StdClass();
foreach($layout_info->extra_var as $var_name => $val)
{
if (isset($layout_info->{$var_name}->description))
$layout_info->{$var_name}->description = nl2br(trim($val->description));
}
Context::set('selected_layout', $layout_info);
$this->setTemplateFile('layout_modify');
}
/**
* @brief Insert Layout details
**/
function dispLayoutAdminModify() {
// Set the layout after getting layout information
$layout_srl = Context::get('layout_srl');
// Get layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
// Error appears if there is no layout information is registered
if(!$layout_info) return $this->stop('msg_invalid_request');
// If faceoff, no need to display the path
if($layout_info->type == 'faceoff') unset($layout_info->path);
// Get a menu list
$oMenuAdminModel = &getAdminModel('menu');
$menu_list = $oMenuAdminModel->getMenus();
Context::set('menu_list', $menu_list);
$security = new Security();
$security->encodeHTML('menu_list..');
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', 'author..', 'extra_var..', 'extra_var....');
$layout_info->description = nl2br(trim($layout_info->description));
if (!is_object($layout_info->extra_var)) $layout_info->extra_var = new StdClass();
foreach($layout_info->extra_var as $var_name => $val)
{
if (isset($layout_info->{$var_name}->description))
$layout_info->{$var_name}->description = nl2br(trim($val->description));
}
Context::set('selected_layout', $layout_info);
$this->setTemplateFile('layout_modify');
}
// deprecated
/**
* @brief The first page of the layout admin
**/
function dispLayoutAdminContent() {
$path = Context::get('path');
if (!$path) return $this->stop('msg_invalid_request');
$oLayoutModel = &getModel('layout');
$columnList = array('layout_srl', 'layout', 'module_srl', 'title', 'regdate');
$layout_list = $oLayoutModel->getLayoutList(0, 'P', $columnList);
@ -26,6 +184,7 @@
$this->setTemplateFile('index');
}
// deprecated
function dispLayoutAdminMobileContent() {
$oLayoutModel = &getModel('layout');
$columnList = array('layout_srl', 'layout', 'module_srl', 'title', 'regdate');
@ -36,42 +195,6 @@
}
/**
* @brief Layout setting page
* Once select a layout with empty value in the DB, then adjust values
**/
function dispLayoutAdminInsert() {
// Set layout list
$oLayoutModel = &getModel('layout');
$layout_type = Context::get('layout_type');
$layout_list = $oLayoutModel->getDownloadedLayoutList($layout_type);
Context::set('layout_list', $layout_list);
$this->setTemplateFile('insert_layout');
}
/**
* @brief Insert Layout details
**/
function dispLayoutAdminModify() {
// Set the layout after getting layout information
$layout_srl = Context::get('layout_srl');
// Get layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
// Error appears if there is no layout information is registered
if(!$layout_info) return $this->dispLayoutAdminContent();
// If faceoff, no need to display the path
if($layout_info->type == 'faceoff') unset($layout_info->path);
Context::set('selected_layout', $layout_info);
// Get a menu list
$oMenuAdminModel = &getAdminModel('menu');
$menu_list = $oMenuAdminModel->getMenus();
Context::set('menu_list', $menu_list);
$this->setTemplateFile('layout_modify');
}
/**
* @brief Edit layout codes
**/
@ -83,7 +206,7 @@
$layout_info = $oLayoutModel->getLayout($layout_srl);
// Error appears if there is no layout information is registered
if(!$layout_info) return $this->dispLayoutAdminContent();
Context::set('selected_layout', $layout_info);
// Get Layout Code
$oLayoutModel = &getModel('layout');
$layout_file = $oLayoutModel->getUserLayoutHtml($layout_info->layout_srl);
@ -117,29 +240,21 @@
Context::set('widget_list', $widget_list);
$this->setTemplateFile('layout_edit');
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', '.author..');
Context::set('selected_layout', $layout_info);
$security = new Security();
$security->encodeHTML('layout_code_css', 'layout_code', 'widget_list..title');
// debugPrint(Context::get('selected_layout'));
// debugPrint(Context::get('layout_code_css'));
// debugPrint(Context::get('layout_code'));
// debugPrint(Context::get('layout_image_list'));
// debugPrint(Context::get('layout_image_path'));
// debugPrint(Context::get('widget_list'));
}
/**
* @brief Display a layout list
**/
function dispLayoutAdminDownloadedList() {
// Set a layout list
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList();
Context::set('layout_list', $layout_list);
$this->setTemplateFile('downloaded_layout_list');
}
function dispLayoutAdminDownloadedMobileList() {
// Set a layout list
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList(0, "M");
Context::set('layout_list', $layout_list);
$this->setTemplateFile('downloaded_mlayout_list');
}
/**
* @brief Preview a layout
**/
@ -175,6 +290,7 @@
// Temporary save the codes
$edited_layout_file = sprintf('./files/cache/layout/tmp.tpl');
FileHandler::writeFile($edited_layout_file, $code);
// Compile
$oTemplate = &TemplateHandler::getInstance();
@ -192,6 +308,7 @@
}
// deprecated
/**
* @brief Pop-up details of the layout(conf/info.xml)
**/
@ -206,7 +323,7 @@
$this->setTemplateFile('layout_detail_info');
}
// deprecated
/**
* @brief Modify admin layout of faceoff
**/
@ -253,6 +370,7 @@
$this->setTemplateFile('faceoff_layout_edit');
}
// deprecated
function dispLayoutAdminLayoutImageList(){
$layout_srl = Context::get('layout_srl');
$oLayoutModel = &getModel('layout');

View file

@ -15,6 +15,7 @@
function init() {
}
// deprecated
/**
* @brief Get a layout list created in the DB
* If you found a new list, it means that the layout list is inserted to the DB
@ -26,12 +27,27 @@
}
$args->site_srl = $site_srl;
$args->layout_type = $layout_type;
$output = executeQuery('layout.getLayoutList', $args, $columnList);
if(!$output->data) return;
if(is_array($output->data)) return $output->data;
return array($output->data);
$output = executeQueryArray('layout.getLayoutList', $args, $columnList);
return $output->data;
}
/**
* @brief Get layout instance list
**/
function getLayoutInstanceList($siteSrl = 0, $layoutType = 'P', $layout = null, $columnList = array())
{
if (!$siteSrl)
{
$siteModuleInfo = Context::get('site_module_info');
$siteSrl = (int)$siteModuleInfo->site_srl;
}
$args->site_srl = $siteSrl;
$args->layout_type = $layoutType;
$args->layout = $layout;
$output = executeQueryArray('layout.getLayoutList', $args, $columnList);
return $output->data;
}
/**
* @brief Get one of layout information created in the DB
* Return DB info + XML info of the generated layout
@ -52,9 +68,9 @@
$layout_info = $this->getLayoutInfo($layout, $output->data, $output->data->layout_type);
//insert in cache
if($oCacheHandler->isSupport()) $oCacheHandler->put($cache_key,$layout_info);
}
}
return $layout_info;
}
/**
@ -63,10 +79,7 @@
function getLayoutPath($layout_name, $layout_type = "P") {
if($layout_name == 'faceoff'){
$class_path = './modules/layout/faceoff/';
}else if(strpos($layout_name, '.') !== false){
$layout_parse = explode('.', $layout_name);
$class_path = sprintf('./themes/%s/layout/%s/', $layout_parse[0], $layout_parse[1]);
}else if($layout_type == "M") {
}else if($layout_type == "M") {
$class_path = sprintf("./m.layouts/%s/", $layout_name);
}
else
@ -79,36 +92,84 @@
/**
* @brief Get a type and information of the layout
* A type of downloaded layout
* A type of downloaded layout
**/
function getDownloadedLayoutList($layout_type = "P") {
// Get a list of downloaded layout and installed layout
if($layout_type == "M")
{
$directory = "./m.layouts";
}
else
{
$directory = "./layouts";
}
function getDownloadedLayoutList($layout_type = "P", $withAutoinstallInfo = false) {
if ($withAutoinstallInfo) $oAutoinstallModel = &getModel('autoinstall');
$searched_list = FileHandler::readDir($directory);
// Get a list of downloaded layout and installed layout
$searched_list = $this->_getInstalledLayoutDirectories($layout_type);
$searched_count = count($searched_list);
if(!$searched_count) return;
natcasesort($searched_list);
// Return information for looping searched list of layouts
$list = array();
for($i=0;$i<$searched_count;$i++) {
// Name of the layout
$layout = $searched_list[$i];
// Get information of the layout
$layout_info = $this->getLayoutInfo($layout, null, $layout_type);
if ($withAutoinstallInfo)
{
// get easyinstall remove url
$packageSrl = $oAutoinstallModel->getPackageSrlByPath($layout_info->path);
$layout_info->remove_url = $oAutoinstallModel->getRemoveUrlByPackageSrl($packageSrl);
// get easyinstall need update
$package = $oAutoinstallModel->getInstalledPackages($packageSrl);
$layout_info->need_update = $package[$packageSrl]->need_update;
// get easyinstall update url
if ($layout_info->need_update)
{
$layout_info->update_url = $oAutoinstallModel->getUpdateUrlByPackageSrl($packageSrl);
}
}
$list[] = $layout_info;
}
return $list;
}
/**
* @brief Get a count of layout
* @param $layout_type: a type of layout(P|M)
* @return int
**/
function getInstalledLayoutCount($layoutType = 'P')
{
$searchedList = $this->_getInstalledLayoutDirectories($layoutType);
return count($searchedList);
}
/**
* @brief Get list of layouts directory
* @param $layoutType: a type of layout(P|M)
* @return array
**/
function _getInstalledLayoutDirectories($layoutType = 'P')
{
if ($layoutType == 'M')
{
$directory = './m.layouts';
$globalValueKey = 'MOBILE_LAYOUT_DIRECTOIES';
}
else
{
$directory = './layouts';
$globalValueKey = 'PC_LAYOUT_DIRECTORIES';
}
if ($GLOBALS[$globalValueKey]) return $GLOBALS[$globalValueKey];
$searchedList = FileHandler::readDir($directory);
if (!$searchedList) $searchedList = array();
$GLOBALS[$globalValueKey] = $searchedList;
return $searchedList;
}
/**
* @brief Get information by reading conf/info.xml in the module
* It uses caching to reduce time for xml parsing ..
@ -296,21 +357,7 @@
}
}
if ($xml_obj->skins){
$buff .= '$layout_info->skins = array();';
$buff .= '$layout_info->skins["module"] = array();';
$buff .= '$layout_info->skins["widget"] = array();';
$skins = $xml_obj->skins->skin;
if (is_array($skins)){
foreach($skins as $val){
$buff .= '$layout_info->skins["'.$val->attrs->type.'"]["'.$val->attrs->name.'"] = "'.$val->attrs->skin.'";';
}
}else{
$buff .= '$layout_info->skins["'.$skins->attrs->type.'"]["'.$skins->attrs->name.'"] = "'.$skins->attrs->skin.'";';
}
}
} else {
// Layout title, version and other information
@ -515,7 +562,7 @@
}
/**
* @brief user layout cache
* @brief user layout cache
* todo It may need to remove the file itself
**/
function getUserLayoutCache($layout_srl,$lang_type){
@ -523,7 +570,7 @@
}
/**
* @brief layout cache
* @brief layout cache
**/
function getLayoutCache($layout_name,$lang_type){
return sprintf("./files/cache/layout/%s.%s.cache.php",$layout_name,$lang_type);
@ -633,36 +680,5 @@
Context::addBodyHeader($oTemplate->compile($this->module_path.'/tpl', 'faceoff_layout_menu'));
}
}
function getThemaXml($layout_path){
if(!$layout_path) return;
$xml_file = sprintf("%sconf/thema.xml", $layout_path);
if(!file_exists($xml_file)) return;
$oXmlParser = new XmlParser();
$tmp_xml_obj = $oXmlParser->loadXmlFile($xml_file);
$xml_obj = $tmp_xml_obj->thema;
if(!$xml_obj) return;
$thema_info->layout_name = $xml_obj->name->body;
$thema_info->skins = array();
$thema_info->skins['module'] = array();
$thema_info->skins['widget'] = array();
$skins = $xml_obj->skins->skin;
if ($skins){
if (is_array($skins)){
foreach($skins as $val){
$thema_info->skins[$val->attrs->type][$val->attrs->name] = $val->attrs->skin;
}
}else{
$thema_info->skins[$skins->attrs->type][$skins->attrs->name] = $skins->attrs->skin;
}
}
return $thema_info;
}
}
?>

View file

@ -27,6 +27,64 @@
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('layout_detail_info');
}
/**
* @brief Preview a layout
**/
function dispLayoutPreview() {
// admin check
// this act is admin view but in normal view because do not load admin css/js files
$logged_info = Context::get('logged_info');
if ($logged_info->is_admin != 'Y') return $this->stop('msg_invalid_request');
$layout_srl = Context::get('layout_srl');
$code = Context::get('code');
$code_css = Context::get('code_css');
if(!$layout_srl || !$code) return new Object(-1, 'msg_invalid_request');
// Get the layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
if(!$layout_info) return new Object(-1, 'msg_invalid_request');
// Separately handle the layout if its type is faceoff
if($layout_info && $layout_info->type == 'faceoff') $oLayoutModel->doActivateFaceOff($layout_info);
// Apply CSS directly
Context::addHtmlHeader("<style type=\"text/css\" charset=\"UTF-8\">".$code_css."</style>");
// Set names and values of extra_vars to $layout_info
if($layout_info->extra_var_count) {
foreach($layout_info->extra_var as $var_id => $val) {
$layout_info->{$var_id} = $val->value;
}
}
// menu in layout information becomes an argument for Context:: set
if($layout_info->menu_count) {
foreach($layout_info->menu as $menu_id => $menu) {
if(file_exists($menu->php_file)) @include($menu->php_file);
Context::set($menu_id, $menu);
}
}
Context::set('layout_info', $layout_info);
Context::set('content', Context::getLang('layout_preview_content'));
// Temporary save the codes
$edited_layout_file = sprintf('./files/cache/layout/tmp.tpl');
FileHandler::writeFile($edited_layout_file, $code);
// Compile
$oTemplate = &TemplateHandler::getInstance();
$layout_path = $layout_info->path;
$layout_file = 'layout';
$layout_tpl = $oTemplate->compile($layout_path, $layout_file, $edited_layout_file);
Context::set('layout','none');
// Convert widgets and others
$oContext = &Context::getInstance();
Context::set('layout_tpl', $layout_tpl);
// Delete Temporary Files
FileHandler::removeFile($edited_layout_file);
$this->setTemplateFile('layout_preview');
}
}
?>

View file

@ -8,6 +8,7 @@
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" filter="number" default="0" notnull="notnull" />
<condition operation="equal" column="layout_type" var="layout_type" default="P" pipe="and" />
<condition operation="equal" column="layout" var="layout" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="layout_srl" order="desc" />

View file

@ -1,10 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<customrules>
<rule name="imageExtension" type="regex" test="/\.(gif|jpg|jpeg|gif|png|swf|flv)$/i" />
</customrules>
<fields>
<field name="user_layout_image['name']" required="true" rule="imageExtension" />
<field name="code" required="true" />
<field name="layout_srl" required="true" rule="number" />
</fields>
</ruleset>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<fields>
<field name="layout_srl" required="true" rule="number" />
</fields>
</ruleset>

View file

@ -4,7 +4,7 @@
<rule name="imageExtension" type="regex" test="/\.(gif|jpg|jpeg|gif|png|swf|flv)$/i" />
</customrules>
<fields>
<field name="user_layout_image['name']" required="true" rule="imageExtension" />
<field name="user_layout_image" required="true" rule="imageExtension" />
<field name="layout_srl" required="true" rule="number" />
</fields>
</ruleset>

View file

@ -0,0 +1,3 @@
.uploaded_image_list {list-style: none; margin: 0; padding: 0;}
.uploaded_image_list li {display: inline-block; margin-right: 10px;}
.uploaded_image_list img {border: 1px #ccc solid; padding: 3px; width: 96px; height: 96px;}

View file

@ -1,17 +1,5 @@
<!--%import("js/layout_admin.js")-->
<h1 class="h1">{$lang->installed_layout}</h1>
<h3 class="xeAdmin"><span class="gray">{$lang->layout_management}</span></h3>
<div class="infoText">{nl2br($lang->about_layout)}</div>
<!-- 관리자 페이지용 메뉴 -->
<!--@if($module == 'admin')-->
<div class="header4">
<ul class="localNavigation">
<li <!--@if($act=='dispLayoutAdminContent')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminContent','layout_type','')}">{$lang->layout_list}</a></li>
<li <!--@if($act=='dispLayoutAdminDownloadedList')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminDownloadedList','layout_type','')}">{$lang->downloaded_list}</a></li>
<li <!--@if($act=='dispLayoutAdminMobileContent')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminMobileContent','layout_type','')}">{$lang->mobile_layout_list}</a></li>
<li <!--@if($act=='dispLayoutAdminDownloadedMobileList')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminDownloadedMobileList','layout_type','')}">{$lang->mobile_downloaded_list}</a></li>
</ul>
</div>
<!--@end-->
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>

View file

@ -0,0 +1,57 @@
<include target="header.html" />
<div class="table even easyList">
<table width="100%" border="1" cellspacing="0">
<caption>
<a cond="$act != 'dispLayoutAdminInstalledList'" href="{getUrl('act', 'dispLayoutAdminInstalledList')}">PC({$pcLayoutCount})</a>
<block cond="$act == 'dispLayoutAdminInstalledList'">PC({$pcLayoutCount})</block>
|
<a cond="$act != 'dispLayoutAdminInstalledMobileList'" href="{getUrl('act', 'dispLayoutAdminInstalledMobileList')}">Mobile({$mobileLayoutCount})</a>
<block cond="$act == 'dispLayoutAdminInstalledMobileList'">Mobile({$mobileLayoutCount})</block>
</caption>
<thead>
<tr>
<th scope="col" class="title">{$lang->layout_name}</th>
<th scope="col">{$lang->version}</th>
<th scope="col">{$lang->author}</th>
<th scope="col">{$lang->path}</th>
<th scope="col">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<block loop="$layout_list => $key, $layout">
<tr>
<block cond="$layout->title">
<td class="title">
<p><a href="{getUrl('act', 'dispLayoutAdminInstanceList', 'type', $type, 'layout', $layout->layout)}">{$layout->title}</a></p>
<p>{$layout->description}</p>
<p cond="$layout->need_update == 'Y'" class="update">
{$lang->msg_avail_update} <a href="{$layout->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a>
</p>
</td>
<td>{$layout->version}</td>
<td>
<block loop="$layout->author => $author">
<a cond="$author->homepage" href="{$author->homepage}" target="_blank">{$author->name}</a>
<block cond="!$author->homepage">{$author->name}</block>
</block>
</td>
<td>{$layout->path}</td>
<td><a cond="$layout->remove_url" href="{$layout->remove_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a></td>
</block>
<block cond="!$layout->title">
<td class="title">
<p><a href="{getUrl('act', 'dispLayoutAdminInstanceList', 'path', urlencode($layout->path))}">{$layout->layout}</a></p>
<p cond="$layout->need_update == 'Y'" class="update">
{$lang->msg_avail_update} <a href="{$layout->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a>
</p>
</td>
<td>-</td>
<td>-</td>
<td>{$layout->path}</td>
<td><a cond="$layout->remove_url" href="{$layout->remove_url}&amp;return_url={urlencodegetRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a></td>
</block>
</tr>
</block>
</tbody>
</table>
</div>

View file

@ -0,0 +1,24 @@
jQuery(document).ready(function($){
$('.uploaded_image').css('cursor', 'pointer');
$('.uploaded_image_path').hide();
$('.uploaded_image').bind('click', function(e){
var path = $(this).siblings('.uploaded_image_path').html();
var html = '<div class="selected_image_path">' + path + '</div>';
$('.selected_image_path').remove();
$('.uploaded_image_list').after(html);
});
});
function doPreviewLayoutCode()
{
var $form = jQuery('#fo_layout'), $act = $form.find('input[name=act]');
var og_act = $act.val();
$form.attr('target', '_LayoutPreview');
$act.val('dispLayoutPreview');
$form.submit();
$form.removeAttr('target');
$act.val(og_act);
}

View file

@ -0,0 +1,8 @@
var ConfirmCheck = xe.createPlugin('confirm_check', {
API_BEFORE_VALIDATE: function(sender, params){
return confirm(xe.lang.confirm_delete);
}
});
var Validator = xe.getApp('Validator')[0];
Validator.registerPlugin(new ConfirmCheck());

View file

@ -1,127 +1,102 @@
<!--%import("filter/update_layout_code.xml")-->
<!--%import("filter/reset_layout_code.xml")-->
<include target="header.html" />
<load target="css/adminEdit.css" />
<load target="js/adminEdit.js" />
<!--#include("header.html")-->
<h3 class="xeAdmin">{$selected_layout->layout_title}</h3>
<h2 class="h2">{$selected_layout->layout_title}</h2>
<div class="header4">
<ul class="localNavigation">
<li><a href="{getUrl('act','dispLayoutAdminModify')}">{$lang->cmd_layout_management}</a></li>
<li class="on"><a href="#" onclick="return false;">{$lang->cmd_layout_edit}</a></li>
</ul>
</div>
<h3 class="h3">{$selected_layout->title} ver {$selected_layout->version} ({$selected_layout->layout})</h3>
<p>{nl2br($lang->about_layout_code)}</p>
<h4 class="xeAdmin">{$selected_layout->title} ver {$selected_layout->version} ({$selected_layout->layout})</h4>
<p class="summary">{nl2br($lang->about_layout_code)}</p>
<h3 class="h3">{$lang->layout_image_repository}</h3>
<p>{nl2br($lang->about_layout_image_repository)}</p>
<h4 class="xeAdmin">{$lang->layout_image_repository}</h4>
<p class="summary">{nl2br($lang->about_layout_image_repository)}</p>
<fieldset class="section">
<ul class="uploaded_image_list">
<li loop="$layout_image_list => $no, $file">
{@$ext=substr(strrchr($file,'.'),1)}
<div class="a uploaded_image">
<script cond="$ext == 'swf' || $ext == 'flv'" type="text/javascript">
//<![CDATA[
displayMultimedia('{getUrl('')}{$layout_image_path}{$file}', '100px', '100px');
//]]>
</script>
<img cond="$ext != 'swf' && $ext != 'flv'" src="{getUrl('')}{$layout_image_path}{$file}" />
</div>
<div class="uploaded_image_path">{$layout_image_path}{$file}</div>
<form action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageDelete" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="filename" value="{$file}" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="imageUpload" action="{Context::getRequestUri()}" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageUpload" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input class="text" type="submit" value="{$lang->cmd_delete}" />
</form>
</li>
</ul>
<form class="form" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageUpload" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<ul>
<li>
<p class="a"><input type="file" name="user_layout_image" value="" /> <span class="desc">{$lang->msg_layout_image_target}</span></p>
</li>
</ul>
<div class="btnArea">
<span class="btn medium"><input type="submit" value="{$lang->cmd_save}" /></span>
</div>
</form>
</fieldset>
<table cellspacing="0" class="crossTable">
<tbody>
<tr>
<td>
<!--@foreach($layout_image_list as $no => $file)-->
{@$ext=substr(strrchr($file,'.'),1)}
<div class="preview_image" style="width:100px;height:100px;float:left; position:relative;margin-right:10px; ">
<!--@if($ext=='swf'||$ext=='flv')-->
<script type="text/javascript">//<![CDATA[
displayMultimedia('{getUrl('')}{$layout_image_path}{$file}', '100%', '100%');
//]]></script>
<!--@elseif(in_array($ext,array('gif','png','jpg','jpeg')))-->
<img src="{getUrl('')}{$layout_image_path}{$file}" width="100%" height="100%" />
<!--@end-->
<a href="#" onclick="deleteFile({$layout_srl},'{$file}');return false" onmouseover="jQuery('div.imagePath').html('{$layout_image_path}{$file}')" style="position:absolute; left:3px; top:3px;" class="small button red"><span>{$lang->cmd_delete}</span></a>
</div>
<!--@end-->
&nbsp;
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>
<div class="imagePath"></div>
<input name="user_layout_image" type="file" />
<span class="button black strong"><button type="submit">{$lang->cmd_save}</button></span>
{$lang->msg_layout_image_target}
</td>
</tr>
</tfoot>
</table>
</form>
<block cond="$selected_layout->type == 'faceoff'">
<h3 class="h3">{$lang->layout_migration}</h3>
<p>{nl2br($lang->about_layout_migration)}</p>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->layout_export}</div></th>
<td>
<a href="{getUrl('','act','procLayoutAdminUserLayoutExport','layout_srl',$layout_srl)}" class="button black strong"><span>{$lang->layout_btn_export}</span></a>
<p>{$lang->about_layout_export}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->layout_import}</div></th>
<td>
<form ruleset="userLayoutImport" action="{getUrl('')}" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserLayoutImport" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="file" name="file" />
<span class="button black strong"><button type="submit">{$lang->cmd_submit}</button></span>
</form>
<p>{$lang->about_layout_import}</p>
</td>
</tr>
</table>
</block>
<!--@if($selected_layout->type=='faceoff')-->
<h4 class="xeAdmin">{$lang->layout_migration}</h4>
<p class="summary">{nl2br($lang->about_layout_migration)}</p>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->layout_export}</div></th>
<td>
<a href="{getUrl('','act','procLayoutAdminUserLayoutExport','layout_srl',$layout_srl)}" class="button black strong"><span>{$lang->layout_btn_export}</span></a>
<p>{$lang->about_layout_export}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->layout_import}</div></th>
<td>
<form ruleset="userLayoutImport" action="{getUrl('')}" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserLayoutImport" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="file" name="file" />
<span class="button black strong"><button type="submit">{$lang->cmd_submit}</button></span>
</form>
<p>{$lang->about_layout_import}</p>
</td>
</tr>
</table>
<!--@end-->
<form ruleset="codeUpdate" id="fo_layout" action="{getUrl('','module','admin')}" method="post">
<form id="fo_layout" class="form" ruleset="codeUpdate" action="./" method="post">
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="act" value="procLayoutAdminCodeUpdate" />
<input type="hidden" name="_filter" value="update_layout_code" />
<input type="hidden" name="_return_url" value="{htmlspecialchars($current_url)}" />
<table cellspacing="0" class="rowTable">
<tbody>
<tr><th class="title">HTML</th></tr>
<tr>
<td>
<textarea name="code" style="width:100%;height:300px;font-size:11px;">{htmlspecialchars($layout_code)}</textarea>
<!--@foreach($widget_list as $widget)-->
<a href="{getUrl('','module','widget','act','dispWidgetGenerateCode','selected_widget',$widget->widget,'module_srl',$module_srl)}" onclick="popopen(this.href,'GenerateCodeInPage');return false;" class="button"><span>{$widget->title}</span></a>
<!--@end-->
</td>
</tr>
<tr><th class="title">CSS</th></tr>
<tr>
<td>
<textarea name="code_css" style="width:100%;height:300px;font-size:11px;">{htmlspecialchars($layout_code_css)}</textarea>
</td>
</tr>
<tr>
<th class="button">
<span class="button black strong"><button type="submit">{$lang->cmd_save}</button></span>
<span class="button"><button type="button" onclick="doPreviewLayoutCode();">{$lang->cmd_preview}</button></span>
<span class="button red"><button type="reset" onclick="doResetLayoutCode('{$layout_srl}')">{$lang->cmd_reset}</button></span>
<!--button type="submit" name="act" value="procCommunicationMoveFriend">{$lang->cmd_move}</button>
<button type="submit" name="act" value="procCommunicationDeleteFriend">{$lang->cmd_delete}</button-->
</th>
</tr>
</tbody>
</table>
<h3 class="h3">HTML</h3>
<div>
<textarea name="code" style="width:100%;height:300px;font-size:11px;">{$layout_code}</textarea>
<!--@foreach($widget_list as $widget)-->
<span class="btn"><a href="{getUrl('','module','widget','act','dispWidgetGenerateCode','selected_widget',$widget->widget,'module_srl',$module_srl)}" onclick="popopen(this.href,'GenerateCodeInPage');return false;">{$widget->title}</a></span>
<!--@end-->
</div>
<h3 class="h3">CSS</h3>
<div>
<textarea name="code_css" style="width:100%;height:300px;font-size:11px;">{$layout_code_css}</textarea>
</div>
<div class="btnArea" style="float: left" >
<span class="btn medium"><button type="submit" name="mode" value="reset">{$lang->cmd_reset}</button></span>
</div>
<div class="btnArea">
<span class="btn medium"><button type="button" onclick="doPreviewLayoutCode();">{$lang->cmd_preview}</button></span>
<span class="btn medium"><button type="submit" name="mode" value="save">{$lang->cmd_save}</button></span>
</div>
</form>
<iframe name="hidden_iframe" style="width:0;height:0;border:0" ></iframe>

View file

@ -0,0 +1,43 @@
<include target="header.html" />
<load target="js/adminList.js" />
<script type="text/javascript">
xe.lang.confirm_delete = '{$lang->confirm_delete}';
</script>
<h2 class="h2">{$layout_info->title} ver {$layout_info->version} ({$layout_info->layout})</h2>
<div class="table even easyList">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col">{$lang->no}</th>
<th scope="col" class="title">{$lang->title}</th>
<th scope="col">{$lang->regdate}</th>
<th scope="col">{$lang->cmd_layout_management}</th>
<th scope="col">{$lang->cmd_layout_edit}</th>
<th scope="col">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<tr loop="$layout_list => $no, $layout">
<td>{$no+1}</td>
<td class="title">{$layout->title}</td>
<td>{zdate($layout->regdate, "Y-m-d")}</td>
<td><a href="{getUrl('act', 'dispLayoutAdminModify', 'layout_srl', $layout->layout_srl)}">{$lang->cmd_layout_management}</a></td>
<td><a href="{getUrl('act', 'dispLayoutAdminEdit', 'layout_srl', $layout->layout_srl)}">{$lang->cmd_layout_edit}</a></td>
<td>
<form class="layout_delete_form" ruleset="deleteLayout" action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminDelete" />
<input type="hidden" name="layout_srl" value="{$layout->layout_srl}" />
<input class="text" type="submit" value="{$lang->cmd_delete}" />
</form>
</td>
</tr>
</tbody>
</table>
</div>
<div class="btnArea">
<span class="btn small"><a href="{getUrl('act', 'dispLayoutAdminInsert', 'layout', $layout_info->layout)}">{$lang->cmd_insert}</a></span>
</div>

View file

@ -1,184 +1,145 @@
<!--%import("filter/update_layout_info.xml")-->
<include target="header.html" />
<!--#include("header.html")-->
<h2 cond="$act == 'dispLayoutAdminModify'" class="h2">{$selected_layout->layout_title}</h2>
<h2 cond="$act == 'dispLayoutAdminInsert'" class="h2">{$selected_layout->title}</h2>
<h3 class="xeAdmin">{$selected_layout->layout_title}</h3>
<div class="header4">
<ul class="localNavigation">
<li class="on"><a href="#" onclick="return false;">{$lang->cmd_layout_management}</a></li>
<li><a href="{getUrl('act','dispLayoutAdminEdit')}">{$lang->cmd_layout_edit}</a></li>
</ul>
</div>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="updateLayout" id="fo_layout" action="./" method="post" enctype="multipart/form-data">
<form ruleset="updateLayout"|cond="$act == 'dispLayoutAdminModify'" ruleset="insertLayout"|cond="$act == 'dispLayoutAdminInsert'" action="./" class="form" enctype="multipart/form-data" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUpdate" />
<input type="hidden" name="act" value="procLayoutAdminUpdate"|cond="$act == 'dispLayoutAdminModify'" value="procLayoutAdminInsert"|cond="$act == 'dispLayoutAdminInsert'" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="layout" value="{$selected_layout->layout}" />
<input type="hidden" name="layout_type" value="{$selected_layout->layout_type}" />
<input type="hidden" name="success_return_url" value="{getUrl('act', 'dispLayoutAdminInstanceList')}" />
<ul>
<li>
<p class="q">{$lang->layout}</p>
<p class="a">{$selected_layout->title} ver {$selected_layout->version} ({$selected_layout->layout})</p>
</li>
<li cond="$selected_layout->path">
<p class="q">{$lang->path}</p>
<p class="a">{$selected_layout->path}</p>
</li>
<li cond="$selected_layout->description">
<p class="q">{$lang->description}</p>
<p class="a">{$selected_layout->description}</p>
</li>
<li cond="$selected_layout->author->homepage">
<p class="q">{$lang->author}</p>
<p class="a"><a href="{$selected_layout->author->homepage}" target="_blank">{$selected_layout->author->name}</a></p>
</li>
<li>
<p class="q">{$lang->header_script}</p>
<p class="a">
<textarea name="header_script" cols="42" rows="5">{$selected_layout->header_script}</textarea>
</p>
<p class="desc">{$lang->about_header_script}</p>
</li>
<li>
<p class="q">{$lang->title}</p>
<p class="a">
<input type="text" name="title" value="{$selected_layout->layout_title}" />
</p>
<p class="desc">{$lang->about_title}</p>
</li>
</ul>
<table cellspacing="0" class="rowTable">
<col width="200" />
<col width="*" />
<tr>
<th scope="row"><div>{$lang->layout}</div></th>
<td class="wide">{$selected_layout->title} ver {$selected_layout->version} ({$selected_layout->layout})</td>
</tr>
<block loop="$selected_layout->extra_var => $name, $var">
<block cond="!$not_first && !$var->group"><ul></block>
<block cond="$group != $var->group">
<block cond="$not_first"></ul></block>
<h3 class="h3">{$var->group}</h3>
<ul>
{@$group = $var->group}
</block>
{@$not_first = true}
<li>
<p class="q">{$var->title}</p>
<div class="a">
<input cond="$var->type == 'text'" type="text" name="{$name}" value="{htmlspecialchars($var->value)}" />
<!--@if($selected_layout->path)-->
<tr class="row2">
<th scope="row"><div>{$lang->path}</div></th>
<td>{$selected_layout->path}</td>
</tr>
<!--@end-->
<textarea cond="$var->type == 'textarea'" name="{$name}" cols="42" rows="5">{htmlspecialchars($var->value)}</textarea>
<!--@if($selected_layout->description)-->
<tr class="row2">
<th scope="row"><div>{$lang->description}</div></th>
<td>{nl2br(trim($selected_layout->description))}</td>
</tr>
<!--@end-->
<block cond="$var->type == 'image'">
<block cond="$var->value">
<p><img src="../../../{$var->value}" alt="" /> <input type="checkbox" name="del_{$name}" value="Y" id="del_{$name}" /><label for="del_{$name}">{$lang->cmd_delete}</label></p>
</block>
<p><input type="file" name="{$name}" value="" /></p>
</block>
<!--@if($selected_layout->author->homepage)-->
<tr>
<th scope="row"><div>{$lang->author}</div></th>
<td><a href="{$selected_layout->author->homepage}" onclick="window.open(this.href);return false;" class="blue">{$selected_layout->author->name}</a></td>
</tr>
<!--@end-->
<select cond="$var->type == 'select'" name="{$name}">
<option loop="$var->options => $key, $val" value="{$key}" selected="selected"|cond="$key == $var->value">{$val->val}</option>
</select>
<tr>
<th scope="row"><div>{$lang->header_script}</div></th>
<td>
<textarea name="header_script" class="inputTypeTextArea w400">{htmlspecialchars($selected_layout->header_script)}</textarea>
<p>{$lang->about_header_script}</p>
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->title}</div></th>
<td>
<input type="text" name="title" value="{htmlspecialchars($selected_layout->layout_title)}" class="inputTypeText w400" />
<p>{$lang->about_title}</p>
</td>
</tr>
<block cond="$var->type == 'radio'">
<block loop="$var->options => $key, $val">
<block cond="$val->thumbnail">
{@
$_img_info = getImageSize($val->thumbnail);
$_height = $_img_info[1] + 40;
$_width = $img_info[0] + 20;
$_talign = 'center';
}
</block>
<block cond="!$val->thumbnail">
{@
$_width = 200;
$_height = 20;
$_talign = 'left';
}
</block>
<!--@foreach($selected_layout->extra_var as $name => $var)-->
<block cond="$var->thumbnail_exist">
<div cond= style="float:left;text-align:{$_talign};margin-bottom:1em;width:{$_width}px;height:{$_height}px;margin-right:10px;">
</block>
<label>
<input type="radio" name="{$name}" value="{$key}" />{$val->val}
<block cond="$val->thumbnail">
<br />
<img src="../../../{$val->thumbnail}" alt="{$val->val}" style="border:1px solid #888888;padding:2px;margin:2px;"/>
</block>
</label>
<block cond="$var->thumbnail_exist">
</div>
</block>
</block>
</block>
</div>
<p class="desc">{$var->description}</p>
</li>
</block>
</ul>
<!--@if($var->group && ((!$group) || $group != $var->group))-->
</table>
<h3 class="h3">{$lang->menu}</h3>
<ul>
<li loop="$selected_layout->menu => $menu_name, $menu_info">
<p class="q">{$menu_info->title} ({$menu_name})</p>
<p class="a">
<select name="{$menu_name}">
<option value="0">------------------------</option>
<option loop="$menu_list => $key, $val" value="{$val->menu_srl}" selected="selected"|cond="$val->menu_srl == $menu_info->menu_srl">{$val->title}</option>
</select>
<a href="#">{$lang->cmd_management}</a>
</p>
</li>
<li>
<p class="q">{$lang->not_apply_menu}</p>
<p class="a">
<input type="checkbox" name="apply_layout" value="Y" />{$lang->about_not_apply_menu}
</p>
</li>
<li cond="$selected_layout->layout_type == 'M'">
<p class="q">{$lang->apply_mobile_view}</p>
<p class="a">
<input type="checkbox" name="apply_mobile_view" value="Y" />{$lang->about_apply_mobile_view}
</p>
</li>
</ul>
{@$group = $var->group}
<h4 class="xeAdmin">{$group}</h4>
<table cellspacing="0" class="rowTable">
<col width="200" />
<col width="*" />
<!--@end-->
<div class="btnArea">
<span class="btn medium">
<input type="submit" value="{$lang->cmd_insert}"|cond="$act == 'dispLayoutAdminInsert'" value="{$lang->cmd_save}"|cond="$act == 'dispLayoutAdminModify'" />
</span>
</div>
<tr>
<th scope="row"><div>{$var->title}</div></th>
<td>
<!--@if($var->type == "text")-->
<input type="text" name="{$name}" value="{htmlspecialchars($var->value)}" class="inputTypeText w400"/>
<!--@elseif($var->type == "textarea")-->
<textarea name="{$name}" class="inputTypeTextArea w400">{htmlspecialchars($var->value)}</textarea>
<!--@elseif($var->type=="image")-->
<!--@if($var->value)-->
<div>
<img src="../../../{$var->value}" alt="image" /><br />
<input type="checkbox" name="del_{$name}" value="Y" id="del_{$name}" class="checkbox" />
<label for="del_{$name}">{$lang->cmd_delete}</label>
</div>
<!--@end-->
<input type="file" name="{$name}" value="" />
<!--@elseif($var->type == "select")-->
<select name="{$name}">
<!--@foreach($var->options as $key => $val)-->
<option value="{$key}" <!--@if($key==$var->value)-->selected="selected"<!--@end-->>{$val->val}</option>
<!--@end-->
</select>
<!--@elseif($var->type == "radio")-->
<!--@foreach($var->options as $key => $val)-->
<!--@if($val->thumbnail)-->
{@ $_img_info = getImageSize($val->thumbnail); $_height = $_img_info[1]+40; $_width = $_img_info[0]+20; $_talign = "center"; }
<!--@else-->
{@ $_width = 200; $_height = 20; $_talign = "left"; }
<!--@end-->
<!--@if($var->thumbnail_exist)-->
<div style="float:left;text-align:{$_talign};margin-bottom:1em;width:{$_width}px;height:{$_height}px;margin-right:10px;">
<!--@endif-->
<label>
<input type="radio" name="colorset" value="{$key}" /> {$val->val}
<!--@if($val->thumbnail)-->
<br />
<img src="../../../{$val->thumbnail}" alt="{$val->val}" style="border:1px solid #888888;padding:2px;margin:2px;"/>
<!--@endif-->
</label>
<!--@if($var->thumbnail_exist)-->
</div>
<!--@endif-->
<!--@endforeach-->
<!--@endif-->
<p style="clear:both;">{$var->description}</p>
</td>
</tr>
<!--@end-->
</table>
<h4 class="xeAdmin">{$lang->menu}</h4>
<table cellspacing="0" class="rowTable">
<col width="200" />
<col width="*" />
<!--@foreach($selected_layout->menu as $menu_name => $menu_info)-->
<tr class="row{$cycle_idx}">
<th scope="row"><div>{$menu_info->title}<br />({$menu_name})</div></th>
<td class="left tahoma">
<select name="{$menu_name}">
<option value="0">------------------------</option>
<!--@foreach($menu_list as $key => $val)-->
<option value="{$val->menu_srl}" <!--@if($val->menu_srl == $menu_info->menu_srl)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
<a href="#" onclick="doMenuManagement('{$menu_name}');return false;" class="button"><span>{$lang->cmd_management}</span></a>
</td>
</tr>
<!--@end-->
<tr>
<th scope="row"><div>{$lang->not_apply_menu}</div></th>
<td>
<input type="checkbox" name="apply_layout" value="Y" />
{$lang->about_not_apply_menu}
</td>
</tr>
<!--@if($selected_layout->layout_type == "M")-->
<tr>
<th scope="row"><div>{$lang->apply_mobile_view}</div></th>
<td>
<input type="checkbox" name="apply_mobile_view" value="Y" />
{$lang->about_apply_mobile_view}
</td>
</tr>
<!--@end-->
</table>
<div class="buttonArea">
<span class="button black strong"><input type="submit" value="{$lang->cmd_save}" /></span>
<!--@if($module=="admin")-->
<a href="{getUrl('act','dispLayoutAdminContent')}" class="button"><span>{$lang->cmd_list}</span></a>
<!--@else-->
<a href="{getUrl('act','')}" class="button"><span>{$lang->cmd_back}</span></a>
<!--@end-->
</div>
</form>
<iframe name="hidden_iframe" frameborder="0" style="display:none"></iframe>
</form>