merge from 1.7.3.5(r13153:r13167)

git-svn-id: http://xe-core.googlecode.com/svn/trunk@13168 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2013-09-29 23:32:39 +00:00
parent cc47d2b247
commit 2d3f149b5a
2042 changed files with 129266 additions and 126243 deletions

View file

@ -9,10 +9,10 @@
<title xml:lang="ru">Модули</title>
<title xml:lang="zh-TW">模組</title>
<title xml:lang="tr">Modül</title>
<description xml:lang="ko">모듈 생성 및 관리하는 모듈입니다.</description>
<description xml:lang="ko">모듈을 생성하고 관리합니다.</description>
<description xml:lang="zh-CN">生成及管理模块的模块。</description>
<description xml:lang="jp">モジュールの生成、管理するモジュールです。</description>
<description xml:lang="en">This module is for creating/managering the other modules.</description>
<description xml:lang="en">Creating/managering the other modules.</description>
<description xml:lang="vi">Module cho phép tạo và quản lý những Module khác.</description>
<description xml:lang="es">Este módulo is para crear y manejar los otros módulos.</description>
<description xml:lang="ru">Этот модуль служит для создания/управления другими модулями.</description>

View file

@ -3,6 +3,7 @@
<grants />
<permissions>
<permission action="dispModuleSelectList" target="member" />
<permission action="getModuleAdminGrant" target="manager" />
</permissions>
<actions>
<action name="dispModuleSelectList" type="view" standalone="true" />
@ -26,6 +27,7 @@
<action name="procModuleFileBoxAdd" type="controller" standalone="true" />
<action name="procModuleFileBoxDelete" type="controller" standalone="true" />
<action name="getModuleSkinInfoList" type="model" />
<action name="getModuleAdminModuleList" type="model" standalone="true" />
<action name="getModuleAdminLangCode" type="model" standalone="true" />
<action name="getModuleAdminLangListByName" type="model" standalone="true" />
@ -33,6 +35,12 @@
<action name="getLangListByLangcodeForAutoComplete" type="model" standalone="true" />
<action name="getFileBoxListHtml" type="model" />
<action name="getLangByLangcode" type="model" />
<action name="getModuleAdminGrant" type="model" />
<action name="getModuleAdminMultilingualHtml" type="model" />
<action name="getModuleAdminLangListHtml" type="model" />
<action name="getModuleInfoByMenuItemSrl" type="model" />
<action name="getModuleAdminModuleSearcherHtml" type="model" />
<action name="getModuleAdminModuleInfo" type="model" />
<action name="procModuleAdminInsertCategory" type="controller" standalone="true" ruleset="insertCategory" />
<action name="procModuleAdminUpdateCategory" type="controller" standalone="true" ruleset="updateCategory" />
@ -45,6 +53,8 @@
<action name="procModuleAdminInsertLang" type="controller" standalone="true" />
<action name="procModuleAdminDeleteLang" type="controller" standalone="true" />
<action name="procModuleAdminGetList" type="controller" standalone="true" />
<action name="procModuleAdminSetDesignInfo" type="controller" />
<action name="procModuleAdminUpdateUseMobile" type="controller" />
<action name="dispModuleChangeLang" type="mobile" />
</actions>

View file

@ -17,13 +17,13 @@
<value xml:lang="zh-TW"><![CDATA[此項目有新版本]]></value>
</item>
<item name="msg_do_you_like_install">
<value xml:lang="ko"><![CDATA[생성 하시겠습니까?]]></value>
<value xml:lang="ko"><![CDATA[생성하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Would you like to create?]]></value>
<value xml:lang="jp"><![CDATA[インストールしますか?]]></value>
<value xml:lang="zh-TW"><![CDATA[想要安裝嗎?]]></value>
</item>
<item name="msg_do_you_like_update">
<value xml:lang="ko"><![CDATA[업데이트 하시겠습니까?]]></value>
<value xml:lang="ko"><![CDATA[업데이트하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Would you like to update?]]></value>
<value xml:lang="jp"><![CDATA[アップデートしますか?]]></value>
<value xml:lang="zh-TW"><![CDATA[想要更新嗎?]]></value>
@ -271,12 +271,12 @@
<value xml:lang="vi"><![CDATA[Chọn lọc Module]]></value>
</item>
<item name="do_selected">
<value xml:lang="ko"><![CDATA[선택된 것들을...]]></value>
<value xml:lang="ko"><![CDATA[선택된 것들을]]></value>
<value xml:lang="en"><![CDATA[I want to]]></value>
<value xml:lang="jp"><![CDATA[選択したものを...]]></value>
<value xml:lang="zh-CN"><![CDATA[把所选模块...]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇項目...]]></value>
<value xml:lang="ru"><![CDATA[Выбранные...]]></value>
<value xml:lang="jp"><![CDATA[選択したものを]]></value>
<value xml:lang="zh-CN"><![CDATA[把所选模块]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇項目]]></value>
<value xml:lang="ru"><![CDATA[Выбранные]]></value>
<value xml:lang="tr"><![CDATA[Şunu yap]]></value>
<value xml:lang="vi"><![CDATA[Bình chọn / Phê bình.]]></value>
</item>
@ -331,6 +331,10 @@
<value xml:lang="en"><![CDATA[Upload File]]></value>
<value xml:lang="zh-TW"><![CDATA[上傳檔案]]></value>
</item>
<item name="filebox_list">
<value xml:lang="ko"><![CDATA[파일 목록]]></value>
<value xml:lang="en"><![CDATA[File List]]></value>
</item>
<item name="access_type">
<value xml:lang="ko"><![CDATA[접속 방법]]></value>
<value xml:lang="en"><![CDATA[Access Type]]></value>
@ -362,26 +366,26 @@
<value xml:lang="vi"><![CDATA[Với ID Website]]></value>
</item>
<item name="about_domain">
<value xml:lang="ko"><![CDATA[1개 이상의 사이트를 만들기 위해서는 전용 도메인이 있어야 합니다.<br />독립 도메인이나 서브 도메인이 있으면 되고 XE가 설치된 경로까지 같이 넣어주세요.<br />예) www.xpressengine.com/xe]]></value>
<value xml:lang="en"><![CDATA[In order to create more than one virtual site, every club needs to have its own domain name.<br />A sub-domain (e.g., aaa.bbb.com of bbb.com) also can be used. Input the address including the path where XE is installed. <br /> ex) www.xpressengine.com/xe]]></value>
<value xml:lang="jp"><![CDATA[複数のホームページを作成するためには、「オリジナルドメイン」や「サブ ドメイン」のような専用のドメインが必要です。<br />また、 XEのインストールパスも一緒に記入してください。<br />ex) www.xpressengine.com/xe]]></value>
<value xml:lang="zh-CN"><![CDATA[要创建一个站点必须有一个专用域名。<br />一级域名或二级域名皆可。输入的时候请把XE安装路径也一起输入。<br />ex) www.xpressengine.com/xe]]></value>
<value xml:lang="zh-TW"><![CDATA[要建立網站必須要有個專屬域名。<br />頂級域名或次級域名都可以。輸入時,請將 XE 安裝路徑也一起輸入。<br />例) www.xpressengine.com/xe]]></value>
<value xml:lang="es"><![CDATA[Para crear un dominio privado de la site requiere. <br /> Independiente de dominio o subdominio, y XE está instalado, el camino que en su conjunto. <br /> Ej.) www.xpressengine.com / zbxe]]></value>
<value xml:lang="tr"><![CDATA[Birden fazla sanal website oluşturabilmek için, her birinin kendi alanadına ihtiyacı vardır.<br />Alt-alanadı (örn., aaa.bbb.com of bbb.com) da kullanılabilir. XE'nin de içinde kurulu olduğu yolun adresini giriniz. <br /> örn.) www.xpressengine.com/xe]]></value>
<value xml:lang="vi"><![CDATA[Để tạo nhiều Website nhỏ, các Website nhỏ này cần những tên miền riêng của mình.<br />Có thể sử dụng những Subdomain dạng aaa.bbb.com của bbb.com. Hãy nhập địa chỉ bao gồm cả Domain cài đặt XE. <br /> Ví dụ: www.vietxe.net/xe]]></value>
<value xml:lang="ko"><![CDATA[1개 이상의 사이트를 만들기 위해서는 전용 도메인이 있어야 합니다. 독립 도메인이나 서브 도메인이 있으면 되고 XE가 설치된 경로까지 같이 넣어주세요. 예) www.xpressengine.com/xe]]></value>
<value xml:lang="en"><![CDATA[In order to create more than one virtual site, every club needs to have its own domain name. A sub-domain (e.g., aaa.bbb.com of bbb.com) also can be used. Input the address including the path where XE is installed. ex) www.xpressengine.com/xe]]></value>
<value xml:lang="jp"><![CDATA[複数のホームページを作成するためには、「オリジナルドメイン」や「サブ ドメイン」のような専用のドメインが必要です。 また、 XEのインストールパスも一緒に記入してください。 ex) www.xpressengine.com/xe]]></value>
<value xml:lang="zh-CN"><![CDATA[要创建一个站点必须有一个专用域名。 一级域名或二级域名皆可。输入的时候请把XE安装路径也一起输入。 ex) www.xpressengine.com/xe]]></value>
<value xml:lang="zh-TW"><![CDATA[要建立網站必須要有個專屬域名。 頂級域名或次級域名都可以。輸入時,請將 XE 安裝路徑也一起輸入。 例) www.xpressengine.com/xe]]></value>
<value xml:lang="es"><![CDATA[Para crear un dominio privado de la site requiere. Independiente de dominio o subdominio, y XE está instalado, el camino que en su conjunto. Ej.) www.xpressengine.com / zbxe]]></value>
<value xml:lang="tr"><![CDATA[Birden fazla sanal website oluşturabilmek için, her birinin kendi alanadına ihtiyacı vardır. Alt-alanadı (örn., aaa.bbb.com of bbb.com) da kullanılabilir. XE'nin de içinde kurulu olduğu yolun adresini giriniz. örn.) www.xpressengine.com/xe]]></value>
<value xml:lang="vi"><![CDATA[Để tạo nhiều Website nhỏ, các Website nhỏ này cần những tên miền riêng của mình. Có thể sử dụng những Subdomain dạng aaa.bbb.com của bbb.com. Hãy nhập địa chỉ bao gồm cả Domain cài đặt XE. Ví dụ: www.vietxe.net/xe]]></value>
</item>
<item name="about_vid">
<value xml:lang="ko"><![CDATA[별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)과 중복될 수 없습니다.<br />첫 글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다]]></value>
<value xml:lang="en"><![CDATA[Users can access via http://XEaddress/ID. You cannot use same site id as the existing module name(mid).<br />Site id should start with an alphabet character. Alphabet characters, numbers and underscore can be used for the site id.]]></value>
<value xml:lang="jp"><![CDATA[別途のドメインではなく、「http://XEアドレス/ID」へのアクセスが可能です。この際、モジュール名(mid)と重複しないように登録してください。<br />必ず、頭文字は半角英文字にし、「すべて半角の英数字・_ 」 だけの組み合わせで入力してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[直接以http://XE安装地址/ID的方式访问。<br />模块名(mid)不能重复。<br />模块名要以英文字母开头,且只允许使用英文字母,数字及"_"。]]></value>
<value xml:lang="zh-TW"><![CDATA[直接以 http://程式安裝位址/ID 的方式訪問。模組名稱(mid)不能重複。<br />必須要以英文字母開頭,只允許使用底線、英文及數字。]]></value>
<value xml:lang="fr"><![CDATA[별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br />첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다]]></value>
<value xml:lang="ru"><![CDATA[별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br />첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다]]></value>
<value xml:lang="es"><![CDATA[별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br />첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다]]></value>
<value xml:lang="tr"><![CDATA[Kullanıcılar, http://XEaddress/ID adresiyle ulaşabilirler. Varolan bir modül adıyla(mid) aynı olan site kimliği kullanamazsınız .<br />Site kimliği bir harfle başlamaladır . Alfabetik karakterler, sayılar ve _ işareti site kimliği için kullanılabilir.]]></value>
<value xml:lang="vi"><![CDATA[Người sử dụng có thể truy cập qua http://XEaddress/ID. Bạn không thể sử dụng ID giống nhau và giống tên Module đã có.<br />Teen ID có dạng là các chữ cái, số và dấu gạch dưới (_).]]></value>
<value xml:lang="ko"><![CDATA[별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)과 중복될 수 없습니다. 첫 글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다]]></value>
<value xml:lang="en"><![CDATA[Users can access via http://XEaddress/ID. You cannot use same site id as the existing module name(mid). Site id should start with an alphabet character. Alphabet characters, numbers and underscore can be used for the site id.]]></value>
<value xml:lang="jp"><![CDATA[別途のドメインではなく、「http://XEアドレス/ID」へのアクセスが可能です。この際、モジュール名(mid)と重複しないように登録してください。 必ず、頭文字は半角英文字にし、「すべて半角の英数字・_ 」 だけの組み合わせで入力してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[直接以http://XE安装地址/ID的方式访问。 模块名(mid)不能重复。 模块名要以英文字母开头,且只允许使用英文字母,数字及"_"。]]></value>
<value xml:lang="zh-TW"><![CDATA[直接以 http://程式安裝位址/ID 的方式訪問。模組名稱(mid)不能重複。 必須要以英文字母開頭,只允許使用底線、英文及數字。]]></value>
<value xml:lang="fr"><![CDATA[별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다. 첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다]]></value>
<value xml:lang="ru"><![CDATA[별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다. 첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다]]></value>
<value xml:lang="es"><![CDATA[별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다. 첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다]]></value>
<value xml:lang="tr"><![CDATA[Kullanıcılar, http://XEaddress/ID adresiyle ulaşabilirler. Varolan bir modül adıyla(mid) aynı olan site kimliği kullanamazsınız . Site kimliği bir harfle başlamaladır . Alfabetik karakterler, sayılar ve _ işareti site kimliği için kullanılabilir.]]></value>
<value xml:lang="vi"><![CDATA[Người sử dụng có thể truy cập qua http://XEaddress/ID. Bạn không thể sử dụng ID giống nhau và giống tên Module đã có. Teen ID có dạng là các chữ cái, số và dấu gạch dưới (_).]]></value>
</item>
<item name="msg_already_registed_vid">
<value xml:lang="ko"><![CDATA[이미 등록된 사이트 ID 입니다. 게시판 등의 mid와도 중복이 되지 않습니다. 다른 ID를 입력해주세요.]]></value>
@ -416,14 +420,14 @@
<value xml:lang="tr"><![CDATA[Başlık Betiği(script)]]></value>
</item>
<item name="about_header_script">
<value xml:lang="ko"><![CDATA[HTML &lt;head&gt;...&lt;/head&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다. 예) &lt;script&gt;, &lt;style&gt;, &lt;meta&gt; ...]]></value>
<value xml:lang="ko"><![CDATA[HTML &lt;head&gt;...&lt;/head&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다. 예) &lt;script&gt;, &lt;style&gt;, &lt;meta&gt; ]]></value>
<value xml:lang="en"><![CDATA[You can input the html script between &lt;header&gt; and &lt;/header&gt; by yourself. You can use &lt;script&gt;, &lt;style&gt; or &lt;meta&gt; tags.]]></value>
<value xml:lang="jp"><![CDATA[HTMLの&lt;header&gt;と&lt;/header&gt;の間に入れるコードを直接入力できます。 &lt;script&gt;、&lt;style&gt;または&lt;meta&gt;タグなどを利用できます。]]></value>
<value xml:lang="zh-CN"><![CDATA[可以直接输入插入到html中&lt;head&gt;区的代码。 可使用&lt;script&gt;, &lt;style&gt; 或 &lt;meta&gt; 等标签。]]></value>
<value xml:lang="zh-TW"><![CDATA[可以直接輸入,並插入到 HTML 的&lt;head&gt;之間。 可使用&lt;script&gt;,&lt;style&gt;或&lt;meta&gt;等標籤。]]></value>
<value xml:lang="fr"><![CDATA[Vous pouvez entrer un script en html par vous-même entre &lt;header&gt; et &lt;/header&gt;. Vous pouvez utiliser &lt;script&gt;, &lt;style&gt; ou &lt;meta&gt; tag]]></value>
<value xml:lang="ru"><![CDATA[html의 &lt;header&gt;와 &lt;/header&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다. &lt;script&gt;, &lt;style&gt;, &lt;meta&gt; 태그등을 이용하실 수 있습니다]]></value>
<value xml:lang="es"><![CDATA[html의 &lt;header&gt;와 &lt;/header&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다. &lt;script&gt;, &lt;style&gt;, &lt;meta&gt; 태그등을 이용하실 수 있습니다]]></value>
<value xml:lang="ru"><![CDATA[html의 &lt;header&gt;와 &lt;/header&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다. &lt;script&gt;, &lt;style&gt;, &lt;meta&gt; 태그등을 이용 수 있습니다]]></value>
<value xml:lang="es"><![CDATA[html의 &lt;header&gt;와 &lt;/header&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다. &lt;script&gt;, &lt;style&gt;, &lt;meta&gt; 태그등을 이용 수 있습니다]]></value>
<value xml:lang="tr"><![CDATA[Html betiğini(script) &lt;header&gt; ile &lt;/header&gt; arasına kendiniz ekleyebilirsiniz. &lt;script&gt;, &lt;style&gt;, &lt;meta&gt; tag kullanabilirsiniz]]></value>
<value xml:lang="vi"><![CDATA[Bạn co thể nhập mã dang HTML vào giữa &lt;header&gt; và &lt;/header&gt;. Bạn có thể sử dụng &lt;script&gt;, &lt;style&gt; hay &lt;meta&gt; tag]]></value>
</item>
@ -475,6 +479,15 @@
<value xml:lang="tr"><![CDATA[Kayıtlı kullanıcılar]]></value>
<value xml:lang="vi"><![CDATA[Đã đăng kí]]></value>
</item>
<item name="grant_to_admin">
<value xml:lang="ko"><![CDATA[관리자만]]></value>
<value xml:lang="en"><![CDATA[Administrator only]]></value>
<value xml:lang="jp"><![CDATA[Administrator only]]></value>
<value xml:lang="zh-CN"><![CDATA[Administrator only]]></value>
<value xml:lang="zh-TW"><![CDATA[Administrator only]]></value>
<value xml:lang="tr"><![CDATA[Administrator only]]></value>
<value xml:lang="vi"><![CDATA[Administrator only]]></value>
</item>
<item name="grant_to_group">
<value xml:lang="ko"><![CDATA[선택 그룹 사용자]]></value>
<value xml:lang="en"><![CDATA[Selected group users]]></value>
@ -638,6 +651,10 @@
<value xml:lang="tr"><![CDATA[Bu isim önceden zaten alınmış. Lütfen başka bir tane deneyiniz.]]></value>
<value xml:lang="vi"><![CDATA[Tên này đã được sử dụng. Hãy thử lại với tên khác.]]></value>
</item>
<item name="msg_module_not_exists">
<value xml:lang="ko"><![CDATA[해당 모듈이 존재하지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[Module matching the name is not found.]]></value>
</item>
<item name="msg_category_is_null">
<value xml:lang="ko"><![CDATA[등록된 분류가 없습니다.]]></value>
<value xml:lang="en"><![CDATA[There is no registered category.]]></value>
@ -687,7 +704,7 @@
<value xml:lang="vi"><![CDATA[Không thể di chuyển]]></value>
</item>
<item name="msg_cannot_delete_for_child">
<value xml:lang="ko"><![CDATA[하부 분류가 있는 분류는 삭제하실 수 없습니다.]]></value>
<value xml:lang="ko"><![CDATA[하부 분류가 있는 분류는 삭제 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[Cannot delete a category which has child categories.]]></value>
<value xml:lang="jp"><![CDATA[下位カテゴリのあるカテゴリは削除できません。]]></value>
<value xml:lang="zh-CN"><![CDATA[不能删除有下级分类的分类!]]></value>
@ -711,14 +728,14 @@
<value xml:lang="vi"><![CDATA[Tên Module chỉ hỗ trợ định dạng [Kí tự], [Kí tự+Số], [Kí tự+Số+_].]]></value>
</item>
<item name="msg_extra_name_exists">
<value xml:lang="ko"><![CDATA[이미 존재하는 확장 변수 이름입니다. 다른 이름을 입력해주세요.]]></value>
<value xml:lang="en"><![CDATA[Already registered extra variable name. Please input another name.]]></value>
<value xml:lang="ko"><![CDATA[이미 존재하는 사용자 정의 이름입니다. 다른 이름을 입력해주세요.]]></value>
<value xml:lang="en"><![CDATA[Already registered user defined name. Please input another name.]]></value>
<value xml:lang="jp"><![CDATA[既に存在する拡張変数名です。他の拡張変数名を入力してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[已有的扩展变量名称,请重新输入!]]></value>
<value xml:lang="zh-TW"><![CDATA[已存在的延伸變數名稱。請輸入其他名稱。]]></value>
<value xml:lang="fr"><![CDATA[이미 존재하는 확장변수 이름입니다. 다른 이름을 입력해주세요.]]></value>
<value xml:lang="ru"><![CDATA[이미 존재하는 확장변수 이름입니다. 다른 이름을 입력해주세요.]]></value>
<value xml:lang="es"><![CDATA[이미 존재하는 확장변수 이름입니다. 다른 이름을 입력해주세요.]]></value>
<value xml:lang="fr"><![CDATA[이미 존재하는 사용자 정의 이름입니다. 다른 이름을 입력해주세요.]]></value>
<value xml:lang="ru"><![CDATA[이미 존재하는 사용자 정의 이름입니다. 다른 이름을 입력해주세요.]]></value>
<value xml:lang="es"><![CDATA[이미 존재하는 사용자 정의 이름입니다. 다른 이름을 입력해주세요.]]></value>
<value xml:lang="tr"><![CDATA[Önceden kayıtlı değişken isim. Lütfen başka bir tane giriniz.]]></value>
<value xml:lang="vi"><![CDATA[Tên biến đã được sử dụng. Xin hãy chọn tên khác.]]></value>
</item>
@ -738,7 +755,7 @@
<value xml:lang="ko"><![CDATA[모듈 이름은 http://주소/?mid=모듈이름 처럼 직접 호출할 수 있는 값입니다. (영문+[영문+숫자+_] 만 가능. 최대 40 글자)]]></value>
<value xml:lang="en"><![CDATA[The module name will be used like http://address/?mid=ModuleName.
(Only english alphabet letters, numbers and underscore can be used. The maximum length is 40.)]]></value>
<value xml:lang="jp"><![CDATA[モジュール名は「http://アドレス/?mid=モジュール名」のように直接呼び出せるパラメーター値です。<br />※英数の頭文字と[英数と_のみ]の組み合わせ すべて半角、最大40文字 ]]></value>
<value xml:lang="jp"><![CDATA[モジュール名は「http://アドレス/?mid=モジュール名」のように直接呼び出せるパラメーター値です。 ※英数の頭文字と[英数と_のみ]の組み合わせ すべて半角、最大40文字 ]]></value>
<value xml:lang="zh-CN"><![CDATA[模块名称只允许使用英文,数字和下划线(最多不能超过40字节)。]]></value>
<value xml:lang="zh-TW"><![CDATA[模組名稱只允許使用英文,數字和底線。最大長度 40 個字元。]]></value>
<value xml:lang="fr"><![CDATA[Le nom de module sera utilisé comme http://adresse/?mid=ModuleName.
@ -753,7 +770,7 @@
(Chỉ cho phép chữ cái tiếng Anh + [chữ cái tiếng Anh, số, và dấu gạch dưới (_)] và tối đa 40 kí tự.)]]></value>
</item>
<item name="about_default">
<value xml:lang="ko"><![CDATA[선택하면 사이트에 mid값 없이 접속하였을 경우 기본으로 보여줍니다.]]></value>
<value xml:lang="ko"><![CDATA[선택하면 사이트에 mid값 없이 접속하였을 경우 기본으로 보여줍니다.]]></value>
<value xml:lang="en"><![CDATA[If checked, this module will be shown when users access the site without mid value (mid=NoValue).]]></value>
<value xml:lang="jp"><![CDATA[チェックを入れると、サイトに「mid値」なしでアクセスした場合、デフォルトで表示します。]]></value>
<value xml:lang="zh-CN"><![CDATA[用没有mid值的网址访问网站时将会显示默认。]]></value>
@ -765,22 +782,17 @@
<value xml:lang="vi"><![CDATA[Nếu chọn, Sẽ hiển thị mặc định là (mid=NoValue) khi truy cập tên Module không đúng.]]></value>
</item>
<item name="about_module_category">
<value xml:lang="ko"><![CDATA[분류를 통한 관리를 할 수 있도록 합니다. 모듈 분류 관리는 <a href="./?module=admin&amp;act=dispModuleAdminCategory">모듈관리 > 모듈분류</a>에서 하실 수 있습니다.]]></value>
<value xml:lang="ko"><![CDATA[분류를 통한 관리를 할 수 있도록 합니다. 모듈 분류 관리는 <a href="./?module=admin&amp;act=dispModuleAdminCategory">모듈분류</a>에서 할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[It enables you to manage it through a module category.
The URL for the module manager is <a href="./?module=admin&amp;act=dispModuleAdminCategory">Manage module > Module category </a>.]]></value>
<value xml:lang="jp"><![CDATA[カテゴリで管理できるようにします。モジュールのカテゴリの管理は、「<a href="./?module=admin&amp;act=dispModuleAdminCategory">モジュール管理 &gt; モジュールカテゴリ</a>」にて行います。]]></value>
<value xml:lang="zh-CN"><![CDATA[可以分类管理模块。 模块分类可以在 <a href="./?module=admin&amp;act=dispModuleAdminCategory">模块管理 > 模块分类 </a>中进行管理。]]></value>
<value xml:lang="zh-TW"><![CDATA[可以分類管理模組。模組分類可以在<a href="./?module=admin&amp;act=dispModuleAdminCategory">模組管理 > 模組分類 </a>中進行管理。]]></value>
<value xml:lang="fr"><![CDATA[Ça vous permet d'administrer le module par la catégorie.
On peut administrer la classification des modules à <a href="./?module=admin&amp;act=dispModuleAdminCategory">Administration des modules > Catégorie des Modules </a>.]]></value>
<value xml:lang="ru"><![CDATA[Это позволяет Вам управлять посредством категорий модулей.
URL для менеджера модулей <a href="./?module=admin&amp;act=dispModuleAdminCategory">Manage module > Категория Модуля </a>.]]></value>
<value xml:lang="es"><![CDATA[Es posible manejar a traves de categoría.
EL URL para en manejo del módulo de categoría es <a href="./?module=admin&amp;act=dispModuleAdminCategory">Manejo de módulo > Módulo de categoría </a>.]]></value>
<value xml:lang="tr"><![CDATA[Size, modül kategorisi yoluyla yönetme imkanı sunar.
Modül Yöneticisi için URL: <a href="./?module=admin&amp;act=dispModuleAdminCategory">Manage module > Modül Kategorisi</a>dir.]]></value>
<value xml:lang="vi"><![CDATA[Nó cho phép bạn quản lý thông qua Module thể loại.
URL quản lý có dạng <a href="./?module=admin&amp;act=dispModuleAdminCategory">Quản lý Module > Module thể loại </a>.]]></value>
The URL for the module manager is <a href="./?module=admin&amp;act=dispModuleAdminCategory">Module category </a>.]]></value>
<value xml:lang="jp"><![CDATA[カテゴリで管理できるようにします。モジュールのカテゴリの管理は、「<a href="./?module=admin&amp;act=dispModuleAdminCategory">モジュールカテゴリ</a>」にて行います。]]></value>
<value xml:lang="zh-CN"><![CDATA[可以分类管理模块。 模块分类可以在 <a href="./?module=admin&amp;act=dispModuleAdminCategory">模块分类 </a>中进行管理。]]></value>
<value xml:lang="zh-TW"><![CDATA[可以分類管理模組。模組分類可以在<a href="./?module=admin&amp;act=dispModuleAdminCategory">模組分類</a>中進行管理。]]></value>
<value xml:lang="fr"><![CDATA[Ça vous permet d'administrer le module par la catégorie. On peut administrer la classification des modules à <a href="./?module=admin&amp;act=dispModuleAdminCategory">Catégorie des Modules </a>.]]></value>
<value xml:lang="ru"><![CDATA[Это позволяет Вам управлять посредством категорий модулей. URL для менеджера модулей <a href="./?module=admin&amp;act=dispModuleAdminCategory">Категория Модуля </a>.]]></value>
<value xml:lang="es"><![CDATA[Es posible manejar a traves de categoría. EL URL para en manejo del módulo de categoría es <a href="./?module=admin&amp;act=dispModuleAdminCategory">Módulo de categoría </a>.]]></value>
<value xml:lang="tr"><![CDATA[Size, modül kategorisi yoluyla yönetme imkanı sunar. Modül Yöneticisi için URL: <a href="./?module=admin&amp;act=dispModuleAdminCategory">Modül Kategorisi</a>dir.]]></value>
<value xml:lang="vi"><![CDATA[Nó cho phép bạn quản lý thông qua Module thể loại. URL quản lý có dạng <a href="./?module=admin&amp;act=dispModuleAdminCategory">Module thể loại </a>.]]></value>
</item>
<item name="about_description">
<value xml:lang="ko"><![CDATA[관리용으로 사용되는 설명입니다.]]></value>
@ -795,7 +807,7 @@ URL для менеджера модулей <a href="./?module=admin&amp;act=di
<value xml:lang="vi"><![CDATA[Mô tả cho một quản lý.]]></value>
</item>
<item name="about_header_text">
<value xml:lang="ko"><![CDATA[모듈 상단에 표시되는 내용입니다. (HTML 태그 사용 가능)]]></value>
<value xml:lang="ko"><![CDATA[콘텐츠 상단에 표시되는 내용입니다. (HTML 태그 사용 가능)]]></value>
<value xml:lang="en"><![CDATA[The contents will be shown on the top of the module. (html tags available)]]></value>
<value xml:lang="jp"><![CDATA[モジュールのヘッダーに表示される内容です。HTMLタグの使用可能]]></value>
<value xml:lang="zh-CN"><![CDATA[模块头部修饰内容。(可以使用HTML)]]></value>
@ -807,7 +819,7 @@ URL для менеджера модулей <a href="./?module=admin&amp;act=di
<value xml:lang="vi"><![CDATA[Nội dung sẽ hiển thị trên đầu Module.(sau http tag có sẵn)]]></value>
</item>
<item name="about_footer_text">
<value xml:lang="ko"><![CDATA[모듈 하단에 표시되는 내용입니다. (HTML 태그 사용 가능)]]></value>
<value xml:lang="ko"><![CDATA[콘텐츠 하단에 표시되는 내용입니다. (HTML 태그 사용 가능)]]></value>
<value xml:lang="en"><![CDATA[The contents will be shown on the bottom of the module. (html tags available)]]></value>
<value xml:lang="jp"><![CDATA[モジュールのフッターに表示される内容です。HTMLタグの使用可能]]></value>
<value xml:lang="zh-CN"><![CDATA[模块尾部修饰内容。(可以使用HTML)]]></value>
@ -824,12 +836,12 @@ URL для менеджера модулей <a href="./?module=admin&amp;act=di
<value xml:lang="jp"><![CDATA[スキン固定]]></value>
</item>
<item name="about_skin_fix">
<value xml:lang="ko"><![CDATA[테마 설정과 상관없이 스킨을 고정시킵니다. 사용하면 테마의 일괄 스킨 설정 대상에서 제외됩니다.]]></value>
<value xml:lang="ko"><![CDATA[스킨을 고정시킵니다. 일괄 스킨 설정 대상에서 제외됩니다.]]></value>
<value xml:lang="en"><![CDATA[Check this to fix the skin regardless of theme setting.]]></value>
<value xml:lang="jp"><![CDATA[テーマ設定に関係なくスキンを固定させます。使用すると、テーマの一括スキン設定対象から外されます。]]></value>
</item>
<item name="about_skin">
<value xml:lang="ko"><![CDATA[모듈 스킨을 선택하실 수 있습니다.]]></value>
<value xml:lang="ko"><![CDATA[콘텐츠 스킨을 선택할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[You may choose a module skin.]]></value>
<value xml:lang="jp"><![CDATA[モジュールのスキンを選択します。]]></value>
<value xml:lang="zh-CN"><![CDATA[可以选择模块皮肤。]]></value>
@ -841,7 +853,7 @@ URL для менеджера модулей <a href="./?module=admin&amp;act=di
<value xml:lang="vi"><![CDATA[Banj có thể chọn Skin cho Module.]]></value>
</item>
<item name="about_use_category">
<value xml:lang="ko"><![CDATA[선택하면 분류 기능을 사용할 수 있습니다.]]></value>
<value xml:lang="ko"><![CDATA[선택하면 분류 기능을 사용할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[If checked, the category function will be enabled.]]></value>
<value xml:lang="jp"><![CDATA[チェックを入れるとカテゴリ機能を使用できます。]]></value>
<value xml:lang="zh-CN"><![CDATA[选择此项可以使用分类功能。]]></value>
@ -853,7 +865,7 @@ URL для менеджера модулей <a href="./?module=admin&amp;act=di
<value xml:lang="vi"><![CDATA[Nếu chon, chức năng thể loại sẽ hoạt động.]]></value>
</item>
<item name="about_list_count">
<value xml:lang="ko"><![CDATA[한 페이지에 표시될 글 수를 지정하실 수 있습니다. (기본 20개)]]></value>
<value xml:lang="ko"><![CDATA[한 페이지에 표시될 글 수를 지정 수 있습니다. (기본 20개)]]></value>
<value xml:lang="en"><![CDATA[You can limit the number of article to show on one page. The default is 20.]]></value>
<value xml:lang="jp"><![CDATA[ページ当たりに表示される書き込み数を指定できますデフォルト20個。]]></value>
<value xml:lang="zh-CN"><![CDATA[可以指定每页显示的主题数。(默认为20个)]]></value>
@ -865,19 +877,19 @@ URL для менеджера модулей <a href="./?module=admin&amp;act=di
<value xml:lang="vi"><![CDATA[Bạn có thể giới hạn bài viết hiển thị trên một trang.(Mặc định là 20)]]></value>
</item>
<item name="about_search_list_count">
<value xml:lang="ko"><![CDATA[검색, 카테고리 선택 등을 할 경우 표시될 글 수를 지정하실 수 있습니다. (기본 20개)]]></value>
<value xml:lang="ko"><![CDATA[검색, 카테고리 선택 등을 할 경우 표시될 글 수를 지정 수 있습니다. (기본 20개)]]></value>
<value xml:lang="en"><![CDATA[You may set the number of articles to be exposed when you use search or category function. (default is 20)]]></value>
<value xml:lang="jp"><![CDATA[検索、カテゴリ選択などを行う場合に表示する書き込みの数を指定できます。デフォルトは20件 ]]></value>
<value xml:lang="zh-CN"><![CDATA[可以指定搜索或选择分类时每页要显示的帖子数(默认为20个)。]]></value>
<value xml:lang="zh-TW"><![CDATA[可以指定搜尋或選擇分類時,每頁要顯示的文章數(預設為 20 個)。]]></value>
<value xml:lang="fr"><![CDATA[Vous pouvez configurer combien d'articles soient exposés quand vous utilisez la fonction de recherche ou de catégorie. (20 par défaut)]]></value>
<value xml:lang="ru"><![CDATA[검색 또는 카테고리 선택등을 할 경우 표시될 글의 수를 지정하실 수 있습니다. 기본(20개)]]></value>
<value xml:lang="ru"><![CDATA[검색 또는 카테고리 선택등을 할 경우 표시될 글의 수를 지정 수 있습니다. 기본(20개)]]></value>
<value xml:lang="es"><![CDATA[Usted puede configurar el número de artículos que se exponen cuando se utiliza la función de búsqueda o categoría. (Por defecto es 20)]]></value>
<value xml:lang="tr"><![CDATA[Kategori veya arama özelliğini kullanırken gösterilecek makalelerin sayısını ayarlayabilirsiniz. (varsayılan : 20)]]></value>
<value xml:lang="vi"><![CDATA[Bạn có thể đặt giới hạn số bài viết sẽ hiển thị khi tìm kiếm hay chọn thể loại. (Mặc định là 20)]]></value>
</item>
<item name="about_page_count">
<value xml:lang="ko"><![CDATA[목록 하단, 페이지를 이동하는 링크 수를 지정하실 수 있습니다. (기본 10개)]]></value>
<value xml:lang="ko"><![CDATA[목록 하단, 페이지를 이동하는 링크 수를 지정 수 있습니다. (기본 10개)]]></value>
<value xml:lang="en"><![CDATA[You can set the number of page links to move pages in a bottom of the page. (default is 10)]]></value>
<value xml:lang="jp"><![CDATA[リスト下部、ページ移動可能なリンク数を指定できますデフォルト10個。]]></value>
<value xml:lang="zh-CN"><![CDATA[可以指定显示在目录下方的页面数(默认为10个)。 ]]></value>
@ -929,7 +941,7 @@ Le module [Administration des Modules] montera tous les modules installés et vo
<value xml:lang="vi"><![CDATA[Khu vực Module trong XE ngoại trừ Library là tại [Module Manage]. Tất cả những Module đang có sẽ hiển thị, giúp bạn quản lý một cách dễ dàng.]]></value>
</item>
<item name="about_extra_vars_default_value">
<value xml:lang="ko"><![CDATA[다중/단일 선택 등 기본 값이 여러 개가 필요한 경우 , (콤마)로 연결하면 됩니다.]]></value>
<value xml:lang="ko"><![CDATA[다중/단일 선택 등 기본 값이 여러 개가 필요한 경우 , (콤마)로 연결하면 됩니다.]]></value>
<value xml:lang="en"><![CDATA[This is only for select,checkbox and radio button. If multiple default values are needed, you can link them with comma.]]></value>
<value xml:lang="jp"><![CDATA[多重・単一選択などのデフォルト値が、複数必要な場合は、「, (コンマ)」で区切って追加することができます。]]></value>
<value xml:lang="zh-CN"><![CDATA[复选/单选缺省值需要多个时,用,(逗号)来分隔。]]></value>
@ -941,33 +953,33 @@ Le module [Administration des Modules] montera tous les modules installés et vo
<value xml:lang="vi"><![CDATA[Nếu cần nhiều giá trị mặc định, bạn có thể thêm dấu (,) và giữa các kết nối.]]></value>
</item>
<item name="about_search_virtual_site">
<value xml:lang="ko"><![CDATA[가상 사이트(예:cafeXE) 도메인을 입력하신 후 검색하세요.<br/>가상 사이트 이외의 모듈은 내용을 비우고 검색하면 됩니다. (http:// 는 제외)]]></value>
<value xml:lang="en"><![CDATA[Enter domain of virtual sites.<br />To search modules of non-virtual site, search with blank]]></value>
<value xml:lang="jp"><![CDATA[バーチャル(Virtual)サイトcafeXEなどのドメインを入力して検索してください。<br />バーチャル(Virtual)サイト以外のモジュールは内容を空にしてから検索します。http://は省く)]]></value>
<value xml:lang="zh-CN"><![CDATA[请输入子站点域名后再进行搜索。<br/>子站点以外的模块可以留空搜索。(输入时http://除外)。]]></value>
<value xml:lang="zh-TW"><![CDATA[請輸入網站域名後再搜尋。<br/>網站以外的模組可直接進行搜尋。(http://不用輸入)。]]></value>
<value xml:lang="fr"><![CDATA[가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하면 됩니다. (http:// 는 제외)]]></value>
<value xml:lang="ru"><![CDATA[가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하면 됩니다. (http:// 는 제외)]]></value>
<value xml:lang="es"><![CDATA[가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하면 됩니다. (http:// 는 제외)]]></value>
<value xml:lang="tr"><![CDATA[Sanal sitelerin alanadlarını giriniz.<br />Sanal olmayan sitelerin modüllerini aramak için, boş arama yapınız]]></value>
<value xml:lang="vi"><![CDATA[Hãy nhập tên miền thực tế của Website.<br />Để tìm kiếm những Module không thực tế của Website hãy để trống.]]></value>
<value xml:lang="ko"><![CDATA[가상 사이트(예:cafeXE) 도메인을 입력한 후 검색하세요. 가상 사이트 이외의 모듈은 내용을 비우고 검색하면 됩니다. (http:// 는 제외)]]></value>
<value xml:lang="en"><![CDATA[Enter domain of virtual sites. To search modules of non-virtual site, search with blank]]></value>
<value xml:lang="jp"><![CDATA[バーチャル(Virtual)サイトcafeXEなどのドメインを入力して検索してください。 バーチャル(Virtual)サイト以外のモジュールは内容を空にしてから検索します。http://は省く)]]></value>
<value xml:lang="zh-CN"><![CDATA[请输入子站点域名后再进行搜索。 子站点以外的模块可以留空搜索。(输入时http://除外)。]]></value>
<value xml:lang="zh-TW"><![CDATA[請輸入網站域名後再搜尋。 網站以外的模組可直接進行搜尋。(http://不用輸入)。]]></value>
<value xml:lang="fr"><![CDATA[가상 사이트(카페XE등)의 도메인을 입력한 후 검색하세요. 가상 사이트이외의 모듈은 내용을 비우고 검색하면 됩니다. (http:// 는 제외)]]></value>
<value xml:lang="ru"><![CDATA[가상 사이트(카페XE등)의 도메인을 입력한 후 검색하세요. 가상 사이트이외의 모듈은 내용을 비우고 검색하면 됩니다. (http:// 는 제외)]]></value>
<value xml:lang="es"><![CDATA[가상 사이트(카페XE등)의 도메인을 입력한 후 검색하세요. 가상 사이트이외의 모듈은 내용을 비우고 검색하면 됩니다. (http:// 는 제외)]]></value>
<value xml:lang="tr"><![CDATA[Sanal sitelerin alanadlarını giriniz. Sanal olmayan sitelerin modüllerini aramak için, boş arama yapınız]]></value>
<value xml:lang="vi"><![CDATA[Hãy nhập tên miền thực tế của Website. Để tìm kiếm những Module không thực tế của Website hãy để trống.]]></value>
</item>
<item name="about_extra_vars_eid_value">
<value xml:lang="ko"><![CDATA[확장 변수의 이름을 적어주세요. 영문, 숫자, _를 조합해서 사용할 수 있으며 첫 글자는 영문이어야 합니다.]]></value>
<value xml:lang="en"><![CDATA[Enter the name of extra var. You can use a combination of English alphabets, numbers and underscore(_), as long as it starts with an alphabet.]]></value>
<value xml:lang="ko"><![CDATA[사용자 정의 이름을 적어주세요. 영문, 숫자, _를 조합해서 사용할 수 있으며 첫 글자는 영문이어야 합니다.]]></value>
<value xml:lang="en"><![CDATA[Enter the name of user defined. You can use a combination of English alphabets, numbers and underscore(_), as long as it starts with an alphabet.]]></value>
<value xml:lang="jp"><![CDATA[拡張変数名を入力してください。 (英字+[英字+数字+_]のみ可能(すべて半角))]]></value>
<value xml:lang="zh-CN"><![CDATA[请输入扩展变量名称(只允许英文字母+[英文字母+数字+_])。]]></value>
<value xml:lang="zh-TW"><![CDATA[請輸入延伸變數名稱。( 只允許使用英文 + [ 英文,數字及底線 ] )]]></value>
</item>
<item name="about_langcode">
<value xml:lang="ko"><![CDATA[언어별로 다르게 설정하고 싶으면 언어 코드 찾기를 이용해주세요.]]></value>
<value xml:lang="ko"><![CDATA[언어별로 다르게 설정하고 싶으면 언어 코드 찾기를 이용해주세요.]]></value>
<value xml:lang="en"><![CDATA[If you want to configure seperately, use 'find language code']]></value>
<value xml:lang="jp"><![CDATA[言語ごとに異なる設定をする場合、言語コード検索を利用してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[要想实现多国语言切换请点击[选择语言变量]按钮。]]></value>
<value xml:lang="zh-TW"><![CDATA[想要實現多國語言功能,請按[語言代碼]按鈕。]]></value>
<value xml:lang="fr"><![CDATA[언어별로 다르게 설정하고 싶으면 언어코드 찾기를 이용해주세요]]></value>
<value xml:lang="ru"><![CDATA[언어별로 다르게 설정하고 싶으면 언어코드 찾기를 이용해주세요]]></value>
<value xml:lang="es"><![CDATA[언어별로 다르게 설정하고 싶으면 언어코드 찾기를 이용해주세요]]></value>
<value xml:lang="fr"><![CDATA[언어별로 다르게 설정하고 싶으면 언어코드 찾기를 이용해주세요]]></value>
<value xml:lang="ru"><![CDATA[언어별로 다르게 설정하고 싶으면 언어코드 찾기를 이용해주세요]]></value>
<value xml:lang="es"><![CDATA[언어별로 다르게 설정하고 싶으면 언어코드 찾기를 이용해주세요]]></value>
<value xml:lang="tr"><![CDATA[Eğer tek tek yapılandırma yapmak istiyorsanız, 'dil kodu bul'' u kullanınız.]]></value>
<value xml:lang="vi"><![CDATA[Nếu bạn muốn sử dụng định hình riêng, hãy sử dụng 'Tìm kiếm mã ngôn ngữ']]></value>
</item>
@ -993,10 +1005,10 @@ Le module [Administration des Modules] montera tous les modules installés et vo
<value xml:lang="zh-TW"><![CDATA[XE 目前支援 12 種國際語言。 想添加其他語言,請將 /common/lang/ 目錄的檔案新增翻譯後,寄至 XE 開發團隊(contact@xpressengine.com)]]></value>
</item>
<item name="add_word">
<value xml:lang="ko"><![CDATA[새로운 단어 또는 문장 추가...]]></value>
<value xml:lang="en"><![CDATA[Add New Word or Sentence...]]></value>
<value xml:lang="jp"><![CDATA[新しい単語、または文章追加...]]></value>
<value xml:lang="zh-TW"><![CDATA[新增文字或字句...]]></value>
<value xml:lang="ko"><![CDATA[새로운 단어 또는 문장 추가]]></value>
<value xml:lang="en"><![CDATA[Add New Word or Sentence]]></value>
<value xml:lang="jp"><![CDATA[新しい単語、または文章追加]]></value>
<value xml:lang="zh-TW"><![CDATA[新增文字或字句]]></value>
</item>
<item name="installed_modules">
<value xml:lang="ko"><![CDATA[설치된 모듈]]></value>
@ -1024,8 +1036,8 @@ Le module [Administration des Modules] montera tous les modules installés et vo
<value xml:lang="zh-TW"><![CDATA[權限設定]]></value>
</item>
<item name="msg_cannot_delete_startmodule">
<value xml:lang="ko"><![CDATA[시작 모듈은 삭제할 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[Cannot delete a start module.]]></value>
<value xml:lang="ko"><![CDATA[홈페이지는 삭제할 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[Cannot delete a homepage.]]></value>
<value xml:lang="zh-TW"><![CDATA[無法刪除預設模組]]></value>
</item>
<item name="attribute_name">
@ -1053,4 +1065,51 @@ Le module [Administration des Modules] montera tous les modules installés et vo
<value xml:lang="en"><![CDATA[If content empty, maintain existing value.]]></value>
<value xml:lang="zh-TW"><![CDATA[If content empty, maintain existing value.]]></value>
</item>
<item name="cmd_save_and_use_it">
<value xml:lang="ko"><![CDATA[저장 &amp; 사용]]></value>
<value xml:lang="en"><![CDATA[Save &amp; Use it]]></value>
</item>
<item name="about_multilingual_manage" type="array">
<item name="text">
<value xml:lang="ko"><![CDATA[지원하는 목록은 [%s]에서 편집 가능.]]></value>
<value xml:lang="en"><![CDATA[You can manage multilingual at [%s].]]></value>
</item>
<item name="link">
<value xml:lang="ko"><![CDATA[콘텐츠>다국어]]></value>
<value xml:lang="en"><![CDATA[Content>Mualtilungal]]></value>
</item>
</item>
<item name="about_language_list_manage" type="array">
<item name="text">
<value xml:lang="ko"><![CDATA[지원하는 언어 목록은 [%s]에서 편집 가능.]]></value>
<value xml:lang="en"><![CDATA[You can manage language list at [%s].]]></value>
</item>
<item name="link">
<value xml:lang="ko"><![CDATA[설정>일반]]></value>
<value xml:lang="en"><![CDATA[Settings>General]]></value>
</item>
</item>
<item name="about_multilingual_search_result">
<value xml:lang="ko"><![CDATA[<strong>%d</strong>개의 <span class="flag %s">%s</span> 다국어 세트가 있습니다.]]></value>
<value xml:lang="en"><![CDATA[There are <strong>%d</strong> <span class="flag %s">%s</span> multilingual sets.]]></value>
</item>
<item name="msg_confirm_save_and_use_multilingual">
<value xml:lang="ko"><![CDATA[현재 상태를 저장하고 사용하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Do you want to save and use this status?]]></value>
</item>
<item name="msg_empty_multilingual">
<value xml:lang="ko"><![CDATA[다국어를 입력해 주세요.]]></value>
<value xml:lang="en"><![CDATA[Please enter value for multilingual.]]></value>
</item>
<item name="cmd_set_multilingual_text">
<value xml:lang="ko"><![CDATA[다국어 텍스트 설정]]></value>
<value xml:lang="en"><![CDATA[Set multilingual text]]></value>
</item>
<item name="cmd_remove_multilingual_text">
<value xml:lang="ko"><![CDATA[다국어 텍스트 해제]]></value>
<value xml:lang="en"><![CDATA[Remove multilingual text]]></value>
</item>
<item name="use_site_default_skin">
<value xml:lang="ko"><![CDATA[사이트 기본 스킨 사용]]></value>
</item>
</lang>

File diff suppressed because it is too large Load diff

View file

@ -1,362 +1,606 @@
<?php
/**
* @class moduleAdminModel
* @author NHN (developers@xpressengine.com)
* @version 0.1
* @brief AdminModel class of the "module" module
**/
/**
* @class moduleAdminModel
* @author NHN (developers@xpressengine.com)
* @version 0.1
* @brief AdminModel class of the "module" module
*/
class moduleAdminModel extends module
{
/**
* @brief Initialization
*/
function init()
{
}
class moduleAdminModel extends module {
/**
* @brief Return a list of target modules by using module_srls separated by comma(,)
* Used in the ModuleSelector
*/
function getModuleAdminModuleList()
{
$oModuleController = &getController('module');
$oModuleModel = &getModel('module');
$args->module_srls = Context::get('module_srls');
$output = executeQueryArray('module.getModulesInfo', $args);
if(!$output->toBool() || !$output->data) return new Object();
/**
* @brief Initialization
**/
function init() {
}
/**
* @brief Return a list of target modules by using module_srls separated by comma(,)
* Used in the ModuleSelector
**/
function getModuleAdminModuleList() {
$oModuleController = &getController('module');
$oModuleModel = &getModel('module');
$args->module_srls = Context::get('module_srls');
$output = executeQueryArray('module.getModulesInfo', $args);
if(!$output->toBool() || !$output->data) return new Object();
foreach($output->data as $key => $val) {
$info_xml = $oModuleModel->getModuleInfoXml($val->module);
$oModuleController->replaceDefinedLangCode($val->browser_title);
$list[$val->module_srl] = array('module_srl'=>$val->module_srl,'mid'=>$val->mid,'browser_title'=>$val->browser_title, 'module_name' => $info_xml->title);
}
$modules = explode(',',$args->module_srls);
for($i=0;$i<count($modules);$i++) {
$module_list[$modules[$i]] = $list[$modules[$i]];
}
$this->add('id', Context::get('id'));
$this->add('module_list', $module_list);
}
function getModuleMidList($args){
$args->list_count = 20;
$args->page_count = 10;
$output = executeQueryArray('module.getModuleMidList', $args);
if(!$output->toBool()) return $output;
ModuleModel::syncModuleToSite($output->data);
return $output;
}
function getSelectedManageHTML($grantList)
foreach($output->data as $key => $val)
{
// Grant virtual permission for access and manager
$grantList->access->title = Context::getLang('grant_access');
$grantList->access->default = 'guest';
if(count($grantList))
$info_xml = $oModuleModel->getModuleInfoXml($val->module);
$oModuleController->replaceDefinedLangCode($val->browser_title);
$list[$val->module_srl] = array('module_srl'=>$val->module_srl,'mid'=>$val->mid,'browser_title'=>$val->browser_title, 'module_name' => $info_xml->title);
}
$modules = explode(',',$args->module_srls);
for($i=0;$i<count($modules);$i++)
{
$module_list[$modules[$i]] = $list[$modules[$i]];
}
$this->add('id', Context::get('id'));
$this->add('module_list', $module_list);
}
function getModuleMidList($args)
{
$args->list_count = 20;
$args->page_count = 10;
$output = executeQueryArray('module.getModuleMidList', $args);
if(!$output->toBool()) return $output;
ModuleModel::syncModuleToSite($output->data);
return $output;
}
function getSelectedManageHTML($grantList, $tabChoice = array(), $modulePath = NULL)
{
if($modulePath)
{
// get the skins path
$oModuleModel = &getModel('module');
$skin_list = $oModuleModel->getSkins($modulePath);
Context::set('skin_list',$skin_list);
$mskin_list = $oModuleModel->getSkins($modulePath, "m.skins");
Context::set('mskin_list', $mskin_list);
}
// get the layouts path
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getLayoutList();
Context::set('layout_list', $layout_list);
$mobile_layout_list = $oLayoutModel->getLayoutList(0,"M");
Context::set('mlayout_list', $mobile_layout_list);
$security = new Security();
$security->encodeHTML('layout_list..layout', 'layout_list..title');
$security->encodeHTML('mlayout_list..layout', 'mlayout_list..title');
$security->encodeHTML('skin_list..title');
$security->encodeHTML('mskin_list..title');
$grant_list =new stdClass();
// Grant virtual permission for access and manager
if(!$grantList)
{
$grantList =new stdClass();
}
$grantList->access = new stdClass();
$grantList->access->title = Context::getLang('grant_access');
$grantList->access->default = 'guest';
if(count($grantList))
{
foreach($grantList as $key => $val)
{
foreach($grantList as $key => $val) {
if(!$val->default) $val->default = 'guest';
if($val->default == 'root') $val->default = 'manager';
$grant_list->{$key} = $val;
if(!$val->default) $val->default = 'guest';
if($val->default == 'root') $val->default = 'manager';
$grant_list->{$key} = $val;
}
}
$grant_list->manager = new stdClass();
$grant_list->manager->title = Context::getLang('grant_manager');
$grant_list->manager->default = 'manager';
Context::set('grant_list', $grant_list);
// Get a list of groups
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups(0);
Context::set('group_list', $group_list);
Context::set('module_srls', 'dummy');
$content = '';
// Call a trigger for additional settings
// Considering uses in the other modules, trigger name cen be publicly used
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'before', $content);
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'after', $content);
Context::set('setup_content', $content);
if(count($tabChoice) == 0)
{
$tabChoice = array('tab1'=>1, 'tab2'=>1, 'tab3'=>1);
}
Context::set('tabChoice', $tabChoice);
// Get information of module_grants
$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($this->module_path.'tpl', 'include.manage_selected.html');
}
/**
* @brief Common:: module's permission displaying page in the module
* Available when using module instance in all the modules
*/
function getModuleGrantHTML($module_srl, $source_grant_list)
{
if(!$module_srl)
{
return;
}
// get member module's config
$oMemberModel = &getModel('member');
$member_config = $oMemberModel->getMemberConfig();
Context::set('member_config', $member_config);
$oModuleModel = &getModel('module');
$columnList = array('module_srl', 'site_srl');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl, $columnList);
// Grant virtual permission for access and manager
$grant_list = new stdClass();
$grant_list->access = new stdClass();
$grant_list->access->title = Context::getLang('grant_access');
$grant_list->access->default = 'guest';
if(count($source_grant_list))
{
foreach($source_grant_list as $key => $val)
{
if(!$val->default) $val->default = 'guest';
if($val->default == 'root') $val->default = 'manager';
$grant_list->{$key} = $val;
}
}
$grant_list->manager = new stdClass();
$grant_list->manager->title = Context::getLang('grant_manager');
$grant_list->manager->default = 'manager';
Context::set('grant_list', $grant_list);
// Get a permission group granted to the current module
$default_grant = array();
$args = new stdClass();
$args->module_srl = $module_srl;
$output = executeQueryArray('module.getModuleGrants', $args);
if($output->data)
{
foreach($output->data as $val)
{
if($val->group_srl == 0) $default_grant[$val->name] = 'all';
else if($val->group_srl == -1) $default_grant[$val->name] = 'member';
else if($val->group_srl == -2) $default_grant[$val->name] = 'site';
else if($val->group_srl == -3) $default_grant[$val->name] = 'manager';
else
{
$selected_group[$val->name][] = $val->group_srl;
$default_grant[$val->name] = 'group';
}
}
$grant_list->manager->title = Context::getLang('grant_manager');
$grant_list->manager->default = 'manager';
Context::set('grant_list', $grant_list);
}
Context::set('selected_group', $selected_group);
Context::set('default_grant', $default_grant);
Context::set('module_srl', $module_srl);
// Extract admin ID set in the current module
$admin_member = $oModuleModel->getAdminId($module_srl);
Context::set('admin_member', $admin_member);
// Get a list of groups
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups($module_info->site_srl);
Context::set('group_list', $group_list);
// Get a list of groups
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups(0);
Context::set('group_list', $group_list);
//Security
$security = new Security();
$security->encodeHTML('group_list..title');
$security->encodeHTML('group_list..description');
$security->encodeHTML('admin_member..nick_name');
Context::set('module_srls', 'dummy');
$content = '';
// Call a trigger for additional settings
// Considering uses in the other modules, trigger name cen be publicly used
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'before', $content);
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'after', $content);
Context::set('setup_content', $content);
// Get information of module_grants
$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($this->module_path.'tpl', 'module_grants');
}
// Get information of module_grants
$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($this->module_path.'tpl', 'include.manage_selected.html');
public function getModuleAdminGrant()
{
$targetModule = Context::get('target_module');
$moduleSrl = Context::get('module_srl');
if(!$targetModule || !$moduleSrl)
{
return new Object(-1, 'msg_invalid_request');
}
/**
* @brief Common:: module's permission displaying page in the module
* Available when using module instance in all the modules
**/
function getModuleGrantHTML($module_srl, $source_grant_list) {
if(!$module_srl)
if($targetModule == '_SHORTCUT')
{
return new Object(0);
}
$oModuleModel = &getModel('module');
$xmlInfo = $oModuleModel->getModuleActionXml($targetModule);
// Grant virtual permission for access and manager
$grantList = new stdClass();
$grantList->access = new stdClass();
$grantList->access->title = Context::getLang('grant_access');
$grantList->access->default = 'guest';
if(count($xmlInfo->grant))
{
foreach($xmlInfo->grant as $key => $val)
{
return;
if(!$val->default) $val->default = 'guest';
if($val->default == 'root') $val->default = 'manager';
$grantList->{$key} = $val;
}
}
$grantList->manager = new stdClass();
$grantList->manager->title = Context::getLang('grant_manager');
$grantList->manager->default = 'manager';
// get member module's config
$oMemberModel = &getModel('member');
$member_config = $oMemberModel->getMemberConfig();
Context::set('member_config', $member_config);
$oModuleModel = &getModel('module');
$columnList = array('module_srl', 'site_srl');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl, $columnList);
// Grant virtual permission for access and manager
$grant_list->access->title = Context::getLang('grant_access');
$grant_list->access->default = 'guest';
if(count($source_grant_list)) {
foreach($source_grant_list as $key => $val) {
if(!$val->default) $val->default = 'guest';
if($val->default == 'root') $val->default = 'manager';
$grant_list->{$key} = $val;
}
}
$grant_list->manager->title = Context::getLang('grant_manager');
$grant_list->manager->default = 'manager';
Context::set('grant_list', $grant_list);
// Get a permission group granted to the current module
$default_grant = array();
$args->module_srl = $module_srl;
$output = executeQueryArray('module.getModuleGrants', $args);
if($output->data) {
foreach($output->data as $val) {
if($val->group_srl == 0) $default_grant[$val->name] = 'all';
else if($val->group_srl == -1) $default_grant[$val->name] = 'member';
else if($val->group_srl == -2) $default_grant[$val->name] = 'site';
else {
$selected_group[$val->name][] = $val->group_srl;
$default_grant[$val->name] = 'group';
}
}
}
Context::set('selected_group', $selected_group);
Context::set('default_grant', $default_grant);
Context::set('module_srl', $module_srl);
// Extract admin ID set in the current module
$admin_member = $oModuleModel->getAdminId($module_srl);
Context::set('admin_member', $admin_member);
// Get a list of groups
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups($module_info->site_srl);
Context::set('group_list', $group_list);
//Security
$security = new Security();
$security->encodeHTML('group_list..title');
$security->encodeHTML('group_list..description');
$security->encodeHTML('admin_member..nick_name');
// Get information of module_grants
$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($this->module_path.'tpl', 'module_grants');
}
/**
* @brief Common:: skin setting page for the module
**/
function getModuleSkinHTML($module_srl) {
return $this->_getModuleSkinHTML($module_srl, 'P');
}
/**
* Common:: skin setting page for the module (mobile)
*
* @param $module_srl sequence of module
* @return string The html code
*/
function getModuleMobileSkinHTML($module_srl)
// Get a permission group granted to the current module
$defaultGrant = new stdClass();
$args = new stdClass();
$args->module_srl = $moduleSrl;
$output = executeQueryArray('module.getModuleGrants', $args);
if($output->data)
{
return $this->_getModuleSkinHtml($module_srl, 'M');
foreach($output->data as $val)
{
if($val->group_srl == 0) $defaultGrant->{$val->name} = 'all';
else if($val->group_srl == -1) $defaultGrant->{$val->name} = 'member';
else if($val->group_srl == -2) $defaultGrant->{$val->name} = 'site';
else if($val->group_srl == -3) $defaultGrant->{$val->name} = 'manager';
else
{
$selectedGroup->{$val->name}[] = $val->group_srl;
$defaultGrant->{$val->name} = 'group';
}
}
}
/**
* Skin setting page for the module
*
* @param $module_srl sequence of module
* @param $mode P or M
* @return string The HTML code
*/
function _getModuleSkinHTML($module_srl, $mode)
if(is_object($grantList))
{
$mode = $mode === 'P' ? 'P' : 'M';
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if(!$module_info) return;
if($mode === 'P')
foreach($grantList AS $key=>$value)
{
$skin = $module_info->skin;
if(isset($defaultGrant->{$key}))
{
$grantList->{$key}->grant = $defaultGrant->{$key};
}
if(isset($selectedGroup->{$key}))
{
$grantList->{$key}->group_srls = $selectedGroup->{$key};
}
}
}
$this->add('grantList', $grantList);
}
/**
* @brief Common:: skin setting page for the module
*/
function getModuleSkinHTML($module_srl)
{
return $this->_getModuleSkinHTML($module_srl, 'P');
}
/**
* Common:: skin setting page for the module (mobile)
*
* @param $module_srl sequence of module
* @return string The html code
*/
function getModuleMobileSkinHTML($module_srl)
{
return $this->_getModuleSkinHtml($module_srl, 'M');
}
/**
* Skin setting page for the module
*
* @param $module_srl sequence of module
* @param $mode P or M
* @return string The HTML code
*/
function _getModuleSkinHTML($module_srl, $mode)
{
$mode = $mode === 'P' ? 'P' : 'M';
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if(!$module_info) return;
if($mode === 'P')
{
if($module_info->is_skin_fix == 'N')
{
$skin = $oModuleModel->getModuleDefaultSkin($module_info->module, 'P', $module_info->site_srl);
}
else
{
$skin = $module_info->skin;
}
}
else
{
if($module_info->is_mskin_fix == 'N')
{
$skin = $oModuleModel->getModuleDefaultSkin($module_info->module, 'M', $module_info->site_srl);
}
else
{
$skin = $module_info->mskin;
}
}
$module_path = './modules/'.$module_info->module;
$module_path = './modules/'.$module_info->module;
// Get XML information of the skin and skin sinformation set in DB
if($mode === 'P')
{
$skin_info = $oModuleModel->loadSkinInfo($module_path, $skin);
$skin_vars = $oModuleModel->getModuleSkinVars($module_srl);
}
else
{
$skin_info = $oModuleModel->loadSkinInfo($module_path, $skin, 'm.skins');
$skin_vars = $oModuleModel->getModuleMobileSkinVars($module_srl);
}
// Get XML information of the skin and skin sinformation set in DB
if($mode === 'P')
{
$skin_info = $oModuleModel->loadSkinInfo($module_path, $skin);
$skin_vars = $oModuleModel->getModuleSkinVars($module_srl);
}
else
{
$skin_info = $oModuleModel->loadSkinInfo($module_path, $skin, 'm.skins');
$skin_vars = $oModuleModel->getModuleMobileSkinVars($module_srl);
}
if(count($skin_info->extra_vars))
if(count($skin_info->extra_vars))
{
foreach($skin_info->extra_vars as $key => $val)
{
foreach($skin_info->extra_vars as $key => $val)
$group = $val->group;
$name = $val->name;
$type = $val->type;
if($skin_vars[$name])
{
$group = $val->group;
$name = $val->name;
$type = $val->type;
if($skin_vars[$name])
{
$value = $skin_vars[$name]->value;
}
else $value = '';
if($type=="checkbox")
{
$value = $value?unserialize($value):array();
}
$value = empty($value) ? $val->default : $value;
$skin_info->extra_vars[$key]->value= $value;
}
}
$value = $skin_vars[$name]->value;
}
else $value = '';
if($type=="checkbox")
{
$value = $value?unserialize($value):array();
}
Context::set('module_info', $module_info);
Context::set('mid', $module_info->mid);
Context::set('skin_info', $skin_info);
Context::set('skin_vars', $skin_vars);
Context::set('mode', $mode);
//Security
$security = new Security();
$security->encodeHTML('mid');
$security->encodeHTML('module_info.browser_title');
$security->encodeHTML('skin_info...');
$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($this->module_path.'tpl', 'skin_config');
}
/**
* @brief Get values for a particular language code
* Return its corresponding value if lang_code is specified. Otherwise return $name.
**/
function getLangCode($site_srl, $name) {
$lang_supported = Context::get('lang_supported');
if(substr($name,0,12)=='$user_lang->') {
$args->site_srl = (int)$site_srl;
$args->name = substr($name,12);
$output = executeQueryArray('module.getLang', $args);
if($output->data) {
foreach($output->data as $key => $val) {
$selected_lang[$val->lang_code] = $val->value;
}
}
} else {
$tmp = unserialize($name);
if($tmp) {
$selected_lang = array();
$rand_name = $tmp[Context::getLangType()];
if(!$rand_name) $rand_name = array_shift($tmp);
if(is_array($lang_supported))
{
foreach($lang_supported as $key => $val)
$selected_lang[$key] = $tmp[$key]?$tmp[$key]:$rand_name;
}
}
}
$output = array();
if(is_array($lang_supported))
{
foreach($lang_supported as $key => $val)
$output[$key] = $selected_lang[$key]?$selected_lang[$key]:$name;
$value = empty($value) ? $val->default : $value;
$skin_info->extra_vars[$key]->value= $value;
}
return $output;
}
/**
* @brief Return if the module language in ajax is requested
**/
function getModuleAdminLangCode() {
$name = Context::get('name');
if(!$name) return new Object(-1,'msg_invalid_request');
$site_module_info = Context::get('site_module_info');
$this->add('name', $name);
$output = $this->getLangCode($site_module_info->site_srl, '$user_lang->'.$name);
$this->add('langs', $output);
}
/**
* @brief Returns lang list by lang name
**/
function getModuleAdminLangListByName()
{
$args = Context::getRequestVars();
if(!$args->site_srl) $args->site_srl = 0;
$columnList = array('lang_code', 'name', 'value');
$langList = array();
$args->langName = preg_replace('/^\$user_lang->/', '', $args->lang_name);
$output = executeQueryArray('module.getLangListByName', $args, $columnList);
if($output->toBool()) $langList = $output->data;
$this->add('lang_list', $langList);
$this->add('lang_name', $args->langName);
}
/**
* @brief Return lang list
**/
function getModuleAdminLangListByValue()
Context::set('module_info', $module_info);
Context::set('mid', $module_info->mid);
Context::set('skin_info', $skin_info);
Context::set('skin_vars', $skin_vars);
Context::set('mode', $mode);
//Security
$security = new Security();
$security->encodeHTML('mid');
$security->encodeHTML('module_info.browser_title');
$security->encodeHTML('skin_info...');
$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($this->module_path.'tpl', 'skin_config');
}
/**
* @brief Get values for a particular language code
* Return its corresponding value if lang_code is specified. Otherwise return $name.
*/
function getLangCode($site_srl, $name, $isFullLanguage = FALSE)
{
if($isFullLanguage)
{
$args = Context::getRequestVars();
if(!$args->site_srl) $args->site_srl = 0;
$lang_supported = Context::loadLangSupported();
}
else
{
$lang_supported = Context::get('lang_supported');
}
$langList = array();
// search value
$output = executeQueryArray('module.getLangNameByValue', $args);
if ($output->toBool() && is_array($output->data)){
unset($args->value);
foreach($output->data as $data) {
$args->langName = $data->name;
$columnList = array('lang_code', 'name', 'value');
$outputByName = executeQueryArray('module.getLangListByName', $args, $columnList);
if($outputByName->toBool()) {
$langList = array_merge($langList, $outputByName->data);
}
if(substr($name,0,12)=='$user_lang->')
{
$args = new stdClass();
$args->site_srl = (int)$site_srl;
$args->name = substr($name,12);
$output = executeQueryArray('module.getLang', $args);
if($output->data)
{
foreach($output->data as $key => $val)
{
$selected_lang[$val->lang_code] = $val->value;
}
}
$this->add('lang_list', $langList);
}
/**
* @brief Return current lang list
**/
function getLangListByLangcode($args)
else
{
$output = executeQueryArray('module.getLangListByLangcode', $args);
if(!$output->toBool()) return array();
return $output;
$tmp = unserialize($name);
if($tmp)
{
$selected_lang = array();
$rand_name = $tmp[Context::getLangType()];
if(!$rand_name) $rand_name = array_shift($tmp);
if(is_array($lang_supported))
{
foreach($lang_supported as $key => $val)
$selected_lang[$key] = $tmp[$key]?$tmp[$key]:$rand_name;
}
}
}
}
?>
$output = array();
if(is_array($lang_supported))
{
foreach($lang_supported as $key => $val)
$output[$key] = $selected_lang[$key]?$selected_lang[$key]:$name;
}
return $output;
}
/**
* @brief Return if the module language in ajax is requested
*/
function getModuleAdminLangCode()
{
$name = Context::get('name');
if(!$name) return new Object(-1,'msg_invalid_request');
$site_module_info = Context::get('site_module_info');
$this->add('name', $name);
$output = $this->getLangCode($site_module_info->site_srl, '$user_lang->'.$name);
$this->add('langs', $output);
}
/**
* @brief Returns lang list by lang name
*/
function getModuleAdminLangListByName()
{
$args = Context::getRequestVars();
if(!$args->site_srl) $args->site_srl = 0;
$columnList = array('lang_code', 'name', 'value');
$langList = array();
$args->langName = preg_replace('/^\$user_lang->/', '', $args->lang_name);
$output = executeQueryArray('module.getLangListByName', $args, $columnList);
if($output->toBool()) $langList = $output->data;
$this->add('lang_list', $langList);
$this->add('lang_name', $args->langName);
}
/**
* @brief Return lang list
*/
function getModuleAdminLangListByValue()
{
$args = Context::getRequestVars();
if(!$args->site_srl) $args->site_srl = 0;
$langList = array();
// search value
$output = executeQueryArray('module.getLangNameByValue', $args);
if($output->toBool() && is_array($output->data))
{
unset($args->value);
foreach($output->data as $data)
{
$args->langName = $data->name;
$columnList = array('lang_code', 'name', 'value');
$outputByName = executeQueryArray('module.getLangListByName', $args, $columnList);
if($outputByName->toBool())
{
$langList = array_merge($langList, $outputByName->data);
}
}
}
$this->add('lang_list', $langList);
}
/**
* @brief Return current lang list
*/
function getLangListByLangcode($args)
{
$output = executeQueryArray('module.getLangListByLangcode', $args);
if(!$output->toBool()) return array();
return $output;
}
/**
* return multilingual html
*/
function getModuleAdminMultilingualHtml()
{
$oTemplate = TemplateHandler::getInstance();
$tpl = $oTemplate->compile('./modules/module/tpl', 'multilingual_v17.html');
$this->add('html', $tpl);
}
/**
* return multilingual list html
*/
function getModuleAdminLangListHtml()
{
$site_module_info = Context::get('site_module_info');
$args = new stdClass();
$args->site_srl = (int)$site_module_info->site_srl;
$args->langCode = Context::get('lang_code');
$args->page = Context::get('page');
$args->sort_index = 'name';
$args->order_type = 'asc';
$args->search_keyword = Context::get('search_keyword');
$args->name = Context::get('name');
$args->list_count = Context::get('list_count');
$args->page_count = 5;
if(!$args->langCode)
{
$args->langCode = Context::get('lang_type');
}
$output = $this->getLangListByLangcode($args);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('lang_code_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$oSecurity = new Security();
$oSecurity->encodeHTML('lang_code_list..');
$oTemplate = TemplateHandler::getInstance();
$tpl = $oTemplate->compile('./modules/module/tpl', 'multilingual_v17_list.html');
$this->add('html', $tpl);
}
/**
* return module searcher html
*/
function getModuleAdminModuleSearcherHtml()
{
Context::loadLang('./modules/admin/lang');
$oTemplate = TemplateHandler::getInstance();
$tpl = $oTemplate->compile('./modules/module/tpl', 'module_searcher_v17.html');
$this->add('html', $tpl);
}
/**
* return module info.
*/
function getModuleAdminModuleInfo()
{
if(Context::get('search_module_srl'))
{
$module_srl = Context::get('search_module_srl');
}
else
{
$module_srl = Context::get('module_srl');
}
$model = getModel('module');
$module_info = $model->getModuleInfoByModuleSrl($module_srl);
$this->add('module_info', $module_info);
}
}
/* End of file module.admin.model.php */
/* Location: ./modules/module/module.admin.model.php */

View file

@ -1,289 +1,315 @@
<?php
/**
* @class moduleAdminView
* @author NHN (developers@xpressengine.com)
* @brief admin view class of the module module
**/
/**
* @class moduleAdminView
* @author NHN (developers@xpressengine.com)
* @brief admin view class of the module module
*/
class moduleAdminView extends module
{
/**
* @brief Initialization
*/
function init()
{
// Set the template path
$this->setTemplatePath($this->module_path.'tpl');
}
class moduleAdminView extends module {
/**
* @brief Module admin page
*/
function dispModuleAdminContent()
{
$this->dispModuleAdminList();
}
/**
* @brief Initialization
**/
function init() {
// Set the template path
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* @brief Display a lost of modules
*/
function dispModuleAdminList()
{
// Obtain a list of modules
$oAdminModel = &getAdminModel('admin');
$oModuleModel = &getModel('module');
$oAutoinstallModel = &getModel('autoinstall');
/**
* @brief Module admin page
**/
function dispModuleAdminContent() {
$this->dispModuleAdminList();
}
/**
* @brief Display a lost of modules
**/
function dispModuleAdminList() {
// Obtain a list of modules
$oAdminModel = &getAdminModel('admin');
$oModuleModel = &getModel('module');
$oAutoinstallModel = &getModel('autoinstall');
$module_list = $oModuleModel->getModuleList();
if(is_array($module_list))
$module_list = $oModuleModel->getModuleList();
if(is_array($module_list))
{
foreach($module_list as $key => $val)
{
foreach($module_list as $key => $val) {
$module_list[$key]->delete_url = $oAutoinstallModel->getRemoveUrlByPath($val->path);
$module_list[$key]->delete_url = $oAutoinstallModel->getRemoveUrlByPath($val->path);
// get easyinstall need update
$packageSrl = $oAutoinstallModel->getPackageSrlByPath($val->path);
$package = $oAutoinstallModel->getInstalledPackages($packageSrl);
$module_list[$key]->need_autoinstall_update = $package[$packageSrl]->need_update;
// get easyinstall need update
$packageSrl = $oAutoinstallModel->getPackageSrlByPath($val->path);
$package = $oAutoinstallModel->getInstalledPackages($packageSrl);
$module_list[$key]->need_autoinstall_update = $package[$packageSrl]->need_update;
// get easyinstall update url
if ($module_list[$key]->need_autoinstall_update == 'Y')
{
$module_list[$key]->update_url = $oAutoinstallModel->getUpdateUrlByPackageSrl($packageSrl);
}
// get easyinstall update url
if($module_list[$key]->need_autoinstall_update == 'Y')
{
$module_list[$key]->update_url = $oAutoinstallModel->getUpdateUrlByPackageSrl($packageSrl);
}
}
$output = $oAdminModel->getFavoriteList('0');
$favoriteList = $output->get('favoriteList');
$favoriteModuleList = array();
if ($favoriteList){
foreach($favoriteList as $favorite => $favorite_info){
$favoriteModuleList[] = $favorite_info->module;
}
}
Context::set('favoriteModuleList', $favoriteModuleList);
Context::set('module_list', $module_list);
$security = new Security();
$security->encodeHTML('module_list....');
// Set a template file
$this->setTemplateFile('module_list');
}
/**
* @brief Pop-up details of the module (conf/info.xml)
**/
function dispModuleAdminInfo() {
// Obtain a list of modules
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoXml(Context::get('selected_module'));
Context::set('module_info', $module_info);
$security = new Security();
$security->encodeHTML('module_info...');
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_info');
}
/**
* @brief Module Categories
**/
function dispModuleAdminCategory() {
$module_category_srl = Context::get('module_category_srl');
// Obtain a list of modules
$oModuleModel = &getModel('module');
// Display the category page if a category is selected
//Security
$security = new Security();
if($module_category_srl) {
$selected_category = $oModuleModel->getModuleCategory($module_category_srl);
Context::set('selected_category', $selected_category);
//Security
$security->encodeHTML('selected_category.title');
// Set a template file
$this->setTemplateFile('category_update_form');
// If not selected, display a list of categories
} else {
$category_list = $oModuleModel->getModuleCategories();
Context::set('category_list', $category_list);
//Security
$security->encodeHTML('category_list..title');
// Set a template file
$this->setTemplateFile('category_list');
}
}
/**
* @brief Feature to copy module
**/
function dispModuleAdminCopyModule() {
// Get a target module to copy
$module_srl = Context::get('module_srl');
// Get information of the module
$oModuleModel = &getModel('module');
$columnList = array('module_srl', 'module', 'mid', 'browser_title');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl, $columnList);
Context::set('module_info', $module_info);
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('copy_module');
}
/**
* @brief Applying the default settings to all modules
**/
function dispModuleAdminModuleSetup() {
$module_srls = Context::get('module_srls');
$modules = explode(',',$module_srls);
if(!count($modules)) if(!$module_srls) return new Object(-1,'msg_invalid_request');
$oModuleModel = &getModel('module');
$columnList = array('module_srl', 'module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($modules[0], $columnList);
// Get a skin list of the module
$skin_list = $oModuleModel->getSkins('./modules/'.$module_info->module);
Context::set('skin_list',$skin_list);
// Get a layout list
$oLayoutMode = &getModel('layout');
$layout_list = $oLayoutMode->getLayoutList();
Context::set('layout_list', $layout_list);
// Get a list of module categories
$module_category = $oModuleModel->getModuleCategories();
Context::set('module_category', $module_category);
$security = new Security();
$security->encodeHTML('layout_list..title','layout_list..layout');
$security->encodeHTML('skin_list....');
$security->encodeHTML('module_category...');
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_setup');
}
/**
* @brief Apply module addition settings to all modules
**/
function dispModuleAdminModuleAdditionSetup() {
$module_srls = Context::get('module_srls');
$modules = explode(',',$module_srls);
if(!count($modules)) if(!$module_srls) return new Object(-1,'msg_invalid_request');
// pre-define variables because you can get contents from other module (call by reference)
$content = '';
// Call a trigger for additional settings
// Considering uses in the other modules, trigger name cen be publicly used
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'before', $content);
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'after', $content);
Context::set('setup_content', $content);
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_addition_setup');
}
/**
* @brief Applying module permission settings to all modules
**/
function dispModuleAdminModuleGrantSetup() {
$module_srls = Context::get('module_srls');
$modules = explode(',',$module_srls);
if(!count($modules)) if(!$module_srls) return new Object(-1,'msg_invalid_request');
$oModuleModel = &getModel('module');
$columnList = array('module_srl', 'module', 'site_srl');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($modules[0], $columnList);
$xml_info = $oModuleModel->getModuleActionXml($module_info->module);
$source_grant_list = $xml_info->grant;
// Grant virtual permissions for access and manager
$grant_list->access->title = Context::getLang('grant_access');
$grant_list->access->default = 'guest';
if(count($source_grant_list)) {
foreach($source_grant_list as $key => $val) {
if(!$val->default) $val->default = 'guest';
if($val->default == 'root') $val->default = 'manager';
$grant_list->{$key} = $val;
}
}
$grant_list->manager->title = Context::getLang('grant_manager');
$grant_list->manager->default = 'manager';
Context::set('grant_list', $grant_list);
// Get a list of groups
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups($module_info->site_srl);
Context::set('group_list', $group_list);
$security = new Security();
$security->encodeHTML('group_list..title');
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_grant_setup');
}
/**
* @brief Language codes
**/
function dispModuleAdminLangcode() {
// Get the language file of the current site
$site_module_info = Context::get('site_module_info');
$args->site_srl = (int)$site_module_info->site_srl;
$args->langCode = Context::get('lang_type');
$args->page = Context::get('page'); // /< Page
$args->list_count = 30; // /< the number of posts to display on a single page
$args->page_count = 5; // /< the number of pages that appear in the page navigation
$args->sort_index = 'name';
$args->order_type = 'asc';
$args->search_target = Context::get('search_target'); // /< search (title, contents ...)
$args->search_keyword = Context::get('search_keyword'); // /< keyword to search
$oModuleAdminModel = &getAdminModel('module');
$output = $oModuleAdminModel->getLangListByLangcode($args);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('lang_code_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
if(Context::get('module') != 'admin')
{
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
}
// Set a template file
$this->setTemplateFile('module_langcode');
}
function dispModuleAdminFileBox(){
$oModuleModel = &getModel('module');
$output = $oModuleModel->getModuleFileBoxList();
$page = Context::get('page');
$page = $page?$page:1;
Context::set('filebox_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
Context::set('page', $page);
$this->setTemplateFile('adminFileBox');
}
}
?>
$output = $oAdminModel->getFavoriteList('0');
$favoriteList = $output->get('favoriteList');
$favoriteModuleList = array();
if($favoriteList)
{
foreach($favoriteList as $favorite => $favorite_info)
{
$favoriteModuleList[] = $favorite_info->module;
}
}
Context::set('favoriteModuleList', $favoriteModuleList);
Context::set('module_list', $module_list);
$security = new Security();
$security->encodeHTML('module_list....');
// Set a template file
$this->setTemplateFile('module_list');
}
/**
* @brief Pop-up details of the module (conf/info.xml)
*/
function dispModuleAdminInfo()
{
// Obtain a list of modules
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoXml(Context::get('selected_module'));
Context::set('module_info', $module_info);
$security = new Security();
$security->encodeHTML('module_info...');
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_info');
}
/**
* @brief Module Categories
*/
function dispModuleAdminCategory()
{
$module_category_srl = Context::get('module_category_srl');
// Obtain a list of modules
$oModuleModel = &getModel('module');
// Display the category page if a category is selected
//Security
$security = new Security();
if($module_category_srl)
{
$selected_category = $oModuleModel->getModuleCategory($module_category_srl);
Context::set('selected_category', $selected_category);
//Security
$security->encodeHTML('selected_category.title');
// Set a template file
$this->setTemplateFile('category_update_form');
// If not selected, display a list of categories
}
else
{
$category_list = $oModuleModel->getModuleCategories();
Context::set('category_list', $category_list);
//Security
$security->encodeHTML('category_list..title');
// Set a template file
$this->setTemplateFile('category_list');
}
}
/**
* @brief Feature to copy module
*/
function dispModuleAdminCopyModule()
{
// Get a target module to copy
$module_srl = Context::get('module_srl');
// Get information of the module
$oModuleModel = &getModel('module');
$columnList = array('module_srl', 'module', 'mid', 'browser_title');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl, $columnList);
Context::set('module_info', $module_info);
$oSecurity = new Security();
$oSecurity->encodeHTML('module_info.');
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('copy_module');
}
/**
* @brief Applying the default settings to all modules
*/
function dispModuleAdminModuleSetup()
{
$module_srls = Context::get('module_srls');
$modules = explode(',',$module_srls);
if(!count($modules)) if(!$module_srls) return new Object(-1,'msg_invalid_request');
$oModuleModel = &getModel('module');
$columnList = array('module_srl', 'module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($modules[0], $columnList);
// Get a skin list of the module
$skin_list = $oModuleModel->getSkins('./modules/'.$module_info->module);
Context::set('skin_list',$skin_list);
// Get a layout list
$oLayoutMode = &getModel('layout');
$layout_list = $oLayoutMode->getLayoutList();
Context::set('layout_list', $layout_list);
// Get a list of module categories
$module_category = $oModuleModel->getModuleCategories();
Context::set('module_category', $module_category);
$security = new Security();
$security->encodeHTML('layout_list..title','layout_list..layout');
$security->encodeHTML('skin_list....');
$security->encodeHTML('module_category...');
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_setup');
}
/**
* @brief Apply module addition settings to all modules
*/
function dispModuleAdminModuleAdditionSetup()
{
$module_srls = Context::get('module_srls');
$modules = explode(',',$module_srls);
if(!count($modules)) if(!$module_srls) return new Object(-1,'msg_invalid_request');
// pre-define variables because you can get contents from other module (call by reference)
$content = '';
// Call a trigger for additional settings
// Considering uses in the other modules, trigger name cen be publicly used
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'before', $content);
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'after', $content);
Context::set('setup_content', $content);
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_addition_setup');
}
/**
* @brief Applying module permission settings to all modules
*/
function dispModuleAdminModuleGrantSetup()
{
$module_srls = Context::get('module_srls');
$modules = explode(',',$module_srls);
if(!count($modules)) if(!$module_srls) return new Object(-1,'msg_invalid_request');
$oModuleModel = &getModel('module');
$columnList = array('module_srl', 'module', 'site_srl');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($modules[0], $columnList);
$xml_info = $oModuleModel->getModuleActionXml($module_info->module);
$source_grant_list = $xml_info->grant;
// Grant virtual permissions for access and manager
$grant_list->access->title = Context::getLang('grant_access');
$grant_list->access->default = 'guest';
if(count($source_grant_list))
{
foreach($source_grant_list as $key => $val)
{
if(!$val->default) $val->default = 'guest';
if($val->default == 'root') $val->default = 'manager';
$grant_list->{$key} = $val;
}
}
$grant_list->manager->title = Context::getLang('grant_manager');
$grant_list->manager->default = 'manager';
Context::set('grant_list', $grant_list);
// Get a list of groups
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups($module_info->site_srl);
Context::set('group_list', $group_list);
$security = new Security();
$security->encodeHTML('group_list..title');
// Set the layout to be pop-up
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_grant_setup');
}
/**
* @brief Language codes
*/
function dispModuleAdminLangcode()
{
// Get the language file of the current site
$site_module_info = Context::get('site_module_info');
$args = new stdClass();
$args->site_srl = (int)$site_module_info->site_srl;
$args->langCode = Context::get('lang_type');
$args->page = Context::get('page'); // /< Page
$args->list_count = 30; // /< the number of posts to display on a single page
$args->page_count = 5; // /< the number of pages that appear in the page navigation
$args->sort_index = 'name';
$args->order_type = 'asc';
$args->search_target = Context::get('search_target'); // /< search (title, contents ...)
$args->search_keyword = Context::get('search_keyword'); // /< keyword to search
$oModuleAdminModel = &getAdminModel('module');
$output = $oModuleAdminModel->getLangListByLangcode($args);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('lang_code_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
if(Context::get('module') != 'admin')
{
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_layout');
}
// Set a template file
$this->setTemplateFile('module_langcode');
}
function dispModuleAdminFileBox()
{
$oModuleModel = &getModel('module');
$output = $oModuleModel->getModuleFileBoxList();
$page = Context::get('page');
$page = $page?$page:1;
Context::set('filebox_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
Context::set('page', $page);
$oSecurity = new Security();
$oSecurity->encodeHTML('filebox_list..comment', 'filebox_list..attributes.');
debugPrint($output->data);
$this->setTemplateFile('adminFileBox');
}
}
/* End of file module.admin.view.php */
/* Location: ./modules/module/module.admin.view.php */

View file

@ -1,387 +1,597 @@
<?php
/**
* @class module
* @author NHN (developers@xpressengine.com)
* @brief high class of the module module
**/
/**
* @class module
* @author NHN (developers@xpressengine.com)
* @brief high class of the module module
*/
class module extends ModuleObject
{
/**
* @brief Implement if additional tasks are necessary when installing
*/
function moduleInstall()
{
// Register action forward (to use in administrator mode)
$oModuleController = &getController('module');
class module extends ModuleObject {
$oDB = &DB::getInstance();
$oDB->addIndex("modules","idx_site_mid", array("site_srl","mid"), true);
$oDB->addIndex('sites','unique_domain',array('domain'),true);
// Create a directory to use in the module module
FileHandler::makeDir('./files/cache/module_info');
FileHandler::makeDir('./files/cache/triggers');
FileHandler::makeDir('./files/ruleset');
// Insert site information into the sites table
$args->site_srl = 0;
$output = $oDB->executeQuery('module.getSite', $args);
if(!$output->data || !$output->data->index_module_srl)
{
$db_info = Context::getDBInfo();
$domain = Context::getDefaultUrl();
$url_info = parse_url($domain);
$domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
$site_args->site_srl = 0;
$site_args->index_module_srl = 0;
$site_args->domain = $domain;
$site_args->default_language = $db_info->lang_type;
/**
* @brief Implement if additional tasks are necessary when installing
**/
function moduleInstall() {
// Register action forward (to use in administrator mode)
$oModuleController = &getController('module');
$output = executeQuery('module.insertSite', $site_args);
if(!$output->toBool()) return $output;
}
$oDB = &DB::getInstance();
$oDB->addIndex("modules","idx_site_mid", array("site_srl","mid"), true);
$oDB->addIndex('sites','unique_domain',array('domain'),true);
// Create a directory to use in the module module
FileHandler::makeDir('./files/cache/module_info');
FileHandler::makeDir('./files/cache/triggers');
FileHandler::makeDir('./files/ruleset');
// Insert site information into the sites table
$args->site_srl = 0;
$output = $oDB->executeQuery('module.getSite', $args);
if(!$output->data || !$output->data->index_module_srl) {
$db_info = Context::getDBInfo();
$domain = Context::getDefaultUrl();
$url_info = parse_url($domain);
$domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
$site_args->site_srl = 0;
$site_args->index_module_srl = 0;
$site_args->domain = $domain;
$site_args->default_language = $db_info->lang_type;
return new Object();
}
$output = executeQuery('module.insertSite', $site_args);
if(!$output->toBool()) return $output;
}
/**
* @brief a method to check if successfully installed
*/
function checkUpdate()
{
$oDB = &DB::getInstance();
// 2008. 10. 27 Add multi-index in the table, the module_part_config
if(!$oDB->isIndexExists("module_part_config","idx_module_part_config")) return true;
// 2008. 11. 13 Delete unique constraint on mid in modules. Add site_srl and then create unique index on site_srl and mid
if(!$oDB->isIndexExists('modules',"idx_site_mid")) return true;
// Move permissions/skin information of all modules to the table, grants.
if($oDB->isColumnExists('modules', 'grants')) return true;
// Move permissions/skin information of all modules to the table, grants.
if(!$oDB->isColumnExists('sites', 'default_language')) return true;
// Delete extra_vars* column
for($i=1;$i<=20;$i++)
{
if($oDB->isColumnExists("documents","extra_vars".$i)) return true;
}
// Insert site information to the table, sites
$args = new stdClass();
$args->site_srl = 0;
$output = $oDB->executeQuery('module.getSite', $args);
if(!$output->data) return true;
return new Object();
}
// If domain index is defined on the table, sites
if($oDB->isIndexExists('sites', 'idx_domain')) return true;
if(!$oDB->isIndexExists('sites','unique_domain')) return true;
/**
* @brief a method to check if successfully installed
**/
function checkUpdate() {
$oDB = &DB::getInstance();
// 2008. 10. 27 Add multi-index in the table, the module_part_config
if(!$oDB->isIndexExists("module_part_config","idx_module_part_config")) return true;
// 2008. 11. 13 Delete unique constraint on mid in modules. Add site_srl and then create unique index on site_srl and mid
if(!$oDB->isIndexExists('modules',"idx_site_mid")) return true;
// Move permissions/skin information of all modules to the table, grants.
if($oDB->isColumnExists('modules', 'grants')) return true;
// Move permissions/skin information of all modules to the table, grants.
if(!$oDB->isColumnExists('sites', 'default_language')) return true;
// Delete extra_vars* column
for($i=1;$i<=20;$i++) {
if($oDB->isColumnExists("documents","extra_vars".$i)) return true;
}
// Insert site information to the table, sites
$args->site_srl = 0;
$output = $oDB->executeQuery('module.getSite', $args);
if(!$output->data) return true;
if(!$oDB->isColumnExists("modules", "use_mobile")) return true;
if(!$oDB->isColumnExists("modules", "mlayout_srl")) return true;
if(!$oDB->isColumnExists("modules", "mcontent")) return true;
if(!$oDB->isColumnExists("modules", "mskin")) return true;
// If domain index is defined on the table, sites
if($oDB->isIndexExists('sites', 'idx_domain')) return true;
if(!$oDB->isIndexExists('sites','unique_domain')) return true;
// check fix skin
if(!$oDB->isColumnExists("modules", "is_skin_fix")) return true;
if(!$oDB->isColumnExists("modules", "use_mobile")) return true;
if(!$oDB->isColumnExists("modules", "mlayout_srl")) return true;
if(!$oDB->isColumnExists("modules", "mcontent")) return true;
if(!$oDB->isColumnExists("modules", "mskin")) return true;
if(!$oDB->isColumnExists("module_config", "site_srl")) return true;
// check fix skin
if(!$oDB->isColumnExists("modules", "is_skin_fix")) return true;
if(!$oDB->isColumnExists("module_config", "site_srl")) return true;
if(!is_dir('./files/ruleset')) return true;
if(!is_dir('./files/ruleset')) return true;
$args->skin = '.';
$output = executeQueryArray('module.getModuleSkinDotList', $args);
if($output->data && count($output->data) > 0)
$args->skin = '.';
$output = executeQueryArray('module.getModuleSkinDotList', $args);
if($output->data && count($output->data) > 0)
{
foreach($output->data as $item)
{
foreach($output->data as $item)
{
$skin_path = explode('.', $item->skin);
if(count($skin_path) != 2) continue;
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/modules/%s', $skin_path[0], $skin_path[1]))) return true;
}
$skin_path = explode('.', $item->skin);
if(count($skin_path) != 2) continue;
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/modules/%s', $skin_path[0], $skin_path[1]))) return true;
}
}
return false;
}
// XE 1.7
$args->site_srl = 0;
$output = executeQueryArray('module.getNotLinkedModuleBySiteSrl',$args);
/**
* @brief Execute update
**/
function moduleUpdate() {
$oDB = &DB::getInstance();
// 2008. 10. 27 module_part_config Add a multi-index to the table and check all information of module_configg
if(!$oDB->isIndexExists("module_part_config","idx_module_part_config")) {
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
$modules = $oModuleModel->getModuleList();
foreach($modules as $key => $module_info) {
$module = $module_info->module;
if(!in_array($module, array('point','trackback','layout','rss','file','comment','editor'))) continue;
$config = $oModuleModel->getModuleConfig($module);
if($output->toBool() && $output->data && count($output->data) > 0) return true;
$module_config = null;
switch($module) {
case 'point' :
$module_config = $config->module_point;
unset($config->module_point);
break;
case 'trackback' :
case 'rss' :
case 'file' :
case 'comment' :
case 'editor' :
$module_config = $config->module_config;
unset($config->module_config);
if(is_array($module_config) && count($module_config)) {
foreach($module_config as $key => $val) {
if(isset($module_config[$key]->module_srl)) unset($module_config[$key]->module_srl);
}
}
break;
case 'layout' :
$tmp = $config->header_script;
if(is_array($tmp) && count($tmp)) {
foreach($tmp as $k => $v) {
if(!$v && !trim($v)) continue;
$module_config[$k]->header_script = $v;
}
}
$config = null;
break;
// check fix mskin
if(!$oDB->isColumnExists("modules", "is_mskin_fix")) return true;
}
$oModuleModel = getModel('module');
$moduleConfig = $oModuleModel->getModuleConfig('module');
if(!$moduleConfig->isUpdateFixedValue) return true;
$oModuleController->insertModuleConfig($module, $config);
// check lost module
if(!$moduleConfig->isUpdateLostModule)
{
return true;
}
return false;
}
if(is_array($module_config) && count($module_config)) {
foreach($module_config as $module_srl => $module_part_config) {
$oModuleController->insertModulePartConfig($module,$module_srl,$module_part_config);
}
}
}
$oDB->addIndex("module_part_config","idx_module_part_config", array("module","module_srl"));
}
// 2008. 11. 13 drop index(unique_mid). Add a column and index on site_srl and mid columns
if(!$oDB->isIndexExists('modules',"idx_site_mid")) {
$oDB->dropIndex("modules","unique_mid",true);
$oDB->addColumn('modules','site_srl','number',11,0,true);
$oDB->addIndex("modules","idx_site_mid", array("site_srl","mid"),true);
}
// document extra vars
if(!$oDB->isTableExists('document_extra_vars')) $oDB->createTableByXmlFile('./modules/document/schemas/document_extra_vars.xml');
if(!$oDB->isTableExists('document_extra_keys')) $oDB->createTableByXmlFile('./modules/document/schemas/document_extra_keys.xml');
// Move permission, skin info, extection info, admin ID of all modules to the table, grants
if($oDB->isColumnExists('modules', 'grants')) {
$oModuleController = &getController('module');
$oDocumentController = &getController('document');
// Get a value of the current system language code
$lang_code = Context::getLangType();
// Get module_info of all modules
$output = executeQueryArray('module.getModuleInfos');
if(count($output->data)) {
foreach($output->data as $module_info) {
// Separate information about permission granted to the module, extra vars, skin vars, super-admin's authority
$module_srl = trim($module_info->module_srl);
// grant an authority
$grants = unserialize($module_info->grants);
if($grants) $oModuleController->insertModuleGrants($module_srl, $grants);
// Insert skin vars
$skin_vars = unserialize($module_info->skin_vars);
if($skin_vars) $oModuleController->insertModuleSkinVars($module_srl, $skin_vars);
// Insert super admin's ID
$admin_id = trim($module_info->admin_id);
if($admin_id && $admin_id != 'Array') {
$admin_ids = explode(',',$admin_id);
if(count($admin_id)) {
foreach($admin_ids as $admin_id) {
$oModuleController->insertAdminId($module_srl, $admin_id);
}
}
}
// Save extra configurations for each module(column data which doesn't exist in the defaut modules)
$extra_vars = unserialize($module_info->extra_vars);
$document_extra_keys = null;
if($extra_vars->extra_vars && count($extra_vars->extra_vars)) {
$document_extra_keys = $extra_vars->extra_vars;
unset($extra_vars->extra_vars);
}
if($extra_vars) $oModuleController->insertModuleExtraVars($module_srl, $extra_vars);
/**
* Move document extra vars(it should have conducted in the documents module however extra vars in modules table should be listed up in this module)
**/
// Insert extra vars if planet module is
if($module_info->module == 'planet') {
if(!$document_extra_keys || !is_array($document_extra_keys)) $document_extra_keys = array();
$planet_extra_keys->name = 'postscript';
$planet_extra_keys->type = 'text';
$planet_extra_keys->is_required = 'N';
$planet_extra_keys->search = 'N';
$planet_extra_keys->default = '';
$planet_extra_keys->desc = '';
$document_extra_keys[20] = $planet_extra_keys;
}
// Register keys for document extra vars
if(count($document_extra_keys)) {
foreach($document_extra_keys as $var_idx => $val) {
$oDocumentController->insertDocumentExtraKey($module_srl, $var_idx, $val->name, $val->type, $val->is_required, $val->search, $val->default, $val->desc, 'extra_vars'.$var_idx);
}
// 2009-04-14 Fixed a bug that only 100 extra vars are moved
$oDocumentModel = &getModel('document');
$total_count = $oDocumentModel->getDocumentCount($module_srl);
if ($total_count > 0) {
$per_page = 100;
$total_pages = (int) (($total_count - 1) / $per_page) + 1;
// Get extra vars if exist
$doc_args = null;
$doc_args->module_srl = $module_srl;
$doc_args->list_count = $per_page;
$doc_args->sort_index = 'list_order';
$doc_args->order_type = 'asc';
for ($doc_args->page = 1; $doc_args->page <= $total_pages; $doc_args->page++) {
$output = executeQueryArray('document.getDocumentList', $doc_args);
if ($output->toBool() && $output->data && count($output->data)) {
foreach ($output->data as $document) {
if (!$document) continue;
foreach ($document as $key => $var) {
if (strpos($key, 'extra_vars') !== 0 || !trim($var) || $var == 'N;') continue;
$var_idx = str_replace('extra_vars','',$key);
$oDocumentController->insertDocumentExtraVar($module_srl, $document->document_srl, $var_idx, $var, 'extra_vars'.$var_idx, $lang_code);
}
}
}
} // for total_pages
} // if count
}
// Additional variables of the module, remove
$module_info->grant = null;
$module_info->extra_vars = null;
$module_info->skin_vars = null;
$module_info->admin_id = null;
executeQuery('module.updateModule', $module_info);
}
}
// Various column drop
$oDB->dropColumn('modules','grants');
$oDB->dropColumn('modules','admin_id');
$oDB->dropColumn('modules','skin_vars');
$oDB->dropColumn('modules','extra_vars');
}
// Rights of all modules/skins transferring the information into a table Update grants
if(!$oDB->isColumnExists('sites', 'default_language')) {
$oDB->addColumn('sites','default_language','varchar',255,0,false);
}
// extra_vars * Remove Column
for($i=1;$i<=20;$i++) {
if(!$oDB->isColumnExists("documents","extra_vars".$i)) continue;
$oDB->dropColumn('documents','extra_vars'.$i);
}
// Enter the main site information sites on the table
$args->site_srl = 0;
$output = $oDB->executeQuery('module.getSite', $args);
if(!$output->data) {
// Basic mid, language Wanted
$mid_output = $oDB->executeQuery('module.getDefaultMidInfo', $args);
$db_info = Context::getDBInfo();
$domain = Context::getDefaultUrl();
$url_info = parse_url($domain);
$domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
$site_args->site_srl = 0;
$site_args->index_module_srl = $mid_output->data->module_srl;
$site_args->domain = $domain;
$site_args->default_language = $db_info->lang_type;
$output = executeQuery('module.insertSite', $site_args);
if(!$output->toBool()) return $output;
}
if($oDB->isIndexExists('sites','idx_domain')){
$oDB->dropIndex('sites','idx_domain');
}
if(!$oDB->isIndexExists('sites','unique_domain')){
$this->updateForUniqueSiteDomain();
$oDB->addIndex('sites','unique_domain',array('domain'),true);
}
if(!$oDB->isColumnExists("modules", "use_mobile")) {
$oDB->addColumn('modules','use_mobile','char',1,'N');
}
if(!$oDB->isColumnExists("modules", "mlayout_srl")) {
$oDB->addColumn('modules','mlayout_srl','number',11, 0);
}
if(!$oDB->isColumnExists("modules", "mcontent")) {
$oDB->addColumn('modules','mcontent','bigtext');
}
if(!$oDB->isColumnExists("modules", "mskin")) {
$oDB->addColumn('modules','mskin','varchar',250);
}
if(!$oDB->isColumnExists("modules", "is_skin_fix")){
$oDB->addColumn('modules', 'is_skin_fix', 'char', 1, 'N');
$output = executeQueryArray('module.getAllSkinSetModule');
if ($output->toBool() && $output->data){
$module_srls = array();
foreach($output->data as $val){
$module_srls[] = $val->module_srl;
}
unset($args);
$args->module_srls = implode(',', $module_srls);
$args->is_skin_fix = 'Y';
$output = executeQuery('module.updateSkinFixModules', $args);
}
}
if(!$oDB->isColumnExists("module_config", "site_srl")){
$oDB->addColumn('module_config', 'site_srl', 'number', 11, 0, true);
}
FileHandler::makeDir('./files/ruleset');
$args->skin = '.';
$output = executeQueryArray('module.getModuleSkinDotList', $args);
if($output->data && count($output->data) > 0)
{
foreach($output->data as $item)
{
$skin_path = explode('.', $item->skin);
if(count($skin_path) != 2) continue;
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/modules/%s', $skin_path[0], $skin_path[1])))
{
unset($args);
$args->skin = $item->skin;
$args->new_skin = implode('|@|', $skin_path);
$output = executeQuery('module.updateSkinAll', $args);
}
}
}
return new Object(0, 'success_updated');
}
function updateForUniqueSiteDomain()
{
$output = executeQueryArray("module.getNonuniqueDomains");
if(!$output->data) return;
foreach($output->data as $data)
{
if($data->count == 1) continue;
$domain = $data->domain;
$args = null;
$args->domain = $domain;
$output2 = executeQueryArray("module.getSiteByDomain", $args);
$bFirst = true;
foreach($output2->data as $site)
{
if($bFirst)
{
$bFirst = false;
continue;
}
$domain .= "_";
$args = null;
$args->domain = $domain;
$args->site_srl = $site->site_srl;
$output3 = executeQuery("module.updateSite", $args);
}
}
}
/**
* @brief Re-generate the cache file
**/
function recompileCache() {
/**
* @brief Execute update
*/
function moduleUpdate()
{
$oDB = &DB::getInstance();
// 2008. 10. 27 module_part_config Add a multi-index to the table and check all information of module_configg
if(!$oDB->isIndexExists("module_part_config","idx_module_part_config"))
{
$oModuleModel = &getModel('module');
$oModuleModel->getModuleList();
}
}
?>
$oModuleController = &getController('module');
$modules = $oModuleModel->getModuleList();
foreach($modules as $key => $module_info)
{
$module = $module_info->module;
if(!in_array($module, array('point','trackback','layout','rss','file','comment','editor'))) continue;
$config = $oModuleModel->getModuleConfig($module);
$module_config = null;
switch($module)
{
case 'point' :
$module_config = $config->module_point;
unset($config->module_point);
break;
case 'trackback' :
case 'rss' :
case 'file' :
case 'comment' :
case 'editor' :
$module_config = $config->module_config;
unset($config->module_config);
if(is_array($module_config) && count($module_config))
{
foreach($module_config as $key => $val)
{
if(isset($module_config[$key]->module_srl)) unset($module_config[$key]->module_srl);
}
}
break;
case 'layout' :
$tmp = $config->header_script;
if(is_array($tmp) && count($tmp))
{
foreach($tmp as $k => $v)
{
if(!$v && !trim($v)) continue;
$module_config[$k]->header_script = $v;
}
}
$config = null;
break;
}
$oModuleController->insertModuleConfig($module, $config);
if(is_array($module_config) && count($module_config))
{
foreach($module_config as $module_srl => $module_part_config)
{
$oModuleController->insertModulePartConfig($module,$module_srl,$module_part_config);
}
}
}
$oDB->addIndex("module_part_config","idx_module_part_config", array("module","module_srl"));
}
// 2008. 11. 13 drop index(unique_mid). Add a column and index on site_srl and mid columns
if(!$oDB->isIndexExists('modules',"idx_site_mid"))
{
$oDB->dropIndex("modules","unique_mid",true);
$oDB->addColumn('modules','site_srl','number',11,0,true);
$oDB->addIndex("modules","idx_site_mid", array("site_srl","mid"),true);
}
// document extra vars
if(!$oDB->isTableExists('document_extra_vars')) $oDB->createTableByXmlFile('./modules/document/schemas/document_extra_vars.xml');
if(!$oDB->isTableExists('document_extra_keys')) $oDB->createTableByXmlFile('./modules/document/schemas/document_extra_keys.xml');
// Move permission, skin info, extection info, admin ID of all modules to the table, grants
if($oDB->isColumnExists('modules', 'grants'))
{
$oModuleController = &getController('module');
$oDocumentController = &getController('document');
// Get a value of the current system language code
$lang_code = Context::getLangType();
// Get module_info of all modules
$output = executeQueryArray('module.getModuleInfos');
if(count($output->data))
{
foreach($output->data as $module_info)
{
// Separate information about permission granted to the module, extra vars, skin vars, super-admin's authority
$module_srl = trim($module_info->module_srl);
// grant an authority
$grants = unserialize($module_info->grants);
if($grants) $oModuleController->insertModuleGrants($module_srl, $grants);
// Insert skin vars
$skin_vars = unserialize($module_info->skin_vars);
if($skin_vars) $oModuleController->insertModuleSkinVars($module_srl, $skin_vars);
// Insert super admin's ID
$admin_id = trim($module_info->admin_id);
if($admin_id && $admin_id != 'Array')
{
$admin_ids = explode(',',$admin_id);
if(count($admin_id))
{
foreach($admin_ids as $admin_id)
{
$oModuleController->insertAdminId($module_srl, $admin_id);
}
}
}
// Save extra configurations for each module(column data which doesn't exist in the defaut modules)
$extra_vars = unserialize($module_info->extra_vars);
$document_extra_keys = null;
if($extra_vars->extra_vars && count($extra_vars->extra_vars))
{
$document_extra_keys = $extra_vars->extra_vars;
unset($extra_vars->extra_vars);
}
if($extra_vars) $oModuleController->insertModuleExtraVars($module_srl, $extra_vars);
/**
* Move document extra vars(it should have conducted in the documents module however extra vars in modules table should be listed up in this module)
*/
// Insert extra vars if planet module is
if($module_info->module == 'planet')
{
if(!$document_extra_keys || !is_array($document_extra_keys)) $document_extra_keys = array();
$planet_extra_keys->name = 'postscript';
$planet_extra_keys->type = 'text';
$planet_extra_keys->is_required = 'N';
$planet_extra_keys->search = 'N';
$planet_extra_keys->default = '';
$planet_extra_keys->desc = '';
$document_extra_keys[20] = $planet_extra_keys;
}
// Register keys for document extra vars
if(count($document_extra_keys))
{
foreach($document_extra_keys as $var_idx => $val)
{
$oDocumentController->insertDocumentExtraKey($module_srl, $var_idx, $val->name, $val->type, $val->is_required, $val->search, $val->default, $val->desc, 'extra_vars'.$var_idx);
}
// 2009-04-14 Fixed a bug that only 100 extra vars are moved
$oDocumentModel = &getModel('document');
$total_count = $oDocumentModel->getDocumentCount($module_srl);
if($total_count > 0)
{
$per_page = 100;
$total_pages = (int) (($total_count - 1) / $per_page) + 1;
// Get extra vars if exist
$doc_args = null;
$doc_args->module_srl = $module_srl;
$doc_args->list_count = $per_page;
$doc_args->sort_index = 'list_order';
$doc_args->order_type = 'asc';
for($doc_args->page = 1; $doc_args->page <= $total_pages; $doc_args->page++)
{
$output = executeQueryArray('document.getDocumentList', $doc_args);
if($output->toBool() && $output->data && count($output->data))
{
foreach ($output->data as $document)
{
if(!$document) continue;
foreach ($document as $key => $var)
{
if (strpos($key, 'extra_vars') !== 0 || !trim($var) || $var == 'N;') continue;
$var_idx = str_replace('extra_vars','',$key);
$oDocumentController->insertDocumentExtraVar($module_srl, $document->document_srl, $var_idx, $var, 'extra_vars'.$var_idx, $lang_code);
}
}
}
} // for total_pages
} // if count
}
// Additional variables of the module, remove
$module_info->grant = null;
$module_info->extra_vars = null;
$module_info->skin_vars = null;
$module_info->admin_id = null;
executeQuery('module.updateModule', $module_info);
}
}
// Various column drop
$oDB->dropColumn('modules','grants');
$oDB->dropColumn('modules','admin_id');
$oDB->dropColumn('modules','skin_vars');
$oDB->dropColumn('modules','extra_vars');
}
// Rights of all modules/skins transferring the information into a table Update grants
if(!$oDB->isColumnExists('sites', 'default_language'))
{
$oDB->addColumn('sites','default_language','varchar',255,0,false);
}
// extra_vars * Remove Column
for($i=1;$i<=20;$i++)
{
if(!$oDB->isColumnExists("documents","extra_vars".$i)) continue;
$oDB->dropColumn('documents','extra_vars'.$i);
}
// Enter the main site information sites on the table
$args->site_srl = 0;
$output = $oDB->executeQuery('module.getSite', $args);
if(!$output->data)
{
// Basic mid, language Wanted
$mid_output = $oDB->executeQuery('module.getDefaultMidInfo', $args);
$db_info = Context::getDBInfo();
$domain = Context::getDefaultUrl();
$url_info = parse_url($domain);
$domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
$site_args->site_srl = 0;
$site_args->index_module_srl = $mid_output->data->module_srl;
$site_args->domain = $domain;
$site_args->default_language = $db_info->lang_type;
$output = executeQuery('module.insertSite', $site_args);
if(!$output->toBool()) return $output;
}
if($oDB->isIndexExists('sites','idx_domain'))
{
$oDB->dropIndex('sites','idx_domain');
}
if(!$oDB->isIndexExists('sites','unique_domain'))
{
$this->updateForUniqueSiteDomain();
$oDB->addIndex('sites','unique_domain',array('domain'),true);
}
if(!$oDB->isColumnExists("modules", "use_mobile"))
{
$oDB->addColumn('modules','use_mobile','char',1,'N');
}
if(!$oDB->isColumnExists("modules", "mlayout_srl"))
{
$oDB->addColumn('modules','mlayout_srl','number',11, 0);
}
if(!$oDB->isColumnExists("modules", "mcontent"))
{
$oDB->addColumn('modules','mcontent','bigtext');
}
if(!$oDB->isColumnExists("modules", "mskin"))
{
$oDB->addColumn('modules','mskin','varchar',250);
}
if(!$oDB->isColumnExists("modules", "is_skin_fix"))
{
$oDB->addColumn('modules', 'is_skin_fix', 'char', 1, 'N');
$output = executeQuery('module.updateSkinFixModules');
}
if(!$oDB->isColumnExists("module_config", "site_srl"))
{
$oDB->addColumn('module_config', 'site_srl', 'number', 11, 0, true);
}
FileHandler::makeDir('./files/ruleset');
$args->skin = '.';
$output = executeQueryArray('module.getModuleSkinDotList', $args);
if($output->data && count($output->data) > 0)
{
foreach($output->data as $item)
{
$skin_path = explode('.', $item->skin);
if(count($skin_path) != 2) continue;
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/modules/%s', $skin_path[0], $skin_path[1])))
{
unset($args);
$args->skin = $item->skin;
$args->new_skin = implode('|@|', $skin_path);
$output = executeQuery('module.updateSkinAll', $args);
}
}
}
// XE 1.7
if(!$oDB->isColumnExists("modules", "is_mskin_fix"))
{
$oDB->addColumn('modules', 'is_mskin_fix', 'char', 1, 'N');
$output = executeQuery('module.updateMobileSkinFixModules');
}
unset($args);
$args->site_srl = 0;
$output = executeQueryArray('module.getNotLinkedModuleBySiteSrl',$args);
if($output->toBool() && $output->data && count($output->data) > 0)
{
//create temp menu.
$args->title = 'Temporary menu';
$menuSrl = $args->menu_srl = getNextSequence();
$args->listorder = $args->menu_srl * -1;
$ioutput = executeQuery('menu.insertMenu', $args);
if(!$ioutput->toBool())
{
return $ioutput;
}
//getNotLinkedModuleBySiteSrl
$soutput = executeQueryArray('module.getNotLinkedModuleBySiteSrl', $args);
$uoutput = $this->updateLinkModule($soutput->data, $menuSrl);
}
$oModuleModel = getModel('module');
$moduleConfig = $oModuleModel->getModuleConfig('module');
if(!$moduleConfig->isUpdateFixedValue)
{
$output = executeQuery('module.updateSkinFixModules');
$output = executeQuery('module.updateMobileSkinFixModules');
$oModuleController = getController('module');
$moduleConfig->isUpdateFixedValue = TRUE;
$output = $oModuleController->updateModuleConfig('module', $moduleConfig);
}
// check lost module
if(!$moduleConfig->isUpdateLostModule)
{
$args = new stdClass();
$args->site_srl = 0;
$output = executeQueryArray('module.getMidList', $args);
if(!$output->toBool())
{
return $output;
}
if($output->data)
{
$oMenuAdminModel = getAdminModel('menu'); /* @var $oMenuAdminModel menuAdminModel */
foreach($output->data as $row)
{
$args = new stdClass();
$args->url = $row->mid;
$output2 = executeQuery('module.getMenuItem', $args);
if(!$output2->data->count)
{
$menuInfo = $oMenuAdminModel->getMenuByTitle('Temporary menu');
if(!$menuInfo)
{
$args = new stdClass();
$args->title = 'Temporary menu';
$menuSrl = $args->menu_srl = getNextSequence();
$args->listorder = $args->menu_srl * -1;
$ioutput = executeQuery('menu.insertMenu', $args);
if(!$ioutput->toBool())
{
return $ioutput;
}
}
else
{
$menuSrl = $menuInfo->menu_srl;
}
$uoutput = $this->updateLinkModule(array($row), $menuSrl);
if(!$uoutput->toBool())
{
return $uoutput;
}
}
}
}
$oModuleController = getController('module');
$moduleConfig->isUpdateLostModule = TRUE;
$output = $oModuleController->updateModuleConfig('module', $moduleConfig);
if(!$output->toBool())
{
return $output;
}
}
return new Object(0, 'success_updated');
}
/**
* insert menu when not linked module.
*
* @param array $moduleInfos
* @param int $menuSrl
*
* @return Object
*/
private function updateLinkModule($moduleInfos, $menuSrl)
{
if(!$moduleInfos || !is_array($moduleInfos) || count($moduleInfos) == 0 || $menuSrl == 0)
{
return new Object(-1, 'msg_invalid_request');
}
foreach($moduleInfos as $moduleInfo)
{
// search menu.
$args->url = $moduleInfo->mid;
$args->site_srl = $moduleInfo->site_srl;
$args->is_shortcut = 'N';
$output = executeQuery('menu.getMenuItemByUrl', $args);
if($output->toBool() && $output->data)
{
$moduleInfo->menu_srl = $output->data->menu_srl;
}
else
{
// create menu item.
$item_args->menu_srl = $menuSrl;
$item_args->url = $moduleInfo->mid;
$item_args->name = $moduleInfo->mid;
$item_args->menu_item_srl = getNextSequence();
$item_args->listorder = -1*$item_args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $item_args);
if(!$output->toBool())
{
return $output;
}
$moduleInfo->menu_srl = $menuSrl;
}
$output = executeQuery('module.updateModule', $moduleInfo);
if(!$output->toBool())
{
return $output;
}
}
$oMenuAdminController = getAdminController('menu');
$oMenuAdminController->makeXmlFile($menuSrl);
return new Object();
}
function updateForUniqueSiteDomain()
{
$output = executeQueryArray("module.getNonuniqueDomains");
if(!$output->data) return;
foreach($output->data as $data)
{
if($data->count == 1) continue;
$domain = $data->domain;
$args = null;
$args->domain = $domain;
$output2 = executeQueryArray("module.getSiteByDomain", $args);
$bFirst = true;
foreach($output2->data as $site)
{
if($bFirst)
{
$bFirst = false;
continue;
}
$domain .= "_";
$args = null;
$args->domain = $domain;
$args->site_srl = $site->site_srl;
$output3 = executeQuery("module.updateSite", $args);
}
}
}
/**
* @brief Re-generate the cache file
*/
function recompileCache()
{
$oModuleModel = &getModel('module');
$oModuleModel->getModuleList();
}
}
/* End of file module.class.php */
/* Location: ./modules/module/module.class.php */

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,11 @@
<?php
class moduleMobile extends moduleObject {
function dispModuleChangeLang() {
class moduleMobile extends moduleObject
{
function dispModuleChangeLang()
{
$this->setTemplatePath(sprintf("%stpl/",$this->module_path));
$this->setTemplateFile('lang.html');
}
}
?>
/* End of file module.mobile.php */
/* Location: ./modules/module/module.mobile.php */

File diff suppressed because it is too large Load diff

View file

@ -1,155 +1,176 @@
<?php
/**
* @class moduleView
* @author NHN (developers@xpressengine.com)
* @brief view class of the module module
**/
/**
* @class moduleView
* @author NHN (developers@xpressengine.com)
* @brief view class of the module module
*/
class moduleView extends module
{
/**
* @brief Initialization
*/
function init()
{
// Set the template path
$this->setTemplatePath($this->module_path.'tpl');
}
class moduleView extends module {
/**
* @brief Display skin information
*/
function dispModuleSkinInfo()
{
$selected_module = Context::get('selected_module');
$skin = Context::get('skin');
// Get modules/skin information
$module_path = sprintf("./modules/%s/", $selected_module);
if(!is_dir($module_path)) $this->stop("msg_invalid_request");
/**
* @brief Initialization
**/
function init() {
// Set the template path
$this->setTemplatePath($this->module_path.'tpl');
}
$skin_info_xml = sprintf("%sskins/%s/skin.xml", $module_path, $skin);
if(!file_exists($skin_info_xml)) $this->stop("msg_invalid_request");
/**
* @brief Display skin information
**/
function dispModuleSkinInfo() {
$selected_module = Context::get('selected_module');
$skin = Context::get('skin');
// Get modules/skin information
$module_path = sprintf("./modules/%s/", $selected_module);
if(!is_dir($module_path)) $this->stop("msg_invalid_request");
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($module_path, $skin);
Context::set('skin_info',$skin_info);
$skin_info_xml = sprintf("%sskins/%s/skin.xml", $module_path, $skin);
if(!file_exists($skin_info_xml)) $this->stop("msg_invalid_request");
$this->setLayoutFile("popup_layout");
$this->setTemplateFile("skin_info");
}
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($module_path, $skin);
Context::set('skin_info',$skin_info);
/**
* @brief Select a module
*/
function dispModuleSelectList()
{
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_permitted');
$this->setLayoutFile("popup_layout");
$this->setTemplateFile("skin_info");
}
$oModuleModel = &getModel('module');
// Extract the number of virtual sites
$output = executeQuery('module.getSiteCount');
$site_count = $output->data->count;
Context::set('site_count', $site_count);
// Variable setting for site keyword
$site_keyword = Context::get('site_keyword');
// If there is no site keyword, use as information of the current virtual site
$args = new stdClass();
$logged_info = Context::get('logged_info');
if($logged_info->is_admin == 'Y')
{
$query_id = 'module.getSiteModules';
$module_category_exists = false;
if(!$site_keyword)
{
$site_module_info = Context::get('site_module_info');
if($site_module_info && $logged_info->is_admin != 'Y')
{
$site_keyword = $site_module_info->domain;
$args->site_srl = (int)$site_module_info->site_srl;
Context::set('site_keyword', $site_keyword);
}
else
{
$query_id = 'module.getDefaultModules';
$args->site_srl = 0;
$module_category_exists = true;
}
// If site keyword exists, extract information from the sites
}
else
{
$args->site_keyword = $site_keyword;
}
}
else
{
$query_id = 'module.getSiteModules';
$site_module_info = Context::get('site_module_info');
$args->site_srl = (int)$site_module_info->site_srl;
}
//if(is_null($args->site_srl)) $query_id = 'module.getDefaultModules';
// Get a list of modules at the site
$output = executeQueryArray($query_id, $args);
$category_list = $mid_list = array();
if(count($output->data))
{
foreach($output->data as $key => $val)
{
$module = trim($val->module);
if(!$module) continue;
/**
* @brief Select a module
**/
function dispModuleSelectList() {
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_permitted');
$category = $val->category;
$obj = new stdClass();
$obj->module_srl = $val->module_srl;
$obj->browser_title = $val->browser_title;
$mid_list[$module]->list[$category][$val->mid] = $obj;
}
}
$oModuleModel = &getModel('module');
// Extract the number of virtual sites
$output = executeQuery('module.getSiteCount');
$site_count = $output->data->count;
Context::set('site_count', $site_count);
// Variable setting for site keyword
$site_keyword = Context::get('site_keyword');
// If there is no site keyword, use as information of the current virtual site
$args = null;
$logged_info = Context::get('logged_info');
if($logged_info->is_admin == 'Y') {
$query_id = 'module.getSiteModules';
$module_category_exists = false;
if(!$site_keyword) {
$site_module_info = Context::get('site_module_info');
if($site_module_info && $logged_info->is_admin != 'Y') {
$site_keyword = $site_module_info->domain;
$args->site_srl = (int)$site_module_info->site_srl;
Context::set('site_keyword', $site_keyword);
} else {
$query_id = 'module.getDefaultModules';
$args->site_srl = 0;
$module_category_exists = true;
}
// If site keyword exists, extract information from the sites
} else {
$args->site_keyword = $site_keyword;
}
} else {
$query_id = 'module.getSiteModules';
$site_module_info = Context::get('site_module_info');
$args->site_srl = (int)$site_module_info->site_srl;
}
//if(is_null($args->site_srl)) $query_id = 'module.getDefaultModules';
// Get a list of modules at the site
$output = executeQueryArray($query_id, $args);
$category_list = $mid_list = array();
if(count($output->data)) {
foreach($output->data as $key => $val) {
$module = trim($val->module);
if(!$module) continue;
$selected_module = Context::get('selected_module');
if(count($mid_list))
{
foreach($mid_list as $module => $val)
{
if(!$selected_module) $selected_module = $module;
$xml_info = $oModuleModel->getModuleInfoXml($module);
$mid_list[$module]->title = $xml_info->title;
}
}
// not show admin bar
Context::set('admin_bar', 'false');
Context::set('mid_list', $mid_list);
Context::set('selected_module', $selected_module);
Context::set('selected_mids', $mid_list[$selected_module]->list);
Context::set('module_category_exists', $module_category_exists);
$category = $val->category;
$obj = null;
$obj->module_srl = $val->module_srl;
$obj->browser_title = $val->browser_title;
$mid_list[$module]->list[$category][$val->mid] = $obj;
}
}
$security = new Security();
$security->encodeHTML('id', 'type');
$selected_module = Context::get('selected_module');
if(count($mid_list)) {
foreach($mid_list as $module => $val) {
if(!$selected_module) $selected_module = $module;
$xml_info = $oModuleModel->getModuleInfoXml($module);
$mid_list[$module]->title = $xml_info->title;
}
}
// Set the layout to be pop-up
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_selector');
}
Context::set('mid_list', $mid_list);
Context::set('selected_module', $selected_module);
Context::set('selected_mids', $mid_list[$selected_module]->list);
Context::set('module_category_exists', $module_category_exists);
// See the file box
function dispModuleFileBox()
{
$logged_info = Context::get('logged_info');
if($logged_info->is_admin !='Y' && !$logged_info->is_site_admin) return new Object(-1, 'msg_not_permitted');
$security = new Security();
$security->encodeHTML('id', 'type');
$input_name = Context::get('input');
// Set the layout to be pop-up
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('module_selector');
}
// See the file box
function dispModuleFileBox(){
$logged_info = Context::get('logged_info');
if($logged_info->is_admin !='Y' && !$logged_info->is_site_admin) return new Object(-1, 'msg_not_permitted');
if(!$input_name) return new Object(-1, 'msg_not_permitted');
$input_name = Context::get('input');
$addscript = sprintf('<script>//<![CDATA[
var selected_filebox_input_name = "%s";
//]]></script>',$input_name);
Context::addHtmlHeader($addscript);
if(!$input_name) return new Object(-1, 'msg_not_permitted');
$oModuleModel = &getModel('module');
$output = $oModuleModel->getModuleFileBoxList();
Context::set('filebox_list', $output->data);
$filter = Context::get('filter');
if($filter) Context::set('arrfilter',explode(',',$filter));
$addscript = sprintf('<script type="text/javascript">//<![CDATA[
var selected_filebox_input_name = "%s";
//]]></script>',$input_name);
Context::addHtmlHeader($addscript);
Context::set('page_navigation', $output->page_navigation);
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('filebox_list');
}
$oModuleModel = &getModel('module');
$output = $oModuleModel->getModuleFileBoxList();
Context::set('filebox_list', $output->data);
// Screen to add a file box
function dispModuleFileBoxAdd()
{
$logged_info = Context::get('logged_info');
if($logged_info->is_admin !='Y' && !$logged_info->is_site_admin) return new Object(-1, 'msg_not_permitted');
$filter = Context::get('filter');
if($filter) Context::set('arrfilter',explode(',',$filter));
$filter = Context::get('filter');
if($filter) Context::set('arrfilter',explode(',',$filter));
Context::set('page_navigation', $output->page_navigation);
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('filebox_list');
}
// Screen to add a file box
function dispModuleFileBoxAdd(){
$logged_info = Context::get('logged_info');
if($logged_info->is_admin !='Y' && !$logged_info->is_site_admin) return new Object(-1, 'msg_not_permitted');
$filter = Context::get('filter');
if($filter) Context::set('arrfilter',explode(',',$filter));
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('filebox_add');
}
}
?>
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('filebox_add');
}
}
/* End of file module.view.php */
/* Location: ./modules/module/module.view.php */

View file

@ -0,0 +1,11 @@
<query id="getAllMobileSkinSetModule" action="select">
<tables>
<table name="modules" />
</tables>
<columns>
<column name="module_srl" />
</columns>
<conditions>
<condition operation="notequal" column="mskin" default=" " />
</conditions>
</query>

View file

@ -10,6 +10,7 @@
<condition operation="equal" column="site_srl" var="site_srl" notnull="notnull" filter="number" />
<condition operation="in" column="lang_code" var="langCode" pipe="and" />
<condition operation="like" column="value" var="search_keyword" pipe="and" />
<condition operation="equal" column="name" var="name" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="list_order" order="order_type" />

View file

@ -0,0 +1,18 @@
<query id="getModuleInfoByMenuItemSrl" action="select">
<tables>
<table name="modules" />
</tables>
<conditions>
<query operation="equal" column="mid" notnull="notnull" alias="getMidByMenuSrl">
<tables>
<table name="menu_item" alias="menu_item"/>
</tables>
<columns>
<column name="url" />
</columns>
<conditions>
<condition operation="equal" column="menu_item.menu_item_srl" var="menu_item_srl" notnull="notnull" />
</conditions>
</query>
</conditions>
</query>

View file

@ -4,6 +4,7 @@
</tables>
<columns>
<column name="*" />
<column name="count(module_srl)" alias="instanceCount" />
</columns>
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" filter="number" />

View file

@ -0,0 +1,12 @@
<query id="getNotLinkedModuleBySiteSrl" action="select">
<tables>
<table name="modules" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="menu_srl" default="0" />
<condition operation="equal" column="site_srl" var="site_srl" default="0" notnull="notnull" pipe="and" />
</conditions>
</query>

View file

@ -17,7 +17,9 @@
<column name="modules.use_mobile" alias="use_mobile" />
<column name="modules.menu_srl" alias="menu_srl" />
<column name="modules.mid" alias="mid" />
<column name="modules.is_skin_fix" alias="is_skin_fix" />
<column name="modules.skin" alias="skin" />
<column name="modules.is_mskin_fix" alias="is_mskin_fix" />
<column name="modules.mskin" alias="mskin" />
<column name="modules.browser_title" alias="browser_title" />
<column name="modules.description" alias="description" />

View file

@ -8,7 +8,8 @@
<column name="module_category_srl" var="module_category_srl" default="0" />
<column name="mid" var="mid" notnull="notnull" minlength="1" maxlength="40" />
<column name="skin" var="skin" minlength="1" maxlength="250" />
<column name="is_skin_fix" var="is_skin_fix" default="Y" />
<column name="is_skin_fix" var="is_skin_fix" default="N" />
<column name="is_mskin_fix" var="is_mskin_fix" default="N" />
<column name="mskin" var="mskin" />
<column name="browser_title" var="browser_title" notnull="notnull" minlength="1" maxlength="250" />
<column name="layout_srl" var="layout_srl" />

View file

@ -0,0 +1,12 @@
<query id="updateMobileSkinFixModules" action="update">
<tables>
<table name="modules" />
</tables>
<columns>
<column name="is_mskin_fix" default="Y" />
</columns>
<conditions>
<condition operation="notnull" column="mskin" />
<condition operation="notequal" column="mskin" default=" " pipe="or" />
</conditions>
</query>

View file

@ -7,8 +7,9 @@
<column name="module_category_srl" var="module_category_srl" />
<column name="layout_srl" var="layout_srl" />
<column name="skin" var="skin" minlength="0" maxlength="250" />
<column name="is_skin_fix" var="is_skin_fix" default="Y" />
<column name="is_skin_fix" var="is_skin_fix" default="N" />
<column name="mskin" var="mskin" />
<column name="is_mskin_fix" var="is_mskin_fix" default="N" />
<column name="menu_srl" var="menu_srl" filter="number" />
<column name="mid" var="mid" notnull="notnull" minlength="1" maxlength="40" />
<column name="browser_title" var="browser_title" notnull="notnull" minlength="1" maxlength="250" />

View file

@ -3,9 +3,10 @@
<table name="modules" />
</tables>
<columns>
<column name="is_skin_fix" var="is_skin_fix" />
<column name="is_skin_fix" default="Y" />
</columns>
<conditions>
<condition operation="in" column="module_srl" var="module_srls" notnull="notnull" />
<condition operation="notnull" column="skin" />
<condition operation="notequal" column="skin" default=" " pipe="or" />
</conditions>
</query>

View file

@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<customrules>
<rule name="signed_number" type="regex" test="/-?[0-9]+/" />
</customrules>
<fields>
<field name="module_srls" required="true" />
<field name="module_category_srl" rule="number" />
<field name="layout_srl" rule="number" />
<field name="layout_srl" rule="signed_number" />
</fields>
</ruleset>

View file

@ -10,6 +10,7 @@
<column name="mid" type="varchar" size="40" notnull="notnull" />
<column name="is_skin_fix" type="char" size="1" notnull="notnull" default="Y" />
<column name="skin" type="varchar" size="250" />
<column name="is_mskin_fix" type="char" size="1" notnull="notnull" default="Y" />
<column name="mskin" type="varchar" size="250" />
<column name="browser_title" type="varchar" size="250" notnull="notnull" />
<column name="description" type="text" />

View file

@ -1,93 +1,118 @@
<!--%load_js_plugin("filebox")-->
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<div class="x_page-header">
<h1>{$lang->menu_gnb_sub['filebox']} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_filebox" target="_blank">{$lang->help}</a></h1>
</div>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/module/tpl/adminFileBox/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<h1 class="h1">{$lang->menu_gnb_sub['filebox']}</h1>
<div class="fileBox">
<form action="./" class="portlet form" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleFileBoxAdd" />
<input type="hidden" name="vid" value="{$vid}" />
<input type="hidden" name="filter" value="{$filter}" />
<input type="hidden" name="input" value="{$input}" />
<h2>{$lang->upload_file}</h2>
<div class="tgContent">
<ul id="fileUp">
<li>
<label for="attribute_name1" style="display: inline;">{$lang->attribute_name} </label> <input type="text" class="notmulti" name="attribute_name1" id="attribute_name1" />
<label for="attribute_value1" style="display: inline; font-weight:bold">{$lang->attribute_value} </label> <input type="text" class="notmulti" name="attribute_value1" id="attribute_value1" />
<button type="button" class="text __addBtn" onclick="addRow('fileUp');">{$lang->cmd_add}</button>
<button type="button" class="text __deleteBtn" onclick="clearRow(this);">{$lang->cmd_delete}</button>
</li>
<li>
<label for="file" style="display: inline">{$lang->file}</label> <input type="file" name="addfile" id="file"/>
</li>
</ul>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_save}" /></span>
</div>
</div>
</form>
<form action="./" class="form">
<ul>
<li loop="$filebox_list=>$key,$val">
<!--@foreach($val->attributes as $key => $value)-->
<p class="q">{$key} : {$value}</p>
<!--@end-->
<p class="a">
<!--@if($val->fileextension=='swf')-->
<object height="100" width="100" flashvars="" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" xmlns="http://www.w3.org/1999/xhtml">
<param value="{getUrl('')}{$val->filename}" name="movie" xmlns="http://www.w3.org/1999/xhtml" />
<param value="transparent" name="wmode" xmlns="http://www.w3.org/1999/xhtml" />
<param value="sameDomain" name="allowScriptAccess" xmlns="http://www.w3.org/1999/xhtml" />
<param value="high" name="quality" xmlns="http://www.w3.org/1999/xhtml" />
<embed height="100" width="100" wmode="transparent" flashvars="" autostart="false" src="{getUrl('')}{$val->filename}" xmlns="http://www.w3.org/1999/xhtml" />
</object>
<!--@elseif(in_array($val->fileextension,array('gif','png','jpg','jpeg')))-->
<img src="{getUrl('')}{$val->filename}" style="max-height:100px" />
<!--@end-->
</p>
<button type="button" class="side text" onclick="XE.filebox.deleteFile('{$val->module_filebox_srl}');" >{$lang->cmd_delete}</button>
</li>
</ul>
</form>
<section class="section">
<h1>{$lang->upload_file}</h1>
<form action="./" class="x_form-horizontal" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleFileBoxAdd" />
<input type="hidden" name="vid" value="{$vid}" />
<input type="hidden" name="filter" value="{$filter}" />
<input type="hidden" name="input" value="{$input}" />
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/adminFileBox/1" />
<div class="x_control-group __attribute" data-count="1">
<label for="attribute_name1" class="x_control-label __attribute_name_label">{$lang->attribute_name}</label>
<div class="x_controls">
<input type="text" name="attribute_name[]" id="attribute_name1" class="__attribute_name" style="margin-right:20px" />
<label for="attribute_value1" class="x_inline __attribute_value_label">{$lang->attribute_value}</label>
<input type="text" name="attribute_value[]" id="attribute_value1" class="__attribute_value" style="margin-right:20px" />
<span class="x_btn-group">
<button type="button" class="x_btn __addBtn" onclick="addRow('fileUp');">{$lang->cmd_add}</button>
<button type="button" class="x_btn __deleteBtn" onclick="clearRow(this);">{$lang->cmd_delete}</button>
</span>
</div>
</div>
<form action="./" class="pagination" method="post">
<input type="hidden" name="error_return_url" value="" />
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<input cond="$order_target" type="hidden" name="order_target" value="{$order_target}" />
<input cond="$order_type" type="hidden" name="order_type" value="{$order_type}" />
<input cond="$category_srl" type="hidden" name="category_srl" value="{$category_srl}" />
<input cond="$childrenList" type="hidden" name="childrenList" value="{$childrenList}" />
<input cond="$search_keyword" type="hidden" name="search_keyword" value="{$search_keyword}" />
<div class="x_control-group">
<label for="file" class="x_control-label">{$lang->file}</label>
<div class="x_controls">
<input type="file" name="addfile" id="file" />
</div>
</div>
<div class="btnArea">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
</div>
</form>
</section>
<a href="{getUrl('page', '')}" class="direction">&laquo; {$lang->first_page}</a>
<section class="section">
<h1>{$lang->filebox_list}</h1>
<table class="x_table x_table-striped x_table-hover">
<thead>
<tr>
<th scope="col">{$lang->file}</th>
<th scope="col">{$lang->attribute_name}:{$lang->attribute_value}</th>
<th scope="col">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<tr loop="$filebox_list => $key, $val">
<td>
<!--@if($val->fileextension=='swf')-->
<object height="100" width="100" flashvars="" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" xmlns="http://www.w3.org/1999/xhtml">
<param value="{getUrl('')}{$val->filename}" name="movie" xmlns="http://www.w3.org/1999/xhtml" />
<param value="transparent" name="wmode" xmlns="http://www.w3.org/1999/xhtml" />
<param value="sameDomain" name="allowScriptAccess" xmlns="http://www.w3.org/1999/xhtml" />
<param value="high" name="quality" xmlns="http://www.w3.org/1999/xhtml" />
<embed height="100" width="100" wmode="transparent" flashvars="" autostart="false" src="{getUrl('')}{$val->filename}" xmlns="http://www.w3.org/1999/xhtml" />
</object>
<!--@elseif(in_array($val->fileextension,array('gif','png','jpg','jpeg')))-->
<img src="{getUrl('')}{$val->filename}" style="max-height:60px" />
<!--@end-->
</td>
<td>
<p loop="$val->attributes => $name, $value">
{htmlspecialchars($name)}: {$value}
</p>
</td>
<td>
<button type="button" class="x_btn x_btn-link" style="white-space:nowrap" onclick="XE.filebox.deleteFile('{$val->module_filebox_srl}');">{$lang->cmd_delete}</button>
</td>
</tr>
</tbody>
</table>
<form cond="$page_navigation" action="./" class="x_pagination x_pagination-centered" no-error-return-url="true">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<block cond="$page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page && $page_navigation->page_count != $page_navigation->total_page">
<ul>
<li class="x_disabled"|cond="!$page || $page == 1"><a href="{getUrl('page', '')}">&laquo; {$lang->first_page}</a></li>
<block cond="$page_navigation->first_page != 1 && $page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page - 1 && $page_navigation->page_count != $page_navigation->total_page">
{@$isGoTo = true}
<a href="{getUrl('page', '')}">1</a>
<a href="#goTo" class="tgAnchor" title="{$lang->cmd_go_to_page}">...</a>
<li>
<a href="#goTo" data-toggle title="{$lang->cmd_go_to_page}">&hellip;</a>
<span cond="$isGoTo" id="goTo" class="x_input-append">
<input type="number" min="1" max="{$page_navigation->last_page}" required name="page" title="{$lang->cmd_go_to_page}" />
<button type="submit" class="x_add-on">Go</button>
</span>
</li>
</block>
<!--@while($page_no = $page_navigation->getNextPage())-->
{@$last_page = $page_no}
<strong cond="$page_no == $page">{$page_no}</strong>
<a cond="$page_no != $page" href="{getUrl('page', $page_no)}">{$page_no}</a>
<li class="x_active"|cond="$page_no == $page"><a href="{getUrl('page', $page_no)}">{$page_no}</a></li>
<!--@end-->
<block cond="$last_page != $page_navigation->last_page">
<block cond="$last_page != $page_navigation->last_page && $last_page + 1 != $page_navigation->last_page">
{@$isGoTo = true}
<a href="#goTo" class="tgAnchor" title="{$lang->cmd_go_to_page}">...</a>
<a href="{getUrl('page', $page_navigation->last_page)}">{$page_navigation->last_page}</a>
<li>
<a href="#goTo" data-toggle title="{$lang->cmd_go_to_page}">&hellip;</a>
<span cond="$isGoTo" id="goTo" class="x_input-append">
<input type="number" min="1" max="{$page_navigation->last_page}" required name="page" title="{$lang->cmd_go_to_page}" />
<button type="submit" class="x_add-on">Go</button>
</span>
</li>
</block>
<a href="{getUrl('page', $page_navigation->last_page)}" class="direction">{$lang->last_page} &raquo;</a>
<span cond="$isGoTo" id="goTo" class="tgContent">
<input name="page" title="{$lang->cmd_go_to_page}" />
<button type="submit">Go</button>
</span>
</form>
<li class="x_disabled"|cond="$page == $page_navigation->last_page"><a href="{getUrl('page', $page_navigation->last_page)}" title="{$page_navigation->last_page}">{$lang->last_page} &raquo;</a></li>
</ul>
</form>
</section>

View file

@ -1,8 +1,14 @@
<!--%import("filter/update_category.xml")-->
<!--#include("./header.html")-->
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
{@
$validator_ids = array(
'modules/module/tpl/category_list/1' => 1,
'modules/module/tpl/category_list/2' => 1,
'modules/module/tpl/category_update_form/1' => 1
);
}
<div cond="$XE_VALIDATOR_MESSAGE && isset($validator_ids[$XE_VALIDATOR_ID])" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<!-- 카테고리의 위/아래, 삭제와 관련된 form -->
@ -10,46 +16,45 @@
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleAdminDeleteCategory" />
<input type="hidden" name="module_category_srl" value="" />
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/category_list/1" />
</form>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col" class="title">{$lang->category_title}</th>
<th scope="col" class="nowr">{$lang->regdate}</th>
<th scope="col" class="nowr">&nbsp;</th>
</tr>
</thead>
<tbody>
<!--@if(!count($category_list))-->
<tr>
<td colspan="3">{$lang->msg_category_is_null}</td>
</tr>
<!--@end-->
<!--@foreach($category_list as $key => $val)-->
<tr>
<td class="title">{$val->title}</td>
<td class="nowr">{zdate($val->regdate,"Y-m-d")}</td>
<td class="nowr">
<a href="{getUrl('module_category_srl',$val->module_category_srl)}">{$lang->cmd_modify}...</a>
<button type="button" class="text" onclick="doUpdateCategory('{$val->module_category_srl}','{$lang->confirm_delete}');return false;">{$lang->cmd_delete}</button>
</td>
</tr>
<!--@end-->
</tbody>
</table>
</div>
<table class="x_table x_table-striped x_table-hover">
<thead>
<tr>
<th>{$lang->category_title}</th>
<th>{$lang->regdate}</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<!--@if(!count($category_list))-->
<tr>
<td colspan="3">{$lang->msg_category_is_null}</td>
</tr>
<!--@end-->
<!--@foreach($category_list as $key => $val)-->
<tr>
<td>{$val->title}</td>
<td>{zdate($val->regdate,"Y-m-d")}</td>
<td>
<a class="x_btn x_btn-link" href="{getUrl('module_category_srl',$val->module_category_srl)}">{$lang->cmd_modify}</a>
<i>|</i>
<button type="button" class="x_btn x_btn-link" onclick="doUpdateCategory('{$val->module_category_srl}','{$lang->confirm_delete}');return false;">{$lang->cmd_delete}</button>
</td>
</tr>
<!--@end-->
</tbody>
</table>
<!-- 카테고리 추가 -->
<form ruleset="insertCategory" action="./" method="post" class="form">
<form ruleset="insertCategory" action="./" method="post" class="x_clearfix">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleAdminInsertCategory" />
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="module_category_srl" value="" />
<div class="btnArea">
<label for="category_title">{$lang->category_title}</label>
<input type="text" name="title" id="category_title" />
<span class="btn"><input type="submit" value="{$lang->cmd_registration}" /></span>
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/category_list/2" />
<div class="x_pull-right x_input-append">
<input type="text" name="title" title="{$lang->category_title}" placeholder="{$lang->category_title}" required />
<input type="submit" class="x_btn x_btn-primary" value="{$lang->cmd_registration}">
</div>
</form>

View file

@ -1,22 +1,22 @@
<!--#include("./header.html")-->
<!-- 카테고리 수정 -->
<!--@if($selected_category)-->
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/module/tpl/category_update_form/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="updateCategory" action="./" method="post" enctype="multipart/form-data" class="form">
<section class="section">
<form ruleset="updateCategory" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleAdminUpdateCategory" />
<input type="hidden" name="module_category_srl" value="{$selected_category->module_category_srl}" />
<input type="hidden" name="mode" value="update" />
<ul>
<li>
<p class="q"><label for="category_title">{$lang->category_title}</label></p>
<p class="a"><input type="text" name="title" id="category_title" value="{$selected_category->title}" /></p>
</li>
</ul>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_registration}" /></span>
</div>
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/category_update_form/1" />
<label for="category_title" style="display:inline-block;padding:4px 0 0 0"><strong>{$lang->category_title}</strong>: </label>
<span class="x_input-append">
<input type="text" name="title" id="category_title" value="{$selected_category->title}" />
<input type="submit" class="x_btn x_btn-primary" value="{$lang->cmd_registration}">
</span>
</form>
</section>
<!--@end-->

View file

@ -1,77 +1,78 @@
<load target="js/module_admin.js" usecdn="true" />
<h1 class="h1">{$lang->module_copy}</h1>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/module/tpl/copy_module/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<section class="section">
<form rule="copyModule" action="./" method="post">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleAdminCopyModule" />
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="row">{$lang->module}</th>
<td >{$module_info->module}</td>
</tr>
<tr>
<th scope="row">{$lang->mid}</th>
<td>{$module_info->mid}</td>
</tr>
<tr>
<th scope="row">{$lang->browser_title}</th>
<td>{$module_info->browser_title}</td>
</tr>
</table>
</div>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="col"><div>{$lang->mid}<div></th>
<th scope="col"><div>{$lang->browser_title}<div></th>
</tr>
<tr>
<td><input type="text" name="mid_1" /></td>
<td><input type="text" name="browser_title_1" /></td>
</tr>
<tr>
<td><input type="text" name="mid_2" /></td>
<td><input type="text" name="browser_title_2" /></td>
</tr>
<tr>
<td><input type="text" name="mid_3" /></td>
<td><input type="text" name="browser_title_3" /></td>
</tr>
<tr>
<td><input type="text" name="mid_4" /></td>
<td><input type="text" name="browser_title_4" /></td>
</tr>
<tr>
<td><input type="text" name="mid_5" /></td>
<td><input type="text" name="browser_title_5" /></td>
</tr>
<tr>
<td><input type="text" name="mid_6" /></td>
<td><input type="text" name="browser_title_6" /></td>
</tr>
<tr>
<td><input type="text" name="mid_7" /></td>
<td><input type="text" name="browser_title_7" /></td>
</tr>
<tr>
<td><input type="text" name="mid_8" /></td>
<td><input type="text" name="browser_title_8" /></td>
</tr>
<tr>
<td><input type="text" name="mid_9" /></td>
<td><input type="text" name="browser_title_9" /></td>
</tr>
<tr>
<td><input type="text" name="mid_10" /></td>
<td><input type="text" name="browser_title_10" /></td>
</tr>
</table>
</div>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_save}" /></span>
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/copy_module/1" />
<h2>{$lang->module_copy}</h2>
<table class="x_table x_table-striped x_table-hover">
<tr>
<th scope="row">{$lang->module}</th>
<td >{$module_info->module}</td>
</tr>
<tr>
<th scope="row">{$lang->mid}</th>
<td>{$module_info->mid}</td>
</tr>
<tr>
<th scope="row">{$lang->browser_title}</th>
<td>{$module_info->browser_title}</td>
</tr>
</table>
<table class="x_table x_table-striped x_table-hover">
<tr>
<th scope="col"><div>{$lang->mid}<div></th>
<th scope="col"><div>{$lang->browser_title}<div></th>
</tr>
<tr>
<td><input type="text" name="mid_1" /></td>
<td><input type="text" name="browser_title_1" /></td>
</tr>
<tr>
<td><input type="text" name="mid_2" /></td>
<td><input type="text" name="browser_title_2" /></td>
</tr>
<tr>
<td><input type="text" name="mid_3" /></td>
<td><input type="text" name="browser_title_3" /></td>
</tr>
<tr>
<td><input type="text" name="mid_4" /></td>
<td><input type="text" name="browser_title_4" /></td>
</tr>
<tr>
<td><input type="text" name="mid_5" /></td>
<td><input type="text" name="browser_title_5" /></td>
</tr>
<tr>
<td><input type="text" name="mid_6" /></td>
<td><input type="text" name="browser_title_6" /></td>
</tr>
<tr>
<td><input type="text" name="mid_7" /></td>
<td><input type="text" name="browser_title_7" /></td>
</tr>
<tr>
<td><input type="text" name="mid_8" /></td>
<td><input type="text" name="browser_title_8" /></td>
</tr>
<tr>
<td><input type="text" name="mid_9" /></td>
<td><input type="text" name="browser_title_9" /></td>
</tr>
<tr>
<td><input type="text" name="mid_10" /></td>
<td><input type="text" name="browser_title_10" /></td>
</tr>
</table>
<div class="x_clearfix">
<div class="x_btn-group x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
</div>
</div>
</form>
</section>

View file

@ -6,27 +6,25 @@
<input type="hidden" name="vid" value="{$vid}" />
<input type="hidden" name="filter" value="{$filter}" />
<input type="hidden" name="input" value="{$input}" />
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tbody>
<tr>
<th>{$lang->description}</th>
<td><input type="text" name="comment" /></td>
</tr>
<tr>
<th>{$lang->file}</th>
<td><input type="file" name="addfile" />
<p>
<!--@if($arrfilter && is_array($arrfilter))-->
{@sprintf($lang->about_file_extension,join(", ",$arrfilter ))}
<!--@end-->
</p>
</td>
</tr>
</tbody>
</table>
</div>
<table class="x_table x_table-striped x_table-hover">
<tbody>
<tr>
<th>{$lang->description}</th>
<td><input type="text" name="comment" /></td>
</tr>
<tr>
<th>{$lang->file}</th>
<td><input type="file" name="addfile" />
<p>
<!--@if($arrfilter && is_array($arrfilter))-->
{@sprintf($lang->about_file_extension,join(", ",$arrfilter ))}
<!--@end-->
</p>
</td>
</tr>
</tbody>
</table>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_submit}" /></span>
<input class="btn" type="submit" value="{$lang->cmd_submit}" />
</div>
</form>

View file

@ -1,48 +1,46 @@
<!--%load_js_plugin("filebox")-->
<h1 class="h1">{$lang->filebox}</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th>{$lang->file}</th>
<th>{$lang->description}</th>
<th>{$lang->regdate}</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<table class="x_table x_table-striped x_table-hover">
<thead>
<tr>
<th>{$lang->file}</th>
<th>{$lang->description}</th>
<th>{$lang->regdate}</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<!--@foreach($filebox_list as $key=>$val)-->
<tr>
<td>
<div id="filebox_preview_{$val->module_filebox_srl}">
<!--@if($val->fileextension=='swf')-->
<object height="100" width="100" flashvars="" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" xmlns="http://www.w3.org/1999/xhtml">
<param value="{getUrl('')}{$val->filename}" name="movie" xmlns="http://www.w3.org/1999/xhtml" />
<param value="transparent" name="wmode" xmlns="http://www.w3.org/1999/xhtml" />
<param value="sameDomain" name="allowScriptAccess" xmlns="http://www.w3.org/1999/xhtml" />
<param value="high" name="quality" xmlns="http://www.w3.org/1999/xhtml" />
<embed height="100" width="100" wmode="transparent" flashvars="" autostart="false" src="{getUrl('')}{$val->filename}" xmlns="http://www.w3.org/1999/xhtml" />
</object>
<!--@elseif(in_array($val->fileextension,array('gif','png','jpg','jpeg')))-->
<img src="{getUrl('')}{$val->filename}" width="100" height="100" />
<!--@end-->
</div>
</td>
<td >{$val->comment}&nbsp;</td>
<td>{zdate($val->regdate,'Y-m-d H:i')}</td>
<td>
<!--@if(!$filter || (is_array($arrfilter) && in_array($val->fileextension,$arrfilter)))-->
<button type="button" onclick="XE.filebox.selectFile('{getUrl('')}{$val->filename}','{$val->module_filebox_srl}');">{$lang->cmd_select}</button>
<tr>
<td>
<div id="filebox_preview_{$val->module_filebox_srl}">
<!--@if($val->fileextension=='swf')-->
<object height="100" width="100" flashvars="" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" xmlns="http://www.w3.org/1999/xhtml">
<param value="{getUrl('')}{$val->filename}" name="movie" xmlns="http://www.w3.org/1999/xhtml" />
<param value="transparent" name="wmode" xmlns="http://www.w3.org/1999/xhtml" />
<param value="sameDomain" name="allowScriptAccess" xmlns="http://www.w3.org/1999/xhtml" />
<param value="high" name="quality" xmlns="http://www.w3.org/1999/xhtml" />
<embed height="100" width="100" wmode="transparent" flashvars="" autostart="false" src="{getUrl('')}{$val->filename}" xmlns="http://www.w3.org/1999/xhtml" />
</object>
<!--@elseif(in_array($val->fileextension,array('gif','png','jpg','jpeg')))-->
<img src="{getUrl('')}{$val->filename}" width="100" height="100" />
<!--@end-->
<button type="button" onclick="XE.filebox.deleteFile('{$val->module_filebox_srl}');">{$lang->cmd_delete}</button>
</td>
</tr>
</div>
</td>
<td >{$val->comment}&nbsp;</td>
<td>{zdate($val->regdate,'Y-m-d H:i')}</td>
<td>
<!--@if(!$filter || (is_array($arrfilter) && in_array($val->fileextension,$arrfilter)))-->
<button type="button" onclick="XE.filebox.selectFile('{getUrl('')}{$val->filename}','{$val->module_filebox_srl}');">{$lang->cmd_select}</button>
<!--@end-->
<button type="button" onclick="XE.filebox.deleteFile('{$val->module_filebox_srl}');">{$lang->cmd_delete}</button>
</td>
</tr>
<!--@end-->
</tbody>
</table>
</div>
</tbody>
</table>
<!-- 페이지 네비게이션 -->
<div class="pagination">
<a href="{getUrl('page','','module_srl','')}" class="direction">&lsaquo; {$lang->first_page}</a>
@ -56,5 +54,5 @@
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="direction">{$lang->last_page} &rsaquo;</a>
</div>
<div class="btnArea">
<span class="btn"><a href="{getUrl('','module','module','act','dispModuleFileBoxAdd','filter',$filter,'input',$input)}">{$lang->cmd_registration}</a></span>
<a class="btn" href="{getUrl('','module','module','act','dispModuleFileBoxAdd','filter',$filter,'input',$input)}">{$lang->cmd_registration}</a>
</div>

View file

@ -1,38 +1,80 @@
<p cond="!$filebox_list">Not a registered file.</p>
<ul cond="$filebox_list" class="lined">
<li loop="$filebox_list=>$key,$fileInfo">
<!--@if(!$allow_multiple)--><a href="#" class="select"><!--@end--><img class="filebox_item" src="{$fileInfo->filename}" /><!--@if(!$allow_multiple)--></a><!--@end-->
<!--@if($allow_multiple)--><input class="select_checkbox" type="checkbox" name="{$fileInfo->filename}" id="{$fileInfo->filename}"><!--@end-->
<!--@foreach($fileInfo->attributes as $key => $value)-->
<p class="q">{$key} : {$value}</p>
<!--@end-->
</li>
<!--@if($allow_multiple)--><li><a href="#" class="select">Select</a></li><!--@end-->
</ul>
<div class="pagination" cond="$page_navigation">
<a href="#" class="direction" page="1">&laquo; FIRST</a>
<block cond="$page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page && $page_navigation->page_count != $page_navigation->total_page">
{@$isGoTo = true}
<a href="#" page="1">1</a>
<a href="#FileBoxGoTo" class="tgAnchor" title="{$lang->cmd_go_to_page}">...</a>
</block>
<block loop="$page_no = $page_navigation->getNextPage()">
{@$last_page = $page_no}
<strong cond="$page_no == $page">{$page_no}</strong>
<a cond="$page_no != $page" href="#" page="{$page_no}">{$page_no}</a>
</block>
<block cond="$last_page != $page_navigation->last_page">
{@$isGoTo = true}
<a href="#FileBoxGoTo" class="tgAnchor" title="{$lang->cmd_go_to_page}">...</a>
<a href="#" page="{$page_navigation->last_page}">{$page_navigation->last_page}</a>
</block>
<a href="#" page="{$page_navigation->last_page}" class="direction">LAST &raquo;</a>
<span cond="$isGoTo" id="FileBoxGoTo" class="tgContent">
<input name="page" title="{$lang->cmd_go_to_page}" />
<button>Go</button>
<table cond="$filebox_list" class="x_table x_table-striped x_table-hover">
<col cond="$allow_multiple" style="width:25px" />
<col style="width:250px" />
<col />
<col cond="!$allow_multiple" style="width:50px; white-space:nowrap" />
<tbody>
<tr loop="$filebox_list => $key, $val">
<td>
<!--@if($val->fileextension=='swf')-->
<object height="100" width="100" flashvars="" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" xmlns="http://www.w3.org/1999/xhtml">
<param value="{getUrl('')}{$val->filename}" name="movie" xmlns="http://www.w3.org/1999/xhtml" />
<param value="transparent" name="wmode" xmlns="http://www.w3.org/1999/xhtml" />
<param value="sameDomain" name="allowScriptAccess" xmlns="http://www.w3.org/1999/xhtml" />
<param value="high" name="quality" xmlns="http://www.w3.org/1999/xhtml" />
<embed height="100" width="100" wmode="transparent" flashvars="" autostart="false" src="{getUrl('')}{$val->filename}" xmlns="http://www.w3.org/1999/xhtml" />
</object>
<!--@elseif(in_array($val->fileextension,array('gif','png','jpg','jpeg')))-->
<img src="{getUrl('')}{$val->filename}" class="filebox_item" />
<!--@end-->
</td>
<td>
<p loop="$val->attributes => $name, $value">
{htmlspecialchars($name)} : {$value}
</p>
</td>
<td cond="!$allow_multiple">
<button type="button" class="x_btn select" style="white-space:nowrap">{$lang->cmd_select}</button>
</td>
</tr>
</tbody>
</table>
<div cond="$allow_multiple">
<span class="x_pull-right x_btn-group">
<button class="x_btn select">{$lang->cmd_select}</button>
</span>
</div>
<script type="text/javascript">
jQuery('.pagination').xePagination();
<div cond="$page_navigation" class="x_pagination x_pagination-centered">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<ul>
<li class="x_disabled"|cond="!$page || $page == 1"><a href="#" page="1">&laquo; {$lang->first_page}</a></li>
<block cond="$page_navigation->first_page != 1 && $page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page - 1 && $page_navigation->page_count != $page_navigation->total_page">
{@$isGoTo = true}
<li>
<a href="#goToFileBox" data-toggle title="{$lang->cmd_go_to_page}">&hellip;</a>
<span cond="$isGoTo" id="goToFileBox" class="x_input-append">
<input type="number" min="1" max="{$page_navigation->last_page}" required name="page" title="{$lang->cmd_go_to_page}" />
<button type="submit" class="x_add-on">Go</button>
</span>
</li>
</block>
<!--@while($page_no = $page_navigation->getNextPage())-->
{@$last_page = $page_no}
<li class="x_active"|cond="$page_no == $page"><a href="#" page="{$page_no}">{$page_no}</a></li>
<!--@end-->
<block cond="$last_page != $page_navigation->last_page && $last_page + 1 != $page_navigation->last_page">
{@$isGoTo = true}
<li>
<a href="#goToFileBox" data-toggle title="{$lang->cmd_go_to_page}">&hellip;</a>
<span cond="$isGoTo" id="goToFileBox" class="x_input-append">
<input type="number" min="1" max="{$page_navigation->last_page}" required name="page" title="{$lang->cmd_go_to_page}" />
<button type="submit" class="x_add-on">Go</button>
</span>
</li>
</block>
<li class="x_disabled"|cond="$page == $page_navigation->last_page"><a href="#" page="{$page_navigation->last_page}" title="{$page_navigation->last_page}">{$lang->last_page} &raquo;</a></li>
</ul>
</div>
<script>
jQuery('a.tgAnchor').xeContentToggler();
</script>

View file

@ -1,4 +1,4 @@
<filter name="insert_grant" module="module" act="procModuleAdminInsertGrant" confirm_msg_code="confirm_submit">
<filter name="insert_grant" module="module" act="procModuleAdminInsertGrant">
<form>
<node target="module_srl" required="true" filter="number" />
</form>

View file

@ -1,14 +1,16 @@
<load target="js/module_admin.js" usecdn="true" />
<script type="text/javascript">
<div class="x_page-header">
<h1>{$lang->installed_modules} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_advanced_installed_module" target="_blank">{$lang->help}</a></h1>
</div>
<script>
xe.lang.favorite_on = '{$lang->favorite}({$lang->on})';
xe.lang.favorite_off = '{$lang->favorite}({$lang->off})';
</script>
<h1 class="h1">{$lang->installed_modules}</h1>
<div class="cnb">
<a href="{getUrl('', 'module', 'admin', 'act', 'dispModuleAdminContent')}" class="active"|cond="$act=='dispModuleAdminContent'">{$lang->installed_modules}</a>
|
<a href="{getUrl('', 'module', 'admin', 'act', 'dispModuleAdminCategory')}" class="active"|cond="$act=='dispModuleAdminCategory'">{$lang->module_category}</a>
</div>
<ul class="x_nav x_nav-tabs">
<li class="x_active"|cond="$act=='dispModuleAdminContent'">
<a href="{getUrl('', 'module', 'admin', 'act', 'dispModuleAdminContent')}">{$lang->installed_modules}</a>
</li>
<li class="x_active"|cond="$act=='dispModuleAdminCategory'">
<a href="{getUrl('', 'module', 'admin', 'act', 'dispModuleAdminCategory')}">{$lang->module_category}</a>
</li>
</ul>

View file

@ -0,0 +1,51 @@
<!--%load_js_plugin("filebox")-->
<section class="x_modal" id="modalFilebox" cond="$use_filebox">
<div class="x_modal-header">
<h1>File Box</h1>
</div>
<div class="x_modal-body">
<h2>{$lang->upload_file}</h2>
<form id="new_filebox_upload" action="./" class="x_form-horizontal" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleFileBoxAdd" />
<input type="hidden" name="vid" value="{$vid}" />
<input type="hidden" name="filter" value="{$filter}" />
<input type="hidden" name="input" value="{$input}" />
<input type="hidden" name="ajax" value="true" />
<div class="x_control-group __attribute" data-count="1">
<label for="attribute_name1" class="x_control-label __attribute_name_label">{$lang->attribute_name}</label>
<div class="x_controls">
<input type="text" name="attribute_name[]" id="attribute_name1" class="__attribute_name" />
<label for="attribute_value1" class="x_inline __attribute_value_label">{$lang->attribute_value}
<input type="text" name="attribute_value[]" id="attribute_value1" class="__attribute_value" />
</label>
<span class="x_btn-group">
<button type="button" class="x_btn __addBtn" onclick="addRow('fileUp');">{$lang->cmd_add}</button>
<button type="button" class="x_btn __deleteBtn" onclick="clearRow(this);">{$lang->cmd_delete}</button>
</span>
</div>
</div>
<div class="x_control-group">
<label for="file" class="x_control-label">{$lang->file}</label>
<div class="x_controls">
<input type="file" name="addfile" id="file" />
</div>
</div>
<div class="btnArea">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
</div>
</form>
<h2>{$lang->cmd_list}</h2>
<div class="filebox_list"></div>
<style scoped>
.filebox_item{max-height:80px;max-width:200px}
</style>
</div>
<div class="x_modal-footer">
<button type="button" class="x_btn x_pull-left" data-hide="#modalFileBox">{$lang->cmd_close}</button>
</div>
</section>
<script>
xe.lang.cmd_delete = '{$lang->cmd_delete}';
</script>

View file

@ -1,33 +1,39 @@
<load target="js/manage_selected_module.js" usecdn="true" />
<div id="manageSelectedModule" class="modal">
<div class="fg">
<h2 class="h2">{$lang->do_selected}</h2>
<div class="table even">
<table width="100%" cellspacing="0" border="1">
<thead>
<tr>
<th scope="col">{$lang->mid}</th>
<th scope="col">{$lang->browser_title}</th>
</tr>
</thead>
<tbody id="manageSelectedModuleBody">
</tbody>
</table>
</div>
<div class="cnb">
<a href="#manageSelectedModuleSetup" class="tgAnchor">{$lang->bundle_setup}</a>
|
<a href="#manageSelectedModuleAddition" class="tgAnchor">{$lang->bundle_addition_setup}</a>
|
<a href="#manageSelectedModuleGrant" class="tgAnchor">{$lang->bundle_grant_setup}</a>
</div>
<include target="include.module_setup.html" />
<include target="include.module_addition_setup.html" />
<include target="include.module_grant_setup.html" />
<include target="include.multilang.textarea.html" />
<section id="manageSelectedModule" class="x_modal x">
<div class="x_modal-header">
<h1>{$lang->do_selected}</h1>
</div>
</div>
<div class="x_modal-body">
<table class="x_table x_table-striped x_table-hover" style="margin-bottom:20px">
<thead>
<tr>
<th scope="col">{$lang->mid}</th>
<th scope="col">{$lang->browser_title}</th>
</tr>
</thead>
<tbody id="manageSelectedModuleBody">
</tbody>
</table>
<div class="x_tabbable">
<ul class="x_nav x_nav-tabs">
<li class="x_active" cond="$tabChoice['tab1']"><a href="#tab1">{$lang->bundle_setup}</a></li>
<li cond="$tabChoice['tab2']"><a href="#tab2">{$lang->bundle_addition_setup}</a></li>
<li cond="$tabChoice['tab3']"><a href="#tab3">{$lang->bundle_grant_setup}</a></li>
</ul>
<div class="x_tab-content">
<div class="x_tab-pane x_active" id="tab1" cond="$tabChoice['tab1']">
<include target="include.module_setup.html" />
</div>
<div class="x_tab-pane" id="tab2" cond="$tabChoice['tab2']">
<include target="include.module_addition_setup.html" />
</div>
<div class="x_tab-pane" id="tab3" cond="$tabChoice['tab3']">
<include target="include.module_grant_setup.html" />
</div>
</div>
</div>
</div>
<div class="x_modal-footer">
<button type="button" class="x_btn x_pull-left" data-hide="#manageSelectedModule">{$lang->cmd_close}</button>
</div>
</section>

View file

@ -1,3 +1,3 @@
<div id="manageSelectedModuleAddition" class="tgContent">
<div id="manageSelectedModuleAddition">
{$setup_content}
</div>

View file

@ -1,49 +1,35 @@
<load target="js/module_admin.js" usecdn="true" />
<script type="text/javascript">
<script>
jQuery( function() { jQuery('.grant_default').change( function(event) { doShowGrantZone(); } ); doShowGrantZone() } );
</script>
<form ruleset="insertModulesGrant" action="./" method="post" id="manageSelectedModuleGrant">
<form ruleset="insertModulesGrant" action="./" method="post" id="manageSelectedModuleGrant" class="section x_form-horizontal">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleAdminModuleGrantSetup" />
<input type="hidden" name="success_return_url" value="{getRequestUriByServerEnviroment()}" />
<input type="hidden" name="module_srls" value="{$module_srls}" />
<h3 class="h3">{$lang->permission_setting}</h3>
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/manage_selected" />
<h1>{$lang->permission_setting}</h1>
<p>{$lang->about_grant_deatil}</p>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col">{$lang->grant}</th>
<th scope="col" colspan="3">{$lang->target}</th>
</tr>
</thead>
<tbody>
<!--@foreach($grant_list as $grant_name => $grant_item)-->
<tr class="row{$cycle_idx}">
<th scope="row">{$grant_item->title}</th>
<td >
<select name="{$grant_name}_default" class="grant_default">
<!--@if($grant_item->default == 'guest')--><option value="0">{$lang->grant_to_all}</option><!--@end-->
<!--@if($grant_item->default != 'manager')--><option value="-1">{$lang->grant_to_login_user}</option><!--@end-->
<!--@if($grant_item->default != 'manager')--><option value="-2" <!--@if($default_grant[$grant_name]=='site')-->selected="selected"<!--@end-->>{$lang->grant_to_site_user}</option><!--@end-->
<option value="">{$lang->grant_to_group}</option>
</select>
<div id="zone_{$grant_name}" style="display:none">
<!--@foreach($group_list as $group_srl => $group_item)-->
<input type="checkbox" class="checkbox" name="{$grant_name}[]" value="{$group_item->group_srl}" id="grant_{$grant_name}_{$group_srl}" />
<label for="grant_{$grant_name}_{$group_srl}">{$group_item->title}</label>
<!--@end-->
</div>
</td>
</tr>
<!--@end-->
</tbody>
</table>
<div loop="$grant_list => $grant_name, $grant_item" class="x_control-group">
<label class="x_control-label" for="{$grant_name}_default">{$grant_item->title}</label>
<div class="x_controls">
<select name="{$grant_name}_default" id="{$grant_name}_default" class="grant_default">
<option value="0" cond="$grant_item->default == 'guest'">{$lang->grant_to_all}</option>
<option value="-1" cond="$grant_item->default != 'manager'">{$lang->grant_to_login_user}</option>
<option value="-2" cond="$grant_item->default != 'manager'" selected="selected"|cond="$default_grant[$grant_name]=='site'">{$lang->grant_to_site_user}</option>
<option value="-3">{$lang->grant_to_admin}</option>
<option value="">{$lang->grant_to_group}</option>
</select>
<div id="zone_{$grant_name}" hidden style="margin-top:8px">
<label loop="$group_list => $group_srl, $group_item" for="grant_{$grant_name}_{$group_srl}">
<input type="checkbox" name="{$grant_name}[]" value="{$group_item->group_srl}" id="grant_{$grant_name}_{$group_srl}" />
{$group_item->title}
</label>
</div>
</div>
</div>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_registration}" /></span>
<input type="submit" class="x_btn x_btn-primary" value="{$lang->cmd_registration}" />
</div>
</form>

View file

@ -1,106 +1,94 @@
<div id="manageSelectedModuleSetup">
<h3 class="h3">{$lang->bundle_setup}</h3>
<form ruleset="insertModuleSetup" action="./" method="post" class="form tgContent">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleAdminModuleSetup" />
<input type="hidden" name="success_return_url" value="{getRequestUriByServerEnviroment()}" />
<input type="hidden" name="module_srls" value="" />
<ul>
<li>
<p class="q"><label for="module_category_srl">{$lang->module_category}</label></p>
<p class="a">
<select name="module_category_srl" id="module_category_srl">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option value="0">{$lang->notuse}</option>
<!--@foreach($module_category as $key => $val)-->
<option value="{$key}" <!--@if($module_info->module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
</p>
<p class="desc">{$lang->about_module_category}</p>
</li>
<li>
<p class="q"><label for="layout_srl">{$lang->layout}</label></p>
<p class="a">
<select name="layout_srl" id="layout_srl">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option value="0">{$lang->notuse}</option>
<!--@foreach($layout_list as $key => $val)-->
<option value="{$val->layout_srl}" <!--@if($module_info->layout_srl==$val->layout_srl)-->selected="selected"<!--@end-->>{$val->title} ({$val->layout})</option>
<!--@end-->
</select>
</p>
<p class="desc">{$lang->about_layout}</p>
</li>
<li cond="count($skin_list)">
<p class="q"><label for="skin">{$lang->skin}</label></p>
<p class="a">
<select name="skin" id="skin">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<!--@foreach($skin_list as $key=>$val)-->
<option value="{$key}" <!--@if($module_info->skin==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
</p>
<p class="desc">{$lang->about_skin}</p>
</li>
<!--li>
<p class="q"><label for="layout_srl">{$lang->mobile_view}</label></p>
<p class="a">
<input type="checkbox" name="use_mobile" id="use_mobile" value="Y" checked="checked"|cond="$module_info->use_mobile == 'Y'" /> <label for="use_mobile">{$lang->mobile_view}</label>
<input type="checkbox" name="keep_mobile_value" id="keep_mobile_value" value="Y" checked="checked"|cond="$module_info->use_mobile == 'Y'" /> <label for="use_mobile">{$lang->mobile_view}</label>
</p>
</li-->
<li>
<p class="q"><label for="mlayout_srl">{$lang->mobile_layout}</label></p>
<p class="a">
<select name="mlayout_srl" id="layout_srl">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option value="0">{$lang->notuse}</option>
<option loop="$mlayout_list => $key, $val" value="{$val->layout_srl}" selected="selected"|cond="$module_info->mlayout_srl== $val->layout_srl">{$val->title} ({$val->layout})</option>
</select>
</p>
</li>
<li>
<p class="q"><label for="mskin">{$lang->mobile_skin}</label></p>
<p class="a">
<select name="mskin" id="mskin">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option loop="$mskin_list=> $key, $val" value="{$key}" selected="selected"|cond="$module_info->mskin== $key">{$val->title}</option>
</select>
</p>
</li>
<li>
<p class="q"><label for="description">{$lang->description}</label></p>
<p class="a">
<textarea name="description" id="description" rows="8" cols="42">{htmlspecialchars($module_info->description)}</textarea>
</p>
<p class="desc">{$lang->about_description}</p>
</li>
<li>
<p class="q"><label for="header_text">{$lang->header_text}</label></p>
<p class="a multiLangEdit">
{@$use_multilang_textarea=true}
<input type="hidden" name="header_text" class="vLang" />
<textarea id="header_text" rows="8" cols="42" class="vLang"></textarea>
<span class="desc"><a href="#langEditTextarea" class="editUserLang tgAnchor">{$lang->cmd_set_multilingual}</a></span>
</p>
<p class="desc">{$lang->about_header_text}</p>
</li>
<li>
<p class="q"><label for="footer_text">{$lang->footer_text}</label></p>
<p class="a multiLangEdit">
<input type="hidden" name="footer_text" class="vLang" />
<textarea id="footer_text" rows="8" cols="42" class="vLang"></textarea>
<span class="desc"><a href="#langEditTextarea" class="editUserLang tgAnchor">{$lang->cmd_set_multilingual}</a></span>
</p>
<p class="desc">{$lang->about_footer_text}</p>
</li>
</ul>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_registration}" /></span>
<form ruleset="insertModuleSetup" action="./" method="post" class="x_form-horizontal" id="manageSelectedModuleSetup">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleAdminModuleSetup" />
<input type="hidden" name="success_return_url" value="{getRequestUriByServerEnviroment()}" />
<input type="hidden" name="module_srls" value="" />
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/manage_selected" />
<div class="x_control-group">
<label class="x_control-label" for="module_category_srl">{$lang->module_category}</label>
<div class="x_controls">
<select name="module_category_srl" id="module_category_srl">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option value="0">{$lang->notuse}</option>
<option loop="$module_category => $key, $val" value="{$key}" selected="selected"|cond="$module_info->module_category_srl==$key">{$val->title}</option>
</select>
<p class="x_help-inline">{$lang->about_module_category}</p>
</div>
</form>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="layout_srl">{$lang->layout}</label>
<div class="x_controls">
<select name="layout_srl" id="layout_srl">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option value="0">{$lang->notuse}</option>
<option loop="$layout_list => $key, $val" value="{$val->layout_srl}" selected="selected"|cond="$module_info->layout_srl==$val->layout_srl">{$val->title} ({$val->layout})</option>
</select>
<p class="x_help-inline">{$lang->about_layout}</p>
</div>
</div>
<div class="x_control-group" cond="count($skin_list)">
<label class="x_control-label" for="skin">{$lang->skin}</label>
<div class="x_controls">
<select name="skin" id="skin">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option loop="$skin_list => $key, $val" value="{$key}" selected="selected"|cond="$module_info->skin==$key">{$val->title}</option>
</select>
<p class="x_help-inline">{$lang->about_skin}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="use_mobile">{$lang->mobile_view}</label>
<div class="x_controls">
<select name="use_mobile" id="use_mobile">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option value="Y">{$lang->use}</option>
<option value="N">{$lang->notuse}</option>
</select>
<p class="x_help-inline">{$lang->about_mobile_view}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="mlayout_srl">{$lang->mobile_layout}</label>
<div class="x_controls">
<select name="mlayout_srl" id="mlayout_srl">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option value="0">{$lang->notuse}</option>
<option loop="$mlayout_list => $key, $val" value="{$val->layout_srl}" selected="selected"|cond="$module_info->mlayout_srl== $val->layout_srl">{$val->title} ({$val->layout})</option>
</select>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="mskin">{$lang->mobile_skin}</label>
<div class="x_controls">
<select name="mskin" id="mskin">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option loop="$mskin_list=> $key, $val" value="{$key}" selected="selected"|cond="$module_info->mskin== $key">{$val->title}</option>
</select>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="description">{$lang->description}</label>
<div class="x_controls">
<textarea name="description" id="description" rows="8" cols="42">{htmlspecialchars($module_info->description)}</textarea>
<p class="x_help-inline">{$lang->about_description}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="lang_header_text">{$lang->header_text}</label>
<div class="x_controls">
{@$use_multilang_textarea=true}
<textarea id="header_text" name="header_text" class="lang_code" rows="8" cols="42"></textarea>
<p class="x_help-inline" style="vertical-align:top">{$lang->about_header_text}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="lang_footer_text">{$lang->footer_text}</label>
<div class="x_controls">
<textarea id="footer_text" name="footer_text" class="lang_code" rows="8" cols="42"></textarea>
<p class="x_help-inline" style="vertical-align:top">{$lang->about_footer_text}</p>
</div>
</div>
<div class="btnArea">
<input type="submit" class="x_btn x_btn-primary" value="{$lang->cmd_registration}" />
</div>
</form>

View file

@ -1,23 +1 @@
<block cond="$use_multilang">
<div id="langEdit" class="langEdit tgContent">
<ul class="langList"></ul>
<div class="langInput form">
<h2>{$lang->multilingual} <strong>{$lang->cmd_modify}...</strong> | <a href="#langEdit">{$lang->cmd_insert}</a></h2>
<ul>
{@
/* move current language to the top */
$a = array($lang_type=>$lang_supported[$lang_type]);
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<li loop="$lang_supported=>$code,$name" class="{$code}"><label for="{$code}_var1">{$name}</label> <input type="text" value="" id="{$code}_var1" /></li>
</ul>
<div class="action">
<div class="btnArea">
<span class="btn small"><input type="submit" value="{$lang->use}|{$lang->use_after_save}" /></span>
</div>
<p><a href="{getUrl('act','dispModuleAdminLangcode')}">{$lang->multilingual_manager}</a></p>
</div>
</div>
</div>
</block>
<!--// no longer use, but avoid not found error, remain file -->

View file

@ -1,27 +1,2 @@
<block cond="$use_multilang_textarea">
<style type="text/css">
#langEditTextarea textarea { width: 258px; }
</style>
<!--// no longer use, but avoid not found error, remain file -->
<div id="langEditTextarea" class="langEdit tgContent">
<ul class="langList"></ul>
<div class="langInput form">
<h2>{$lang->multilingual} <strong>{$lang->cmd_modify}...</strong> | <a href="#langEdit">{$lang->cmd_insert}</a></h2>
<ul>
{@
/* move current language to the top */
$a = array($lang_type=>$lang_supported[$lang_type]);
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<li loop="$lang_supported=>$code,$name" class="{$code}"><label for="{$code}_var1">{$name}</label> <textarea id="{$code}_var1" rows="8" cols="42"></textarea></li>
</ul>
<div class="action">
<div class="btnArea">
<span class="btn small"><input type="submit" value="{$lang->use}|{$lang->use_after_save}" /></span>
</div>
<p><a href="{getUrl('act','dispModuleAdminLangcode')}">{$lang->multilingual_manager}</a></p>
</div>
</div>
</div>
</block>

View file

@ -24,8 +24,11 @@ $('a.modalAnchor[href=#manageSelectedModule]')
var module_srls = new Array();
$selectedModule.each(function(){
var $this = $(this);
var row = '<tr><td>' + $this.data('mid') + '</td><td>' + $this.data('browser_title') + '</td></tr>';
$selectedBody.append(row);
var $row = $('<tr></tr>');
var $mid = $('<td></td>').text($this.data('mid'));
var $browser_title = $('<td></td>').text($this.data('browser_title'));
$row.append($mid).append($browser_title);
$selectedBody.append($row);
module_srls.push($this.val());
});
@ -34,4 +37,4 @@ $('a.modalAnchor[href=#manageSelectedModule]')
$('#manageSelectedModuleGrant input[name=module_srls]').val(module_srls);
});
});
});

View file

@ -0,0 +1,58 @@
(function($){
xe.MidManager = xe.createApp("MidManager", {
$keyObj: null,
init: function(key){
var self = this;
var $keyObj = this.$keyObj = $('input[name='+key+']');
$keyObj.parent().find('button.delete,a.delete').bind('click', function(){
$keyObj.val('').next().val('');
return false;
});
jQuery(function($){
$keyObj.siblings('.moduleTrigger').bind('moduleSelect', function(e, aSelected){
self.cast('MID_SYNC_NEW', aSelected);
});
});
self.cast('MID_SYNC');
},
API_MID_SYNC: function(){
var self = this;
var $finder = self.$keyObj.closest('.modulefinder');
var module_srl = this.$keyObj.val();
if (!module_srl) return;
function on_complete(data){
if (data.error){
alert(data.message);
return;
}
self.$keyObj.val(data.module_list[0].module_srl);
self.$keyObj.next().val(data.module_list[0].browser_title+' ('+data.module_list[0].mid+', '+data.module_list[0].module_name+')');
}
$.exec_json('module.getModuleAdminModuleList', {'module_srls': module_srl}, on_complete);
},
API_MID_SYNC_NEW: function(htBase, aParam){
var self = this;
htSelected = aParam[0];
var module_srl = htSelected.module_srl;
if (!module_srl) return;
self.$keyObj.val(htSelected.module_srl);
self.$keyObj.next().val(htSelected.browser_title+' ('+htSelected.mid+', '+htSelected.type+')');
}
});
})(jQuery);

View file

@ -92,7 +92,7 @@ function doShowGrantZone() {
/* 권한 등록 후 알림 메세지 */
function completeInsertGrant(ret_obj) {
alert(ret_obj['message']);
// alert(ret_obj['message']);
location.reload();
}

View file

@ -0,0 +1,113 @@
(function($){
xe.ModuleListManager = xe.createApp("ModuleListManager", {
$keyObj: null,
$moduleNameObj: null,
$moduleSrlObj: null,
$selectedObj: null,
init: function(key){
var self = this;
var $keyObj = this.$keyObj = $('input[name='+key+']');
this.$moduleNameObj = $keyObj.parent().find('.moduleList');
this.$moduleSrlObj = $keyObj.parent().find('.moduleIdList');
this.$selectedObj = $keyObj.parent().find('.modulelist_selected');
this.$selectedObj
.nextAll('button')
.filter('.modulelist_del').bind('click', function(){ self.cast('MODULELIST_DEL'); return false; }).end()
.filter('.modulelist_up').bind('click', function(){ self.cast('MODULELIST_UP'); return false; }).end()
.filter('.modulelist_down').bind('click', function(){ self.cast('MODULELIST_DOWN'); return false; }).end()
.end()
.bind('show', function(){
$(this).nextAll().show();
});
this.$selectedObj.nextAll('a').filter('.moduleTrigger').bind('moduleSelect', function(e, aSelected){
var sType, sName, sSrl;
for(var i=0, nLen=aSelected.length; i<nLen; i++){
sType = aSelected[i].mid + ', ' + aSelected[i].type;
sName = aSelected[i].browser_title;
sSrl = aSelected[i].module_srl;
self.cast("ADD_MODULE_TO_MODULELIST_MANAGER", [sType, sName, sSrl]);
}
}).end()
this.cast('MODULELIST_SYNC');
},
addModule: function(sModuleType, sModuleInstanceName, sModuleSrl){
$('<OPTION>').val(sModuleSrl).text(sModuleInstanceName + ' ('+sModuleType+')').appendTo(this.$selectedObj);
this.removeDuplicated();
this.refreshValue();
},
API_ADD_MODULE_TO_MODULELIST_MANAGER : function(sender, aParams){
this.addModule(aParams[0], aParams[1], aParams[2]);
},
API_MODULELIST_ADD: function(){
var sModuleType = this.$moduleNameObj.find('>option:selected').text();
var sModuleInstanceName = this.$moduleSrlObj.find('>option:selected').text();
var sModuleSrl = this.$moduleSrlObj.find('>option:selected').val();
this.addModule(sModuleType, sModuleInstanceName, sModuleSrl);
},
API_MODULELIST_DEL: function(){
this.$selectedObj.find('>option:selected').remove();
this.refreshValue();
},
API_MODULELIST_UP: function(){
var $selected = this.$selectedObj.find('>option:selected');
$selected.eq(0).prev('option').before($selected);
this.refreshValue();
},
API_MODULELIST_DOWN: function(){
var $selected = this.$selectedObj.find('>option:selected');
$selected.eq(-1).next('option').after($selected);
this.refreshValue();
},
API_MODULELIST_SYNC: function(){
var values = this.$keyObj.val();
if (!values) return;
var self = this;
function on_complete(data){
if (data.error) return;
for(var i in data.module_list){
var module = data.module_list[i];
var obj = $(document.createElement('option'));
obj.val(module.module_srl).html(module.browser_title + ' (' + module.mid + ', ' + module.module_name + ')').appendTo(self.$selectedObj);
}
}
$.exec_json('module.getModuleAdminModuleList', {'module_srls': values}, on_complete);
},
removeDuplicated : function() {
var selected = {};
this.$selectedObj.find('>option').each(function(){
if(selected[this.value]) $(this).remove();
selected[this.value] = true;
});
},
refreshValue : function() {
var srls = [];
this.$selectedObj.find('>option').each(function(){
srls.push(this.value);
});
this.$keyObj.val(srls.join(','));
}
});
})(jQuery);

View file

@ -11,8 +11,8 @@ xe.MultiOrderManager = xe.createApp("MultiOrderManager", {
this.$showObj = $keyObj.parent().find('.multiorder_show');
this.$selectedObj = $keyObj.parent().find('.multiorder_selected');
this.$showObj
.nextAll('button')
this.$keyObj.parent()
.find('button')
.filter('.multiorder_add').bind('click', function(){ self.cast('MULTIORDER_ADD'); return false; }).end()
.filter('.multiorder_del').bind('click', function(){ self.cast('MULTIORDER_DEL'); return false; }).end()
.filter('.multiorder_up').bind('click', function(){ self.cast('MULTIORDER_UP'); return false; }).end()
@ -72,4 +72,4 @@ xe.MultiOrderManager = xe.createApp("MultiOrderManager", {
}
});
})(jQuery);
})(jQuery);

View file

@ -1,2 +1,2 @@
<h1 class="h1">{$lang->bundle_addition_setup}</h1>
<h1>{$lang->bundle_addition_setup}</h1>
{$setup_content}

View file

@ -1,51 +1,42 @@
<load target="js/module_admin.js" usecdn="true" />
<script type="text/javascript">
<script>
jQuery( function() { jQuery('.grant_default').change( function(event) { doShowGrantZone(); } ); doShowGrantZone() } );
</script>
<h1 class="h1">{$lang->bundle_grant_setup}</h1>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="insertModulesGrant" action="./" method="post" id="fo_obj">
<form ruleset="insertModulesGrant" action="./" method="post" id="fo_obj" class="x_form-horizontal" style="margin:0">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleAdminModuleGrantSetup" />
<input type="hidden" name="module_srls" value="{$module_srls}" />
<h2 class="h2">{$lang->permission_setting}</h2>
<p>{$lang->about_grant_deatil}</p>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col">{$lang->grant}</th>
<th scope="col" colspan="3">{$lang->target}</th>
</tr>
</thead>
<tbody>
<!--@foreach($grant_list as $grant_name => $grant_item)-->
<tr class="row{$cycle_idx}">
<th scope="row">{$grant_item->title}</th>
<td >
<select name="{$grant_name}_default" class="grant_default">
<!--@if($grant_item->default == 'guest')--><option value="0">{$lang->grant_to_all}</option><!--@end-->
<!--@if($grant_item->default != 'manager')--><option value="-1">{$lang->grant_to_login_user}</option><!--@end-->
<!--@if($grant_item->default != 'manager')--><option value="-2" <!--@if($default_grant[$grant_name]=='site')-->selected="selected"<!--@end-->>{$lang->grant_to_site_user}</option><!--@end-->
<option value="">{$lang->grant_to_group}</option>
</select>
<div id="zone_{$grant_name}" style="display:none">
<!--@foreach($group_list as $group_srl => $group_item)-->
<input type="checkbox" class="checkbox" name="{$grant_name}" value="{$group_item->group_srl}" id="grant_{$grant_name}_{$group_srl}" />
<label for="grant_{$grant_name}_{$group_srl}">{$group_item->title}</label>
<!--@end-->
</div>
</td>
</tr>
<!--@end-->
</tbody>
</table>
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/module_grant_setup/1" />
<div class="x_modal-header">
<h1>{$lang->bundle_grant_setup}</h1>
</div>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_registration}" /></span>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/module/tpl/module_grant_setup/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div class="x_modal-body">
<div class="x_control-group" loop="$grant_list => $grant_name, $grant_item">
<label class="x_control-label" for="">{$grant_item->title}</label>
<div class="x_controls">
<select name="{$grant_name}_default" class="grant_default">
<option value="0" cond="$grant_item->default == 'guest'">{$lang->grant_to_all}</option>
<option value="-1" cond="$grant_item->default != 'manager'">{$lang->grant_to_login_user}</option>
<option value="-2" cond="$grant_item->default != 'manager'" selected="selected"|cond="$default_grant[$grant_name]=='site'">{$lang->grant_to_site_user}</option>
<option value="-3">{$lang->grant_to_admin}</option>
<option value="">{$lang->grant_to_group}</option>
</select>
<a href="#aboutGrantDetail" class="x_icon-question-sign" cond="$grant_name=='access'" data-toggle>{$lang->help}</a>
<p class="x_help-block" id="aboutGrantDetail" cond="$grant_name=='access'" hidden>{$lang->about_grant_deatil}</p>
<div id="zone_{$grant_name}" hidden style="margin:8px 0 0 0">
<label loop="$group_list => $group_srl, $group_item" for="grant_{$grant_name}_{$group_srl}">
<input type="checkbox" class="checkbox" name="{$grant_name}" value="{$group_item->group_srl}" id="grant_{$grant_name}_{$group_srl}" />
{$group_item->title}
</label>
</div>
</div>
</div>
</div>
<div class="x_modal-footer">
<input type="submit" class="x_btn x_btn-primary" value="{$lang->cmd_registration}" />
</div>
</form>

View file

@ -1,73 +1,70 @@
<!--%import("filter/insert_grant.xml")-->
<load target="js/module_admin.js" usecdn="true" />
<script type="text/javascript">
<script>
jQuery( function() { jQuery('.grant_default').change( function(event) { doShowGrantZone(); } ); doShowGrantZone() } );
</script>
<form action="./" method="post" onsubmit="return procFilter(this, insert_grant)" id="fo_obj" class="form">
<form action="./" method="post" onsubmit="return procFilter(this, insert_grant)" id="fo_obj">
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="admin_member" value="<!--@foreach($admin_member as $key => $val)--><!--@if($member_config->identifier == 'email_address')-->{$val->email_address},<!--@else-->{$val->user_id},<!--@end--><!--@end-->" />
<h2 class="h2">{$lang->module_admin}</h2>
<p>{$lang->about_admin_id}</p>
<ul>
<li>
<p class="q">
<!--@if($member_config->identifier == 'email_address')-->
{$lang->admin_email_address}
<!--@else-->
{$lang->admin_id}
<!--@end-->
</p>
<p class="a">
<select name="_admin_member" multiple="multiple" size="{count($admin_member)?count($admin_member):1}" style="width:290px">
<!--@foreach($admin_member as $key => $val)-->
<option value="<!--@if($member_config->identifier=='email_address')-->{$val->email_address}<!--@else-->{$val->user_id}<!--@end-->">{$val->nick_name} (<!--@if($member_config->identifier=='email_address')-->{$val->email_address}<!--@else-->{$val->user_id}<!--@end-->)</option>
<!--@end-->
</select>
<br />
<input type="text" name="admin_id" />
<span class="btn"><button type="button" onclick="doInsertAdmin()">{$lang->cmd_insert}</button></span>
<span class="btn"><button type="button" onclick="doDeleteAdmin()">{$lang->cmd_delete}</button></span>
</p>
</li>
</ul>
<h2 class="h2">{$lang->permission_setting}</h2>
<p>{$lang->about_grant_deatil}</p>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col">{$lang->grant}</th>
<th scope="col" colspan="3">{$lang->target}</th>
</tr>
</thead>
<tbody>
<!--@foreach($grant_list as $grant_name => $grant_item)-->
<tr>
<th scope="row">{$grant_item->title}</th>
<td >
<select name="{$grant_name}_default" class="grant_default">
<!--@if($grant_item->default == 'guest')--><option value="0" <!--@if($default_grant[$grant_name]=='all')-->selected="selected"<!--@end-->>{$lang->grant_to_all}</option><!--@end-->
<!--@if($grant_item->default != 'manager')--><option value="-1" <!--@if($default_grant[$grant_name]=='member')-->selected="selected"<!--@end-->>{$lang->grant_to_login_user}</option><!--@end-->
<!--@if($grant_item->default != 'manager')--><option value="-2" <!--@if($default_grant[$grant_name]=='site')-->selected="selected"<!--@end-->>{$lang->grant_to_site_user}</option><!--@end-->
<option value="" <!--@if($default_grant[$grant_name]=='group')-->selected="selected"<!--@end-->>{$lang->grant_to_group}</option>
</select>
<div id="zone_{$grant_name}" style="display:none">
<!--@foreach($group_list as $group_srl => $group_item)-->
<input type="checkbox" class="checkbox" name="{$grant_name}" value="{$group_item->group_srl}" id="grant_{$grant_name}_{$group_srl}" <!--@if(is_array($selected_group[$grant_name])&&in_array($group_srl,$selected_group[$grant_name]))-->checked="checked"<!--@end-->/>
<label for="grant_{$grant_name}_{$group_srl}">{$group_item->title}</label>
<!--@end-->
</div>
</td>
</tr>
<!--@end-->
</tbody>
</table>
<div class="section x_form-horizontal">
<h1>{$lang->module_admin}</h1>
<div class="x_control-group">
<label class="x_control-label" cond="$member_config->identifier == 'email_address'">
{$lang->admin_email_address}
</label>
<label class="x_control-label" cond="$member_config->identifier != 'email_address'">
{$lang->admin_id}
</label>
<div class="x_controls">
<div class="x_input-append" style="margin-bottom:8px">
<select name="_admin_member" multiple="multiple" size="{count($admin_member)?count($admin_member):1}">
<option loop="$admin_member => $key, $val" value="{$val->email_address}"|cond="$member_config->identifier=='email_address'" value="{$val->user_id}"|cond="$member_config->identifier!='email_address'">
{$val->nick_name} (<block cond="$member_config->identifier=='email_address'">{$val->email_address}</block><block cond="$member_config->identifier!='email_address'">{$val->user_id}</block>)
</option>
</select>
<button class="x_btn" type="button" onclick="doDeleteAdmin()">{$lang->cmd_delete}</button>
</div>
<br>
<div class="x_input-append">
<input type="text" name="admin_id" />
<button class="x_btn" type="button" onclick="doInsertAdmin()">{$lang->cmd_insert}</button>
</div>
<a href="#adminListHelp" class="x_icon-question-sign">{$lang->help}</a>
<span id="adminListHelp" hidden>{$lang->about_admin_id}</span>
</div>
</div>
</div>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_save}" /></span>
<div class="section">
<h1>{$lang->permission_setting}</h1>
<div class="x_form-horizontal">
<div loop="$grant_list => $grant_name, $grant_item" class="x_control-group">
<label for="{$grant_name}_default" class="x_control-label">{$grant_item->title}</label>
<div class="x_controls">
<select name="{$grant_name}_default" id="{$grant_name}_default" class="grant_default">
<!--@if($grant_item->default == 'guest')--><option value="0" <!--@if($default_grant[$grant_name]=='all')-->selected="selected"<!--@end-->>{$lang->grant_to_all}</option><!--@end-->
<!--@if($grant_item->default != 'manager')--><option value="-1" <!--@if($default_grant[$grant_name]=='member')-->selected="selected"<!--@end-->>{$lang->grant_to_login_user}</option><!--@end-->
<!--@if($grant_item->default != 'manager')--><option value="-2" <!--@if($default_grant[$grant_name]=='site')-->selected="selected"<!--@end-->>{$lang->grant_to_site_user}</option><!--@end-->
<option value="-3" <!--@if($default_grant[$grant_name]=='manager')-->selected="selected"<!--@end-->>{$lang->grant_to_admin}</option>
<option value="" <!--@if($default_grant[$grant_name]=='group')-->selected="selected"<!--@end-->>{$lang->grant_to_group}</option>
</select>
<p class="x_help-inline" cond="$grant_name == 'access'"><a href="#{$grant_name}" class="x_icon-question-sign" data-toggle>{$lang->help}</a> <span hidden id="{$grant_name}">{$lang->about_grant_deatil}</span></p>
<div id="zone_{$grant_name}" hidden style="margin:8px 0 0 0">
<!--@foreach($group_list as $group_srl => $group_item)-->
<label for="grant_{$grant_name}_{$group_srl}" class="x_inline"><input type="checkbox" class="checkbox" name="{$grant_name}" value="{$group_item->group_srl}" id="grant_{$grant_name}_{$group_srl}" checked="checked"|cond="is_array($selected_group[$grant_name])&&in_array($group_srl,$selected_group[$grant_name])" /> {$group_item->title}</label>
<!--@end-->
</div>
</div>
</div>
</div>
</div>
<div class="x_clearfix btnArea">
<div class="x_pull-right">
<button class="x_btn x_btn-primary" type="submit">{$lang->cmd_save}</button>
</div>
</div>
</form>

View file

@ -1,82 +1,78 @@
<h1 class="h1">{$lang->module_maker}</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="row">{$lang->title}</th>
<td>{$module_info->title} ver {$module_info->version}</td>
</tr>
<tr>
<th scope="row">{$lang->author}</th>
<td class="blue">
<!--@foreach($module_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($module_info->homepage)-->
<tr>
<th scope="row">{$lang->homepage}</th>
<td class="blue"><a href="{$module_info->homepage}" onclick="window.open(this.href);return false;">{$module_info->homepage}</a></td>
</tr>
<!--@endif-->
<tr>
<th scope="row">{$lang->regdate}</th>
<td>{zdate($module_info->date, 'Y-m-d')}</td>
</tr>
<!--@if($module_info->license || $module_info->license_link)-->
<tr>
<th scope="row">{$lang->module_license}</th>
<td>
{nl2br(trim($module_info->license))}
<!--@if($module_info->license_link)-->
<p><a href="{$module_info->license_link}" onclick="window.close(); return false;">{$module_info->license_link}</a></p>
<!--@end-->
</td>
</tr>
<!--@endif--><!--@if($module_info->description)-->
<tr>
<th scope="row">{$lang->description}</th>
<td>{nl2br(trim($module_info->description))}</td>
</tr>
<!--@endif-->
</table>
</div>
<h1>{$lang->module_maker}</h1>
<table class="x_table x_table-striped x_table-hover">
<tr>
<th scope="row">{$lang->title}</th>
<td>{$module_info->title} ver {$module_info->version}</td>
</tr>
<tr>
<th scope="row">{$lang->author}</th>
<td class="blue">
<!--@foreach($module_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($module_info->homepage)-->
<tr>
<th scope="row">{$lang->homepage}</th>
<td class="blue"><a href="{$module_info->homepage}" onclick="window.open(this.href);return false;">{$module_info->homepage}</a></td>
</tr>
<!--@endif-->
<tr>
<th scope="row">{$lang->regdate}</th>
<td>{zdate($module_info->date, 'Y-m-d')}</td>
</tr>
<!--@if($module_info->license || $module_info->license_link)-->
<tr>
<th scope="row">{$lang->module_license}</th>
<td>
{nl2br(trim($module_info->license))}
<!--@if($module_info->license_link)-->
<p><a href="{$module_info->license_link}" onclick="window.close(); return false;">{$module_info->license_link}</a></p>
<!--@end-->
</td>
</tr>
<!--@endif--><!--@if($module_info->description)-->
<tr>
<th scope="row">{$lang->description}</th>
<td>{nl2br(trim($module_info->description))}</td>
</tr>
<!--@endif-->
</table>
<!--@if($module_info->history)-->
<h1 class="h1">{$lang->module_history}</h1>
<h1>{$lang->module_history}</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<col width="100" />
<col />
<table class="x_table x_table-striped x_table-hover">
<col width="100" />
<col />
<!--@foreach($module_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($addon_info->description)-->
<p>{nl2br(trim($history->description))}</p>
<!--@endif-->
<!--@if($history->logs)-->
<ul>
<!--@foreach($history->logs as $log)-->
<!--@if($log->link)-->
<li><a href="{$log->text}" onclick="window.open(this.href);return false;">{$log->text}</a></li>
<!--@else-->
<li>{$log->text}</li>
<!--@endif-->
<!--@endforeach-->
</ul>
<!--@endif-->
</td>
</tr>
<!--@endforeach-->
</table>
</div>
<!--@foreach($module_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($addon_info->description)-->
<p>{nl2br(trim($history->description))}</p>
<!--@endif-->
<!--@if($history->logs)-->
<ul>
<!--@foreach($history->logs as $log)-->
<!--@if($log->link)-->
<li><a href="{$log->text}" onclick="window.open(this.href);return false;">{$log->text}</a></li>
<!--@else-->
<li>{$log->text}</li>
<!--@endif-->
<!--@endforeach-->
</ul>
<!--@endif-->
</td>
</tr>
<!--@endforeach-->
</table>
<!--@endif-->

View file

@ -1,96 +1,22 @@
<load target="js/multilingual.js" usecdn="true" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
<div class="x_page-header">
<h1>{$lang->cmd_multilingual} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_content_langcode" target="_blank">{$lang->help}</a></h1>
</div>
<h1 class="h1">{$lang->menu_gnb_sub['multilingual']}</h1>
<p>{$lang->multilingual_desc}</p>
<div class="mLangEdit ko form"><!-- class="mLangEdit LANGCODE" -->
<div class="btnArea">
<span class="btn"><a href="#addWord" class="modalAnchor">{$lang->add_word}</a></span>
</div>
<ul id="langList">
<li cond="!is_array($lang_code_list) || count($lang_code_list) < 1">
<p>{$lang->no_multi_lang}</p>
</li>
<li loop="$lang_code_list=>$key,$value">
{@$langName = $value->name}
<strong>{$value->value}</strong> <span class="side"><button type="button" class="text" cond="$module != 'admin'" onclick="doInsertLangCode('{$value->name}', '{$target}')">{$lang->cmd_apply}</button><button type="button" class="text _edit">{$lang->cmd_edit}</button></span>
<form action="./" method="post" id="langForm_{$langName}" >
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="procModuleAdminInsertLang" />
<input type="hidden" name="lang_name" value="{$langName}" />
<ul>
{@
/* move current language to the top */
$a = array($lang_type=>$lang_supported[$lang_type]);
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<li class="{$key2}" loop="$lang_supported=>$key2,$value2"><label for="{$langName}_{$key2}">{$value2}</label> <textarea rows="1" cols="42" name="{$key2}" id="{$langName}_{$key2}"></textarea></li>
</ul>
<div class="btnArea">
<button type="submit" name="act" value="procModuleAdminInsertLang">{$lang->cmd_save}</button>
<button type="submit" name="act" value="procModuleAdminDeleteLang">{$lang->cmd_delete}</button>
</div>
</form>
</li>
</ul>
<div class="btnArea">
<span class="btn"><a href="#addWord" class="modalAnchor">{$lang->add_word}</a></span>
</div>
</div>
<div class="modal" id="addWord">
<form action="./" method="post" class="form mLangEdit fg" id="langForm_new" >
<input type="hidden" name="act" value="procModuleAdminInsertLang" />
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="target" value="{$target}" />
<h2 class="h2">{$lang->add_word}</h2>
<ul>
<li class="{$key2}" loop="$lang_supported=>$key2,$value2"><label for="{$langName}_{$key2}">{$value2}</label> <textarea rows="1" cols="42" name="{$key2}" id="{$langName}_{$key2}"></textarea></li>
</ul>
<div class="btnArea">
<span class="btn small"><button type="submit">{$lang->cmd_save}</button></span>
</div>
</form>
</div>
<div class="search">
<form action="" class="pagination">
<input type="hidden" name="error_return_url" value="" />
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<input cond="$search_keyword" type="hidden" name="search_keyword" value="{$search_keyword}" />
<input cond="$search_target" type="hidden" name="search_target" value="{$search_target}" />
<a href="{getUrl('page', '')}" class="direction">&laquo; FIRST</a>
<block cond="$page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page && $page_navigation->page_count != $page_navigation->total_page">
{@$isGoTo = true}
<a href="{getUrl('page', '')}">1</a>
<a href="#goTo" class="tgAnchor" title="{$lang->cmd_go_to_page}">...</a>
</block>
<block loop="$page_no = $page_navigation->getNextPage()">
{@$last_page = $page_no}
<strong cond="$page_no == $page">{$page_no}</strong>
<a cond="$page_no != $page" href="{getUrl('page', $page_no)}">{$page_no}</a>
</block>
<block cond="$last_page != $page_navigation->last_page">
{@$isGoTo = true}
<a href="#goTo" class="tgAnchor" title="{$lang->cmd_go_to_page}">...</a>
<a href="{getUrl('page', $page_navigation->last_page)}">{$page_navigation->last_page}</a>
</block>
<a href="{getUrl('page', $page_navigation->last_page)}" class="direction">LAST &raquo;</a>
<span cond="$isGoTo" id="goTo" class="tgContent">
<input name="page" title="{$lang->cmd_go_to_page}" />
<button type="submit">Go</button>
</span>
</form>
<form action="./" method="get">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<input type="hidden" name="search_target" value="value" />
<input type="hidden" name="error_return_url" value="" />
<input type="hidden" name="target" value="{$target}" />
<input title="search" name="search_keyword" value="{htmlspecialchars($search_keyword)}" />
<input type="submit" value="{$lang->cmd_search}" />
</form>
</div>
{@$use_in_page = true}
<include target="multilingual_v17.html" />
<script>
jQuery(function($){
$('#g11n')
.xeMultilingualWindow(
{
create_type: 'save',
modify_type: 'save',
view_delete: true,
view_use: false,
list_count: 10
}
)
.trigger('before-open.g11n');
});
</script>

View file

@ -1,62 +1,62 @@
<include target="header.html" />
<div class="table even easyList dsTg">
<table width="100%" border="1" cellspacing="0">
<caption>
All({count($module_list)})
<span class="side"><button type="button" class="text"><span class="hide">{$lang->simple_view}</span><span class="show">{$lang->detail_view}</span></button></span>
</caption>
<thead>
<tr>
<th scope="col" class="nowr">{$lang->favorite}</th>
<th scope="col" class="title">{$lang->module_name}</th>
<th scope="col" class="nowr">{$lang->version}</th>
<th scope="col" class="nowr">{$lang->author}</th>
<th scope="col" class="nowr">{$lang->path}</th>
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<!--@foreach($module_list as $key => $val)-->
<tr>
<td class="nowr">
<!--@if(in_array($val->module,$favoriteModuleList))-->
<button type="button" class="fvOn" onclick="doToggleFavoriteModule(this, '{$val->module}'); return false;">{$lang->favorite}({$lang->on})</button>
<!--@else-->
<button type="button" class="fvOff" onclick="doToggleFavoriteModule(this, '{$val->module}'); return false;">{$lang->favorite}({$lang->off})</button>
<!--@end-->
</td>
<td class="title">
<p>
<!--@if($val->admin_index_act)-->
<a href="{getUrl('','module','admin','act',$val->admin_index_act)}">{$val->title}</a>
<!--@else-->
<strong>{$val->title}</strong>
<!--@end-->
</p>
<p>{$val->description}</p>
<p cond="$val->need_install" class="update">{$lang->msg_avail_install} <button class="text" type="button" onclick="doInstallModule('{$val->module}')">{$lang->msg_do_you_like_install}</button></p>
<p cond="$val->need_update" class="update">{$lang->msg_avail_update} <button class="text" type="button" onclick="doUpdateModule('{$val->module}')">{$lang->msg_do_you_like_update}</button></p>
<p cond="$val->need_autoinstall_update == 'Y'" class="update">{$lang->msg_avail_easy_update}<a href="{$val->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a></p>
</td>
<td class="nowr">{$val->version}</td>
<td class="nowr">
<!--@foreach($val->author as $author)-->
<!--@if($author->homepage)-->
<a href="{$author->homepage}" onclick="window.open(this.href);return false;" target="_blank">{$author->name}</a>
<!--@else-->
{$author->name}
<!--@endif-->
<!--@endforeach-->
</td>
<td class="nowr">{$val->path}</td>
<td class="nowr">
<!--@if($val->delete_url)-->
<a href="{$val->delete_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a>
<!--@end-->
</td>
</tr>
<!--@end-->
</tbody>
</table>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/autoinstall/tpl/uninstall/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<table class="x_table x_table-striped x_table-hover">
<caption>
<strong>All({count($module_list)})</strong>
</caption>
<thead>
<tr>
<th class="nowr">{$lang->favorite}</th>
<th class="title">{$lang->module_name}</th>
<th class="nowr">{$lang->version}</th>
<th class="nowr">{$lang->author}</th>
<th class="nowr">{$lang->path}</th>
<th class="nowr">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<tr loop="$module_list => $key,$val" data-type1="#"|cond="in_array($val->module,$favoriteModuleList)" data-type2="#"|cond="$val->need_install || $val->need_update || $val->need_autoinstall_update">
<td>
<button type="button" class="fvOn" onclick="doToggleFavoriteModule(this, '{$val->module}')" cond="in_array($val->module,$favoriteModuleList)">{$lang->favorite}({$lang->on})</button>
<button type="button" class="fvOff" onclick="doToggleFavoriteModule(this, '{$val->module}')" cond="!in_array($val->module,$favoriteModuleList)">{$lang->favorite}({$lang->off})</button>
</td>
<td class="title">
<p>
<a href="{getUrl('','module','admin','act',$val->admin_index_act)}" cond="$val->admin_index_act">{$val->title}</a>
<strong cond="!$val->admin_index_act">{$val->title}</strong>
</p>
<p>{$val->description}</p>
<p cond="$val->need_install" class="x_alert x_alert-info">{$lang->msg_avail_install} <button class="text" type="button" onclick="doInstallModule('{$val->module}')">{$lang->msg_do_you_like_install}</button></p>
<p cond="$val->need_update" class="x_alert x_alert-info">{$lang->msg_avail_update} <button class="text" type="button" onclick="doUpdateModule('{$val->module}')">{$lang->msg_do_you_like_update}</button></p>
<p cond="$val->need_autoinstall_update == 'Y'" class="x_alert x_alert-info">{$lang->msg_avail_easy_update} <a href="{$val->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a></p>
</td>
<td>{$val->version}</td>
<td class="nowr">
<!--@foreach($val->author as $author)-->
<!--@if($author->homepage)-->
<a href="{$author->homepage}" target="_blank">{$author->name}</a>
<!--@else-->
{$author->name}
<!--@endif-->
<!--@endforeach-->
</td>
<td>{$val->path}</td>
<td>
<a href="{$val->delete_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}" cond="$val->delete_url">{$lang->cmd_delete}</a>
</td>
</tr>
</tbody>
</table>
<style scoped>
.fvOff,
.fvOn{display:inline-block;width:16px;height:16px;overflow:hidden;text-indent:16px;background:transparent url(./modules/admin/tpl/img/iconFavorite.gif) no-repeat;border:0}
.fvOn{background-position:0 -16px}
</style>
<script>
jQuery(function($){
$('.dsTg>tbody>tr[data-type1]').prependTo('tbody');
$('.dsTg>tbody>tr[data-type2]').prependTo('tbody');
});
</script>

View file

@ -0,0 +1,21 @@
<div id="{$id}" class="tgContent moduleWindow x_well xe-toggling-content" style="display:none;">
<div class="siteList x_control-group">
<label for="siteFinder">{$lang->select_site}</label>
<input type="search" class="siteFinder" id="siteFinder" name="site_filter" placeholder="URL">
<ul class="x_nav x_nav-tabs x_nav-stacked" style="">
</ul>
</div>
<div class="moduleList x_control-group">
<label>{$lang->select_module_type}</label>
<ul class="x_nav x_nav-tabs x_nav-stacked">
</ul>
</div>
<div class="instanceList x_control-group">
<label for="instanceList">{$lang->select_module_instance}</label>
<select size="8" id="instanceList" <!--@if($is_multiple)-->multiple<!--@endif--> style="height:auto!important">
</select>
<div class="x_pull-right" style="margin-top:8px">
<button type="button" class="moduleSearch_ok x_btn x_btn-inverse">{$lang->cmd_select}</button>
</div>
</div>
</div>

View file

@ -1,75 +1,67 @@
<load target="./js/module_admin.js" usecdn="true" />
<h1 class="h1">{$lang->module_selector}</h1>
<form action="./" method="post">
<div class="x_modal-header">
<h1>{$lang->module_selector}</h1>
</div>
<form action="./" method="post" class="x_modal-body x_form-horizontal" style="max-height:none">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="dispModuleSelectList" />
<input type="hidden" name="id" value="{$id}" />
<input type="hidden" name="type" value="{$type}" />
<input type="hidden" name="vid" value="{$vid}" />
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tbody>
<!--@if($site_count && $logged_info->is_admin == 'Y')-->
<tr>
<th>{$lang->virtual_site}</th>
<td>
<input type="text" name="site_keyword" value="{$site_keyword}" /> <span class="button blue"><input type="submit" value="{$lang->cmd_search}" /></span>
<p>{$lang->about_search_virtual_site}</p>
</td>
</tr>
<!--@end-->
<tr>
<th>{$lang->module}</th>
<td>
<select name="selected_module">
<!--@foreach($mid_list as $key=>$val)-->
<option value="{$key}" <!--@if($selected_module == $key)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select><span class="button blue"><input type="submit" value="{$lang->cmd_search}" /></span>
</td>
</tr>
</tbody>
</table>
<div class="x_control-group" cond="$site_count && $logged_info->is_admin == 'Y'">
<label class="x_control-label" for="site_keyword">{$lang->virtual_site}</label>
<div class="x_controls">
<span class="x_input-append">
<input type="text" name="site_keyword" id="site_keyword" value="{$site_keyword}" />
<input type="submit" value="{$lang->cmd_search}" class="x_btn" />
</span>
<p class="x_help-block">{$lang->about_search_virtual_site}</p>
</div>
</div>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<!--@if($module_category_exists)--><th>{$lang->module_category}</th><!--@end-->
<th>{$lang->mid}</th>
<th >{$lang->browser_title}</th>
<th>{$type=='single'?$lang->cmd_select:$lang->cmd_insert}</th>
<tr>
</thead>
<tbody>
<!--@if($module_category_exists)-->
<!--@foreach($selected_mids as $key => $val)-->
<tr>
<td rowspan="{count($val)}">{$key}&nbsp;</td>
{@ $_idx =0; }
<!--@foreach($val as $k => $v)-->
<!--@if($_idx >0)--><tr><!--@end-->
{@ $browser_title = str_replace("'", "\\'", htmlspecialchars($v->browser_title)); }
<td>{$k}</td>
<td>{$v->browser_title}</td>
<td><a href="#" onclick="insertModule('{$id}', {$v->module_srl}, '{$k}', '{$browser_title}',{$type=='single'?'false':'true'}); return false;" class="button green"><span>{$type=='single'?$lang->cmd_select:$lang->cmd_insert}</span></a></td>
<!--@if($_idx <count($val))--></tr><!--@end-->
{@ $_idx ++; }
<!--@end-->
</tr>
<!--@end-->
<!--@else-->
<!--@foreach($selected_mids as $key => $val)-->
<!--@foreach($val as $k => $v)-->
<div class="x_control-group">
<label class="x_control-label" for="selected_module">{$lang->module}</label>
<div class="x_controls">
<select name="selected_module" id="selected_module">
<option loop="$mid_list => $key,$val" value="{$key}" selected="selected"|cond="$selected_module == $key">{$val->title}</option>
</select>
<input type="submit" value="{$lang->cmd_search}" class="x_btn" />
</div>
</div>
<table class="x_table x_table-striped x_table-hover" style="border-top:1px dotted #ddd">
<thead>
<tr>
<td>{$k}</td>
<td>{$v->browser_title}</td>
<td><a href="#" onclick="insertModule('{$id}', {$v->module_srl}, '{$k}', '{str_replace("'","\\'",$v->browser_title)}',{$type=='single'?'false':'true'}); return false;" class="button green"><span>{$type=='single'?$lang->cmd_select:$lang->cmd_insert}</span></a></td>
</tr>
<!--@end-->
<!--@end-->
<!--@end-->
</tbody>
</table>
</div>
<th>{$lang->mid}</th>
<th>{$lang->browser_title}</th>
<th>{$type=='single'?$lang->cmd_select:$lang->cmd_insert}</th>
<tr>
</thead>
<tbody>
<!--@if($module_category_exists)-->
<!--@foreach($selected_mids as $key => $val)-->
<tr>
{@ $_idx =0; }
<!--@foreach($val as $k => $v)-->
<!--@if($_idx >0)--><tr><!--@end-->
{@ $browser_title = str_replace("'", "\\'", htmlspecialchars($v->browser_title)); }
<td>{$k}</td>
<td>{$v->browser_title}</td>
<td><a href="#" onclick="insertModule('{$id}', {$v->module_srl}, '{$k}', '{$browser_title}',{$type=='single'?'false':'true'}); return false;" class="button green"><span>{$type=='single'?$lang->cmd_select:$lang->cmd_insert}</span></a></td>
<!--@if($_idx <count($val))--></tr><!--@end-->
{@ $_idx ++; }
<!--@end-->
</tr>
<!--@end-->
<!--@else-->
<!--@foreach($selected_mids as $key => $val)-->
<!--@foreach($val as $k => $v)-->
<tr>
<td>{$k}</td>
<td>{$v->browser_title}</td>
<td><a href="#" onclick="insertModule('{$id}', {$v->module_srl}, '{$k}', '{str_replace("'","\\'",$v->browser_title)}',{$type=='single'?'false':'true'}); return false;" class="button green"><span>{$type=='single'?$lang->cmd_select:$lang->cmd_insert}</span></a></td>
</tr>
<!--@end-->
<!--@end-->
<!--@end-->
</tbody>
</table>
</form>

View file

@ -1,75 +1,78 @@
<load target="./js/module_admin.js" usecdn="true" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="insertModuleSetup" action="./" method="post" enctype="multipart/form-data" class="form">
<form ruleset="insertModuleSetup" action="./" method="post" enctype="multipart/form-data" class="x_form-horizontal" style="margin:0">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="procModuleAdminModuleSetup" />
<input type="hidden" name="module_srls" value="{$module_srls}" />
<h1 class="h1">{$lang->bundle_setup}</h1>
<ul>
<li>
<p class="q"><label for="module_category_srl">{$lang->module_category}</label></p>
<p class="a">
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/module_setup/1" />
<div class="x_modal-header">
<h1>{$lang->bundle_setup}</h1>
</div>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/module/tpl/module_setup/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div class="x_modal-body">
<div class="x_control-group">
<label class="x_control-label" for="module_category_srl">{$lang->module_category}</label>
<div class="x_controls">
<select name="module_category_srl" id="module_category_srl">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option value="0">{$lang->notuse}</option>
<!--@foreach($module_category as $key => $val)-->
<option value="{$key}" <!--@if($module_info->module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
<option loop="$module_category => $key, $val" value="{$key}" selected="selected"|cond="$module_info->module_category_srl==$key">{$val->title}</option>
</select>
</p>
<p class="desc">{$lang->about_module_category}</p>
</li>
<li>
<p class="q"><label for="layout_srl">{$lang->layout}</label></p>
<p class="a">
<a href="#aboutCategory" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
<p class="x_help-block" id="aboutCategory" hidden>{$lang->about_module_category}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="layout_srl">{$lang->layout}</label>
<div class="x_controls">
<select name="layout_srl" id="layout_srl">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<option value="0">{$lang->notuse}</option>
<!--@foreach($layout_list as $key => $val)-->
<option value="{$val->layout_srl}" <!--@if($module_info->layout_srl==$val->layout_srl)-->selected="selected"<!--@end-->>{$val->title} ({$val->layout})</option>
<!--@end-->
<option loop="$layout_list => $key, $val" value="{$val->layout_srl}" selected="selected"|cond="$module_info->layout_srl==$val->layout_srl">{$val->title}({$val->layout})</option>
</select>
</p>
<p class="desc">{$lang->about_layout}</p>
</li>
<li cond="count($skin_list)">
<p class="q"><label for="skin">{$lang->skin}</label></p>
<p class="a">
<a href="#aboutLayout" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
<p class="x_help-block" id="aboutLayout" hidden>{$lang->about_layout}</p>
</div>
</div>
<div class="x_control-group" cond="count($skin_list)">
<label class="x_control-label" for="skin">{$lang->skin}</label>
<div class="x_controls">
<select name="skin" id="skin">
<option value="" selected="selected">{$lang->keep_existing_value}</option>
<!--@foreach($skin_list as $key=>$val)-->
<option value="{$key}" <!--@if($module_info->skin==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
<option loop="$skin_list => $key,$val" value="{$key}" selected="selected"|cond="$module_info->skin==$key">{$val->title}</option>
</select>
</p>
<p class="desc">{$lang->about_skin}</p>
</li>
<li>
<p class="q"><label for="description">{$lang->description}</label></p>
<p class="a">
<textarea name="description" id="description" rows="8" cols="42">{htmlspecialchars($module_info->description)}</textarea>
</p>
<p class="desc">{$lang->about_description}</p>
</li>
<li>
<p class="q"><label for="header_text">{$lang->header_text}</label></p>
<p class="a">
<textarea name="header_text" id="header_text" rows="8" cols="42">{htmlspecialchars($module_info->header_text)}</textarea>
</p>
<p class="desc">{$lang->about_header_text}</p>
</li>
<li>
<p class="q"><label for="footer_text">{$lang->footer_text}</label></p>
<p class="a">
<textarea name="footer_text" rows="8" cols="42">{htmlspecialchars($module_info->footer_text)}</textarea>
</p>
<p class="desc">{$lang->about_footer_text}</p>
</li>
</ul>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_registration}" /></span>
<a href="#aboutSkin" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
<p class="x_help-block" id="aboutSkin" hidden>{$lang->about_skin}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="header_text">{$lang->header_text}</label>
<div class="x_controls">
<textarea name="header_text" id="header_text" rows="4" cols="42">{htmlspecialchars($module_info->header_text)}</textarea>
<a href="#aboutHeaderText" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
<p class="x_help-block" id="aboutHeaderText" hidden>{$lang->about_header_text}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="footer_text">{$lang->footer_text}</label>
<div class="x_controls">
<textarea name="footer_text" rows="4" cols="42">{htmlspecialchars($module_info->footer_text)}</textarea>
<a href="#aboutFooterText" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
<p class="x_help-block" id="aboutFooterText" hidden>{$lang->about_footer_text}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="description">{$lang->description}</label>
<div class="x_controls">
<textarea name="description" id="description" rows="4" cols="42">{htmlspecialchars($module_info->description)}</textarea>
<a href="#aboutDescription" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
<p class="x_help-block" id="aboutDescription" hidden>{$lang->about_description}</p>
</div>
</div>
</div>
<div class="x_modal-footer">
<input type="submit" class="x_btn x_btn-primary" value="{$lang->cmd_registration}" />
</div>
</form>

View file

@ -1,3 +1,3 @@
<script type="text/javascript">
<script>
top.location.href = "{$url}";
</script>

View file

@ -0,0 +1,51 @@
{@
/* move current language to the top */
$a = array($lang_type=>$lang_supported[$lang_type]);
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<div class="x_modal"|cond="!$use_in_page" id="g11n" hidden|cond="!$use_in_page">
<div class="x_modal-header" cond="!$use_in_page">
<h1>{$lang->cmd_multilingual}</h1>
</div>
<div class="x_modal-body"|cond="!$use_in_page">
<div class="x_tabbable">
<ul class="x_nav x_nav-tabs">
<li class="x_active"|cond="!$use_in_page"><a href="#lang_create">{$lang->cmd_insert}</a></li>
<li class="x_active"|cond="$use_in_page"><a href="#lang_search">{$lang->cmd_search}</a></li>
</ul>
<div class="x_tab-content">
<form action="" class="x_tab-pane <!--@if(!$use_in_page)-->x_active<!--@end--> item" id="lang_create">
<fieldset class="editMode">
<textarea loop="$lang_supported => $code, $name" class="{$code}" rows="1" cols="12" title="{$name}" style="margin-right:5px"></textarea>
<div class="x_clearfix btnArea">
<button type="reset" class="x_btn cancel x_pull-left">{$lang->cmd_cancel}</button>
<button type="submit" class="x_btn x_btn-primary save-useit">{$lang->use_after_save}</button>
</div>
</fieldset>
</form>
<div class="x_tab-pane <!--@if($use_in_page)-->x_active<!--@end-->" id="lang_search">
</div>
</div>
</div>
</div>
<div cond="!$use_in_page" class="x_modal-footer">
<button type="button" class="x_btn x_pull-left" data-hide="#g11n">{$lang->cmd_close}</button>
<p class="x_pull-right">
{@
$link = '<a href="' . getUrl('', 'module', 'admin', 'act', 'dispAdminConfigGeneral') . '">' . $lang->about_language_list_manage['link'] . '</a>';
$text = sprintf($lang->about_language_list_manage['text'], $link);
}
{$text}
</p>
</div>
</div>
<script>
xe.confirm_delete = '{$lang->confirm_delete}';
xe.msg_confirm_save_and_use_multilingual = '{$lang->msg_confirm_save_and_use_multilingual}';
xe.msg_empty_multilingual = '{$lang->msg_empty_multilingual}';
xe.cmd_set_multilingual_text = '{$lang->cmd_set_multilingual_text}';
xe.cmd_remove_multilingual_text = '{$lang->cmd_remove_multilingual_text}';
xe.use_after_save = '{$lang->use_after_save}';
xe.cmd_save = '{$lang->cmd_save}';
</script>

View file

@ -0,0 +1,66 @@
{@
/* move current language to the top */
$a = array($lang_type=>$lang_supported[$lang_type]);
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<p cond="!$name">{sprintf($lang->about_multilingual_search_result, $total_count, $lang_code, $lang_supported[$lang_code])}</p>
<fieldset class="list">
<form loop="$lang_code_list => $no, $val" action="" class="item">
<a class="set" href="#lang-{$no}" data-toggle data-lang_code="{$val->name}"><span>{$val->value}</span></a>
<fieldset id="lang-{$no}" style="display:none">
<textarea loop="$lang_supported => $code, $lname" disabled class="{$code}" data-lang="{$code}" rows="1" cols="12" title="{$lname}" style="margin-right:5px"></textarea>
<div class="x_clearfix">
<span class="x_pull-left x_btn-group">
<button type="button" class="x_btn modify">{$lang->cmd_modify}</button>
<button type="reset" class="x_btn cancel">{$lang->cmd_cancel}</button>
<button type="button" class="x_btn delete">{$lang->cmd_delete}</button>
</span>
<span class="x_pull-right">
<button type="button" class="x_btn useit x_btn-primary">{$lang->use}</button>
<button type="submit" class="x_btn save x_btn-primary">{$lang->use_after_save}</button>
</span>
</div>
</fieldset>
</form>
</fieldset>
<div class="x_clearfix">
<form cond="$page_navigation" action="./" class="x_pagination x_pull-left" data-search_keyword="{htmlspecialchars($search_keyword)}" data-page="{$page}" data-current_lang="{$lang_code}" no-error-return-url="true">
<ul>
<li class="x_disabled"|cond="!$page || $page == 1"><a href="#" data-page="1" data-search_keyword="{htmlspecialchars($search_keyword)}">&laquo; {$lang->first_page}</a></li>
<block cond="$page_navigation->first_page != 1 && $page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page - 1 && $page_navigation->page_count != $page_navigation->total_page">
{@$isGoTo = true}
<li>
<a href="#goTo" data-toggle title="{$lang->cmd_go_to_page}">&hellip;</a>
<span cond="$isGoTo" id="goTo" class="x_input-append">
<input type="number" min="1" max="{$page_navigation->last_page}" required name="page" title="{$lang->cmd_go_to_page}" />
<button type="submit" class="x_add-on">Go</button>
</span>
</li>
</block>
<!--@while($page_no = $page_navigation->getNextPage())-->
{@$last_page = $page_no}
<li class="x_active"|cond="$page_no == $page"><a href="#" data-page="{$page_no}" data-search_keyword="{htmlspecialchars($search_keyword)}">{$page_no}</a></li>
<!--@end-->
<block cond="$last_page != $page_navigation->last_page && $last_page + 1 != $page_navigation->last_page">
{@$isGoTo = true}
<li>
<a href="#goTo" data-toggle title="{$lang->cmd_go_to_page}">&hellip;</a>
<span cond="$isGoTo" id="goTo" class="x_input-append">
<input type="number" min="1" max="{$page_navigation->last_page}" required name="page" title="{$lang->cmd_go_to_page}" />
<button type="submit" class="x_add-on">Go</button>
</span>
</li>
</block>
<li class="x_disabled"|cond="$page == $page_navigation->last_page"><a href="#" data-page="{$page_navigation->last_page}" data-search_keyword="{htmlspecialchars($search_keyword)}" title="{$page_navigation->last_page}">{$lang->last_page} &raquo;</a></li>
</ul>
</form>
<form action="" class="search center x_input-append x_pull-right">
<select name="lang_code" style="margin-right:4px">
<option loop="$lang_supported => $code, $lname" value="{$code}" selected="selected"|cond="$code == $lang_code">{$lname}</option>
</select>
<input type="search" name="search_keyword" title="Search" value="<!--@if($name)-->{htmlspecialchars($lang_code_list[1]->value)}<!--@else-->{htmlspecialchars($search_keyword)}<!--@end-->">
<button class="x_btn x_btn-inverse" type="submit">{$lang->cmd_search}</button>
<button cond="$search_keyword || $name" id="search_cancel" class="x_btn" type="button">{$lang->cmd_cancel}</button>
</form>
</div>

View file

@ -1,8 +1,7 @@
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/module/tpl/skin_config/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form action="./" method="post" enctype="multipart/form-data" class="form">
<form action="./" method="post" enctype="multipart/form-data" class="x_form-horizontal">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="vid" value="{$vid}" />
<input type="hidden" name="mid" value="{$mid}" />
@ -10,124 +9,128 @@
<input type="hidden" name="_mode" value="{$mode}" />
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
<input type="hidden" name="page" value="{$page}" />
<h2 class="h2">{$lang->skin_default_info}</h2>
<ul>
<li>
<p class="q">{$lang->skin}</p>
<p class="a">{$skin_info->title}</p>
</li>
<li>
<p class="q">{$lang->skin_author}</p>
<p class="a">
<input type="hidden" name="xe_validator_id" value="modules/module/tpl/skin_config/1" />
<section class="section">
<h1>{$lang->skin_default_info}</h1>
<div class="x_control-group">
<label class="x_control-label">
{$lang->skin}
</label>
<div class="x_controls" style="padding-top:3px">
{$skin_info->title}
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">
{$lang->skin_author}
</label>
<div class="x_controls" style="padding-top:3px">
<block loop="$skin_info->author=>$author">
{$author->name}
<block cond="$author->homepage || $author->email_address">
(<a href="{$author->homepage}" onclick="window.open(this.href);return false;" cond="$author->homepage">{$author->homepage}</a>
(<a href="{$author->homepage}" target="_blank" cond="$author->homepage">{$author->homepage}</a>
<block cond="$author->homepage && $author->email_address">, </block>
<a href="mailto:{$author->email_address}" cond="$author->email_address">{$author->email_address}</a>)
</block><br />
</block>
</p>
</li>
<li cond="$skin_info->homepage">
<p class="q">{$lang->homepage}</p>
<p class="a"><a href="{$skin_info->homepage}" onclick="window.open(this.href);return false;">{$skin_info->homepage}</a></p>
</li>
<li>
<p class="q">{$lang->date}</p>
<p class="a">{zdate($skin_info->date, 'Y-m-d')}</p>
</li>
<li cond="$skin_info->license || $skin_info->license_link">
<p class="q">{$lang->skin_license}</p>
<p class="a">{nl2br(trim($skin_info->license))}</p>
<p cond="$skin_info->license_link"><a href="{$skin_info->license_link}" onclick="window.close(); return false;">{$skin_info->license_link}</a></p>
</li>
<li cond="$skin_info->description">
<p class="q">{$lang->description}</p>
<p class="a">{nl2br(trim($skin_info->description))}</p>
</li>
</ul>
</div>
</div>
<div class="x_control-group" cond="$skin_info->homepage">
<label class="x_control-label">{$lang->homepage}</label>
<div class="x_controls" style="padding-top:3px"><a href="{$skin_info->homepage}" target="_blank">{$skin_info->homepage}</a></div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->date}</label>
<div class="x_controls" style="padding-top:3px">{zdate($skin_info->date, 'Y-m-d')}</div>
</div>
<div class="x_control-group" cond="$skin_info->license || $skin_info->license_link">
<label class="x_control-label">{$lang->skin_license}</label>
<div class="x_controls" style="padding-top:3px">
{nl2br(trim($skin_info->license))}
<p cond="$skin_info->license_link"><a href="{$skin_info->license_link}" target="_blank">{$skin_info->license_link}</a></p>
</div>
</div>
<div class="x_control-group" cond="$skin_info->description">
<label class="x_control-label">{$lang->description}</label>
<div class="x_controls" style="padding-top:3px">{nl2br(trim($skin_info->description))}</div>
</div>
</section>
<h2 class="h2">{$lang->extra_vars}</h2>
<ul>
<li cond="$skin_info->colorset" class="colorset">
<p class="q">{$lang->colorset}</p>
<div class="a">
<!--@if(count($skin_info->extra_vars) > 0)-->
<section class="section">
<h1>{$lang->extra_vars}</h1>
<div class="x_control-group" cond="$skin_info->colorset">
<label class="x_control-label">{$lang->colorset}</label>
<div class="x_controls">
<block loop="$skin_info->colorset => $key, $val">
<!--@if($val->screenshot)-->
{@ $_img_info = getImageSize($val->screenshot); $_height = $_img_info[1]+40; $_width = $_img_info[0]+20; $_talign = "center"; }
<!--@else-->
{@ $_width = 200; $_height = 20; $_talign = "left"; }
<!--@end-->
<div style="display:inline-block;text-align:{$_talign};margin-bottom:1em;width:{$_width}px;height:{$_height}px;margin-right:10px;">
<input type="radio" name="colorset" value="{$val->name}" id="colorset_{$key}" checked="checked"|cond="$skin_vars['colorset']->value==$val->name" />
<label for="colorset_{$key}">{$val->title}</label>
<block cond="$val->screenshot">
<br />
<img src="../../../{$val->screenshot}" alt="{$val->title}" style="border:1px solid #888888;padding:2px;margin:2px;"/>
</block>
<div class="x_thumbnail"|cond="$val->screenshot" style="display:inline-block;width:{$_width}px;margin-right:10px;">
<label for="colorset_{$key}">
<input type="radio" name="colorset" value="{$val->name}" id="colorset_{$key}" checked="checked"|cond="$skin_vars['colorset']->value==$val->name" />
{$val->title}
</label>
<img src="../../../{$val->screenshot}" alt="{$val->title}" cond="$val->screenshot" />
</div>
</block>
</div>
</li>
</div>
<block loop="$skin_info->extra_vars => $key, $val">
<block cond="$val->group && ((!$group) || $group != $val->group)">
{@$group = $val->group}
</ul>
<h2 class="h2">{$group}</h2>
<ul>
</section>
<section class="section">
<h2>{$group}</h2>
</block>
<li>
<p class="q">{$val->title}</p>
<p cond="$val->type == 'text'" class="a multiLangEdit">
{@$use_multilang = true}
<input type="hidden" name="{$val->name}" value="<!--@if(strpos($val->value, '$user_lang->') === false)-->{$val->value}<!--@else-->{htmlspecialchars($val->value)}<!--@end-->" class="vLang" />
<input type="text" value="{$val->value}" class="vLang" />
<span class="desc"><a href="#langEdit" class="editUserLang tgAnchor">{$lang->cmd_set_multilingual}</a></span>
</p>
<div cond="$val->type == 'textarea'" class="a multiLangEdit">
{@$use_multilang_textarea = true}
<input type="hidden" name="{$val->name}" value="<!--@if(strpos($val->value, '$user_lang->') === false)-->{$val->value}<!--@else-->{htmlspecialchars($val->value)}<!--@end-->" class="vLang" />
<textarea rows="8" cols="42" class="vLang">{$val->value}</textarea>
<span class="desc"><a href="#langEditTextarea" class="editUserLang tgAnchor">{$lang->cmd_set_multilingual}</a></span>
</div>
<p cond="$val->type == 'select'" class="a">
<select name="{$val->name}">
<div class="x_control-group">
<label class="x_control-label" for="{$val->name}"|cond="$val->type!='text'&&$val->type!='textarea'" for="lang_{$val->name}"|cond="$val->type=='text'||$val->type=='textarea'">{$val->title}</label>
<div class="x_controls">
<!--// text -->
<input cond="$val->type == 'text'" type="text" name="{$val->name}" id="{$val->name}" value="<!--@if(strpos($val->value, '$user_lang->') === false)-->{$val->value}<!--@else-->{htmlspecialchars($val->value)}<!--@end-->" class="lang_code" />
<!--// textarea -->
<textarea cond="$val->type == 'textarea'" rows="8" cols="42" name="{$val->name}" id="{$val->name}" class="lang_code"><!--@if(strpos($val->value, '$user_lang->') === false)-->{$val->value}<!--@else-->{htmlspecialchars($val->value)}<!--@end--></textarea>
<!--// select -->
<select cond="$val->type == 'select'" name="{$val->name}" id="{$val->name}">
<option loop="$val->options => $k, $v" value="{$v->value}" selected="selected"|cond="$v->value == $val->value">{$v->title}</option>
</select>
</p>
<p cond="$val->type == 'checkbox'" class="a">
<span loop="$val->options => $k, $v">
<input type="checkbox" name="{$val->name}[]" value="{$v->value}" id="ch_{$key}_{$k}" checked="checked"|cond="@in_array($v->value, $val->value)" class="checkbox" />
<label for="ch_{$key}_{$k}">{$v->title}</label>
</span>
</p>
<p cond="$val->type == 'radio'" class="a">
<span loop="$val->options => $k, $v">
<input type="radio" name="{$val->name}" value="{$v->value}" id="ch_{$key}_{$k}" checked="checked"|cond="$v->value==$val->value" />
<label for="ch_{$key}_{$k}">{$v->title}</label>
</span>
</p>
<div cond="$val->type == 'image'" class="a">
<div cond="$val->value">
<img src="{$val->value}" /><br />
<input type="checkbox" name="del_{$val->name}" value="Y" id="del_{$val->name}" class="checkbox" />
<label for="del_{$val->name}">{$lang->cmd_delete}</label>
<!--// checkbox -->
<label cond="$val->type == 'checkbox'" loop="$val->options => $k, $v" for="ch_{$key}_{$k}" class="x_inline"><input type="checkbox" name="{$val->name}[]" value="{$v->value}" id="ch_{$key}_{$k}" checked="checked"|cond="@in_array($v->value, $val->value)" class="checkbox" /> {$v->title}</label>
<!--// radio -->
<label cond="$val->type == 'radio'" for="ch_{$key}_{$k}" loop="$val->options => $k, $v" class="x_inline"><input type="radio" name="{$val->name}" value="{$v->value}" id="ch_{$key}_{$k}" checked="checked"|cond="$v->value==$val->value" /> {$v->title}</label>
<!--// image -->
<block cond="$val->type == 'image'">
<div cond="$val->value" class="x_thumbnail" style="max-width:210px;margin:0 0 10px 0">
<img src="{$val->value}" />
<label for="del_{$val->name}" style="padding:8px 0 0 0"><input type="checkbox" name="del_{$val->name}" value="Y" id="del_{$val->name}" class="checkbox" /> {$lang->cmd_delete}</label>
</div>
<input type="file" name="{$val->name}" value="" />
</block>
<!--// colorpicker-->
<div cond="$val->type == 'colorpicker'">
{@ $use_colorpicker = true; }
<input type="text" class="color-indicator" name="{$val->name}" id="{$val->name}" value="{$val->value}" />
<p id="categoy_color_help" hidden style="margin:8px 0 0 0">{$lang->about_category_color}</p>
</div>
<input type="file" name="{$val->name}" value="" />
<a href="#about_{$val->name}" data-toggle class="x_icon-question-sign" cond="$val->description" style="vertical-align:top;margin-top:5px"|cond="$val->type == 'textarea'">{$lang->help}</a>
<p class="x_help-block" id="about_{$val->name}" hidden cond="$val->description">{nl2br(trim($val->description))}</p>
</div>
<p cond="$val->description" class="desc">{nl2br(trim($val->description))}</p>
</li>
</div>
</block>
</ul>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_registration}" /></span>
</section>
<!--@end-->
<div class="btnArea">
<button class="x_btn x_btn-primary x_pull-right" type="submit">{$lang->cmd_registration}</button>
</div>
</form>
<include target="../../module/tpl/include.multilang.html" />
<include target="../../module/tpl/include.multilang.textarea.html" />
<!--@if($use_colorpicker)-->
<!--%load_js_plugin("ui.colorpicker")-->
<!--@end-->

View file

@ -1,85 +1,81 @@
<load target="../../admin/tpl/css/admin.css" usecdn="true" />
<h1 class="h1">{$skin_info->title}</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<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>
<h1>{$skin_info->title}</h1>
<table class="x_table x_table-striped x_table-hover">
<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>
<!--@if($skin_info->history)-->
<h1 class="h1">{$lang->skin_history}</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<col width="100" />
<col />
<h1>{$lang->skin_history}</h1>
<table class="x_table x_table-striped x_table-hover">
<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>
<!--@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>
<!--@endif-->

View file

@ -1,4 +1,4 @@
<script type="text/javascript">//<![CDATA[
<script>//<![CDATA[
top.location.href = top.location.href;
//]]>
</script>