tag 1.4.1.0

git-svn-id: http://xe-core.googlecode.com/svn/trunk@7414 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
haneul 2010-04-29 06:55:55 +00:00
commit fd91cb9e30
152 changed files with 11316 additions and 10064 deletions

View file

@ -53,9 +53,9 @@
</description> </description>
<description xml:lang="ru"> <description xml:lang="ru">
Этот blogApi аддон поддерживает metaWeblog. Этот blogApi аддон поддерживает metaWeblog.
Включая это опицией использовать, позволяет RSD тегу быть доступным для каждого модуля. Используя этот аддон, RSD тег становится доступным для каждого модуля.
URL для api - http://setup_path/module_name/api. URL для api - http://setup_path/module_name/api.
Только выбор опции использовать включает поведение RSD тега и api. тег RSD и api работают только при включенном аддоне.
</description> </description>
<description xml:lang="zh-TW"> <description xml:lang="zh-TW">
支援MetaWeblog的部落格API附加元件。 支援MetaWeblog的部落格API附加元件。

View file

@ -21,6 +21,7 @@
$target_acts = array('procBoardInsertDocument','procBoardInsertComment','procIssuetrackerInsertIssue','procIssuetrackerInsertHistory','procTextyleInsertComment'); $target_acts = array('procBoardInsertDocument','procBoardInsertComment','procIssuetrackerInsertIssue','procIssuetrackerInsertHistory','procTextyleInsertComment');
if($addon_info->apply_find_account=='apply') $target_acts[] = 'procMemberFindAccount'; if($addon_info->apply_find_account=='apply') $target_acts[] = 'procMemberFindAccount';
if($addon_info->apply_resend_auth_mail=='apply') $target_acts[] = 'procMemberResendAuthMail'; if($addon_info->apply_resend_auth_mail=='apply') $target_acts[] = 'procMemberResendAuthMail';
if($addon_info->apply_signup=='apply') $target_acts[] = 'procMemberInsert';
Context::addHtmlHeader('<script type="text/javascript"> var captchaTargetAct = new Array("'.implode('","',$target_acts).'"); </script>'); Context::addHtmlHeader('<script type="text/javascript"> var captchaTargetAct = new Array("'.implode('","',$target_acts).'"); </script>');

View file

@ -5,6 +5,7 @@
<title xml:lang="vi">Captcha Addon</title> <title xml:lang="vi">Captcha Addon</title>
<title xml:lang="zh-CN">验证码插件</title> <title xml:lang="zh-CN">验证码插件</title>
<title xml:lang="jp">Captchaアドオン</title> <title xml:lang="jp">Captchaアドオン</title>
<title xml:lang="ru">Аддон Captcha</title>
<title xml:lang="zh-TW">圖形驗證</title> <title xml:lang="zh-TW">圖形驗證</title>
<description xml:lang="ko"> <description xml:lang="ko">
프로그램 글 등록기를 막기 위해 게시판/ issueTracker에서 글/ 댓글을 입력하려 할 때 이미지를 보여주고 글에 해당하는 이미지를 선택하게 하는 애드온입니다. 프로그램 글 등록기를 막기 위해 게시판/ issueTracker에서 글/ 댓글을 입력하려 할 때 이미지를 보여주고 글에 해당하는 이미지를 선택하게 하는 애드온입니다.
@ -25,20 +26,25 @@
<description xml:lang="jp"> <description xml:lang="jp">
ボット(bot)がプログラムによるスパム行為を防ぐために、掲示板issueTrackerで書き込み・コメントを登録する際、ランダムな文字や数字の列を画面に表示し、表示されたものと一致した情報を入力した時、登録が出来るようにするアドオンです。 ボット(bot)がプログラムによるスパム行為を防ぐために、掲示板issueTrackerで書き込み・コメントを登録する際、ランダムな文字や数字の列を画面に表示し、表示されたものと一致した情報を入力した時、登録が出来るようにするアドオンです。
ログインしてない時だけ、動作します。 ログインしてない時だけ、動作します。
</description>
<description xml:lang="ru">
To block spam written by programs, let users to choose a suitable image to text when writing a posting or comment.
This addon applies only to not-logged-in users.
</description> </description>
<description xml:lang="zh-TW"> <description xml:lang="zh-TW">
此元件可防止機器人程式的垃圾留言,非註冊用戶在討論板/問題追蹤發表主題或評論時,必須要先選對畫面中所顯示的圖案才能發表。 此元件可防止機器人程式的垃圾留言,非註冊用戶在討論板/問題追蹤發表主題或評論時,必須要先選對畫面中所顯示的圖案才能發表。
</description> </description>
<version>0.1</version> <version>0.2</version>
<date>2009-02-20</date> <date>2009-02-20</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com"> <author email_address="developers@xpressengine.com" link="http://www.xpressengine.com">
<name xml:lang="ko">zero</name> <name xml:lang="ko">XE</name>
<name xml:lang="zh-CN">zero</name> <name xml:lang="zh-CN">XE</name>
<name xml:lang="jp">zero</name> <name xml:lang="jp">XE</name>
<name xml:lang="zh-TW">zero</name> <name xml:lang="zh-TW">XE</name>
<name xml:lang="en">zero</name> <name xml:lang="en">XE</name>
<name xml:lang="vi">zero</name> <name xml:lang="ru">XE</name>
<name xml:lang="vi">XE</name>
</author> </author>
<extra_vars> <extra_vars>
@ -48,12 +54,14 @@
<title xml:lang="jp">Captchaを表示する対象</title> <title xml:lang="jp">Captchaを表示する対象</title>
<title xml:lang="zh-TW">選擇目標</title> <title xml:lang="zh-TW">選擇目標</title>
<title xml:lang="en">Captcha Target</title> <title xml:lang="en">Captcha Target</title>
<title xml:lang="ru">Captcha Target</title>
<title xml:lang="vi">Mục tiêu Captcha hiển thị</title> <title xml:lang="vi">Mục tiêu Captcha hiển thị</title>
<description xml:lang="ko">글/댓글 등록시 captcha가 동작할 대상을 정할 수 있습니다. 관리자는 무조건 제외됩니다</description> <description xml:lang="ko">글/댓글 등록시 captcha가 동작할 대상을 정할 수 있습니다. 관리자는 무조건 제외됩니다</description>
<description xml:lang="zh-CN">可以指定验证码应用对象(管理员除外)。</description> <description xml:lang="zh-CN">可以指定验证码应用对象(管理员除外)。</description>
<description xml:lang="jp">管理者を除き、書き込み・コメントを入力する際にcaptchaイメージを見せる対象を設定します。</description> <description xml:lang="jp">管理者を除き、書き込み・コメントを入力する際にcaptchaイメージを見せる対象を設定します。</description>
<description xml:lang="zh-TW">除了管理員,在發表主題或評論時,設定圖形驗證應用的對象。</description> <description xml:lang="zh-TW">除了管理員,在發表主題或評論時,設定圖形驗證應用的對象。</description>
<description xml:lang="en">You may specify targets CAPTCHA work. It's not applied when administrator writes.</description> <description xml:lang="en">You may specify targets CAPTCHA work. It's not applied when administrator writes.</description>
<description xml:lang="ru">You may specify targets CAPTCHA work. It's not applied when administrator writes.</description>
<description xml:lang="vi">Khi gửi bài, bình luận, Capcha sẽ hiển thị để xác nhận hành động của người sử dụng. Chức năng này không hoạt động với người quản lý.</description> <description xml:lang="vi">Khi gửi bài, bình luận, Capcha sẽ hiển thị để xác nhận hành động của người sử dụng. Chức năng này không hoạt động với người quản lý.</description>
<options value=""> <options value="">
<title xml:lang="ko">로그인하지 않은 사용자</title> <title xml:lang="ko">로그인하지 않은 사용자</title>
@ -61,6 +69,7 @@
<title xml:lang="jp">ログインしてないユーザー</title> <title xml:lang="jp">ログインしてないユーザー</title>
<title xml:lang="zh-TW">非用戶</title> <title xml:lang="zh-TW">非用戶</title>
<title xml:lang="en">Not logged-in users</title> <title xml:lang="en">Not logged-in users</title>
<title xml:lang="ru">Not logged-in users</title>
<title xml:lang="vi">Người dùng chưa đăng nhập</title> <title xml:lang="vi">Người dùng chưa đăng nhập</title>
</options> </options>
<options value="all"> <options value="all">
@ -69,6 +78,7 @@
<title xml:lang="jp">すべてのユーザー</title> <title xml:lang="jp">すべてのユーザー</title>
<title xml:lang="zh-TW">所有用戶</title> <title xml:lang="zh-TW">所有用戶</title>
<title xml:lang="en">All users</title> <title xml:lang="en">All users</title>
<title xml:lang="ru">All users</title>
<title xml:lang="vi">Tất cả mọi người</title> <title xml:lang="vi">Tất cả mọi người</title>
</options> </options>
</var> </var>
@ -78,12 +88,14 @@
<title xml:lang="jp">動作方式</title> <title xml:lang="jp">動作方式</title>
<title xml:lang="zh-TW">行為模式</title> <title xml:lang="zh-TW">行為模式</title>
<title xml:lang="en">How it works</title> <title xml:lang="en">How it works</title>
<title xml:lang="ru">How it works</title>
<title xml:lang="vi">Sử dụng</title> <title xml:lang="vi">Sử dụng</title>
<description xml:lang="ko">"1번만 동작"을 선택하시면 1번만 동작후 상태를 저장해서 다음부터 물어보지 않고 그렇지 않으면 매번 물어보게 됩니다</description> <description xml:lang="ko">"1번만 동작"을 선택하시면 1번만 동작후 상태를 저장해서 다음부터 물어보지 않고 그렇지 않으면 매번 물어보게 됩니다</description>
<description xml:lang="zh-CN">"一次"就是每个IP只出现一次验证。</description> <description xml:lang="zh-CN">"一次"就是每个IP只出现一次验证。</description>
<description xml:lang="jp">「1回だけ表示」を選択すると、最初だけ動作した後、その情報を記憶して次回からはCaptchaを見せないようにします。また、もう一つのオプションは毎回Captchaを表示します。</description> <description xml:lang="jp">「1回だけ表示」を選択すると、最初だけ動作した後、その情報を記憶して次回からはCaptchaを見せないようにします。また、もう一つのオプションは毎回Captchaを表示します。</description>
<description xml:lang="zh-TW">選擇"單次",產生第一次動作後,下次不會再顯示;選擇"每次"則會一直顯示。</description> <description xml:lang="zh-TW">選擇"單次",產生第一次動作後,下次不會再顯示;選擇"每次"則會一直顯示。</description>
<description xml:lang="en">If you choose "Once", CAPTCHA works only once for the user by storing status. Otherwise, this addon would show an image every time the user writes.</description> <description xml:lang="en">If you choose "Once", CAPTCHA works only once for the user by storing status. Otherwise, this addon would show an image every time the user writes.</description>
<description xml:lang="ru">If you choose "Once", CAPTCHA works only once for the user by storing status. Otherwise, this addon would show an image every time the user writes.</description>
<description xml:lang="vi">Nếu chọn "Chỉ một lần" thì sau lần hiển thị đó Capcha sẽ không hiển thị với người sử dụng đó nữa.</description> <description xml:lang="vi">Nếu chọn "Chỉ một lần" thì sau lần hiển thị đó Capcha sẽ không hiển thị với người sử dụng đó nữa.</description>
<options value="onetime"> <options value="onetime">
<title xml:lang="ko">1번만 동작</title> <title xml:lang="ko">1번만 동작</title>
@ -92,6 +104,7 @@
<title xml:lang="zh-TW">單次</title> <title xml:lang="zh-TW">單次</title>
<title xml:lang="vi">Chỉ một lần</title> <title xml:lang="vi">Chỉ một lần</title>
<title xml:lang="en">once</title> <title xml:lang="en">once</title>
<title xml:lang="ru">1 раз</title>
</options> </options>
<options value="everytime"> <options value="everytime">
<title xml:lang="ko">매번 동작</title> <title xml:lang="ko">매번 동작</title>
@ -99,6 +112,7 @@
<title xml:lang="jp">毎回表示</title> <title xml:lang="jp">毎回表示</title>
<title xml:lang="zh-TW">每次</title> <title xml:lang="zh-TW">每次</title>
<title xml:lang="en">every time</title> <title xml:lang="en">every time</title>
<title xml:lang="ru">каждый раз</title>
<title xml:lang="vi">Luôn sử dụng</title> <title xml:lang="vi">Luôn sử dụng</title>
</options> </options>
</var> </var>
@ -106,29 +120,33 @@
<title xml:lang="ko">비밀번호 찾기 적용</title> <title xml:lang="ko">비밀번호 찾기 적용</title>
<title xml:lang="zh-CN">应用到查找密码功能</title> <title xml:lang="zh-CN">应用到查找密码功能</title>
<title xml:lang="jp">비밀번호 찾기 적용</title> <title xml:lang="jp">비밀번호 찾기 적용</title>
<title xml:lang="zh-TW">비밀번호 찾기 적용</title> <title xml:lang="zh-TW">忘記密碼</title>
<title xml:lang="en">applying to an action finding account</title> <title xml:lang="en">applying to an action finding account</title>
<title xml:lang="ru">applying to an action finding account</title>
<title xml:lang="vi">Khi lấy lại mật khẩu</title> <title xml:lang="vi">Khi lấy lại mật khẩu</title>
<description xml:lang="ko">적용으로 하시면 비밀번호 찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description> <description xml:lang="ko">적용으로 하시면 비밀번호 찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
<description xml:lang="zh-CN">启用此项功能可以有效地拦截以查找密码名义发送的垃圾邮件。</description> <description xml:lang="zh-CN">启用此项功能可以有效地拦截以查找密码名义发送的垃圾邮件。</description>
<description xml:lang="jp">적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description> <description xml:lang="jp">적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
<description xml:lang="zh-TW">적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description> <description xml:lang="zh-TW">적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
<description xml:lang="en">If you set this option as apply, CAPTCHA will work for finding account action, too.</description> <description xml:lang="en">If you set this option as apply, CAPTCHA will work for finding account action, too.</description>
<description xml:lang="ru">If you set this option as apply, CAPTCHA will work for finding account action, too.</description>
<description xml:lang="vi">Nếu áp dụng, khi thành viên cần lấy lại mật khẩu khi lỡ quên, Capcha sẽ hiện thị để xác nhận việc này.</description> <description xml:lang="vi">Nếu áp dụng, khi thành viên cần lấy lại mật khẩu khi lỡ quên, Capcha sẽ hiện thị để xác nhận việc này.</description>
<options value=""> <options value="">
<title xml:lang="ko">적용하지 않음</title> <title xml:lang="ko">적용하지 않음</title>
<title xml:lang="zh-CN">不启用</title> <title xml:lang="zh-CN">不启用</title>
<title xml:lang="jp">적용하지 않음</title> <title xml:lang="jp">적용하지 않음</title>
<title xml:lang="zh-TW">적용하지 않음</title> <title xml:lang="zh-TW">關閉</title>
<title xml:lang="en">Not apply</title> <title xml:lang="en">Not apply</title>
<title xml:lang="ru">Not apply</title>
<title xml:lang="vi">Không áp dụng</title> <title xml:lang="vi">Không áp dụng</title>
</options> </options>
<options value="apply"> <options value="apply">
<title xml:lang="ko">적용</title> <title xml:lang="ko">적용</title>
<title xml:lang="zh-CN">启用</title> <title xml:lang="zh-CN">启用</title>
<title xml:lang="jp">적용</title> <title xml:lang="jp">적용</title>
<title xml:lang="zh-TW">적용</title> <title xml:lang="zh-TW">開啟</title>
<title xml:lang="en">Apply</title> <title xml:lang="en">Apply</title>
<title xml:lang="ru">Apply</title>
<title xml:lang="vi">Áp dụng</title> <title xml:lang="vi">Áp dụng</title>
</options> </options>
</var> </var>
@ -136,21 +154,58 @@
<title xml:lang="ko">인증 메일 재발송 적용</title> <title xml:lang="ko">인증 메일 재발송 적용</title>
<title xml:lang="zh-CN">应用到认证邮件重新发送功能</title> <title xml:lang="zh-CN">应用到认证邮件重新发送功能</title>
<title xml:lang="jp">인증 메일 재발송 적용</title> <title xml:lang="jp">인증 메일 재발송 적용</title>
<title xml:lang="zh-TW">인증 메일 재발송 적용</title> <title xml:lang="zh-TW">重寄認證信</title>
<title xml:lang="en">apply to an action resending authmail</title> <title xml:lang="en">apply to an action resending authmail</title>
<title xml:lang="ru">apply to an action resending authmail</title>
<title xml:lang="vi">Khi lấy lại mã kích hoạt</title> <title xml:lang="vi">Khi lấy lại mã kích hoạt</title>
<description xml:lang="ko">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description> <description xml:lang="ko">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
<description xml:lang="zh-CN">启用此项功能可以有效地拦截以重新发送认证邮件名义发送的垃圾邮件。</description> <description xml:lang="zh-CN">启用此项功能可以有效地拦截以重新发送认证邮件名义发送的垃圾邮件。</description>
<description xml:lang="jp">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description> <description xml:lang="jp">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
<description xml:lang="zh-TW">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description> <description xml:lang="zh-TW">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
<description xml:lang="en">If you set this option as apply, CAPTCHA will work for resending authmail action, too.</description> <description xml:lang="en">If you set this option as apply, CAPTCHA will work for resending authmail action, too.</description>
<description xml:lang="ru">If you set this option as apply, CAPTCHA will work for resending authmail action, too.</description>
<description xml:lang="vi">Nếu áp dụng, khi thành viên cần lấy lại mã kích hoạt thành viên, Capcha sẽ hiện thị để xác nhận việc này.</description> <description xml:lang="vi">Nếu áp dụng, khi thành viên cần lấy lại mã kích hoạt thành viên, Capcha sẽ hiện thị để xác nhận việc này.</description>
<options value="">
<title xml:lang="ko">적용하지 않음</title>
<title xml:lang="zh-CN">不启用</title>
<title xml:lang="jp">적용하지 않음</title>
<title xml:lang="zh-TW">關閉</title>
<title xml:lang="en">Not apply</title>
<title xml:lang="ru">Not apply</title>
<title xml:lang="vi">Không áp dụng</title>
</options>
<options value="apply">
<title xml:lang="ko">적용</title>
<title xml:lang="zh-CN">启用</title>
<title xml:lang="jp">적용</title>
<title xml:lang="zh-TW">開啟</title>
<title xml:lang="en">Apply</title>
<title xml:lang="ru">Apply</title>
<title xml:lang="vi">Áp dụng</title>
</options>
</var>
<var name="apply_signup" type="select">
<title xml:lang="ko">회원 가입 적용</title>
<title xml:lang="zh-CN">Apply to member signup</title>
<title xml:lang="jp">인증 메일 재발송 적용</title>
<title xml:lang="zh-TW">인증 메일 재발송 적용</title>
<title xml:lang="en">Apply to member signup</title>
<title xml:lang="ru">Apply to member signup</title>
<title xml:lang="vi">Apply to member signup</title>
<description xml:lang="ko">적용으로 하시면 회원가입 기능에도 적용되어 악의적인 봇(또는 프로그램)의 회원가입을 막을 수 있습니다.</description>
<description xml:lang="zh-CN">적용으로 하시면 회원가입 기능에도 적용되어 악의적인 봇(또는 프로그램)의 회원가입을 막을 수 있습니다.</description>
<description xml:lang="jp">적용으로 하시면 회원가입 기능에도 적용되어 악의적인 봇(또는 프로그램)의 회원가입을 막을 수 있습니다.</description>
<description xml:lang="zh-TW">If you set this option as apply, CAPTCHA will work for signup action, too.</description>
<description xml:lang="en">If you set this option as apply, CAPTCHA will work for signup action, too.</description>
<description xml:lang="ru">If you set this option as apply, CAPTCHA will work for signup action, too.</description>
<description xml:lang="vi">If you set this option as apply, CAPTCHA will work for signup action, too.</description>
<options value=""> <options value="">
<title xml:lang="ko">적용하지 않음</title> <title xml:lang="ko">적용하지 않음</title>
<title xml:lang="zh-CN">不启用</title> <title xml:lang="zh-CN">不启用</title>
<title xml:lang="jp">적용하지 않음</title> <title xml:lang="jp">적용하지 않음</title>
<title xml:lang="zh-TW">적용하지 않음</title> <title xml:lang="zh-TW">적용하지 않음</title>
<title xml:lang="en">Not apply</title> <title xml:lang="en">Not apply</title>
<title xml:lang="ru">Not apply</title>
<title xml:lang="vi">Không áp dụng</title> <title xml:lang="vi">Không áp dụng</title>
</options> </options>
<options value="apply"> <options value="apply">
@ -159,6 +214,7 @@
<title xml:lang="jp">적용</title> <title xml:lang="jp">적용</title>
<title xml:lang="zh-TW">적용</title> <title xml:lang="zh-TW">적용</title>
<title xml:lang="en">Apply</title> <title xml:lang="en">Apply</title>
<title xml:lang="ru">Apply</title>
<title xml:lang="vi">Áp dụng</title> <title xml:lang="vi">Áp dụng</title>
</options> </options>
</var> </var>

View file

@ -0,0 +1,21 @@
<?php
/**
* @file ko.lang.php
* @author zero (zero@nzeo.com)
* @brief 한국어 언어팩
**/
$lang->about_captcha = "Пожалуйста, выберите картинки, соответсвующие словам внизу";
$lang->target_captcha = array(
"airplane" => "самолет",
"apple" => "яблоко",
"book" => "книга",
"camera" => "камера",
"dog" => "собака",
"earth" => "планета",
"flag" => "флаг",
"mobile" => "мобильный телефон",
"note" => "нота",
"skeleton" => "череп",
);
?>

View file

@ -7,7 +7,7 @@
<title xml:lang="vi">Counter Addon</title> <title xml:lang="vi">Counter Addon</title>
<title xml:lang="ge">Counter Addon</title> <title xml:lang="ge">Counter Addon</title>
<title xml:lang="es">Addon contador básico</title> <title xml:lang="es">Addon contador básico</title>
<title xml:lang="ru">Аддон для базового счетчика</title> <title xml:lang="ru">Аддон счетчика</title>
<title xml:lang="zh-TW">網站訪問統計</title> <title xml:lang="zh-TW">網站訪問統計</title>
<description xml:lang="ko"> <description xml:lang="ko">
XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다. XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다.

View file

@ -7,7 +7,7 @@
<title xml:lang="vi">Truyền thông</title> <title xml:lang="vi">Truyền thông</title>
<title xml:lang="ge">커뮤니케이션</title> <title xml:lang="ge">커뮤니케이션</title>
<title xml:lang="es">커뮤니케이션</title> <title xml:lang="es">커뮤니케이션</title>
<title xml:lang="ru">커뮤니케이션</title> <title xml:lang="ru">Общение</title>
<title xml:lang="zh-TW">交流</title> <title xml:lang="zh-TW">交流</title>
<description xml:lang="ko"> <description xml:lang="ko">
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다. 커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
@ -36,8 +36,7 @@
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다. 쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
</description> </description>
<description xml:lang="ru"> <description xml:lang="ru">
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다. Активизирует модуль Общение, позволяет использование сообщений между друзьями.
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
</description> </description>
<description xml:lang="zh-TW"> <description xml:lang="zh-TW">
讓會員擁有短訊和新增好友功能。 讓會員擁有短訊和新增好友功能。

View file

@ -5,5 +5,5 @@
* @brief Russian basic language pack * @brief Russian basic language pack
**/ **/
$lang->alert_new_message_arrived = 'У Вас есть новые сообщения. Хотите проверить сейчас?'; $lang->alert_new_message_arrived = 'У Вас новые сообщения. Проверите сейчас?';
?> ?>

View file

@ -7,7 +7,7 @@
<title xml:lang="vi">Bổ xung thông tin thành viên</title> <title xml:lang="vi">Bổ xung thông tin thành viên</title>
<title xml:lang="ge">회원 확장 정보 출력</title> <title xml:lang="ge">회원 확장 정보 출력</title>
<title xml:lang="es">회원 확장 정보 출력</title> <title xml:lang="es">회원 확장 정보 출력</title>
<title xml:lang="ru">회원 확장 정보 출력</title> <title xml:lang="ru">Экстраинформация о пользователях</title>
<title xml:lang="zh-TW">用戶延伸資料</title> <title xml:lang="zh-TW">用戶延伸資料</title>
<description xml:lang="ko"> <description xml:lang="ko">
회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요. 회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요.
@ -31,7 +31,7 @@
This addon displays a member's image name, image mark. This addon displays a member's image name, image mark.
</description> </description>
<description xml:lang="ru"> <description xml:lang="ru">
This addon displays a member's image name, image mark. Аддон изображает имя, марку картинки пользователя.
</description> </description>
<description xml:lang="zh-TW"> <description xml:lang="zh-TW">
可將用戶資料中的暱稱圖片、用戶圖示、簽名檔等資料顯示到頁面當中。 可將用戶資料中的暱稱圖片、用戶圖示、簽名檔等資料顯示到頁面當中。

View file

@ -5,6 +5,7 @@
<title xml:lang="zh-CN">手机XE插件</title> <title xml:lang="zh-CN">手机XE插件</title>
<title xml:lang="en">Mobile XE</title> <title xml:lang="en">Mobile XE</title>
<title xml:lang="vi">Mobile XE</title> <title xml:lang="vi">Mobile XE</title>
<title xml:lang="ru">Mobile XE</title>
<title xml:lang="zh-TW">XE行動上網</title> <title xml:lang="zh-TW">XE行動上網</title>
<description xml:lang="ko"> <description xml:lang="ko">
모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 WAP 태그로 출력하는 애드온입니다. 모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 WAP 태그로 출력하는 애드온입니다.
@ -25,6 +26,10 @@
<description xml:lang="vi"> <description xml:lang="vi">
Addon này hiển thị WAP Tag bởi việc phân tích thông tin khi kết nối bằng di động. Addon này hiển thị WAP Tag bởi việc phân tích thông tin khi kết nối bằng di động.
Chỉ hỗ trợ cho các định dạng wml, hdml, mhtml. Chỉ hỗ trợ cho các định dạng wml, hdml, mhtml.
</description>
<description xml:lang="ru">
Данный аддон показывает WAP теги, анализирую информацию мобильного соединения.
Поддерживаются только wml, hdml, mhtml форматы.
</description> </description>
<description xml:lang="zh-TW"> <description xml:lang="zh-TW">
透過行動工具上網時會將網頁轉換為WAP標籤顯示。 透過行動工具上網時會將網頁轉換為WAP標籤顯示。
@ -39,6 +44,7 @@
<name xml:lang="zh-CN">zero</name> <name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name> <name xml:lang="en">zero</name>
<name xml:lang="vi">zero</name> <name xml:lang="vi">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name> <name xml:lang="zh-TW">zero</name>
</author> </author>
@ -49,6 +55,7 @@
<name xml:lang="zh-CN">misol</name> <name xml:lang="zh-CN">misol</name>
<name xml:lang="en">misol</name> <name xml:lang="en">misol</name>
<name xml:lang="vi">misol</name> <name xml:lang="vi">misol</name>
<name xml:lang="ru">misol</name>
<name xml:lang="zh-TW">misol</name> <name xml:lang="zh-TW">misol</name>
</author> </author>
<log>언어선택 추가(WML, mHTML)</log> <log>언어선택 추가(WML, mHTML)</log>
@ -63,6 +70,7 @@
<title xml:lang="zh-CN">编码</title> <title xml:lang="zh-CN">编码</title>
<title xml:lang="en">Charset</title> <title xml:lang="en">Charset</title>
<title xml:lang="vi">Charset</title> <title xml:lang="vi">Charset</title>
<title xml:lang="ru">Charset</title>
<title xml:lang="zh-TW">編碼</title> <title xml:lang="zh-TW">編碼</title>
<description xml:lang="ko"> <description xml:lang="ko">
모바일 기기의 경우 UTF-8 문자셋을 인식하지 못할 수 있습니다. 모바일 기기의 경우 UTF-8 문자셋을 인식하지 못할 수 있습니다.
@ -88,6 +96,11 @@
UTF-8 không thể đọc được cho các công cụ di động. UTF-8 không thể đọc được cho các công cụ di động.
Những công cụ di động sẽ trình bày Charset đúng khi bạn nhập vào Charset bạn muốn. Những công cụ di động sẽ trình bày Charset đúng khi bạn nhập vào Charset bạn muốn.
Charset mặc định là UTF-8. Charset mặc định là UTF-8.
</description>
<description xml:lang="ru">
utf-8 may be read with mobile tools.
Mobile tools will display correct charset when you input charset you want.
Default charset is UTF-8.
</description> </description>
<description xml:lang="zh-TW"> <description xml:lang="zh-TW">
行動工具無法讀取utf-8編碼。 行動工具無法讀取utf-8編碼。

View file

@ -0,0 +1,17 @@
<?php
/**
* @file addons/mobile/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
// 언어 선택부분 by misol
$lang->president_lang = 'Дейсвующй язык';
$lang->select_lang = 'Выбор языка';
$lang->lang_return = 'Вернуться';
$lang->cmd_go_upper = 'Вверх';
$lang->cmd_go_home = 'На главную страницу';
$lang->cmd_view_sitemap = 'Посмотреть карту сайта';
?>

View file

@ -7,7 +7,7 @@
<title xml:lang="ge">OpenID Delegation ID</title> <title xml:lang="ge">OpenID Delegation ID</title>
<title xml:lang="es">Delegación ID para OpenID</title> <title xml:lang="es">Delegación ID para OpenID</title>
<title xml:lang="jp">OpenIDアドオン</title> <title xml:lang="jp">OpenIDアドオン</title>
<title xml:lang="ru">Аддон для делигирования доменного имени к OpenID</title> <title xml:lang="ru">Открытый ID(OpenID)</title>
<title xml:lang="zh-TW">OpenID</title> <title xml:lang="zh-TW">OpenID</title>
<description xml:lang="ko"> <description xml:lang="ko">
본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다. 본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다.
@ -38,8 +38,8 @@
必ず設定にて、OpenIDプロバイダーの関連情報を入力してから使用して下さい。 必ず設定にて、OpenIDプロバイダーの関連情報を入力してから使用して下さい。
</description> </description>
<description xml:lang="ru"> <description xml:lang="ru">
Этот аддон позволяет Вам использовать Вашу доменное имя как OpenID. Этот аддон позволяет Вам использовать Ваше доменное имя как OpenID.
Прежде, чем использовать, просто убедитесь, что установлены значения, имеющие отношение к провайдеру openid. Прежде, чем использовать, установите значения, имеющие отношение к openid-провайдеру .
</description> </description>
<description xml:lang="zh-TW"> <description xml:lang="zh-TW">
可將原本的域名當做OpenID來使用。 可將原本的域名當做OpenID來使用。
@ -78,7 +78,7 @@
<description xml:lang="ge">Bitte geben Sie Ihre openid.server Wert.</description> <description xml:lang="ge">Bitte geben Sie Ihre openid.server Wert.</description>
<description xml:lang="es">Ingrese el valor del openid.server.</description> <description xml:lang="es">Ingrese el valor del openid.server.</description>
<description xml:lang="jp">openid.server値を入力して下さい。</description> <description xml:lang="jp">openid.server値を入力して下さい。</description>
<description xml:lang="ru">Пожалуйста, введите Ваше значение openid сервера.</description> <description xml:lang="ru">Пожалуйста, введите Ваше значение openid.server</description>
<description xml:lang="zh-TW">請輸入 openid.server 值。</description> <description xml:lang="zh-TW">請輸入 openid.server 值。</description>
</var> </var>
<var name="delegate"> <var name="delegate">
@ -98,7 +98,7 @@
<description xml:lang="ge">Bitte geben Sie Ihre openid.delegate Wert.</description> <description xml:lang="ge">Bitte geben Sie Ihre openid.delegate Wert.</description>
<description xml:lang="es">Ingresar el valor del openid.delegate</description> <description xml:lang="es">Ingresar el valor del openid.delegate</description>
<description xml:lang="jp">openid.delegate値を入力して下さい。</description> <description xml:lang="jp">openid.delegate値を入力して下さい。</description>
<description xml:lang="ru">Пожалуйста, введите Ваше значение openid делегата.</description> <description xml:lang="ru">Пожалуйста, введите Ваше значение openid.delegate</description>
<description xml:lang="zh-TW">請輸入 openid.delegate 值。</description> <description xml:lang="zh-TW">請輸入 openid.delegate 值。</description>
</var> </var>
<var name="xrds"> <var name="xrds">

View file

@ -7,7 +7,7 @@
<title xml:lang="vi">Icon cấp độ của điểm</title> <title xml:lang="vi">Icon cấp độ của điểm</title>
<title xml:lang="ge">Point-Level-Symbol</title> <title xml:lang="ge">Point-Level-Symbol</title>
<title xml:lang="es">Addon para mostar el nivel del ícono</title> <title xml:lang="es">Addon para mostar el nivel del ícono</title>
<title xml:lang="ru">Аддон для отображения иконки уровня</title> <title xml:lang="ru">Иконка уровня поинтов</title>
<title xml:lang="zh-TW">點數等級圖案</title> <title xml:lang="zh-TW">點數等級圖案</title>
<description xml:lang="ko"> <description xml:lang="ko">
포인트 시스템을 사용중일 경우 사용자 이름 앞에 레벨 아이콘을 표시하도록 합니다. 포인트 시스템을 사용중일 경우 사용자 이름 앞에 레벨 아이콘을 표시하도록 합니다.
@ -38,8 +38,8 @@
Tu puedes elegir los icono de cada nivel en el módulo &gt; Sistema de Puntos. Tu puedes elegir los icono de cada nivel en el módulo &gt; Sistema de Puntos.
</description> </description>
<description xml:lang="ru"> <description xml:lang="ru">
Этот аддон отображает иконку уровня напротив имени пользователя, когда используется система поинтов. Этот аддон отображает иконку уровня поинтов напротив имени пользователя, когда используется система поинтов.
Вы можете выбрать иконку уровня на Модуле Системы Поинтов. Вы можете выбрать иконку уровня в Модуле Системы Поинтов.
</description> </description>
<description xml:lang="zh-TW"> <description xml:lang="zh-TW">
使用點數系統時,可以在用戶名前顯示等級圖案。 使用點數系統時,可以在用戶名前顯示等級圖案。

View file

@ -6,7 +6,7 @@
<title xml:lang="en">Image Resizer</title> <title xml:lang="en">Image Resizer</title>
<title xml:lang="vi">Thay đổi cỡ hình ảnh</title> <title xml:lang="vi">Thay đổi cỡ hình ảnh</title>
<title xml:lang="es">Imagen de control add-on bonmunnae</title> <title xml:lang="es">Imagen de control add-on bonmunnae</title>
<title xml:lang="ru">Image контроля добавить-на bonmunnae</title> <title xml:lang="ru">Аддон редактирования размера картинки в тексте</title>
<title xml:lang="ge">Image-Add-on bonmunnae</title> <title xml:lang="ge">Image-Add-on bonmunnae</title>
<title xml:lang="zh-TW">圖片縮放</title> <title xml:lang="zh-TW">圖片縮放</title>
<description xml:lang="ko"> <description xml:lang="ko">
@ -28,7 +28,7 @@
La imagen corporal se inserta dentro del cuerpo para que se adapte al tamaño de la muestra original cuando hago clic en los add-ons. La imagen corporal se inserta dentro del cuerpo para que se adapte al tamaño de la muestra original cuando hago clic en los add-ons.
</description> </description>
<description xml:lang="ru"> <description xml:lang="ru">
Орган изображение вставляется внутрь тела с учетом размера первоначального шоу, когда я нажимаю на надстройки. Аддон, изменяющий размер картинки к размеру текста, при клике на картинку, появляется полное изображение.
</description> </description>
<description xml:lang="ge"> <description xml:lang="ge">
Body Bild eingefügt im Inneren des Körpers zu passen die Größe des Originals zeigen, wenn ich darauf klicke auf das Add-ons. Body Bild eingefügt im Inneren des Körpers zu passen die Größe des Originals zeigen, wenn ich darauf klicke auf das Add-ons.

View file

@ -16,7 +16,7 @@
return false; return false;
} }
return Context::get('smartphone') || preg_match('/(iPod|iPhone|SCH\-M[0-9]+)/',$_SERVER['HTTP_USER_AGENT']); return Context::get('smartphone') || preg_match('/(iPod|iPhone|Android|SCH\-M[0-9]+)/',$_SERVER['HTTP_USER_AGENT']);
} }
function haveSmartphoneModule($module) { function haveSmartphoneModule($module) {
@ -80,7 +80,7 @@
} }
function procSmartPhone($msg = null) { function procSmartPhone($msg = null) {
if(preg_match('/(iPod|iPhone)/',$_SERVER['HTTP_USER_AGENT'])) { if(preg_match('/(iPod|iPhone|Android)/',$_SERVER['HTTP_USER_AGENT'])) {
Context::addHtmlHeader('<meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>'); Context::addHtmlHeader('<meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>');
} else if(preg_match('/SCH\-M[0-9]+/',$_SERVER['HTTP_USER_AGENT'])) { } else if(preg_match('/SCH\-M[0-9]+/',$_SERVER['HTTP_USER_AGENT'])) {
Context::addHtmlHeader('<meta name="viewport" content="width=240; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>'); Context::addHtmlHeader('<meta name="viewport" content="width=240; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>');

View file

@ -4,6 +4,7 @@
<title xml:lang="en">SmartPhone XE</title> <title xml:lang="en">SmartPhone XE</title>
<title xml:lang="zh-CN">智能手机XE插件</title> <title xml:lang="zh-CN">智能手机XE插件</title>
<title xml:lang="vi">SmartPhone XE</title> <title xml:lang="vi">SmartPhone XE</title>
<title xml:lang="ru">SmartPhone XE</title>
<title xml:lang="zh-TW">SmartPhone XE</title> <title xml:lang="zh-TW">SmartPhone XE</title>
<title xml:lang="jp">SmartPhone XE アドオン</title> <title xml:lang="jp">SmartPhone XE アドオン</title>
<description xml:lang="ko"> <description xml:lang="ko">
@ -20,6 +21,9 @@
</description> </description>
<description xml:lang="zh-TW"> <description xml:lang="zh-TW">
用iPhone(touch)和智慧型手機瀏覽時會以最適當的畫面顯示。 用iPhone(touch)和智慧型手機瀏覽時會以最適當的畫面顯示。
</description>
<description xml:lang="ru">
This addon displays the best screen for users who use smartphones like IPhone (touch).
</description> </description>
<description xml:lang="jp"> <description xml:lang="jp">
IPhone(touch)など、スマートフォンからアクセスした時、最適化されたインターフェースで表示させます。 IPhone(touch)など、スマートフォンからアクセスした時、最適化されたインターフェースで表示させます。
@ -32,6 +36,7 @@
<name xml:lang="zh-CN">haneul</name> <name xml:lang="zh-CN">haneul</name>
<name xml:lang="vi">haneul</name> <name xml:lang="vi">haneul</name>
<name xml:lang="zh-TW">haneul</name> <name xml:lang="zh-TW">haneul</name>
<name xml:lang="ru">haneul</name>
<name xml:lang="jp">haneul</name> <name xml:lang="jp">haneul</name>
</author> </author>
</addon> </addon>

View file

@ -509,6 +509,7 @@
**/ **/
function _loadLang($path) { function _loadLang($path) {
global $lang; global $lang;
if(!is_object($lang)) $lang = new stdClass;
if(!$this->lang_type) return; if(!$this->lang_type) return;
if(substr($path,-1)!='/') $path .= '/'; if(substr($path,-1)!='/') $path .= '/';
$filename = sprintf('%s%s.lang.php', $path, $this->lang_type); $filename = sprintf('%s%s.lang.php', $path, $this->lang_type);
@ -1520,5 +1521,40 @@
$oContext = &Context::getInstance(); $oContext = &Context::getInstance();
return $oContext->allow_rewrite; return $oContext->allow_rewrite;
} }
/**
* @brief 로컬 경로를 경로로 변경
*/
function pathToUrl($path) {
$xe = _XE_PATH_;
$path = strtr($path, "\\", "/");
$base_url = preg_replace('@^https?://[^/]+/+@', '', Context::getDefaultUrl());
$_xe = explode('/', $xe);
$_path = explode('/', $path);
$_base = explode('/', $base_url);
if (!$_base[count($_base)-1]) array_pop($_base);
foreach($_xe as $idx=>$dir) {
if($_path[0] != $dir) break;
array_shift($_path);
}
$idx = count($_xe) - $idx - 1;
while($idx--) {
if (count($_base)) array_shift($_base);
else array_unshift($_base, '..');
}
if (count($_base)) {
array_unshift($_path, implode('/', $_base));
}
$path = '/'.implode('/', $_path);
return $path;
}
} }
?> ?>

View file

@ -506,7 +506,7 @@
$name = $val['name']; $name = $val['name'];
$value = $val['value']; $value = $val['value'];
if(substr($value,-2)!='+1') $check_click_count = false; if(substr($value,-2)!='+1' || $output->column_type[$name]!='number') $check_click_count = false;
for ($i = 0; $i < $key; $i++) { // 한문장에 같은 속성에 대한 중복 설정은 큐브리드에서는 허용치 않음 for ($i = 0; $i < $key; $i++) { // 한문장에 같은 속성에 대한 중복 설정은 큐브리드에서는 허용치 않음
if ($output->columns[$i]['name'] == $name) break; if ($output->columns[$i]['name'] == $name) break;

View file

@ -43,7 +43,7 @@
} }
function getSender() { function getSender() {
if($this->sender_name) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->sender_name).'?=', $this->sender_email); if(!stristr(PHP_OS, 'win') && $this->sender_name) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->sender_name).'?=', $this->sender_email);
return $this->sender_email; return $this->sender_email;
} }
@ -53,7 +53,7 @@
} }
function getReceiptor() { function getReceiptor() {
if($this->receiptor_name && $this->receiptor_name != $this->receiptor_email) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->receiptor_name).'?=', $this->receiptor_email); if(!stristr(PHP_OS, 'win') && $this->receiptor_name && $this->receiptor_name != $this->receiptor_email) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->receiptor_name).'?=', $this->receiptor_email);
return $this->receiptor_email; return $this->receiptor_email;
} }

View file

@ -248,6 +248,19 @@ jQuery(function($) {
}); });
} }
/* 단락에디터 fold 컴포넌트 펼치기/접기 */
var drEditorFold = $('.xe_content .fold_button');
if(drEditorFold.size()) {
var fold_container = $('div.fold_container', drEditorFold);
$('button.more', drEditorFold).click(function() {
$(this).hide().next('button').show().parent().next(fold_container).show();
});
$('button.less', drEditorFold).click(function() {
$(this).hide().prev('button').show().parent().next(fold_container).hide();
});
}
}); });
@ -980,7 +993,9 @@ jQuery(function(){
function() function()
{ {
var objText = jQuery(this); var objText = jQuery(this);
var targetName = objText.attr("name"); var targetName = objText.attr("id");
if(typeof(targetName) == "undefined") targetName = objText.attr("name");
if(typeof(targetName) == "undefined") return;
objText.after("<a href='"+request_uri.setQuery('module','module').setQuery('act','dispModuleAdminLangcode').setQuery('target',targetName)+"' class='buttonSet buttonSetting' onclick='popopen(this.href);return false;'><span>find_langcode</span></a>"); objText.after("<a href='"+request_uri.setQuery('module','module').setQuery('act','dispModuleAdminLangcode').setQuery('target',targetName)+"' class='buttonSet buttonSetting' onclick='popopen(this.href);return false;'><span>find_langcode</span></a>");
} }
); );

File diff suppressed because it is too large Load diff

4520
common/js/jquery.js vendored

File diff suppressed because it is too large Load diff

View file

@ -1,142 +0,0 @@
/**
* jquery.qtip.debug. The jQuery tooltip plugin debugger
*
* Debug mode logs all tooltip events and error messages to the
* global $.fn.qtip.log object, as well as creates an array of
* references to all tooltips on the page.
*
* If a console is present, such as firebug (http://getfirebug.com),
* Opera's inbuilt Drangonfly, or IE8's internal Web Developer tool,
* errors will be reported to the console based on your set report
* mask, which is explained in details below.
*
*
* Copyright (c) 2009 Craig Thompson
* http://craigsworks.com
*
* Licensed under MIT
* http://www.opensource.org/licenses/mit-license.php
*
* Launch : February 2009
* Version : 1.0.0-rc3
* Released: Friday 27th April, 2009 - 23:30
*/
/* DEBUG MODE - OFF BY DEFAULT - set to true to enable debugging */
$.fn.qtip.debug = true;
if($.fn.qtip.debug)
{
// Create new debug constants
$.fn.qtip.constants =
{
/* Error messages */
NO_TOOLTIP_PRESENT: 'No tooltip is present on the selected element. Cannot proceed with API call.',
TOOLTIP_NOT_RENDERED: 'Tooltip has not yet been rendered! Cannot proceed with API call.',
NO_VALID_CONTENT: 'No valid content was provided in the options. Using blank content.',
TOOLTIP_IS_DISABLED: 'Tooltip is disabled, cannot proceed with API call.',
TOOLTIP_ALREADY_DISABLED: 'Tooltip is already disabled.',
TOOLTIP_ALREADY_ENABLED: 'Tooltip is already enabled.',
CANVAS_VML_NOT_SUPPORTED: 'Niether canvas or VML are supported, corner and tips will not be drawn.',
STYLE_NOT_DEFINED: 'No such style is defined in the global styles object.',
INVALID_AREA_SHAPE: 'The AREA element used as your target has an invalid area shape. Possible values are: rect, circle, poly.',
CANNOT_FOCUS_STATIC: 'Focusing static elements is not possible as they don\'t have z-index properties.',
CANNOT_POSITION_STATIC: 'Positioning static elements is not possible as they don\'t have left or top properties.',
NO_CONTENT_PROVIDED: 'You must specify some content with which to update.',
/* Event messages */
EVENT_RENDERED: '(Event) Tooltip has been rendered.',
EVENT_SHOWN: '(Event) Tooltip has been shown.',
EVENT_HIDDEN: '(Event) Tooltip has been hidden.',
EVENT_FOCUSED: '(Event) Tooltip has been focused.',
EVENT_DISABLED: '(Event) Tooltip has been disabled.',
EVENT_ENABLED: '(Event) Tooltip has been enabled.',
EVENT_DESTROYED: '(Event) Tooltip has been destroyed.',
EVENT_POSITION_UPDATED: '(Event) Tooltip position has been updated.',
EVENT_CONTENT_UPDATED: '(Event) Tooltip contents have been updated.',
EVENT_CONTENT_LOADED: '(Event) Tooltip contents have been loaded from specified URL.',
EVENT_TITLE_UPDATED: '(Event) Tooltip title has been updated.',
EVENT_STYLE_UPDATED: '(Event) Tooltip style has been updated.',
EVENT_WIDTH_UPDATED: '(Event) Tooltip width has been updated.'
};
// Define qTip log object
$.fn.qtip.log = {
/* CONSOLE REPORTING MASK
To use this functionality you need a console installed, such as firebug:
http://getfirebug.com
This mask determines what errors are reported to the console. Possible values are:
7 = Errors, warnings and messages
6 = Errors and warnings
5 = Errors and messages
4 = Errors only
3 = Warnings and messages
2 = Warnings only
1 = Messages only
*/
report: 7,
/* DO NOT ALTER ANYTHING BELOW HERE! */
qtips: [],
messages: [],
errors: [],
/* Error handler function */
error: function(type, message, method)
{
var self = this;
// Format type string
switch(type)
{
case 1:
var typeString = 'info';
var addTo = 'messages';
break;
case 2:
var typeString = 'warn';
var addTo = 'messages';
break;
default: case 4:
var typeString = 'error';
var addTo = 'errors';
break;
}
// Format time
var DateObj = new Date();
var time = DateObj.getHours() + ':' +
DateObj.getMinutes() + ':' +
DateObj.getSeconds();
// Log the error into the log array
$.fn.qtip.log[addTo].push({
time: time,
message: message,
api: self,
callee: self[method] || method || null
});
// If debug mode is enabled, display the error
if($.fn.qtip.log.report & type > 0)
{
var logMessage = 'qTip '
+ ((typeof self.id !== 'undefined') ? '['+self.id+']' : '')
+ ': ' + message;
// Check console is present
if(window.console) window.console[typeString](logMessage);
// Check for Opera Dragonfly
else if($.browser.opera && window.opera.postError) window.opera.postError(logMessage);
}
return self;
}
};
};

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,22 @@
/* Korean initialisation for the jQuery calendar extension. */
/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */
jQuery(function($){
$.datepicker.regional['ko'] = {
closeText: '닫기',
prevText: '이전달',
nextText: '다음달',
currentText: '오늘',
monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
'7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
'7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
dayNames: ['일','월','화','수','목','금','토'],
dayNamesShort: ['일','월','화','수','목','금','토'],
dayNamesMin: ['일','월','화','수','목','금','토'],
weekHeader: 'Wk',
dateFormat: 'yy-mm-dd',
firstDay: 0,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: '년'};
});

View file

@ -1,2 +1 @@
ui.datepicker.js jquery.ui.datepicker-ko.js
ui.datepicker.css

View file

@ -1,213 +0,0 @@
/* Main Style Sheet for jQuery UI date picker */
#ui-datepicker-div, .ui-datepicker-inline {
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
padding: 0;
margin: 0;
background: #ddd;
width: 185px;
}
#ui-datepicker-div {
display: none;
border: 1px solid #777;
z-index: 100; /*must have*/
}
.ui-datepicker-inline {
float: left;
display: block;
border: 0;
}
.ui-datepicker-rtl {
direction: rtl;
}
.ui-datepicker-dialog {
padding: 5px !important;
border: 4px ridge #ddd !important;
}
.ui-datepicker-disabled {
position: absolute;
z-index: 100;
background-color: white;
opacity: 0.5;
}
button.ui-datepicker-trigger {
width: 25px;
}
img.ui-datepicker-trigger {
margin: 2px;
vertical-align: middle;
}
.ui-datepicker-prompt {
float: left;
padding: 2px;
background: #ddd;
color: #000;
}
* html .ui-datepicker-prompt {
width: 185px;
}
.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker {
clear: both;
float: left;
width: 100%;
color: #fff;
}
.ui-datepicker-control {
background: #400;
padding: 2px 0px;
}
.ui-datepicker-links {
background: #000;
padding: 2px 0px;
}
.ui-datepicker-control, .ui-datepicker-links {
font-weight: bold;
font-size: 80%;
}
.ui-datepicker-links label { /* disabled links */
padding: 2px 5px;
color: #888;
}
.ui-datepicker-clear, .ui-datepicker-prev {
float: left;
width: 34%;
}
.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev {
float: right;
text-align: right;
}
.ui-datepicker-current {
float: left;
width: 30%;
text-align: center;
}
.ui-datepicker-close, .ui-datepicker-next {
float: right;
width: 34%;
text-align: right;
}
.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next {
float: left;
text-align: left;
}
.ui-datepicker-header {
padding: 1px 0 3px;
background: #333;
text-align: center;
font-weight: bold;
height: 1.3em;
}
.ui-datepicker-header select {
background: #333;
color: #fff;
border: 0px;
font-weight: bold;
}
.ui-datepicker {
background: #ccc;
text-align: center;
font-size: 100%;
}
.ui-datepicker a {
display: block;
width: 100%;
}
.ui-datepicker-title-row {
background: #777;
}
.ui-datepicker-days-row {
background: #eee;
color: #666;
}
.ui-datepicker-week-col {
background: #777;
color: #fff;
}
.ui-datepicker-days-cell {
color: #000;
border: 1px solid #ddd;
}
.ui-datepicker-days-cell a{
display: block;
}
.ui-datepicker-week-end-cell {
background: #ddd;
}
.ui-datepicker-title-row .ui-datepicker-week-end-cell {
background: #777;
}
.ui-datepicker-days-cell-over {
background: #fff;
border: 1px solid #777;
}
.ui-datepicker-unselectable {
color: #888;
}
.ui-datepicker-today {
background: #fcc !important;
}
.ui-datepicker-current-day {
background: #999 !important;
}
.ui-datepicker-status {
background: #ddd;
width: 100%;
font-size: 80%;
text-align: center;
}
/* ________ Datepicker Links _______
** Reset link properties and then override them with !important */
#ui-datepicker-div a, .ui-datepicker-inline a {
cursor: pointer;
margin: 0;
padding: 0;
background: none;
color: #000;
}
.ui-datepicker-inline .ui-datepicker-links a {
padding: 0 5px !important;
}
.ui-datepicker-control a, .ui-datepicker-links a {
padding: 2px 5px !important;
color: #eee !important;
}
.ui-datepicker-title-row a {
color: #eee !important;
}
.ui-datepicker-control a:hover {
background: #fdd !important;
color: #333 !important;
}
.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover {
background: #ddd !important;
color: #333 !important;
}
/* ___________ MULTIPLE MONTHS _________*/
.ui-datepicker-multi .ui-datepicker {
border: 1px solid #777;
}
.ui-datepicker-one-month {
float: left;
width: 185px;
}
.ui-datepicker-new-row {
clear: left;
}
/* ___________ IE6 IFRAME FIX ________ */
.ui-datepicker-cover {
display: none; /*sorry for IE5*/
display/**/: block; /*sorry for IE5*/
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

480
common/js/plugins/ui/jquery-ui.css vendored Normal file
View file

@ -0,0 +1,480 @@
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
*/
/* Component containers
----------------------------------*/
.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
.ui-widget-header a { color: #222222; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
.ui-widget :active { outline: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* Resizable
----------------------------------*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Accordion
----------------------------------*/
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete
----------------------------------*/
.ui-autocomplete { position: absolute; cursor: default; }
.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
/* Menu
----------------------------------*/
.ui-menu {
list-style:none;
padding: 2px;
margin: 0;
display:block;
}
.ui-menu .ui-menu {
margin-top: -3px;
}
.ui-menu .ui-menu-item {
margin:0;
padding: 0;
width: 100%;
}
.ui-menu .ui-menu-item a {
text-decoration:none;
display:block;
padding:.2em .4em;
line-height:1.5;
zoom:1;
}
.ui-menu .ui-menu-item a.ui-state-hover,
.ui-menu .ui-menu-item a.ui-state-active {
margin: -1px;
}
/* Button
----------------------------------*/
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
/* Dialog
----------------------------------*/
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/* Slider
----------------------------------*/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
----------------------------------*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
/* Datepicker
----------------------------------*/
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; }
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
display: none; /*sorry for IE5*/
display/**/: block; /*sorry for IE5*/
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}/* Progressbar
----------------------------------*/
.ui-progressbar { height:2em; text-align: left; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }

File diff suppressed because one or more lines are too long

View file

@ -1 +1,2 @@
jquery-ui.packed.js jquery-ui.packed.js
jquery-ui.css

View file

@ -3,6 +3,12 @@
* Distributed by GNU LGPL. For copyrights, license, documentation and more visit Cross-Browser.com * Distributed by GNU LGPL. For copyrights, license, documentation and more visit Cross-Browser.com
* Copyright 2001-2005 Michael Foster (Cross-Browser.com) * Copyright 2001-2005 Michael Foster (Cross-Browser.com)
**/ **/
function xDeprecate(funcName) {
var msg = 'DEPRECATED : '+funcName+'() is deprecated function.';
if (typeof console == 'object' && typeof console.log == 'function') {
console.log(msg);
}
}
var xOp7Up,xOp6Dn,xIE4Up,xIE4,xIE5,xIE6,xNN4,xUA=navigator.userAgent.toLowerCase(); var xOp7Up,xOp6Dn,xIE4Up,xIE4,xIE5,xIE6,xNN4,xUA=navigator.userAgent.toLowerCase();
if(window.opera){ if(window.opera){
@ -26,6 +32,7 @@ var xFF=xUA.indexOf('firefox')!=-1;
// (element, event(without 'on'), event listener(function name)[, caption]) // (element, event(without 'on'), event listener(function name)[, caption])
function xAddEventListener(e,eT,eL,cap) function xAddEventListener(e,eT,eL,cap)
{ {
xDeprecate('xAddEventListener');
if(!(e=xGetElementById(e))) return; if(!(e=xGetElementById(e))) return;
eT=eT.toLowerCase(); eT=eT.toLowerCase();
if((!xIE4Up && !xOp7Up) && e==window) { if((!xIE4Up && !xOp7Up) && e==window) {
@ -40,6 +47,7 @@ function xAddEventListener(e,eT,eL,cap)
// called only from the above // called only from the above
function xResizeEvent() function xResizeEvent()
{ {
xDeprecate('xResizeEvent');
if (window.xREL) setTimeout('xResizeEvent()', 250); if (window.xREL) setTimeout('xResizeEvent()', 250);
var cw = xClientWidth(), ch = xClientHeight(); var cw = xClientWidth(), ch = xClientHeight();
if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); } if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); }
@ -47,6 +55,7 @@ function xResizeEvent()
function xScrollEvent() function xScrollEvent()
{ {
xDeprecate('xScrollEvent');
if (window.xSEL) setTimeout('xScrollEvent()', 250); if (window.xSEL) setTimeout('xScrollEvent()', 250);
var sl = xScrollLeft(), st = xScrollTop(); var sl = xScrollLeft(), st = xScrollTop();
if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); } if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); }
@ -54,12 +63,14 @@ function xScrollEvent()
function xAppendChild(oParent, oChild) function xAppendChild(oParent, oChild)
{ {
xDeprecate('xAppendChild');
if (oParent.appendChild) return oParent.appendChild(oChild); if (oParent.appendChild) return oParent.appendChild(oChild);
else return null; else return null;
} }
function xClientHeight() function xClientHeight()
{ {
xDeprecate('xClientHeight');
var h=0; var h=0;
if(xOp6Dn) h=window.innerHeight; if(xOp6Dn) h=window.innerHeight;
else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientHeight) else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientHeight)
@ -75,6 +86,7 @@ function xClientHeight()
function xClientWidth() function xClientWidth()
{ {
xDeprecate('xClientWidth');
var w=0; var w=0;
if(xOp6Dn) w=window.innerWidth; if(xOp6Dn) w=window.innerWidth;
else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientWidth) else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientWidth)
@ -90,18 +102,21 @@ function xClientWidth()
function xCreateElement(sTag) function xCreateElement(sTag)
{ {
xDeprecate('xCreateElement');
if (document.createElement) return document.createElement(sTag); if (document.createElement) return document.createElement(sTag);
else return null; else return null;
} }
function xDef() function xDef()
{ {
xDeprecate('xDef');
for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;} for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
return true; return true;
} }
function xDeleteCookie(name, path) function xDeleteCookie(name, path)
{ {
xDeprecate('xDeleteCookie');
if (xGetCookie(name)) { if (xGetCookie(name)) {
document.cookie = name + "=" + document.cookie = name + "=" +
"; path=" + ((!path) ? "/" : path) + "; path=" + ((!path) ? "/" : path) +
@ -111,6 +126,7 @@ function xDeleteCookie(name, path)
function xDisplay(e,s) function xDisplay(e,s)
{ {
xDeprecate('xDisplay');
if(!(e=xGetElementById(e))) return null; if(!(e=xGetElementById(e))) return null;
if(e.style && xDef(e.style.display)) { if(e.style && xDef(e.style.display)) {
if (xStr(s)) e.style.display = s; if (xStr(s)) e.style.display = s;
@ -121,6 +137,7 @@ function xDisplay(e,s)
function xEvent(evt) // object prototype function xEvent(evt) // object prototype
{ {
xDeprecate('xEvent');
var e = evt || window.event; var e = evt || window.event;
if(!e) return; if(!e) return;
if(e.type) this.type = e.type; if(e.type) this.type = e.type;
@ -162,6 +179,7 @@ function xEvent(evt) // object prototype
function xFirstChild(e, t) function xFirstChild(e, t)
{ {
xDeprecate('xFirstChild');
var c = e ? e.firstChild : null; var c = e ? e.firstChild : null;
if (t) while (c && c.nodeName != t) { c = c.nextSibling; } if (t) while (c && c.nodeName != t) { c = c.nextSibling; }
else while (c && c.nodeType != 1) { c = c.nextSibling; } else while (c && c.nodeType != 1) { c = c.nextSibling; }
@ -169,12 +187,14 @@ function xFirstChild(e, t)
} }
function xGetBodyWidth() { function xGetBodyWidth() {
xDeprecate('xGetBodyWidth');
var cw = xClientWidth(); var cw = xClientWidth();
var sw = window.document.body.scrollWidth; var sw = window.document.body.scrollWidth;
return cw>sw?cw:sw; return cw>sw?cw:sw;
} }
function xGetBodyHeight() { function xGetBodyHeight() {
xDeprecate('xGetBodyHeight');
var cw = xClientHeight(); var cw = xClientHeight();
var sw = window.document.body.scrollHeight; var sw = window.document.body.scrollHeight;
return cw>sw?cw:sw; return cw>sw?cw:sw;
@ -182,6 +202,7 @@ function xGetBodyHeight() {
function xGetComputedStyle(oEle, sProp, bInt) function xGetComputedStyle(oEle, sProp, bInt)
{ {
xDeprecate('xGetComputedStyle');
var s, p = 'undefined'; var s, p = 'undefined';
var dv = document.defaultView; var dv = document.defaultView;
if(dv && dv.getComputedStyle){ if(dv && dv.getComputedStyle){
@ -204,6 +225,7 @@ function xGetComputedStyle(oEle, sProp, bInt)
function xGetCookie(name) function xGetCookie(name)
{ {
xDeprecate('xGetCookie');
var value=null, search=name+"="; var value=null, search=name+"=";
if (document.cookie.length > 0) { if (document.cookie.length > 0) {
var offset = document.cookie.indexOf(search); var offset = document.cookie.indexOf(search);
@ -219,6 +241,7 @@ function xGetCookie(name)
function xGetElementById(e) function xGetElementById(e)
{ {
xDeprecate('xGetElementById');
if(typeof(e)!='string') return e; if(typeof(e)!='string') return e;
if(document.getElementById) e=document.getElementById(e); if(document.getElementById) e=document.getElementById(e);
else if(document.all) e=document.all[e]; else if(document.all) e=document.all[e];
@ -228,6 +251,7 @@ function xGetElementById(e)
function xGetElementsByAttribute(sTag, sAtt, sRE, fn) function xGetElementsByAttribute(sTag, sAtt, sRE, fn)
{ {
xDeprecate('xGetElementsByAttribute');
var a, list, found = new Array(), re = new RegExp(sRE, 'i'); var a, list, found = new Array(), re = new RegExp(sRE, 'i');
list = xGetElementsByTagName(sTag); list = xGetElementsByTagName(sTag);
for (var i = 0; i < list.length; ++i) { for (var i = 0; i < list.length; ++i) {
@ -243,6 +267,7 @@ function xGetElementsByAttribute(sTag, sAtt, sRE, fn)
function xGetElementsByClassName(c,p,t,f) function xGetElementsByClassName(c,p,t,f)
{ {
xDeprecate('xGetElementsByClassName');
var found = new Array(); var found = new Array();
var re = new RegExp('\\b'+c+'\\b', 'i'); var re = new RegExp('\\b'+c+'\\b', 'i');
var list = xGetElementsByTagName(t, p); var list = xGetElementsByTagName(t, p);
@ -257,6 +282,7 @@ function xGetElementsByClassName(c,p,t,f)
function xGetElementsByTagName(t,p) function xGetElementsByTagName(t,p)
{ {
xDeprecate('xGetElementsByTagName');
var list = null; var list = null;
t = t || '*'; t = t || '*';
p = p || document; p = p || document;
@ -270,6 +296,7 @@ function xGetElementsByTagName(t,p)
function xGetURLArguments() function xGetURLArguments()
{ {
xDeprecate('xGetURLArguments');
var idx = location.href.indexOf('?'); var idx = location.href.indexOf('?');
var params = new Array(); var params = new Array();
if (idx != -1) { if (idx != -1) {
@ -285,6 +312,7 @@ function xGetURLArguments()
function xHeight(e,h) function xHeight(e,h)
{ {
xDeprecate('xHeight');
if(!(e=xGetElementById(e))) return 0; if(!(e=xGetElementById(e))) return 0;
if (xNum(h)) { if (xNum(h)) {
if (h<0) h = 0; if (h<0) h = 0;
@ -328,6 +356,7 @@ function xHeight(e,h)
function xHex(sn, digits, prefix) function xHex(sn, digits, prefix)
{ {
xDeprecate('xHex');
var p = ''; var p = '';
var n = Math.ceil(sn); var n = Math.ceil(sn);
if (prefix) p = prefix; if (prefix) p = prefix;
@ -338,10 +367,11 @@ function xHex(sn, digits, prefix)
return p + n; return p + n;
} }
function xHide(e){return xVisibility(e,0);} function xHide(e){ xDeprecate('xHide'); return xVisibility(e,0);}
function xInnerHtml(e,h) function xInnerHtml(e,h)
{ {
xDeprecate('xInnerHtml');
if(!(e=xGetElementById(e)) || !xStr(e.innerHTML)) return null; if(!(e=xGetElementById(e)) || !xStr(e.innerHTML)) return null;
var s = e.innerHTML; var s = e.innerHTML;
if (xStr(h)) {e.innerHTML = h;} if (xStr(h)) {e.innerHTML = h;}
@ -350,6 +380,7 @@ function xInnerHtml(e,h)
function xLeft(e, iX) function xLeft(e, iX)
{ {
xDeprecate('xLeft');
if(!(e=xGetElementById(e))) return 0; if(!(e=xGetElementById(e))) return 0;
var css=xDef(e.style); var css=xDef(e.style);
if (css && xStr(e.style.left)) { if (css && xStr(e.style.left)) {
@ -368,12 +399,14 @@ function xLeft(e, iX)
function xMoveTo(e,x,y) function xMoveTo(e,x,y)
{ {
xDeprecate('xMoveTo');
xLeft(e,x); xLeft(e,x);
xTop(e,y); xTop(e,y);
} }
function xName(e) function xName(e)
{ {
xDeprecate('xName');
if (!e) return e; if (!e) return e;
else if (e.id && e.id != "") return e.id; else if (e.id && e.id != "") return e.id;
else if (e.name && e.name != "") return e.name; else if (e.name && e.name != "") return e.name;
@ -384,6 +417,7 @@ function xName(e)
function xNextSib(e,t) function xNextSib(e,t)
{ {
xDeprecate('xNextSib');
var s = e ? e.nextSibling : null; var s = e ? e.nextSibling : null;
if (t) while (s && s.nodeName != t) { s = s.nextSibling; } if (t) while (s && s.nodeName != t) { s = s.nextSibling; }
else while (s && s.nodeType != 1) { s = s.nextSibling; } else while (s && s.nodeType != 1) { s = s.nextSibling; }
@ -392,12 +426,14 @@ function xNextSib(e,t)
function xNum() function xNum()
{ {
xDeprecate('xNum');
for(var i=0; i<arguments.length; ++i){if(isNaN(arguments[i]) || typeof(arguments[i])!='number') return false;} for(var i=0; i<arguments.length; ++i){if(isNaN(arguments[i]) || typeof(arguments[i])!='number') return false;}
return true; return true;
} }
function xOffsetLeft(e) function xOffsetLeft(e)
{ {
xDeprecate('xOffsetLeft');
if (!(e=xGetElementById(e))) return 0; if (!(e=xGetElementById(e))) return 0;
if (xDef(e.offsetLeft)) return e.offsetLeft; if (xDef(e.offsetLeft)) return e.offsetLeft;
else return 0; else return 0;
@ -405,6 +441,7 @@ function xOffsetLeft(e)
function xOffsetTop(e) function xOffsetTop(e)
{ {
xDeprecate('xOffsetTop');
if (!(e=xGetElementById(e))) return 0; if (!(e=xGetElementById(e))) return 0;
if (xDef(e.offsetTop)) return e.offsetTop; if (xDef(e.offsetTop)) return e.offsetTop;
else return 0; else return 0;
@ -412,6 +449,7 @@ function xOffsetTop(e)
function xPad(s,len,c,left) function xPad(s,len,c,left)
{ {
xDeprecate('xPad');
if(typeof s != 'string') s=s+''; if(typeof s != 'string') s=s+'';
if(left) {for(var i=s.length; i<len; ++i) s=c+s;} if(left) {for(var i=s.length; i<len; ++i) s=c+s;}
else {for (i=s.length; i<len; ++i) s+=c;} else {for (i=s.length; i<len; ++i) s+=c;}
@ -420,6 +458,7 @@ function xPad(s,len,c,left)
function xPageX(e) function xPageX(e)
{ {
xDeprecate('xPageX');
if (!(e=xGetElementById(e))) return 0; if (!(e=xGetElementById(e))) return 0;
var x = 0; var x = 0;
while (e) { while (e) {
@ -431,6 +470,7 @@ function xPageX(e)
function xPageY(e) function xPageY(e)
{ {
xDeprecate('xPageY');
if (!(e=xGetElementById(e))) return 0; if (!(e=xGetElementById(e))) return 0;
var y = 0; var y = 0;
while (e) { while (e) {
@ -443,6 +483,7 @@ function xPageY(e)
function xParent(e, bNode) function xParent(e, bNode)
{ {
xDeprecate('xParent');
if (!(e=xGetElementById(e))) return null; if (!(e=xGetElementById(e))) return null;
var p=null; var p=null;
if (!bNode && xDef(e.offsetParent)) p=e.offsetParent; if (!bNode && xDef(e.offsetParent)) p=e.offsetParent;
@ -453,12 +494,14 @@ function xParent(e, bNode)
function xPreventDefault(e) function xPreventDefault(e)
{ {
xDeprecate('xPreventDefault');
if (e && e.preventDefault) e.preventDefault() if (e && e.preventDefault) e.preventDefault()
else if (window.event) window.event.returnValue = false; else if (window.event) window.event.returnValue = false;
} }
function xPrevSib(e,t) function xPrevSib(e,t)
{ {
xDeprecate('xPrevSib');
var s = e ? e.previousSibling : null; var s = e ? e.previousSibling : null;
if (t) while(s && s.nodeName != t) {s=s.previousSibling;} if (t) while(s && s.nodeName != t) {s=s.previousSibling;}
else while(s && s.nodeType != 1) {s=s.previousSibling;} else while(s && s.nodeType != 1) {s=s.previousSibling;}
@ -467,6 +510,7 @@ function xPrevSib(e,t)
function xRemoveEventListener(e,eT,eL,cap) function xRemoveEventListener(e,eT,eL,cap)
{ {
xDeprecate('xRemoveEventListener');
if(!(e=xGetElementById(e))) return; if(!(e=xGetElementById(e))) return;
eT=eT.toLowerCase(); eT=eT.toLowerCase();
if((!xIE4Up && !xOp7Up) && e==window) { if((!xIE4Up && !xOp7Up) && e==window) {
@ -481,12 +525,14 @@ function xRemoveEventListener(e,eT,eL,cap)
function xResizeTo(e,w,h) function xResizeTo(e,w,h)
{ {
xDeprecate('xResizeTo');
xWidth(e,w); xWidth(e,w);
xHeight(e,h); xHeight(e,h);
} }
function xScrollLeft(e, bWin) function xScrollLeft(e, bWin)
{ {
xDeprecate('xScrollLeft');
var offset=0; var offset=0;
if (!xDef(e) || bWin || e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') { if (!xDef(e) || bWin || e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
var w = window; var w = window;
@ -503,6 +549,7 @@ function xScrollLeft(e, bWin)
function xScrollTop(e, bWin) function xScrollTop(e, bWin)
{ {
xDeprecate('xScrollTop');
var offset=0; var offset=0;
if (!xDef(e) || bWin || e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') { if (!xDef(e) || bWin || e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
var w = window; var w = window;
@ -519,22 +566,25 @@ function xScrollTop(e, bWin)
function xSetCookie(name, value, expire, path) function xSetCookie(name, value, expire, path)
{ {
xDeprecate('xSetCookie');
document.cookie = name + "=" + escape(value) + document.cookie = name + "=" + escape(value) +
((!expire) ? "" : ("; expires=" + expire.toGMTString())) + ((!expire) ? "" : ("; expires=" + expire.toGMTString())) +
"; path=" + ((!path) ? "/" : path); "; path=" + ((!path) ? "/" : path);
} }
function xShow(e) {return xVisibility(e,1);} function xShow(e) { xDeprecate('xShow'); return xVisibility(e,1);}
function xStr(s) function xStr(s)
{ {
xDeprecate('xStr');
for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;} for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}
return true; return true;
} }
function xTop(e, iY) function xTop(e, iY)
{ {
xDeprecate('xTop');
if(!(e=xGetElementById(e))) return 0; if(!(e=xGetElementById(e))) return 0;
var css=xDef(e.style); var css=xDef(e.style);
if(css && xStr(e.style.top)) { if(css && xStr(e.style.top)) {
@ -553,6 +603,7 @@ function xTop(e, iY)
function xVisibility(e, bShow) function xVisibility(e, bShow)
{ {
xDeprecate('xVisibility');
if(!(e=xGetElementById(e))) return null; if(!(e=xGetElementById(e))) return null;
if(e.style && xDef(e.style.visibility)) { if(e.style && xDef(e.style.visibility)) {
if (xDef(bShow)) e.style.visibility = bShow ? 'visible' : 'hidden'; if (xDef(bShow)) e.style.visibility = bShow ? 'visible' : 'hidden';
@ -563,6 +614,7 @@ function xVisibility(e, bShow)
function xWidth(e,w) function xWidth(e,w)
{ {
xDeprecate('xWidth');
if(!(e=xGetElementById(e))) return 0; if(!(e=xGetElementById(e))) return 0;
if (xNum(w)) { if (xNum(w)) {
if (w<0) w = 0; if (w<0) w = 0;
@ -606,6 +658,7 @@ function xWidth(e,w)
function xZIndex(e,uZ) function xZIndex(e,uZ)
{ {
xDeprecate('xZIndex');
if(!(e=xGetElementById(e))) return 0; if(!(e=xGetElementById(e))) return 0;
if(e.style && xDef(e.style.zIndex)) { if(e.style && xDef(e.style.zIndex)) {
if(xNum(uZ)) e.style.zIndex=uZ; if(xNum(uZ)) e.style.zIndex=uZ;
@ -616,6 +669,7 @@ function xZIndex(e,uZ)
function xStopPropagation(evt) function xStopPropagation(evt)
{ {
xDeprecate('xStopPropagation');
if (evt && evt.stopPropagation) evt.stopPropagation(); if (evt && evt.stopPropagation) evt.stopPropagation();
else if (window.event) window.event.cancelBubble = true; else if (window.event) window.event.cancelBubble = true;
} }

View file

@ -1,331 +1,10 @@
/** /**
* @file common/js/xml_handler.js * @file common/js/xml_handler.js
* @author zero <zero@nzeo.com> * @brief XE에서 ajax기능을 이용함에 있어 module, act를 사용하기 위한 자바스크립트
* @brief zbxe내에서 ajax기능을 이용함에 있어 module, act를 사용하기 위한 자바스크립트
**/ **/
// xml handler을 이용하는 user function // xml handler을 이용하는 user function
var show_waiting_message = true; var show_waiting_message = true;
function exec_xml(module, act, params, callback_func, response_tags, callback_func_arg, fo_obj) {
var oXml = new xml_handler();
oXml.reset();
if(typeof(params)!='undefined') {
for(var key in params) {
if(!params.hasOwnProperty(key)) continue;
var val = params[key];
oXml.addParam(key, val);
}
}
oXml.addParam("module", module);
oXml.addParam("act", act);
if(typeof(xeVid)!='undefined') oXml.addParam('vid', xeVid);
if(typeof(response_tags)=="undefined" || response_tags.length<1) response_tags = new Array('error','message');
oXml.request(xml_response_filter, oXml, callback_func, response_tags, callback_func_arg, fo_obj);
}
// 결과 처리 후 callback_func에 넘겨줌
function xml_response_filter(oXml, callback_func, response_tags, callback_func_arg, fo_obj) {
var text = oXml.getResponseText();
if(oXml.objXmlHttp.readyState!=4) return;
if(text && !/<\/response>$/i.test(text)) {
var waiting_obj = xGetElementById("waitingforserverresponse");
if(waiting_obj) waiting_obj.style.visibility = "hidden";
alert(text);
return null;
}
var xmlDoc = oXml.getResponseXml();
if(!xmlDoc) return null;
var waiting_obj = xGetElementById("waitingforserverresponse");
if(waiting_obj) waiting_obj.style.visibility = "hidden";
var ret_obj = oXml.toZMsgObject(xmlDoc, response_tags);
if(ret_obj["error"]!=0) {
alert(ret_obj["message"]);
return null;
}
if(ret_obj["redirect_url"]) {
location.href=ret_obj["redirect_url"].replace(/&amp;/g,'&');
return null;
}
if(!callback_func) return null;
callback_func(ret_obj, response_tags, callback_func_arg, fo_obj);
return null;
}
// xml handler
function xml_handler() {
this.objXmlHttp = null;
this.method_name = null;
this.xml_path = request_uri+"index.php";
this.params = new Array();
this.reset = xml_handlerReset;
this.getXmlHttp = zGetXmlHttp;
this.request = xml_handlerRequest;
this.setPath = xml_handlerSetPath;
this.addParam = xml_handlerAddParam;
this.getResponseXml = xml_handlerGetResponseXML;
this.getResponseText = xml_handlerGetResponseText;
this.toZMsgObject = xml_handlerToZMsgObject;
this.parseXMLDoc = xml_parseXmlDoc;
this.objXmlHttp = this.getXmlHttp();
}
function zGetXmlHttp() {
if (window.XMLHttpRequest) return new XMLHttpRequest();
else if (window.ActiveXObject) {
try {
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
return null;
}
function xml_handlerRequest(callBackFunc, xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj) {
// ssl action
if(typeof(ssl_actions)!='undefined' && typeof(ssl_actions.length)!='undefined' && typeof(this.params['act'])!='undefined') {
var action = this.params['act'];
for(i=0;i<ssl_actions.length;i++) {
if(ssl_actions[i]==action) {
var url = request_uri;
if(typeof(default_url)!='undefined' && default_url) url = default_url;
var port = 443;
if(typeof(https_port)!='undefined' && https_port != 443) port = https_port;
var _u1 = xCreateElement('a');
_u1.href = url;
var targetUrl = 'https://';
targetUrl += _u1.hostname.replace(/:([0-9]+)$/,'');
if(port != 443) targetUrl += ':'+port;
if(_u1.pathname[0] != "/") targetUrl += "/";
targetUrl += _u1.pathname;
targetUrl = targetUrl.replace(/\/$/,'');
this.xml_path = targetUrl + '/index.php';
}
}
}
var _u1 = xCreateElement('a');
_u1.href = location.href;
var _u2 = xCreateElement('a');
_u2.href = this.xml_path;
// 현 url과 ajax call 대상 url의 schema 또는 port가 다르면 직접 form 전송
if(_u1.protocol != _u2.protocol || _u1.port != _u2.port) {
var fr = xGetElementById('xeTmpIframe');
if(!fr) {
fr = xCreateElement('iframe');
fr.style.position = 'absolute';
fr.style.left = '-1px';
fr.style.top = '1px';
fr.style.width = '1px';
fr.style.height = '1px';
fr.name = fr.id = 'xeTmpIframe';
document.body.appendChild(fr);
}
var fo = xGetElementById('xeVirtualForm');
if(fo) document.body.removeChild(fo);
fo = xCreateElement('form');
fo.id = 'xeVirtualForm';
fo.action = this.xml_path;
fo.method = 'post';
fo.target = 'xeTmpIframe';
var i = xCreateElement('input');
i.type = 'hidden';
i.name = 'xeVirtualRequestMethod';
i.value = 'xml';
fo.appendChild(i);
var j = xCreateElement('input');
j.type = 'hidden';
j.name = 'xeRequestURI';
j.value = location.href.replace(/#(.*)$/i,'');
fo.appendChild(j);
var k = xCreateElement('input');
k.type = 'hidden';
k.name = 'xeVirtualRequestUrl';
k.value = request_uri;
fo.appendChild(k);
for (var key in this.params) {
if(!this.params.hasOwnProperty(key)) continue;
var i = xCreateElement('input');
i.type = 'hidden';
i.name = key;
i.value = this.params[key];
fo.appendChild(i);
}
document.body.appendChild(fo);
fo.submit();
return;
}
var rd = "";
rd += "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
+ "<methodCall>\n"
+ "<params>\n"
for (var key in this.params) {
if(!this.params.hasOwnProperty(key)) continue;
var val = this.params[key];
rd += "<"+key+"><![CDATA["+val+"]]></"+key+">\n";
}
rd += "</params>\n"
+ "</methodCall>\n";
if(this.objXmlHttp.readyState!=0) {
this.objXmlHttp.abort();
this.objXmlHttp = this.getXmlHttp();
}
this.objXmlHttp.onreadystatechange = function () {callBackFunc(xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj)};
// 모든 xml데이터는 POST방식으로 전송. try-catch문으로 오류 발생시 대처
try {
this.objXmlHttp.open("POST", this.xml_path, true);
} catch(e) {
alert(e);
return;
}
// ajax 통신중 대기 메세지 출력 (show_waiting_message값을 false로 세팅시 보이지 않음)
var waiting_obj = xGetElementById("waitingforserverresponse");
if(show_waiting_message && waiting_obj) {
xInnerHtml(waiting_obj, waiting_message);
xTop(waiting_obj, xScrollTop()+20);
xLeft(waiting_obj, xScrollLeft()+20);
waiting_obj.style.visibility = "visible";
}
this.objXmlHttp.send(rd);
}
function xml_handlerSetPath(path) {
this.xml_path = "./"+path;
}
function xml_handlerReset() {
this.objXmlHttp = this.getXmlHttp();
this.params = new Array();
}
function xml_handlerAddParam(key, val) {
this.params[key] = val;
}
function xml_handlerGetResponseXML() {
if(this.objXmlHttp && this.objXmlHttp.readyState == 4 && isDef(this.objXmlHttp.responseXML)) {
var xmlDoc = this.objXmlHttp.responseXML;
this.reset();
return xmlDoc;
}
return null;
}
function xml_handlerGetResponseText() {
if(this.objXmlHttp && this.objXmlHttp.readyState == 4 && isDef(this.objXmlHttp.responseText)) {
return this.objXmlHttp.responseText;
}
return null;
}
function xml_parseXmlDoc(dom) {
if(!dom) return;
var jsonStr = xml2json(dom,false,false);
var jsonObj = eval("("+ jsonStr +");");
return jsonObj.response;
/*
var ret_obj = new Array();
var obj = dom.firstChild;
var preObj;
if(!obj) return;
while(obj) {
if(obj.nodeType == 1) {
var name = obj.nodeName;
var value = null;
if(obj.childNodes.length==1 && obj.firstChild.nodeType != 1) {
value = obj.firstChild.nodeValue;
} else {
value = this.parseXMLDoc(obj);
}
if(typeof(ret_obj[name])=='undefined') {
ret_obj[name] = value;
} else {
if(ret_obj[name].length>0) {
ret_obj[name][ret_obj[name].length] = value;
} else {
var tmp_value = ret_obj[name];
ret_obj[name] = new Array();
ret_obj[name][ret_obj[name].length] = tmp_value;
ret_obj[name][ret_obj[name].length] = value;
}
}
}
obj = obj.nextSibling;
}
return ret_obj;
*/
}
function xml_handlerToZMsgObject(xmlDoc, tags) {
if(!xmlDoc) return null;
if(!tags) tags = new Array("error","message");
tags[tags.length] = "redirect_url";
tags[tags.length] = "act";
var parsed_array = this.parseXMLDoc(xmlDoc.getElementsByTagName('response')[0]);
if(typeof(parsed_array)=='undefined') {
var ret = new Array();
ret['error'] = -1;
ret['message'] = "Unexpected error occured.";
try{
if(typeof(xmlDoc.childNodes[0].firstChild.data)!='undefined') ret['message']+="\r\n"+xmlDoc.childNodes[0].firstChild.data;
} catch(e) {
}
return ret;
}
var obj_ret = new Array();
for(var i=0; i<tags.length; i++) {
var key = tags[i];
if(parsed_array[key]) obj_ret[key] = parsed_array[key];
else obj_ret[key] = null;
}
return obj_ret;
}
/* This work is licensed under Creative Commons GNU LGPL License. /* This work is licensed under Creative Commons GNU LGPL License.
@ -482,15 +161,190 @@ function xml2json(xml, tab, ignoreAttrib) {
}; };
if (xml.nodeType == 9) // document node if (xml.nodeType == 9) // document node
xml = xml.documentElement; xml = xml.documentElement;
var json = X.toJson(X.toObj(X.removeWhite(xml)), xml.nodeName, "");
return "{" + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, "")) + "}"; var json_obj = X.toObj(X.removeWhite(xml)), json_str;
if (typeof(JSON)=='object' && jQuery.isFunction(JSON.stringify) && false) {
var obj = {}; obj[xml.nodeName] = json_obj;
json_str = JSON.stringify(obj);
return json_str;
} else {
json_str = X.toJson(json_obj, xml.nodeName, "");
return "{" + (tab ? json_str.replace(/\t/g, tab) : json_str.replace(/\t|\n/g, "")) + "}";
}
} }
(function($){
/**
* @brief exec_xml
* @author taggon <gonom9@gmail.com>
**/
$.exec_xml = window.exec_xml = function(module, act, params, callback_func, response_tags, callback_func_arg, fo_obj) {
var xml_path = request_uri+"index.php"
if(!params) params = {};
// {{{ set parameters
if($.isArray(params)) params = arr2obj(params);
params['module'] = module;
params['act'] = act;
if(typeof(xeVid)!='undefined') params['vid'] = xeVid;
if(typeof(response_tags)=="undefined" || response_tags.length<1) response_tags = ['error','message'];
else {
response_tags.push('error', 'message');
}
// }}} set parameters
// use ssl?
if ($.isArray(ssl_actions) && params['act'] && $.inArray(params['act'], ssl_actions) >= 0)
{
var url = default_url || request_uri;
var port = window.https_port || 443;
var _ul = $('<a>').attr('href', url)[0];
var target = 'https://' + _ul.hostname.replace(/:\d+$/, '');
if(port != 443) target += ':'+port;
if(_ul.pathname[0] != '/') target += '/';
target += _ul.pathname;
xml_path = target.replace(/\/$/, '')+'/index.php';
}
var _u1 = $('<a>').attr('href', location.href)[0];
var _u2 = $('<a>').attr('href', xml_path)[0];
// 현 url과 ajax call 대상 url의 schema 또는 port가 다르면 직접 form 전송
if(_u1.protocol != _u2.protocol || _u1.port != _u2.port) return send_by_form(xml_path, params);
var xml = [], i = 0;
xml[i++] = '<?xml version="1.0" encoding="utf-8" ?>';
xml[i++] = '<methodCall>';
xml[i++] = '<params>';
$.each(params, function(key, val) {
xml[i++] = '<'+key+'><![CDATA['+val+']]></'+key+'>';
});
xml[i++] = '</params>';
xml[i++] = '</methodCall>';
var _xhr = null;
if (_xhr && _xhr.readyState != 0) _xhr.abort();
// 전송 성공시
function onsuccess(data, textStatus, xhr) {
var resp_xml = $(data).find('response')[0], resp_obj, txt='', ret=[], tags={}, json_str='';
waiting_obj.css('visibility', 'hidden');
if(!resp_xml) {
alert(_xhr.responseText);
return null;
}
json_str = xml2json(resp_xml, false, false);
resp_obj = (typeof(JSON)=='object' && $.isFunction(JSON.parse))?JSON.parse(json_str):eval('('+json_str+')');
resp_obj = resp_obj.response;
if (typeof(resp_obj)=='undefined') {
ret['error'] = -1;
ret['message'] = 'Unexpected error occured.';
try {
if(typeof(txt=resp_xml.childNodes[0].firstChild.data)!='undefined') ret['message'] += '\r\n'+txt;
} catch(e){};
return ret;
}
$.each(response_tags, function(key, val){ tags[val] = true; });
tags["redirect_url"] = true;
tags["act"] = true;
$.each(resp_obj, function(key, val){ if(tags[key]) ret[key] = val; });
if(ret['error'] != 0) {
if ($.isFunction($.exec_xml.onerror)) {
return $.exec_xml.onerror(module, act, ret, callback_func, response_tags, callback_func_arg, fo_obj);
}
alert(ret['message'] || 'error!');
return null;
}
if(ret['redirect_url']) {
location.href = ret['redirect_url'].replace(/&amp;/g, '&');
return null;
}
if($.isFunction(callback_func)) callback_func(ret, response_tags, callback_func_arg, fo_obj);
}
// 모든 xml데이터는 POST방식으로 전송. try-catch문으로 오류 발생시 대처
try {
$.ajax({
url : xml_path,
type : 'POST',
dataType : 'xml',
data : xml.join('\n'),
contentType : 'text/plain',
beforeSend : function(xhr){ _xhr = xhr; },
success : onsuccess,
error : function(xhr, textStatus) {
waiting_obj.css('visibility', 'hidden');
alert(textStatus);
}
});
} catch(e) {
alert(e);
return;
}
// ajax 통신중 대기 메세지 출력 (show_waiting_message값을 false로 세팅시 보이지 않음)
var waiting_obj = $('#waitingforserverresponse');
if(show_waiting_message && waiting_obj.length) {
var d = $(document);
waiting_obj.html(waiting_message).css({
'top' : (d.scrollTop()+20)+'px',
'left' : (d.scrollLeft()+20)+'px',
'visibility' : 'visible'
});
}
}
function send_by_form(url, params) {
var frame_id = 'xeTmpIframe';
var form_id = 'xeVirtualForm';
if (!$('#'+frame_id).length) {
$('<iframe name="%id%" id="%id%" style="position:absolute;left:-1px;top:1px;width:1px;height:1px"></iframe>'.replace(/%id%/g, frame_id)).appendTo(document.body);
}
$('#'+form_id).remove();
var form = $('<form id="%id%"></form>'.replace(/%id%/g, form_id)).attr({
'id' : form_id,
'method' : 'post',
'action' : url,
'target' : frame_id
});
params['xeVirtualRequestMethod'] = 'xml';
params['xeRequestURI'] = location.href.replace(/#(.*)$/i,'');
params['xeVirtualRequestUrl'] = request_uri;
$.each(params, function(key, value){
$('<input type="hidden">').attr('name', key).attr('value', value).appendTo(form);
});
form.appendTo(document.body).submit();
}
function arr2obj(arr) {
var ret = {};
for(var key in arr) {
if(arr.hasOwnProperty(key)) ret[key] = arr[key];
}
return ret;
}
/** /**
* @brief exec_json (exec_xml와 같은 용도) * @brief exec_json (exec_xml와 같은 용도)
**/ **/
(function($){
$.exec_json = function(action,data,func){ $.exec_json = function(action,data,func){
if(typeof(data) == 'undefined') data = {}; if(typeof(data) == 'undefined') data = {};
action = action.split("."); action = action.split(".");

View file

@ -176,7 +176,6 @@
$lang->unit_min = 'min'; $lang->unit_min = 'min';
$lang->unit_hour = 'hr'; $lang->unit_hour = 'hr';
$lang->unit_day = 'th'; $lang->unit_day = 'th';
$lang->unit_week = 'week';
$lang->unit_month = 'month'; $lang->unit_month = 'month';
$lang->unit_year = 'year'; $lang->unit_year = 'year';

View file

@ -175,7 +175,6 @@
$lang->unit_min = 'minuto'; $lang->unit_min = 'minuto';
$lang->unit_hour = 'hora'; $lang->unit_hour = 'hora';
$lang->unit_day = 'día'; $lang->unit_day = 'día';
$lang->unit_week = 'semana';
$lang->unit_month = 'mes'; $lang->unit_month = 'mes';
$lang->unit_year = 'año'; $lang->unit_year = 'año';

View file

@ -176,7 +176,6 @@
$lang->unit_min = 'minute'; $lang->unit_min = 'minute';
$lang->unit_hour = 'heure'; $lang->unit_hour = 'heure';
$lang->unit_day = 'jour'; $lang->unit_day = 'jour';
$lang->unit_week = 'semaine';
$lang->unit_month = 'mois'; $lang->unit_month = 'mois';
$lang->unit_year = 'année';; $lang->unit_year = 'année';;

View file

@ -176,7 +176,6 @@
$lang->unit_min = 'mindestens'; $lang->unit_min = 'mindestens';
$lang->unit_hour = 'h'; $lang->unit_hour = 'h';
$lang->unit_day = 'th'; $lang->unit_day = 'th';
$lang->unit_week = 'Woche';
$lang->unit_month = 'Monat'; $lang->unit_month = 'Monat';
$lang->unit_year = 'Jahr'; $lang->unit_year = 'Jahr';

View file

@ -176,7 +176,6 @@
$lang->unit_min = '分'; $lang->unit_min = '分';
$lang->unit_hour = '時'; $lang->unit_hour = '時';
$lang->unit_day = '日'; $lang->unit_day = '日';
$lang->unit_week = '週';
$lang->unit_month = '月'; $lang->unit_month = '月';
$lang->unit_year = '年'; $lang->unit_year = '年';

View file

@ -176,7 +176,6 @@
$lang->unit_min = '분'; $lang->unit_min = '분';
$lang->unit_hour = '시'; $lang->unit_hour = '시';
$lang->unit_day = '일'; $lang->unit_day = '일';
$lang->unit_week = '주';
$lang->unit_month = '월'; $lang->unit_month = '월';
$lang->unit_year = '년'; $lang->unit_year = '년';

View file

@ -177,7 +177,6 @@
$lang->unit_min = 'Минут'; $lang->unit_min = 'Минут';
$lang->unit_hour = 'Цаг'; $lang->unit_hour = 'Цаг';
$lang->unit_day = 'Өдөр'; $lang->unit_day = 'Өдөр';
$lang->unit_week = 'Долоо хоног';
$lang->unit_month = 'Сар'; $lang->unit_month = 'Сар';
$lang->unit_year = 'Жил'; $lang->unit_year = 'Жил';

View file

@ -14,26 +14,26 @@
$lang->cmd_view = 'Просмотреть'; $lang->cmd_view = 'Просмотреть';
$lang->cmd_view_all = 'Просмотреть все'; $lang->cmd_view_all = 'Просмотреть все';
$lang->cmd_list = 'Список'; $lang->cmd_list = 'Список';
$lang->cmd_prev = 'Пред.'; $lang->cmd_prev = 'Предыдущее';
$lang->cmd_next = 'След.'; $lang->cmd_next = 'Следующее';
$lang->cmd_send_trackback = 'Отправить трекбек'; $lang->cmd_send_trackback = 'Отправить трекбек';
$lang->cmd_registration = $lang->cmd_submit = 'Принять'; $lang->cmd_registration = $lang->cmd_submit = 'Принять';
$lang->cmd_comment_registration = 'Добавить комментарий'; $lang->cmd_comment_registration = 'Добавить запись';
$lang->cmd_insert = 'Вставить'; $lang->cmd_insert = 'Вставить';
$lang->cmd_save = 'Сохранить'; $lang->cmd_save = 'Сохранить';
$lang->cmd_load = 'Загрузить'; $lang->cmd_load = 'Загрузить';
$lang->cmd_input = 'Ввести'; $lang->cmd_input = 'Ввести';
$lang->cmd_search = 'Искать'; $lang->cmd_search = 'Искать';
$lang->cmd_find = '찾기'; $lang->cmd_find = 'Поиск';
$lang->cmd_replace = '바꾸기'; $lang->cmd_replace = 'Поменять';
$lang->cmd_confirm = '확인'; $lang->cmd_confirm = 'Подтвердить';
$lang->cmd_cancel = 'Отменить'; $lang->cmd_cancel = 'Отменить';
$lang->cmd_back = 'Вернуться'; $lang->cmd_back = 'Вернуться';
$lang->cmd_vote = 'Рекомендовать'; $lang->cmd_vote = 'Рекомендовать';
$lang->cmd_vote_down = 'Критиковать'; $lang->cmd_vote_down = 'Критиковать';
$lang->cmd_declare = 'Обвинить'; $lang->cmd_declare = 'Пожаловаться';
$lang->cmd_cancel_declare = 'Отменить Обвинить'; $lang->cmd_cancel_declare = 'Отменить жалобу';
$lang->cmd_declared_list = 'Список обвинений'; $lang->cmd_declared_list = 'Список жалоб';
$lang->cmd_copy = 'Копировать'; $lang->cmd_copy = 'Копировать';
$lang->cmd_move = 'Переместить'; $lang->cmd_move = 'Переместить';
$lang->cmd_move_up = 'Вверх'; $lang->cmd_move_up = 'Вверх';
@ -44,7 +44,7 @@
$lang->cmd_make = 'Создать'; $lang->cmd_make = 'Создать';
$lang->cmd_select = 'Выделить'; $lang->cmd_select = 'Выделить';
$lang->cmd_select_all = 'Выделить все'; $lang->cmd_select_all = 'Выделить все';
$lang->cmd_unselect_all = 'Убрать выделение Всех'; $lang->cmd_unselect_all = 'Убрать выделение ВСЕХ';
$lang->cmd_reverse_all = 'Перевернуть'; $lang->cmd_reverse_all = 'Перевернуть';
$lang->cmd_close_all = 'Закрыть все'; $lang->cmd_close_all = 'Закрыть все';
$lang->cmd_open_all = 'Открыть все'; $lang->cmd_open_all = 'Открыть все';
@ -61,40 +61,41 @@
$lang->cmd_scrap = 'В черновики'; $lang->cmd_scrap = 'В черновики';
$lang->cmd_preview = 'Предпросмотр'; $lang->cmd_preview = 'Предпросмотр';
$lang->cmd_reset = 'Сброс'; $lang->cmd_reset = 'Сброс';
$lang->cmd_remake_cache = "Пере-создать файл кэша"; $lang->cmd_remake_cache = "Пересоздать файл кэша";
$lang->cmd_publish = "Опубликовать"; $lang->cmd_publish = "Опубликовать";
$lang->cmd_layout_setup = 'Конфигурировать лейаут'; $lang->cmd_layout_setup = 'Конфигурировать лейаут';
$lang->cmd_layout_edit = 'Редактировать лейаут'; $lang->cmd_layout_edit = 'Редактировать лейаут';
$lang->cmd_search_by_ipaddress = 'Search by IP Address'; $lang->cmd_search_by_ipaddress = 'Искать по IP адресу';
$lang->cmd_add_ip_to_spamfilter = 'Add IP to spamfilter'; $lang->cmd_add_ip_to_spamfilter = 'Добавить IP в спамфильтры';
$lang->enable = 'Включено'; $lang->enable = 'Включено';
$lang->disable = 'Выключено'; $lang->disable = 'Выключено';
// Существенные слова // Основные слова
$lang->menu = 'Menu'; $lang->menu = 'Меню';
$lang->no = 'No.'; $lang->no = 'No.';
$lang->notice = 'Уведомление'; $lang->notice = 'Уведомление';
$lang->secret = 'Секрет'; $lang->secret = 'Секрет';
$lang->category = $lang->category_srl = 'Категория'; $lang->category = $lang->category_srl = 'Категория';
$lang->none_category = 'None category'; $lang->none_category = 'Без категории';
$lang->document_srl = 'Док. No.'; $lang->none_image = 'Картинки нет';
$lang->user_id = 'Юзер ID'; $lang->document_srl = 'No документа';
$lang->author = 'Разработчик'; $lang->user_id = 'ID пользователя';
$lang->author = 'Автор';
$lang->password = 'Пароль'; $lang->password = 'Пароль';
$lang->password1 = 'Пароль'; $lang->password1 = 'Пароль';
$lang->password2 = 'Подтверждение пароля'; $lang->password2 = 'Подтверждение пароля';
$lang->admin_id = 'Админ ID'; $lang->admin_id = 'ID админа';
$lang->writer = 'Автор'; $lang->writer = 'Автор записи';
$lang->user_name = 'Имя'; $lang->user_name = 'Имя пользователя';
$lang->nick_name = 'Ник'; $lang->nick_name = 'Ник';
$lang->email_address = 'Email'; $lang->email_address = 'Email';
$lang->homepage = 'Домашняя страница'; $lang->homepage = 'Домашняя страница';
$lang->blog = 'Блог'; $lang->blog = 'Блог';
$lang->birthday = 'Дата рождения'; $lang->birthday = 'Дата рождения';
$lang->browser_title = 'Заголовок браузера'; $lang->browser_title = 'Заголовок браузера';
$lang->title = 'Тема'; $lang->title = 'Заголовок';
$lang->title_content = 'Тема+Содержание'; $lang->title_content = 'Заголовок+Содержание';
$lang->topic = 'Тема'; $lang->topic = 'Тема';
$lang->replies = 'Ответы'; $lang->replies = 'Ответы';
$lang->content = 'Содержание'; $lang->content = 'Содержание';
@ -106,20 +107,21 @@
$lang->allow_comment = 'Позволить комментарии'; $lang->allow_comment = 'Позволить комментарии';
$lang->lock_comment = 'Заблокировать комментарии'; $lang->lock_comment = 'Заблокировать комментарии';
$lang->allow_trackback = 'Позволить трекбек'; $lang->allow_trackback = 'Позволить трекбек';
$lang->uploaded_file = 'Вложение'; $lang->uploaded_file = 'Прикрепить файл';
$lang->grant = 'Права доступа'; $lang->grant = 'Права доступа';
$lang->target = 'Назначение'; $lang->target = 'Назначение';
$lang->total = 'Всего'; $lang->total = 'Всего';
$lang->total_count = 'Общее кол-во'; $lang->total_count = 'Общее количество';
$lang->ipaddress = 'IP Адрес'; $lang->ipaddress = 'IP адрес';
$lang->path = 'Путь'; $lang->path = 'Путь';
$lang->cart = 'Выбранный объект'; $lang->cart = 'Выбранный объект';
$lang->friend = 'Друзья'; $lang->friend = 'Друзья';
$lang->notify = 'Уведомление'; $lang->notify = 'Уведомление';
$lang->order_target = 'согласовать цели'; $lang->order_target = 'Align Target';
$lang->order_type = 'сортировки типа'; $lang->order_type = 'Тип сортировки';
$lang->order_asc = 'взойти'; $lang->order_asc = 'снизу вверх';
$lang->order_desc = 'спустится'; $lang->order_desc = 'сверху вниз';
$lang->file = 'файл';
$lang->mid = 'Имя Модуля'; $lang->mid = 'Имя Модуля';
$lang->sid = 'Site Name'; $lang->sid = 'Site Name';
@ -128,23 +130,23 @@
$lang->module = 'Модуль'; $lang->module = 'Модуль';
$lang->skin = 'Тема'; $lang->skin = 'Тема';
$lang->colorset = 'Цветовой набор'; $lang->colorset = 'Цветовой набор';
$lang->extra_vars = 'Доп. перем.'; $lang->extra_vars = 'Дополнительные переменные.';
$lang->domain = "Domain Name"; $lang->domain = "Доменное имя";
$lang->url = "URL"; $lang->url = "URL";
$lang->document_url = 'Адрес статьи'; $lang->document_url = 'URL записи';
$lang->trackback_url = 'Адрес трекбек'; $lang->trackback_url = 'URL трекбека';
$lang->blog_name = 'Название блога'; $lang->blog_name = 'Название блога';
$lang->excerpt = 'Цитата'; $lang->excerpt = 'Цитата';
$lang->document_count = 'Всего статей'; $lang->document_count = 'Всего записей';
$lang->page_count = 'Кол-во страниц'; $lang->page_count = 'Количество страниц';
$lang->list_count = 'Кол-во списков'; $lang->list_count = 'Количество списков';
$lang->search_list_count = 'Поиск Список кол'; $lang->search_list_count = 'Поиск Список кол';
$lang->readed_count = 'Хиты'; $lang->readed_count = 'Просмотры';
$lang->voted_count = 'Голоса'; $lang->voted_count = 'Голоса';
$lang->comment_count = 'комментарии'; $lang->comment_count = 'Комментарии';
$lang->member_count = 'Кол-во пользователей'; $lang->member_count = 'Количество пользователей';
$lang->date = 'Дата'; $lang->date = 'Дата';
$lang->regdate = 'Дата регистрации'; $lang->regdate = 'Дата регистрации';
$lang->last_update = 'Последнее обновление'; $lang->last_update = 'Последнее обновление';
@ -157,7 +159,7 @@
$lang->search_keyword = 'Ключевые слова'; $lang->search_keyword = 'Ключевые слова';
$lang->is_default = 'По умолчанию'; $lang->is_default = 'По умолчанию';
$lang->no_documents = 'Нет статей'; $lang->no_documents = 'Нет записей';
$lang->board_manager = 'Настройки форума'; $lang->board_manager = 'Настройки форума';
$lang->member_manager = 'Настройки пользователей'; $lang->member_manager = 'Настройки пользователей';
@ -165,10 +167,10 @@
$lang->use = 'Использовать'; $lang->use = 'Использовать';
$lang->notuse = 'Не использовать'; $lang->notuse = 'Не использовать';
$lang->not_exists = "Не существует"; $lang->not_exists = "Отсутствует";
$lang->public = 'общественности'; $lang->public = 'Показать всем';
$lang->private = 'частный'; $lang->private = 'Не показывать';
$lang->unit_sec = 'сек.'; $lang->unit_sec = 'сек.';
$lang->unit_min = 'мин.'; $lang->unit_min = 'мин.';
@ -179,13 +181,13 @@
$lang->unit_year = 'г.'; $lang->unit_year = 'г.';
$lang->unit_week = array( $lang->unit_week = array(
'Monday' => 'Monday', 'Monday' => 'Понедельник',
'Tuesday' => 'Tuesday', 'Tuesday' => 'Вторник',
'Wednesday' => 'Wednesday', 'Wednesday' => 'Среда',
'Thursday' => 'Thursday', 'Thursday' => 'Четверг',
'Friday' => 'Friday', 'Friday' => 'Пятница',
'Saturday' => 'Saturday', 'Saturday' => 'Суббота',
'Sunday' => 'Sunday', 'Sunday' => 'Воскресенье',
); );
$lang->unit_meridiem = array( $lang->unit_meridiem = array(
@ -196,22 +198,22 @@
); );
$lang->time_gap = array( $lang->time_gap = array(
'min' => '%d minute ago', 'min' => '%d минуту назад',
'mins' => '%d minutes ago', 'mins' => '%d минут назад',
'hour' => '%d hour ago', 'hour' => '%d час назад',
'hours' => '%d hours ago', 'hours' => '%d часов назад',
); );
// Описания // Описания
$lang->about_tag = 'Вы можете применить несколько тегов, разделенных запятыми (,)'; $lang->about_tag = 'Вы можете применить несколько тегов, разделенных запятыми (,)';
$lang->about_layout = 'Лейауты украшают внешний вид Ваших модулей. Вы можете сконфигирировать их с помощью меню Лейаут сверху'; $lang->about_layout = 'Лейауты украшают внешний вид Ваших модулей. Вы можете сконфигурировать их с помощью меню Лейаут сверху';
// Сообщение // Сообщение
$lang->msg_call_server = 'Идет обработка. Пожалуйста, подождите...'; $lang->msg_call_server = 'Идет обработка. Пожалуйста, подождите...';
$lang->msg_db_not_setted = 'Даза данных не сконфигурирована'; $lang->msg_db_not_setted = 'Даза данных не сконфигурирована';
$lang->msg_dbconnect_failed = "Произошла ошибка подключения к базе данных.\nПожалуйста, проверьте иформацию базы данных еще раз"; $lang->msg_dbconnect_failed = "Произошла ошибка подключения к базе данных.\nПожалуйста, проверьте иформацию базы данных еще раз";
$lang->msg_invalid_queryid = 'Указанный ID запроса неверен'; $lang->msg_invalid_queryid = 'Указанный ID запроса неверен';
$lang->msg_not_permitted = 'У Вас нет прав доступа'; $lang->msg_not_permitted = 'У Вас нет доступа';
$lang->msg_input_password = 'Пожалуйста, введите пароль'; $lang->msg_input_password = 'Пожалуйста, введите пароль';
$lang->msg_invalid_document = 'Неверный номер статьи'; $lang->msg_invalid_document = 'Неверный номер статьи';
$lang->msg_invalid_request = 'Неверный запрос'; $lang->msg_invalid_request = 'Неверный запрос';
@ -219,103 +221,101 @@
$lang->msg_error_occured = 'Произошла ошибка'; $lang->msg_error_occured = 'Произошла ошибка';
$lang->msg_not_founded = 'Сообщение не найдено'; $lang->msg_not_founded = 'Сообщение не найдено';
$lang->msg_no_result = 'Ничего не найдено'; $lang->msg_no_result = 'Ничего не найдено';
$lang->msg_fail_to_request_open = 'Fail to open your request'; $lang->msg_fail_to_request_open = 'Ошибка в запрашиваемом соединении';
$lang->msg_invalid_format = 'Invalid Format'; $lang->msg_invalid_format = 'Неверный формат';
$lang->msg_not_permitted_act = 'У Вас нет прав для исполнения запрошенного действия'; $lang->msg_not_permitted_act = 'У Вас нет прав для исполнения запрошенного действия';
$lang->msg_module_is_not_exists = "요청하신 모듈을 찾을 수 없습니다.\n사이트 관리자에게 모듈 점검 요청 바랍니다"; $lang->msg_module_is_not_exists = "Невозможно найти запрашиваемый модуль.\nПросьба обратиться к администратору";
$lang->msg_module_is_not_standalone = 'Запрошенный модуль не может быть исполнен независимо'; $lang->msg_module_is_not_standalone = 'Запрошенный модуль не может быть исполнен независимо';
$lang->msg_default_url_is_not_defined = '기본 URL이 정해지지 않아서 동작을 중지합니다'; $lang->msg_default_url_is_not_defined = 'Default URL is not define';
$lang->success_registed = 'Зарегистрировано успешно'; $lang->success_registed = 'Зарегистрировано успешно';
$lang->success_declared = 'Обвинение успешно'; $lang->success_declared = 'Жалоба отправлена';
$lang->success_updated = 'Обновление успешно'; $lang->success_updated = 'Обновление успешно';
$lang->success_deleted = 'Удалено успешно'; $lang->success_deleted = 'Удалено успешно';
$lang->success_voted = 'Рекомендовано успешно'; $lang->success_voted = 'Рекомендовано успешно';
$lang->success_blamed = 'Обвиняют success_blamed'; $lang->success_blamed = 'Критика принята';
$lang->success_moved = 'Перемещено успешно'; $lang->success_moved = 'Перемещено успешно';
$lang->success_sended = 'Отправлено успешно'; $lang->success_sended = 'Отправлено успешно';
$lang->success_reset = 'Сброшено успешно'; $lang->success_reset = 'Сброшено успешно';
$lang->success_leaved = 'Все данные пользователя были полностью удалены.'; $lang->success_leaved = 'Пользователь удален';
$lang->success_saved = 'Сохранено успешно'; $lang->success_saved = 'Сохранено успешно';
$lang->fail_to_delete = 'Не может быть удалено'; $lang->fail_to_delete = 'Не может быть удалено';
$lang->fail_to_move = 'Не может быть перемещено'; $lang->fail_to_move = 'Перемещение невозможно';
$lang->failed_voted = 'Ошибка при рекомендации'; $lang->failed_voted = 'Рекоммендовать невозможно';
$lang->failed_blamed = 'Не виноват'; $lang->failed_blamed = 'Критиковать невозможно';
$lang->failed_declared = 'Ошибка при обвинении'; $lang->failed_declared = 'Пожаловаться невозможно';
$lang->fail_to_delete_have_children = 'Пожалуйста, попробуйте еще после удаления дочерних объектов'; $lang->fail_to_delete_have_children = 'Невозможно удаление из-за наличия ответов в записи';
$lang->confirm_submit = 'Вы подтверждаете применение?'; $lang->confirm_submit = 'Вы подтверждаете запись?';
$lang->confirm_logout = 'Вы подтверждаете выход?'; $lang->confirm_logout = 'Вы подтверждаете выход?';
$lang->confirm_vote = 'Вы подтверждаете рекомендацию?'; $lang->confirm_vote = 'Рекомендовать?';
$lang->confirm_delete = 'Вы подтверждаете удаление?'; $lang->confirm_delete = 'Удалить?';
$lang->confirm_move = 'Вы подтверждаете перемещение?'; $lang->confirm_restore = 'Восстановить?';
$lang->confirm_move = 'Переместить?';
$lang->confirm_reset = 'Вы подтверждаете сброс?'; $lang->confirm_reset = 'Вы подтверждаете сброс?';
$lang->confirm_leave = 'Вы подтверждаете уход?'; $lang->confirm_leave = 'Вы подтверждаете удаление аккаунта?';
$lang->confirm_update = 'Are you sure to update?'; $lang->confirm_update = 'Обновить?';
$lang->column_type = 'Тип колонки'; $lang->column_type = 'Тип колонки';
$lang->column_type_list['text'] = 'одна строка текста'; $lang->column_type_list['text'] = 'Однострочное окно ввода';
$lang->column_type_list['homepage'] = 'url'; $lang->column_type_list['homepage'] = 'url';
$lang->column_type_list['email_address'] = 'по электронной почте'; $lang->column_type_list['email_address'] = 'email';
$lang->column_type_list['tel'] = 'номер телефона'; $lang->column_type_list['tel'] = 'номер телефона';
$lang->column_type_list['textarea'] = 'многолетних-лайн textarea'; $lang->column_type_list['textarea'] = 'Многострочное окно ввода';
$lang->column_type_list['checkbox'] = 'флажок (несколько отбор)'; $lang->column_type_list['checkbox'] = 'Чекбокс (мульти вариант)';
$lang->column_type_list['select'] = 'выберите поле (один отбор)'; $lang->column_type_list['select'] = 'Выбор (один вариант)';
$lang->column_type_list['radio'] = 'radio button (radio)'; $lang->column_type_list['radio'] = 'Кнопка радио (радио)';
$lang->column_type_list['kr_zip'] = 'почтовый индекс (корейский)'; $lang->column_type_list['kr_zip'] = 'Почтовый индекс (Корейский)';
$lang->column_type_list['date'] = 'Дата (гггг / мм / дд)'; $lang->column_type_list['date'] = 'Дата (гггг / мм / дд)';
//$lang->column_type_list['jp_zip'] = 'почтовый индекс (японский)'; //$lang->column_type_list['jp_zip'] = 'почтовый индекс (японский)';
$lang->column_name = 'Имя колонки'; $lang->column_name = 'Имя колонки';
$lang->column_title = 'Название колонки'; $lang->column_title = 'Заголовок колонки';
$lang->default_value = 'Стандартное значение'; $lang->default_value = 'Стандартное значение';
$lang->is_active = 'Активация';
$lang->is_required = 'Обязательные данные';
$lang->eid = 'Имя экстра переменных';
// ftp 관련 // ftp 관련
$lang->ftp_form_title = 'FTP 정보 입력'; $lang->ftp_form_title = 'Введите данные FTP';
$lang->ftp = 'FTP'; $lang->ftp = 'FTP';
$lang->ftp_host = 'FTP hostname'; $lang->ftp_host = 'FTP hostname';
$lang->ftp_port = 'FTP port'; $lang->ftp_port = 'FTP port';
$lang->about_ftp_password = 'FTP password will not be stored'; $lang->about_ftp_password = 'FTP password will not be stored';
$lang->cmd_check_ftp_connect = 'FTP 접속 확인'; $lang->cmd_check_ftp_connect = 'Check FTP Connection';
$lang->about_ftp_info = " $lang->about_ftp_info = "
FTP 정보는 다음의 경우에 이용될 있습니다.<br/> FTP account information can be used in following cases. <br />
1. PHP의 safe_mode=On일 경우에 FTP 정보를 이용해서 XE를 정상적으로 동작할 있게 합니다.<br/> 1. If safe_mode setting of PHP is on, XE will be installed using FTP. <br />
2. 자동 업데이트등에서 FTP 정보를 이용할 있습니다.<br/> 2. Automatic updates might use FTP information. <br />
FTP정보는 files/config/ftp.config.php 파일내에 정보가 저장됩니다.<br/> This account info will be stored in files/config/ftp.config.php <br />
그리고 설치 관리자 페이지에서 FTP 정보를 변경하거나 제거할 있습니다.<br /> After installation, you can modify or delete the account info at the administration page. <br />
"; ";
$lang->msg_safe_mode_ftp_needed = "PHP의 safe_mode가 On일 경우 FTP 정보를 꼭 입력해주셔야 XE의 설치 및 사용이 가능합니다"; $lang->msg_safe_mode_ftp_needed = "If safe_mode setting of PHP is on, you should input FTP account information to install XE.";
$lang->msg_ftp_not_connected = "localhost로의 FTP 접속 오류가 발생하였습니다. ftp 포트 번호를 확인해주시거나 ftp 서비스가 가능한지 확인해주세요"; $lang->msg_ftp_not_connected = "Connection to localhost via FTP failed. Please check the port number and if FTP service is available.";
$lang->msg_ftp_invalid_auth_info = "입력하신 FTP 정보로 로그인을 하지 못했습니다. FTP정보를 확인해주세요"; $lang->msg_ftp_invalid_auth_info = "Authentication failed. Please check the username and password.";
$lang->msg_ftp_mkdir_fail = "FTP를 이용한 디렉토리 생성 명령을 실패하였습니다. FTP 서버의 설정을 확인해주세요"; $lang->msg_ftp_mkdir_fail = "Directory creation failed. Please check the permission of FTP account.";
$lang->msg_ftp_chmod_fail = "FTP를 이용한 디렉토리의 속성 변경을 실패하였습니다. FTP 서버의 설정을 확인해주세요"; $lang->msg_ftp_chmod_fail = "Chmod failed. Please check the permission and configuration of FTP server.";
$lang->msg_ftp_connect_success = "FTP 접속 및 인증 성공하였습니다"; $lang->msg_ftp_connect_success = "Connection and authentication to the FTP server succeeded.";
$lang->ftp_path_title = 'FTP 경로 정보 입력'; $lang->ftp_path_title = 'FTP Path Information';
$lang->msg_ftp_installed_realpath = '설치된 XE의 절대경로'; $lang->msg_ftp_installed_realpath = 'Absolute Path of XE';
$lang->msg_ftp_installed_ftp_realpath = '설치된 XE의 FTP 절대경로 설정'; $lang->msg_ftp_installed_ftp_realpath = 'Absolute FTP Path of XE';
// Alert messages for Javascript using by XML filter
$lang->filter->isnull = 'Please input a value for %s';
$lang->is_active = 'Активно'; $lang->filter->outofrange = 'Please align the text length of %s';
$lang->is_required = 'Требуемое поле'; $lang->filter->equalto = "The value of %s is invalid";
$lang->eid = '확장변수 이름'; $lang->filter->invalid_email = "The format of %s is invalid. ex) zbxe@zeroboard.com";
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "The format of %s is invalid.\\nAll values should consist of alphabets, numbers or underscore(_) and the first letter should be alphabet";
// Alert-сообщения для Javascript используя XML filter $lang->filter->invalid_homepage = "The format of %s is invalid. ex) http://www.zeroboard.com";
$lang->filter->isnull = 'Пожалуйста, введите значение для %s'; $lang->filter->invalid_korean = "The format of %s is invalid. Please input Korean only";
$lang->filter->outofrange = 'Пожалуйста, исправьте длину текста %s'; $lang->filter->invalid_korean_number = "The format of %s is invalid. Please input Korean or numbers";
$lang->filter->equalto = "Значение %s неверно"; $lang->filter->invalid_alpha = "The format of %s is invalid. Please input alphabets only";
$lang->filter->invalid_email = "Формат %s неверен. Например: zbxe@zeroboard.com"; $lang->filter->invalid_alpha_number = "The format of %s is invalid. Please input alphabets or numbers";
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "Формат %s неверен.\\n Все значения должны состоять из алфавита, цифр и символа подчеркивания(_), и первая буква должна принадлежать латинскому алфавиту."; $lang->filter->invalid_number = "The format of %s is invalid. Please input numbers only";
$lang->filter->invalid_homepage = "Формат %s неверен. Например: http://www.zeroboard.com";
$lang->filter->invalid_korean = "Формат %s неверен. Пожалуйста, вводите по-корейски";
$lang->filter->invalid_korean_number = "Формат %s неверен. Пожалуйста, вводите по-корейски или цифрами";
$lang->filter->invalid_alpha = "Формат %s неверен. Пожалуйста, вводите только алфавитные символы";
$lang->filter->invalid_alpha_number = "Формат %s неверен. Пожалуйста, вводите алфавитные символы или цифры";
$lang->filter->invalid_number = "Формат %s неверен. Пожалуйста, вводите только цифры";
$lang->security_warning_embed = "Due to security concern, administrators are not allowed to view embedded items.<BR /> To view them, please use another non-administrator ID."; $lang->security_warning_embed = "Due to security concern, administrators are not allowed to view embedded items.<BR /> To view them, please use another non-administrator ID.";
?> ?>

View file

@ -172,7 +172,6 @@
$lang->unit_min = 'Phút'; $lang->unit_min = 'Phút';
$lang->unit_hour = 'Giờ'; $lang->unit_hour = 'Giờ';
$lang->unit_day = 'Ngày'; $lang->unit_day = 'Ngày';
$lang->unit_week = 'Tuần';
$lang->unit_month = 'Tháng'; $lang->unit_month = 'Tháng';
$lang->unit_year = 'Năm'; $lang->unit_year = 'Năm';

View file

@ -176,7 +176,6 @@
$lang->unit_min = '分'; $lang->unit_min = '分';
$lang->unit_hour = '时'; $lang->unit_hour = '时';
$lang->unit_day = '日'; $lang->unit_day = '日';
$lang->unit_week = '周';
$lang->unit_month = '月'; $lang->unit_month = '月';
$lang->unit_year = '年'; $lang->unit_year = '年';

View file

@ -176,7 +176,6 @@
$lang->unit_min = '分'; $lang->unit_min = '分';
$lang->unit_hour = '時'; $lang->unit_hour = '時';
$lang->unit_day = '日'; $lang->unit_day = '日';
$lang->unit_week = '周';
$lang->unit_month = '月'; $lang->unit_month = '月';
$lang->unit_year = '年'; $lang->unit_year = '年';

View file

@ -13,7 +13,7 @@
* @brief XE의 전체 버전 표기 * @brief XE의 전체 버전 표기
* 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 * 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야
**/ **/
define('__ZBXE_VERSION__', '1.4.0.9'); define('__ZBXE_VERSION__', '1.4.1.0');
/** /**
* @brief zbXE가 설치된 장소의 base path를 구함 * @brief zbXE가 설치된 장소의 base path를 구함
@ -112,6 +112,14 @@
**/ **/
require(_XE_PATH_.'config/func.inc.php'); require(_XE_PATH_.'config/func.inc.php');
/**
* @brief Set Timezone as server time
**/
if(version_compare(PHP_VERSION, '5.3.0') >= 0)
{
date_default_timezone_set(@date_default_timezone_get());
}
if(__DEBUG__) define('__StartTime__', getMicroTime()); if(__DEBUG__) define('__StartTime__', getMicroTime());

View file

@ -652,7 +652,7 @@
// 2. 이벤트명 뒤에는 등호(=)가 존재해야하나 앞, 뒤에 공백이 있을 수 있음 // 2. 이벤트명 뒤에는 등호(=)가 존재해야하나 앞, 뒤에 공백이 있을 수 있음
// 3. 에디터 컴포넌트에서 on으로 시작하는 변수명을 가질 수 있으므로 실제 이벤트명만을 체크해야 함 // 3. 에디터 컴포넌트에서 on으로 시작하는 변수명을 가질 수 있으므로 실제 이벤트명만을 체크해야 함
$attrs = preg_replace( $attrs = preg_replace(
'/(\r|\n| )+on(click|dblclick|mousedown|mouseup|mouseover|mouseout|mousemove|keydown|keyup|keypress|load|unload|abort|error|select|change|submit|reset|resize|scroll|focus|blur)+([= ]+)/is', '/(\r|\n| |\t|\"|\'|\/|\`)+on(click|dblclick|mousedown|mouseup|mouseover|mouseout|mousemove|keydown|keyup|keypress|load|unload|abort|error|select|change|submit|reset|resize|scroll|focus|blur|forminput|input|invaild|drag|dragend|dragenter|dragleave|dragover|dragstart|drop|mousewheel|scroll|canplay|canplaythrough|durationchange|emptied|ended|error|loadeddata|loadstart|pause|play|playing|progress|ratechange|readystatechange|seeked|seeking|stalled|suspend|timeupdate|volumechange|waiting|message|show)+([= \r\n\t]+)/is',
' _on$2=', ' _on$2=',
$attrs $attrs
); );
@ -678,7 +678,8 @@
$dynsrc = $xml_doc->{$tag}->attrs->dynsrc; $dynsrc = $xml_doc->{$tag}->attrs->dynsrc;
$lowsrc = $xml_doc->{$tag}->attrs->lowsrc; $lowsrc = $xml_doc->{$tag}->attrs->lowsrc;
$href = $xml_doc->{$tag}->attrs->href; $href = $xml_doc->{$tag}->attrs->href;
if(_isHackedSrc($src) || _isHackedSrc($dynsrc) || _isHackedSrc($lowsrc) || _isHackedSrc($href) ) return sprintf("<%s>",$tag); $data = $xml_doc->{$tag}->attrs->data;
if(_isHackedSrc($src) || _isHackedSrc($dynsrc) || _isHackedSrc($lowsrc) || _isHackedSrc($href) || _isHackedSrc($data)) return sprintf("<%s>",$tag);
return $matches[0]; return $matches[0];
} }
@ -807,6 +808,20 @@
} }
function detectUTF8($string, $return_convert = false, $urldecode = true) {
if($urldecode) $string = urldecode($string);
$sample = iconv('utf-8', 'utf-8', $string);
$is_utf8 = (md5($sample) == md5($string));
if(!$urldecode) $string = urldecode($string);
if($return_convert) return ($is_utf8) ? $string : iconv('euc-kr', 'utf-8', $string);
return $is_utf8;
}
function json_encode2($data) { function json_encode2($data) {
switch (gettype($data)) { switch (gettype($data)) {
case 'boolean': case 'boolean':

View file

@ -7,7 +7,7 @@
<title xml:lang="zh-CN">插件管理</title> <title xml:lang="zh-CN">插件管理</title>
<title xml:lang="jp">アドオン</title> <title xml:lang="jp">アドオン</title>
<title xml:lang="fr">Additions</title> <title xml:lang="fr">Additions</title>
<title xml:lang="ru">Аддоны</title> <title xml:lang="ru">Аддон</title>
<title xml:lang="zh-TW">附加元件</title> <title xml:lang="zh-TW">附加元件</title>
<description xml:lang="ko">애드온을 등록하거나 사용/미사용을 설정하는 애드온 관리 모듈입니다.</description> <description xml:lang="ko">애드온을 등록하거나 사용/미사용을 설정하는 애드온 관리 모듈입니다.</description>
<description xml:lang="en">This module is for maintaining addons which can toggle use and disuse states.</description> <description xml:lang="en">This module is for maintaining addons which can toggle use and disuse states.</description>

View file

@ -19,7 +19,8 @@
$sftp = ssh2_sftp($connection); $sftp = ssh2_sftp($connection);
$curpwd = "ssh2.sftp://$sftp".$this->pwd; $curpwd = "ssh2.sftp://$sftp".$this->pwd;
$dh = opendir($curpwd); $dh = @opendir($curpwd);
if(!$dh) return new Object(-1, 'msg_ftp_invalid_path');
$list = array(); $list = array();
while(($file = readdir($dh)) !== false) { while(($file = readdir($dh)) !== false) {
if(is_dir($curpwd.$file)) if(is_dir($curpwd.$file))
@ -71,6 +72,10 @@
if($_list){ if($_list){
foreach($_list as $k => $v){ foreach($_list as $k => $v){
$src = null;
$src->data = $v;
$res = Context::convertEncoding($src);
$v = $res->data;
if(strpos($v,'d') === 0 || strpos($v, '<DIR>')) $list[] = substr(strrchr($v,' '),1) . '/'; if(strpos($v,'d') === 0 || strpos($v, '<DIR>')) $list[] = substr(strrchr($v,' '),1) . '/';
} }
} }

View file

@ -81,4 +81,5 @@
$lang->sftp = "Use SFTP"; $lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List"; $lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.'; $lang->ftp_remove_info = 'Remove FTP Info.';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
?> ?>

View file

@ -83,4 +83,5 @@
$lang->sftp = "Use SFTP"; $lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List"; $lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.'; $lang->ftp_remove_info = 'Remove FTP Info.';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
?> ?>

View file

@ -82,4 +82,5 @@
$lang->sftp = "Use SFTP"; $lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List"; $lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.'; $lang->ftp_remove_info = 'Remove FTP Info.';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
?> ?>

View file

@ -81,4 +81,5 @@
$lang->sftp = "Use SFTP"; $lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List"; $lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.'; $lang->ftp_remove_info = 'Remove FTP Info.';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
?> ?>

View file

@ -81,4 +81,5 @@
$lang->sftp = 'SFTP 사용'; $lang->sftp = 'SFTP 사용';
$lang->ftp_get_list = '목록 가져오기'; $lang->ftp_get_list = '목록 가져오기';
$lang->ftp_remove_info = 'FTP 정보 삭제'; $lang->ftp_remove_info = 'FTP 정보 삭제';
$lang->msg_ftp_invalid_path = 'FTP Path를 읽을 수 없습니다.';
?> ?>

View file

@ -7,8 +7,8 @@
$lang->admin_info = 'Информация администратора'; $lang->admin_info = 'Информация администратора';
$lang->admin_index = 'Индексная страница администратора'; $lang->admin_index = 'Индексная страница администратора';
$lang->control_panel = 'Control panel'; $lang->control_panel = 'Контрольная панель';
$lang->start_module = 'Начало модуля'; $lang->start_module = 'Стартовый модуль';
$lang->about_start_module = 'Вы можете указать модуль запуска по умолчанию.'; $lang->about_start_module = 'Вы можете указать модуль запуска по умолчанию.';
$lang->module_category_title = array( $lang->module_category_title = array(
@ -24,62 +24,61 @@
'system' => 'System Setting', 'system' => 'System Setting',
); );
$lang->newest_news = "Последние новости"; $lang->newest_news = 'Последние новости';
$lang->env_setup = "Настройка"; $lang->env_setup = 'Настройка';
$lang->default_url = "기본 URL"; $lang->default_url = 'Основной URL';
$lang->about_default_url = "XE 가상 사이트(cafeXE등)의 기능을 사용할때 기본 URL을 입력해 주셔야 가상 사이트간 인증 연동이 되고 게시글/모듈등의 연결이 정상적으로 이루어집니다. (ex: http://도메인/설치경로)"; $lang->about_default_url = 'If you use a virtual site feature (e.g., cafeXE), input default URL (parent-sites address), then SSO would be enabled, thus connection to documents/modules works properly';
$lang->env_information = 'Информация окружения';
$lang->current_version = 'Текущая версия';
$lang->current_path = 'Текущий путь';
$lang->released_version = 'Последняя версия';
$lang->about_download_link = 'Новая версия XE доступна.\nЧтобы скачать последнюю версию, нажмите ссылку закачки';
$lang->env_information = "Информация окружения"; $lang->item_module = 'Список модулей';
$lang->current_version = "Текущая версия"; $lang->item_addon = 'Список аддонов';
$lang->current_path = "Текущий путь"; $lang->item_widget = 'Список виджетов';
$lang->released_version = "Последняя версия"; $lang->item_layout = 'Список лейаутов';
$lang->about_download_link = "Новая версия XE доступна.\nЧтобы скачать последнюю версию, нажмите ссылку закачки.";
$lang->item_module = "Список модулей"; $lang->module_name = 'Имя модуля';
$lang->item_addon = "Список аддонов"; $lang->addon_name = 'Имя аддона';
$lang->item_widget = "Список виджетов"; $lang->version = 'Версия';
$lang->item_layout = "Список лейаутов"; $lang->author = 'Разработчик';
$lang->table_count = 'Номер таблицы';
$lang->installed_path = 'Путь установки';
$lang->module_name = "Имя модуля"; $lang->cmd_shortcut_management = 'Редактировать меню';
$lang->addon_name = "Имя аддона";
$lang->version = "Версия";
$lang->author = "Разработчик";
$lang->table_count = "Номер таблицы";
$lang->installed_path = "Путь установки";
$lang->cmd_shortcut_management = "Редактировать меню";
$lang->msg_is_not_administrator = 'Только для администраторов!'; $lang->msg_is_not_administrator = 'Только для администраторов!';
$lang->msg_manage_module_cannot_delete = 'Ярлыки модулей, аддонов, лейаутов, виджетов не могут быть удалены'; $lang->msg_manage_module_cannot_delete = 'Ярлыки модулей, аддонов, лейаутов, виджетов не могут быть удалены';
$lang->msg_default_act_is_null = 'Ярлык не может быть зарегистрирован, поскольку стандартное административное действие не установлено'; $lang->msg_default_act_is_null = 'Ярлык не может быть зарегистрирован, поскольку стандартное административное действие не установлено';
$lang->welcome_to_xe = 'Добро пожаловать на страницу администратора XE'; $lang->welcome_to_xe = 'Добро пожаловать на страницу администратора XE';
$lang->about_admin_page = "Страница администратора все еще в разработке,\nМы добавим важные доработки, принимая много хороших предложений на этапе Closebeta."; $lang->about_lang_env = 'Чтобы применить выбранный язык для пользователей как страндартный, нажмите кнопку Сохранить [Save] после изменения';
$lang->about_lang_env = "Чтобы применить выбранный язык для пользователей как страндартный, нажмите кнопку Сохранить [Save] после изменения.";
$lang->xe_license = 'XE подчиняется Стандартной Общественной Лицензии GPL'; $lang->xe_license = 'XE подчиняется Стандартной Общественной Лицензии GPL';
$lang->about_shortcut = 'Вы можете удалить ярлыки модулей, зарегистрированных в списке часто используемых модулей'; $lang->about_shortcut = 'Вы можете удалить ярлыки модулей, зарегистрированных в списке часто используемых модулей';
$lang->yesterday = "Yesterday"; $lang->yesterday = 'Вчера';
$lang->today = "Today"; $lang->today = 'Сегодня';
$lang->cmd_lang_select = "언어선택"; $lang->cmd_lang_select = 'Выбор языка';
$lang->about_cmd_lang_select = "선택된 언어들만 서비스 됩니다"; $lang->about_cmd_lang_select = 'Возможно использование только выбранных языков';
$lang->about_recompile_cache = "쓸모없어졌거나 잘못된 캐시파일들을 정리할 수 있습니다"; $lang->about_recompile_cache = 'You can delete useless or invalid cache files';
$lang->use_ssl = "SSL 사용"; $lang->use_ssl = 'Использовать SSL';
$lang->ssl_options = array( $lang->ssl_options = array(
'none' => "사용안함", 'none' => 'Никогда',
'optional' => "선택적으로", 'optional' => 'На выбор',
'always' => "항상사용" 'always' => 'Всегда'
); );
$lang->about_use_ssl = "선택적으로에서는 회원가입/정보수정등의 지정된 action에서 SSL을 사용하고 항상 사용은 모든 서비스가 SSL을 이용하게 됩니다."; $lang->about_use_ssl = 'In case of "Optional", SSL will be used for actions such as signing up / changing information. And for "Always", your site will be served only via https';
$lang->server_ports = "서버포트지정"; $lang->server_ports = 'Server Port';
$lang->about_server_ports = "HTTP는 80, HTTPS는 443이외의 다른 포트를 사용하는 경우에 포트를 지정해주어야합니다."; $lang->about_server_ports = 'If your web server does not use 80 for HTTP or 443 for HTTPS port, you should specify server ports';
$lang->use_db_session = '인증 세션 DB 사용'; $lang->use_db_session = 'Use Session DB';
$lang->about_db_session = '인증시 사용되는 PHP 세션을 DB로 사용하는 기능입니다.<br/>웹서버의 사용율이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다<br/>단 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.'; $lang->about_db_session = 'It will use php session with DB when authenticating.<br/>Websites with infrequent usage of web server may expect faster response when this function is disabled.<br/>However session DB will make it unable to get current users, so you cannot use related functions';
$lang->sftp = "Use SFTP"; $lang->sftp = 'Use SFTP';
$lang->ftp_get_list = "Get List"; $lang->ftp_get_list = 'Get List';
$lang->ftp_remove_info = 'Remove FTP Info.'; $lang->ftp_remove_info = 'Remove FTP Info';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
?> ?>

View file

@ -83,4 +83,5 @@
$lang->sftp = "Use SFTP"; $lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List"; $lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.'; $lang->ftp_remove_info = 'Remove FTP Info.';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
?> ?>

View file

@ -81,4 +81,5 @@
$lang->sftp = "Use SFTP"; $lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List"; $lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.'; $lang->ftp_remove_info = 'Remove FTP Info.';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
?> ?>

View file

@ -81,4 +81,5 @@
$lang->sftp = "使用 SFTP"; $lang->sftp = "使用 SFTP";
$lang->ftp_get_list = "取得列表"; $lang->ftp_get_list = "取得列表";
$lang->ftp_remove_info = '移除 FTP 資料'; $lang->ftp_remove_info = '移除 FTP 資料';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
?> ?>

View file

@ -57,16 +57,14 @@
continue; continue;
} }
if($package->path == ".") $type = $oModel->getTypeFromPath($package->path);
{ if($type == "core")
$type = "core"; {
$version = __ZBXE_VERSION__; $version = __ZBXE_VERSION__;
} }
else else
{ {
$path_array = explode("/", $package->path); $config_file = null;
$target_name = array_pop($path_array);
$type = substr(array_pop($path_array), 0, -1);
switch($type) switch($type)
{ {
case "module": case "module":
@ -86,10 +84,8 @@
$config_file = "/info.xml"; $config_file = "/info.xml";
$type = "component"; $type = "component";
break; break;
default:
continue;
} }
if(!$config_file) continue;
$xml = new XmlParser(); $xml = new XmlParser();
$xmlDoc = $xml->loadXmlFile($real_path.$config_file); $xmlDoc = $xml->loadXmlFile($real_path.$config_file);
if(!$xmlDoc) continue; if(!$xmlDoc) continue;
@ -196,5 +192,42 @@
executeQuery("autoinstall.insertCategory", $args); executeQuery("autoinstall.insertCategory", $args);
} }
} }
function procAutoinstallAdminUninstallPackage()
{
$package_srl = Context::get('package_srl');
$oModel =& getModel('autoinstall');
$package = $oModel->getPackage($package_srl);
$path = $package->path;
if(!$_SESSION['ftp_password'])
{
$ftp_password = Context::get('ftp_password');
}
else
{
$ftp_password = $_SESSION['ftp_password'];
}
$ftp_info = Context::getFTPInfo();
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
{
$oModuleInstaller = new SFTPModuleInstaller($package);
}
else if(function_exists(ftp_connect))
{
$oModuleInstaller = new PHPFTPModuleInstaller($package);
}
else
{
$oModuleInstaller = new FTPModuleInstaller($package);
}
$oModuleInstaller->setPassword($ftp_password);
$output = $oModuleInstaller->uninstall();
if(!$output->toBool()) return $output;
$this->setMessage('success_deleted');
}
} }
?> ?>

View file

@ -9,6 +9,7 @@
class autoinstallAdminView extends autoinstall { class autoinstallAdminView extends autoinstall {
var $categories; var $categories;
var $ftp_set = false;
function init() { function init() {
$template_path = sprintf("%stpl/",$this->module_path); $template_path = sprintf("%stpl/",$this->module_path);
@ -18,6 +19,8 @@
$ftp_info = Context::getFTPInfo(); $ftp_info = Context::getFTPInfo();
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true); if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
else $this->ftp_set = true;
$this->dispCategory(); $this->dispCategory();
$oModel = &getModel('autoinstall'); $oModel = &getModel('autoinstall');
@ -39,7 +42,7 @@
{ {
if(!is_array($items)) $items = array($items); if(!is_array($items)) $items = array($items);
$item_list = array(); $item_list = array();
$targets = array('category_srl', 'package_srl', 'item_screenshot_url', 'package_voted', 'package_voter', 'package_description', 'package_downloaded', 'item_regdate', 'title', 'item_version', 'package_star'); $targets = array('category_srl', 'package_srl', 'item_screenshot_url', 'package_voted', 'package_voter', 'package_description', 'package_downloaded', 'item_regdate', 'title', 'item_version', 'package_star', 'depfrom');
$targetpackages = array(); $targetpackages = array();
foreach($items as $item) foreach($items as $item)
{ {
@ -48,7 +51,7 @@
$oModel = &getModel('autoinstall'); $oModel = &getModel('autoinstall');
if($package == null) if($package == null)
$packages = $oModel->getInstalledPackages(array_keys($targetpackages)); $packages = $oModel->getInstalledPackages(array_keys($targetpackages));
$depto = array();
foreach($items as $item) foreach($items as $item)
{ {
$v = $this->rearrange($item, $targets); $v = $this->rearrange($item, $targets);
@ -56,10 +59,52 @@
{ {
$v->current_version = $packages[$v->package_srl]->current_version; $v->current_version = $packages[$v->package_srl]->current_version;
$v->need_update = $packages[$v->package_srl]->need_update; $v->need_update = $packages[$v->package_srl]->need_update;
$v->type = $oModel->getTypeFromPath($packages[$v->package_srl]->path);
if($this->ftp_set && $v->depfrom) {
$depfrom = explode("," , $v->depfrom);
foreach($depfrom as $package_srl)
{
$depto[$package_srl][] = $v->package_srl;
}
}
if($v->type == "core") $v->avail_remove = false;
else if($v->type == "module") {
$v->avail_remove = $oModel->checkRemovable($packages[$v->package_srl]->path);
}
else $v->avail_remove = true;
} }
$item_list[$v->package_srl] = $v; $item_list[$v->package_srl] = $v;
} }
if(count($depto) > 0)
{
$installed = $oModel->getInstalledPackages(implode(",", array_keys($depto)));
foreach($installed as $key=>$val)
{
$path = $val->path;
$type = $oModel->getTypeFromPath($path);
if(!$type || $type == "core") continue;
$config_file = $oModel->getConfigFilePath($type);
if(!$config_file) continue;
$xml = new XmlParser();
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
if(!$xmlDoc) continue;
if($type == "drcomponent") $type = "component";
$title = $xmlDoc->{$type}->title->body;
$installed[$key]->title = $title;
}
Context::set('installed', $installed);
foreach($installed as $key=>$val)
{
foreach($depto[$key] as $package_srl)
{
$item_list[$package_srl]->avail_remove = false;
$item_list[$package_srl]->deps[] = $key;
}
}
}
return $item_list; return $item_list;
} }
@ -235,5 +280,37 @@
$this->categories = &$oModel->getCategoryList(); $this->categories = &$oModel->getCategoryList();
Context::set('categories', $this->categories); Context::set('categories', $this->categories);
} }
function dispAutoinstallAdminUninstall()
{
$package_srl = Context::get('package_srl');
if(!$package_srl) return $this->dispAutoinstallAdminIndex();
$oModel =& getModel('autoinstall');
$installedPackage = $oModel->getInstalledPackage($package_srl);
if(!$installedPackage) return $this->dispAutoinstallAdminInstalledPackages();
if(!$_SESSION['ftp_password'])
{
Context::set('need_password', true);
}
$installedPackage = $oModel->getPackage($package_srl);
$path = $installedPackage->path;
$type = $oModel->getTypeFromPath($path);
if(!$type || $type == "core") $this->stop("msg_invalid_request");
$config_file = $oModel->getConfigFilePath($type);
if(!$config_file) $this->stop("msg_invalid_request");
$xml = new XmlParser();
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
if(!$xmlDoc) $this->stop("msg_invalid_request");
if($type == "drcomponent") $type = "component";
$title = $xmlDoc->{$type}->title->body;
$installedPackage->title = $title;
$installedPackage->type = $type;
Context::set('package', $installedPackage);
$this->setTemplateFile('uninstall');
Context::addJsFilter($this->module_path.'tpl/filter', 'uninstall_package.xml');
}
} }
?> ?>

View file

@ -10,6 +10,23 @@
var $download_path; var $download_path;
var $ftp_password; var $ftp_password;
function uninstall()
{
$oModel =& getModel('autoinstall');
$type = $oModel->getTypeFromPath($this->package->path);
if($type == "module") {
$output = $this->uninstallModule();
if(!$output->toBool()) return $output;
}
$output = $this->_connect();
if(!$output->toBool()) return $output;
$output = $this->_removeDir($this->package->path);
$this->_close();
return $output;
}
function setPassword($ftp_password) function setPassword($ftp_password)
{ {
$this->ftp_password = $ftp_password; $this->ftp_password = $ftp_password;
@ -41,11 +58,38 @@
FileHandler::writeFile($this->download_file, $buff); FileHandler::writeFile($this->download_file, $buff);
} }
function installModule() function uninstallModule()
{ {
$path_array = explode("/", $this->package->path); $path_array = explode("/", $this->package->path);
$target_name = array_pop($path_array); $target_name = array_pop($path_array);
$type = substr(array_pop($path_array), 0, -1); $oModule =& getModule($target_name, "class");
if(!$oModule) return new Object(-1, 'msg_invalid_request');
if(!method_exists($oModule, "moduleUninstall")) return new Object(-1, 'msg_invalid_request');
$output = $oModule->moduleUninstall();
if(!$output->toBool()) return $output;
$schema_dir = sprintf('%s/schemas/', $this->package->path);
$schema_files = FileHandler::readDir($schema_dir);
$oDB =& DB::getInstance();
foreach($schema_files as $file)
{
$filename_arr = explode(".", $file);
$filename = array_shift($filename_arr);
$oDB->dropTable($filename);
}
return new Object();
}
function installModule()
{
$path = $this->package->path;
if($path != ".") {
$path_array = explode("/", $path);
$target_name = array_pop($path_array);
$type = substr(array_pop($path_array), 0, -1);
}
if($type == "module") if($type == "module")
{ {
$oModuleModel = &getModel('module'); $oModuleModel = &getModel('module');
@ -97,38 +141,100 @@
return $file_list; return $file_list;
} }
function _removeDir($path) {
$real_path = FileHandler::getRealPath($path);
$oDir = dir($path);
$files = array();
while($file = $oDir->read()) {
if($file == "." || $file == "..") continue;
$files[] = $file;
}
foreach($files as $file)
{
$file_path = $path."/".$file;
if(is_dir(FileHandler::getRealPath($file_path)))
{
$output = $this->_removeDir($file_path);
if(!$output->toBool()) return $output;
}
else
{
$output = $this->_removeFile($file_path);
if(!$output->toBool()) return $output;
}
}
$output = $this->_removeDir_real($path);
return $output;
}
} }
class SFTPModuleInstaller extends ModuleInstaller { class SFTPModuleInstaller extends ModuleInstaller {
var $ftp_info = null;
var $connection = null;
var $sftp = null;
function SFTPModuleInstaller(&$package) function SFTPModuleInstaller(&$package)
{ {
$this->package =& $package; $this->package =& $package;
$this->ftp_info = Context::getFTPInfo();
} }
function _copyDir(&$file_list){ function _connect() {
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input'); if(!$this->ftp_info->ftp_user || !$this->ftp_info->sftp || $this->ftp_info->sftp != 'Y') return new Object(-1,'msg_ftp_invalid_auth_info');
$ftp_info = Context::getFTPInfo(); if($this->ftp_info->ftp_host)
if(!$ftp_info->ftp_user || !$ftp_info->sftp || $ftp_info->sftp != 'Y') return new Object(-1,'msg_ftp_invalid_auth_info');
if($ftp_info->ftp_host)
{ {
$ftp_host = $ftp_info->ftp_host; $ftp_host = $this->ftp_info->ftp_host;
} }
else else
{ {
$ftp_host = "127.0.0.1"; $ftp_host = "127.0.0.1";
} }
$connection = ssh2_connect($ftp_host, $ftp_info->ftp_port); $this->connection = ssh2_connect($ftp_host, $this->ftp_info->ftp_port);
if(!ssh2_auth_password($connection, $ftp_info->ftp_user, $this->ftp_password)) if(!ssh2_auth_password($this->connection, $this->ftp_info->ftp_user, $this->ftp_password))
{ {
return new Object(-1,'msg_ftp_invalid_auth_info'); return new Object(-1,'msg_ftp_invalid_auth_info');
} }
$_SESSION['ftp_password'] = $this->ftp_password; $_SESSION['ftp_password'] = $this->ftp_password;
$this->sftp = ssh2_sftp($this->connection);
return new Object();
}
$sftp = ssh2_sftp($connection); function _close() {
}
$target_dir = $ftp_info->ftp_root_path.$this->target_path; function _removeFile($path)
{
if(substr($path, 0, 2) == "./") $path = substr($path, 2);
$target_path = $this->ftp_info->ftp_root_path.$path;
if(!@ssh2_sftp_unlink($this->sftp, $target_path))
{
return new Object(-1, "failed to delete file ".$path);
}
return new Object();
}
function _removeDir_real($path)
{
if(substr($path, 0, 2) == "./") $path = substr($path, 2);
$target_path = $this->ftp_info->ftp_root_path.$path;
if(!@ssh2_sftp_rmdir($this->sftp, $target_path))
{
return new Object(-1, "failed to delete directory ".$path);
}
return new Object();
}
function _copyDir(&$file_list){
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input');
$output = $this->_connect();
if(!$output->toBool()) return $output;
$target_dir = $this->ftp_info->ftp_root_path.$this->target_path;
foreach($file_list as $k => $file){ foreach($file_list as $k => $file){
$org_file = $file; $org_file = $file;
@ -141,10 +247,10 @@
if(!file_exists(FileHandler::getRealPath($real_path))) if(!file_exists(FileHandler::getRealPath($real_path)))
{ {
ssh2_sftp_mkdir($sftp, $pathname, 0755, true); ssh2_sftp_mkdir($this->sftp, $pathname, 0755, true);
} }
ssh2_scp_send($connection, FileHandler::getRealPath($this->download_path."/".$org_file), $target_dir."/".$file); ssh2_scp_send($this->connection, FileHandler::getRealPath($this->download_path."/".$org_file), $target_dir."/".$file);
} }
return new Object(); return new Object();
} }
@ -152,39 +258,79 @@
class PHPFTPModuleInstaller extends ModuleInstaller { class PHPFTPModuleInstaller extends ModuleInstaller {
var $ftp_info = null;
var $connection = null;
function PHPFTPModuleInstaller(&$package) function PHPFTPModuleInstaller(&$package)
{ {
$this->package =& $package; $this->package =& $package;
$this->ftp_info = Context::getFTPInfo();
} }
function _copyDir(&$file_list) { function _connect()
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input'); {
if($this->ftp_info->ftp_host)
$ftp_info = Context::getFTPInfo();
if($ftp_info->ftp_host)
{ {
$ftp_host = $ftp_info->ftp_host; $ftp_host = $this->ftp_info->ftp_host;
} }
else else
{ {
$ftp_host = "127.0.0.1"; $ftp_host = "127.0.0.1";
} }
$connection = ftp_connect($ftp_host, $ftp_info->ftp_port); $this->connection = ftp_connect($ftp_host, $this->ftp_info->ftp_port);
if(!$connection) return new Object(-1, 'msg_ftp_not_connected'); if(!$this->connection) return new Object(-1, 'msg_ftp_not_connected');
$login_result = ftp_login($connection, $ftp_info->ftp_user, $this->ftp_password); $login_result = @ftp_login($this->connection, $this->ftp_info->ftp_user, $this->ftp_password);
if(!$login_result) if(!$login_result)
{ {
$this->_close();
return new Object(-1,'msg_ftp_invalid_auth_info'); return new Object(-1,'msg_ftp_invalid_auth_info');
} }
$_SESSION['ftp_password'] = $this->ftp_password;
if($ftp_info->ftp_pasv != "N")
{
ftp_pasv($connection, true);
}
$target_dir = $ftp_info->ftp_root_path.$this->target_path; $_SESSION['ftp_password'] = $this->ftp_password;
if($this->ftp_info->ftp_pasv != "N")
{
ftp_pasv($this->connection, true);
}
return new Object();
}
function _removeFile($path)
{
if(substr($path, 0, 2) == "./") $path = substr($path, 2);
$target_path = $this->ftp_info->ftp_root_path.$path;
if(!@ftp_delete($this->connection, $target_path))
{
return new Object(-1, "failed to delete file ".$path);
}
return new Object();
}
function _removeDir_real($path)
{
if(substr($path, 0, 2) == "./") $path = substr($path, 2);
$target_path = $this->ftp_info->ftp_root_path.$path;
if(!@ftp_rmdir($this->connection, $target_path))
{
return new Object(-1, "failed to delete directory ".$path);
}
return new Object();
}
function _close() {
ftp_close($this->connection);
}
function _copyDir(&$file_list) {
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input');
$output = $this->_connect();
if(!$output->toBool()) return $output;
$target_dir = $this->ftp_info->ftp_root_path.$this->target_path;
foreach($file_list as $k => $file){ foreach($file_list as $k => $file){
$org_file = $file; $org_file = $file;
@ -196,7 +342,7 @@
$path_list = explode('/', dirname($this->target_path."/".$file)); $path_list = explode('/', dirname($this->target_path."/".$file));
$real_path = "./"; $real_path = "./";
$ftp_path = $ftp_info->ftp_root_path; $ftp_path = $this->ftp_info->ftp_root_path;
for($i=0;$i<count($path_list);$i++) for($i=0;$i<count($path_list);$i++)
{ {
@ -205,7 +351,7 @@
$ftp_path .= $path_list[$i]."/"; $ftp_path .= $path_list[$i]."/";
if(!file_exists(FileHandler::getRealPath($real_path))) if(!file_exists(FileHandler::getRealPath($real_path)))
{ {
if(!ftp_mkdir($connection, $ftp_path)) if(!@ftp_mkdir($this->connection, $ftp_path))
{ {
return new Object(-1, "msg_make_directory_failed"); return new Object(-1, "msg_make_directory_failed");
} }
@ -213,14 +359,14 @@
if(!stristr(PHP_OS, 'win')) if(!stristr(PHP_OS, 'win'))
{ {
if (function_exists('ftp_chmod')) { if (function_exists('ftp_chmod')) {
if(!ftp_chmod($connection, 0755, $ftp_path)) if(!ftp_chmod($this->connection, 0755, $ftp_path))
{ {
return new Object(-1, "msg_permission_adjust_failed"); return new Object(-1, "msg_permission_adjust_failed");
} }
} }
else else
{ {
if(!ftp_site($connection, "CHMOD 755 ".$ftp_path)) if(!ftp_site($this->connection, "CHMOD 755 ".$ftp_path))
{ {
return new Object(-1, "msg_permission_adjust_failed"); return new Object(-1, "msg_permission_adjust_failed");
} }
@ -228,49 +374,85 @@
} }
} }
} }
if(!ftp_put($connection, $target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file), FTP_BINARY)) if(!ftp_put($this->connection, $target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file), FTP_BINARY))
{ {
return new Object(-1, "msg_ftp_upload_failed"); return new Object(-1, "msg_ftp_upload_failed");
} }
} }
ftp_close($connection); $this->_close();
return new Object(); return new Object();
} }
} }
class FTPModuleInstaller extends ModuleInstaller { class FTPModuleInstaller extends ModuleInstaller {
var $oFtp = null;
var $ftp_info = null;
function FTPModuleInstaller(&$package) function FTPModuleInstaller(&$package)
{ {
$this->package =& $package; $this->package =& $package;
$this->ftp_info = Context::getFTPInfo();
} }
function _copyDir(&$file_list){ function _connect() {
$ftp_info = Context::getFTPInfo(); if($this->ftp_info->ftp_host)
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input');
require_once(_XE_PATH_.'libs/ftp.class.php');
if($ftp_info->ftp_host)
{ {
$ftp_host = $ftp_info->ftp_host; $ftp_host = $this->ftp_info->ftp_host;
} }
else else
{ {
$ftp_host = "127.0.0.1"; $ftp_host = "127.0.0.1";
} }
$oFtp = new ftp(); $this->oFtp = new ftp();
if(!$oFtp->ftp_connect($ftp_host, $ftp_info->ftp_port)) return new Object(-1,'msg_ftp_not_connected'); if(!$this->oFtp->ftp_connect($ftp_host, $this->ftp_info->ftp_port)) return new Object(-1,'msg_ftp_not_connected');
if(!$oFtp->ftp_login($ftp_info->ftp_user, $this->ftp_password)) { if(!$this->oFtp->ftp_login($this->ftp_info->ftp_user, $this->ftp_password)) {
$oFtp->ftp_quit(); $this->_close();
return new Object(-1,'msg_ftp_invalid_auth_info'); return new Object(-1,'msg_ftp_invalid_auth_info');
} }
$_SESSION['ftp_password'] = $this->ftp_password; $_SESSION['ftp_password'] = $this->ftp_password;
return new Object();
}
$_list = $oFtp->ftp_rawlist($ftp_info->ftp_root_path); function _removeFile($path)
{
if(substr($path, 0, 2) == "./") $path = substr($path, 2);
$target_path = $this->ftp_info->ftp_root_path.$path;
$target_dir = $ftp_info->ftp_root_path.$this->target_path; if(!$this->oFtp->ftp_delete($target_path))
{
return new Object(-1, "failed to delete file ".$path);
}
return new Object();
}
function _removeDir_real($path)
{
if(substr($path, 0, 2) == "./") $path = substr($path, 2);
$target_path = $this->ftp_info->ftp_root_path.$path;
if(!$this->oFtp->ftp_rmdir($target_path))
{
return new Object(-1, "failed to delete directory ".$path);
}
return new Object();
}
function _close() {
$this->oFtp->ftp_quit();
}
function _copyDir(&$file_list){
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input');
require_once(_XE_PATH_.'libs/ftp.class.php');
$output = $this->_connect();
if(!$output->toBool()) return $output;
$oFtp =& $this->oFtp;
$target_dir = $this->ftp_info->ftp_root_path.$this->target_path;
foreach($file_list as $k => $file){ foreach($file_list as $k => $file){
$org_file = $file; $org_file = $file;
@ -282,7 +464,7 @@
$path_list = explode('/', dirname($this->target_path."/".$file)); $path_list = explode('/', dirname($this->target_path."/".$file));
$real_path = "./"; $real_path = "./";
$ftp_path = $ftp_info->ftp_root_path; $ftp_path = $this->ftp_info->ftp_root_path;
for($i=0;$i<count($path_list);$i++) for($i=0;$i<count($path_list);$i++)
{ {
@ -297,7 +479,8 @@
} }
$oFtp->ftp_put($target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file)); $oFtp->ftp_put($target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file));
} }
$oFtp->ftp_quit();
$this->_close();
return new Object(); return new Object();
} }

View file

@ -108,8 +108,8 @@
return array_shift($output->data); return array_shift($output->data);
} }
function getInstalledPackages(&$package_list) { function getInstalledPackages($package_list) {
$args->package_list = &$package_list; $args->package_list = $package_list;
$output = executeQueryArray("autoinstall.getInstalledPackages", $args); $output = executeQueryArray("autoinstall.getInstalledPackages", $args);
$result = array(); $result = array();
if(!$output->data) return $result; if(!$output->data) return $result;
@ -133,5 +133,50 @@
return $output; return $output;
} }
function getTypeFromPath($path)
{
if(!$path) return null;
if($path == ".") return "core";
$path_array = explode("/", $path);
$target_name = array_pop($path_array);
$type = substr(array_pop($path_array), 0, -1);
return $type;
}
function getConfigFilePath($type)
{
$config_file = null;
switch($type)
{
case "module":
case "addon":
case "layout":
case "widget":
$config_file = "/conf/info.xml";
break;
case "component":
$config_file = "/info.xml";
break;
case "skin":
case "widgetstyle":
$config_file = "/skin.xml";
break;
case "drcomponent":
$config_file = "/info.xml";
break;
}
return $config_file;
}
function checkRemovable($path)
{
$path_array = explode("/", $path);
$target_name = array_pop($path_array);
$oModule =& getModule($target_name, "class");
if(!$oModule) return false;
if(method_exists($oModule, "moduleUninstall")) return true;
else return false;
}
} }
?> ?>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module version="0.2"> <module version="0.2">
<title xml:lang="ko">쉬운 설치</title> <title xml:lang="ko">쉬운 설치</title>
<title xml:lang="en">One Click Installer</title> <title xml:lang="en">EasyInstaller</title>
<title xml:lang="vi">Cài đặt tự động</title> <title xml:lang="vi">Cài đặt tự động</title>
<title xml:lang="zh-TW">自動安裝</title> <title xml:lang="zh-TW">自動安裝</title>
<title xml:lang="zh-CN">在线安装</title> <title xml:lang="zh-CN">在线安装</title>
@ -12,7 +12,7 @@
<description xml:lang="zh-TW">可以藉由此模組安裝、更新程式包括模組、面板、版面等。</description> <description xml:lang="zh-TW">可以藉由此模組安裝、更新程式包括模組、面板、版面等。</description>
<description xml:lang="zh-CN">很方便的在管理页面一键安装XE相关模块(模块/皮肤/布局/控件/控件样式等)。</description> <description xml:lang="zh-CN">很方便的在管理页面一键安装XE相关模块(模块/皮肤/布局/控件/控件样式等)。</description>
<description xml:lang="jp">管理者モードにてクリックだけで、モジュール/スキン/レイアウト/ウィジェット/ウィジェットスタイルのインストールを可能にするモジュールです。</description> <description xml:lang="jp">管理者モードにてクリックだけで、モジュール/スキン/レイアウト/ウィジェット/ウィジェットスタイルのインストールを可能にするモジュールです。</description>
<version>0.2</version> <version>0.3</version>
<date>2009-11-11</date> <date>2009-11-11</date>
<category>system</category> <category>system</category>
<author email_address="haneul0318@gmail.com" link="http://www.seungyeop.kr"> <author email_address="haneul0318@gmail.com" link="http://www.seungyeop.kr">

View file

@ -2,6 +2,8 @@
<module> <module>
<actions> <actions>
<action name="dispAutoinstallAdminInstall" type="view" standalone="true" /> <action name="dispAutoinstallAdminInstall" type="view" standalone="true" />
<action name="dispAutoinstallAdminUninstall" type="view" standalone="true" />
<action name="procAutoinstallAdminUninstallPackage" type="controller" standalone="true" />
<action name="dispAutoinstallAdminInstalledPackages" type="view" standalone="true" /> <action name="dispAutoinstallAdminInstalledPackages" type="view" standalone="true" />
<action name="dispAutoinstallAdminIndex" type="view" standalone="true" admin_index="true" /> <action name="dispAutoinstallAdminIndex" type="view" standalone="true" admin_index="true" />
<action name="procAutoinstallAdminUpdateinfo" type="controller" standalone="true" /> <action name="procAutoinstallAdminUpdateinfo" type="controller" standalone="true" />

View file

@ -30,4 +30,6 @@
$lang->cmd_download = "Download"; $lang->cmd_download = "Download";
$lang->view_installed_packages = "Installed Packages"; $lang->view_installed_packages = "Installed Packages";
$lang->msg_ftp_password_input = "Please input FTP password."; $lang->msg_ftp_password_input = "Please input FTP password.";
$lang->dependant_list = "이 패키지에 의존하는 패키지 목록";
$lang->description_uninstall = "패키지를 삭제합니다. 모듈의 경우 모든 데이터가 사라집니다.";
?> ?>

View file

@ -30,4 +30,6 @@
$lang->cmd_download = "ダウンロード"; $lang->cmd_download = "ダウンロード";
$lang->view_installed_packages = "Installed Packages"; $lang->view_installed_packages = "Installed Packages";
$lang->msg_ftp_password_input = "Please input FTP password."; $lang->msg_ftp_password_input = "Please input FTP password.";
$lang->dependant_list = "이 패키지에 의존하는 패키지 목록";
$lang->description_uninstall = "패키지를 삭제합니다. 모듈의 경우 모든 데이터가 사라집니다.";
?> ?>

View file

@ -30,4 +30,6 @@
$lang->cmd_download = "다운로드"; $lang->cmd_download = "다운로드";
$lang->view_installed_packages = "설치된 패키지"; $lang->view_installed_packages = "설치된 패키지";
$lang->msg_ftp_password_input = "FTP 비밀번호를 입력해주세요"; $lang->msg_ftp_password_input = "FTP 비밀번호를 입력해주세요";
$lang->dependant_list = "이 패키지에 의존하는 패키지 목록";
$lang->description_uninstall = "패키지를 삭제합니다. 모듈의 경우 모든 데이터가 사라집니다.";
?> ?>

View file

@ -0,0 +1,35 @@
<?php
/**
* @file en.lang.php
* @author haneul (haneul0318@gmail.com)
* @brief Autoinstall(autoinstall) language pack (English)
**/
$lang->autoinstall = 'EasyInstall';
$lang->about_autoinstall = 'EasyInstall module will help you install/upgrade programs(skins) for XE.';
$lang->package_update = 'Recent Update';
$lang->package_downloaded_count = 'Download Count';
$lang->need_update = 'Please update package list first.';
$lang->order_newest = 'Новый';
$lang->order_popular = 'Популярный';
$lang->order_download = 'Скачать';
$lang->success_installed = 'Установлено успешно';
$lang->view_all_package = 'Показать все';
$lang->description_ftp_note = 'If FTP configuration is not set, installation would not work. Please configure FTP information';
$lang->description_update = 'If you have upgraded or installed programs without EasyInstall module, please press update button to renew new information';
$lang->install = 'Инсталлировать';
$lang->update = 'Обновить';
$lang->current_version = 'Version';
$lang->depending_programs = 'This program is depending on';
$lang->require_update = 'Update is required';
$lang->require_installation = 'Installation is required';
$lang->description_install = 'EasyInstall will also install/update all other programs which this program is depending on';
$lang->description_download = 'If FTP is unavailable, you should manually download it and extract it into target path. (if target path is ./modules/board, extract it at ./modules)';
$lang->path = 'Path';
$lang->cmd_download = 'Download';
$lang->view_installed_packages = 'Installed Packages';
$lang->msg_ftp_password_input = 'Please input FTP password';
$lang->dependant_list = "이 패키지에 의존하는 패키지 목록";
$lang->description_uninstall = "패키지를 삭제합니다. 모듈의 경우 모든 데이터가 사라집니다.";
?>

View file

@ -30,4 +30,6 @@
$lang->cmd_download = "Download"; $lang->cmd_download = "Download";
$lang->view_installed_packages = "Installed Packages"; $lang->view_installed_packages = "Installed Packages";
$lang->msg_ftp_password_input = "Please input FTP password."; $lang->msg_ftp_password_input = "Please input FTP password.";
$lang->dependant_list = "이 패키지에 의존하는 패키지 목록";
$lang->description_uninstall = "패키지를 삭제합니다. 모듈의 경우 모든 데이터가 사라집니다.";
?> ?>

View file

@ -30,4 +30,6 @@
$lang->cmd_download = "Download"; $lang->cmd_download = "Download";
$lang->view_installed_packages = "Installed Packages"; $lang->view_installed_packages = "Installed Packages";
$lang->msg_ftp_password_input = "Please input FTP password."; $lang->msg_ftp_password_input = "Please input FTP password.";
$lang->dependant_list = "이 패키지에 의존하는 패키지 목록";
$lang->description_uninstall = "패키지를 삭제합니다. 모듈의 경우 모든 데이터가 사라집니다.";
?> ?>

View file

@ -30,4 +30,6 @@
$lang->cmd_download = "下載"; $lang->cmd_download = "下載";
$lang->view_installed_packages = "已安裝套裝軟體"; $lang->view_installed_packages = "已安裝套裝軟體";
$lang->msg_ftp_password_input = "請輸入 FTP 密碼"; $lang->msg_ftp_password_input = "請輸入 FTP 密碼";
$lang->dependant_list = "이 패키지에 의존하는 패키지 목록";
$lang->description_uninstall = "패키지를 삭제합니다. 모듈의 경우 모든 데이터가 사라집니다.";
?> ?>

View file

@ -1,11 +1,14 @@
<query id="getInstalledPackages" action="select"> <query id="getInstalledPackages" action="select">
<tables> <tables>
<table name="ai_installed_packages" /> <table name="ai_installed_packages" alias="installed" />
<table name="autoinstall_packages" alias="package" />
</tables> </tables>
<columns> <columns>
<column name="*" /> <column name="installed.*" />
<column name="path" />
</columns> </columns>
<conditions> <conditions>
<condition operation="in" column="package_srl" var="package_list" notnull="notnull" /> <condition operation="in" column="installed.package_srl" var="package_list" notnull="notnull" />
<condition operation="equal" column="installed.package_srl" default="package.package_srl" pipe="and" />
</conditions> </conditions>
</query> </query>

View file

@ -38,7 +38,7 @@
.updateList td .title{ position:relative;} .updateList td .title{ position:relative;}
.updateList td .title h3 { padding:0; margin:0 0 5px 0; font-size:12px;} .updateList td .title h3 { padding:0; margin:0 0 5px 0; font-size:12px;}
.updateList td .title a {text-decoration:none; color:#333 !important; } .updateList td .title a {text-decoration:none; color:#333 !important; }
.updateList td .title .button{ position:absolute; top:0; right:0;} .updateList td .title .buttons{ position:absolute; top:0; right:0;}
.updateList td .info p{ margin:0 0 5px 0; line-height:1.5;} .updateList td .info p{ margin:0 0 5px 0; line-height:1.5;}
.updateList td .info p.desc{ margin:0 100px 10px 0;} .updateList td .info p.desc{ margin:0 100px 10px 0;}
.updateList td .info p.meta{ font-size:11px;} .updateList td .info p.meta{ font-size:11px;}

View file

@ -0,0 +1,10 @@
<filter name="uninstall_package" module="autoinstall" act="procAutoinstallAdminUninstallPackage" confirm_msg_code="confirm_delete">
<form>
<node target="ftp_password" required="true" />
</form>
<response callback_func="completeUninstall">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -31,3 +31,11 @@ function completeInstall(ret_obj) {
exec_xml('autoinstall', 'procAutoinstallAdminUpdateinfo', params, completeUpdateNoMsg); exec_xml('autoinstall', 'procAutoinstallAdminUpdateinfo', params, completeUpdateNoMsg);
} }
function completeUninstall(ret_obj) {
alert(ret_obj['message']);
if(ret_obj['error'] != 0) return;
var params = new Array();
exec_xml('autoinstall', 'procAutoinstallAdminUpdateinfo', params, completeUpdateNoMsg);
}

View file

@ -14,9 +14,9 @@
<!--@end--> <!--@end-->
<li> <li>
<!--@if(count($val->children))--> <!--@if(count($val->children))-->
<a href="{getUrl('act','dispAutoinstallAdminIndex','category_srl',$val->category_srl,'childrenList',$val->childrenList)}"<!--@if($val->category_srl == $category_srl)--> class="selected"<!--@end-->>{$val->title}</a> <a href="{getUrl('','module','admin','act','dispAutoinstallAdminIndex','category_srl',$val->category_srl,'childrenList',$val->childrenList)}"<!--@if($val->category_srl == $category_srl)--> class="selected"<!--@end-->>{$val->title}</a>
<!--@else--> <!--@else-->
<a href="{getUrl('act','dispAutoinstallAdminIndex','category_srl',$val->category_srl,'childrenList','')}"<!--@if($val->category_srl == $category_srl)--> class="selected"<!--@end-->>{$val->title}</a> <a href="{getUrl('','module','admin','act','dispAutoinstallAdminIndex','category_srl',$val->category_srl,'childrenList','')}"<!--@if($val->category_srl == $category_srl)--> class="selected"<!--@end-->>{$val->title}</a>
<!--@end--> <!--@end-->
<!--@if($val->nPackages)--> <!--@if($val->nPackages)-->
<span>({$val->nPackages})</span> <span>({$val->nPackages})</span>

View file

@ -37,12 +37,27 @@
<a href="{$target_url}">{htmlspecialchars($val->title)} ver. {htmlspecialchars($val->item_version)}</a> <a href="{$target_url}">{htmlspecialchars($val->title)} ver. {htmlspecialchars($val->item_version)}</a>
</h3> </h3>
<!--@if($val->current_version)--> <!--@if($val->current_version)-->
{$lang->current_version} : {$val->current_version} <p>{$lang->current_version} : {$val->current_version}
<!--@if($val->deps)-->
<br />
{$lang->dependant_list} :
<!--@foreach($val->deps as $package_srl)-->
{$installed[$package_srl]->title}.
<!--@endforeach-->
<!--@end-->
</p>
<div class="buttons">
<!--@if($val->avail_remove)-->
<a href="{getUrl('act','dispAutoinstallAdminUninstall','package_srl',$val->package_srl)}" class="button red strong"><span>{$lang->cmd_delete}</span></a>
<!--@end-->
<!--@if($val->need_update == 'Y')--> <!--@if($val->need_update == 'Y')-->
<a href="{getUrl('act','dispAutoinstallAdminInstall','package_srl',$val->package_srl)}" class="button"><span>{$lang->update}</span></a> <a href="{getUrl('act','dispAutoinstallAdminInstall','package_srl',$val->package_srl)}" class="button"><span>{$lang->update}</span></a>
<!--@end--> <!--@end-->
</div>
<!--@else--> <!--@else-->
<div class="buttons">
<a href="{getUrl('act','dispAutoinstallAdminInstall','package_srl',$val->package_srl)}" class="button"><span>{$lang->install}</span></a> <a href="{getUrl('act','dispAutoinstallAdminInstall','package_srl',$val->package_srl)}" class="button"><span>{$lang->install}</span></a>
</div>
<!--@end--> <!--@end-->
</div> </div>
<div class="info"> <div class="info">

View file

@ -0,0 +1,14 @@
<!--#include("header.html")-->
<!--%import("css/autoinstall.css")-->
<!--%import("js/autoinstall.js")-->
<div class="infoText">
<p><strong>{$package->title}</strong> [{$package->type}] - {$package->path}</p>
<p>{$lang->description_uninstall}</p>
<form action="./" method="POST" onsubmit="return procFilter(this, uninstall_package);">
<input type="hidden" name="package_srl" value="{$package_srl}" />
<!--@if($need_password)-->
<p><label for="ftp_password">FTP {$lang->password} ({$lang->about_ftp_password}):</label><input type="password" name="ftp_password" id="ftp_password" class="inputTypeText" /></p>
<!--@end-->
<span class="button strong"><input type="submit" value="{$lang->cmd_delete}" /></span>
</form>
</div>

View file

@ -5,27 +5,28 @@
* @brief Russian basic language pack * @brief Russian basic language pack
**/ **/
$lang->cmd_comment_do = 'Действия'; $lang->cmd_comment_do = 'Эту запись...';
$lang->comment_list = 'Список комментариев'; $lang->comment_list = 'Список записей';
$lang->cmd_delete_checked_comment = 'Удалить выбранный объект'; $lang->cmd_toggle_checked_comment = 'Изменить выбранное';
$lang->cmd_delete_checked_comment = 'Удалить выбранное';
$lang->comment_count = '댓글 수'; $lang->comment_count = 'Количество ответов';
$lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.'; $lang->about_comment_count = 'Отображается указанное количество ответов, после превышения этого количества производится переход к списку.';
$lang->msg_cart_is_null = 'Пожалуйста, выберите статью для удаления.'; $lang->msg_cart_is_null = 'Пожалуйста, выберите записи для удаления.';
$lang->msg_checked_comment_is_deleted = '%d комментарий(-ия) успешно удален(о).'; $lang->msg_checked_comment_is_deleted = '%d записьуспешно удалена';
$lang->search_target_list = array( $lang->search_target_list = array(
'content' => 'Содержание', 'content' => 'Содержание',
'user_id' => 'ID', 'user_id' => 'ID',
'user_name' => 'Имя', 'user_name' => 'Имя',
'nick_name' => 'Ник', 'nick_name' => 'Ник',
'member_srl' => 'Member Serial', 'member_srl' => 'Номер пользователя',
'email_address' => 'Email', 'email_address' => 'Email адрес',
'homepage' => 'Домашняя страница', 'homepage' => 'Домашняя страница',
'regdate' => 'Дата', 'regdate' => 'Дата регистрации',
'last_update' => 'Последнее обновление', 'last_update' => 'Дата последнего обновления',
'ipaddress' => 'IP-адрес', 'ipaddress' => 'IP-адрес',
); );
?> ?>

View file

@ -4,6 +4,9 @@
</tables> </tables>
<columns> <columns>
<column name="comment_srl" /> <column name="comment_srl" />
<column name="module_srl" />
<column name="member_srl" />
<column name="document_srl" />
</columns> </columns>
<conditions> <conditions>
<condition operation="in" column="document_srl" var="document_srl" notnull="notnull" /> <condition operation="in" column="document_srl" var="document_srl" notnull="notnull" />

View file

@ -86,6 +86,7 @@
function sendMessage($sender_srl, $receiver_srl, $title, $content, $sender_log = true) { function sendMessage($sender_srl, $receiver_srl, $title, $content, $sender_log = true) {
$content = removeHackTag($content); $content = removeHackTag($content);
$title = htmlspecialchars($title);
// 보내는 사용자의 쪽지함에 넣을 쪽지 // 보내는 사용자의 쪽지함에 넣을 쪽지
$sender_args->sender_srl = $sender_srl; $sender_args->sender_srl = $sender_srl;
@ -347,6 +348,7 @@
$args->friend_group_srl = trim(Context::get('friend_group_srl')); $args->friend_group_srl = trim(Context::get('friend_group_srl'));
$args->member_srl = $logged_info->member_srl; $args->member_srl = $logged_info->member_srl;
$args->title = Context::get('title'); $args->title = Context::get('title');
$args->title = htmlspecialchars($args->title);
if(!$args->title) return new Object(-1, 'msg_invalid_request'); if(!$args->title) return new Object(-1, 'msg_invalid_request');
// friend_group_srl이 있으면 수정 // friend_group_srl이 있으면 수정
@ -377,6 +379,7 @@
$args->friend_group_srl= Context::get('friend_group_srl'); $args->friend_group_srl= Context::get('friend_group_srl');
$args->member_srl = $logged_info->member_srl; $args->member_srl = $logged_info->member_srl;
$args->title = Context::get('title'); $args->title = Context::get('title');
$args->title = htmlspecialchars($args->title);
if(!$args->title) return new Object(-1, 'msg_invalid_request'); if(!$args->title) return new Object(-1, 'msg_invalid_request');
$output = executeQuery('communication.renameFriendGroup', $args); $output = executeQuery('communication.renameFriendGroup', $args);

View file

@ -4,6 +4,7 @@
<title xml:lang="jp">コミュニケーション</title> <title xml:lang="jp">コミュニケーション</title>
<title xml:lang="zh-CN">会员交流</title> <title xml:lang="zh-CN">会员交流</title>
<title xml:lang="en">Communication</title> <title xml:lang="en">Communication</title>
<title xml:lang="ru">Communication</title>
<title xml:lang="vi">Liên lạc</title> <title xml:lang="vi">Liên lạc</title>
<title xml:lang="zh-TW">交流</title> <title xml:lang="zh-TW">交流</title>
<description xml:lang="ko">회원들간의 쪽지, 친구기능을 담당하는 모듈입니다.</description> <description xml:lang="ko">회원들간의 쪽지, 친구기능을 담당하는 모듈입니다.</description>
@ -11,6 +12,7 @@
<description xml:lang="zh-CN">管理在线会员间短信息及好友功能的模块。</description> <description xml:lang="zh-CN">管理在线会员间短信息及好友功能的模块。</description>
<description xml:lang="en">This module is for managing message, friend functions.</description> <description xml:lang="en">This module is for managing message, friend functions.</description>
<description xml:lang="vi">Module quản lý tin nhắn và bạn bè.</description> <description xml:lang="vi">Module quản lý tin nhắn và bạn bè.</description>
<description xml:lang="ru">This module is for managing message, friend functions.</description>
<description xml:lang="zh-TW">管理線上會員間短訊及好友功能的模組。</description> <description xml:lang="zh-TW">管理線上會員間短訊及好友功能的模組。</description>
<version>0.1</version> <version>0.1</version>
<date>2008-05-30</date> <date>2008-05-30</date>
@ -23,5 +25,6 @@
<name xml:lang="zh-CN">zero</name> <name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name> <name xml:lang="en">zero</name>
<name xml:lang="zh-TW">zero</name> <name xml:lang="zh-TW">zero</name>
<name xml:lang="ru">zero</name>
</author> </author>
</module> </module>

View file

@ -5,46 +5,45 @@
* @brief Russian basic language pack * @brief Russian basic language pack
**/ **/
$lang->communication = 'Communication'; $lang->communication = 'Общение';
$lang->about_communication = '회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다'; $lang->about_communication = 'Модуль для общения между пользователями';
$lang->allow_message = 'Разрешить прием сообщений'; $lang->allow_message = 'Получать сообщения';
$lang->allow_message_type = array( $lang->allow_message_type = array(
'Y' => 'Принимать все', 'Y' => 'Принимать все',
'N' => 'Отклонять все', 'N' => 'Отклонять все',
'F' => 'Только друзья', 'F' => 'Принимать только от друзей',
); );
$lang->message_box = array( $lang->message_box = array(
'R' => ринятые', 'R' => олученные',
'S' => 'Отправленные', 'S' => 'Отправленные',
'T' => 'Почтовый ящик', 'T' => 'Почтовый ящик',
); );
$lang->readed_date = "Дата прочтения"; $lang->readed_date = "Дата прочтения сообщения";
$lang->sender = 'Отправитель'; $lang->sender = 'Отправитель';
$lang->receiver = 'Получатель'; $lang->receiver = 'Получатель';
$lang->friend_group = 'Группа друзей'; $lang->friend_group = 'Группа Друзья';
$lang->default_friend_group = 'Неприсвоенная группа'; $lang->default_friend_group = 'Незарегистрированная группа';
$lang->cmd_send_message = 'Отправить сообщение'; $lang->cmd_send_message = 'Отправить сообщение';
$lang->cmd_reply_message = 'Ответить'; $lang->cmd_reply_message = 'Ответить';
$lang->cmd_view_friend = зузья'; $lang->cmd_view_friend = рузья';
$lang->cmd_add_friend = 'Сделать другом'; $lang->cmd_add_friend = 'Добавить в друзья';
$lang->cmd_view_message_box = 'Ящик сообщений'; $lang->cmd_view_message_box = 'Личные сообщений';
$lang->cmd_store = "Сохранить"; $lang->cmd_store = "Сохранить";
$lang->cmd_add_friend_group = 'Добавить группу друзей'; $lang->cmd_add_friend_group = 'Добавить в группу друзей';
$lang->cmd_rename_friend_group = 'Изменить имя группы друзей'; $lang->cmd_rename_friend_group = 'Изменить имя группы друзей';
$lang->msg_no_message = 'Нет сообщений'; $lang->msg_no_message = 'Сообщений нет';
$lang->message_received = 'Новое сообщение'; $lang->message_received = 'У Вас новое сообщение';
$lang->msg_title_is_null = 'Пожалуйста, введите тему сообщения'; $lang->msg_title_is_null = 'Пожалуйста, введите тему сообщения';
$lang->msg_content_is_null = 'Пожалуйста, введите содержание'; $lang->msg_content_is_null = 'Пожалуйста, введите содержание';
$lang->msg_allow_message_to_friend = "Отправка провалена, поскольку получатель принимает сообщения только от друзей"; $lang->msg_allow_message_to_friend = "Сообщение не отправлено, поскольку являетесь пользователем, имеющим право посылать сообщения только друзьям";
$lang->msg_disallow_message = 'Отправка провалена, поскольку получатель отклоняет прием сообщений'; $lang->msg_disallow_message = 'Сообщение не отправлено, поскольку получатель запретил прием сообщений';
$lang->about_allow_message = 'Вы можете установить режим принятия сообщений';
$lang->about_allow_message = 'Вы можете определить политику принятия сообщений';
?> ?>

View file

@ -75,7 +75,7 @@
#communicationModule .crossTable th.title *, #communicationModule .crossTable th.title *,
#communicationModule .colTable th.title * { padding:0; margin:0; vertical-align:middle; } #communicationModule .colTable th.title * { padding:0; margin:0; vertical-align:middle; }
#communicationModule p { color:#AAA; margin:3px 0 0 0; padding:0;} #communicationModule p { margin:3px 0 0 0; padding:0;}
#dummy_check_nick_name { color:red; margin:3px 0 0 0; padding:0; } #dummy_check_nick_name { color:red; margin:3px 0 0 0; padding:0; }
#communicationModule .require { color:red; font-size:10px; font-family:tahoma; font-weight:bold; margin-left:5px; } #communicationModule .require { color:red; font-size:10px; font-family:tahoma; font-weight:bold; margin-left:5px; }
#communicationModule .publicItem { margin:5px 0 0 0; padding:0; color:#aaa; } #communicationModule .publicItem { margin:5px 0 0 0; padding:0; color:#aaa; }

View file

@ -5,7 +5,7 @@
* @brief Russian basic language pack * @brief Russian basic language pack
**/ **/
$lang->counter = "Счетчик"; $lang->counter = "Счетчик посетителей";
$lang->cmd_select_date = 'Выберите дату'; $lang->cmd_select_date = 'Выберите дату';
$lang->cmd_select_counter_type = array( $lang->cmd_select_counter_type = array(
'hour' => 'По часам', 'hour' => 'По часам',
@ -20,6 +20,6 @@
$lang->unique_visitor = 'Посетителей'; $lang->unique_visitor = 'Посетителей';
$lang->pageview = 'Просмотров страниц'; $lang->pageview = 'Просмотров страниц';
$lang->today = 'today'; $lang->today = 'Сегодня';
$lang->yesterday = 'yesterday'; $lang->yesterday = 'Вчера';
?> ?>

View file

@ -45,7 +45,7 @@
$output = executeQueryArray('document.getDocumentExtraVars', $obj); $output = executeQueryArray('document.getDocumentExtraVars', $obj);
if($output->toBool() && $output->data) { if($output->toBool() && $output->data) {
foreach($output->data as $key => $val) { foreach($output->data as $key => $val) {
if(!trim($val->value)) continue; if(!isset($val->value)) continue;
if(!$extra_vars[$val->module_srl][$val->document_srl][$val->var_idx][0]) $extra_vars[$val->module_srl][$val->document_srl][$val->var_idx][0] = trim($val->value); if(!$extra_vars[$val->module_srl][$val->document_srl][$val->var_idx][0]) $extra_vars[$val->module_srl][$val->document_srl][$val->var_idx][0] = trim($val->value);
$extra_vars[$val->document_srl][$val->var_idx][$val->lang_code] = trim($val->value); $extra_vars[$val->document_srl][$val->var_idx][$val->lang_code] = trim($val->value);
} }
@ -67,9 +67,9 @@
if(count($extra_keys)) { if(count($extra_keys)) {
foreach($extra_keys as $idx => $key) { foreach($extra_keys as $idx => $key) {
$val = $vars[$idx]; $val = $vars[$idx];
if($val[$user_lang_code]) $v = $val[$user_lang_code]; if(isset($val[$user_lang_code])) $v = $val[$user_lang_code];
else if($val[$document_lang_code]) $v = $val[$document_lang_code]; else if(isset($val[$document_lang_code])) $v = $val[$document_lang_code];
else if($val[0]) $v = $val[0]; else if(isset($val[0])) $v = $val[0];
else $v = null; else $v = null;
$extra_keys[$idx]->value = $v; $extra_keys[$idx]->value = $v;
} }

View file

@ -8,69 +8,96 @@
$lang->document_list = 'Список документов'; $lang->document_list = 'Список документов';
$lang->thumbnail_type = 'Тип миниатюры'; $lang->thumbnail_type = 'Тип миниатюры';
$lang->thumbnail_crop = 'Обрезать'; $lang->thumbnail_crop = 'Обрезать';
$lang->thumbnail_ratio = 'Отношение'; $lang->thumbnail_ratio = 'Соотношение';
$lang->cmd_delete_all_thumbnail = 'Удалить все миниарюры'; $lang->cmd_delete_all_thumbnail = 'Удалить все миниарюры';
$lang->move_target_module = "Переместить в"; $lang->move_target_module = "Переместить в";
$lang->title_bold = 'Жирное название'; $lang->title_bold = 'Жирное название';
$lang->title_color = 'Цвет названия'; $lang->title_color = 'Цвет названия';
$lang->new_document_count = '새글'; $lang->new_document_count = 'Новые документы';
$lang->parent_category_title = 'Родительская категория'; $lang->parent_category_title = 'Название верхней категории';
$lang->category_title = 'Категория'; $lang->category_title = 'Категория';
$lang->category_color = '분류 폰트색깔'; $lang->category_color = 'Цвет шрифта категории';
$lang->expand = 'Расширить'; $lang->expand = 'Развернуть';
$lang->category_group_srls = 'Доступные группы'; $lang->category_group_srls = 'Доступные группы';
$lang->about_category_title = 'Пожалуйста, введите название категории';
$lang->about_category_title = 'Добавьте дочернюю категорию';
$lang->cmd_enable_move_category = 'Изменить местоположение категории(после выделения перетащите верхнее меню)';
$lang->about_category_title = 'Введите название категории';
$lang->about_expand = 'Если эта опция выбрана, расширение будут применено всегда'; $lang->about_expand = 'Если эта опция выбрана, расширение будут применено всегда';
$lang->about_category_group_srls = '선택하신 그룹만 현재 카테고리를 지정할 수 있도록 합니다'; $lang->about_category_group_srls = 'Только выбранные группы можно отнести к этой категории';
$lang->about_category_color = 'Установить цвет шрифта категории. ex) red или #ff0000';
$lang->cmd_search_next = 'Искать дальше';
$lang->about_category_color = '분류 폰트색깔을 지정합니다.'; $lang->about_category_color = '분류 폰트색깔을 지정합니다.';
$lang->cmd_temp_save = 'Сохранить временно'; $lang->cmd_temp_save = 'Сохранить временно';
$lang->cmd_toggle_checked_document = 'Перевернуть выбранные объекты'; $lang->cmd_toggle_checked_document = 'Перевернуть выбранные объекты';
$lang->cmd_delete_checked_document = 'Удалить выбранные'; $lang->cmd_delete_checked_document = 'Удалить выбранные';
$lang->cmd_document_do = 'Действия'; $lang->cmd_document_do = 'Эту запись...';
$lang->msg_cart_is_null = 'Выберите статьи, которые Вы хотите удалить'; $lang->msg_cart_is_null = 'Выберите записи,которые Вы хотите удалить';
$lang->msg_category_not_moved = 'Невозможно переместить'; $lang->msg_category_not_moved = 'Невозможно переместить';
$lang->msg_is_secret = 'Эта статья секретна'; $lang->msg_is_secret = 'Секретная запись';
$lang->msg_checked_document_is_deleted = 'Всего %d статей было удалено'; $lang->msg_checked_document_is_deleted = '%d записей удалено';
// Search targets in admin page $lang->move_target_module = 'Этот модуль';
// Search targets in admin page
$lang->search_target_list = array( $lang->search_target_list = array(
'title' => 'Тема', 'title' => 'Тема',
'content' => 'Содержание', 'content' => 'Содержание',
'user_id' => 'Юзер ID', 'user_id' => 'ID пользователя',
'member_srl' => 'Членский No.', 'member_srl' => 'No. пользователя',
'user_name' => 'Имя', 'user_name' => 'Имя пользователя',
'nick_name' => 'Ник', 'nick_name' => 'Ник',
'email_address' => 'Email', 'email_address' => 'Email',
'homepage' => 'Домашняя страница', 'homepage' => 'Домашняя страница',
'is_notice' => 'Уведомление', 'is_notice' => 'Объявления',
'is_secret' => 'Секрет', 'is_secret' => 'Секретная запись',
'tags' => 'Тег', 'tags' => 'Тег',
'readed_count' => 'Кол-во Просмотров (Выше)', 'readed_count' => 'Количество просмотров (свыше)',
'voted_count' => 'Кол-во Голосов (Выше)', 'voted_count' => 'Количество голосов (свыше)',
'comment_count ' => 'Кол-во Комментариев (Выше)', 'comment_count ' => 'Количество записей (свыше)',
'trackback_count ' => 'Кол-во Трекбеков (Выше)', 'trackback_count ' => 'Количество трекбеков (свыше)',
'uploaded_count ' => 'Кол-во Вложений (Выше)', 'uploaded_count ' => 'Количество вложений (прикрепленных файлов) (свыше)',
'regdate' => 'Дата', 'regdate' => 'Дата регистрации',
'last_update' => 'Последнее Обновление', 'last_update' => 'Дата последнего обновления',
'ipaddress' => 'IP-Адрес', 'ipaddress' => 'IP-Адрес',
); );
$lang->alias = "Alias"; $lang->alias = "Alias";
$lang->history = "History"; $lang->history = "History";
$lang->about_use_history = "Determine whether to enable history feature, if it is enabled, update history would be stored and possible to restore old revisions."; $lang->about_use_history = "Determine whether to enable history feature, if it is enabled, update history would be stored and possible to restore old revisions.";
$lang->trace_only = "Trace only"; $lang->trace_only = "Trace only";
$lang->cmd_trash = 'Trashcan'; $lang->cmd_trash = 'Корзина';
$lang->cmd_restore = 'Restore'; $lang->cmd_restore = 'Восстановить';
$lang->cmd_restore_all = 'Restore All'; $lang->cmd_restore_all = 'Восстановить все';
$lang->in_trash = 'Trashcan'; $lang->in_trash = 'Корзина';
$lang->trash_nick_name = 'Person who deleted'; $lang->trash_nick_name = 'Ник удалителя';
$lang->trash_date = 'Deleted date'; $lang->trash_date = 'Дата удаления';
$lang->trash_description = 'Description'; $lang->trash_description = 'Описание';
// Возможен поиск на странице админа
$lang->search_target_trash_list = array(
'title' => 'Тема',
'content' => 'Содержание',
'user_id' => 'ID',
'member_srl' =>'No пользователя',
'user_name' => 'Имя пользователя',
'nick_name' => 'Ник',
'trash_member_srl' => 'Номер удалителя',
'trash_user_name' => 'Имя удалителя',
'trash_nick_name' => 'Ник удалителя',
'trash_date' => 'Дата удаления',
'trash_ipaddress' => 'IP адрес удалителя',
);
$lang->success_trashed = 'Удалено в корзину';
$lang->success_trashed = "Successfully moved to trashcan"; $lang->success_trashed = "Successfully moved to trashcan";
?> ?>

View file

@ -3,7 +3,7 @@
* @brief 모든 생성된 썸네일 삭제하는 액션 호출 * @brief 모든 생성된 썸네일 삭제하는 액션 호출
**/ **/
function doDeleteAllThumbnail() { function doDeleteAllThumbnail() {
exec_xml('document','procDocumentAdminDeleteAllThumbnail',new Array(), completeDeleteAllThumbnail); exec_xml('document','procDocumentAdminDeleteAllThumbnail', [], completeDeleteAllThumbnail);
} }
function completeDeleteAllThumbnail(ret_obj) { function completeDeleteAllThumbnail(ret_obj) {
@ -33,10 +33,9 @@ function doGetCategoryFromModule(module_srl) {
var params = new Array(); var params = new Array();
params['module_srl'] = module_srl; params['module_srl'] = module_srl;
var response_tags = new Array('error','message','categories'); var response_tags = ['error','message','categories'];
exec_xml('document','getDocumentCategories',params, completeGetCategoryFromModules, response_tags); exec_xml('document','getDocumentCategories',params, completeGetCategoryFromModules, response_tags);
} }
function completeGetCategoryFromModules(ret_obj, response_tags) { function completeGetCategoryFromModules(ret_obj, response_tags) {
@ -47,6 +46,9 @@ function completeGetCategoryFromModules(ret_obj, response_tags) {
var categories = ret_obj['categories']; var categories = ret_obj['categories'];
if(!categories) return; if(!categories) return;
var depth_str = '-';
for(var i=0; i < 5; i++) depth_str += depth_str;
var category_list = categories.split("\n"); var category_list = categories.split("\n");
for(var i=0;i<category_list.length;i++) { for(var i=0;i<category_list.length;i++) {
var item = category_list[i]; var item = category_list[i];
@ -61,22 +63,21 @@ function completeGetCategoryFromModules(ret_obj, response_tags) {
var category_title = item.substr(pos+1,item.length); var category_title = item.substr(pos+1,item.length);
if(!category_srl || !category_title) continue; if(!category_srl || !category_title) continue;
if (depth > 0) category_title = depth_str.substr(0, depth) + ' ' + category_title;
var opt = new Option(category_title, category_srl, false, false); var opt = new Option(category_title, category_srl, false, false);
if(depth>0) opt.style.paddingLeft = (depth*15)+'px';
obj.options[obj.options.length] = opt; obj.options[obj.options.length] = opt;
} }
} }
function doCancelDeclare() { function doCancelDeclare() {
var document_srl = new Array(); var document_srl = [];
jQuery('#fo_list input[name=cart]:checked').each(function() { jQuery('#fo_list input[name=cart]:checked').each(function() {
document_srl[document_srl.length] = jQuery(this).val(); document_srl[document_srl.length] = jQuery(this).val();
}); });
if(document_srl.length<1) return; if(document_srl.length<1) return;
var params = new Array(); var params = {document_srl : document_srl.join(',')};
params['document_srl'] = document_srl.join(',');
exec_xml('document','procDocumentAdminCancelDeclare', params, completeCancelDeclare); exec_xml('document','procDocumentAdminCancelDeclare', params, completeCancelDeclare);
} }
@ -86,10 +87,8 @@ function completeCancelDeclare(ret_obj) {
} }
function insertSelectedModule(id, module_srl, mid, browser_title) { function insertSelectedModule(id, module_srl, mid, browser_title) {
var obj= xGetElementById('_'+id); jQuery('#_'+id).val(browser_title+' ('+mid+')');
var sObj = xGetElementById(id); jQuery('#'+id).val(module_srl);
sObj.value = module_srl;
obj.value = browser_title+' ('+mid+')';
doGetCategoryFromModule(module_srl); doGetCategoryFromModule(module_srl);
} }
@ -105,10 +104,8 @@ function completeInsertAlias(ret_obj) {
function insertSelectedModule(id, module_srl, mid, browser_title) { function insertSelectedModule(id, module_srl, mid, browser_title) {
if(current_url.getQuery('act')=='dispDocumentManageDocument') { if(current_url.getQuery('act')=='dispDocumentManageDocument') {
var obj= xGetElementById('_'+id); jQuery('#_'+id).val(browser_title+' ('+mid+')');
var sObj = xGetElementById(id); jQuery('#'+id).val(module_srl);
sObj.value = module_srl;
obj.value = browser_title+' ('+mid+')';
doGetCategoryFromModule(module_srl); doGetCategoryFromModule(module_srl);
} else { } else {
location.href = current_url.setQuery('module_srl',module_srl); location.href = current_url.setQuery('module_srl',module_srl);
@ -117,34 +114,33 @@ function insertSelectedModule(id, module_srl, mid, browser_title) {
function deleteByFilter(target_srl, filter) function deleteByFilter(target_srl, filter)
{ {
var e = xGetElementById('target_srl'); jQuery('#target_srl').val(target_srl);
e.value = target_srl; var hF = jQuery("deleteForm")[0];
var hF = xGetElementById("deleteForm");
procFilter(hF, filter); procFilter(hF, filter);
} }
function executeFilterByTargetSrl(form_name, target_srl, filter) function executeFilterByTargetSrl(form_name, target_srl, filter)
{ {
var e = xGetElementById('target_srl'); jQuery('#target_srl').val(target_srl);
e.value = target_srl; var hF = jQuery('#'+form_name)[0];
var hF = xGetElementById(form_name);
procFilter(hF, filter); procFilter(hF, filter);
} }
function doDeleteExtraKey(module_srl, var_idx) { function doDeleteExtraKey(module_srl, var_idx) {
var fo_obj = xGetElementById('fo_delete'); var fo_obj = jQuery('#fo_delete')[0];
fo_obj.module_srl.value = module_srl; fo_obj.module_srl.value = module_srl;
fo_obj.var_idx.value = var_idx; fo_obj.var_idx.value = var_idx;
return procFilter(fo_obj, delete_extra_var); return procFilter(fo_obj, delete_extra_var);
} }
function moveVar(type, module_srl, var_idx) { function moveVar(type, module_srl, var_idx) {
var params = new Array(); var params = {
params['type'] = type; type : type,
params['module_srl'] = module_srl; module_srl : module_srl,
params['var_idx'] = var_idx; var_idx : var_idx
var response_tags = new Array('error','message'); };
exec_xml('document','procDocumentAdminMoveExtraVar', params, function() { location.reload(); }); var response_tags = ['error','message'];
exec_xml('document','procDocumentAdminMoveExtraVar', params, function() { location.reload() });
} }
function completeRestoreTrash(ret_obj) { function completeRestoreTrash(ret_obj) {

Some files were not shown because too many files have changed in this diff Show more