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

View file

@ -21,6 +21,7 @@
$target_acts = array('procBoardInsertDocument','procBoardInsertComment','procIssuetrackerInsertIssue','procIssuetrackerInsertHistory','procTextyleInsertComment');
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_signup=='apply') $target_acts[] = 'procMemberInsert';
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="zh-CN">验证码插件</title>
<title xml:lang="jp">Captchaアドオン</title>
<title xml:lang="ru">Аддон Captcha</title>
<title xml:lang="zh-TW">圖形驗證</title>
<description xml:lang="ko">
프로그램 글 등록기를 막기 위해 게시판/ issueTracker에서 글/ 댓글을 입력하려 할 때 이미지를 보여주고 글에 해당하는 이미지를 선택하게 하는 애드온입니다.
@ -25,20 +26,25 @@
<description xml:lang="jp">
ボット(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 xml:lang="zh-TW">
此元件可防止機器人程式的垃圾留言,非註冊用戶在討論板/問題追蹤發表主題或評論時,必須要先選對畫面中所顯示的圖案才能發表。
</description>
<version>0.1</version>
<version>0.2</version>
<date>2009-02-20</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-TW">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="vi">zero</name>
<author email_address="developers@xpressengine.com" link="http://www.xpressengine.com">
<name xml:lang="ko">XE</name>
<name xml:lang="zh-CN">XE</name>
<name xml:lang="jp">XE</name>
<name xml:lang="zh-TW">XE</name>
<name xml:lang="en">XE</name>
<name xml:lang="ru">XE</name>
<name xml:lang="vi">XE</name>
</author>
<extra_vars>
@ -48,12 +54,14 @@
<title xml:lang="jp">Captchaを表示する対象</title>
<title xml:lang="zh-TW">選擇目標</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>
<description xml:lang="ko">글/댓글 등록시 captcha가 동작할 대상을 정할 수 있습니다. 관리자는 무조건 제외됩니다</description>
<description xml:lang="zh-CN">可以指定验证码应用对象(管理员除外)。</description>
<description xml:lang="jp">管理者を除き、書き込み・コメントを入力する際にcaptchaイメージを見せる対象を設定します。</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="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>
<options value="">
<title xml:lang="ko">로그인하지 않은 사용자</title>
@ -61,6 +69,7 @@
<title xml:lang="jp">ログインしてないユーザー</title>
<title xml:lang="zh-TW">非用戶</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>
</options>
<options value="all">
@ -69,6 +78,7 @@
<title xml:lang="jp">すべてのユーザー</title>
<title xml:lang="zh-TW">所有用戶</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>
</options>
</var>
@ -78,12 +88,14 @@
<title xml:lang="jp">動作方式</title>
<title xml:lang="zh-TW">行為模式</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>
<description xml:lang="ko">"1번만 동작"을 선택하시면 1번만 동작후 상태를 저장해서 다음부터 물어보지 않고 그렇지 않으면 매번 물어보게 됩니다</description>
<description xml:lang="zh-CN">"一次"就是每个IP只出现一次验证。</description>
<description xml:lang="jp">「1回だけ表示」を選択すると、最初だけ動作した後、その情報を記憶して次回からはCaptchaを見せないようにします。また、もう一つのオプションは毎回Captchaを表示します。</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="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>
<options value="onetime">
<title xml:lang="ko">1번만 동작</title>
@ -92,6 +104,7 @@
<title xml:lang="zh-TW">單次</title>
<title xml:lang="vi">Chỉ một lần</title>
<title xml:lang="en">once</title>
<title xml:lang="ru">1 раз</title>
</options>
<options value="everytime">
<title xml:lang="ko">매번 동작</title>
@ -99,6 +112,7 @@
<title xml:lang="jp">毎回表示</title>
<title xml:lang="zh-TW">每次</title>
<title xml:lang="en">every time</title>
<title xml:lang="ru">каждый раз</title>
<title xml:lang="vi">Luôn sử dụng</title>
</options>
</var>
@ -106,29 +120,33 @@
<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="zh-TW">忘記密碼</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>
<description xml:lang="ko">적용으로 하시면 비밀번호 찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
<description xml:lang="zh-CN">启用此项功能可以有效地拦截以查找密码名义发送的垃圾邮件。</description>
<description xml:lang="jp">적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</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="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>
<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="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="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>
@ -136,21 +154,58 @@
<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="zh-TW">重寄認證信</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>
<description xml:lang="ko">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
<description xml:lang="zh-CN">启用此项功能可以有效地拦截以重新发送认证邮件名义发送的垃圾邮件。</description>
<description xml:lang="jp">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</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="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>
<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="">
<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">
@ -159,6 +214,7 @@
<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>

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="ge">Counter Addon</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>
<description xml:lang="ko">
XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다.

View file

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

View file

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

View file

@ -5,6 +5,7 @@
<title xml:lang="zh-CN">手机XE插件</title>
<title xml:lang="en">Mobile XE</title>
<title xml:lang="vi">Mobile XE</title>
<title xml:lang="ru">Mobile XE</title>
<title xml:lang="zh-TW">XE行動上網</title>
<description xml:lang="ko">
모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 WAP 태그로 출력하는 애드온입니다.
@ -25,6 +26,10 @@
<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.
Chỉ hỗ trợ cho các định dạng wml, hdml, mhtml.
</description>
<description xml:lang="ru">
Данный аддон показывает WAP теги, анализирую информацию мобильного соединения.
Поддерживаются только wml, hdml, mhtml форматы.
</description>
<description xml:lang="zh-TW">
透過行動工具上網時會將網頁轉換為WAP標籤顯示。
@ -39,6 +44,7 @@
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
@ -49,6 +55,7 @@
<name xml:lang="zh-CN">misol</name>
<name xml:lang="en">misol</name>
<name xml:lang="vi">misol</name>
<name xml:lang="ru">misol</name>
<name xml:lang="zh-TW">misol</name>
</author>
<log>언어선택 추가(WML, mHTML)</log>
@ -63,6 +70,7 @@
<title xml:lang="zh-CN">编码</title>
<title xml:lang="en">Charset</title>
<title xml:lang="vi">Charset</title>
<title xml:lang="ru">Charset</title>
<title xml:lang="zh-TW">編碼</title>
<description xml:lang="ko">
모바일 기기의 경우 UTF-8 문자셋을 인식하지 못할 수 있습니다.
@ -88,6 +96,11 @@
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.
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 xml:lang="zh-TW">
行動工具無法讀取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="es">Delegación ID para 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>
<description xml:lang="ko">
본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다.
@ -38,8 +38,8 @@
必ず設定にて、OpenIDプロバイダーの関連情報を入力してから使用して下さい。
</description>
<description xml:lang="ru">
Этот аддон позволяет Вам использовать Вашу доменное имя как OpenID.
Прежде, чем использовать, просто убедитесь, что установлены значения, имеющие отношение к провайдеру openid.
Этот аддон позволяет Вам использовать Ваше доменное имя как OpenID.
Прежде, чем использовать, установите значения, имеющие отношение к openid-провайдеру .
</description>
<description xml:lang="zh-TW">
可將原本的域名當做OpenID來使用。
@ -78,7 +78,7 @@
<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="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>
</var>
<var name="delegate">
@ -98,7 +98,7 @@
<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="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>
</var>
<var name="xrds">

View file

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

View file

@ -6,7 +6,7 @@
<title xml:lang="en">Image Resizer</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="ru">Image контроля добавить-на bonmunnae</title>
<title xml:lang="ru">Аддон редактирования размера картинки в тексте</title>
<title xml:lang="ge">Image-Add-on bonmunnae</title>
<title xml:lang="zh-TW">圖片縮放</title>
<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.
</description>
<description xml:lang="ru">
Орган изображение вставляется внутрь тела с учетом размера первоначального шоу, когда я нажимаю на надстройки.
Аддон, изменяющий размер картинки к размеру текста, при клике на картинку, появляется полное изображение.
</description>
<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.

View file

@ -16,7 +16,7 @@
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) {
@ -80,7 +80,7 @@
}
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;"/>');
} 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;"/>');

View file

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

View file

@ -509,6 +509,7 @@
**/
function _loadLang($path) {
global $lang;
if(!is_object($lang)) $lang = new stdClass;
if(!$this->lang_type) return;
if(substr($path,-1)!='/') $path .= '/';
$filename = sprintf('%s%s.lang.php', $path, $this->lang_type);
@ -1520,5 +1521,40 @@
$oContext = &Context::getInstance();
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'];
$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++) { // 한문장에 같은 속성에 대한 중복 설정은 큐브리드에서는 허용치 않음
if ($output->columns[$i]['name'] == $name) break;

View file

@ -43,7 +43,7 @@
}
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;
}
@ -53,7 +53,7 @@
}
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;
}

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()
{
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>");
}
);

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
ui.datepicker.css
jquery.ui.datepicker-ko.js

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

View file

@ -1,331 +1,10 @@
/**
* @file common/js/xml_handler.js
* @author zero <zero@nzeo.com>
* @brief zbxe내에서 ajax기능을 이용함에 있어 module, act를 사용하기 위한 자바스크립트
* @brief XE에서 ajax기능을 이용함에 있어 module, act를 사용하기 위한 자바스크립트
**/
// xml handler을 이용하는 user function
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.
@ -482,15 +161,190 @@ function xml2json(xml, tab, ignoreAttrib) {
};
if (xml.nodeType == 9) // document node
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와 같은 용도)
**/
(function($){
$.exec_json = function(action,data,func){
if(typeof(data) == 'undefined') data = {};
action = action.split(".");

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -13,7 +13,7 @@
* @brief XE의 전체 버전 표기
* 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야
**/
define('__ZBXE_VERSION__', '1.4.0.9');
define('__ZBXE_VERSION__', '1.4.1.0');
/**
* @brief zbXE가 설치된 장소의 base path를 구함
@ -112,6 +112,14 @@
**/
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());

View file

@ -652,7 +652,7 @@
// 2. 이벤트명 뒤에는 등호(=)가 존재해야하나 앞, 뒤에 공백이 있을 수 있음
// 3. 에디터 컴포넌트에서 on으로 시작하는 변수명을 가질 수 있으므로 실제 이벤트명만을 체크해야 함
$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=',
$attrs
);
@ -678,7 +678,8 @@
$dynsrc = $xml_doc->{$tag}->attrs->dynsrc;
$lowsrc = $xml_doc->{$tag}->attrs->lowsrc;
$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];
}
@ -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) {
switch (gettype($data)) {
case 'boolean':

View file

@ -7,7 +7,7 @@
<title xml:lang="zh-CN">插件管理</title>
<title xml:lang="jp">アドオン</title>
<title xml:lang="fr">Additions</title>
<title xml:lang="ru">Аддоны</title>
<title xml:lang="ru">Аддон</title>
<title xml:lang="zh-TW">附加元件</title>
<description xml:lang="ko">애드온을 등록하거나 사용/미사용을 설정하는 애드온 관리 모듈입니다.</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);
$curpwd = "ssh2.sftp://$sftp".$this->pwd;
$dh = opendir($curpwd);
$dh = @opendir($curpwd);
if(!$dh) return new Object(-1, 'msg_ftp_invalid_path');
$list = array();
while(($file = readdir($dh)) !== false) {
if(is_dir($curpwd.$file))
@ -71,6 +72,10 @@
if($_list){
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) . '/';
}
}

View file

@ -81,4 +81,5 @@
$lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List";
$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->ftp_get_list = "Get List";
$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->ftp_get_list = "Get List";
$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->ftp_get_list = "Get List";
$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->ftp_get_list = '목록 가져오기';
$lang->ftp_remove_info = 'FTP 정보 삭제';
$lang->msg_ftp_invalid_path = 'FTP Path를 읽을 수 없습니다.';
?>

View file

@ -7,8 +7,8 @@
$lang->admin_info = 'Информация администратора';
$lang->admin_index = 'Индексная страница администратора';
$lang->control_panel = 'Control panel';
$lang->start_module = 'Начало модуля';
$lang->control_panel = 'Контрольная панель';
$lang->start_module = 'Стартовый модуль';
$lang->about_start_module = 'Вы можете указать модуль запуска по умолчанию.';
$lang->module_category_title = array(
@ -24,62 +24,61 @@
'system' => 'System Setting',
);
$lang->newest_news = "Последние новости";
$lang->newest_news = 'Последние новости';
$lang->env_setup = "Настройка";
$lang->default_url = "기본 URL";
$lang->about_default_url = "XE 가상 사이트(cafeXE등)의 기능을 사용할때 기본 URL을 입력해 주셔야 가상 사이트간 인증 연동이 되고 게시글/모듈등의 연결이 정상적으로 이루어집니다. (ex: http://도메인/설치경로)";
$lang->env_setup = 'Настройка';
$lang->default_url = 'Основной URL';
$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->current_version = 'Текущая версия';
$lang->current_path = 'Текущий путь';
$lang->released_version = 'Последняя версия';
$lang->about_download_link = 'Новая версия XE доступна.\nЧтобы скачать последнюю версию, нажмите ссылку закачки';
$lang->item_module = "Список модулей";
$lang->item_addon = "Список аддонов";
$lang->item_widget = "Список виджетов";
$lang->item_layout = "Список лейаутов";
$lang->item_module = 'Список модулей';
$lang->item_addon = 'Список аддонов';
$lang->item_widget = 'Список виджетов';
$lang->item_layout = 'Список лейаутов';
$lang->module_name = "Имя модуля";
$lang->addon_name = "Имя аддона";
$lang->version = "Версия";
$lang->author = "Разработчик";
$lang->table_count = "Номер таблицы";
$lang->installed_path = "Путь установки";
$lang->module_name = 'Имя модуля';
$lang->addon_name = 'Имя аддона';
$lang->version = 'Версия';
$lang->author = 'Разработчик';
$lang->table_count = 'Номер таблицы';
$lang->installed_path = 'Путь установки';
$lang->cmd_shortcut_management = "Редактировать меню";
$lang->cmd_shortcut_management = 'Редактировать меню';
$lang->msg_is_not_administrator = 'Только для администраторов!';
$lang->msg_manage_module_cannot_delete = 'Ярлыки модулей, аддонов, лейаутов, виджетов не могут быть удалены';
$lang->msg_default_act_is_null = 'Ярлык не может быть зарегистрирован, поскольку стандартное административное действие не установлено';
$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->about_shortcut = 'Вы можете удалить ярлыки модулей, зарегистрированных в списке часто используемых модулей';
$lang->yesterday = "Yesterday";
$lang->today = "Today";
$lang->yesterday = 'Вчера';
$lang->today = 'Сегодня';
$lang->cmd_lang_select = "언어선택";
$lang->about_cmd_lang_select = "선택된 언어들만 서비스 됩니다";
$lang->about_recompile_cache = "쓸모없어졌거나 잘못된 캐시파일들을 정리할 수 있습니다";
$lang->use_ssl = "SSL 사용";
$lang->cmd_lang_select = 'Выбор языка';
$lang->about_cmd_lang_select = 'Возможно использование только выбранных языков';
$lang->about_recompile_cache = 'You can delete useless or invalid cache files';
$lang->use_ssl = 'Использовать SSL';
$lang->ssl_options = array(
'none' => "사용안함",
'optional' => "선택적으로",
'always' => "항상사용"
'none' => 'Никогда',
'optional' => 'На выбор',
'always' => 'Всегда'
);
$lang->about_use_ssl = "선택적으로에서는 회원가입/정보수정등의 지정된 action에서 SSL을 사용하고 항상 사용은 모든 서비스가 SSL을 이용하게 됩니다.";
$lang->server_ports = "서버포트지정";
$lang->about_server_ports = "HTTP는 80, HTTPS는 443이외의 다른 포트를 사용하는 경우에 포트를 지정해주어야합니다.";
$lang->use_db_session = '인증 세션 DB 사용';
$lang->about_db_session = '인증시 사용되는 PHP 세션을 DB로 사용하는 기능입니다.<br/>웹서버의 사용율이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다<br/>단 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.';
$lang->sftp = "Use SFTP";
$lang->ftp_get_list = "Get List";
$lang->ftp_remove_info = 'Remove FTP Info.';
$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 = 'Server Port';
$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 = 'Use Session DB';
$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->ftp_get_list = 'Get List';
$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->ftp_get_list = "Get List";
$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->ftp_get_list = "Get List";
$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->ftp_get_list = "取得列表";
$lang->ftp_remove_info = '移除 FTP 資料';
$lang->msg_ftp_invalid_path = 'Failed to read the specified FTP Path.';
?>

View file

@ -57,16 +57,14 @@
continue;
}
if($package->path == ".")
{
$type = "core";
$type = $oModel->getTypeFromPath($package->path);
if($type == "core")
{
$version = __ZBXE_VERSION__;
}
}
else
{
$path_array = explode("/", $package->path);
$target_name = array_pop($path_array);
$type = substr(array_pop($path_array), 0, -1);
$config_file = null;
switch($type)
{
case "module":
@ -86,10 +84,8 @@
$config_file = "/info.xml";
$type = "component";
break;
default:
continue;
}
if(!$config_file) continue;
$xml = new XmlParser();
$xmlDoc = $xml->loadXmlFile($real_path.$config_file);
if(!$xmlDoc) continue;
@ -196,5 +192,42 @@
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 {
var $categories;
var $ftp_set = false;
function init() {
$template_path = sprintf("%stpl/",$this->module_path);
@ -18,6 +19,8 @@
$ftp_info = Context::getFTPInfo();
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
else $this->ftp_set = true;
$this->dispCategory();
$oModel = &getModel('autoinstall');
@ -39,7 +42,7 @@
{
if(!is_array($items)) $items = array($items);
$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();
foreach($items as $item)
{
@ -48,7 +51,7 @@
$oModel = &getModel('autoinstall');
if($package == null)
$packages = $oModel->getInstalledPackages(array_keys($targetpackages));
$depto = array();
foreach($items as $item)
{
$v = $this->rearrange($item, $targets);
@ -56,10 +59,52 @@
{
$v->current_version = $packages[$v->package_srl]->current_version;
$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;
}
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;
}
@ -235,5 +280,37 @@
$this->categories = &$oModel->getCategoryList();
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 $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)
{
$this->ftp_password = $ftp_password;
@ -41,11 +58,38 @@
FileHandler::writeFile($this->download_file, $buff);
}
function installModule()
{
function uninstallModule()
{
$path_array = explode("/", $this->package->path);
$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")
{
$oModuleModel = &getModel('module');
@ -97,38 +141,100 @@
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 {
var $ftp_info = null;
var $connection = null;
var $sftp = null;
function SFTPModuleInstaller(&$package)
{
$this->package =& $package;
$this->ftp_info = Context::getFTPInfo();
}
function _copyDir(&$file_list){
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input');
$ftp_info = Context::getFTPInfo();
if(!$ftp_info->ftp_user || !$ftp_info->sftp || $ftp_info->sftp != 'Y') return new Object(-1,'msg_ftp_invalid_auth_info');
function _connect() {
if(!$this->ftp_info->ftp_user || !$this->ftp_info->sftp || $this->ftp_info->sftp != 'Y') return new Object(-1,'msg_ftp_invalid_auth_info');
if($ftp_info->ftp_host)
if($this->ftp_info->ftp_host)
{
$ftp_host = $ftp_info->ftp_host;
$ftp_host = $this->ftp_info->ftp_host;
}
else
{
$ftp_host = "127.0.0.1";
}
$connection = ssh2_connect($ftp_host, $ftp_info->ftp_port);
if(!ssh2_auth_password($connection, $ftp_info->ftp_user, $this->ftp_password))
$this->connection = ssh2_connect($ftp_host, $this->ftp_info->ftp_port);
if(!ssh2_auth_password($this->connection, $this->ftp_info->ftp_user, $this->ftp_password))
{
return new Object(-1,'msg_ftp_invalid_auth_info');
}
$_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){
$org_file = $file;
@ -141,10 +247,10 @@
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();
}
@ -152,39 +258,79 @@
class PHPFTPModuleInstaller extends ModuleInstaller {
var $ftp_info = null;
var $connection = null;
function PHPFTPModuleInstaller(&$package)
{
$this->package =& $package;
$this->ftp_info = Context::getFTPInfo();
}
function _copyDir(&$file_list) {
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input');
$ftp_info = Context::getFTPInfo();
if($ftp_info->ftp_host)
function _connect()
{
if($this->ftp_info->ftp_host)
{
$ftp_host = $ftp_info->ftp_host;
$ftp_host = $this->ftp_info->ftp_host;
}
else
{
$ftp_host = "127.0.0.1";
}
$connection = ftp_connect($ftp_host, $ftp_info->ftp_port);
if(!$connection) return new Object(-1, 'msg_ftp_not_connected');
$this->connection = ftp_connect($ftp_host, $this->ftp_info->ftp_port);
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)
{
$this->_close();
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){
$org_file = $file;
@ -196,7 +342,7 @@
$path_list = explode('/', dirname($this->target_path."/".$file));
$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++)
{
@ -205,7 +351,7 @@
$ftp_path .= $path_list[$i]."/";
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");
}
@ -213,14 +359,14 @@
if(!stristr(PHP_OS, 'win'))
{
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");
}
}
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");
}
@ -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");
}
}
ftp_close($connection);
$this->_close();
return new Object();
}
}
class FTPModuleInstaller extends ModuleInstaller {
var $oFtp = null;
var $ftp_info = null;
function FTPModuleInstaller(&$package)
{
$this->package =& $package;
$this->ftp_info = Context::getFTPInfo();
}
function _copyDir(&$file_list){
$ftp_info = Context::getFTPInfo();
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)
function _connect() {
if($this->ftp_info->ftp_host)
{
$ftp_host = $ftp_info->ftp_host;
$ftp_host = $this->ftp_info->ftp_host;
}
else
{
$ftp_host = "127.0.0.1";
}
$oFtp = new ftp();
if(!$oFtp->ftp_connect($ftp_host, $ftp_info->ftp_port)) return new Object(-1,'msg_ftp_not_connected');
if(!$oFtp->ftp_login($ftp_info->ftp_user, $this->ftp_password)) {
$oFtp->ftp_quit();
$this->oFtp = new ftp();
if(!$this->oFtp->ftp_connect($ftp_host, $this->ftp_info->ftp_port)) return new Object(-1,'msg_ftp_not_connected');
if(!$this->oFtp->ftp_login($this->ftp_info->ftp_user, $this->ftp_password)) {
$this->_close();
return new Object(-1,'msg_ftp_invalid_auth_info');
}
$_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){
$org_file = $file;
@ -282,7 +464,7 @@
$path_list = explode('/', dirname($this->target_path."/".$file));
$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++)
{
@ -297,7 +479,8 @@
}
$oFtp->ftp_put($target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file));
}
$oFtp->ftp_quit();
$this->_close();
return new Object();
}

View file

@ -108,8 +108,8 @@
return array_shift($output->data);
}
function getInstalledPackages(&$package_list) {
$args->package_list = &$package_list;
function getInstalledPackages($package_list) {
$args->package_list = $package_list;
$output = executeQueryArray("autoinstall.getInstalledPackages", $args);
$result = array();
if(!$output->data) return $result;
@ -133,5 +133,50 @@
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"?>
<module version="0.2">
<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="zh-TW">自動安裝</title>
<title xml:lang="zh-CN">在线安装</title>
@ -12,7 +12,7 @@
<description xml:lang="zh-TW">可以藉由此模組安裝、更新程式包括模組、面板、版面等。</description>
<description xml:lang="zh-CN">很方便的在管理页面一键安装XE相关模块(模块/皮肤/布局/控件/控件样式等)。</description>
<description xml:lang="jp">管理者モードにてクリックだけで、モジュール/スキン/レイアウト/ウィジェット/ウィジェットスタイルのインストールを可能にするモジュールです。</description>
<version>0.2</version>
<version>0.3</version>
<date>2009-11-11</date>
<category>system</category>
<author email_address="haneul0318@gmail.com" link="http://www.seungyeop.kr">

View file

@ -2,6 +2,8 @@
<module>
<actions>
<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="dispAutoinstallAdminIndex" type="view" standalone="true" admin_index="true" />
<action name="procAutoinstallAdminUpdateinfo" type="controller" standalone="true" />

View file

@ -30,4 +30,6 @@
$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 = "ダウンロード";
$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 = "다운로드";
$lang->view_installed_packages = "설치된 패키지";
$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->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->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 = "下載";
$lang->view_installed_packages = "已安裝套裝軟體";
$lang->msg_ftp_password_input = "請輸入 FTP 密碼";
$lang->dependant_list = "이 패키지에 의존하는 패키지 목록";
$lang->description_uninstall = "패키지를 삭제합니다. 모듈의 경우 모든 데이터가 사라집니다.";
?>

View file

@ -1,11 +1,14 @@
<query id="getInstalledPackages" action="select">
<tables>
<table name="ai_installed_packages" />
<table name="ai_installed_packages" alias="installed" />
<table name="autoinstall_packages" alias="package" />
</tables>
<columns>
<column name="*" />
<column name="installed.*" />
<column name="path" />
</columns>
<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>
</query>

View file

@ -38,7 +38,7 @@
.updateList td .title{ position:relative;}
.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 .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.desc{ margin:0 100px 10px 0;}
.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);
}
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-->
<li>
<!--@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-->
<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-->
<!--@if($val->nPackages)-->
<span>({$val->nPackages})</span>

View file

@ -37,12 +37,27 @@
<a href="{$target_url}">{htmlspecialchars($val->title)} ver. {htmlspecialchars($val->item_version)}</a>
</h3>
<!--@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')-->
<a href="{getUrl('act','dispAutoinstallAdminInstall','package_srl',$val->package_srl)}" class="button"><span>{$lang->update}</span></a>
<!--@end-->
</div>
<!--@else-->
<div class="buttons">
<a href="{getUrl('act','dispAutoinstallAdminInstall','package_srl',$val->package_srl)}" class="button"><span>{$lang->install}</span></a>
</div>
<!--@end-->
</div>
<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
**/
$lang->cmd_comment_do = 'Действия';
$lang->cmd_comment_do = 'Эту запись...';
$lang->comment_list = 'Список комментариев';
$lang->cmd_delete_checked_comment = 'Удалить выбранный объект';
$lang->comment_list = 'Список записей';
$lang->cmd_toggle_checked_comment = 'Изменить выбранное';
$lang->cmd_delete_checked_comment = 'Удалить выбранное';
$lang->comment_count = '댓글 수';
$lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.';
$lang->comment_count = 'Количество ответов';
$lang->about_comment_count = 'Отображается указанное количество ответов, после превышения этого количества производится переход к списку.';
$lang->msg_cart_is_null = 'Пожалуйста, выберите статью для удаления.';
$lang->msg_checked_comment_is_deleted = '%d комментарий(-ия) успешно удален(о).';
$lang->msg_cart_is_null = 'Пожалуйста, выберите записи для удаления.';
$lang->msg_checked_comment_is_deleted = '%d записьуспешно удалена';
$lang->search_target_list = array(
'content' => 'Содержание',
'user_id' => 'ID',
'user_name' => 'Имя',
'nick_name' => 'Ник',
'member_srl' => 'Member Serial',
'email_address' => 'Email',
'member_srl' => 'Номер пользователя',
'email_address' => 'Email адрес',
'homepage' => 'Домашняя страница',
'regdate' => 'Дата',
'last_update' => 'Последнее обновление',
'ipaddress' => 'IP-адрес',
);
'regdate' => 'Дата регистрации',
'last_update' => 'Дата последнего обновления',
'ipaddress' => 'IP-адрес',
);
?>

View file

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

View file

@ -85,7 +85,8 @@
}
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;
@ -346,7 +347,8 @@
// 변수 정리
$args->friend_group_srl = trim(Context::get('friend_group_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');
// friend_group_srl이 있으면 수정
@ -376,7 +378,8 @@
// 변수 정리
$args->friend_group_srl= Context::get('friend_group_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');
$output = executeQuery('communication.renameFriendGroup', $args);

View file

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

View file

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

View file

@ -75,7 +75,7 @@
#communicationModule .crossTable th.title *,
#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; }
#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; }

View file

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

View file

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

View file

@ -8,69 +8,96 @@
$lang->document_list = 'Список документов';
$lang->thumbnail_type = 'Тип миниатюры';
$lang->thumbnail_crop = 'Обрезать';
$lang->thumbnail_ratio = 'Отношение';
$lang->thumbnail_ratio = 'Соотношение';
$lang->cmd_delete_all_thumbnail = 'Удалить все миниарюры';
$lang->move_target_module = "Переместить в";
$lang->title_bold = 'Жирное название';
$lang->title_color = 'Цвет названия';
$lang->new_document_count = '새글';
$lang->new_document_count = 'Новые документы';
$lang->parent_category_title = 'Родительская категория';
$lang->parent_category_title = 'Название верхней категории';
$lang->category_title = 'Категория';
$lang->category_color = '분류 폰트색깔';
$lang->expand = 'Расширить';
$lang->category_color = 'Цвет шрифта категории';
$lang->expand = 'Развернуть';
$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_category_group_srls = '선택하신 그룹만 현재 카테고리를 지정할 수 있도록 합니다';
$lang->about_category_group_srls = 'Только выбранные группы можно отнести к этой категории';
$lang->about_category_color = 'Установить цвет шрифта категории. ex) red или #ff0000';
$lang->cmd_search_next = 'Искать дальше';
$lang->about_category_color = '분류 폰트색깔을 지정합니다.';
$lang->cmd_temp_save = 'Сохранить временно';
$lang->cmd_toggle_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_is_secret = 'Эта статья секретна';
$lang->msg_checked_document_is_deleted = 'Всего %d статей было удалено';
$lang->msg_is_secret = 'Секретная запись';
$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(
'title' => 'Тема',
'content' => 'Содержание',
'user_id' => 'Юзер ID',
'member_srl' => 'Членский No.',
'user_name' => 'Имя',
'user_id' => 'ID пользователя',
'member_srl' => 'No. пользователя',
'user_name' => 'Имя пользователя',
'nick_name' => 'Ник',
'email_address' => 'Email',
'homepage' => 'Домашняя страница',
'is_notice' => 'Уведомление',
'is_secret' => 'Секрет',
'is_notice' => 'Объявления',
'is_secret' => 'Секретная запись',
'tags' => 'Тег',
'readed_count' => 'Кол-во Просмотров (Выше)',
'voted_count' => 'Кол-во Голосов (Выше)',
'comment_count ' => 'Кол-во Комментариев (Выше)',
'trackback_count ' => 'Кол-во Трекбеков (Выше)',
'uploaded_count ' => 'Кол-во Вложений (Выше)',
'regdate' => 'Дата',
'last_update' => 'Последнее Обновление',
'readed_count' => 'Количество просмотров (свыше)',
'voted_count' => 'Количество голосов (свыше)',
'comment_count ' => 'Количество записей (свыше)',
'trackback_count ' => 'Количество трекбеков (свыше)',
'uploaded_count ' => 'Количество вложений (прикрепленных файлов) (свыше)',
'regdate' => 'Дата регистрации',
'last_update' => 'Дата последнего обновления',
'ipaddress' => 'IP-Адрес',
);
$lang->alias = "Alias";
$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->trace_only = "Trace only";
$lang->cmd_trash = 'Trashcan';
$lang->cmd_restore = 'Restore';
$lang->cmd_restore_all = 'Restore All';
$lang->cmd_trash = 'Корзина';
$lang->cmd_restore = 'Восстановить';
$lang->cmd_restore_all = 'Восстановить все';
$lang->in_trash = 'Trashcan';
$lang->trash_nick_name = 'Person who deleted';
$lang->trash_date = 'Deleted date';
$lang->trash_description = 'Description';
$lang->in_trash = 'Корзина';
$lang->trash_nick_name = 'Ник удалителя';
$lang->trash_date = 'Дата удаления';
$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";
?>

View file

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

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