1.1.0 배포를 위해 trunk로 sandbox 복사

git-svn-id: http://xe-core.googlecode.com/svn/trunk@4939 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-11-20 06:03:15 +00:00
commit d8ba181d13
1295 changed files with 42245 additions and 14860 deletions

View file

@ -1,14 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">자동 링크 애드온</title>
<title xml:lang="jp">自動リンクアドオン</title>
<title xml:lang="en">Auto Link</title>
<title xml:lang="zh-CN">自动链接插件</title>
<title xml:lang="es">auto vínculo addon</title>
<title xml:lang="ru">авто ссылка аддон</title>
<title xml:lang="ge">Auto-Link Addon</title>
<title xml:lang="zh-TW">自動連結</title>
<description xml:lang="ko">
게시글과 댓글의 내용중 http로 시작되는 일반 문자열에 자동으로 링크를 걸고 각 링크에 마우스 오버시 새창과 현재창 메뉴가 나타나도록 꾸미는 애드온입니다.
</description>
<description xml:lang="jp">
書き込み本文とコメントの内容にhttpで始まる一般文字列にリンクを貼り付け、そのリンクにマウスオーバする際、別ウィンドウと同一ウィンドウに表示させるメニュが現れるアドオンです。
</description>
<description xml:lang="en">
This addon makes a link to a string that starts with http.
</description>
@ -24,16 +29,20 @@
<description xml:lang="ge">
Kommentare beginnen mit http naeyongjung Thema der gemeinsamen String automatisch Link zu hängen Sie mit der Maus über die einzelnen Links und saechang Stadt und auf dem Menü des Add-On Dekoration.
</description>
<description xml:lang="zh-TW">
主題及評論中以http開頭的字串自動轉換成連結。當滑鼠移到連結上方時會顯示(新視窗/本頁面)選擇框。
</description>
<version>0.1</version>
<date>2008-04-22</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</addon>
</addon>

View file

@ -23,7 +23,7 @@
if($_REQUEST['act']!='api') return;
/**
* blogapi의 경우 GET argument와 XML Content가 같이 오기에 제로보드XE의 경우 XML Content가 오면 이것만 처리하기에
* blogapi의 경우 GET argument와 XML Content가 같이 오기에 XE의 경우 XML Content가 오면 이것만 처리하기에
* GET argument중에 mid값을 강제 설정해야 모듈을 정상적으로 찾는다
**/
if($called_position == 'before_module_init') {
@ -447,7 +447,7 @@
<?xml version="1.0" ?>
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd" >
<service>
<engineName>zeroboardXE</engineName>
<engineName>XpressEngine</engineName>
<engineLink>http://www.zeroboard.com/ </engineLink>
<homePageLink>{$homepagelink}</homePageLink>
<apis>

View file

@ -7,6 +7,7 @@
<title xml:lang="ge">Addon für BlogAPI</title>
<title xml:lang="es">Addon para BlogAPI</title>
<title xml:lang="ru">Аддон для BlogAPI</title>
<title xml:lang="zh-TW">部落格 API</title>
<description xml:lang="ko">
metaWeblog를 지원하는 blogApi애드온입니다.
사용으로 설정하시면 각 모듈마다 RSD 태그를 노출합니다.
@ -49,17 +50,23 @@
URL для api - http://setup_path/module_name/api.
Только выбор опции использовать включает поведение RSD тега и api.
</description>
<description xml:lang="zh-TW">
支援 metaWeblog的部落格 API插件。
設置成"啟用"時,會使每個模組都顯示 RSD圖示。
API地址是http://安裝位置/模組名稱/api。
將狀態設置成"啟用"時,才可使用 RSD標籤及 API。
</description>
<version>0.1</version>
<date>2007-02-28</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</addon>
</addon>

View file

@ -7,8 +7,9 @@
<title xml:lang="ge">Counter Addon</title>
<title xml:lang="es">Addon contador básico</title>
<title xml:lang="ru">Аддон для базового счетчика</title>
<title xml:lang="zh-TW">網站訪問統計</title>
<description xml:lang="ko">
제로보드XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다.
XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다.
이 애드온을 켜셔야 접속 정보 수집이 됩니다.
</description>
<description xml:lang="jp">
@ -16,36 +17,40 @@
このアドオンを「使用」に設定しておくと接続(アクセス)情報が記録されます。
</description>
<description xml:lang="zh-CN">
利用ZeroboardXE的网站访问统计模块记录网站访问信息。
利用XE的网站访问统计模块记录网站访问信息。
把状态设置为"使用"时,才会记录网站访问信息.
</description>
<description xml:lang="en">
This addon logs access information based on the basic counter module within Zeroboard XE.
This addon logs access information based on the basic counter module within XE.
The access information will be collected only if you turn on this addon.
</description>
<description xml:lang="ge">
Dieses Addon-Logs Zugriff auf Informationen basiert auf den grundlegenden Zähler-Modul innerhalb Zeroboard XE.
Dieses Addon-Logs Zugriff auf Informationen basiert auf den grundlegenden Zähler-Modul innerhalb XE.
Der Zugang zu Informationen wird nur erhoben, wenn Sie über dieses Addon.
</description>
<description xml:lang="es">
Este addon contador básico de Zeroboard XE permite llevar la información de acceso a la página web de los visitantes.
Este addon contador básico de XE permite llevar la información de acceso a la página web de los visitantes.
Es necesario activar este addon para agregar la información de acceso.
</description>
<description xml:lang="ru">
Этот аддон пишет в лог информацию о доступе к сайту, основанную на базовом модуле счетчика в Zeroboard XE.
Этот аддон пишет в лог информацию о доступе к сайту, основанную на базовом модуле счетчика в XE.
Для сбора информации необходимо включить этот аддон.
</description>
<description xml:lang="zh-TW">
使用 XE的網站訪問統計模組記錄網站訪問資料。
將狀態設置成"使用"時,才會紀錄網站訪問資料。
</description>
<version>0.1</version>
<date>2007-02-28</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</addon>
</addon>

View file

@ -6,7 +6,7 @@
* @author zero (zero@nzeo.com)
* @brief 카운터 애드온
*
* 카운터 애드온은 제로보드XE의 기본 카운터(counter)모듈을 이용하여 로그를 남깁니다.
* 카운터 애드온은 XE의 기본 카운터(counter)모듈을 이용하여 로그를 남깁니다.
* 검색 로봇이나 기타 툴의 접속을 방지하고 부하를 줄이기 위해서 페이지가 로드된 후에 javascript로 다시 로그를 남기도록 합니다.
* 따라서 카운터 애드온은 카운터를 수집하게 하는 javascript 파일을 추가하는 동작만 하며 기본 카운터 모듈의 호출은 해당 javascript
* 파일내에서 이루어집니다.

View file

@ -7,6 +7,7 @@
<title xml:lang="es">LemonPen XE addon</title>
<title xml:lang="ru">LemonPen XE Addon</title>
<title xml:lang="jp">LemonPen XE アドオン</title>
<title xml:lang="zh-TW">LemonPen XE</title>
<description xml:lang="ko">활성화 하시면 레몬펜을 사이트에 달 수 있습니다.</description>
<description xml:lang="zh-CN">要想在网站使用LemonPen插件请将此插件激活。</description>
<description xml:lang="ge">Sie können LemonPen auf der Website, wenn Sie diese aktivieren.</description>
@ -14,11 +15,11 @@
<description xml:lang="es">Puede insertar LemonPen al sitio cuando este se activa.</description>
<description xml:lang="ru">Вы можете вставить LemonPen к месту, когда вы позволили это.</description>
<description xml:lang="jp">機能をオンにすると、レモンペンをサイト上で使うことが出来ます。 (LemonPenOpenmaru社提供)</description>
<description xml:lang="zh-TW">想要在網站使用LemonPen請將其啟用。</description>
<version>0.1</version>
<date>2007-12-10</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<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="en">zero</name>
@ -26,6 +27,7 @@
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
<extra_vars>
@ -37,6 +39,7 @@
<title xml:lang="es">sid</title>
<title xml:lang="ru">sid</title>
<title xml:lang="jp">sid</title>
<title xml:lang="zh-TW">sid</title>
<description xml:lang="ko">레몬펜에서 사이트 등록시 발급받은 sid값을 입력해주세요.</description>
<description xml:lang="zh-CN">请输入注册LemonPen网站时发放的sid值。</description>
<description xml:lang="en">Please input sid value that you got after registering at the LemonPen website.</description>
@ -44,6 +47,7 @@
<description xml:lang="es">Por favor, de entrada sid valor que había que hacer después de registrarse en el sitio web LemonPen.</description>
<description xml:lang="ru">Введите замороженный ценности, которые вы получили после регистрации на сайте LemonPen.</description>
<description xml:lang="jp">レモンペンのサイトで発行されたsidを入力してください。 (LemonPenOpenmaru社提供)</description>
<description xml:lang="zh-TW">請輸入註冊LemonPen網站時所給予的sid值。</description>
</var>
</extra_vars>
</addon>
</addon>

View file

@ -22,7 +22,7 @@
return;
}
// 제로보드XE의 문서와 permant link를 레몬펜의 규약에 맞춰서 출력
// XE의 문서와 permant link를 레몬펜의 규약에 맞춰서 출력
if($GLOBALS['__lemonpen_is_called__'] && $called_position == 'before_display_content') {
// 글 본문을 링크
$output = preg_replace('/<div class="document_([0-9]+)_([0-9]+) xe_content">/is','<div class="document_$1_$2 xe_content hentry"><a href="'.getUrl('','document_srl',"$1").'" rel="bookmark" style="display:none;">'.getUrl('','document_srl',"$1").'</a>', $output);

View file

@ -1,19 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">커뮤니케이션</title>
<title xml:lang="jp">커뮤니케이션</title>
<title xml:lang="jp">コミュニケーション</title>
<title xml:lang="zh-CN">会员交流</title>
<title xml:lang="en">Communication</title>
<title xml:lang="ge">커뮤니케이션</title>
<title xml:lang="es">커뮤니케이션</title>
<title xml:lang="ru">커뮤니케이션</title>
<title xml:lang="zh-TW">交流</title>
<description xml:lang="ko">
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
</description>
<description xml:lang="jp">
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
コミュニケーションモジュールを活性化して、メッセージや友達機能を使えるようにします。
メッセージ・友達機能を使うにはこのアドオンを「使用」にして下さい。
</description>
<description xml:lang="zh-CN">
此插件可激活短信箱及添加好友功能。
@ -34,17 +35,20 @@
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
</description>
<description xml:lang="zh-TW">
此插件可啟用短訊和新增好友功能。
</description>
<version>0.1</version>
<date>2008-05-28</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</addon>
</addon>

View file

@ -2,7 +2,7 @@
/**
* @file ru.lang.php
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack for Zeroboard XE
* @brief Russian basic language pack
**/
$lang->alert_new_message_arrived = 'У Вас есть новые сообщения. Хотите проверить сейчас?';

View file

@ -0,0 +1,3 @@
<?php
$lang->alert_new_message_arrived = '您有新訊息。要確認嗎?';
?>

View file

@ -1,17 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">회원 확장 정보 출력</title>
<title xml:lang="jp">회원 확장 정보 출력</title>
<title xml:lang="jp">拡張会員情報表示</title>
<title xml:lang="zh-CN">用户扩展信息</title>
<title xml:lang="en">Extra Member Info</title>
<title xml:lang="ge">회원 확장 정보 출력</title>
<title xml:lang="es">회원 확장 정보 출력</title>
<title xml:lang="ru">회원 확장 정보 출력</title>
<title xml:lang="zh-TW">用戶延伸資料</title>
<description xml:lang="ko">
회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요.
</description>
<description xml:lang="jp">
회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요.
会員が登録したイメージを使ったお名前、イメージマークを使うためにはこのアドオンを活性化して下さい。
</description>
<description xml:lang="zh-CN">
此插件将把用户信息中的昵称图片,用户图标,签名等信息显示到页面当中。
@ -28,17 +29,20 @@
<description xml:lang="ru">
회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요.
</description>
<description xml:lang="zh-TW">
此插件將把用戶資料中的暱稱圖片、用戶圖示、簽名檔等資料顯示到頁面當中。
</description>
<version>0.2</version>
<date>2007-02-28</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</addon>
</addon>

View file

@ -13,13 +13,11 @@
/**
* 출력되기 바로 직전일 경우에 이미지이름/이미지마크등을 변경
**/
if($called_position == "before_display_content") {
if($called_position != "before_display_content" || Context::get('act')=='dispPageAdminContentModify') return;
// 회원 이미지이름/ 마크/ 찾아서 대체할 함수를 담고 있는 파일을 include
require_once('./addons/member_extra_info/member_extra_info.lib.php');
// 회원 이미지이름/ 마크/ 찾아서 대체할 함수를 담고 있는 파일을 include
require_once('./addons/member_extra_info/member_extra_info.lib.php');
// 1. 출력문서중에서 <div class="member_번호">content</div>를 찾아 MemberController::transImageName() 를 이용하여 이미지이름/마크로 변경
$output = preg_replace_callback('!<(div|span)([^\>]*)member_([0-9]+)([^\>]*)>(.*?)\<\/(div|span)\>!is', 'memberTransImageName', $output);
}
// 1. 출력문서중에서 <div class="member_번호">content</div>를 찾아 MemberController::transImageName() 를 이용하여 이미지이름/마크로 변경
$output = preg_replace_callback('!<(div|span|a)([^\>]*)member_([0-9]+)([^\>]*)>(.*?)\<\/(div|span|a)\>!is', 'memberTransImageName', $output);
?>

View file

@ -28,13 +28,10 @@
// 이미지이름이나 마크가 없으면 원본 정보를 세팅
if(!$image_name_file && !$image_mark_file) return $matches[0];
$text = $nick_name = htmlspecialchars(strip_tags($nick_name));
if($image_name_file) $nick_name = sprintf('<img src="%s" border="0" alt="id: %s" title="id: %s" style="vertical-align:middle;margin-right:3px" />', $image_name_file, strip_tags($nick_name), strip_tags($nick_name));
if($image_mark_file) $nick_name = sprintf('<img src="%s" border="0" alt="id: %s" title="id : %s" style="vertical-align:middle;margin-right:3px"/>%s', $image_mark_file, strip_tags($nick_name), strip_tags($nick_name), $nick_name);
// 이미지 이름이 있을 경우
if($image_name_file) $text = sprintf('<img src="%s" border="0" alt="id: %s" title="id: %s" style="vertical-align:middle;margin-right:3px" />', $image_name_file, $nick_name, $nick_name);
if($image_mark_file) $text = sprintf('<img src="%s" border="0" alt="id: %s" title="id : %s" style="vertical-align:middle;margin-right:3px"/>%s', $image_mark_file, $nick_name, $nick_name, $text);
return sprintf('<span class="nowrap member_%d" style="cursor:pointer">%s</span>',$member_srl, $text);
$orig_text = preg_replace('/'.preg_quote($matches[5],'/').'<\/'.$matches[6].'>$/', '', $matches[0]);
return $orig_text.$nick_name.'</'.$matches[6].'>';
}
?>

View file

@ -1,38 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">모바일XE 애드온</title>
<title xml:lang="jp">モバイルXEアドオン</title>
<title xml:lang="zh-CN">手机XE插件</title>
<title xml:lang="en">Mobile XE</title>
<title xml:lang="zh-TW">行動版 XE</title>
<description xml:lang="ko">
모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 WAP 태그로 출력하는 애드온입니다.
wml, hdml, mhtml를 지원하고 그 이외의 경우에는 동작하지 않습니다.
</description>
<description xml:lang="jp">
モバイル端末機からアクセス時、ヘッダ情報を分析してメニュー - モジュールの関係を利用してWAPタグに変換して表示するアドオンです。
wml, hdml, mhtmlをサポートし、その以外は働きません。
</description>
<description xml:lang="zh-CN">
通过手机访问网站时将网页输出为WAP标签的插件。
支持语言wml, hdml, mhtml
</description>
<description xml:lang="en">
This addon displays WAP tag by analyzing header information on mobile connection.
Only wml, hdml, mhtml formats are provided.
</description>
<description xml:lang="zh-TW">
透過行動工具連結時會將網頁轉換為WAP標籤顯示。
只限於 wml, hdml, mhtml格式。
</description>
<version>0.1</version>
<date>2008-06-20</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
<extra_vars>
<var name="charset">
<title xml:lang="ko">문자셋</title>
<title xml:lang="jp">文字コード</title>
<title xml:lang="zh-CN">编码</title>
<title xml:lang="en">Charset</title>
<title xml:lang="zh-TW">編碼</title>
<description xml:lang="ko">
모바일 기기의 경우 utf-8 문자셋을 인식하지 못할 수 있습니다.
문자셋에 원하시는 문자셋을 입력하면 자동으로 변환하여 출력하여 모바일에서 이상없이 출력하도록 합니다.
기본값은 euc-kr입니다.
</description>
<description xml:lang="jp">
ある特定のモバイル機器ではutf-8文字コードの認識が出来ない場合があります。
文字コードを設定すると、該当文字コードに自動変換して正常に表示できるようになります。
デフォルトはeuc-krです。
</description>
<description xml:lang="zh-CN">
手机有时无法识别utf-8编码这时输入相应的编码值即可自动转换。
默认编码为euc-kr。
</description>
<description xml:lang="en">
utf-8 cannot be read for mobile tools.
Mobile tools will display correct charset when you input charset you want.
Default charset is euc-kr.
</description>
<description xml:lang="zh-TW">
行動工具無法讀取 utf-8編碼。
當您輸入您想要的編碼時,行動工具將會正確的顯示。
預設編碼是 euc-kr.
</description>
</var>
</extra_vars>
</addon>
</addon>

View file

@ -0,0 +1,9 @@
<?php
/**
* @file addons/mobile/lang/jp.lang.php
* @author zero (zero@nzeo.com) 翻訳:ミニミ
* @brief 日本語言語パッケージ
**/
$lang->cmd_go_upper = '上位';
$lang->cmd_go_home = 'トップへ';
?>

View file

@ -0,0 +1,10 @@
<?php
/**
* @file addons/mobile/lang/zh-CN.lang.php
* @author zero (zero@nzeo.com)
* @brief 中文语言包
**/
$lang->cmd_go_upper = '上一级';
$lang->cmd_go_home = '首页';
?>

View file

@ -0,0 +1,10 @@
<?php
/**
* @file addons/mobile/lang/zh-TW.lang.php
* @author zero (zero@nzeo.com)
* @brief 正體中文語言包 (只有基本內容)
**/
$lang->cmd_go_upper = '回上頁';
$lang->cmd_go_home = '回首頁';
?>

View file

@ -7,6 +7,7 @@
<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="zh-TW">OpenID</title>
<description xml:lang="ko">
본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다.
꼭 설정을 통해서 openid provider관련 값을 입력후 사용해주세요.
@ -35,18 +36,22 @@
Этот аддон позволяет Вам использовать Вашу доменное имя как OpenID.
Прежде, чем использовать, просто убедитесь, что установлены значения, имеющие отношение к провайдеру openid.
</description>
<description xml:lang="zh-TW">
可將原本的域名當做OpenID來使用。
必須在設置中輸入openid provider相關值後再使用。
</description>
<version>0.1</version>
<date>2007-02-28</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<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="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="ru">Zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
<extra_vars>
@ -58,6 +63,7 @@
<title xml:lang="es">Servidor</title>
<title xml:lang="jp">server</title>
<title xml:lang="ru">server</title>
<title xml:lang="zh-TW">server</title>
<description xml:lang="ko">openid.server 값을 입력해 주세요.</description>
<description xml:lang="zh-CN">请输入 openid.server 值。</description>
<description xml:lang="en">Please input your openid.server value.</description>
@ -65,6 +71,7 @@
<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="zh-TW">請輸入 openid.server 值。</description>
</var>
<var name="delegate">
<title xml:lang="ko">delegate</title>
@ -74,6 +81,7 @@
<title xml:lang="es">delegado</title>
<title xml:lang="jp">delegate</title>
<title xml:lang="ru">delegate</title>
<title xml:lang="zh-TW">delegate</title>
<description xml:lang="ko">openid.delegate값을 입력해주세요.</description>
<description xml:lang="zh-CN">请输入 openid.delegate 值。</description>
<description xml:lang="en">Please input your openid.delegate value.</description>
@ -81,6 +89,7 @@
<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="zh-TW">請輸入 openid.delegate 值。</description>
</var>
<var name="xrds">
<title xml:lang="ko">xrds</title>
@ -90,6 +99,7 @@
<title xml:lang="es">xrds</title>
<title xml:lang="jp">xrds</title>
<title xml:lang="ru">xrds</title>
<title xml:lang="zh-TW">xrds</title>
<description xml:lang="ko">X-XRDS-Location값을 입력해주세요.</description>
<description xml:lang="zh-CN">请输入 X-XRDS-Location 值。</description>
<description xml:lang="en">Please input your X-XRDS-Location value.</description>
@ -97,6 +107,7 @@
<description xml:lang="es">Ingresar el valor de X-XRDS-Location</description>
<description xml:lang="jp">X-XRDS-Location の値を入力してください。</description>
<description xml:lang="ru">Пожалуйста, введите Ваше значение X-XRDS-Локации.</description>
<description xml:lang="zh-TW">請輸入 X-XRDS-Location 值。</description>
</var>
</extra_vars>
</addon>
</addon>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">플래닛 Bookmark 애드온</title>
<title xml:lang="zh-CN">微博收藏插件</title>
<title xml:lang="zh-TW">Planet 書籤</title>
<description xml:lang="ko">
플래닛 Bookmark 애드온
</description>
<description xml:lang="zh-CN">
XE微博收藏插件。
</description>
<description xml:lang="zh-TW">
Planet 書籤插件
</description>
<version>0.1</version>
<date>2008-10-31</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="zh-TW">zero</name>
</author>
</addon>

View file

@ -0,0 +1,24 @@
<?php
if(!defined("__ZBXE__")) exit();
/**
* @file planet_bookmark.addon.php
* @author zero (zero@zeroboard.com)
* @brief
**/
if($called_position == 'after_module_proc' && Context::getResponseMethod()!="XMLRPC" && Context::getResponseMethod()!="JSON") {
$config = Context::get('config');
if($config && $config->mid == 'planet'){
$oPlanet = Context::get('planet');
if(!is_object($oPlanet)) return;
if($oPlanet->isMyPlanet()){
$oPlanetModel = &getModel('planet');
$countBookmark = $oPlanetModel->getTagSearchResultCount($oPlanet->getModuleSrl(),'bookmark');
Context::addHtmlHeader("<script type=\"text/javascript\">//<![CDATA[\nvar planet_bookmark_count=".( (int)$countBookmark).";\n//]]></script>");
Context::addJsFile('./addons/planet_bookmark/planet_bookmark.js');
}
}
}
?>

View file

@ -0,0 +1,96 @@
function planetBookmarkTab(){
if($('planet_tab')) $('planet_tab').innerHTML += '<ul id="planetBookmarkTab" class="exTab"><li><a href="#planet_tab" onclick="planetShowBookmarkList(this);">Bookmark<sup><span id="planet_bookmark_count">'+ planet_bookmark_count + '</span></a></li></ul>';
}
xAddEventListener(window,'load',planetBookmarkTab);
function planetShowBookmarkList(o){
$ElementList('#planetBookmarkTab li').removeClass('active');
$Element(o).parent().addClass('active');
$ElementList('#planet_myTab li').removeClass('active');
planetBookmarkReload();
}
function planetBookmarkReload(){
$('commentList').innerHTML = '<div class="commentHeader"><h3 class="exTitle">Bookmark</h3><span class="button strong black todoWrite"><button type="button" onclick="showWritePostBookmark()">Bookmark</button></span></div>\n<div id="bookmarkList" class="commentBody todoManager"></div>\n<div id="todoList_page" class="pagination a1"></div>\n\n<span class="tl"></span><span class="tr"></span><span class="bl"></span><span class="br"></span>\n';
planetGetBookmark(0);
}
function planetGetBookmark(page){
$('bookmarkList').innerHTML ='';
var response_tags = new Array('error','message','contentList','pageNavigation');
exec_xml('planet','dispPlanetContentTagSearch',{keyword:'bookmark',page:page,mid:current_mid},completeGetBookmark,response_tags);
}
function completeGetBookmark(ret_obj,response_tags, params, fo_obj) {
if(ret_obj['error'] == 0 && ret_obj.contentList){
var o = new Array();
var it = new Array();
var items = ret_obj['contentList']['item'];
if(typeof(items[0]) == 'undefined') {
it[0] = items;
} else {
it = items;
}
o.push('<ul>');
for(var i=0,c=it.length;i<c;i++){
var tag = $A();
if(typeof(it[i]['tag_list']['item'])=='string'){
tag.push(it[i]['tag_list']['item']);
}else{
tag = $A(it[i]['tag_list']['item']);
}
tag = tag.filter(function(v){return !/bookmark/i.test(v);});
tag = tag.$value().join(',');
o.push('<li>');
o.push(it[i]['content']);
if(tag) {
o.push('<div class="tag">');
o.push('<img src="'+request_uri+'addons/planet_bookmark/tag.gif" title="tag" />');
o.push(tag);
o.push('</div>');
}
o.push("</li>\n");
}
o.push('</ul>');
o.push('<span class="tl"></span><span class="tr"></span><span class="bl"></span><span class="br"></span>');
$('bookmarkList').innerHTML = o.join('');
var pageNavigation = ret_obj['pageNavigation'];
$('planet_bookmark_count').innerHTML = pageNavigation.total_count ? pageNavigation.total_count : 0;
if(pageNavigation.total_page > 1){
var str = "";
if(pageNavigation.first_page>1) str += '<a class="prev" href="#planet_tab" onclick="planetGetBookmark('+(pageNavigation.first_page-1)+');">Prev</a>';
for(var i=pageNavigation.first_page;i<=pageNavigation.page_count;i++){
if(i== pageNavigation.cur_page){
str += "<strong>"+i+"</strong>";
}else{
str += '<a href="#planet_tab" onclick="planetGetBookmark('+i+');">'+ i +'</a>';
}
}
if(pageNavigation.total_page != pageNavigation.last_page) str += '<a class="next" href="#planet_tab" onclick="planetGetBookmark('+(pageNavigation.last_page+1)+');">next</a>';
$('bookmarkList_page').innerHTML = str;
}
window.location.href="#planet_tab";
}else{
$('planet_bookmark_count').innerHTML = 0;
}
}
function showWritePostBookmark(tag){
tag = tag||'bookmark';
$Element($('writePostForm').about_tag).hide();
$Element($('writePostForm').content_tag).show();
$('writePostForm').content_tag.value = tag;
window.document.location.href="#writePost";
showWritePost();
}

View file

@ -0,0 +1,28 @@
<?php
if(!defined("__ZBXE__")) exit();
/**
* @file planet_todo.addon.php
* @author SOL군 (sol@ngleader.com)
* @brief
**/
if($called_position == 'after_module_proc' && Context::getResponseMethod()!="XMLRPC" && Context::getResponseMethod()!="JSON") {
$config = Context::get('config');
//getTagSearchResultCount
if($config->mid == 'planet'){
$oPlanet = Context::get('planet');
if($oPlanet->isMyPlanet()){
$oPlanetModel = &getModel('planet');
$countTodo = $oPlanetModel->getTagSearchResultCount($oPlanet->getModuleSrl(),'todo');
$countDone = $oPlanetModel->getTagSearchResultCount($oPlanet->getModuleSrl(),'done');
Context::addHtmlHeader("<script type=\"text/javascript\">//<![CDATA[\nvar planet_todo_count={todo:".$countTodo.",done:".$countDone."};\n//]]></script>");
Context::addJsFile('./addons/planet_todo/planet_todo.js');
}
}
}
?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">플래닛 TODO 애드온</title>
<title xml:lang="en">Planet TODO</title>
<title xml:lang="zh-CN">微博TODO插件</title>
<title xml:lang="zh-TW">Planet TODO 插件</title>
<description xml:lang="ko">
플래닛 TODO 애드온
</description>
<description xml:lang="en">
This is Planet TODO addon.
</description>
<description xml:lang="zh-CN">
XE微博TODO插件。
</description>
<description xml:lang="zh-TW">
Planet TODO 插件
</description>
<version>0.1</version>
<date>2008-10-31</date>
<author email_address="sol@ngleader.com" link="http://ngleader.com">
<name xml:lang="ko">SOL군</name>
<name xml:lang="jp">SOLgun</name>
<name xml:lang="en">SOLgun</name>
<name xml:lang="zh-CN">SOLgun</name>
<name xml:lang="zh-TW">SOLgun</name>
</author>
</addon>

View file

@ -0,0 +1,25 @@
<?php
if(!defined("__ZBXE__")) exit();
/**
* @file planet_todo.addon.php
* @author SOL군 (sol@ngleader.com)
* @brief
**/
if($called_position == 'after_module_proc' && Context::getResponseMethod()!="XMLRPC" && Context::getResponseMethod()!="JSON") {
$config = Context::get('config');
if($config && $config->mid == 'planet'){
$oPlanet = Context::get('planet');
if(!is_object($oPlanet)) return;
if($oPlanet->isMyPlanet()){
$oPlanetModel = &getModel('planet');
$countTodo = $oPlanetModel->getTagSearchResultCount($oPlanet->getModuleSrl(),'todo');
$countDone = $oPlanetModel->getTagSearchResultCount($oPlanet->getModuleSrl(),'done');
Context::addHtmlHeader("<script type=\"text/javascript\">//<![CDATA[\nvar planet_todo_count={todo:".$countTodo.",done:".$countDone."};\n//]]></script>");
Context::addJsFile('./addons/planet_todo/planet_todo.js');
}
}
}
?>

View file

@ -0,0 +1,221 @@
function planetTab(){
planet_todo_count.todo = planet_todo_count.todo ? planet_todo_count.todo:0;
planet_todo_count.done = planet_todo_count.done ? planet_todo_count.done:0;
if($('planet_tab')) $('planet_tab').innerHTML += '<ul id="planetex_Tab" class="exTab"><li><a href="#planet_tab" onclick="planet_showTodoList(this);">ToDo<sup><span id="planet_todo_count">'+ planet_todo_count.todo + '</span>/<span id="planet_done_count">' + planet_todo_count.done + '</span></sup></a></li></ul>';
}
xAddEventListener(window,'load',planetTab);
function planetTabOff(){
$Element('planetex_Tab').leave();
}
function planet_showTodoList(o){
$ElementList('#planetex_Tab li').removeClass('active');
$Element(o).parent().addClass('active');
$ElementList('#planet_myTab li').removeClass('active');
planet_reload_todo();
}
function planet_reload_todo(){
$('commentList').innerHTML = '<div class="commentHeader"><h3 class="exTitle">TODO</h3><span class="button strong black todoWrite"><button type="button" onclick="showWritePostTodo()">TODO Post</button></span></div>\n<div id="todoList" class="commentBody todoManager"></div>\n<div id="todoList_page" class="pagination a1"></div>\n<div class="commentHeader"><h3 class="exTitle">DONE</h3></div>\n<div id="doneList" class="commentBody todoManager"></div>\n<div id="doneList_page" class="pagination a1"></div>\n<span class="tl"></span><span class="tr"></span><span class="bl"></span><span class="br"></span>\n';
planet_getTodo();
planet_getDone();
}
function planet_getTodo(page){
$('todoList').innerHTML ='';
_getPlanetTagSeachResult('todo',page,result_planet_getTodo);
}
function planet_getDone(page){
$('doneList').innerHTML ='';
_getPlanetTagSeachResult('done',page,result_planet_getDone);
}
function _getPlanetTagSeachResult(tag,page,func){
var response_tags = new Array('error','message','contentList','pageNavigation');
exec_xml('planet','dispPlanetContentTagSearch',{keyword:tag,page:page,mid:current_mid},func,response_tags);
}
function result_planet_getTodo(ret_obj,response_tags, params, fo_obj) {
if(ret_obj['error'] == 0 && ret_obj.contentList){
var o = new Array();
var it = new Array();
var items = ret_obj['contentList']['item'];
if(typeof(items[0]) == 'undefined'){
it[0] = items;
}else{
it = items;
}
o.push('<ul>');
for(var i=0,c=it.length;i<c;i++){
it[i]['regdate'] += '';
it[i]['regdate'] = it[i]['regdate'].substr(0,4) + '/' + it[i]['regdate'].substr(4,2) + '/' + it[i]['regdate'].substr(6,2);
var tag = $A();
if(typeof(it[i]['tag_list']['item'])=='string'){
tag.push(it[i]['tag_list']['item']);
}else{
tag = $A(it[i]['tag_list']['item']);
}
tag = tag.filter(function(v){return !/todo/i.test(v);});
tag.push('done');
tag = tag.$value().join(',');
o.push('<input type="hidden" id="tag:'+it[i]['document_srl']+'" value="'+tag+'" /><li>');
o.push(it[i]['content']);
o.push('<span class="button small"><img src="./common/tpl/images/iconCheckGreen.gif" alt="" class="icon" /><button type="button" id="document_srl:'+it[i]['document_srl']+'" onclick="planet_todo_setDone(this)">DONE</button></span>');
o.push('<span class="time">');
o.push(it[i]['regdate']);
o.push('</span>');
o.push("</li>\n");
}
o.push('</ul>');
o.push('<span class="tl"></span><span class="tr"></span><span class="bl"></span><span class="br"></span>');
$('todoList').innerHTML = o.join('');
var pageNavigation = ret_obj['pageNavigation'];
$('planet_todo_count').innerHTML = pageNavigation.total_count ? pageNavigation.total_count : 0;
if(pageNavigation.total_page > 1){
var str = "";
if(pageNavigation.first_page>1) str += '<a class="prev" href="#planet_tab" onclick="planet_getDone('+(pageNavigation.first_page-1)+');">Prev</a>';
for(var i=pageNavigation.first_page;i<=pageNavigation.page_count;i++){
if(i== pageNavigation.cur_page){
str += "<strong>"+i+"</strong>";
}else{
str += '<a href="#planet_tab" onclick="planet_getDone('+i+');">'+ i +'</a>';
}
}
if(pageNavigation.total_page != pageNavigation.last_page) str += '<a class="next" href="#planet_tab" onclick="planet_getDone('+(pageNavigation.last_page+1)+');">next</a>';
$('todoList_page').innerHTML = str;
}
window.location.href="#planet_tab";
}else{
$('planet_todo_count').innerHTML = 0;
}
}
function result_planet_getDone(ret_obj,response_tags, params, fo_obj) {
if(ret_obj['error'] == 0 && ret_obj.contentList){
var o = new Array();
var it = new Array();
var items = ret_obj['contentList']['item'];
if(typeof(items[0]) == 'undefined'){
it[0] = items;
}else{
it = items;
}
o.push('<ul>');
for(var i=0,c=it.length;i<c;i++){
it[i]['regdate'] += '';
it[i]['regdate'] = it[i]['regdate'].substr(0,4) + '/' + it[i]['regdate'].substr(4,2) + '/' + it[i]['regdate'].substr(6,2);
var tag = $A();
if(typeof(it[i]['tag_list']['item'])=='string'){
tag.push(it[i]['tag_list']['item']);
}else{
tag = $A(it[i]['tag_list']['item']);
}
tag = tag.filter(function(v){return !/done/i.test(v);});
tag.push('todo');
tag = tag.$value().join(',');
o.push('<input type="hidden" id="tag:'+it[i]['document_srl']+'" value="'+tag+'" /><li>');
o.push(it[i]['content']);
o.push('<span class="button small"><img src="./common/tpl/images/iconCheckGreen.gif" alt="" class="icon" /><button type="button" id="document_srl:'+it[i]['document_srl']+'" onclick="planet_todo_setDone(this)">REDO</button></span>');
o.push('<span class="button small"><img src="./common/tpl/images/iconX.gif" alt="" class="icon" /><button type="button" onclick="planet_todo_setDel('+it[i]['document_srl']+')">Delete</button></span>');
o.push("</li>\n");
}
o.push('</ul>');
o.push('<span class="tl"></span><span class="tr"></span><span class="bl"></span><span class="br"></span>');
$('doneList').innerHTML = o.join('');
var pageNavigation = ret_obj['pageNavigation'];
$('planet_done_count').innerHTML = pageNavigation.total_count ? pageNavigation.total_count : 0;
if(pageNavigation.total_page > 1){
var str = "";
if(pageNavigation.first_page>1) str += '<a class="prev" href="#planet_tab" onclick="planet_getDone('+(pageNavigation.first_page-1)+');>Prev</a>';
for(var i=pageNavigation.first_page;i<=pageNavigation.page_count;i++){
if(i== pageNavigation.cur_page){
str += "<strong>"+i+"</strong>";
}else{
str += '<a href="#planet_tab" onclick="planet_getDone('+i+');">'+ i +'</a>';
}
}
if(pageNavigation.total_page != pageNavigation.last_page) str += '<a class="next" href="#planet_tab" onclick="planet_getDone('+(pageNavigation.last_page+1)+');>next</a>';
$('doneList_page').innerHTML = str;
}
window.location.href="#planet_tab";
}else{
$('planet_done_count').innerHTML = 0;
}
}
function planet_todo_setDone(o){
var document_srl = o.id.replace(/.*:/,'');
var tag = $('tag:'+document_srl).value;
var params = {};
params['document_srl'] = document_srl;
params['planet_content_tag'] = tag;
exec_xml('planet','procPlanetContentTagModify',params,planet_reload_todo);
return false;
}
function planet_todo_setDel(document_srl){
// var tag = $A($('document_srl:'+document_srl).value.split(','));
var tag = $A($('tag:'+document_srl).value.split(','));
tag = tag.filter(function(v){return !/todo/i.test(v);});
tag.push('hide');
tag = tag.$value().join(',');
var params = {};
params['document_srl'] = document_srl;
params['planet_content_tag'] = tag;
exec_xml('planet','procPlanetContentTagModify',params,planet_reload_todo);
return false;
}
function showWritePostTodo(tag){
tag = tag||'todo';
$Element($('writePostForm').about_tag).hide();
$Element($('writePostForm').content_tag).show();
$('writePostForm').content_tag.value = tag;
window.document.location.href="#writePost";
showWritePost();
}

View file

@ -7,6 +7,7 @@
<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="zh-TW">點數等級圖案</title>
<description xml:lang="ko">
포인트 시스템을 사용중일 경우 사용자 이름 앞에 레벨 아이콘을 표시하도록 합니다.
레벨 아이콘은 모듈 &gt; 포인트시스템에서 선택 가능합니다.
@ -35,17 +36,21 @@
Этот аддон отображает иконку уровня напротив имени пользователя, когда используется система поинтов.
Вы можете выбрать иконку уровня на Модуле Системы Поинтов.
</description>
<description xml:lang="zh-TW">
使用點數系統時,可以在用戶名前顯示等級圖案。
等級圖案可以在模組 &gt; 點數系統中進行選擇。
</description>
<version>0.1</version>
<date>2007-07-26</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="zh-CN">Zero</name>
<name xml:lang="jp">Zero</name>
<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="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</addon>
</addon>

View file

@ -10,10 +10,10 @@
**/
// before_display_content 가 아니면 return
if($called_position != "before_display_content") return;
if($called_position != "before_display_content" || Context::get('act')=='dispPageAdminContentModify') return;
require_once('./addons/point_level_icon/point_level_icon.lib.php');
$oPointController = &getController('point');
$output = preg_replace_callback('!<(div|span)([^\>]*)member_([0-9\-]+)([^\>]*)>(.*?)\<\/(div|span)\>!is', 'pointLevelIconTrans', $output);
$output = preg_replace_callback('!<(div|span|a)([^\>]*)member_([0-9\-]+)([^\>]*)>(.*?)\<\/(div|span|a)\>!is', 'pointLevelIconTrans', $output);
?>

View file

@ -37,11 +37,11 @@
$title = sprintf('%s:%s%s %s, %s:%s/%s', Context::getLang('point'), $point, $config->point_name, $per?'('.$per.'%)':'', Context::getLang('level'), $level, $config->max_level);
$alt = sprintf('[%s:%s]', Context::getLang('level'), $level);
$text = sprintf('<span class="nowrap member_%s" style="cursor:pointer"><img src="%s" alt="%s" title="%s" style="vertical-align:middle;margin-right:3px"/>%s</span>', $member_srl, $level_icon, $alt, $title, $text);
$GLOBALS['_pointLevelIcon'][$member_srl] = $text;
$GLOBALS['_pointLevelIcon'][$member_srl] = sprintf('<img src="%s" alt="%s" title="%s" style="vertical-align:middle; margin-right:3px;" />', $level_icon, $alt, $title);
}
$text = $GLOBALS['_pointLevelIcon'][$member_srl];
return $GLOBALS['_pointLevelIcon'][$member_srl];
$orig_text = preg_replace('/'.preg_quote($matches[5],'/').'<\/'.$matches[6].'>$/', '', $matches[0]);
return $orig_text.$text.$matches[5].'</'.$matches[6].'>';
}
?>
?>

View file

@ -7,6 +7,7 @@
<title xml:lang="es">Adición Enlace Arco Iris</title>
<title xml:lang="jp">レインボーリンクアドオン</title>
<title xml:lang="ru">Аддон для радужных ссылок</title>
<title xml:lang="zh-TW">彩虹連結</title>
<description xml:lang="ko">
rainbow.js를 header에 추가하여 링크가 걸린 글의 색을 무지개색으로 나타냅니다.
이 애드온의 rainbow.js는 &lt;a href=&quot;http://www.dynamicdrive.com&quot; target=&quot;_blank&quot;&gt;Dynamicdrive.com&lt;/a&gt;에 저작권이 있습니다.
@ -34,9 +35,12 @@
Этот аддон добавляет файл с именем &quot;rainbow.js&quot; в заголовки HTML, и тогда связанный текс приобретает эффект смены цвета, подобно радуге или хамелеону.
&quot;rainbow.js&quot; Copyrightⓒ2007 &lt;a href=&quot;http://www.dynamicdrive.com&quot; target=&quot;_blank&quot;&gt;Dynamicdrive.com&lt;/a&gt;.
</description>
<description xml:lang="zh-TW">
將rainbow.js新增到header讓連結顯示成彩虹色。
此插件的rainbow.js檔案版權屬於 &lt;a href=&quot;http://www.dynamicdrive.com&quot; target=&quot;_blank&quot;&gt;Dynamicdrive.com&lt;/a&gt;
</description>
<version>0.1</version>
<date>2007-02-28</date>
<link>http://www.zeroboard.com/</link>
<author email_address="webmaster@dynamicdrive.com" link="http://dynamicdrive.com">
<name xml:lang="ko">dynamicdrive.com</name>
@ -46,5 +50,6 @@
<name xml:lang="es">dynamicdrive.com</name>
<name xml:lang="jp">dynamicdrive.com</name>
<name xml:lang="ru">dynamicdrive.com</name>
<name xml:lang="zh-TW">dynamicdrive.com</name>
</author>
</addon>
</addon>

View file

@ -7,6 +7,7 @@
<title xml:lang="ge">Referer Collector</title>
<title xml:lang="es">Referer Collector</title>
<title xml:lang="ru">Сборщик рефералов</title>
<title xml:lang="zh-TW">反向連結統計</title>
<description xml:lang="ko">Referer log를 수집합니다.</description>
<description xml:lang="jp">リファラーログを収集します。</description>
<description xml:lang="zh-CN">记录反向链接统计数据。</description>
@ -14,11 +15,11 @@
<description xml:lang="ge">Sammeln Sie Referer-Log und Statistik.</description>
<description xml:lang="es">Recoger referer log y estadísticas.</description>
<description xml:lang="ru">Собирает лог рефералов и статистику.</description>
<description xml:lang="zh-TW">紀錄反向連結統計資料。</description>
<version>0.1</version>
<date>2007-11-26</date>
<link>http://www.zeroboard.com/</link>
<author email_address="haneul0318@gmail.com" link="http://haneul.zetyx.net">
<author email_address="haneul0318@gmail.com" link="http://seungyeop.kr">
<name xml:lang="ko">haneul</name>
<name xml:lang="jp">Haneul</name>
<name xml:lang="zn-CN">haneul</name>
@ -26,5 +27,6 @@
<name xml:lang="ge">haneul</name>
<name xml:lang="es">haneul</name>
<name xml:lang="ru">haneul</name>
<name xml:lang="zn-TW">haneul</name>
</author>
</addon>
</addon>

View file

@ -1,14 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">본문내 이미지 조절 애드온</title>
<title xml:lang="jp">本文内イメージリーサイズアドオン</title>
<title xml:lang="zh-CN">内容区图片缩放插件</title>
<title xml:lang="en">Image Resizer</title>
<title xml:lang="es">Imagen de control add-on bonmunnae</title>
<title xml:lang="ru">Image контроля добавить-на bonmunnae</title>
<title xml:lang="ge">Image-Add-on bonmunnae</title>
<title xml:lang="zh-TW">圖片縮放</title>
<description xml:lang="ko">
본문내에 삽입된 이미지의 크기를 본문크기에 맞게 하고 클릭시 원본을 보여주는 애드온입니다.
</description>
<description xml:lang="jp">
本文内に挿入されたイメージのサイズを本文サイズに合わせてリーサイズし、クリックした時、オリジナルイメージを表示させます。
</description>
<description xml:lang="zh-CN">
自动调整主题内容区内的图片大小,点击将显示原始大小的插件。
</description>
@ -24,18 +29,21 @@
<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.
</description>
<description xml:lang="zh-TW">
自動調整文章内的圖片大小,點擊會顯示原始大小的插件。
</description>
<version>0.1</version>
<date>2008-04-22</date>
<link>http://www.zeroboard.com/</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="zh_cn">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</addon>
</addon>

View file

@ -22,7 +22,7 @@ function resizeImageContents() {
for(var i=0;i<objs.length;i++) {
var obj = objs[i];
// zbXE내부 프로그램 또는 스킨의 이미지라면 이미지 리사이즈를 하지 않음
// XE내부 프로그램 또는 스킨의 이미지라면 이미지 리사이즈를 하지 않음
if(!/\/(modules|addons|classes|common|layouts|libs|widgets)\//i.test(obj.src)) {
var parent = obj.parentNode;
while(parent) {
@ -57,13 +57,13 @@ function resizeImageContents() {
// 만약 대상 이미지에 링크가 설정되어 있거나 onclick 이벤트가 부여되어 있으면 원본 보기를 하지 않음
if(obj.parentNode.nodeName.toLowerCase()!='a' && !obj.getAttribute('onclick')) xAddEventListener(obj,"click", showOriginalImage);
imageGalleryIndex[j][i] = obj.src;
obj.setAttribute("rel", j+','+i);
obj.setAttribute("rel", j+','+imageGalleryIndex[j].length);
imageGalleryIndex[j][imageGalleryIndex[j].length] = obj.src;
}
}
}
}
xAddEventListener(window, "load", resizeImageContents);
xAddEventListener(window, "load", function() { setTimeout(resizeImageContents,1500); });
/**
* @brief 본문내에서 컨텐츠 영역보다 이미지의 경우 원본 크기를 보여줌

View file

@ -8,6 +8,6 @@
**/
if($called_position == 'after_module_proc' && Context::getResponseMethod()!="XMLRPC") {
Context::addJsFile('./addons/resize_image/js/resize_image.js');
Context::addJsFile('./addons/resize_image/js/resize_image.js',false);
}
?>

View file

@ -1,15 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">댓글알리미 애드온</title>
<title xml:lang="jp">コメントお知らせアラートアドオン</title>
<title xml:lang="zh-CN">评论通告</title>
<title xml:lang="en">Comment Notifier Addon</title>
<title xml:lang="zh-TW">評論通知</title>
<description xml:lang="ko">댓글알리미를 지원하는 애드온입니다.</description>
<description xml:lang="jp">コメントお知らせアラートのアドオンです。</description>
<description xml:lang="zh-CN">联动评论通告模块的插件。</description>
<description xml:lang="en">This addon enables Comment Notifier module.</description>
<description xml:lang="zh-TW">此插件為評論通知模組。</description>
<version>0.2</version>
<date>2008-06-02</date>
<link>http://www.zeroboard.com/</link>
<author email_address="haneul0318@seungyeop.kr" link="http://www.seungyeop.kr">
<name xml:lang="ko">haneul</name>
<name xml:lang="jp">haneul</name>
<name xml:lang="zh-CN">haneul</name>
<name xml:lang="en">haneul</name>
<name xml:lang="zh-TW">haneul</name>
</author>
</addon>
</addon>

View file

@ -13,6 +13,7 @@
return;
}
$oController = &getController('tccommentnotify');
if(!$oController) return;
$oController->procNotifyReceived();
return;
}
@ -20,6 +21,7 @@
if($called_position == "after_module_proc")
{
$oModel = &getModel('tccommentnotify');
if(!$oModel) return;
if($oModel->checkShouldNotify())
{
$scriptCode = <<<EndOfScript

View file

@ -3,11 +3,8 @@
* @class Context
* @author zero (zero@nzeo.com)
* @brief Request Argument/환경변수등의 모든 Context를 관리
*
* Context 클래스는 Context::methodname() 처럼 쉽게 사용하기 위해 만들어진 객체를 받아서
* 호출하는 구조를 위해 이중 method 구조를 가지고 있다.
* php5에서 static variables를 사용하게 된다면 불필요한 구조를 제거할 있다.
* php5 쓰고 싶당.. .
**/
define('FOLLOW_REQUEST_SSL',0);
@ -35,7 +32,6 @@
/**
* @brief 언어 정보
*
* 기본으로 ko. HTTP_USER_AGENT나 사용자의 직접 세팅(쿠키이용)등을 통해 변경됨
**/
var $lang_type = ''; ///< 언어 종류
@ -50,7 +46,6 @@
/**
* @brief 유일한 Context 객체를 반환 (Singleton)
*
* Context는 어디서든 객체 선언없이 사용하기 위해서 static 하게 사용
**/
function &getInstance() {
@ -61,9 +56,7 @@
/**
* @brief DB정보, Request Argument등을 세팅
*
* Context::init() 한번만 호출되어야 하며 init()시에
* Request Argument, DB/언어/세션정보등의 모든 정보를 세팅한다
* Context::init() 한번만 호출되어야 하며 init()시에 Request Argument, DB/언어/세션정보등의 모든 정보를 세팅한다
**/
function init() {
// context 변수를 $GLOBALS의 변수로 지정
@ -74,6 +67,9 @@
// 기본적인 DB정보 세팅
$this->_loadDBInfo();
// 언어 파일 불러오기
$lang_supported = $this->loadLangSelected();
// 세션 핸들러 지정
$oSessionModel = &getModel('session');
$oSessionController = &getController('session');
@ -90,25 +86,10 @@
// 쿠키로 설정된 언어타입 가져오기
if($_COOKIE['lang_type']) $this->lang_type = $_COOKIE['lang_type'];
else $this->lang_type = $this->db_info->lang_type;
// 등록된 기본 언어파일 찾기
$langs = file(_XE_PATH_.'common/lang/lang.info');
$accept_lang = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach($langs as $val) {
list($lang_prefix, $lang_text) = explode(',',$val);
$lang_text = trim($lang_text);
$lang_supported[$lang_prefix] = $lang_text;
if(!$this->lang_type && preg_match('/'.$lang_prefix.'/i',$_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$this->lang_type = $lang_prefix;
setcookie('lang_type', $this->lang_type, time()+60*60*24*365, '/');
}
}
if(!in_array($this->lang_type, array_keys($lang_supported))) $this->lang_type = $this->db_info->lang_type;
if(!$this->lang_type) $this->lang_type = "en";
Context::set('lang_supported', $lang_supported);
$this->setLangType($this->lang_type);
// 기본 언어파일 로드
@ -120,11 +101,17 @@
// Request Argument 설정
$this->_setXmlRpcArgument();
$this->_setJSONRequestArgument();
$this->_setRequestArgument();
$this->_setUploadedArgument();
// 인증 관련 정보를 Context와 세션에 설정
if(Context::isInstalled()) {
// site_module_info를 구함
$oModuleModel = &getModel('module');
$site_module_info = $oModuleModel->getDefaultMid();
Context::set('site_module_info', $site_module_info);
// 인증관련 데이터를 Context에 설정
$oMemberModel = &getModel('member');
$oMemberController = &getController('member');
@ -152,7 +139,7 @@
$this->addJsFile("./common/js/xml_handler.js");
$this->addJsFile("./common/js/xml_js_filter.js");
$this->addCSSFile("./common/css/default.css");
$this->addCSSFile("./common/css/button.css");
$this->addCSSFile("./common/css/button.css",false);
// 관리자 페이지일 경우 관리자 공용 CSS 추가
if(Context::get('module')=='admin' || strpos(Context::get('act'),'Admin')>0) $this->addCssFile("./modules/admin/tpl/css/admin.css", false);
@ -162,7 +149,13 @@
if($this->get_vars) {
foreach($this->get_vars as $key => $val) {
if(!$val) continue;
$url .= ($url?'&':'').$key.'='.$val;
if(is_array($val)&&count($val)) {
foreach($val as $k => $v) {
$url .= ($url?'&':'').$key.'['.$k.']='.urlencode($v);
}
} else {
$url .= ($url?'&':'').$key.'='.urlencode($val);
}
}
Context::set('current_url',sprintf('%s?%s', $this->getRequestUri(), $url));
} else {
@ -261,6 +254,47 @@
return $this->db_info;
}
/**
* @brief 지원되는 언어 파일 찾기
**/
function loadLangSupported() {
static $lang_supported = null;
if(is_null($lang_supported)) {
$langs = file(_XE_PATH_.'common/lang/lang.info');
foreach($langs as $val) {
list($lang_prefix, $lang_text) = explode(',',$val);
$lang_text = trim($lang_text);
$lang_supported[$lang_prefix] = $lang_text;
}
}
return $lang_supported;
}
/**
* @brief 설정한 언어 파일 찾기
**/
function loadLangSelected() {
static $lang_selected = null;
if(is_null($lang_selected)) {
$orig_lang_file = _XE_PATH_.'common/lang/lang.info';
$selected_lang_file = _XE_PATH_.'files/cache/lang_selected.info';
if(!file_exists($selected_lang_file) || !filesize($selected_lang_file)) {
$buff = FileHandler::readFile($orig_lang_file);
FileHandler::writeFile($selected_lang_file, $buff);
$lang_selected = Context::loadLangSupported();
} else {
$langs = file($selected_lang_file);
foreach($langs as $val) {
list($lang_prefix, $lang_text) = explode(',',$val);
$lang_text = trim($lang_text);
$lang_selected[$lang_prefix] = $lang_text;
}
}
}
return $lang_selected;
}
/**
* @biref FTP 정보가 등록되었는지 확인
**/
@ -417,13 +451,13 @@
**/
function convertEncoding($source_obj) {
$charset_list = array(
'UTF-8', 'EUC-KR', 'CP949', 'ISO-8859-1', 'EUC-JP', 'SHIFT_JIS', 'CP932',
'UTF-8', 'EUC-KR', 'CP949', 'ISO8859-1', 'EUC-JP', 'SHIFT_JIS', 'CP932',
'EUC-CN', 'HZ', 'GBK', 'GB18030', 'EUC-TW', 'BIG5', 'CP950', 'BIG5-HKSCS',
'ISO-2022-CN', 'ISO-2022-CN-EXT', 'ISO-2022-JP', 'ISO-2022-JP-2', 'ISO-2022-JP-1',
'ISO-8859-6', 'ISO-8859-8', 'JOHAB', 'ISO-2022-KR', 'CP1255', 'CP1256', 'CP862',
'ASCII', 'ISO-8859-1', 'ISO-8850-2', 'ISO-8850-3', 'ISO-8850-4', 'ISO-8850-5',
'ISO-8850-7', 'ISO-8850-9', 'ISO-8850-10', 'ISO-8850-13', 'ISO-8850-14',
'ISO-8850-15', 'ISO-8850-16', 'CP1250', 'CP1251', 'CP1252', 'CP1253', 'CP1254',
'ISO2022-CN', 'ISO2022-CN-EXT', 'ISO2022-JP', 'ISO2022-JP-2', 'ISO2022-JP-1',
'ISO8859-6', 'ISO8859-8', 'JOHAB', 'ISO2022-KR', 'CP1255', 'CP1256', 'CP862',
'ASCII', 'ISO8859-1', 'ISO8850-2', 'ISO8850-3', 'ISO8850-4', 'ISO8850-5',
'ISO8850-7', 'ISO8850-9', 'ISO8850-10', 'ISO8850-13', 'ISO8850-14',
'ISO8850-15', 'ISO8850-16', 'CP1250', 'CP1251', 'CP1252', 'CP1253', 'CP1254',
'CP1257', 'CP850', 'CP866',
);
@ -457,7 +491,7 @@
/**
* @brief response method를 강제로 지정 (기본으로는 request method를 이용함)
*
* method의 종류에는 HTML/ TEXT/ XMLRPC있음
* method의 종류에는 HTML/ TEXT/ XMLRPC/ JSON있음
**/
function setResponseMethod($method = "HTML") {
$oContext = &Context::getInstance();
@ -482,12 +516,14 @@
function _getResponseMethod() {
if($this->response_method) return $this->response_method;
if($this->_getRequestMethod()=="XMLRPC") return "XMLRPC";
$RequestMethod = $this->_getRequestMethod();
if($RequestMethod=="XMLRPC") return "XMLRPC";
else if($RequestMethod=="JSON") return "JSON";
return "HTML";
}
/**
* @brief request method가 어떤것인지 판단하여 저장 (GET/POST/XMLRPC)
* @brief request method가 어떤것인지 판단하여 저장 (GET/POST/XMLRPC/JSON)
**/
function setRequestMethod($type) {
$oContext = &Context::getInstance();
@ -496,11 +532,12 @@
/**
* @brief request method가 어떤것인지 판단하여 저장 (GET/POST/XMLRPC)
* @brief request method가 어떤것인지 판단하여 저장 (GET/POST/XMLRPC/JSON)
**/
function _setRequestMethod($type = '') {
if($type) return $this->request_method = $type;
if(strpos($_SERVER['CONTENT_TYPE'],'json')) return $this->request_method = 'JSON';
if($GLOBALS['HTTP_RAW_POST_DATA']) return $this->request_method = "XMLRPC";
$this->request_method = $_SERVER['REQUEST_METHOD'];
@ -515,18 +552,7 @@
foreach($_REQUEST as $key => $val) {
if($val === "") continue;
if($key == "page" || $key == "cpage" || substr($key,-3)=="srl") $val = (int)$val;
else if(is_array($val) && count($val) ) {
foreach($val as $k => $v) {
if(version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $v = stripslashes($v);
$v = trim($v);
$val[$k] = $v;
}
} else {
if(version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $val = stripslashes($val);
$val = trim($val);
}
$val = $this->_filterRequestVar($key, $val);
if($this->_getRequestMethod()=='GET'&&$_GET[$key]) $set_to_vars = true;
elseif($this->_getRequestMethod()=='POST'&&$_POST[$key]) $set_to_vars = true;
else $set_to_vars = false;
@ -534,6 +560,22 @@
}
}
/**
* @brief JSON 방식일 경우 처리
**/
function _setJSONRequestArgument() {
if($this->_getRequestMethod() != 'JSON') return;
// if(!$GLOBALS['HTTP_RAW_POST_DATA']) return;
$params = array();
parse_str($GLOBALS['HTTP_RAW_POST_DATA'],$params);
foreach($params as $key => $val) {
$val = $this->_filterRequestVar($key, $val);
$this->_set($key, $val, true);
}
}
/**
* @brief XML RPC일때
**/
@ -547,13 +589,31 @@
unset($params->attrs);
if(!count($params)) return;
foreach($params as $key => $obj) {
$val = trim($obj->body);
$val = $this->_filterRequestVar($key, $obj->body);
$this->_set($key, $val, true);
}
}
/**
* @brief 변수명에 따라서 필터링 처리
* _srl, page, cpage등의 변수는 integer로 형변환
**/
function _filterRequestVar($key, $val) {
if( ($key == "page" || $key == "cpage" || substr($key,-3)=="srl")) return !preg_match('/^[0-9,]+$/',$val)?(int)$val:$val;
if(is_array($val) && count($val) ) {
foreach($val as $k => $v) {
if(version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $v = stripslashes($v);
$v = trim($v);
$val[$k] = $v;
}
} else {
if(version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $val = stripslashes($val);
$val = trim($val);
}
return $val;
}
/**
* @brief 업로드 되었을 경우 return true
**/
@ -586,7 +646,7 @@
}
/**
* @brief Request Method값을 return (GET/POST/XMLRPC);
* @brief Request Method값을 return (GET/POST/XMLRPC/JSON);
**/
function getRequestMethod() {
$oContext = &Context::getInstance();
@ -594,7 +654,7 @@
}
/**
* @brief Request Method값을 return (GET/POST/XMLRPC);
* @brief Request Method값을 return (GET/POST/XMLRPC/JSON);
**/
function _getRequestMethod() {
return $this->request_method;
@ -603,15 +663,20 @@
/**
* @brief 요청받은 url에 args_list를 적용하여 return
**/
function getUrl($num_args=0, $args_list=array()) {
function getUrl($num_args=0, $args_list=array(), $domain = null) {
$oContext = &Context::getInstance();
return $oContext->_getUrl($num_args, $args_list);
return $oContext->_getUrl($num_args, $args_list, $domain);
}
/**
* @brief 요청받은 url에 args_list를 적용하여 return
**/
function _getUrl($num_args=0, $args_list=array()) {
function _getUrl($num_args=0, $args_list=array(), $domain = null) {
if($domain) {
$domain = preg_replace('/^(http|https):\/\//i','', trim($domain));
if(substr($domain,-1) != '/') $domain .= '/';
}
if(!$this->get_vars || $args_list[0]=='') {
$get_vars = null;
if($args_list[0]=='') {
@ -636,11 +701,16 @@
if($get_vars['act'] == 'dispMemberFriend') $get_vars['act'] = 'dispCommunicationFriend';
elseif($get_vars['act'] == 'dispMemberMessages') $get_vars['act'] = 'dispCommunicationMessages';
$var_count = count($get_vars);
if(!$var_count) return '';
if(!$domain) {
if($get_vars['act'] && $this->isExistsSSLAction($get_vars['act'])) $path = $this->getRequestUri(ENFORCE_SSL);
else $path = $this->getRequestUri(RELEASE_SSL);
} else {
if($get_vars['act'] && $this->isExistsSSLAction($get_vars['act'])) $path = 'https://'.$domain;
else $path = 'http://'.$domain;
}
if($get_vars['act'] && $this->isExistsSSLAction($get_vars['act'])) $path = $this->getRequestUri(ENFORCE_SSL);
else $path = $this->getRequestUri(RELEASE_SSL);
$var_count = count($get_vars);
if(!$var_count) return $path;
// rewrite모듈을 사용할때 getUrl()을 이용한 url 생성
if($this->allow_rewrite) {
@ -674,9 +744,9 @@
case 'mid.search_keyword.search_target' :
switch($get_vars['search_target']) {
case 'tag' :
return sprintf('%s%s/tag/%s',$path,$get_vars['mid'],str_replace(' ','-',$get_vars['search_keyword']));
return sprintf('%s%s/tag/%s',$path,$get_vars['mid'],str_replace(' ','+',$get_vars['search_keyword']));
case 'nick_name' :
return sprintf('%s%s/writer/%s',$path,$get_vars['mid'],str_replace(' ','-',$get_vars['search_keyword']));
return sprintf('%s%s/writer/%s',$path,$get_vars['mid'],str_replace(' ','+',$get_vars['search_keyword']));
case 'regdate' :
if(strlen($get_vars['search_keyword'])==8) return sprintf('%s%s/%04d/%02d/%02d',$path,$get_vars['mid'],substr($get_vars['search_keyword'],0,4),substr($get_vars['search_keyword'],4,2),substr($get_vars['search_keyword'],6,2));
elseif(strlen($get_vars['search_keyword'])==6) return sprintf('%s%s/%04d/%02d',$path,$get_vars['mid'],substr($get_vars['search_keyword'],0,4),substr($get_vars['search_keyword'],4,2));
@ -690,7 +760,13 @@
// rewrite 모듈을 사용하지 않고 인자의 값이 2개 이상이거나 rewrite모듈을 위한 인자로 적당하지 않을 경우
foreach($get_vars as $key => $val) {
if(!isset($val)) continue;
$url .= ($url?'&':'').$key.'='.urlencode($val);
if(is_array($val) && count($val)) {
foreach($val as $k => $v) {
$url .= ($url?'&':'').$key.'['.$k.']='.urlencode($v);
}
} else {
$url .= ($url?'&':'').$key.'='.urlencode($val);
}
}
return $path.'?'.htmlspecialchars($url);
@ -700,6 +776,10 @@
* @brief 요청이 들어온 URL에서 argument를 제거하여 return
**/
function getRequestUri($ssl_mode = FOLLOW_REQUEST_SSL) {
static $url = array();
if(isset($url[$ssl_mode])) return $url[$ssl_mode];
switch($ssl_mode) {
case FOLLOW_REQUEST_SSL :
if($_SERVER['HTTPS']=='on') $use_ssl = true;
@ -713,7 +793,21 @@
break;
}
return sprintf("%s://%s%s",$use_ssl?'https':'http',$_SERVER['HTTP_HOST'], getScriptPath());
$site_module_info = Context::get('site_module_info');
$domain = trim($site_module_info->domain);
if($domain) {
$domain = preg_replace('/^(http|https):\/\//i','', trim($domain));
if(substr($domain,-1) != '/') $domain .= '/';
} else {
$domain = preg_replace('/:'.$_SERVER['SERVER_PORT'].'$/','',$_SERVER['HTTP_HOST']).getScriptPath();
}
$domain = sprintf("%s://%s",$use_ssl?'https':'http',$domain);
$url_info = parse_url($domain);
$url[$ssl_mode] = sprintf("%s://%s%s%s",$url_info['scheme'], $url_info['host'], $_SERVER['SERVER_PORT']!=80?':'.$_SERVER['SERVER_PORT']:'',$url_info['path']);
return $url[$ssl_mode];
}
/**
@ -849,10 +943,29 @@
**/
function _addJsFile($file, $optimized, $targetie) {
if(in_array($file, $this->js_files)) return;
//if(!preg_match('/^http:\/\//i',$file)) $file = str_replace(realpath("."), ".", realpath($file));
$this->js_files[] = array('file' => $file, 'optimized' => $optimized, 'targetie' => $targetie);
}
/**
* @brief js file을 제거
**/
function unloadJsFile($file, $optimized = true, $targetie = '') {
$oContext = &Context::getInstance();
return $oContext->_unloadJsFile($file, $optimized, $targetie);
}
/**
* @brief js file을 제거
**/
function _unloadJsFile($file, $optimized, $targetie) {
foreach($this->js_files as $key => $val) {
if(realpath($val['file'])==realpath($file) && $val['optimized'] == $optimized && $val['targetie'] == $targetie) {
unset($this->js_files[$key]);
return;
}
}
}
/**
* @brief array_unique와 동작은 동일하나 file 첨자에 대해서만 동작함
**/
@ -903,6 +1016,26 @@
$this->css_files[] = array('file' => $file, 'optimized' => $optimized, 'media' => $media, 'targetie' => $targetie);
}
/**
* @brief css file을 제거
**/
function unloadCSSFile($file, $optimized = true, $media = 'all', $targetie = '') {
$oContext = &Context::getInstance();
return $oContext->_unloadCSSFile($file, $optimized, $media, $targetie);
}
/**
* @brief css file을 제거
**/
function _unloadCSSFile($file, $optimized, $media, $targetie) {
foreach($this->css_files as $key => $val) {
if(realpath($val['file'])==realpath($file) && $val['optimized'] == $optimized && $val['media'] == $media && $val['targetie'] == $targetie) {
unset($this->css_files[$key]);
return;
}
}
}
/**
* @brief CSS file 목록 return
**/
@ -1095,5 +1228,11 @@
return false;
}
function getFixUrl($url){
if(eregi("(http|https):\/\/",$url)) return $url;
if(ereg("^/",$url)) return $url;
return dirname($_SERVER['PHP_SELF']) . "/" . $url;
}
}
?>

View file

@ -5,7 +5,7 @@
* @brief DB* 상위 클래스
* @version 0.1
*
* 제로보드DB 사용은 xml을 이용하여 이루어짐을 원칙으로 한다.
* XEDB 사용은 xml을 이용하여 이루어짐을 원칙으로 한다.
* xml의 종류에는 query xml, schema xml이 있다.
* query xml의 경우 DB::executeQuery() method를 이용하여 xml파일을 php code로 compile한 후에 실행이 된다.
* query xml은 고유한 query id를 가지며 생성은 module에서 이루어진다.
@ -307,7 +307,7 @@
break;
case 'number' :
case 'numbers' :
if(!preg_match('/^[0-9,]+$/is', $val)) return new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key}?$lang->{$key}:$key));
if(!preg_match('/^(-?)[0-9,]+$/is', $val)) return new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key}?$lang->{$key}:$key));
break;
case 'alpha' :
if(!preg_match('/^[a-z]+$/is', $val)) return new Object(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key}?$lang->{$key}:$key));
@ -373,43 +373,52 @@
function getConditionPart($name, $value, $operation) {
switch($operation) {
case 'equal' :
case 'more' :
case 'excess' :
case 'less' :
case 'below' :
case 'like_tail' :
case 'like_prefix' :
case 'like' :
case 'in' :
case 'notequal' :
// 변수가 세팅되지 않고, 문자열이나 숫자형이 아니면 리턴
if(!isset($value)) return;
if($value === '') return;
if(!in_array(gettype($value), array('string', 'integer'))) return;
}
switch($operation) {
case 'equal' :
return $name.' = '.$value;
break;
case 'more' :
if(!isset($value)) return;
return $name.' >= '.$value;
break;
case 'excess' :
if(!isset($value)) return;
return $name.' > '.$value;
break;
case 'less' :
if(!isset($value)) return;
return $name.' <= '.$value;
break;
case 'below' :
if(!isset($value)) return;
case 'below' :
return $name.' < '.$value;
break;
case 'like_tail' :
case 'like_prefix' :
case 'like' :
if(!isset($value)) return;
case 'like_tail' :
case 'like_prefix' :
case 'like' :
return $name.' like '.$value;
break;
case 'in' :
if(!isset($value)) return;
case 'in' :
return $name.' in ('.$value.')';
break;
case 'notequal' :
if(!isset($value)) return;
case 'notequal' :
return $name.' <> '.$value;
break;
case 'notnull' :
case 'notnull' :
return $name.' is not null';
break;
case 'null' :
case 'null' :
return $name.' is null';
break;
}

View file

@ -19,7 +19,7 @@
var $password = NULL; ///< password
var $database = NULL; ///< database
var $port = 33000; ///< db server port
var $prefix = 'xe'; ///< 제로보드에서 사용할 테이블들의 prefix (한 DB에서 여러개의 제로보드 설치 가능)
var $prefix = 'xe'; ///< XE에서 사용할 테이블들의 prefix (한 DB에서 여러개의 XE 설치 가능)
var $cutlen = 12000; ///< 큐브리드의 최대 상수 크기(스트링이 이보다 크면 '...'+'...' 방식을 사용해야 한다
/**
@ -248,6 +248,15 @@
$this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf("drop %s index %s on %s%s", $is_unique?'unique':'', $index_name, $this->prefix, $table_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
@ -377,11 +386,13 @@
function getCondition($output) {
if(!$output->conditions) return;
$condition = "";
foreach($output->conditions as $key => $val) {
$condition = '';
foreach($output->conditions as $val) {
$sub_condition = '';
foreach($val['condition'] as $k =>$v) {
if(!isset($v['value']) || $v['value'] === '') continue;
foreach($val['condition'] as $v) {
if(!isset($v['value'])) continue;
if($v['value'] === '') continue;
if(!in_array(gettype($v['value']), array('string', 'integer'))) continue;
$name = $v['column'];
$operation = $v['operation'];

View file

@ -17,7 +17,7 @@
var $userid = NULL; ///< user id
var $password = NULL; ///< password
var $database = NULL; ///< database
var $prefix = 'xe'; ///< 제로보드에서 사용할 테이블들의 prefix (한 DB에서 여러개의 제로보드 설치 가능)
var $prefix = 'xe'; ///< XE에서 사용할 테이블들의 prefix (한 DB에서 여러개의 XE 설치 가능)
/**
* @brief firebird에서 사용될 column type
@ -70,13 +70,13 @@
**/
function _connect() {
// db 정보가 없으면 무시
if(!$this->hostname || !$this->userid || !$this->password || !$this->database) return;
if(!$this->hostname || !$this->port || !$this->userid || !$this->password || !$this->database) return;
//if(strpos($this->hostname, ':')===false && $this->port) $this->hostname .= ':'.$this->port;
// 접속시도
$host = $this->hostname.":".$this->database;
$host = $this->hostname."/".$this->port.":".$this->database;
$this->fd = @ibase_connect($host, $this->userid, $this->password);
if(ibase_errmsg()) {
@ -102,7 +102,7 @@
}
if($ver < "2.0") {
$this->setError(-1, "Zeroboard XE cannot be installed under the version of firebird 2.0. Current firebird version is ".$ver);
$this->setError(-1, "XE cannot be installed under the version of firebird 2.0. Current firebird version is ".$ver);
return;
}
@ -418,6 +418,15 @@
@ibase_commit($this->fd);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf('DROP INDEX "%s" ON "%s%s"', $index_name, $this->prefix, $table_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
@ -567,7 +576,7 @@
// Firebird에서 auto increment는 generator를 만들어 insert 발생시 트리거를 실행시켜
// generator의 값을 증가시키고 그값을 테이블에 넣어주는 방식을 사용함.
// 아래 트리거가 auto increment 역할을 하지만 쿼리로 트리거 등록이 되지 않아 주석처리 하였음.
// php 함수에서 generator 값을 증가시켜 주는 함수가 있어 제로보드에서는 굳이
// php 함수에서 generator 값을 증가시켜 주는 함수가 있어 XE에서는 굳이
// auto increment를 사용 할 필요가 없어보임.
/*
$schema = 'SET TERM ^ ; ';
@ -589,10 +598,12 @@
function getCondition($output) {
if(!$output->conditions) return;
foreach($output->conditions as $key => $val) {
foreach($output->conditions as $val) {
$sub_condition = '';
foreach($val['condition'] as $k =>$v) {
if(!isset($v['value']) || $v['value'] === '') continue;
foreach($val['condition'] as $v) {
if(!isset($v['value'])) continue;
if($v['value'] === '') continue;
if(!in_array(gettype($v['value']), array('string', 'integer'))) continue;
$name = $v['column'];
$operation = $v['operation'];

View file

@ -17,7 +17,7 @@
var $userid = NULL; ///< user id
var $password = NULL; ///< password
var $database = NULL; ///< database
var $prefix = 'xe'; ///< 제로보드에서 사용할 테이블들의 prefix (한 DB에서 여러개의 제로보드 설치 가능)
var $prefix = 'xe'; ///< XE에서 사용할 테이블들의 prefix (한 DB에서 여러개의 XE 설치 가능)
/**
* @brief mysql에서 사용될 column type
@ -83,7 +83,7 @@
// 버전 확인후 4.1 이하면 오류 표시
if(mysql_get_server_info($this->fd)<"4.1") {
$this->setError(-1, "Zeroboard XE cannot be installed under the version of mysql 4.1. Current mysql version is ".mysql_get_server_info());
$this->setError(-1, "XE cannot be installed under the version of mysql 4.1. Current mysql version is ".mysql_get_server_info());
return;
}
@ -260,6 +260,15 @@
$this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf("alter table %s%s drop index %s;", $this->prefix, $table_name, $index_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
@ -366,10 +375,12 @@
function getCondition($output) {
if(!$output->conditions) return;
foreach($output->conditions as $key => $val) {
foreach($output->conditions as $val) {
$sub_condition = '';
foreach($val['condition'] as $k =>$v) {
if(!isset($v['value']) || $v['value'] === '') continue;
foreach($val['condition'] as $v) {
if(!isset($v['value'])) continue;
if($v['value'] === '') continue;
if(!in_array(gettype($v['value']), array('string', 'integer'))) continue;
$name = $v['column'];
$operation = $v['operation'];

View file

@ -17,7 +17,7 @@
var $userid = NULL; ///< user id
var $password = NULL; ///< password
var $database = NULL; ///< database
var $prefix = 'xe'; ///< 제로보드에서 사용할 테이블들의 prefix (한 DB에서 여러개의 제로보드 설치 가능)
var $prefix = 'xe'; ///< XE에서 사용할 테이블들의 prefix (한 DB에서 여러개의 XE설치 가능)
/**
* @brief mysql에서 사용될 column type
@ -83,7 +83,7 @@
// 버전 확인후 4.1 이하면 오류 표시
if(mysql_get_server_info($this->fd)<"4.1") {
$this->setError(-1, "zeroboard xe can not install under mysql 4.1. Current mysql version is ".mysql_get_server_info());
$this->setError(-1, "XE can not install under mysql 4.1. Current mysql version is ".mysql_get_server_info());
return;
}
@ -270,6 +270,14 @@
$this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf("alter table %s%s drop index %s;", $this->prefix, $table_name, $index_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
@ -376,10 +384,12 @@
function getCondition($output) {
if(!$output->conditions) return;
foreach($output->conditions as $key => $val) {
foreach($output->conditions as $val) {
$sub_condition = '';
foreach($val['condition'] as $k =>$v) {
if(!isset($v['value']) || $v['value'] === '') continue;
foreach($val['condition'] as $v) {
if(!isset($v['value'])) continue;
if($v['value'] === '') continue;
if(!in_array(gettype($v['value']), array('string', 'integer'))) continue;
$name = $v['column'];
$operation = $v['operation'];

View file

@ -17,7 +17,7 @@
var $userid = NULL; ///< user id
var $password = NULL; ///< password
var $database = NULL; ///< database
var $prefix = 'xe'; ///< 제로보드에서 사용할 테이블들의 prefix (한 DB에서 여러개의 제로보드 설치 가능)
var $prefix = 'xe'; ///< XE에서 사용할 테이블들의 prefix (한 DB에서 여러개의 XE설치 가능)
/**
* @brief postgresql에서 사용될 column type
@ -249,6 +249,20 @@
$this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
if(strpos($table_name,$this->prefix)===false) $table_name = $this->prefix.$table_name;
// index_name의 경우 앞에 table이름을 붙여줘서 중복을 피함
$index_name = $table_name.$index_name;
$query = sprintf("drop index %s", $index_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
@ -368,10 +382,12 @@
function getCondition($output) {
if(!$output->conditions) return;
foreach($output->conditions as $key => $val) {
foreach($output->conditions as $val) {
$sub_condition = '';
foreach($val['condition'] as $k =>$v) {
if(!isset($v['value']) || $v['value'] === '') continue;
foreach($val['condition'] as $v) {
if(!isset($v['value'])) continue;
if($v['value'] === '') continue;
if(!in_array(gettype($v['value']), array('string', 'integer'))) continue;
$name = $v['column'];
$operation = $v['operation'];

View file

@ -14,7 +14,7 @@
* DB를 이용하기 위한 정보
**/
var $database = NULL; ///< database
var $prefix = 'xe'; ///< 제로보드에서 사용할 테이블들의 prefix (한 DB에서 여러개의 제로보드 설치 가능)
var $prefix = 'xe'; ///< XE에서 사용할 테이블들의 prefix (한 DB에서 여러개의 XE설치 가능)
/**
* @brief sqlite 에서 사용될 column type
@ -242,6 +242,15 @@
return $this->_query($query);
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("DROP INDEX %s", $this->prefix, $table_name, $key_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
@ -349,10 +358,12 @@
function getCondition($output) {
if(!$output->conditions) return;
foreach($output->conditions as $key => $val) {
foreach($output->conditions as $val) {
$sub_condition = '';
foreach($val['condition'] as $k =>$v) {
if(!isset($v['value']) || $v['value'] === '') continue;
foreach($val['condition'] as $v) {
if(!isset($v['value'])) continue;
if($v['value'] === '') continue;
if(!in_array(gettype($v['value']), array('string', 'integer'))) continue;
$name = $v['column'];
$operation = $v['operation'];

View file

@ -12,7 +12,7 @@
* DB를 이용하기 위한 정보
**/
var $database = NULL; ///< database
var $prefix = 'xe'; ///< 제로보드에서 사용할 테이블들의 prefix (한 DB에서 여러개의 제로보드 설치 가능)
var $prefix = 'xe'; ///< XE에서 사용할 테이블들의 prefix (한 DB에서 여러개의 XE 설치 가능)
/**
* PDO 사용시 필요한 변수들
@ -265,6 +265,15 @@
$this->_execute();
}
/**
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("DROP INDEX %s", $this->prefix, $table_name, $key_name);
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
@ -378,10 +387,12 @@
function getCondition($output) {
if(!$output->conditions) return;
foreach($output->conditions as $key => $val) {
foreach($output->conditions as $val) {
$sub_condition = '';
foreach($val['condition'] as $k =>$v) {
if(!isset($v['value']) || $v['value'] === '') continue;
foreach($val['condition'] as $v) {
if(!isset($v['value'])) continue;
if($v['value'] === '') continue;
if(!in_array(gettype($v['value']), array('string', 'integer'))) continue;
$name = $v['column'];
$operation = $v['operation'];

View file

@ -26,13 +26,13 @@
// header 출력
$this->_printHeader();
// request method에 따른 처리
if(Context::getRequestMethod() == 'XMLRPC') $content = $this->_toXmlDoc($oModule);
else if(Context::getRequestMethod() == 'JSON') $content = $this->_toJSON($oModule);
else $content = $this->_toHTMLDoc($oModule);
// 요청방식에 따라 출력을 별도로
if(Context::getResponseMethod()!="XMLRPC") {
if(Context::getResponseMethod()=="HTML") {
Context::set('content', $content);
@ -93,6 +93,18 @@
else print $content;
}
/**
* @brief RequestMethod가 JSON이면 JSON 데이터로 컨텐츠 생성
**/
function _toJSON(&$oModule) {
$variables = $oModule->getVariables();
//if(function_exists('json_encode')) return json_encode($variables);
//else return json_encode2($variables);
$json = str_replace("\r\n",'\n',json_encode2($variables));
return $json;
}
/**
* @brief RequestMethod가 XML이면 XML 데이터로 컨텐츠 생성
**/
@ -209,7 +221,8 @@
***/
function _printHeader() {
if($this->gz_enabled) header("Content-Encoding: gzip");
if(Context::getResponseMethod() != 'HTML') return $this->_printXMLHeader();
if(Context::getResponseMethod() == 'JSON') return $this->_printJSONHeader();
else if(Context::getResponseMethod() != 'HTML') return $this->_printXMLHeader();
else return $this->_printHTMLHeader();
}
@ -236,5 +249,17 @@
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
}
/**
* @brief JSON header 출력 (utf8 고정)
**/
function _printJSONHeader() {
header("Content-Type: text/html; charset=UTF-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
}
}
?>

View file

@ -73,6 +73,9 @@
// ModuleModel 객체 생성
$oModuleModel = &getModel('module');
$site_module_info = Context::get('site_module_info');
$site_srl = $site_module_info->site_srl;
// document_srl만 있을 경우 document_srl로 모듈과 모듈 정보를 구함
if($this->document_srl && !$this->mid && !$this->module_srl) {
$module_info = $oModuleModel->getModuleInfoByDocumentSrl($this->document_srl);
@ -81,10 +84,18 @@
// 아직 모듈을 못 찾았고 $mid값이 있으면 $mid로 모듈을 구함
if(!$module_info && $this->mid) {
$module_info = $oModuleModel->getModuleInfoByMid($this->mid);
$module_info = $oModuleModel->getModuleInfoByMid($this->mid, $site_srl);
if($this->module && $module_info->module != $this->module) unset($module_info);
}
// 모듈정보와 사이트 모듈정보가 다르면(다른 사이트이면) 페이지 리다이렉트
if($module_info && $site_module_info && $module_info->site_srl != $site_module_info->site_srl) {
$site_info = $oModuleModel->getSiteInfo($module_info->site_srl);
$redirect_url = getSiteUrl($site_info->domain, 'mid',Context::get('mid'),'document_srl',Context::get('document_srl'),'module_srl',Context::get('module_srl'));
header("location:".$redirect_url);
return false;
}
// 모듈을 여전히(;;) 못 찾고 $module_srl이 있으면 해당 모듈을 구함
if(!$module_info && $this->module_srl) {
$module_info = $oModuleModel->getModuleInfoByModuleSrl($this->module_srl);
@ -92,7 +103,13 @@
}
// 역시 모듈을 못 찾았고 $module이 없다면 기본 모듈을 찾아봄
if(!$module_info && !$this->module) $module_info = $oModuleModel->getModuleInfoByMid();
if(!$module_info && !$this->module) $module_info = $site_module_info;
if($module_info && $site_module_info && $site_module_info->site_srl != $module_info->site_srl) {
unset($site_module_info);
$site_module_info = $oModuleModel->getSiteInfo($module_info->site_srl);
}
Context::set('site_module_info', $site_module_info);
// 모듈 정보가 찾아졌을 경우 모듈 정보에서 기본 변수들을 구함, 모듈 정보에서 module 이름을 구해움
if($module_info) {
@ -117,7 +134,12 @@
// 실제 동작을 하기 전에 trigger 호출
$output = ModuleHandler::triggerCall('display', 'before', $content);
if(!$output->toBool()) die($output->getMessage());
if(!$output->toBool()) {
$this->error = $output->getMessage();
return false;
}
return true;
}
/**
@ -164,6 +186,7 @@
$oModule->setAct($this->act);
// 모듈 정보 세팅
$this->module_info->module_type = $type;
$oModule->setModuleInfo($this->module_info, $xml_info);
// 모듈을 수행하고 결과가 false이면 message 모듈 호출 지정
@ -181,8 +204,13 @@
$this->error = 'msg_module_is_not_exists';
}
// install 모듈이 아닐 때 DB 접속에 문제가 있으면 오류
if($this->module != 'install' && $GLOBALS['__DB__'][Context::getDBType()]->is_connected == false) {
$this->error = 'msg_dbconnect_failed';
}
// XMLRPC call 이 아니면 message view 객체 이용하도록
if(Context::getRequestMethod() != 'XMLRPC') {
if(Context::getRequestMethod() != 'XMLRPC' && Context::getRequestMethod() != 'JSON') {
// 에러가 발생하였을시 처리
if($this->error) {
// message 모듈 객체를 생성해서 컨텐츠 생성
@ -245,9 +273,6 @@
// 컨텐츠 출력
$oDisplayHandler = new DisplayHandler();
$oDisplayHandler->printContent($oModule);
// DB 및 기타 자원의 종결 처리
Context::close();
}
/**
@ -302,6 +327,10 @@
$class_file = sprintf('%s%s%s.%s.php', _XE_PATH_, $class_path, $module, $type);
}
break;
case 'api' :
$instance_name = sprintf("%s%s",$module,"API");
$class_file = sprintf('%s%s%s.api.php', _XE_PATH_, $class_path, $module);
break;
case 'class' :
$instance_name = $module;
$class_file = sprintf('%s%s%s.class.php', _XE_PATH_, $class_path, $module);

View file

@ -86,6 +86,8 @@
$user_group = $logged_info->group_list;
$grant->is_admin = false;
$oModuleModel = &getModel('module');
// 로그인되어 있다면 관리자 여부를 확인
if($is_logged) {
/* 로그인 사용자에 대한 관리자 여부는 다양한 방법으로 체크가 됨 */
@ -93,11 +95,16 @@
if($logged_info->is_admin == 'Y') {
$grant->is_admin = true;
// 2. 최고 관리자는 아니지만 모듈 object가 있고 admin_id 컬럼에 로그인 사용자의 아이디가 있을 경우
// 2. 사이트 관리자일 경우 사이트 관리 권한을 줌
} elseif($oModuleModel->isSiteAdmin()) {
$grant->is_admin = true;
// 3. 최고 관리자는 아니지만 모듈 object가 있고 admin_id 컬럼에 로그인 사용자의 아이디가 있을 경우
} elseif($this->module_info->admin_id) {
if(is_array($this->module_info->admin_id) && in_array($user_id, $this->module_info->admin_id)) $grant->is_admin = true;
// 4. 1/2번이 아닐 경우 그룹을 체크하고 직접 모듈에 요청을 하여 체크를 함. (모듈.class.php에 정의)
// 4. 1/2/3번이 아닐 경우 그룹을 체크하고 직접 모듈에 요청을 하여 체크를 함. (모듈.class.php에 정의)
} else {
$manager_group = $this->module_info->grants['manager'];
if(count($user_group) && count($manager_group)) {
@ -123,7 +130,7 @@
$title = $grant_item->title;
$default = $grant_item->default;
// 관리자이면 모든 권한에 대해 true 설정
// 최고 관리자이면 모든 권한에 대해 true 설정
if($grant->is_admin) {
$grant->{$grant_name} = true;
continue;
@ -153,7 +160,7 @@
if($is_logged) $grant->{$grant_name} = true;
break;
case 'root' :
if($grant->is_admin) $grant->{$grant_name} = true;
if($logged_info->is_admin == 'Y') $grant->{$grant_name} = true;
break;
default :
$grant->{$grant_name} = true;
@ -172,11 +179,12 @@
}
}
// act값에 admin이 들어 있는데 관리자가 아닌 경우 오류 표시
// act값에 admin이 들어 있는데 관리자가 아닌 경우 해당 모듈의 관리자 체크
if(substr_count($this->act, 'Admin')) {
// 로그인 되어 있지 않다면 무조건 금지
if(!$is_logged) $this->setAct("dispMemberLoginForm");
elseif(!$grant->is_admin) $this->stop('msg_not_permitted_act');
else if($logged_info->is_admin != 'Y' && (!method_exists($this, 'checkAdminActionGrant') || !$this->checkAdminActionGrant())) {
$this->stop('msg_not_permitted_act');
}
}
// 권한변수 설정
@ -303,8 +311,6 @@
if(!$this->stop_proc) {
// 현재 모듈에 act값이 있으면 해당 act를 실행
if(method_exists($this, $this->act)) {
//$output = call_user_method($this->act, $this);
//$output = call_user_func(array($this, $this->act));
$output = $this->{$this->act}();
// act가 없으면 action_forward에서 해당하는 act가 있는지 찾아서 대신 실행
@ -321,8 +327,6 @@
$oModule->init();
$oModule->setModuleInfo($this->module_info, $xml_info);
//$output = call_user_method($forward->act, $oModule);
//$output = call_user_func(array($oModule, $forward->act));
$output = $oModule->{$forward->act}();
$this->setTemplatePath($oModule->getTemplatePath());
@ -330,8 +334,6 @@
} else {
if($this->xml_info->default_index_act) {
//$output = call_user_method($this->xml_info->default_index_act, $this);
//$output = call_user_func(array($this, $this->xml_info->default_index_act));
if(method_exists($this, $this->xml_info->default_index_act)) {
$output = $this->{$this->xml_info->default_index_act}();
}
@ -355,6 +357,14 @@
return false;
}
// view action이고 결과 출력이 XMLRPC일 경우 해당 모듈의 api method를 실행
if((Context::getResponseMethod() == 'XMLRPC' || Context::getResponseMethod() == 'JSON') && $this->module_info->module_type == 'view') {
$oAPI = getAPI($this->module_info->module, 'api');
if(method_exists($oAPI, $this->act)) {
$oAPI->{$this->act}($this);
}
}
return true;
}
}

View file

@ -46,10 +46,12 @@
// 캐시 디렉토리가 없으면 실행하지 않음
if(!is_dir($this->cache_path)) return $this->_getOptimizedRemoved($source_files);
$files = array();
if(!count($source_files)) return;
foreach($source_files as $file) {
if(!$file || !$file['file']) continue;
if(empty($file['optimized']) || preg_match('/^https?:\/\//i', $file['file']) || $file['file'] == './common/css/button.css') $files[] = $file;
if(empty($file['optimized']) || preg_match('/^https?:\/\//i', $file['file']) ) $files[] = $file;
else $targets[] = $file;
}
@ -62,7 +64,7 @@
$this->doOptimizedFile($path, $filename, $targets, $type);
$files[] = array('file' => $path.'/'.$filename, 'media' => 'all');
array_unshift($files, array('file' => $path.'/'.$filename, 'media' => 'all'));
return $this->_getOptimizedRemoved($files);
}
@ -180,7 +182,7 @@ header("Last-Modified: '.substr(gmdate('r', $mtime), 0, -5).'GMT");
header("ETag: \"'.dechex($unique).'-".dechex($size)."-'.dechex($mtime).'\"");
if(!$cached) {
if(!$buff) {
if(empty($buff)) {
$f = fopen($content_filename,"r");
fpassthru($f);
} else print $buff;

View file

@ -103,7 +103,7 @@
// include 변경 <!--#include($filename)-->
//$buff = preg_replace_callback('!<\!--#include\(([^\)]*?)\)-->!is', array($this, '_compileIncludeToCode'), $buff);
// 이미지 태그 img의 src의 값이 http:// 나 / 로 시작하지 않으면 제로보드의 root경로부터 시작하도록 변경
// 이미지 태그 img의 src의 값이 http:// 나 / 로 시작하지 않으면 root경로부터 시작하도록 변경
$buff = preg_replace_callback('/(img|input)([^>]*)src=[\'"]{1}(?!http)(.*?)[\'"]{1}/is', array($this, '_compileImgPath'), $buff);
// 변수를 변경
@ -121,6 +121,9 @@
// import xml filter/ css/ js/ 언어파일 <!--%import("filename"[,optimized=true|false][,media="media"][,targetie="lt IE 6|IE 7|gte IE 8|..."])--> (media는 css에만 적용)
$buff = preg_replace_callback('!<\!--%import\(\"([^\"]*?)\"(,optimized\=(true|false))?(,media\=\"([^\"]*)\")?(,targetie=\"([^\"]*)\")?\)-->!is', array($this, '_compileImportCode'), $buff);
// unload css/ js <!--%unload("filename"[,optimized=true|false][,media="media"][,targetie="lt IE 6|IE 7|gte IE 8|..."])--> (media는 css에만 적용)
$buff = preg_replace_callback('!<\!--%unload\(\"([^\"]*?)\"(,optimized\=(true|false))?(,media\=\"([^\"]*)\")?(,targetie=\"([^\"]*)\")?\)-->!is', array($this, '_compileUnloadCode'), $buff);
// 파일에 쓰기 전에 직접 호출되는 것을 방지
$buff = sprintf('%s%s%s','<?php if(!defined("__ZBXE__")) exit();?>',"\n",$buff);
@ -168,6 +171,7 @@
* @brief <!--@, --> 사이의 구문을 php코드로 변경
**/
function _compileFuncToCode($matches) {
static $idx = 0;
$code = trim($matches[1]);
if(!$code) return;
@ -200,11 +204,14 @@
$tmp_str = substr($code, 8);
$tmp_arr = explode(' ', $tmp_str);
$var_name = $tmp_arr[0];
$prefix = '$Context->__idx['.$idx.']=0;';
if(substr($var_name, 0, 1) == '$') {
$prefix = sprintf('if(count($__Context->%s)) ', substr($var_name, 1));
$prefix .= sprintf('if(count($__Context->%s)) ', substr($var_name, 1));
} else {
$prefix = sprintf('if(count(%s)) ', $var_name);
$prefix .= sprintf('if(count(%s)) ', $var_name);
}
$idx++;
$suffix .= '$__idx['.$idx.']=($__idx['.$idx.']+1)%2; $cycle_idx = $__idx['.$idx.']+1;';
} elseif(substr($code, 0, 4) == 'case') {
$suffix = ':';
} elseif(substr($code, 0, 10) == 'break@case') {
@ -350,6 +357,55 @@
return $output;
}
/**
* @brief <!--%filename--> 확장자를 봐서 css/ js 파일을 제거하도록 수정
**/
function _compileUnloadCode($matches) {
// 현재 tpl 파일의 위치를 구해서 $base_path에 저장하여 적용하려는 xml file을 찾음
//$base_path = dirname($this->tpl_file).'/';
$base_path = $this->tpl_path;
$given_file = trim($matches[1]);
if(!$given_file) return;
if(isset($matches[3]))
$optimized = strtolower(trim($matches[3]));
if(!$optimized) $optimized = 'true';
if(isset($matches[5]))
$media = trim($matches[5]);
if(!$media) $media = 'all';
if(isset($matches[7]))
$targetie = trim($matches[7]);
if(!$targetie) $targetie = '';
else $optimized = 'false';
$filename = sprintf("%s%s",$base_path, $given_file);
// path와 파일이름을 구함
$tmp_arr = explode("/",$filename);
$filename = array_pop($tmp_arr);
$base_path = implode("/",$tmp_arr)."/";
// 확장자를 구함
$tmp_arr = explode(".",$filename);
$ext = strtolower(array_pop($tmp_arr));
// 확장자에 따라서 파일 import를 별도로
switch($ext) {
// css file
case 'css' :
$meta_file = sprintf('%s%s', $base_path, $filename);
$output = sprintf('<?php Context::unloadCSSFile("%s%s", %s, "%s", "%s"); ?>', $base_path, $filename, $optimized, $media, $targetie);
break;
// js file
case 'js' :
$meta_file = sprintf('%s%s', $base_path, $filename);
$output = sprintf('<?php Context::unloadJsFile("%s%s", %s, "%s"); ?>', $base_path, $filename, $optimized, $targetie);
break;
}
return $output;
}
/**
* @brief $tpl_file로 compiled_tpl_file이름을 return
**/

View file

@ -1,212 +1,91 @@
a.button, span.button, del.button{
display:-moz-inline-box;
display:inline-block;
cursor:pointer;
border:none;
font-size:0;
line-height:0;
/*
for Safari, read this first
http://creativebits.org/webdev/safari_background_repeat_bug_fix
*/
background-position:0 0;
background-repeat:no-repeat;
height:30px;
text-decoration:none;
color:#2e523b;
font-style:normal;
margin:0 6px 0px 0;
padding:0 10px 0 0;
vertical-align:middle;
padding-top:-2px;
_position:relative;
_top:-4px;
_width:10px;
_overflow-y:hidden;
}
*:first-child+html a.button, *:first-child+html span.button,*:first-child+html del.button {
position:relative;
top:-4px;
}
a.button, span.button, del.button,
a.button span, span.button button, span.button input, del.button span{
background-image:url(../tpl/images/form_buttons.png);
_background-image:url(../tpl/images/form_buttons.gif);
}
a.button span, span.button button, span.button input, del.button span{
white-space:nowrap;
cursor:pointer;
color:#222;
display:-moz-inline-box;
display:inline-block;
line-height:1;
letter-spacing:0 !important;
font-family:"Arial" !important;
font-size:12px !important;
font-style:normal;
background-color:transparent;
background-position:100% 0;
background-repeat:no-repeat;
height:30px;
padding:8px 20px 0 10px;
margin:0 -16px 0 10px;
border:none;
zoom:1;
_position:relative;
_padding-left:0px;
_padding-right:12px;
_margin-right:-10px;
_display:block;
_right:-5px;
}
span.button button{
line-height:2.5;/*Opera need this*/
}
html.safari a.button span,
html.safari del.button span{
line-height:1.3;
}
html.safari span.button button{
line-height:2.6;
}
html.safari a.button:focus,
html.safari span.button button:focus{
outline:none;
}
del.button{
/* cursor:not-allowed; */
background-position:0 -120px;
}
del.button span{
cursor:default;
color:#aaa !important;
background-position:100% -120px;
}
span.button button, span.button input{
padding-top:0px;
line-height:2.5;/*Opera need this*/
}
/** optional **/
/*
a.button:visited{
color:#aaa;
}
*/
/*Hover Style*/
a.button:hover,
span.button:hover,
a.button:focus,
a.dom-button-focus,
span.button-behavior-hover{
background-position:0 -60px;
color:#222;
text-decoration:none;
}
a.button:hover span,
span.button:hover button,
span.button:hover input,
a.button:focus span,
span.button-behavior-hover button,
span.button-behavior-hover input{
background-position:100% -60px;
}
a.button:active, a.button:focus span{
color:#444;
}
del.button-behavior-hover, del.button:hover{
background-position:0 -180px;
/* cursor:not-allowed; */
}
del.button-behavior-hover span, del.button:hover span{
background-position:100% -180px;
/* cursor:not-allowed; */
}
/*Optional hack for IE6 to simulate :hover selector*/
span.button button, del.button span, span.button input{
_behavior:expression(
(function(el){
if( typeof( behavior_onMouseEnter) == 'undefined'){
behavior_onMouseEnter = function(el){
var dEl = this.parentNode;
var sClass = dEl.className ;
dEl.__defaultClassName = sClass ;
dEl.className = sClass + ' button-behavior-hover';
this.setCapture();
};
behavior_onMouseLeave = function(el) {
var dEl = this.parentNode;
dEl.className = dEl.__defaultClassName ;
dEl.__defaultClassName = undefined;
this.releaseCapture();
};
};
el.runtimeStyle.behavior = 'none';
el.onmouseenter = behavior_onMouseEnter;
el.onmouseleave = behavior_onMouseLeave;
})(this));
}
@charset "utf-8";
/* NHN > UIT Center > Open UI Platform Team > Jeong Chan Myeong(dece24@nhncorp.com) */
/* Anchor Button */
a.button,
a.button span { position:relative; display:inline-block; text-decoration:none !important; background:url(../tpl/images/buttonWhite.gif) no-repeat; cursor:pointer; white-space:nowrap; vertical-align:middle; *vertical-align:top;}
a.button { padding:0; background-position:left top; overflow:visible;}
a.button span { left:2px; padding:6px 10px 5px 8px; color:#000; font:12px/12px Sans-serif; background-position:right top;}
a.button, x:-moz-any-link { font:0/23px Sans-serif; padding:12px 0; top:1px;} /* Firefox 2 Fix */
a.button, x:-moz-any-link, x:default { padding:0; top:0;} /* Firefox 2 Fix */
/* Large Size */
a.button.large { background-position:left -30px; }
a.button.large span { padding:7px 10px 6px 8px; font:16px/16px Sans-serif; background-position:right -30px;}
a.button.large, x:-moz-any-link { font:0/29px Sans-serif; padding:15px 0;} /* Firefox 2 Fix */
a.button.large, x:-moz-any-link, x:default { padding:0;} /* Firefox 2 Fix */
/* xLarge Size */
a.button.xLarge { background-position:left -65px; }
a.button.xLarge span { padding:8px 10px 7px 8px; font:20px/20px Sans-serif; background-position:right -65px;}
a.button.xLarge, x:-moz-any-link { font:0/35px Sans-serif; padding:18px 0;} /* Firefox 2 Fix */
a.button.xLarge, x:-moz-any-link, x:default { padding:0;} /* Firefox 2 Fix */
/* Small Size */
a.button.small { background-position:left -107px; }
a.button.small span { padding:4px 6px 3px 4px; font:11px/11px Sans-serif; background-position:right -107px;}
a.button.small, x:-moz-any-link { font:0/18px Sans-serif; padding:9px 0;} /* Firefox 2 Fix */
a.button.small, x:-moz-any-link, x:default { padding:0;} /* Firefox 2 Fix */
/* Control Button + Submit Button */
span.button,
span.button button,
span.button input { position:relative; margin:0; display:inline-block; border:0; font:12px Sans-serif; white-space:nowrap; background:url(../tpl/images/buttonWhite.gif) no-repeat; vertical-align:middle;}
span.button { padding:0; background-position:left top;}
span.button, x:-moz-any-link{ font:0/23px Sans-serif; padding:11px 0;} /* Firefox 2 Fix */
span.button, x:-moz-any-link, x:default{ padding:0;} /* Firefox 2 Fix */
span.button button,
span.button input { height:23px; left:2px; *top:-1px; _top:0; padding:0 10px 0 8px; *padding:0 5px 0 3px; line-height:24px; background-position:right top; cursor:pointer;}
/* Large Size */
span.button.large { background-position:left -30px; *top:-1px;}
span.button.large, x:-moz-any-link{ font:0/29px Sans-serif; padding:14px 0;} /* Firefox 2 Fix */
span.button.large, x:-moz-any-link, x:default{ padding:0;} /* Firefox 2 Fix */
span.button.large button,
span.button.large input { height:30px; *top:0; _top:-1px; padding:0 10px 0 8px; *padding:0 5px 0 3px; font:16px/30px Sans-serif; background-position:right -30px;}
/* xLarge Size */
span.button.xLarge { background-position:left -65px;}
span.button.xLarge, x:-moz-any-link{ font:0/35px Sans-serif; padding:17px 0;} /* Firefox 2 Fix */
span.button.xLarge, x:-moz-any-link, x:default{ padding:0;} /* Firefox 2 Fix */
span.button.xLarge button,
span.button.xLarge input { height:35px; padding:0 10px 0 8px; *padding:0 5px 0 3px; font:20px/36px Sans-serif; background-position:right -65px;}
/* Large Size */
span.button.small { background-position:left -107px;}
span.button.small, x:-moz-any-link{ font:0/18px Sans-serif; padding:9px 0;} /* Firefox 2 Fix */
span.button.small, x:-moz-any-link, x:default{ padding:0;} /* Firefox 2 Fix */
span.button.small button,
span.button.small input { height:18px; *top:0; _top:-1px; padding:0 6px 0 4px; *padding:0 3px 0 2px; font:11px/18px Sans-serif; background-position:right -107px;}
span.button.small button, x:-moz-any-link,
span.button.small input, x:-moz-any-link{ top:-1px;} /* Firefox 2 Fix */
span.button.small button, x:-moz-any-link, x:default,
span.button.small input, x:-moz-any-link, x:default{ top:0;} /* Firefox 2 Fix */
/* Strong Button */
a.button.strong *,
span.button.strong * { font-weight:bold !important;}
/* Icon Add */
a.button .icon { position:relative; border:0; vertical-align:middle;}
span.button .icon { position:relative; left:10px; margin-right:8px; vertical-align:middle;}
/* Color Preset */
a.button.green,
a.button.green span,
span.button.green,
span.button.green button,
span.button.green input { background-image:url(../tpl/images/buttonGreen.gif); color:#fff;}
a.button.black,
a.button.black span,
span.button.black,
span.button.black button,
span.button.black input { background-image:url(../tpl/images/buttonBlack.gif); color:#fff;}
a.button.red,
a.button.red span,
span.button.red,
span.button.red button,
span.button.red input { background-image:url(../tpl/images/buttonRed.gif); color:#fff;}
a.button.blue,
a.button.blue span,
span.button.blue,
span.button.blue button,
span.button.blue input { background-image:url(../tpl/images/buttonBlue.gif); color:#fff;}
/* Offset Debug */
a.button,
span.button{ margin-right:2px;}

View file

@ -1,95 +1,90 @@
@charset "utf-8";
/*
Used Hack
IE6 & Below
{ property:value; _property:value; }
IE7 Only
*:first-child+html #selector
IE7 & IE6 & Below
*:first-child+html #selector,
* html #selector {}
*/
/* default.css - Type Selector Definition */
body { margin:0;padding:0; font-size:9pt; }
img { border:none; }
label { cursor:pointer; }
form { margin:0; padding:0; }
/* Special Class Selector */
.fr { float:right; }
.fl { float:left; }
.clear { clear:both; }
.fwB { font-weight:bold;}
.tCenter { text-align:center; }
.tRight { text-align:right; }
.tLeft { text-align:left; }
.gap1 { margin-top:.8em; }
.nowrap { white-space:nowrap; }
.iePngFix { behavior:url(./common/js/iePngFix.htc); }
.zbxe_info { vertical-align:middle; behavior:url(./common/js/iePngFix.htc); }
/* Input Style Definition */
.inputTypeText { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; height:1.4em; padding:.2em 0 0 .3em; background:#ffffff; font-size:1em; _font-size:9pt; }
*:first-child+html .inputTypeText { font-size:9pt; }
.inputTypeText:hover,
.inputTypeText:focus { background:#f4f4f4; }
.inputTypeTextArea { border:1px solid !important; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6 !important; background:#ffffff; font-size:1em; _font-size:9pt;}
*:first-child+html .inputTypeTextArea { font-size:9pt; }
.w40 { width:40px; }
.w60 { width:60px; }
.w70 { width:70px; }
.w80 { width:80px; }
.w90 { width:90px; }
.w100 { width:100px; }
.w110 { width:110px; }
.w120 { width:120px; }
.w130 { width:130px; }
.w140 { width:140px; }
.w150 { width:150px; }
.w160 { width:160px; }
.w170 { width:170px; }
.w180 { width:180px; }
.w190 { width:190px; }
.w200 { width:200px; }
.w210 { width:210px; }
.w220 { width:220px; }
.w230 { width:230px; }
.w240 { width:240px; }
.w250 { width:250px; }
.w260 { width:260px; }
.w270 { width:270px; }
.w280 { width:280px; }
.w290 { width:290px; }
.w300 { width:300px; }
.w400 { width:400px; }
/* editor style */
a.bold { font-weight:bold; }
.editor_blue_text { color: #145ff9 !important; text-decoration:underline !important; }
.editor_blue_text a { color: #145ff9 !important; text-decoration:underline !important; }
.editor_red_text { color: #f42126 !important; text-decoration:underline !important; }
.editor_red_text a { color: #f42126 !important; text-decoration:underline !important; }
.editor_yellow_text { color: #c9bd00 !important; text-decoration:underline !important; }
.editor_yellow_text a { color: #c9bd00 !important; text-decoration:underline !important; }
.editor_green_text { color: #08830B !important; text-decoration:underline !important; }
.editor_green_text a { color: #08830B !important; text-decoration:underline !important; }
.folder_opener { display: block; }
.folder_closer { display: none; }
.folder_area { display: none; }
.xe_content { line-height:1.6; }
.zbxe_widget_output { background:url(../tpl/images/widget_text.gif) no-repeat center bottom; display:block;}
/* xe layer */
#waitingforserverresponse { border:2px solid #444444; font-weight:bold; color:#444444; padding: 7px 5px 5px 25px; background:#FFFFFF url("../tpl/images/loading.gif") no-repeat 5px 5px; top:40px; left:40px; position:absolute; z-index:100; visibility:hidden; }
#popup_menu_area { position:absolute; left:0px; top:0px; z-index:1003; visibility:hidden; border:2px solid #D9D9D9; background-color:#FFFFFF; padding:0; }
#popup_menu_area .box { border:1px solid #CACACA; background-color:#FFFFFF; padding:7px; }
#popup_menu_area .item { color:#333333; cursor:pointer; margin:0; padding:3px 0 3px 0; white-space:nowrap; }
#popup_menu_area .item_on { color:#333333; font-weight:bold; margin:0; cursor:pointer; padding:3px 0 3px 0; letter-spacing:-1px; white-space:nowrap;}
@charset "utf-8";
/* default.css - Type Selector Definition */
body { margin:0;padding:0; font-size:.75em;}
img { border:none; }
label { cursor:pointer; }
form { margin:0; padding:0; }
/* Special Class Selector */
.fr { float:right; }
.fl { float:left; }
.clear { clear:both; }
.fwB { font-weight:bold;}
.tCenter { text-align:center; }
.tRight { text-align:right; }
.tLeft { text-align:left; }
.gap1 { margin-top:.8em; }
.nowrap { white-space:nowrap; }
.iePngFix { behavior:url(./common/js/iePngFix.htc); }
.zbxe_info { vertical-align:middle; behavior:url(./common/js/iePngFix.htc); }
/* Input Style Definition */
.inputTypeText { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; height:1.4em; padding:.2em 0 0 .3em; background:#ffffff; font-size:1em; _font-size:9pt; }
*:first-child+html .inputTypeText { font-size:9pt; }
.inputTypeText:hover,
.inputTypeText:focus { background:#f4f4f4; }
.inputTypeTextArea { border:1px solid !important; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6 !important; background:#ffffff; font-size:1em; _font-size:9pt;}
*:first-child+html .inputTypeTextArea { font-size:9pt; }
.w40 { width:40px; }
.w60 { width:60px; }
.w70 { width:70px; }
.w80 { width:80px; }
.w90 { width:90px; }
.w100 { width:100px; }
.w110 { width:110px; }
.w120 { width:120px; }
.w130 { width:130px; }
.w140 { width:140px; }
.w150 { width:150px; }
.w160 { width:160px; }
.w170 { width:170px; }
.w180 { width:180px; }
.w190 { width:190px; }
.w200 { width:200px; }
.w210 { width:210px; }
.w220 { width:220px; }
.w230 { width:230px; }
.w240 { width:240px; }
.w250 { width:250px; }
.w260 { width:260px; }
.w270 { width:270px; }
.w280 { width:280px; }
.w290 { width:290px; }
.w300 { width:300px; }
.w400 { width:400px; }
/* editor style */
a.bold { font-weight:bold; }
.editor_blue_text { color: #145ff9 !important; text-decoration:underline !important; }
.editor_blue_text a { color: #145ff9 !important; text-decoration:underline !important; }
.editor_red_text { color: #f42126 !important; text-decoration:underline !important; }
.editor_red_text a { color: #f42126 !important; text-decoration:underline !important; }
.editor_yellow_text { color: #c9bd00 !important; text-decoration:underline !important; }
.editor_yellow_text a { color: #c9bd00 !important; text-decoration:underline !important; }
.editor_green_text { color: #08830B !important; text-decoration:underline !important; }
.editor_green_text a { color: #08830B !important; text-decoration:underline !important; }
.folder_opener { display: block; }
.folder_closer { display: none; }
.folder_area { display: none; }
.xe_content { line-height:1.6; }
.zbxe_widget_output { background:url(../tpl/images/widget_text.gif) no-repeat center bottom; display:block;}
/* xe layer */
#waitingforserverresponse { border:2px solid #444444; font-weight:bold; color:#444444; padding: 7px 5px 5px 25px; background:#FFFFFF url("../tpl/images/loading.gif") no-repeat 5px 5px; top:40px; left:40px; position:absolute; z-index:100; visibility:hidden; }
#popup_menu_area{ position:absolute; background:#fff; border:2px solid #eee; -moz-border-radius:5px; -webkit-border-radius:5px; margin:0; padding:0;}
#popup_menu_area *{ margin:0; padding:0; list-style:none; font-size:12px; line-height:normal;}
#popup_menu_area ul{ border:1px solid #ddd; -moz-border-radius:5px; -webkit-border-radius:5px; padding:10px 10px 5px 10px;}
#popup_menu_area li{ padding:2px 0 2px 20px; background-repeat:no-repeat; background-position:left center; margin-bottom:3px; white-space:nowrap;}
#popup_menu_area li a{ text-decoration:none; color:#000;}
#popup_menu_area li a:hover,
#popup_menu_area li a:active,
#popup_menu_area li a:focus{ font-weight:bold; letter-spacing:-1px;}

124
common/js/calendar-jp.js Normal file
View file

@ -0,0 +1,124 @@
// ** I18N
// DyCalendar JA language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Translation: ミニミ
// Encoding: UTF-8
// lang : jp
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
DyCalendar._DN = new Array
("日曜日",
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日",
"日曜日");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// DyCalendar._SDN_len = N; // short day name length
// DyCalendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
DyCalendar._SDN = new Array
("日",
"月",
"火",
"水",
"木",
"金",
"土",
"日");
// full month names
DyCalendar._MN = new Array
("1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月");
// short month names
DyCalendar._SMN = new Array
("1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12");
// tooltips
DyCalendar._TT = {};
DyCalendar._TT["INFO"] = "カレンダーの紹介";
DyCalendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"\n"+
"最新バージョンは http://www.dynarch.com/projects/calendar/ にご訪問して下さい。\n" +
"\n"+
"GNU LGPL ライセンスで配布されます。 \n"+
"より詳しいライセンスの内容は http://gnu.org/licenses/lgpl.html をお読みください。" +
"\n\n" +
"日付選択:\n" +
"- 年度の選択には \xab, \xbb ボタンを使います。\n" +
"- 月の選択には " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " ボタンを使って下さい。\n" +
"- ずっと押していると上の値をよら楽に選択できます。";
DyCalendar._TT["ABOUT_TIME"] = "\n\n" +
"時間の選択:\n" +
"- マウスをクリックすると時間が増加します。\n" +
"- Shiftキーと同時にクリックすると減ります。\n" +
"- 押している状態で、マウスを動かすとより早く値が変化します。\n";
DyCalendar._TT["PREV_YEAR"] = "前年 (長く押すとリスト)";
DyCalendar._TT["PREV_MONTH"] = "前月 (長く押すとリスト)";
DyCalendar._TT["GO_TODAY"] = "今日";
DyCalendar._TT["NEXT_MONTH"] = "翌月 (長く押すとリスト)";
DyCalendar._TT["NEXT_YEAR"] = "翌年 (長く押すとリスト)";
DyCalendar._TT["SEL_DATE"] = "日付選択";
DyCalendar._TT["DRAG_TO_MOVE"] = "ウィンドウの移動";
DyCalendar._TT["PART_TODAY"] = " (今日)";
DyCalendar._TT["DAY_FIRST"] = "%s を先頭に";
DyCalendar._TT["WEEKEND"] = "0,6";
DyCalendar._TT["CLOSE"] = "閉じる";
DyCalendar._TT["TODAY"] = "今日";
DyCalendar._TT["TIME_PART"] = "(Shift-)クリック、もしくはドラッグして下さい。";
// date formats
DyCalendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
DyCalendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]";
DyCalendar._TT["WK"] = "週";
DyCalendar._TT["TIME"] = "時:";

122
common/js/calendar-zh-TW.js Normal file
View file

@ -0,0 +1,122 @@
// ** I18N
// DyCalendar zh-TW language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Encoding: UTF-8
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
DyCalendar._DN = new Array
("星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
"星期日");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// DyCalendar._SDN_len = N; // short day name length
// DyCalendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
DyCalendar._SDN = new Array
("日",
"一",
"二",
"三",
"四",
"五",
"六",
"日");
// full month names
DyCalendar._MN = new Array
("1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月");
// short month names
DyCalendar._SMN = new Array
("1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12");
// tooltips
DyCalendar._TT = {};
DyCalendar._TT["INFO"] = "日曆簡介";
DyCalendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"\n"+
"請到 http://www.dynarch.com/projects/calendar/ 下載最新版本\n" +
"\n"+
"遵照 GNU LGPL版權。 \n"+
"實際的版權内容請參考考 http://gnu.org/licenses/lgpl.html " +
"\n\n" +
"選擇日期:\n" +
"- 選擇年份請使用 \xab, \xbb 按鈕\n" +
"- 選擇月份請使用 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 按鈕\n" +
"- 按住按鈕可快速的選擇所要的年份或月份";
DyCalendar._TT["ABOUT_TIME"] = "\n\n" +
"選擇時間:\n" +
"- 以滑鼠點擊可增加時間\n" +
"- 配合Shift按鍵可減少時間 \n" +
"- 在按住滑鼠的狀態下,往右是增加、往左是減少,可快速調整時間。\n";
DyCalendar._TT["PREV_YEAR"] = "去年 (按住顯示目錄)";
DyCalendar._TT["PREV_MONTH"] = "上個月 (按住顯示目錄)";
DyCalendar._TT["GO_TODAY"] = "設為今天";
DyCalendar._TT["NEXT_MONTH"] = "下個月 (按住顯示目錄)";
DyCalendar._TT["NEXT_YEAR"] = "明年 (按住顯示目錄)";
DyCalendar._TT["SEL_DATE"] = "請選擇日期";
DyCalendar._TT["DRAG_TO_MOVE"] = "可用滑鼠拖曳";
DyCalendar._TT["PART_TODAY"] = " (今日)";
DyCalendar._TT["DAY_FIRST"] = "%s排到第一列";
DyCalendar._TT["WEEKEND"] = "0,6";
DyCalendar._TT["CLOSE"] = "關閉";
DyCalendar._TT["TODAY"] = "今日";
DyCalendar._TT["TIME_PART"] = "(Shift-)點擊或拖曳";
// date formats
DyCalendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
DyCalendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]";
DyCalendar._TT["WK"] = "周";
DyCalendar._TT["TIME"] = "時:";

View file

@ -105,7 +105,7 @@ if(!date.equalsTo(cal.date)){cal.setDate(date);newdate=true;}else if(el.navtype=
newdate=closing=true;}
if(newdate){ev&&cal.callHandler();}
if(closing){DyCalendar.removeClass(el,"hilite");ev&&cal.callCloseHandler();}};DyCalendar.prototype.create=function(_par){var parent=null;if(!_par){parent=document.getElementsByTagName("body")[0];this.isPopup=true;}else{parent=_par;this.isPopup=false;}
this.date=this.dateStr?new Date(this.dateStr):new Date();var table=DyCalendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;DyCalendar.addEvent(table,"mousedown",DyCalendar.tableMouseDown);var div=DyCalendar.createElement("div");this.element=div;div.className="calendar";if(this.isPopup){div.style.position="absolute";div.style.display="none";}
this.date=this.dateStr?new Date(this.dateStr):new Date();var table=DyCalendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;DyCalendar.addEvent(table,"mousedown",DyCalendar.tableMouseDown);var div=DyCalendar.createElement("div");this.element=div;div.className="calendar";div.style.zIndex="9999";if(this.isPopup){div.style.position="absolute";div.style.display="none";}
div.appendChild(table);var thead=DyCalendar.createElement("thead",table);var cell=null;var row=null;var cal=this;var hh=function(text,cs,navtype){cell=DyCalendar.createElement("td",row);cell.colSpan=cs;cell.className="button";if(navtype!=0&&Math.abs(navtype)<=2)
cell.className+=" nav";DyCalendar._add_evs(cell);cell.calendar=cal;cell.navtype=navtype;cell.innerHTML="<div unselectable='on'>"+text+"</div>";return cell;};row=DyCalendar.createElement("tr",thead);var title_length=6;(this.isPopup)&&--title_length;(this.weekNumbers)&&++title_length;hh("?",1,400).ttip=DyCalendar._TT["INFO"];this.title=hh("",title_length,300);this.title.className="title";if(this.isPopup){this.title.ttip=DyCalendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";hh("&#x00d7;",1,200).ttip=DyCalendar._TT["CLOSE"];}
row=DyCalendar.createElement("tr",thead);row.className="headrow";this._nav_py=hh("&#x00ab;",1,-2);this._nav_py.ttip=DyCalendar._TT["PREV_YEAR"];this._nav_pm=hh("&#x2039;",1,-1);this._nav_pm.ttip=DyCalendar._TT["PREV_MONTH"];this._nav_now=hh(DyCalendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=DyCalendar._TT["GO_TODAY"];this._nav_nm=hh("&#x203a;",1,1);this._nav_nm.ttip=DyCalendar._TT["NEXT_MONTH"];this._nav_ny=hh("&#x00bb;",1,2);this._nav_ny.ttip=DyCalendar._TT["NEXT_YEAR"];row=DyCalendar.createElement("tr",thead);row.className="daynames";if(this.weekNumbers){cell=DyCalendar.createElement("td",row);cell.className="name wn";cell.innerHTML=DyCalendar._TT["WK"];}

View file

@ -142,7 +142,7 @@ function winopen(url, target, attribute) {
/**
* @brief 팝업으로만 띄우기
* common/tpl/popup_layout.html이 요청되는 제로보드 XE내의 팝업일 경우에 사용
* common/tpl/popup_layout.html이 요청되는 XE내의 팝업일 경우에 사용
**/
function popopen(url, target) {
if(typeof(target)=="undefined") target = "_blank";
@ -189,36 +189,99 @@ function toggleDisplay(obj, display_type) {
}
}
/* jQuery의 extend. */
/* TODO:jQuery 등 자바스크립트 프레임웍 차용시 대체 가능하면 제거 대상 */
objectExtend = function() {
// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
// Handle a deep copy situation
if ( target.constructor == Boolean ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target != "object" && typeof target != "function" )
target = {};
// extend jQuery itself if only one argument is passed
if ( length == i ) {
target = this;
--i;
}
for ( ; i < length; i++ )
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null )
// Extend the base object
for ( var name in options ) {
var src = target[ name ], copy = options[ name ];
// Prevent never-ending loop
if ( target === copy )
continue;
// Recurse if we're merging object values
if ( deep && copy && typeof copy == "object" && !copy.nodeType )
target[ name ] = objectExtend( deep,
// Never move original objects, clone them
src || ( copy.length != null ? [ ] : { } )
, copy );
// Don't bring in undefined values
else if ( copy !== undefined )
target[ name ] = copy;
}
// Return the modified object
return target;
};
/**
* @brief 멀티미디어 출력용 (IE에서 플래쉬/동영상 주변에 점선 생김 방지용)
**/
function displayMultimedia(src, width, height, auto_start, flashvars) {
if(src.indexOf('files')==0) src = request_uri+src;
if(auto_start) auto_start = "true";
else auto_start = "false";
function displayMultimedia(src, width, height, options) {
if(src.indexOf('files') == 0) src = request_uri + src;
var defaults = {
wmode : 'transparent',
allowScriptAccess : 'sameDomain',
quality : 'high',
flashvars : ''
};
if(options) {
var autostart = (options.autostart) ? 'true' : 'false';
delete(options.autostart);
}
var params = objectExtend(defaults, options || {});
var clsid = "";
var codebase = "";
var html = "";
if(typeof(flashvars)=="undefined") flashvars = "";
if(/\.swf/i.test(src)) {
clsid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
clsid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0";
html = ""+
"<object classid=\""+clsid+"\" codebase=\""+codebase+"\" width=\""+width+"\" height=\""+height+"\" flashvars=\""+flashvars+"\">"+
"<param name=\"wmode\" value=\"transparent\" />"+
"<param name=\"allowScriptAccess\" value=\"sameDomain\" />"+
"<param name=\"movie\" value=\""+src+"\" />"+
"<param name=\"quality\" value=\"high\" />"+
"<param name=\"flashvars\" value=\""+flashvars+"\" />"+
"<embed src=\""+src+"\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\" flashvars=\""+flashvars+"\" wmode=\"transparent\"></embed>"+
"<\/object>";
html = '<object classid="'+clsid+'" codebase="'+codebase+'" width="'+width+'" height="'+height+'" flashvars="'+params.flashvars+'">';
html += '<param name="movie" value="'+src+'" />';
for(var name in params) {
if(params[name] != 'undefined' && params[name] != '') {
html += '<param name="'+name+'" value="'+params[name]+'" />';
}
}
html += ''
+ '<embed src="'+src+'" autostart="'+autostart+'" width="'+width+'" height="'+height+'" flashvars="'+params.flashvars+'" wmode="'+params.wmode+'"></embed>'
+ '</object>';
} else if(/\.flv/i.test(src)) {
html = "<embed src=\""+request_uri+"common/tpl/images/flvplayer.swf\" allowfullscreen=\"true\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\" flashvars=\"&file="+src+"&width="+width+"&height="+height+"&autostart="+auto_start+"\" />";
html = '<embed src="'+request_uri+'common/tpl/images/flvplayer.swf" allowfullscreen="true" autostart="'+autostart+'" width="'+width+'" height="'+height+'" flashvars="&file='+src+'&width='+width+'&height='+height+'&autostart='+autostart+'" />';
} else {
html = "<embed src=\""+src+"\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\"></embed>";
html = '<embed src="'+src+'" autostart="'+autostart+'" width="'+width+'" height="'+height+'"></embed>';
}
document.writeln(html);
}
@ -321,43 +384,50 @@ function createPopupMenu(evt) {
area = xCreateElement("div");
area.id = "popup_menu_area";
area.style.visibility = 'hidden';
area.style.zIndex = 9999;
document.body.appendChild(area);
}
/* 클릭 이벤트 발생시 이벤트가 일어난 대상을 검사하여 적절한 규칙에 맞으면 처리 */
function chkPopupMenu(evt) {
// 이전에 호출되었을지 모르는 팝업메뉴 숨김
var area = xGetElementById("popup_menu_area");
if(!area) return;
if(area.style.visibility!="hidden") area.style.visibility="hidden";
if(area.style.visibility != "hidden") area.style.visibility = "hidden";
// 이벤트 대상이 없으면 무시
var e = new xEvent(evt);
if(!e) return;
// 대상의 객체 구함
var obj = e.target;
if(!obj) return;
// obj의 nodeName이 div나 span이 아니면 나올대까지 상위를 찾음
if(obj && obj.nodeName != 'DIV' && obj.nodeName != 'SPAN') obj = obj.parentNode;
if(!obj || (obj.nodeName != 'DIV' && obj.nodeName != 'SPAN')) return;
if(obj && obj.nodeName != 'DIV' && obj.nodeName != 'SPAN' && obj.nodeName != 'A') obj = obj.parentNode;
if(!obj || (obj.nodeName != 'DIV' && obj.nodeName != 'SPAN' && obj.nodeName != 'A')) return;
// 객체의 className값을 구함
var class_name = obj.className;
if(!class_name) return;
// className을 분리
var class_name_list = class_name.split(' ');
var menu_id = '';
var menu_id_regx = /^([a-zA-Z]+)_([0-9]+)$/ig;
for(var i in class_name_list) {
var menu_id_regx = /^([a-zA-Z]+)_([0-9]+)$/;
for(var i=0,c=class_name_list.length;i<c;i++) {
if(menu_id_regx.test(class_name_list[i])) {
menu_id = class_name_list[i];
break;
}
}
if(!menu_id) return;
// module명과 대상 번호가 없으면 return
@ -369,14 +439,15 @@ function chkPopupMenu(evt) {
// action이름을 규칙에 맞게 작성
var action_name = "get" + module_name.substr(0,1).toUpperCase() + module_name.substr(1,module_name.length-1) + "Menu";
// 서버에 메뉴를 요청
var params = new Array();
params["target_srl"] = target_srl;
params["cur_mid"] = current_mid;
params["cur_act"] = current_url.getQuery('act');
params["menu_id"] = menu_id;
params["page_x"] = e.pageX;
params["page_y"] = e.pageY;
params["page_x"] = e.pageX >0 ? e.pageX : GetObjLeft(obj);
params["page_y"] = e.pageY >0 ? e.pageY : GetObjTop(obj)+ xHeight(obj);
var response_tags = new Array("error","message","menus");
@ -384,13 +455,23 @@ function chkPopupMenu(evt) {
displayPopupMenu(params, response_tags, params);
return;
}
show_waiting_message = false;
exec_xml(module_name, action_name, params, displayPopupMenu, response_tags, params);
show_waiting_message = true;
}
function GetObjTop(obj) {
if(obj.offsetParent == document.body) return xOffsetTop(obj);
else return xOffsetTop(obj) + GetObjTop(obj.offsetParent);
}
function GetObjLeft(obj) {
if(obj.offsetParent == document.body) return xOffsetLeft(obj);
else return xOffsetLeft(obj) + GetObjLeft(obj.offsetParent);
}
function displayPopupMenu(ret_obj, response_tags, params) {
var target_srl = params["target_srl"];
var menu_id = params["menu_id"];
var menus = ret_obj['menus'];
@ -398,10 +479,11 @@ function displayPopupMenu(ret_obj, response_tags, params) {
if(loaded_popup_menus[menu_id]) {
html = loaded_popup_menus[menu_id];
} else {
if(menus) {
var item = menus['item'];
if(item.length<1) item = new Array(item);
if(typeof(item.length)=='undefined' || item.length<1) item = new Array(item);
if(item.length) {
for(var i=0;i<item.length;i++) {
var url = item[i].url;
@ -410,24 +492,25 @@ function displayPopupMenu(ret_obj, response_tags, params) {
var target = item[i].target;
var styleText = "";
if(icon) styleText = " style=\"background:url('"+icon+"') no-repeat left center; padding-left:18px; \"";
var click_str = "";
if(icon) styleText = " style=\"background-image:url('"+icon+"')\" ";
switch(target) {
case "popup" :
click_str = " onclick=\"popopen('"+url+"','"+target+"')\"; return false;";
click_str = " onclick=\"popopen(this.href,'"+target+"'); return false;\"";
break;
case "self" :
click_str = " onclick=\"location.href='"+url+"'\"; return false;";
//click_str = " onclick=\"location.href='"+url+"' return false;\"";
break;
case "javascript" :
click_str = " onclick=\""+url+"\"; return false;";
click_str = " onclick=\""+url+"; return false; \"";
url="#";
break;
default :
click_str = " onclick=\"window.open('"+url+"')\"; return false;";
click_str = " onclick=\"window.open(this.href); return false;\"";
break;
}
html += '<div class="item" onmouseover="this.className=\'item_on\'" onmouseout="this.className=\'item\'"'+styleText+click_str+'>'+str+'</div> ';
html += '<li '+styleText+'><a href="'+url+'"'+click_str+'>'+str+'</a></li> ';
}
}
}
@ -437,13 +520,13 @@ function displayPopupMenu(ret_obj, response_tags, params) {
// 레이어 출력
if(html) {
var area = xGetElementById("popup_menu_area");
xInnerHtml(area, "<div class=\"box\">"+html+"</div>");
xInnerHtml(area, '<ul>'+html+'</ul>');
xLeft(area, params["page_x"]);
xTop(area, params["page_y"]);
if(xWidth(area)+xLeft(area)>xClientWidth()+xScrollLeft()) xLeft(area, xClientWidth()-xWidth(area)+xScrollLeft());
if(xHeight(area)+xTop(area)>xClientHeight()+xScrollTop()) xTop(area, xClientHeight()-xHeight(area)+xScrollTop());
area.style.visibility = "visible";
}
}
}
/**
@ -461,6 +544,11 @@ function completeCallModuleAction(ret_obj, response_tags) {
location.reload();
}
function completeMessage(ret_obj) {
alert(ret_obj['message']);
location.reload();
}
/**
* @brief 날짜 선택 (달력 열기)
**/
@ -789,10 +877,13 @@ if(xIE4Up) {
var sels = xGetElementsByTagName('select');
for(var i=0; i < sels.length; i++){
var disabled_exists = false;
var first_enable = new Array();
for(var j=0; j < sels[i].options.length; j++) {
if(sels[i].options[j].disabled) {
sels[i].options[j].style.color = '#CCCCCC';
disabled_exists = true;
}else{
first_enable[i] = first_enable[i]>-1? first_enable[i] : j;
}
}
@ -801,9 +892,14 @@ if(xIE4Up) {
sels[i].oldonchange = sels[i].onchange;
sels[i].onchange = function() {
if(this.options[this.selectedIndex].disabled) {
if(this.options.length<=1) this.selectedIndex = -1;
else if(this.selectedIndex < this.options.length - 1) this.selectedIndex++;
else this.selectedIndex--;
this.selectedIndex = first_enable[i];
/*
if(this.options.length<=1) this.selectedIndex = -1;
else if(this.selectedIndex < this.options.length - 1) this.selectedIndex++;
else this.selectedIndex--;
*/
} else {
if(this.oldonchange) this.oldonchange();
}
@ -828,3 +924,7 @@ if(typeof(resizeImageContents) == 'undefined')
{
function resizeImageContents() {}
}
function reloadDocument() {
location.reload();
}

View file

@ -4,7 +4,7 @@
* @brief xml파일을 읽어서 트리 메뉴를 그려줌
*
* 일단 이것 저것 꽁수가 들어간 것이긴 한데 속도나 기타 면에서 쓸만함...\n
* 다만 제로보드에 특화되어 있어서....\n
* 다만 XE에특화되어 있어서....\n
* GPL License 따릅니당~~~\n
* 언제나 그렇듯 필요하신 분은 가져가서 쓰세요.\n
* 좋게 개량하시면 공유해주세요~\n
@ -402,9 +402,9 @@ function moveTreeMenu(menu_id, node) {
return;
}
// url이 있으면 url을 분석한다 (제로보드 특화된 부분. url이 http나 ftp등으로 시작하면 그냥 해당 url 열기)
// url이 있으면 url을 분석한다 (Xe 특화된 부분. url이 http나 ftp등으로 시작하면 그냥 해당 url 열기)
if(url) {
// http, ftp등의 연결이 아닌 경우 제로보드용으로 처리
// http, ftp등의 연결이 아닌 경우 XE용으로 처리
if(url.indexOf('://')==-1) url = "./?"+url;
// open_window에 따라서 처리

View file

@ -9,10 +9,12 @@ 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();
for(var key in params) {
if(!params.hasOwnProperty(key)) continue;
var val = params[key];
oXml.addParam(key, val);
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);
@ -76,7 +78,7 @@ function zGetXmlHttp() {
} catch (e) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
}
return null;
}
@ -158,12 +160,20 @@ function xml_handlerGetResponseXML() {
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) {
@ -173,11 +183,11 @@ function xml_parseXmlDoc(dom) {
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 {
@ -193,8 +203,10 @@ function xml_parseXmlDoc(dom) {
}
obj = obj.nextSibling;
}
return ret_obj;
*/
}
function xml_handlerToZMsgObject(xmlDoc, tags) {
@ -213,3 +225,164 @@ function xml_handlerToZMsgObject(xmlDoc, tags) {
}
return obj_ret;
}
/* This work is licensed under Creative Commons GNU LGPL License.
License: http://creativecommons.org/licenses/LGPL/2.1/
Version: 0.9
Author: Stefan Goessner/2006
Web: http://goessner.net/
*/
function xml2json(xml, tab, ignoreAttrib) {
var X = {
toObj: function(xml) {
var o = {};
if (xml.nodeType==1) { // element node ..
if (ignoreAttrib && xml.attributes.length) // element with attributes ..
for (var i=0; i<xml.attributes.length; i++)
o["@"+xml.attributes[i].nodeName] = (xml.attributes[i].nodeValue||"").toString();
if (xml.firstChild) { // element has child nodes ..
var textChild=0, cdataChild=0, hasElementChild=false;
for (var n=xml.firstChild; n; n=n.nextSibling) {
if (n.nodeType==1) hasElementChild = true;
else if (n.nodeType==3 && n.nodeValue.match(/[^ \f\n\r\t\v]/)) textChild++; // non-whitespace text
else if (n.nodeType==4) cdataChild++; // cdata section node
}
if (hasElementChild) {
if (textChild < 2 && cdataChild < 2) { // structured element with evtl. a single text or/and cdata node ..
X.removeWhite(xml);
for (var n=xml.firstChild; n; n=n.nextSibling) {
if (n.nodeType == 3) // text node
o = X.escape(n.nodeValue);
else if (n.nodeType == 4) // cdata node
// o["#cdata"] = X.escape(n.nodeValue);
o = X.escape(n.nodeValue);
else if (o[n.nodeName]) { // multiple occurence of element ..
if (o[n.nodeName] instanceof Array)
o[n.nodeName][o[n.nodeName].length] = X.toObj(n);
else
o[n.nodeName] = [o[n.nodeName], X.toObj(n)];
}
else // first occurence of element..
o[n.nodeName] = X.toObj(n);
}
}
else { // mixed content
if (!xml.attributes.length)
o = X.escape(X.innerXml(xml));
else
o["#text"] = X.escape(X.innerXml(xml));
}
}
else if (textChild) { // pure text
if (!xml.attributes.length)
o = X.escape(X.innerXml(xml));
else
o["#text"] = X.escape(X.innerXml(xml));
}
else if (cdataChild) { // cdata
if (cdataChild > 1)
o = X.escape(X.innerXml(xml));
else
for (var n=xml.firstChild; n; n=n.nextSibling){
//o["#cdata"] = X.escape(n.nodeValue);
o = X.escape(n.nodeValue);
}
}
}
if (!xml.attributes.length && !xml.firstChild) o = null;
}
else if (xml.nodeType==9) { // document.node
o = X.toObj(xml.documentElement);
}
else
alert("unhandled node type: " + xml.nodeType);
return o;
},
toJson: function(o, name, ind) {
var json = name ? ("\""+name+"\"") : "";
if (o instanceof Array) {
for (var i=0,n=o.length; i<n; i++)
o[i] = X.toJson(o[i], "", ind+"\t");
json += (name?":[":"[") + (o.length > 1 ? ("\n"+ind+"\t"+o.join(",\n"+ind+"\t")+"\n"+ind) : o.join("")) + "]";
}
else if (o == null)
json += (name&&":") + "null";
else if (typeof(o) == "object") {
var arr = [];
for (var m in o)
arr[arr.length] = X.toJson(o[m], m, ind+"\t");
json += (name?":{":"{") + (arr.length > 1 ? ("\n"+ind+"\t"+arr.join(",\n"+ind+"\t")+"\n"+ind) : arr.join("")) + "}";
}
else if (typeof(o) == "string")
json += (name&&":") + "\"" + o.toString() + "\"";
else
json += (name&&":") + o.toString();
return json;
},
innerXml: function(node) {
var s = ""
if ("innerHTML" in node)
s = node.innerHTML;
else {
var asXml = function(n) {
var s = "";
if (n.nodeType == 1) {
s += "<" + n.nodeName;
for (var i=0; i<n.attributes.length;i++)
s += " " + n.attributes[i].nodeName + "=\"" + (n.attributes[i].nodeValue||"").toString() + "\"";
if (n.firstChild) {
s += ">";
for (var c=n.firstChild; c; c=c.nextSibling)
s += asXml(c);
s += "</"+n.nodeName+">";
}
else
s += "/>";
}
else if (n.nodeType == 3)
s += n.nodeValue;
else if (n.nodeType == 4)
s += "<![CDATA[" + n.nodeValue + "]]>";
return s;
};
for (var c=node.firstChild; c; c=c.nextSibling)
s += asXml(c);
}
return s;
},
escape: function(txt) {
return txt.replace(/[\\]/g, "\\\\")
.replace(/[\"]/g, '\\"')
.replace(/[\n]/g, '\\n')
.replace(/[\r]/g, '\\r');
},
removeWhite: function(e) {
e.normalize();
for (var n = e.firstChild; n; ) {
if (n.nodeType == 3) { // text node
if (!n.nodeValue.match(/[^ \f\n\r\t\v]/)) { // pure whitespace text node
var nxt = n.nextSibling;
e.removeChild(n);
n = nxt;
}
else
n = n.nextSibling;
}
else if (n.nodeType == 1) { // element node
X.removeWhite(n);
n = n.nextSibling;
}
else // any other node
n = n.nextSibling;
}
return e;
}
};
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, "")) + "}";
}

View file

@ -1,273 +1,298 @@
<?php
/**
* @file common/lang/en.lang.php
* @author zero (zero@nzeo.com)
* @brief English Language Pack (Only basic words are included here)
**/
// words for action, which is basically used
$lang->cmd_write = 'Write';
$lang->cmd_reply = 'Reply';
$lang->cmd_delete = 'Delete';
$lang->cmd_modify = 'Modify';
$lang->cmd_edit = 'Edit';
$lang->cmd_view = 'View';
$lang->cmd_view_all = 'View All';
$lang->cmd_list = 'List';
$lang->cmd_prev = 'Prev';
$lang->cmd_next = 'Next';
$lang->cmd_send_trackback = 'Send Trackback';
$lang->cmd_registration = $lang->cmd_submit = 'Submit';
$lang->cmd_comment_registration = 'Add Comment';
$lang->cmd_insert = 'Insert';
$lang->cmd_save = 'Save';
$lang->cmd_load = 'Load';
$lang->cmd_input = 'Input';
$lang->cmd_search = 'Search';
$lang->cmd_cancel = 'Cancel';
$lang->cmd_back = 'Go Back';
$lang->cmd_vote = 'Recommend';
$lang->cmd_vote_down = 'Criticize';
$lang->cmd_declare = 'Accuse';
$lang->cmd_cancel_declare = 'Cancel Accuse';
$lang->cmd_declared_list = 'Accusations List';
$lang->cmd_copy = 'Copy';
$lang->cmd_move = 'Move';
$lang->cmd_move_up = 'Up';
$lang->cmd_move_down = 'Down';
$lang->cmd_add_indent = 'Indent';
$lang->cmd_remove_indent = 'Outdent';
$lang->cmd_management = 'Manage';
$lang->cmd_make = 'Create';
$lang->cmd_select = 'Select';
$lang->cmd_select_all = 'Select All';
$lang->cmd_unselect_all = 'Deselect All';
$lang->cmd_reverse_all = 'Reverse';
$lang->cmd_close_all = 'Close All';
$lang->cmd_open_all = 'Open All';
$lang->cmd_reload = 'Reload';
$lang->cmd_close = 'Close';
$lang->cmd_open = 'Open';
$lang->cmd_setup = 'Configure';
$lang->cmd_addition_setup = 'Additional Setup';
$lang->cmd_option = 'Option';
$lang->cmd_apply = 'Apply';
$lang->cmd_open_calendar = 'Select a Date';
$lang->cmd_send = 'Send';
$lang->cmd_print = 'Print';
$lang->cmd_scrap = 'Scrap';
$lang->cmd_preview = 'Preview';
$lang->cmd_reset = 'Reset';
$lang->cmd_remake_cache = "Re-create cache file";
$lang->cmd_publish = "Publish";
$lang->cmd_layout_setup = 'Configure layout';
$lang->cmd_layout_edit = 'Edit layout';
$lang->cmd_search_by_ipaddress = 'Search by IP Address';
$lang->enable = 'Enable';
$lang->disable = 'Disable';
// Essential Words
$lang->no = 'No.';
$lang->notice = 'Notice';
$lang->secret = 'Secret';
$lang->category = $lang->category_srl = 'Category';
$lang->none_category = 'None category';
$lang->document_srl = 'Doc. No.';
$lang->user_id = 'User ID';
$lang->author = 'Developer';
$lang->password = 'Password';
$lang->password1 = 'Password';
$lang->password2 = 'Confirm Password';
$lang->admin_id = 'Admin ID';
$lang->writer = 'Author';
$lang->user_name = 'User Name';
$lang->nick_name = 'Nick Name';
$lang->email_address = 'Email';
$lang->homepage = 'Homepage';
$lang->blog = 'Blog';
$lang->birthday = 'Birthday';
$lang->browser_title = 'Browser Title';
$lang->title = 'Subject';
$lang->title_content = 'Subject+Content';
$lang->topic = 'Topic';
$lang->replies = 'Reply';
$lang->content = 'Content';
$lang->document = 'Article';
$lang->comment = 'Comment';
$lang->description = 'Description';
$lang->trackback = 'Trackback';
$lang->tag = 'Tag';
$lang->allow_comment = 'Allow Comments';
$lang->lock_comment = 'Block Comments';
$lang->allow_trackback = 'Allow Trackbacks';
$lang->uploaded_file = 'Attachment';
$lang->grant = 'Permission';
$lang->target = 'Target';
$lang->total = 'Total';
$lang->total_count = 'Count Total';
$lang->ipaddress = 'IP Address';
$lang->path = 'Path';
$lang->cart = 'Selected Item';
$lang->friend = 'Friends';
$lang->notify = 'Notification';
$lang->order_target = 'Align Target';
$lang->order_type = 'Sorting Type';
$lang->order_asc = 'ascend';
$lang->order_desc = 'descend';
$lang->mid = 'Module Name';
$lang->layout = 'Layout';
$lang->widget = 'Widget';
$lang->module = 'Module';
$lang->skin = 'Theme';
$lang->colorset = 'Colorset';
$lang->extra_vars = 'Extra Vars';
$lang->document_url = 'Article URL';
$lang->trackback_url = 'Trackback URL';
$lang->blog_name = 'Blog Title';
$lang->excerpt = 'Quotation';
$lang->document_count = 'Total Articles';
$lang->page_count = 'Page Count';
$lang->list_count = 'List Count';
$lang->search_list_count = 'Search List Count';
$lang->readed_count = 'Views';
$lang->voted_count = 'Votes';
$lang->comment_count = 'Comments';
$lang->member_count = 'Member Count';
$lang->date = 'Date';
$lang->regdate = 'Registered Date';
$lang->last_update = 'Last Update';
$lang->last_post = 'Last Post';
$lang->signup_date = 'Join Date';
$lang->last_login = 'Last Login';
$lang->first_page = 'First Page';
$lang->last_page = 'Last Page';
$lang->search_target = 'Target for Search';
$lang->search_keyword = 'Keyword';
$lang->is_default = 'Default';
$lang->no_documents = 'No Articles';
$lang->board_manager = 'Board Settings';
$lang->member_manager = 'Member Settings';
$lang->layout_manager = 'Layout Settings';
$lang->use = 'Use';
$lang->notuse = 'Not use';
$lang->not_exists = "Doesn't exist";
$lang->public = 'public';
$lang->private = 'private';
$lang->unit_sec = 'sec';
$lang->unit_min = 'min';
$lang->unit_hour = 'hr';
$lang->unit_day = 'th';
$lang->unit_week = 'week';
$lang->unit_month = 'month';
$lang->unit_year = 'year';
// Descriptions
$lang->about_tag = 'You may submit multiple tags by inserting commas(,) between each tag';
$lang->about_layout = 'Layouts decorate the appearance of your modules. you can configure them from Layout menu on the top';
// Messages
$lang->msg_call_server = 'Requesting to the server, please wait';
$lang->msg_db_not_setted = 'DB configuration has not been set';
$lang->msg_invalid_queryid = 'Specified query ID value is invalid';
$lang->msg_not_permitted = 'You do not have permission to access';
$lang->msg_input_password = 'Please input the password';
$lang->msg_invalid_document = 'Invalid Article Number';
$lang->msg_invalid_request = 'Invalid Request';
$lang->msg_invalid_password = 'Invalid Password';
$lang->msg_error_occured = 'An error has occured';
$lang->msg_not_founded = 'Target could not be found';
$lang->msg_no_result = 'Nothing found';
$lang->msg_not_permitted_act = 'You do not have permission to execute requested action';
$lang->msg_module_is_not_exists = 'Requested module could not be found';
$lang->msg_module_is_not_standalone = 'Requested module cannot be executed independently';
$lang->success_registed = 'Registered successfully';
$lang->success_declared = 'Accused successfully';
$lang->success_updated = 'Updated successfully';
$lang->success_deleted = 'Deleted successfully';
$lang->success_voted = 'Recommended successfully';
$lang->success_blamed = 'Blamed success_blamed';
$lang->success_moved = 'Moved successfully';
$lang->success_sended = 'Sent successfully';
$lang->success_reset = 'Reset successfully';
$lang->success_leaved = 'All member data have been deleted completely.';
$lang->success_saved = 'Saved successfully';
$lang->fail_to_delete = 'Could not be deleted';
$lang->fail_to_move = 'Could not be moved';
$lang->failed_voted = 'Could not recommend';
$lang->failed_blamed = 'Could not blame';
$lang->failed_declared = 'Could not accuse';
$lang->fail_to_delete_have_children = 'Please try again after removing replies first';
$lang->confirm_submit = 'Are you sure to submit?';
$lang->confirm_logout = 'Are you sure to logout?';
$lang->confirm_vote = 'Are you sure to recommend?';
$lang->confirm_delete = 'Are you sure to delete?';
$lang->confirm_move = 'Are you sure to move?';
$lang->confirm_reset = 'Are you sure to reset?';
$lang->confirm_leave = 'Are you sure to leave?';
$lang->column_type = 'Column Type';
$lang->column_type_list['text'] = 'one-line text';
$lang->column_type_list['homepage'] = 'url';
$lang->column_type_list['email_address'] = 'email';
$lang->column_type_list['tel'] = 'phone number';
$lang->column_type_list['textarea'] = 'multi-line textarea';
$lang->column_type_list['checkbox'] = 'checkbox (multiple selection)';
$lang->column_type_list['select'] = 'select box (single selection)';
$lang->column_type_list['kr_zip'] = 'zip code (Korean)';
$lang->column_type_list['date'] = 'date (yyyy/mm/dd)';
//$lang->column_type_list['jp_zip'] = 'zip code (Japanese)';
$lang->column_name = 'Column Name';
$lang->column_title = 'Column Title';
$lang->default_value = 'Default Value';
$lang->is_active = 'Active';
$lang->is_required = 'Required Field';
// ftp 관련
$lang->ftp_form_title = 'FTP 정보 입력';
$lang->ftp = 'FTP';
$lang->ftp_port = 'FTP port';
$lang->cmd_check_ftp_connect = 'FTP 접속 확인';
$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 />
<strong>FTP 정보 노출을 원하지 않으시면 입력하지 않으셔도 됩니다</strong>
";
$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 접속 및 인증 성공하였습니다";
// 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";
?>
<?php
/**
* @file common/lang/en.lang.php
* @author zero (zero@nzeo.com)
* @brief English Language Pack (Only basic words are included here)
**/
// words for action, which is basically used
$lang->cmd_write = 'Write';
$lang->cmd_reply = 'Reply';
$lang->cmd_delete = 'Delete';
$lang->cmd_modify = 'Modify';
$lang->cmd_edit = 'Edit';
$lang->cmd_view = 'View';
$lang->cmd_view_all = 'View All';
$lang->cmd_list = 'List';
$lang->cmd_prev = 'Prev';
$lang->cmd_next = 'Next';
$lang->cmd_send_trackback = 'Send Trackback';
$lang->cmd_registration = $lang->cmd_submit = 'Submit';
$lang->cmd_comment_registration = 'Add Comment';
$lang->cmd_insert = 'Insert';
$lang->cmd_save = 'Save';
$lang->cmd_load = 'Load';
$lang->cmd_input = 'Input';
$lang->cmd_search = 'Search';
$lang->cmd_cancel = 'Cancel';
$lang->cmd_back = 'Go Back';
$lang->cmd_vote = 'Recommend';
$lang->cmd_vote_down = 'Criticize';
$lang->cmd_declare = 'Accuse';
$lang->cmd_cancel_declare = 'Cancel Accuse';
$lang->cmd_declared_list = 'Accusations List';
$lang->cmd_copy = 'Copy';
$lang->cmd_move = 'Move';
$lang->cmd_move_up = 'Up';
$lang->cmd_move_down = 'Down';
$lang->cmd_add_indent = 'Indent';
$lang->cmd_remove_indent = 'Outdent';
$lang->cmd_management = 'Manage';
$lang->cmd_make = 'Create';
$lang->cmd_select = 'Select';
$lang->cmd_select_all = 'Select All';
$lang->cmd_unselect_all = 'Deselect All';
$lang->cmd_reverse_all = 'Reverse';
$lang->cmd_close_all = 'Close All';
$lang->cmd_open_all = 'Open All';
$lang->cmd_reload = 'Reload';
$lang->cmd_close = 'Close';
$lang->cmd_open = 'Open';
$lang->cmd_setup = 'Configure';
$lang->cmd_addition_setup = 'Additional Setup';
$lang->cmd_option = 'Option';
$lang->cmd_apply = 'Apply';
$lang->cmd_open_calendar = 'Select a Date';
$lang->cmd_send = 'Send';
$lang->cmd_print = 'Print';
$lang->cmd_scrap = 'Scrap';
$lang->cmd_preview = 'Preview';
$lang->cmd_reset = 'Reset';
$lang->cmd_remake_cache = "Re-create cache file";
$lang->cmd_publish = "Publish";
$lang->cmd_layout_setup = 'Configure layout';
$lang->cmd_layout_edit = 'Edit layout';
$lang->cmd_search_by_ipaddress = 'Search by IP Address';
$lang->cmd_add_ip_to_spamfilter = 'Add IP to spamfilter';
$lang->enable = 'Enable';
$lang->disable = 'Disable';
// Essential Words
$lang->no = 'No.';
$lang->notice = 'Notice';
$lang->secret = 'Secret';
$lang->category = $lang->category_srl = 'Category';
$lang->none_category = 'None category';
$lang->document_srl = 'Doc. No.';
$lang->user_id = 'User ID';
$lang->author = 'Developer';
$lang->password = 'Password';
$lang->password1 = 'Password';
$lang->password2 = 'Confirm Password';
$lang->admin_id = 'Admin ID';
$lang->writer = 'Author';
$lang->user_name = 'User Name';
$lang->nick_name = 'Nick Name';
$lang->email_address = 'Email';
$lang->homepage = 'Homepage';
$lang->blog = 'Blog';
$lang->birthday = 'Birthday';
$lang->browser_title = 'Browser Title';
$lang->title = 'Subject';
$lang->title_content = 'Subject+Content';
$lang->topic = 'Topic';
$lang->replies = 'Reply';
$lang->content = 'Content';
$lang->document = 'Article';
$lang->comment = 'Comment';
$lang->description = 'Description';
$lang->trackback = 'Trackback';
$lang->tag = 'Tag';
$lang->allow_comment = 'Allow Comments';
$lang->lock_comment = 'Block Comments';
$lang->allow_trackback = 'Allow Trackbacks';
$lang->uploaded_file = 'Attachment';
$lang->grant = 'Permission';
$lang->target = 'Target';
$lang->total = 'Total';
$lang->total_count = 'Count Total';
$lang->ipaddress = 'IP Address';
$lang->path = 'Path';
$lang->cart = 'Selected Item';
$lang->friend = 'Friends';
$lang->notify = 'Notification';
$lang->order_target = 'Align Target';
$lang->order_type = 'Sorting Type';
$lang->order_asc = 'ascend';
$lang->order_desc = 'descend';
$lang->mid = 'Module Name';
$lang->layout = 'Layout';
$lang->widget = 'Widget';
$lang->module = 'Module';
$lang->skin = 'Theme';
$lang->colorset = 'Colorset';
$lang->extra_vars = 'Extra Vars';
$lang->document_url = 'Article URL';
$lang->trackback_url = 'Trackback URL';
$lang->blog_name = 'Blog Title';
$lang->excerpt = 'Quotation';
$lang->document_count = 'Total Articles';
$lang->page_count = 'Page Count';
$lang->list_count = 'List Count';
$lang->search_list_count = 'Search List Count';
$lang->readed_count = 'Views';
$lang->voted_count = 'Votes';
$lang->comment_count = 'Comments';
$lang->member_count = 'Member Count';
$lang->date = 'Date';
$lang->regdate = 'Registered Date';
$lang->last_update = 'Last Update';
$lang->last_post = 'Last Post';
$lang->signup_date = 'Join Date';
$lang->last_login = 'Last Login';
$lang->first_page = 'First Page';
$lang->last_page = 'Last Page';
$lang->search_target = 'Target for Search';
$lang->search_keyword = 'Keyword';
$lang->is_default = 'Default';
$lang->no_documents = 'No Articles';
$lang->board_manager = 'Board Settings';
$lang->member_manager = 'Member Settings';
$lang->layout_manager = 'Layout Settings';
$lang->use = 'Use';
$lang->notuse = 'Not use';
$lang->not_exists = "Doesn't exist";
$lang->public = 'public';
$lang->private = 'private';
$lang->unit_sec = 'sec';
$lang->unit_min = 'min';
$lang->unit_hour = 'hr';
$lang->unit_day = 'th';
$lang->unit_week = 'week';
$lang->unit_month = 'month';
$lang->unit_year = 'year';
$lang->unit_week = array(
'Monday' => 'Monday',
'Tuesday' => 'Tuesday',
'Wednesday' => 'Wednesday',
'Thursday' => 'Thursday',
'Friday' => 'Friday',
'Saturday' => 'Saturday',
'Sunday' => 'Sunday',
);
$lang->unit_meridiem = array(
'am' => 'am',
'pm' => 'pm',
'AM' => 'AM',
'PM' => 'PM',
);
$lang->time_gap = array(
'min' => '%d minute ago',
'mins' => '%d minutes ago',
'hour' => '%d hour ago',
'hours' => '%d hours ago',
);
// Descriptions
$lang->about_tag = 'You may submit multiple tags by inserting commas(,) between each tag';
$lang->about_layout = 'Layouts decorate the appearance of your modules. you can configure them from Layout menu on the top';
// Messages
$lang->msg_call_server = 'Requesting to the server, please wait';
$lang->msg_db_not_setted = 'DB configuration has not been set';
$lang->msg_dbconnect_failed = "Error has occurred while connecting DB.\nPlease check DB information again";
$lang->msg_invalid_queryid = 'Specified query ID value is invalid';
$lang->msg_not_permitted = 'You do not have permission to access';
$lang->msg_input_password = 'Please input the password';
$lang->msg_invalid_document = 'Invalid Article Number';
$lang->msg_invalid_request = 'Invalid Request';
$lang->msg_invalid_password = 'Invalid Password';
$lang->msg_error_occured = 'An error has occured';
$lang->msg_not_founded = 'Target could not be found';
$lang->msg_no_result = 'Nothing found';
$lang->msg_not_permitted_act = 'You do not have permission to execute requested action';
$lang->msg_module_is_not_exists = 'Requested module could not be found';
$lang->msg_module_is_not_standalone = 'Requested module cannot be executed independently';
$lang->success_registed = 'Registered successfully';
$lang->success_declared = 'Accused successfully';
$lang->success_updated = 'Updated successfully';
$lang->success_deleted = 'Deleted successfully';
$lang->success_voted = 'Recommended successfully';
$lang->success_blamed = 'Blamed success_blamed';
$lang->success_moved = 'Moved successfully';
$lang->success_sended = 'Sent successfully';
$lang->success_reset = 'Reset successfully';
$lang->success_leaved = 'All member data have been deleted completely.';
$lang->success_saved = 'Saved successfully';
$lang->fail_to_delete = 'Could not be deleted';
$lang->fail_to_move = 'Could not be moved';
$lang->failed_voted = 'Could not recommend';
$lang->failed_blamed = 'Could not blame';
$lang->failed_declared = 'Could not accuse';
$lang->fail_to_delete_have_children = 'Please try again after removing replies first';
$lang->confirm_submit = 'Are you sure to submit?';
$lang->confirm_logout = 'Are you sure to logout?';
$lang->confirm_vote = 'Are you sure to recommend?';
$lang->confirm_delete = 'Are you sure to delete?';
$lang->confirm_move = 'Are you sure to move?';
$lang->confirm_reset = 'Are you sure to reset?';
$lang->confirm_leave = 'Are you sure to leave?';
$lang->column_type = 'Column Type';
$lang->column_type_list['text'] = 'one-line text';
$lang->column_type_list['homepage'] = 'url';
$lang->column_type_list['email_address'] = 'email';
$lang->column_type_list['tel'] = 'phone number';
$lang->column_type_list['textarea'] = 'multi-line textarea';
$lang->column_type_list['checkbox'] = 'checkbox (multiple selection)';
$lang->column_type_list['select'] = 'select box (single selection)';
$lang->column_type_list['kr_zip'] = 'zip code (Korean)';
$lang->column_type_list['date'] = 'date (yyyy/mm/dd)';
//$lang->column_type_list['jp_zip'] = 'zip code (Japanese)';
$lang->column_name = 'Column Name';
$lang->column_title = 'Column Title';
$lang->default_value = 'Default Value';
$lang->is_active = 'Active';
$lang->is_required = 'Required Field';
// ftp 관련
$lang->ftp_form_title = 'Input FTP account information';
$lang->ftp = 'FTP';
$lang->ftp_port = 'FTP port';
$lang->cmd_check_ftp_connect = 'Check connection via FTP';
$lang->about_ftp_info = "
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 = "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.";
// 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";
?>

View file

@ -17,8 +17,8 @@
$lang->cmd_prev = 'Anterior';
$lang->cmd_next = 'Siguiente';
$lang->cmd_send_trackback = 'Enviar Trackback';
$lang->cmd_registration = $lang->cmd_submit = 'Enviar';
$lang->cmd_comment_registration = 'Agregar commentarios';
$lang->cmd_registration = $lang->cmd_submit = 'Admitir';
$lang->cmd_comment_registration = 'Agregar comentario';
$lang->cmd_insert = 'Insertar';
$lang->cmd_save = 'Guardar';
$lang->cmd_load = 'Carga';
@ -26,59 +26,60 @@
$lang->cmd_search = 'Buscar';
$lang->cmd_cancel = 'Cancelar';
$lang->cmd_back = 'Atrás';
$lang->cmd_vote = 'Recomendar';
$lang->cmd_vote_down = 'Critique';
$lang->cmd_declare = 'Acusan';
$lang->cmd_cancel_declare = 'Cancelar acusan';
$lang->cmd_declared_list = 'Lista acusaciones';
$lang->cmd_copy = 'Copia';
$lang->cmd_vote = 'a Favor';
$lang->cmd_vote_down = 'en Contra';
$lang->cmd_declare = 'Denunciar';
$lang->cmd_cancel_declare = 'Anular la Denuncia';
$lang->cmd_declared_list = 'Lista de Denuncias';
$lang->cmd_copy = 'Copiar';
$lang->cmd_move = 'Mover';
$lang->cmd_move_up = 'Arriba';
$lang->cmd_move_down = 'Abajo';
$lang->cmd_add_indent = 'Agregar';
$lang->cmd_remove_indent = 'Eliminar';
$lang->cmd_add_indent = 'Añadir Sangría';
$lang->cmd_remove_indent = 'Reducir Sangría';
$lang->cmd_management = 'Administración';
$lang->cmd_make = 'Crear';
$lang->cmd_select = 'Seleccionar';
$lang->cmd_select_all = 'Seleccionar todo';
$lang->cmd_unselect_all = 'Cancelar todo';
$lang->cmd_unselect_all = 'Cancelar Toda la Selección';
$lang->cmd_close_all = 'Cerrar todo';
$lang->cmd_open_all = 'Abrir todo';
$lang->cmd_reload = 'Actualizar';
$lang->cmd_close = 'Cerrar';
$lang->cmd_open = 'Abrir';
$lang->cmd_setup = 'Configuración';
$lang->cmd_addition_setup = 'Configurar';
$lang->cmd_addition_setup = 'Más opciones';
$lang->cmd_option = 'Opción';
$lang->cmd_apply = 'Aplicar';
$lang->cmd_open_calendar = 'Abrir el calendario';
$lang->cmd_send = 'Enviar';
$lang->cmd_print = 'Imprimir';
$lang->cmd_scrap = 'Scrap';
$lang->cmd_preview = 'Previo';
$lang->cmd_scrap = 'Recorte';
$lang->cmd_preview = 'Vista Previa';
$lang->cmd_reset = 'Rehacer';
$lang->cmd_remake_cache = "Re-crear el archivo caché";
$lang->cmd_publish = "Publicar";
$lang->cmd_layout_setup = 'Configuración del diseño';
$lang->cmd_layout_edit = 'Editar el diseño';
$lang->cmd_search_by_ipaddress = 'IP주소로 검색';
$lang->cmd_layout_setup = 'Composición de Página';
$lang->cmd_layout_edit = 'Editar la Página';
$lang->cmd_search_by_ipaddress = 'Búsqueda con IP';
$lang->cmd_add_ip_to_spamfilter = 'Añadir IP en el Filtro de Spam';
$lang->enable = 'Activar';
$lang->disable = 'Desactivar';
$lang->enable = 'Activar'; //Activado
$lang->disable = 'Desactivar'; //Desactivado
// Palabras Esenciales
$lang->no = 'Nº';
$lang->notice = 'Aviso';
$lang->notice = 'Aviso'; //boletín, noticia
$lang->secret = 'Secreto';
$lang->category = $lang->category_srl = 'Categoría';
$lang->none_category = '분류없음';
$lang->none_category = 'Sin categoría';
$lang->document_srl = 'Número del documento';
$lang->user_id = 'Usuario';
$lang->author = 'Autor';
$lang->user_id = 'ID de Usuario';
$lang->author = 'Autor';
$lang->password = 'Contraseña';
$lang->password1 = 'Contraseña';
$lang->password2 = 'Confirmar la contraseña';
$lang->admin_id = 'Identificación del Administrador';
$lang->password2 = 'Otra vez la contraseña';
$lang->admin_id = 'ID del Administrador';
$lang->writer = 'Escritor';
$lang->user_name = 'Nombre del Usuario';
$lang->nick_name = 'Apodo';
@ -91,36 +92,36 @@
$lang->title_content = 'Título+Contenido';
$lang->topic = 'Tema';
$lang->replies = 'Responder';
$lang->content = 'Contenidos';
$lang->document = 'Documentos';
$lang->comment = 'Commentarios';
$lang->content = 'Contenido';
$lang->document = 'Documento';
$lang->comment = 'Comentario';
$lang->description = 'Descripción';
$lang->trackback = 'Trackback';
$lang->tag = 'Etiqueta';
$lang->allow_comment = 'Permitir Commentarios';
$lang->lock_comment = 'Bloquear Commentarios';
$lang->allow_comment = 'Permitir Comentarios';
$lang->lock_comment = 'Bloquear Comentarios';
$lang->allow_trackback = 'Permitir Trackback';
$lang->uploaded_file = 'Archivos Adjuntos';
$lang->grant = 'Atribución';
$lang->target = 'Objetivo';
$lang->grant = 'Permisos';
$lang->target = 'Para'; //significaria para cual o quien
$lang->total = 'Total';
$lang->total_count = 'Número total';
$lang->ipaddress = 'Dirección IP';
$lang->path = 'Ruta';
$lang->cart = 'Artículo Seleccionado';
$lang->cart = 'Artículo Seleccionado'; //Cesta
$lang->friend = 'Amigos';
$lang->notify = 'Notificación';
$lang->order_target = 'Alinear Meta';
$lang->order_type = 'Tipo de ordenamiento';
$lang->order_asc = 'acendente';
$lang->order_type = 'Tipo de Ordenación';
$lang->order_asc = 'ascendente';
$lang->order_desc = 'descendente';
$lang->mid = 'Nombre del Módulo';
$lang->layout = 'Diseño';
$lang->mid = 'ID del Módulo';
$lang->layout = 'Composición';
$lang->widget = 'Widget';
$lang->module = 'Módulo';
$lang->skin = 'Tema';
$lang->colorset = 'Set de colores';
$lang->skin = 'Tema'; //máscara,
$lang->colorset = 'Conjunto de Colores';
$lang->extra_vars = 'Variables Extra';
$lang->document_url = 'URL del Documento';
@ -128,31 +129,31 @@
$lang->blog_name = 'Titulo del Blog';
$lang->excerpt = 'Extracto';
$lang->document_count = 'Cantidad de documentos';
$lang->page_count = 'Cantidad de páginas';
$lang->list_count = 'Cantidad de listas';
$lang->search_list_count = 'Buscar lista Conde';
$lang->document_count = 'Número de documentos';
$lang->page_count = 'Número de páginas';
$lang->list_count = 'Número de listas';
$lang->search_list_count = 'Buscar lista Conde'; //??
$lang->readed_count = 'Leídos';
$lang->voted_count = 'Recomendados';
$lang->comment_count = 'Commentarios';
$lang->member_count = 'Cantidad de usuarios';
$lang->comment_count = 'Comentarios';
$lang->member_count = 'Número de usuarios';
$lang->date = 'Fecha';
$lang->regdate = 'Fecha publicada';
$lang->regdate = 'Fecha de Publicación';
$lang->last_update = 'Ultima actualización';
$lang->last_post = 'Último mensaje';
$lang->signup_date = 'Fecha del registro';
$lang->last_login = 'Ultima conección';
$lang->last_post = 'Ultimo mensaje';
$lang->signup_date = 'Fecha del Registro';
$lang->last_login = 'Ultima conexión'; //Ultima Entrada
$lang->first_page = 'Primera página';
$lang->last_page = 'Ultima página';
$lang->search_target = 'Objectivo a buscar';
$lang->search_target = 'Campo a buscar'; //Objectivo a buscar
$lang->search_keyword = 'Palabra a buscar';
$lang->is_default = 'Predefinido';
$lang->is_default = 'Por defecto';
$lang->no_documents = 'Sin documentos';
$lang->no_documents = 'Sin documento';
$lang->board_manager = 'Manejo de los Tableros';
$lang->member_manager = 'MAnejo de los usuarios';
$lang->layout_manager = 'MAnejo de los Diseños';
$lang->board_manager = 'Adm. Tableros';
$lang->member_manager = 'Adm. Usuarios';
$lang->layout_manager = 'Adm. Diseños';
$lang->use = 'Usar';
$lang->notuse = 'No usar';
@ -169,33 +170,65 @@
$lang->unit_month = 'mes';
$lang->unit_year = 'año';
$lang->unit_week = array(
'Monday' => 'Lunes',
'Tuesday' => 'Mártes',
'Wednesday' => 'Miércoles',
'Thursday' => 'Jueves',
'Friday' => 'Viernes',
'Saturday' => 'Sábado',
'Sunday' => 'Domingo',
'Monday' => 'Lunes',
'Tuesday' => 'Martes',
'Wednesday' => 'Miércoles ',
'Thursday' => 'Jueves',
'Friday' => 'Viernes',
'Saturday' => 'Sábado',
'Sunday' => 'Domingo',
);
$lang->unit_meridiem = array(
'am' => 'am',
'pm' => 'pm',
'AM' => 'AM',
'PM' => 'PM',
);
$lang->time_gap = array(
'min' => 'Hace %d minuto',
'mins' => '%d minutos',
'hour' => '%d día',
'hours' => '%d días',
);
// Relacionado a la Descripción
$lang->about_tag = 'Tú puedes agregar múltiples etiquetas colocando una coma(,) entre cada etiqueta';
$lang->about_layout = 'El diseño decora la apariencia de tus módulos, lo cual podrás configurar en el menú de Diseño en la parte superior';
$lang->about_tag = 'Puede agregar o añadir diversas etiquetas separándolas con la coma(,)'; // revisado hasta aquí (081007: Juan Lee)
$lang->about_layout = 'Puede modificar la apariencia(Layout/Diseño) de los módulos. Puede administrarla con el menú Layout.';
// Relacionado al Mensaje
$lang->msg_call_server = 'Solicitando al servidor, espere un momento';
$lang->msg_db_not_setted = 'Configuración de DB no ha sido creado';
$lang->msg_db_not_setted = 'La Base de Datos no está preparada';
$lang->msg_dbconnect_failed = "Ha ocurrido un error en la conexión de BD.\n Por favor chequee la información de BD nuevamente";
$lang->msg_invalid_queryid = 'El valor de Query ID especificado es inválido';
$lang->msg_not_permitted = 'Acceso denegado';
$lang->msg_input_password = 'Coloque la contraseña';
$lang->msg_invalid_document = 'Mensaje inválido';
$lang->msg_invalid_request = 'Respuesta Inválida';
$lang->msg_input_password = 'Introduzca la contraseña';
$lang->msg_invalid_document = 'Documento inválido';
$lang->msg_invalid_request = 'Solicitud Inválida';
$lang->msg_invalid_password = 'Contraseña Inválida';
$lang->msg_error_occured = 'Error';
$lang->msg_not_founded = 'No puede ser encontrado';
$lang->msg_no_result = 'Sin resultados';
$lang->msg_not_founded = 'No se ha encontrado';
$lang->msg_no_result = 'Sin resultado';
$lang->msg_not_permitted_act = 'Usted no tiene permiso para ejecutar la action solicitada';
$lang->msg_module_is_not_exists = 'Módulo solicitado no puede ser encontrado';
$lang->msg_module_is_not_standalone = 'Módulo solicitado no puede ser ejecutado independientemente';
$lang->msg_not_permitted_act = 'No está permitodo para ejecutar esta acción';
$lang->msg_module_is_not_exists = 'No existe el Módulo requerido';
$lang->msg_module_is_not_standalone = 'El Módulo requerido no funciona solo.';
$lang->success_registed = 'Agregado con éxito';
$lang->success_declared = 'Acusado con éxito';
$lang->success_registed = 'Registrado con éxito';
$lang->success_declared = 'Denuncia registrada con éxito';
$lang->success_updated = 'Actualizado con éxito';
$lang->success_deleted = 'Boarrado con éxito';
$lang->success_voted = 'Recomendado con éxito';
$lang->success_blamed = 'Culpó success_blamed';
$lang->success_deleted = 'Borrado con éxito';
$lang->success_voted = 'Voto a favor registrado con éxito';
$lang->success_blamed = 'Voto en Contra registrado con éxito';
$lang->success_moved = 'Movido con éxito';
$lang->success_sended = 'Enviado con éxito';
$lang->success_reset = 'Reajustado con éxito';
@ -205,68 +238,67 @@
$lang->fail_to_delete = 'No puede ser borrado';
$lang->fail_to_move = 'No puede ser movido';
$lang->failed_voted = 'No puede ser recomendado';
$lang->failed_blamed = 'No se ha podido culpa ';
$lang->failed_declared = 'No se ha podido acusar';
$lang->fail_to_delete_have_children = 'No puede ser borrado, ya que el mensaje posee respuestas ';
$lang->failed_voted = 'No puede dar Voto a favor';
$lang->failed_blamed = 'No puede dar Voto en contra';
$lang->failed_declared = 'No puede denunciar';
$lang->fail_to_delete_have_children = 'No puede eliminar lo publicado, por los escritos: mensajes, ecos, respuestas, recibidos';
$lang->confirm_submit = '¿Está seguro que desea enviar?';
$lang->confirm_logout = '¿Está seguro que desea desconectar?';
$lang->confirm_vote = '¿Está seguro que desea recomendar?';
$lang->confirm_delete = '¿Está seguro que desea borrar?';
$lang->confirm_vote = '¿Está seguro que desea votar?';
$lang->confirm_delete = '¿Está seguro que desea eliminar?';
$lang->confirm_move = '¿Está seguro que desea mover?';
$lang->confirm_reset = '¿Está seguro que desea rehacer?';
$lang->confirm_leave = '¿Está seguro que desea salir?';
$lang->confirm_leave = '¿Está seguro que desea abandonar?';
$lang->column_type = 'Tipos de Columnas';
$lang->column_type_list['text'] = 'Texto de una linea';
$lang->column_type_list['homepage'] = 'URL';
$lang->column_type_list['text'] = 'Texto sin cambio de línea';
$lang->column_type_list['homepage'] = 'URL de la página web';
$lang->column_type_list['email_address'] = 'Correo Electrónico';
$lang->column_type_list['tel'] = 'Número de teléfono';
$lang->column_type_list['textarea'] = 'Texto multi-linea';
$lang->column_type_list['checkbox'] = 'Cuadro de chequeo (selecciónes múltiples)';
$lang->column_type_list['select'] = 'Cuadro de selección (selección individual)';
$lang->column_type_list['checkbox'] = 'Caja de chequeo (selección múltiple)';
$lang->column_type_list['select'] = 'Selección (selección individual)';
//$lang->column_type_list['kr_zip'] = 'zip code (Korean)';
$lang->column_type_list['date'] = 'fecha (dd/mm/aaaa)';
//$lang->column_type_list['jp_zip'] = 'zip code (Japanese)';
$lang->column_name = 'Nombre de la Columna';
$lang->column_title = 'Título de la Columna';
$lang->default_value = 'Valor Predefinido';
$lang->default_value = 'Valor por defecto';
$lang->is_active = 'Activado';
$lang->is_required = 'Espacio requerido';
$lang->is_required = 'Requerido';
// ftp 관련
$lang->ftp_form_title = 'FTP 정보 입력';
$lang->ftp_form_title = 'Datos de conexión para FTP';
$lang->ftp = 'FTP';
$lang->ftp_port = 'FTP port';
$lang->cmd_check_ftp_connect = 'FTP 접속 확인';
$lang->cmd_check_ftp_connect = 'conexión de FTP confirmada';
$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 />
<strong>FTP 정보 노출을 원하지 않으시면 입력하지 않으셔도 됩니다</strong>
Los datos de conexión para FTP pueden ser utilizados en los siguientes casos.<br/>
1. Cuando la variable safe_mode está activa[safe_mode=On], el XE puede utilizarlos para su funcionamiento normal.<br/>
2. Para la actualización automática.<br/>
Estos datos de FTP se guardan en el fichero files/config/ftp.config.php <br/>
, y pueden ser borrados o modificados posteriormente en las páginas de administración.<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 = "Si la la variable safe_mode está activa[safe_mode=On], debe rellenar los datos de FTP para seguir instalando y usar con normalidad el XE.";
$lang->msg_ftp_not_connected = "Ha ocurrico un error de conexión al FTP del localhost. Verifique el puerto del FTP y/o el funcionamiento del servicio FTP.";
$lang->msg_ftp_invalid_auth_info = "Los datos de login para el FTP no son correctos. Veriféquelos.";
$lang->msg_ftp_mkdir_fail = "Ha fallado el comando de FTP para la creación de directorio. Verifique la configuración del servicio FTP en el servidor";
$lang->msg_ftp_chmod_fail = "Ha fallado el comando de FTP para la modificación de atributos de directorio. Verifique la configuración del servicio FTP en el servidor.";
$lang->msg_ftp_connect_success = "conexión con éxito al FTP";
// Mensajes de alerta para Javascript usando el filtro XML
$lang->filter->isnull = 'Ingresar un valor para %s';
$lang->filter->outofrange = 'Ajustar el largo del texto de %s';
$lang->filter->equalto = 'Valor de %s es inválido.';
$lang->filter->invalid_email = 'Formato de %s es inválido. (ej. zbxe@zeroboard.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "Formato de %s es inválido.\\n Todos los valores deberá consistir en alfabetos, números o guión abajo(_) y la primera letra deberá ser en alfabeto Español";
$lang->filter->invalid_homepage = 'Formato de %s es inválido. (ej: http://www.zeroboard.com)';
$lang->filter->invalid_korean = 'Formato de %s es inválido. Ingresar ingresar sólo coreano';
$lang->filter->invalid_korean_number = 'Formato de %s es inválido. Ingresar coreano o números';
$lang->filter->invalid_alpha = 'Formato de %s es inválido. Ingresar sólo alfabetos';
$lang->filter->invalid_alpha_number = 'Formato de %s es inválido. Ingresar alfabetos o números';
$lang->filter->invalid_number = 'Formato de %s es inválido. Ingresar sólo números.';
$lang->filter->isnull = 'Introduzca valor en el %s';
$lang->filter->outofrange = 'Se ha excedido el máximo número de letras permitido en el %s';
$lang->filter->equalto = 'Valor inválido en el %s';
$lang->filter->invalid_email = 'Formato email inválido en el %s (ej. zbxe@zeroboard.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "Formato inválido en el %s.\\nSólo pueden introducir los alfabetos o los dígitos númericos o el guión bajo(_). Además, el primer valor sólo puede ser una letra de alfabeto";
$lang->filter->invalid_homepage = 'Formato url inválido en el %s (ej: http://www.zeroboard.com)';
$lang->filter->invalid_korean = 'Sólo puede introducir los caracteres coreanos en el %s';
$lang->filter->invalid_korean_number = 'Sólo puede introducir los caracteres coreanos o números en el %s';
$lang->filter->invalid_alpha = 'Sólo puede introducir los alfabetos en el %s';
$lang->filter->invalid_alpha_number = 'Sólo puede introducir los alfanuméricos en el %s es inválido';
$lang->filter->invalid_number = 'Sólo puede introducir los dígitos numéricos en el %s';
?>

View file

@ -63,6 +63,7 @@
$lang->cmd_layout_setup = 'Configurer la Mise en page';
$lang->cmd_layout_edit = 'Editer la Mise en page';
$lang->cmd_search_by_ipaddress = 'Recherce par l\'Address IP';
$lang->cmd_add_ip_to_spamfilter = 'Add IP to spamfilter';
$lang->enable = 'Valide';
$lang->disable = 'Invalide';
@ -170,6 +171,30 @@
$lang->unit_month = 'mois';
$lang->unit_year = 'année';;
$lang->unit_week = array(
'Monday' => 'Lundi',
'Tuesday' => 'Mardi',
'Wednesday' => 'Mer.',
'Thursday' => 'Jeu.',
'Friday' => 'Vendredi',
'Saturday' => 'Samedi',
'Sunday' => 'Dimanche',
);
$lang->unit_meridiem = array(
'am' => 'am',
'pm' => 'pm',
'AM' => 'AM',
'PM' => 'PM',
);
$lang->time_gap = array(
'min' => '%d heure',
'mins' => 'Il ya %d minutes',
'hour' => 'Il ya %d jour',
'hours' => 'Il ya %d jours',
);
// Descriptions et information
$lang->about_tag = 'Vous pouvez enrégistrer plusieurs balises en utilisant ,(virgule) entre chaque balise';
$lang->about_layout = 'Le Mise en Page décore l\'apparence des modules. Vous pouvez les configurer avec le menu de Mise en Page en haut';
@ -177,6 +202,7 @@
// Messages et alertes
$lang->msg_call_server = 'En demandant sur le serveur, attendez S.V.P.';
$lang->msg_db_not_setted = 'La configuration de Base de Données n\'a pas été établie.';
$lang->msg_dbconnect_failed = "Erreur a lieu en essayant connecter à la Base de Données.\nVérifiez encore une fois les informations sur la Base de Données, S.V.P.";
$lang->msg_invalid_queryid = 'La valeur spécifiée d\'identite de query est invalide.';
$lang->msg_not_permitted = 'Vous n\'avez pas le droit d\'accès.';
$lang->msg_input_password = 'Veuillez entrer votre mot de passe.';
@ -247,7 +273,6 @@
2. 자동 업데이트등에서 FTP 정보를 이용할 있습니다.<br/>
FTP정보는 files/config/ftp.config.php 파일내에 정보가 저장됩니다.<br/>
그리고 설치 관리자 페이지에서 FTP 정보를 변경하거나 제거할 있습니다.<br />
<strong>FTP 정보 노출을 원하지 않으시면 입력하지 않으셔도 됩니다</strong>
";
$lang->msg_safe_mode_ftp_needed = "PHP의 safe_mode가 On일 경우 FTP 정보를 꼭 입력해주셔야 XE의 설치 및 사용이 가능합니다";

View file

@ -62,7 +62,8 @@
$lang->cmd_publish = 'Veröffentlichen';
$lang->cmd_layout_setup = 'Konfiguration Layout';
$lang->cmd_layout_edit = 'Layout bearbeiten';
$lang->cmd_search_by_ipaddress = 'IP주소로 검색';
$lang->cmd_search_by_ipaddress = 'Search by IP Address';
$lang->cmd_add_ip_to_spamfilter = 'Add IP to spamfilter';
$lang->enable = 'Aktivieren';
$lang->deaktivieren = 'Deaktivieren';
@ -170,13 +171,38 @@
$lang->unit_month = 'Monat';
$lang->unit_year = 'Jahr';
$lang->unit_week = array(
'Monday' => 'Montag',
'Tuesday' => 'Dienstag',
'Wednesday' => 'Mittwoch',
'Thursday' => 'Donnerstag',
'Friday' => 'Freitag',
'Saturday' => 'Samstag',
'Sunday' => 'Sonntag',
);
$lang->unit_meridiem = array(
'am' => 'am',
'pm' => 'pm',
'AM' => 'AM',
'PM' => 'PM',
);
$lang->time_gap = array(
'min' => 'Vor %d Minute',
'mins' => '%d Stunden',
'hour' => '%d Tag',
'hours' => '%d Tage',
);
// Beschreibungen
$lang->about_tag = 'Sie können mehrere Tags, indem Sie ein Komma (,) zwischen den einzelnen Tag';
$lang->about_layout = 'Layouts schmücken das Aussehen Ihrer Module. Sie können sie von Layout-Menü am oberen Rand ';
// Messages
$lang->msg_call_server = 'Anfordern an den Server, bitte warten';
$lang->msg_db_not_setted = 'DB-Konfiguration wurde nicht festgelegt ';
$lang->msg_db_not_setted = 'DB-Konfiguration wurde nicht festgelegt';
$lang->msg_dbconnect_failed = "Error has occurred while connecting DB.\nPlease check DB information again"; // TODO:translation en -> ge
$lang->msg_invalid_queryid = 'spezifiziert Abfrage ID-Wert ist ungültig';
$lang->msg_not_permitted = 'Sie haben keine Berechtigung zum Zugriff auf';
$lang->msg_input_password = 'Bitte geben Sie das Passwort';
@ -247,7 +273,6 @@
2. 자동 업데이트등에서 FTP 정보를 이용할 있습니다.<br/>
FTP정보는 files/config/ftp.config.php 파일내에 정보가 저장됩니다.<br/>
그리고 설치 관리자 페이지에서 FTP 정보를 변경하거나 제거할 있습니다.<br />
<strong>FTP 정보 노출을 원하지 않으시면 입력하지 않으셔도 됩니다</strong>
";
$lang->msg_safe_mode_ftp_needed = "PHP의 safe_mode가 On일 경우 FTP 정보를 꼭 입력해주셔야 XE의 설치 및 사용이 가능합니다";

View file

@ -62,7 +62,8 @@
$lang->cmd_publish = "発行";
$lang->cmd_layout_setup = 'レイアウト設定';
$lang->cmd_layout_edit = 'レイアウト編集';
$lang->cmd_search_by_ipaddress = 'IP주소로 검색';
$lang->cmd_search_by_ipaddress = 'IPアドレスで検索';
$lang->cmd_add_ip_to_spamfilter = 'スパムフィルターにIPを追加';
$lang->enable = '可能';
$lang->disable = '不可';
@ -72,10 +73,10 @@
$lang->notice = 'お知らせ';
$lang->secret = '非公開';
$lang->category = $lang->category_srl = 'カテゴリ';
$lang->none_category = 'None category';
$lang->none_category = 'カテゴリ無し';
$lang->document_srl = '書き込み番号';
$lang->user_id = 'ユーザID';
$lang->author = '作者';
$lang->author = '作者';
$lang->password = 'パスワード';
$lang->password1 = 'パスワード';
$lang->password2 = 'パスワード確認';
@ -133,7 +134,7 @@
$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 = '会員数';
@ -159,8 +160,8 @@
$lang->notuse = '未使用';
$lang->not_exists = 'なし';
$lang->public = 'public';
$lang->private = 'private';
$lang->public = '公開';
$lang->private = '非公開';
$lang->unit_sec = '秒';
$lang->unit_min = '分';
@ -170,13 +171,38 @@
$lang->unit_month = '月';
$lang->unit_year = '年';
// 説明関連
$lang->unit_week = array(
'Monday' => '月',
'Tuesday' => '火',
'Wednesday' => '水',
'Thursday' => '木',
'Friday' => '金',
'Saturday' => '土',
'Sunday' => '日',
);
$lang->unit_meridiem = array(
'am' => '午前',
'pm' => '午後',
'AM' => '午前',
'PM' => '午後',
);
$lang->time_gap = array(
'min' => '%d 分前',
'mins' => '%d 分前',
'hour' => '%d 時間前',
'hours' => '%d 時間前',
);
// 説明関連
$lang->about_tag = 'タグを入力する時、「,」(半角コンマ)を使うと複数登録できます。';
$lang->about_layout = 'レイアウトでモジュールの枠をデザインします。上段のレイアウトメニューで管理できます。';
// メッセージ関連
$lang->msg_call_server = 'サーバへ問合わせ中です。しばらくお待ちください。';
$lang->msg_db_not_setted = 'DBが設定されていません。';
$lang->msg_dbconnect_failed = "データベースアクセスにエラーが発生しました。\nデータベースの情報をもう一度確認してください。";
$lang->msg_invalid_queryid = 'クエリIDの値が無効です。';
$lang->msg_not_permitted = '権限がありません。';
$lang->msg_input_password = 'パスワードを入力してください。';
@ -196,7 +222,7 @@
$lang->success_updated = '修正しました。';
$lang->success_deleted = '削除しました。';
$lang->success_voted = '推薦しました。';
$lang->success_blamed = 'Blamed success_blamed';
$lang->success_blamed = '非推薦しました。';
$lang->success_moved = '移動しました。';
$lang->success_sended = '送信しました。';
$lang->success_reset = '初期化しました。';
@ -207,7 +233,7 @@
$lang->fail_to_move = '移動に失敗しました。';
$lang->failed_voted = '推薦できません。';
$lang->failed_blamed = 'Could not blame';
$lang->failed_blamed = '非推薦できません。';
$lang->failed_declared = '通報できません。';
$lang->fail_to_delete_have_children = '返信の書き込みがあり、削除できません。';
@ -221,8 +247,8 @@
$lang->column_type = 'タイプ';
$lang->column_type_list['text'] = '入力フィールド(text)';
$lang->column_type_list['homepage'] = 'ホームページタイプ(url)';
$lang->column_type_list['email_address'] = 'メールタイプ(email)';
$lang->column_type_list['homepage'] = 'URLタイプ(url)';
$lang->column_type_list['email_address'] = 'メールアドレスタイプ(email)';
$lang->column_type_list['tel'] = '電話番号タイプ(phone)';
$lang->column_type_list['textarea'] = 'テキストエリア(textarea)';
$lang->column_type_list['checkbox'] = 'チェックボックス(checkbox)';
@ -237,37 +263,36 @@
$lang->is_required = '必須項目';
// ftp 관련
$lang->ftp_form_title = 'FTP 정보 입력';
$lang->ftp_form_title = 'FTP情報の入力';
$lang->ftp = 'FTP';
$lang->ftp_port = 'FTP port';
$lang->cmd_check_ftp_connect = 'FTP 접속 확인';
$lang->cmd_check_ftp_connect = 'FTP接続確認';
$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 />
<strong>FTP 정보 노출을 원하지 않으시면 입력하지 않으셔도 됩니다</strong>
FTP情報は次の場合、利用されます。<br/>
1. PHPの safe_mode=Onになった際、FTP情報を用いてゼロボードXEが正常に動きます。<br/>
2. 自動アップデート等で、FTP情報が使われます。<br/>
FTP情報は files/config/ftp.config.php の中に保存されます。<br/>
また、ゼロボードXEのインストールの後、管理者画面からFTP情報の変更・削除が可能です。 <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 = "PHPのsafe_modeがOnの場合、FTP情報を登録することで、ゼロボードXEのインストール及び利用が可能になります。";
$lang->msg_ftp_not_connected = "localhostへのFTP接続エラーが発生しました。FTPポート(port)番号をはじめ、FTPサービスが可能であるかをご確認下さい。";
$lang->msg_ftp_invalid_auth_info = "ログインが失敗しました。 FTP情報を再度ご確認下さい。";
$lang->msg_ftp_mkdir_fail = "FTPを用いたディレクトリ生成に失敗しました。FTPサーバーの設定を再度ご確認ください。";
$lang->msg_ftp_chmod_fail = "FTPを用いたディレクトリパーミッション(permission)変更に失敗しました。FTPサーバーの設定を再度ご確認ください。";
$lang->msg_ftp_connect_success = "FTP接続に成功しました。";
// xml filterで用いられているjavascript用のアラートメッセージ
$lang->filter->isnull = '%sを入力してください';
$lang->filter->outofrange = '%sの文字の長さを合わせてください';
$lang->filter->equalto = '%sが正しくありません';
$lang->filter->invalid_email = '%sのパターンが正しくありません (例: zbxe@zeroboard.com)';
$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の形式が正しくありません。半角数字で入力してください。';
$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の形式が正しくありません。半角数字で入力してさい。';
?>

View file

@ -1,272 +1,297 @@
<?php
/**
* @file common/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
// 기본적으로 사용되는 action 언어
$lang->cmd_write = '쓰기';
$lang->cmd_reply = '답글';
$lang->cmd_delete = '삭제';
$lang->cmd_modify = '수정';
$lang->cmd_edit = '편집';
$lang->cmd_view = '보기';
$lang->cmd_view_all = '전체 보기';
$lang->cmd_list = '목록';
$lang->cmd_prev = '이전';
$lang->cmd_next = '다음';
$lang->cmd_send_trackback = '엮인글발송';
$lang->cmd_registration = $lang->cmd_submit = '등록';
$lang->cmd_comment_registration = '댓글 등록';
$lang->cmd_insert = '추가';
$lang->cmd_save = '저장';
$lang->cmd_load = '불러오기';
$lang->cmd_input = '입력';
$lang->cmd_search = '검색';
$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_copy = '복사';
$lang->cmd_move = '이동';
$lang->cmd_move_up = '위로';
$lang->cmd_move_down = '아래로';
$lang->cmd_add_indent = '들이기';
$lang->cmd_remove_indent = '빼내기';
$lang->cmd_management = '관리';
$lang->cmd_make = '생성';
$lang->cmd_select = '선택';
$lang->cmd_select_all = '모두선택';
$lang->cmd_unselect_all = '모두해제';
$lang->cmd_reverse_all = "선택반전";
$lang->cmd_close_all = '모두닫기';
$lang->cmd_open_all = '모두열기';
$lang->cmd_reload = '다시읽기';
$lang->cmd_close = '닫기';
$lang->cmd_open = '열기';
$lang->cmd_setup = '설정';
$lang->cmd_addition_setup = '추가 설정';
$lang->cmd_option = '옵션';
$lang->cmd_apply = '적용';
$lang->cmd_open_calendar = '날짜 선택';
$lang->cmd_send = '발송';
$lang->cmd_print = '인쇄';
$lang->cmd_scrap = '스크랩';
$lang->cmd_preview = '미리 보기';
$lang->cmd_reset = '초기화';
$lang->cmd_remake_cache = "캐시파일 재생성";
$lang->cmd_publish = "발행";
$lang->cmd_layout_setup = '레이아웃 설정';
$lang->cmd_layout_edit = '레이아웃 편집';
$lang->cmd_search_by_ipaddress = 'IP주소로 검색';
$lang->enable = '가능';
$lang->disable = '불가능';
// 기본 단어
$lang->no = '번호';
$lang->notice = '공지';
$lang->secret = '비밀';
$lang->category = $lang->category_srl = '분류';
$lang->none_category = '분류 없음';
$lang->document_srl = '문서번호';
$lang->user_id = '아이디';
$lang->author = '작성자';
$lang->password = '비밀번호';
$lang->password1 = '비밀번호';
$lang->password2 = '비밀번호 확인';
$lang->admin_id = '관리자ID';
$lang->writer = '글쓴이';
$lang->user_name = '이름';
$lang->nick_name = '닉네임';
$lang->email_address = '이메일 주소';
$lang->homepage = '홈페이지';
$lang->blog = '블로그';
$lang->birthday = '생일';
$lang->browser_title = '브라우저 제목';
$lang->title = '제목';
$lang->title_content = '제목+내용';
$lang->topic = '주제';
$lang->replies = '응답';
$lang->content = '내용';
$lang->document = '게시물';
$lang->comment = '댓글';
$lang->description = '설명';
$lang->trackback = '엮인글';
$lang->tag = '태그';
$lang->allow_comment = '댓글허용';
$lang->lock_comment = '댓글잠금';
$lang->allow_trackback = '엮인글허용';
$lang->uploaded_file = '첨부';
$lang->grant = '권한';
$lang->target = '대상';
$lang->total = '전체';
$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->mid = '모듈이름';
$lang->layout = '레이아웃';
$lang->widget = '위젯 ';
$lang->module = '모듈';
$lang->skin = '스킨';
$lang->colorset = '컬러셋';
$lang->extra_vars = '확장변수';
$lang->document_url = '게시글 주소';
$lang->trackback_url = '엮인글 주소';
$lang->blog_name = '블로그이름';
$lang->excerpt = '발췌';
$lang->document_count = '글수';
$lang->page_count = '페이지수';
$lang->list_count = '목록 수';
$lang->search_list_count = '검색 목록 수';
$lang->readed_count = '조회수';
$lang->voted_count = '추천수';
$lang->comment_count = '댓글수';
$lang->member_count = '회원수';
$lang->date = '날짜';
$lang->regdate = '등록일';
$lang->last_update = '최근 수정일';
$lang->last_post = '최근 등록';
$lang->signup_date = '가입일';
$lang->last_login = '최근로그인';
$lang->first_page = '첫페이지';
$lang->last_page = '끝페이지';
$lang->search_target = '검색대상';
$lang->search_keyword = '검색어';
$lang->is_default = '기본';
$lang->no_documents = '등록된 글이 없습니다';
$lang->board_manager = '게시판 관리';
$lang->member_manager = '회원 관리';
$lang->layout_manager = '레이아웃 관리';
$lang->use = '사용';
$lang->notuse = '미사용';
$lang->not_exists = '없음';
$lang->public = '공개';
$lang->private = '비공개';
$lang->unit_sec = '초';
$lang->unit_min = '분';
$lang->unit_hour = '시';
$lang->unit_day = '일';
$lang->unit_week = '주';
$lang->unit_month = '월';
$lang->unit_year = '년';
// 설명 관련
$lang->about_tag = '태그 입력시 , (쉼표)를 이용하시면 복수 등록이 가능합니다';
$lang->about_layout = '레이아웃은 모듈의 껍데기를 꾸며줍니다. 상단 레이아웃 메뉴에서 관리하실 수 있습니다';
// 메세지 관련
$lang->msg_call_server = '서버에 요청중입니다. 잠시만 기다려주세요.';
$lang->msg_db_not_setted = 'DB설정이 되어 있지 않습니다';
$lang->msg_invalid_queryid = 'Query ID값이 잘못 지정되었습니다';
$lang->msg_not_permitted = '권한이 없습니다';
$lang->msg_input_password = '비밀번호를 입력하여 주세요';
$lang->msg_invalid_document = '잘못된 문서번호입니다';
$lang->msg_invalid_request = '잘못된 요청입니다';
$lang->msg_invalid_password = '비밀번호가 올바르지 않습니다';
$lang->msg_error_occured = '오류가 발생하였습니다';
$lang->msg_not_founded = '대상을 찾을 수 없습니다';
$lang->msg_no_result = '검색 결과가 없습니다';
$lang->msg_not_permitted_act = '요청하신 action을 실행할 수 있는 권한이 없습니다';
$lang->msg_module_is_not_exists = '요청하신 모듈을 찾을 수 없습니다';
$lang->msg_module_is_not_standalone = '요청하신 모듈은 독립적으로 동작할 수가 없습니다';
$lang->success_registed = '등록되었습니다';
$lang->success_declared = '신고되었습니다';
$lang->success_updated = '수정되었습니다';
$lang->success_deleted = '삭제되었습니다';
$lang->success_voted = '추천되었습니다';
$lang->success_blamed = '비추천되었습니다';
$lang->success_moved = '이동되었습니다';
$lang->success_sended = '발송되었습니다';
$lang->success_reset = '초기화되었습니다';
$lang->success_leaved = '탈퇴되었습니다';
$lang->success_saved = '저장되었습니다';
$lang->fail_to_delete = '삭제 실패하였습니다';
$lang->fail_to_move = '이동 실패하였습니다';
$lang->failed_voted = '추천하실 수 없습니다';
$lang->failed_blamed = '비추천하실 수 없습니다';
$lang->failed_declared = '신고를 하실 수 없습니다';
$lang->fail_to_delete_have_children = '답글이 있어서 삭제할 수 없습니다';
$lang->confirm_submit = '등록하시겠습니까?';
$lang->confirm_logout = '로그아웃하시겠습니까?';
$lang->confirm_vote = '추천하시겠습니까?';
$lang->confirm_delete = '삭제하시겠습니까?';
$lang->confirm_move = '이동하시겠습니까?';
$lang->confirm_reset = '초기화 하시겠습니까??';
$lang->confirm_leave = '탈퇴 하시겠습니까??';
$lang->column_type = '형식';
$lang->column_type_list['text'] = '한줄 입력칸 (text)';
$lang->column_type_list['homepage'] = '홈페이지 형식 (url)';
$lang->column_type_list['email_address'] = '이메일 형식 (email)';
$lang->column_type_list['tel'] = '전화번호 형식 (phone)';
$lang->column_type_list['textarea'] = '여러줄 입력칸 (textarea)';
$lang->column_type_list['checkbox'] = '다중 선택 (checkbox)';
$lang->column_type_list['select'] = '단일 선택 (select)';
$lang->column_type_list['kr_zip'] = '한국주소 (zip)';
$lang->column_type_list['date'] = '일자 (년월일)';
//$lang->column_type_list['jp_zip'] = '일본주소 (zip)';
$lang->column_name = '입력항목 이름';
$lang->column_title = '입력항목 제목';
$lang->default_value = '기본 값';
$lang->is_active = '활성';
$lang->is_required = '필수항목';
// ftp 관련
$lang->ftp_form_title = 'FTP 정보 입력';
$lang->ftp = 'FTP';
$lang->ftp_port = 'FTP port';
$lang->cmd_check_ftp_connect = 'FTP 접속 확인';
$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 />
<strong>FTP 정보 노출을 원하지 않으시면 입력하지 않으셔도 됩니다</strong>
";
$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 접속 및 인증 성공하였습니다";
// xml filter에서 사용되는 javascript용 alert msg
$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의 형식이 잘못되었습니다. 숫자로만 입력해주셔야 합니다';
?>
<?php
/**
* @file common/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
// 기본적으로 사용되는 action 언어
$lang->cmd_write = '쓰기';
$lang->cmd_reply = '답글';
$lang->cmd_delete = '삭제';
$lang->cmd_modify = '수정';
$lang->cmd_edit = '편집';
$lang->cmd_view = '보기';
$lang->cmd_view_all = '전체 보기';
$lang->cmd_list = '목록';
$lang->cmd_prev = '이전';
$lang->cmd_next = '다음';
$lang->cmd_send_trackback = '엮인글발송';
$lang->cmd_registration = $lang->cmd_submit = '등록';
$lang->cmd_comment_registration = '댓글 등록';
$lang->cmd_insert = '추가';
$lang->cmd_save = '저장';
$lang->cmd_load = '불러오기';
$lang->cmd_input = '입력';
$lang->cmd_search = '검색';
$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_copy = '복사';
$lang->cmd_move = '이동';
$lang->cmd_move_up = '위로';
$lang->cmd_move_down = '아래로';
$lang->cmd_add_indent = '들이기';
$lang->cmd_remove_indent = '빼내기';
$lang->cmd_management = '관리';
$lang->cmd_make = '생성';
$lang->cmd_select = '선택';
$lang->cmd_select_all = '모두선택';
$lang->cmd_unselect_all = '모두해제';
$lang->cmd_reverse_all = "선택반전";
$lang->cmd_close_all = '모두닫기';
$lang->cmd_open_all = '모두열기';
$lang->cmd_reload = '다시읽기';
$lang->cmd_close = '닫기';
$lang->cmd_open = '열기';
$lang->cmd_setup = '설정';
$lang->cmd_addition_setup = '추가 설정';
$lang->cmd_option = '옵션';
$lang->cmd_apply = '적용';
$lang->cmd_open_calendar = '날짜 선택';
$lang->cmd_send = '발송';
$lang->cmd_print = '인쇄';
$lang->cmd_scrap = '스크랩';
$lang->cmd_preview = '미리 보기';
$lang->cmd_reset = '초기화';
$lang->cmd_remake_cache = "캐시파일 재생성";
$lang->cmd_publish = "발행";
$lang->cmd_layout_setup = '레이아웃 설정';
$lang->cmd_layout_edit = '레이아웃 편집';
$lang->cmd_search_by_ipaddress = 'IP주소로 검색';
$lang->cmd_add_ip_to_spamfilter = '스팸필터에 IP추가';
$lang->enable = '가능';
$lang->disable = '불가능';
// 기본 단어
$lang->no = '번호';
$lang->notice = '공지';
$lang->secret = '비밀';
$lang->category = $lang->category_srl = '분류';
$lang->none_category = '분류 없음';
$lang->document_srl = '문서번호';
$lang->user_id = '아이디';
$lang->author = '작성자';
$lang->password = '비밀번호';
$lang->password1 = '비밀번호';
$lang->password2 = '비밀번호 확인';
$lang->admin_id = '관리자ID';
$lang->writer = '글쓴이';
$lang->user_name = '이름';
$lang->nick_name = '닉네임';
$lang->email_address = '이메일 주소';
$lang->homepage = '홈페이지';
$lang->blog = '블로그';
$lang->birthday = '생일';
$lang->browser_title = '브라우저 제목';
$lang->title = '제목';
$lang->title_content = '제목+내용';
$lang->topic = '주제';
$lang->replies = '댓글';
$lang->content = '내용';
$lang->document = '게시물';
$lang->comment = '댓글';
$lang->description = '설명';
$lang->trackback = '엮인글';
$lang->tag = '태그';
$lang->allow_comment = '댓글허용';
$lang->lock_comment = '댓글잠금';
$lang->allow_trackback = '엮인글허용';
$lang->uploaded_file = '첨부';
$lang->grant = '권한';
$lang->target = '대상';
$lang->total = '전체';
$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->mid = '모듈이름';
$lang->layout = '레이아웃';
$lang->widget = '위젯 ';
$lang->module = '모듈';
$lang->skin = '스킨';
$lang->colorset = '컬러셋';
$lang->extra_vars = '확장변수';
$lang->document_url = '게시글 주소';
$lang->trackback_url = '엮인글 주소';
$lang->blog_name = '블로그이름';
$lang->excerpt = '발췌';
$lang->document_count = '글수';
$lang->page_count = '페이지수';
$lang->list_count = '목록 수';
$lang->search_list_count = '검색 목록 수';
$lang->readed_count = '조회수';
$lang->voted_count = '추천수';
$lang->comment_count = '댓글수';
$lang->member_count = '회원수';
$lang->date = '날짜';
$lang->regdate = '등록일';
$lang->last_update = '최근 수정일';
$lang->last_post = '마지막 댓글';
$lang->signup_date = '가입일';
$lang->last_login = '최근로그인';
$lang->first_page = '첫페이지';
$lang->last_page = '끝페이지';
$lang->search_target = '검색대상';
$lang->search_keyword = '검색어';
$lang->is_default = '기본';
$lang->no_documents = '등록된 글이 없습니다';
$lang->board_manager = '게시판 관리';
$lang->member_manager = '회원 관리';
$lang->layout_manager = '레이아웃 관리';
$lang->use = '사용';
$lang->notuse = '미사용';
$lang->not_exists = '없음';
$lang->public = '공개';
$lang->private = '비공개';
$lang->unit_sec = '초';
$lang->unit_min = '분';
$lang->unit_hour = '시';
$lang->unit_day = '일';
$lang->unit_week = '주';
$lang->unit_month = '월';
$lang->unit_year = '년';
$lang->unit_week = array(
'Monday' => '월',
'Tuesday' => '화',
'Wednesday' => '수',
'Thursday' => '목',
'Friday' => '금',
'Saturday' => '토',
'Sunday' => '일',
);
$lang->unit_meridiem = array(
'am' => '오전',
'pm' => '오후',
'AM' => '오전',
'PM' => '오후',
);
$lang->time_gap = array(
'min' => '%d 분전',
'mins' => '%d 분전',
'hour' => '%d 시간전',
'hours' => '%d 시간전',
);
// 설명 관련
$lang->about_tag = '태그 입력시 , (쉼표)를 이용하시면 복수 등록이 가능합니다';
$lang->about_layout = '레이아웃은 모듈의 껍데기를 꾸며줍니다. 상단 레이아웃 메뉴에서 관리하실 수 있습니다';
// 메세지 관련
$lang->msg_call_server = '서버에 요청중입니다. 잠시만 기다려주세요.';
$lang->msg_db_not_setted = 'DB설정이 되어 있지 않습니다';
$lang->msg_dbconnect_failed = "DB접속 오류가 발생하였습니다.\nDB정보를 다시 확인해주세요.";
$lang->msg_invalid_queryid = 'Query ID값이 잘못 지정되었습니다';
$lang->msg_not_permitted = '권한이 없습니다';
$lang->msg_input_password = '비밀번호를 입력하여 주세요';
$lang->msg_invalid_document = '잘못된 문서번호입니다';
$lang->msg_invalid_request = '잘못된 요청입니다';
$lang->msg_invalid_password = '비밀번호가 올바르지 않습니다';
$lang->msg_error_occured = '오류가 발생하였습니다';
$lang->msg_not_founded = '대상을 찾을 수 없습니다';
$lang->msg_no_result = '검색 결과가 없습니다';
$lang->msg_not_permitted_act = '요청하신 action을 실행할 수 있는 권한이 없습니다';
$lang->msg_module_is_not_exists = '요청하신 모듈을 찾을 수 없습니다';
$lang->msg_module_is_not_standalone = '요청하신 모듈은 독립적으로 동작할 수가 없습니다';
$lang->success_registed = '등록되었습니다';
$lang->success_declared = '신고되었습니다';
$lang->success_updated = '수정되었습니다';
$lang->success_deleted = '삭제되었습니다';
$lang->success_voted = '추천되었습니다';
$lang->success_blamed = '비추천되었습니다';
$lang->success_moved = '이동되었습니다';
$lang->success_sended = '발송되었습니다';
$lang->success_reset = '초기화되었습니다';
$lang->success_leaved = '탈퇴되었습니다';
$lang->success_saved = '저장되었습니다';
$lang->fail_to_delete = '삭제 실패하였습니다';
$lang->fail_to_move = '이동 실패하였습니다';
$lang->failed_voted = '추천하실 수 없습니다';
$lang->failed_blamed = '비추천하실 수 없습니다';
$lang->failed_declared = '신고를 하실 수 없습니다';
$lang->fail_to_delete_have_children = '답글이 있어서 삭제할 수 없습니다';
$lang->confirm_submit = '등록하시겠습니까?';
$lang->confirm_logout = '로그아웃하시겠습니까?';
$lang->confirm_vote = '추천하시겠습니까?';
$lang->confirm_delete = '삭제하시겠습니까?';
$lang->confirm_move = '이동하시겠습니까?';
$lang->confirm_reset = '초기화 하시겠습니까??';
$lang->confirm_leave = '탈퇴 하시겠습니까??';
$lang->column_type = '형식';
$lang->column_type_list['text'] = '한줄 입력칸 (text)';
$lang->column_type_list['homepage'] = '홈페이지 형식 (url)';
$lang->column_type_list['email_address'] = '이메일 형식 (email)';
$lang->column_type_list['tel'] = '전화번호 형식 (phone)';
$lang->column_type_list['textarea'] = '여러줄 입력칸 (textarea)';
$lang->column_type_list['checkbox'] = '다중 선택 (checkbox)';
$lang->column_type_list['select'] = '단일 선택 (select)';
$lang->column_type_list['kr_zip'] = '한국주소 (zip)';
$lang->column_type_list['date'] = '일자 (년월일)';
//$lang->column_type_list['jp_zip'] = '일본주소 (zip)';
$lang->column_name = '입력항목 이름';
$lang->column_title = '입력항목 제목';
$lang->default_value = '기본 값';
$lang->is_active = '활성';
$lang->is_required = '필수항목';
// ftp 관련
$lang->ftp_form_title = 'FTP 정보 입력';
$lang->ftp = 'FTP';
$lang->ftp_port = 'FTP port';
$lang->cmd_check_ftp_connect = 'FTP 접속 확인';
$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 />
";
$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 접속 및 인증 성공하였습니다";
// xml filter에서 사용되는 javascript용 alert msg
$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의 형식이 잘못되었습니다. 숫자로만 입력해주셔야 합니다';
?>

View file

@ -1,7 +1,8 @@
ko,한국어
en,English
zh-CN,中文
zh-CN,简体中文
jp,日本語
es,Español
ru,Русский
fr,Français
zh-TW,正體中文

View file

@ -2,7 +2,7 @@
/**
* @file ru.lang.php
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack for Zeroboard XE
* @brief Russian basic language pack
**/
// Основные слова для действий
@ -62,7 +62,8 @@
$lang->cmd_publish = "Опубликовать";
$lang->cmd_layout_setup = 'Конфигурировать лейаут';
$lang->cmd_layout_edit = 'Редактировать лейаут';
$lang->cmd_search_by_ipaddress = 'IP주소로 검색';
$lang->cmd_search_by_ipaddress = 'Search by IP Address';
$lang->cmd_add_ip_to_spamfilter = 'Add IP to spamfilter';
$lang->enable = 'Включено';
$lang->disable = 'Выключено';
@ -170,6 +171,30 @@
$lang->unit_month = 'мес.';
$lang->unit_year = 'г.';
$lang->unit_week = array(
'Monday' => 'Monday',
'Tuesday' => 'Tuesday',
'Wednesday' => 'Wednesday',
'Thursday' => 'Thursday',
'Friday' => 'Friday',
'Saturday' => 'Saturday',
'Sunday' => 'Sunday',
);
$lang->unit_meridiem = array(
'am' => 'am',
'pm' => 'pm',
'AM' => 'AM',
'PM' => 'PM',
);
$lang->time_gap = array(
'min' => '%d minute ago',
'mins' => '%d minutes ago',
'hour' => '%d hour ago',
'hours' => '%d hours ago',
);
// Описания
$lang->about_tag = 'Вы можете применить несколько тегов, разделенных запятыми (,)';
$lang->about_layout = 'Лейауты украшают внешний вид Ваших модулей. Вы можете сконфигирировать их с помощью меню Лейаут сверху';
@ -177,6 +202,7 @@
// Сообщение
$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_input_password = 'Пожалуйста, введите пароль';
@ -245,7 +271,6 @@
2. 자동 업데이트등에서 FTP 정보를 이용할 있습니다.<br/>
FTP정보는 files/config/ftp.config.php 파일내에 정보가 저장됩니다.<br/>
그리고 설치 관리자 페이지에서 FTP 정보를 변경하거나 제거할 있습니다.<br />
<strong>FTP 정보 노출을 원하지 않으시면 입력하지 않으셔도 됩니다</strong>
";
$lang->msg_safe_mode_ftp_needed = "PHP의 safe_mode가 On일 경우 FTP 정보를 꼭 입력해주셔야 XE의 설치 및 사용이 가능합니다";

View file

@ -63,6 +63,7 @@
$lang->cmd_layout_setup = '布局设置';
$lang->cmd_layout_edit = '编辑布局';
$lang->cmd_search_by_ipaddress = '以IP地址搜索';
$lang->cmd_add_ip_to_spamfilter = '禁止IP';
$lang->enable = '可用';
$lang->disable = '禁用';
@ -170,6 +171,30 @@
$lang->unit_month = '月';
$lang->unit_year = '年';
$lang->unit_week = array(
'Monday' => '星期一',
'Tuesday' => '星期二',
'Wednesday' => '星期三',
'Thursday' => '星期四',
'Friday' => '星期五',
'Saturday' => '星期六',
'Sunday' => '星期日',
);
$lang->unit_meridiem = array(
'am' => '上午',
'pm' => '下午',
'AM' => '上午',
'PM' => '下午',
);
$lang->time_gap = array(
'min' => '%d分钟前',
'mins' => '%d分钟前',
'hour' => '%d小时前',
'hours' => '%d小时前',
);
// 说明
$lang->about_tag = '用逗号分隔多个标签';
$lang->about_layout = '布局是布置模块的外观,在上端布局菜里单可以进行管理';
@ -177,6 +202,7 @@
// 信息
$lang->msg_call_server = '系统正在链接服务器,请稍后。';
$lang->msg_db_not_setted = '还没有设定 DB';
$lang->msg_dbconnect_failed = "连接DB时发生错误。\n请重新确认DB信息。";
$lang->msg_invalid_queryid = 'Query ID值指定错误';
$lang->msg_not_permitted = '没有权限';
$lang->msg_input_password = '请输入密码';
@ -236,26 +262,25 @@
$lang->is_active = '激活';
$lang->is_required = '必填';
// ftp 관련
$lang->ftp_form_title = 'FTP 정보 입력';
// ftp 相关
$lang->ftp_form_title = '输入FTP信息';
$lang->ftp = 'FTP';
$lang->ftp_port = 'FTP port';
$lang->cmd_check_ftp_connect = 'FTP 접속 확인';
$lang->cmd_check_ftp_connect = '测试FTP连接';
$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 />
<strong>FTP 정보 노출을 원하지 않으시면 입력하지 않으셔도 됩니다</strong>
相关FTP信息应用于如下几种状况:<br/>
1. 当PHP的safe_mode=On时也能使程序工作正常。<br/>
2. 可以应用于自动更新。<br/>
此FTP信息将保存在files/config/ftp.config.php文件当中。<br/>
安装程序后可在管理页面对FTP信息进行修改或删除操作。<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 = "当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服务器设置。";
$lang->msg_ftp_chmod_fail = "修改文件夹属性失败。请确认 FTP服务器设置。";
$lang->msg_ftp_connect_success = "FTP连接成功。";
// 在xml filter使用的 javascript用 alert msg

297
common/lang/zh-TW.lang.php Normal file
View file

@ -0,0 +1,297 @@
<?php
/**
* @file common/lang/zh-TW.lang.php
* @author zero (zero@nzeo.com) 翻譯royallin
* @brief 正體中文語言(包含基本內容)
**/
// 基本使用的語言
$lang->cmd_write = '發表';
$lang->cmd_reply = '回覆';
$lang->cmd_delete = '刪除';
$lang->cmd_modify = '修改';
$lang->cmd_edit = '編輯';
$lang->cmd_view = '檢視';
$lang->cmd_view_all = '全部檢視';
$lang->cmd_list = '列表';
$lang->cmd_prev = '上一頁';
$lang->cmd_next = '下一頁';
$lang->cmd_send_trackback = '發送引用';
$lang->cmd_registration = $lang->cmd_submit = '確定';
$lang->cmd_comment_registration = '送出評論';
$lang->cmd_insert = '插入';
$lang->cmd_save = '儲存';
$lang->cmd_load = '讀取';
$lang->cmd_input = '輸入';
$lang->cmd_search = '搜尋';
$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_copy = '複製';
$lang->cmd_move = '移動';
$lang->cmd_move_up = '向上';
$lang->cmd_move_down = '向下';
$lang->cmd_add_indent = '拉長';
$lang->cmd_remove_indent = '縮短';
$lang->cmd_management = '管理';
$lang->cmd_make = '建立';
$lang->cmd_select = '選擇';
$lang->cmd_select_all = '全部選擇';
$lang->cmd_unselect_all = '全部解除';
$lang->cmd_reverse_all = "反選";
$lang->cmd_close_all = '全部收合';
$lang->cmd_open_all = '全部展開';
$lang->cmd_reload = '重新讀取';
$lang->cmd_close = '關閉';
$lang->cmd_open = '開啟';
$lang->cmd_setup = '設置';
$lang->cmd_addition_setup = '延伸設置';
$lang->cmd_option = '選項';
$lang->cmd_apply = '套用';
$lang->cmd_open_calendar = '選擇日期';
$lang->cmd_send = '發送';
$lang->cmd_print = '列印';
$lang->cmd_scrap = '收藏';
$lang->cmd_preview = '預覽';
$lang->cmd_reset = '重置';
$lang->cmd_remake_cache = "重新建立暫存檔";
$lang->cmd_publish = "發表";
$lang->cmd_layout_setup = '版面設置';
$lang->cmd_layout_edit = '版面編輯';
$lang->cmd_search_by_ipaddress = '以 IP位址搜尋';
$lang->cmd_add_ip_to_spamfilter = '新增 IP至垃圾過濾器';
$lang->enable = '可用';
$lang->disable = '禁用';
// 基本詞語
$lang->no = '編號';
$lang->notice = '公告';
$lang->secret = '秘密';
$lang->category = $lang->category_srl = '分類';
$lang->none_category = '無分類';
$lang->document_srl = '文章編號';
$lang->user_id = '帳號';
$lang->author = '作者';
$lang->password = '密碼';
$lang->password1 = '新密碼';
$lang->password2 = '確認密碼';
$lang->admin_id = '管理員帳號';
$lang->writer = '作者';
$lang->user_name = '姓名';
$lang->nick_name = '暱稱';
$lang->email_address = '電子郵件';
$lang->homepage = '主頁';
$lang->blog = '部落格';
$lang->birthday = '生日';
$lang->browser_title = '瀏覽器標題';
$lang->title = '標題';
$lang->title_content = '標題+內容';
$lang->topic = '主題';
$lang->replies = '回覆';
$lang->content = '內容';
$lang->document = '文章';
$lang->comment = '評論';
$lang->description = '說明';
$lang->trackback = '引用';
$lang->tag = '標籤';
$lang->allow_comment = '允許評論';
$lang->lock_comment = '關閉評論';
$lang->allow_trackback = '允許引用';
$lang->uploaded_file = '附加檔案';
$lang->grant = '權限';
$lang->target = '目標';
$lang->total = '全部';
$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->mid = '模組名稱';
$lang->layout = '版面';
$lang->widget = '控件 ';
$lang->module = '模組';
$lang->skin = '面板';
$lang->colorset = '顏色設定';
$lang->extra_vars = '延伸變數';
$lang->document_url = '連結網址';
$lang->trackback_url = '引用';
$lang->blog_name = '部落格名稱';
$lang->excerpt = '轉載自';
$lang->document_count = '文章數';
$lang->page_count = '頁數';
$lang->list_count = '列表數';
$lang->search_list_count = '搜尋列表數';
$lang->readed_count = '點閱';
$lang->voted_count = '推薦';
$lang->comment_count = '評論';
$lang->member_count = '會員人數';
$lang->date = '日期';
$lang->regdate = '登錄日期';
$lang->last_update = '最後更新';
$lang->last_post = '最後發表';
$lang->signup_date = '註冊日期';
$lang->last_login = '最近登入';
$lang->first_page = '第一頁';
$lang->last_page = '最後頁';
$lang->search_target = '搜尋目標';
$lang->search_keyword = '關鍵字';
$lang->is_default = '預設';
$lang->no_documents = '目前沒有主題';
$lang->board_manager = '討論板管理';
$lang->member_manager = '會員管理';
$lang->layout_manager = '版面管理';
$lang->use = '使用';
$lang->notuse = '未使用';
$lang->not_exists = '無';
$lang->public = '公開';
$lang->private = '不公開';
$lang->unit_sec = '秒';
$lang->unit_min = '分';
$lang->unit_hour = '時';
$lang->unit_day = '日';
$lang->unit_week = '周';
$lang->unit_month = '月';
$lang->unit_year = '年';
$lang->unit_week = array(
'Monday' => '星期一',
'Tuesday' => '星期二',
'Wednesday' => '星期三',
'Thursday' => '星期四',
'Friday' => '星期五',
'Saturday' => '禮拜六',
'Sunday' => '星期日',
);
$lang->unit_meridiem = array(
'am' => '上午',
'pm' => '下午',
'AM' => '上午',
'PM' => '下午',
);
$lang->time_gap = array(
'min' => '%d 分鐘前',
'mins' => '%d 分鐘前',
'hour' => '%d 小時前',
'hours' => '%d 小時前',
);
// 說明
$lang->about_tag = '用逗號分隔多個標籤';
$lang->about_layout = '版面設計是佈置網站的外觀模組,在上端版面選單中,可以進行管理';
// 訊息
$lang->msg_call_server = '系統正在連結服務器,請稍後。';
$lang->msg_db_not_setted = '還沒有設定資料庫';
$lang->msg_dbconnect_failed = "連接資料庫時發生錯誤。\n請重新確認資料庫資訊。";
$lang->msg_invalid_queryid = 'Query ID值指定錯誤';
$lang->msg_not_permitted = '沒有權限';
$lang->msg_input_password = '請輸入密碼';
$lang->msg_invalid_document = '錯誤的文章編號';
$lang->msg_invalid_request = '錯誤的請求';
$lang->msg_invalid_password = '密碼錯誤';
$lang->msg_error_occured = '發生錯誤';
$lang->msg_not_founded = '找不到相關內容';
$lang->msg_no_result = '找不到與您查詢的相符結果';
$lang->msg_not_permitted_act = '沒有權限執行';
$lang->msg_module_is_not_exists = '找不到您查詢的模組';
$lang->msg_module_is_not_standalone = '您請求的模組不能單獨執行';
$lang->success_registed = '成功送出!';
$lang->success_declared = '檢舉成功!';
$lang->success_updated = '修改成功!';
$lang->success_deleted = '刪除成功!';
$lang->success_voted = '推薦成功!';
$lang->success_blamed = '反對成功!';
$lang->success_moved = '移動成功!';
$lang->success_sended = '發送成功!';
$lang->success_reset = '重設成功!';
$lang->success_leaved = '成功退出!';
$lang->success_saved = '儲存成功!';
$lang->fail_to_delete = '刪除成功!';
$lang->fail_to_move = '移動成功!';
$lang->failed_voted = '您不能推薦!';
$lang->failed_blamed = '您不能反對!';
$lang->failed_declared = '您沒有檢舉權限!';
$lang->fail_to_delete_have_children = '不能刪除有回覆的評論!';
$lang->confirm_submit = '確定要送出嗎?';
$lang->confirm_logout = '確定要登出嗎?';
$lang->confirm_vote = '確定要推薦嗎?';
$lang->confirm_delete = '確定要刪除嗎?';
$lang->confirm_move = '確定要移動嗎?';
$lang->confirm_reset = '確定要重置嗎?';
$lang->confirm_leave = '確定要退出嗎?';
$lang->column_type = '格式';
$lang->column_type_list['text'] = '文字輸入(text)';
$lang->column_type_list['homepage'] = '網址格式 (url)';
$lang->column_type_list['email_address'] = '郵件格式 (email)';
$lang->column_type_list['tel'] = '電話號碼格式 (phone)';
$lang->column_type_list['textarea'] = '文字輸入區塊 (textarea)';
$lang->column_type_list['checkbox'] = '復選框 (checkbox)';
$lang->column_type_list['select'] = '下拉式選單 (select)';
$lang->column_type_list['kr_zip'] = '韓國郵編(zip)';
$lang->column_type_list['date'] = '日期 (年月日)';
//$lang->column_type_list['jp_zip'] = '日本郵編 (zip)';
$lang->column_name = '項目名稱';
$lang->column_title = '項目標題';
$lang->default_value = '預設值';
$lang->is_active = '啟動';
$lang->is_required = '必填';
// 關於 FTP
$lang->ftp_form_title = '輸入 FTP資訊';
$lang->ftp = 'FTP';
$lang->ftp_port = 'FTP Port';
$lang->cmd_check_ftp_connect = '確認 FTP連線';
$lang->about_ftp_info = "
FTP資訊可應用至以下情形<br/>
1. PHP的安全模式(safe_mode)開啟時,可使程式正常運作。<br/>
2. 可用於自動更新。<br/>
這個 FTP資訊會儲存在檔案 files/config/ftp.config.php裡面。<br/>
安裝程式後,可以在管理頁面中針對 FTP資訊進行修改或刪除。<br />
";
$lang->msg_safe_mode_ftp_needed = "當 PHP的安全模式(safe_mode)開啟時,請輸入相關 FTP資訊否則無法正常安裝或使用程式。";
$lang->msg_ftp_not_connected = "本地(localhost)FTP連線錯誤。請確認 FTP Prot或確認是否支援 FTP功能。";
$lang->msg_ftp_invalid_auth_info = "FTP登入失敗。請確認輸入的 FTP資訊。";
$lang->msg_ftp_mkdir_fail = "新增資料夾失敗。請確認 FTP主機設置。";
$lang->msg_ftp_chmod_fail = "修改資料夾權限失敗。請確認 FTP主機設置。";
$lang->msg_ftp_connect_success = "FTP連線成功。";
// 在 xml filter使用的 javascript用 alert msg
$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只能用英文數字和 _第一個字母必須是英文。";
$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只能輸入數字';
?>

View file

@ -2,7 +2,7 @@
<html lang="{Context::getLangType()}" xml:lang="{Context::getLangType()}" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="Generator" content="zeroboardXE {__ZBXE_VERSION__}" />
<meta name="Generator" content="XpressEngine {__ZBXE_VERSION__}" />
<!--@if($module_info->module)-->
<meta name="module" content="{$module_info->module}" />
<!--@end-->

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

BIN
common/tpl/images/iconX.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 B

View file

@ -1,91 +1,91 @@
<?php
@error_reporting(E_ALL ^ E_NOTICE);
/**
* @file config/config.inc.php
* @author zero (zero@nzeo.com)
* @brief 기본적으로 사용하는 class파일의 include 환경 설정을
**/
if(!defined('__ZBXE__')) exit();
/**
* @brief 제로보드XE의 전체 버전 표기
* 내용은 제로보드XE의 버전을 관리자 페이지에 표시하기 위한 용도이며
* config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야
**/
define('__ZBXE_VERSION__', '1.0.6');
/**
* @brief 디버깅 메세지 출력
* 0 : 디버그 메세지를 생성/ 출력하지 않음
* 1 : 전체 실행 시간에 대해서만 메세지 생성/ 출력
* 2 : 1 + DB 쿼리
* 3 : 모든 로그
**/
define('__DEBUG__', 0);
/**
* @brief 디버그 메세지의 출력 장소
* 0 : files/_debug_message.php 연결하여 출력
* 1 : Response Method XML 형식이 아닐 경우 브라우저에 최상단에 주석으로 표시
**/
define('__DEBUG_OUTPUT__', 0);
/**
* @brief DB 오류 메세지 출력 정의
* 0 : 출력하지 않음
* 1 : files/_debug_db_query.php 연결하여 출력
**/
define('__DEBUG_DB_OUTPUT__', 0);
/**
* @brief DB 쿼리중 정해진 시간을 넘기는 쿼리의 로그 남김
* 0 : 로그를 남기지 않음
* 0 이상 : 단위를 초로 하여 지정된 이상의 실행시간이 걸린 쿼리를 로그로 남김
* 로그파일은 ./files/_db_slow_query.php 파일로 저장됨
**/
define('__LOG_SLOW_QUERY__', 0);
/**
* @brief ob_gzhandler를 이용한 압축 기능을 강제로 사용하거나 끄는 옵션
* 0 : 사용하지 않음
* 1 : 사용함
* 대부분의 서버에서는 문제가 없는데 특정 서버군에서 압축전송시 IE에서 오동작을 일으키는경우가 있음
**/
define('__OB_GZHANDLER_ENABLE__', 1);
/**
* @brief zbXE가 설치된 장소의 base path를 구함
**/
define('_XE_PATH_', str_replace('config/config.inc.php', '', str_replace('\\', '/', __FILE__)));
/**
* @brief 간단하게 사용하기 위한 함수 정의한 파일 require
**/
require_once(_XE_PATH_.'config/func.inc.php');
if(__DEBUG__) define('__StartTime__', getMicroTime());
/**
* @brief 기본적인 class 파일 include
*
* php5 기반으로 바꾸게 되면 _autoload를 이용할 있기에 제거 대상
**/
if(__DEBUG__) define('__ClassLoadStartTime__', getMicroTime());
require_once(_XE_PATH_.'classes/object/Object.class.php');
require_once(_XE_PATH_.'classes/handler/Handler.class.php');
require_once(_XE_PATH_.'classes/xml/XmlParser.class.php');
require_once(_XE_PATH_.'classes/context/Context.class.php');
require_once(_XE_PATH_.'classes/db/DB.class.php');
require_once(_XE_PATH_.'classes/file/FileHandler.class.php');
require_once(_XE_PATH_.'classes/widget/WidgetHandler.class.php');
require_once(_XE_PATH_.'classes/editor/EditorHandler.class.php');
require_once(_XE_PATH_.'classes/module/ModuleObject.class.php');
require_once(_XE_PATH_.'classes/module/ModuleHandler.class.php');
require_once(_XE_PATH_.'classes/display/DisplayHandler.class.php');
require_once(_XE_PATH_.'classes/template/TemplateHandler.class.php');
require_once(_XE_PATH_.'classes/mail/Mail.class.php');
if(__DEBUG__) $GLOBALS['__elapsed_class_load__'] = getMicroTime() - __ClassLoadStartTime__;
?>
<?php
@error_reporting(E_ALL ^ E_NOTICE);
/**
* @file config/config.inc.php
* @author zero (zero@nzeo.com)
* @brief 기본적으로 사용하는 class파일의 include 환경 설정을
**/
if(!defined('__ZBXE__')) exit();
/**
* @brief XE의 전체 버전 표기
* 내용은 XE의 버전을 관리자 페이지에 표시하기 위한 용도이며
* config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야
**/
define('__ZBXE_VERSION__', '1.1.0');
/**
* @brief 디버깅 메세지 출력
* 0 : 디버그 메세지를 생성/ 출력하지 않음
* 1 : 전체 실행 시간에 대해서만 메세지 생성/ 출력
* 2 : 1 + DB 쿼리
* 3 : 모든 로그
**/
define('__DEBUG__', 0);
/**
* @brief 디버그 메세지의 출력 장소
* 0 : files/_debug_message.php 연결하여 출력
* 1 : Response Method XML 형식이 아닐 경우 브라우저에 최상단에 주석으로 표시
**/
define('__DEBUG_OUTPUT__', 0);
/**
* @brief DB 오류 메세지 출력 정의
* 0 : 출력하지 않음
* 1 : files/_debug_db_query.php 연결하여 출력
**/
define('__DEBUG_DB_OUTPUT__', 0);
/**
* @brief DB 쿼리중 정해진 시간을 넘기는 쿼리의 로그 남김
* 0 : 로그를 남기지 않음
* 0 이상 : 단위를 초로 하여 지정된 이상의 실행시간이 걸린 쿼리를 로그로 남김
* 로그파일은 ./files/_db_slow_query.php 파일로 저장됨
**/
define('__LOG_SLOW_QUERY__', 0);
/**
* @brief ob_gzhandler를 이용한 압축 기능을 강제로 사용하거나 끄는 옵션
* 0 : 사용하지 않음
* 1 : 사용함
* 대부분의 서버에서는 문제가 없는데 특정 서버군에서 압축전송시 IE에서 오동작을 일으키는경우가 있음
**/
define('__OB_GZHANDLER_ENABLE__', 1);
/**
* @brief zbXE가 설치된 장소의 base path를 구함
**/
define('_XE_PATH_', str_replace('config/config.inc.php', '', str_replace('\\', '/', __FILE__)));
/**
* @brief 간단하게 사용하기 위한 함수 정의한 파일 require
**/
require_once(_XE_PATH_.'config/func.inc.php');
if(__DEBUG__) define('__StartTime__', getMicroTime());
/**
* @brief 기본적인 class 파일 include
*
* php5 기반으로 바꾸게 되면 _autoload를 이용할 있기에 제거 대상
**/
if(__DEBUG__) define('__ClassLoadStartTime__', getMicroTime());
require_once(_XE_PATH_.'classes/object/Object.class.php');
require_once(_XE_PATH_.'classes/handler/Handler.class.php');
require_once(_XE_PATH_.'classes/xml/XmlParser.class.php');
require_once(_XE_PATH_.'classes/context/Context.class.php');
require_once(_XE_PATH_.'classes/db/DB.class.php');
require_once(_XE_PATH_.'classes/file/FileHandler.class.php');
require_once(_XE_PATH_.'classes/widget/WidgetHandler.class.php');
require_once(_XE_PATH_.'classes/editor/EditorHandler.class.php');
require_once(_XE_PATH_.'classes/module/ModuleObject.class.php');
require_once(_XE_PATH_.'classes/module/ModuleHandler.class.php');
require_once(_XE_PATH_.'classes/display/DisplayHandler.class.php');
require_once(_XE_PATH_.'classes/template/TemplateHandler.class.php');
require_once(_XE_PATH_.'classes/mail/Mail.class.php');
if(__DEBUG__) $GLOBALS['__elapsed_class_load__'] = getMicroTime() - __ClassLoadStartTime__;
?>

View file

@ -29,7 +29,7 @@
');
}
// time zone
$time_zone = array(
'-1200' => '[GMT -12:00] Baker Island Time',
@ -90,7 +90,7 @@
* @return module controller instance
**/
function &getController($module_name) {
return getModule($module_name, 'controller');
return getModule($module_name, 'controller');
}
/**
@ -99,7 +99,7 @@
* @return module admin controller instance
**/
function &getAdminController($module_name) {
return getModule($module_name, 'controller','admin');
return getModule($module_name, 'controller','admin');
}
/**
@ -108,7 +108,7 @@
* @return module view instance
**/
function &getView($module_name) {
return getModule($module_name, 'view');
return getModule($module_name, 'view');
}
/**
@ -117,7 +117,7 @@
* @return module admin view instance
**/
function &getAdminView($module_name) {
return getModule($module_name, 'view','admin');
return getModule($module_name, 'view','admin');
}
/**
@ -126,7 +126,7 @@
* @return module model instance
**/
function &getModel($module_name) {
return getModule($module_name, 'model');
return getModule($module_name, 'model');
}
/**
@ -135,7 +135,16 @@
* @return module admin model instance
**/
function &getAdminModel($module_name) {
return getModule($module_name, 'model','admin');
return getModule($module_name, 'model','admin');
}
/**
* @brief module의 api 객체 생성용
* @param module_name 모듈이름
* @return module api class instance
**/
function &getAPI($module_name) {
return getModule($module_name, 'api');
}
/**
@ -144,7 +153,7 @@
* @return module class instance
**/
function &getClass($module_name) {
return getModule($module_name, 'class');
return getModule($module_name, 'class');
}
/**
@ -183,7 +192,7 @@
}
/**
* @brief Context::getUrl($args_list) 쓰기 쉽게 함수로 선언
* @brief Context::getUrl() 쓰기 쉽게 함수로 선언
* @return string
*
* getUrl() 현재 요청된 RequestURI에 주어진 인자의 값으로 변형하여 url을 리턴한다\n
@ -201,6 +210,25 @@
return Context::getUrl($num_args, $args_list);
}
/**
* @brief Context::getUrl() 쓰기 쉽게 함수로 선언
* @return string
*
* getSiteUrl() 지정된 도메인에 대해 주어진 인자의 값으로 변형하여 url을 리턴한다\n
* 인자는 도메인(http://등이 제외된)+path 여야 .
**/
function getSiteUrl() {
$num_args = func_num_args();
$args_list = func_get_args();
if(!$num_args) return Context::getRequestUri();
$domain = array_shift($args_list);
$num_args = count($args_list);
return Context::getUrl($num_args, $args_list, $domain);
}
/**
* @brief 주어진 문자를 주어진 크기로 자르고 잘라졌을 경우 주어진 꼬리를
* @param string 자를 문자열
@ -208,27 +236,25 @@
* @param tail 잘라졌을 경우 문자열의 제일 뒤에 붙을 꼬리
* @return string
**/
function cut_str($string,$cut_size=0,$tail = '...') {
function cut_str($string,$cut_size=0,$tail = '...') {
if($cut_size<1 || !$string) return $string;
$char_width = Array(5,10,11,16,14,16,16,10,11,11,12,13,10,13,10,12,13,13,13,13,13,13,13,13,13,13,10,10,14,13,14,13,16,15,15,16,15,15,14,16,15,8,13,15,14,16,16,16,15,16,15,15,14,16,15,16,16,15,15,13,16,13,13,11,10,14,14,14,14,14,10,14,14,8,9,13,8,16,14,15,14,14,10,14,10,14,13,16,14,13,14,14,14,14,16);
$unicode_width = 21;
$max_width = $cut_size*$unicode_width/2;
$chars = Array(12, 4, 3, 5, 7, 7, 11, 8, 4, 5, 5, 6, 6, 4, 6, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 8, 6, 8, 6, 10, 8, 8, 9, 8, 8, 7, 9, 8, 3, 6, 7, 7, 11, 8, 9, 8, 9, 8, 8, 7, 8, 8, 10, 8, 8, 8, 6, 11, 6, 6, 6, 4, 7, 7, 7, 7, 7, 3, 7, 7, 3, 3, 6, 3, 9, 7, 7, 7, 7, 4, 7, 3, 7, 6, 10, 6, 6, 7, 6, 6, 6, 9);
$max_width = $cut_size*$chars[0]/2;
$char_width = 0;
$string_length = strlen($string);
$char_count = 0;
$idx = 0;
while($idx < $string_length && $char_count < $cut_size && $char_width < $max_width) {
while($idx < $string_length && $char_count < $cut_size && $char_width <= $max_width) {
$c = ord(substr($string, $idx,1));
$char_count++;
if($c<128) {
$char_width += (int)$char_width[$c-32];
$char_width += (int)$chars[$c-32];
$idx++;
} else {
$char_width += $unicode_width;
$char_width += $chars[0];
$idx += 3;
}
}
@ -277,6 +303,21 @@
return mktime($hour, $min, $sec, $month?$month:1, $day?$day:1, $year)+$gap;
}
/**
* @brief YmdHis의 시간 형식을 지금으로 부터 몇분/몇시간전, 1 이상 차이나면 format string return
**/
function getTimeGap($date, $format = 'Y.m.d') {
$gap = time() - ztime($date);
$lang_time_gap = Context::getLang('time_gap');
if($gap<60) $buff = sprintf($lang_time_gap['min'], (int)($gap / 60)+1);
elseif($gap<60*60) $buff = sprintf($lang_time_gap['mins'], (int)($gap / 60)+1);
elseif($gap<60*60*2) $buff = sprintf($lang_time_gap['hour'], (int)($gap / 60 /60)+1);
elseif($gap<60*60*24) $buff = sprintf($lang_time_gap['hours'], (int)($gap / 60 /60)+1);
else $buff = zdate($date, $format);
return $buff;
}
/**
* @brief 월이름을 return
**/
@ -318,15 +359,22 @@
$year = (int)substr($str,0,4);
$month = (int)substr($str,4,2);
$day = (int)substr($str,6,2);
return str_replace(
$string = str_replace(
array('Y','m','d','H','h','i','s','a','M', 'F'),
array($year,$month,$day,$hour,$hour/12,$min,$sec,($hour <= 12) ? 'am' : 'pm',getMonthName($month), getMonthName($month,false)),
$format
);
} else {
// 1970년 이후라면 ztime()함수로 unixtime을 구하고 date함수로 처리
$string = date($format, ztime($str));
}
// 1970년 이후라면 ztime()함수로 unixtime을 구하고 date함수로 처리
return date($format, ztime($str));
// 요일, am/pm을 각 언어에 맞게 변경
$unit_week = Context::getLang('unit_week');
$unit_meridiem = Context::getLang('unit_meridiem');
$string = str_replace(array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'),$unit_week, $string);
$string = str_replace(array('am','pm','AM','PM'), $unit_meridiem, $string);
return $string;
}
/**
@ -360,7 +408,7 @@
return (float)$time1 + (float)$time2;
}
/**
/**
* @brief 첫번째 인자로 오는 object var에서 2번째 object의 var들을 제거
* @param target_obj object
* @param del_obj object의 vars에서 del_obj의 vars를 제거한다
@ -388,9 +436,9 @@
return $return_obj;
}
/**
/**
* @brief php5 이상에서 error_handing을 debugPrint로 변경
* @param errno
* @param errno
* @param errstr
* @return file
* @return line
@ -426,20 +474,11 @@
}
/**
* @brief iframe, script코드 제거
* @brief 해킹 시도로 의심되는 코드들을 미리 차단
**/
function removeHackTag($content) {
// iframe 제거
$content = preg_replace("!<iframe(.*?)<\/iframe>!is", '', $content);
// script code 제거
$content = preg_replace("!<script(.*?)<\/script>!is", '', $content);
// meta 태그 제거
$content = preg_replace("!<meta(.*?)>!is", '', $content);
// style 태그 제거
$content = preg_replace("!<style(.*?)<\/style>!is", '', $content);
// 특정 태그들을 일반 문자로 변경
$content = preg_replace('/<(\/?)(iframe|script|meta|style)/is', '&lt;$1$2', $content);
// XSS 사용을 위한 이벤트 제거
$content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeJSEvent, $content);
@ -454,15 +493,34 @@
}
function removeJSEvent($matches) {
$tag = strtolower($matches[1]);
if(preg_match('/(src|href)=("|\'?)javascript:/i',$matches[2])) $matches[0] = preg_replace('/(src|href)=("|\'?)javascript:/i','$1=$2_javascript:', $matches[0]);
return preg_replace('/ on([a-z]+)=/i',' _on$1=',$matches[0]);
$attrs = $matches[2];
// vbscript|javascript 제거
if(preg_match('/(src|href|lowsrc|dynsrc)=("|\'?)([\r\n]*)(vbscript|javascript)/is', $matches[2])) {
$attrs = preg_replace('/(src|href|lowsrc|dynsrc)=("|\'?)([\r\n]*)(vbscript|javascript)/is','$1=$2_$4', $attrs);
}
// 이벤트 제거
// 전제 : 1. 이벤트명 앞에는 개행(r, n, rn)문자와 공백 문자만 올 수 있음
// 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',
' _on$2=',
$attrs
);
// 링크를 새창으로 열기 위한 이벤트만 복구
$attrs = preg_replace('/_onclick=("|\')window\.open\(this\.href\);(.?)return false;("|\')/i','onclick=$1window.open(this.href);$2return false;$3', $attrs);
return '<'.$matches[1].$attrs.'>';
}
function removeSrcHack($matches) {
$tag = strtolower(trim($matches[1]));
$buff = trim(preg_replace('/(\/>|>)/','/>',$matches[0]));
$buff = str_replace(array('&amp;','&'),array('&amp;','&amp;'),$buff);
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff);
$oXmlParser = new XmlParser();
@ -471,25 +529,27 @@
// src값에 module=admin이라는 값이 입력되어 있으면 이 값을 무효화 시킴
$src = $xml_doc->{$tag}->attrs->src;
$dynsrc = $xml_doc->{$tag}->attrs->dynsrc;
if(_isHackedSrc($src) || _isHackedSrc($dynsrc) ) return sprintf("<%s>",$tag);
$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);
return $matches[0];
}
function _isHackedSrc($src) {
if(!$src) return false;
if($src && preg_match('/javascript:/i',$src)) return true;
if($src) {
$url_info = parse_url($src);
$query = $url_info['query'];
$queries = explode('&', $query);
$cnt = count($queries);
for($i=0;$i<$cnt;$i++) {
$pos = strpos($queries[$i],'=');
$tmp_str = strtolower(trim($queries[$i]));
$pos = strpos($tmp_str,'=');
if($pos === false) continue;
$key = strtolower(trim(substr($queries[$i], 0, $pos)));
$val = strtolower(trim(substr($queries[$i] ,$pos+1)));
if(($key == 'module' && $val == 'admin') || $key == 'act' && preg_match('/admin/i',$val)) return true;
$key = strtolower(trim(substr($tmp_str, 0, $pos)));
$val = strtolower(trim(substr($tmp_str,$pos+1)));
if( ($key=='module'&&$val=='admin') || ($key=='act'&&preg_match('/admin/i',$val)) ) return true;
}
}
return false;
@ -514,7 +574,7 @@
'green' => 0xFF & ($int >> 0x8),
'blue' => 0xFF & $int);
}
}
/**
@ -554,9 +614,9 @@
return $url;
}
/**
/**
* javascript의 escape의 php unescape 함수
* Function converts an Javascript escaped string back into a string with specified charset (default is UTF-8).
* Function converts an Javascript escaped string back into a string with specified charset (default is UTF-8).
* Modified function from http://pure-essence.net/stuff/code/utf8RawUrlDecode.phps
**/
function utf8RawUrlDecode ($source) {
@ -597,4 +657,38 @@
if($num<2097152)return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128) .chr(($num&63)+128);
return '';
}
function json_encode2($data) {
switch (gettype($data)) {
case 'boolean':
return $data?'true':'false';
case 'integer':
case 'double':
return $data;
case 'string':
return '"'.strtr($data, array('\\'=>'\\\\','"'=>'\\"')).'"';
case 'object':
$data = get_object_vars($data);
case 'array':
$rel = false; // relative array?
$key = array_keys($data);
foreach ($key as $v) {
if (!is_int($v)) {
$rel = true;
break;
}
}
$arr = array();
foreach ($data as $k=>$v) {
$arr[] = ($rel?'"'.strtr($k, array('\\'=>'\\\\','"'=>'\\"')).'":':'').json_encode2($v);
}
return $rel?'{'.join(',', $arr).'}':'['.join(',', $arr).']';
default:
return '""';
}
}
?>

View file

@ -4,23 +4,21 @@
* @author zero <zero@zeroboard.com>
* @brief 시작 페이지
*
* zeroboard XE의 시작 페이지
*
* Request Argument에서 mid, act로 module 객체를 찾아서 생성하고 \n
* 모듈 정보를 세팅함
*
* @mainpage 첫페이지
* @section intro 소개
* zeroboard XE 오픈 프로젝트로 개발되는 오픈 소스입니다.\n
* XE 오픈 프로젝트로 개발되는 오픈 소스입니다.\n
* 자세한 내용은 아래 링크를 참조하세요.
* - 공식홈페이지 : http://www.zeroboard.com
* - zbXE 포럼 : http://www.zeroboard.com/forum_main
* - XE 포럼 : http://www.zeroboard.com/forum_main
* - 이슈트래킹 : http://trac.zeroboard.com
* - SVN Repository : http://svn.zeroboard.com/zeroboard_xe/trunk
* - document : http://doc.zeroboard.com
* - pdf 문서 : http://doc.zeroboard.com/zeroboard_xe.pdf
* \n
* "Zeroboard™ XE" 자유 소프트웨어입니다. \n
* "XpressEngine (XE)" 자유 소프트웨어입니다. \n
* 소프트웨어의 피양도자는 자유 소프트웨어 재단이 공표한 GNU 일반 공중 사용 허가서 2 또는 \n
* 이후 판을 임의로 선택해서, 규정에 따라 프로그램을 개작하거나 재배포할 있습니다. \n
* \n
@ -60,8 +58,10 @@
* 그리고 해당 모듈을 실행후 컨텐츠를 출력한다\n
**/
$oModuleHandler = new ModuleHandler();
$oModuleHandler->init();
$oModule = &$oModuleHandler->procModule();
$oModuleHandler->displayContent($oModule);
if($oModuleHandler->init()) {
$oModule = &$oModuleHandler->procModule();
$oModuleHandler->displayContent($oModule);
}
$oContext->close();
?>

View file

@ -1,14 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.2">
<title xml:lang="ko">제로보드XE 블로그 기본 스킨</title>
<title xml:lang="ko">XE 블로그 기본 스킨</title>
<title xml:lang="jp">ZBXEブログのデフォルトスキン</title>
<title xml:lang="zh-CN">Zeroboard XE博客默认皮肤</title>
<title xml:lang="en">Default Skin of Zeroboard XE blog</title>
<title xml:lang="ge">Standard-Skin von Zeroboard XE Blog</title>
<title xml:lang="es">Cuidado de la Piel por defecto de Zeroboard XE blog</title>
<title xml:lang="ru">По умолчанию Кожа Zeroboard XE блоге</title>
<title xml:lang="zh-CN">XE博客默认皮肤</title>
<title xml:lang="en">Default Skin of XE blog</title>
<title xml:lang="ge">Standard-Skin von XE Blog</title>
<title xml:lang="es">Cuidado de la Piel por defecto de XE blog</title>
<title xml:lang="ru">По умолчанию Кожа XE блоге</title>
<title xml:lang="zh-TW">XE部落格預設面板</title>
<description xml:lang="ko">
제로보드XE 블로그 기본 스킨입니다.
XE 블로그 기본 스킨입니다.
디자인 : 서기정 (http://blog.naver.com/addcozy)
HTML/CSS : 소지훈
</description>
@ -18,34 +19,39 @@
HTML/CSS : Ju-Hoon So
</description>
<description xml:lang="zh-CN">
Zeroboard XE博客默认皮肤。
XE博客默认皮肤。
设计 : Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<description xml:lang="en">
This is default skin of Zeroboard XE blog.
This is default skin of XE blog.
Design : Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<description xml:lang="ge">
Dies ist der Standard-Skin Zeroboard XE-Blog.
Dies ist der Standard-Skin XE-Blog.
Design: Ki-Seo Jeong (http://blog.naver.com/addcozy)
HTML / CSS: Ju-Hoon Also
</description>
<description xml:lang="es">
Esto es por defecto de la piel Zeroboard XE blog.
Esto es por defecto de la piel XE blog.
Diseño: Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<description xml:lang="ru">
Это умолчанию кожи Zeroboard XE блоге.
Это умолчанию кожи XE блоге.
Дизайн: Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<description xml:lang="zh-TW">
XE部落格預設面板。
設計 : Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<version>0.1</version>
<date>2008-02-26</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
@ -53,6 +59,7 @@
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
<extra_vars>
@ -64,6 +71,7 @@
<title xml:lang="ge">Colorset</title>
<title xml:lang="es">Set de Colores</title>
<title xml:lang="ru">Colorset</title>
<title xml:lang="zh-TW">顏色設定</title>
<description xml:lang="ko">원하시는 컬러셋을 선택해주세요.</description>
<description xml:lang="jp">希望するカラーセットを選択してください。</description>
<description xml:lang="zh-CN">请选择颜色。</description>
@ -71,6 +79,7 @@
<description xml:lang="ge">Bitte wählen Sie ein colorset Sie wollen.</description>
<description xml:lang="ru">Выберите colorset хотите.</description>
<description xml:lang="es">Seleccione set de colores que desea.</description>
<description xml:lang="zh-TW">請選擇顏色。</description>
<options value="blue">
<title xml:lang="ko">파란색 (기본)</title>
<title xml:lang="jp">青 (default)</title>
@ -79,6 +88,7 @@
<title xml:lang="ge">Blue (Standard)</title>
<title xml:lang="es">Azul (default)</title>
<title xml:lang="ru">Blue (default)</title>
<title xml:lang="zh-TW">藍色(預設)</title>
</options>
<options value="gray">
<title xml:lang="ko">회색</title>
@ -88,6 +98,7 @@
<title xml:lang="ge">Gray</title>
<title xml:lang="es">Gray</title>
<title xml:lang="ru">Gray</title>
<title xml:lang="zh-TW">灰色</title>
</options>
<options value="orange">
<title xml:lang="ko">오렌지</title>
@ -97,6 +108,7 @@
<title xml:lang="ge">Orange</title>
<title xml:lang="es">Orange</title>
<title xml:lang="ru">Orange</title>
<title xml:lang="zh-TW">橘色</title>
</options>
<options value="violet">
<title xml:lang="ko">보라색</title>
@ -106,6 +118,7 @@
<title xml:lang="ge">Violett</title>
<title xml:lang="es">Violet</title>
<title xml:lang="ru">Violet</title>
<title xml:lang="zh-TW">紫色</title>
</options>
<options value="green">
<title xml:lang="ko">초록색</title>
@ -115,23 +128,26 @@
<title xml:lang="ge">Grün</title>
<title xml:lang="es">Verde</title>
<title xml:lang="ru">Green</title>
<title xml:lang="zh-TW">綠色</title>
</options>
</var>
<var name="target_mid" type="text">
<title xml:lang="ko">기본 모듈</title>
<title xml:lang="jp">기본 모듈</title>
<title xml:lang="jp">デフォルトモジュール</title>
<title xml:lang="zh-CN">默认模块</title>
<title xml:lang="en">Basic module</title>
<title xml:lang="ge">Basismodul</title>
<title xml:lang="es">Módulo Básico</title>
<title xml:lang="ru">Основной модуль</title>
<title xml:lang="zh-TW">預設模組</title>
<description xml:lang="ko">기본 모듈을 지정해주시면 레이아웃에서 표시되는 위젯들이 정상적으로 동작을 하게 됩니다</description>
<description xml:lang="jp">기본 모듈을 지정해주시면 레이아웃에서 표시되는 위젯들이 정상적으로 동작을 하게 됩니다</description>
<description xml:lang="jp">デフォルトモジュールを指定するとレイアウトで表示されるウィジェットが正常に作動するようになります。</description>
<description xml:lang="zh-CN">为了让博客系统中的控件正常运作,在这里必须得指定默认版面模块名。</description>
<description xml:lang="en">The widgets that are being displayed in the layout will work properly if you select the basic module</description>
<description xml:lang="ge">Die Widgets, die angezeigt werden im Layout wird ordnungsgemäß funktionieren, wenn Sie das Basismodul</description>
<description xml:lang="es">Los reproductores que se muestran en el diseño funcionará correctamente si selecciona el módulo básico</description>
<description xml:lang="ru">В виджеты, которые отображаются в формате будет работать правильно, если вы выбираете основной модуль</description>
<description xml:lang="zh-TW">要讓部落格系統中的控件正常運作,必須要指定預設討論板模組名稱。</description>
</var>
<var name="background_image" type="image">
<title xml:lang="ko">배경 이미지</title>
@ -140,6 +156,7 @@
<title xml:lang="en">Background Image</title>
<title xml:lang="es">Imagen de fondo</title>
<title xml:lang="ru">Фоновое изображение</title>
<title xml:lang="zh-TW">背景圖片</title>
<description xml:lang="ko">배경 이미지를 사용하시려면 등록해주세요.</description>
<description xml:lang="jp">背景イメージを使う場合は、登録してください。</description>
<description xml:lang="zh-CN">要想使用背景图片请在这里上传。</description>
@ -147,6 +164,7 @@
<description xml:lang="ge">Bitte geben Sie, wenn Sie verwenden wollen Hintergrundbild.</description>
<description xml:lang="es">Entre, por favor, si desea utilizar la imagen de fondo.</description>
<description xml:lang="ru">Введите, если вы хотите использовать фоновое изображение.</description>
<description xml:lang="zh-TW">請在這裡上傳想要使用的背景圖片。</description>
</var>
<var name="profile_image" type="image">
<title xml:lang="ko">프로필 이미지</title>
@ -156,6 +174,7 @@
<title xml:lang="ge">Profil Bilder</title>
<title xml:lang="es">Perfil de Imagen</title>
<title xml:lang="ru">Профиль Изображение</title>
<title xml:lang="zh-TW">部落格頭像</title>
<description xml:lang="ko">프로필 이미지를 입력해 주세요 (가로 사이즈는 160px이 가장 보기 좋습니다)</description>
<description xml:lang="jp">プロフィールイメージを入力してください横幅は「160px」が一番適しています</description>
<description xml:lang="zh-CN">请上传博客个性头像(推荐宽度为160px)。</description>
@ -163,6 +182,7 @@
<description xml:lang="ge">itte geben Sie Ihre Image-Profil (Es wird empfohlen, Breite 160px)</description>
<description xml:lang="es">Por favor, el perfil de entrada de imagen (Se recomienda configurar el ancho de 160px)</description>
<description xml:lang="ru">Введите профиля изображения (Рекомендуется устанавливать ширину, 160px)</description>
<description xml:lang="zh-TW">請上傳部落格頭像(最適寬度 160px)。</description>
</var>
<var name="profile" type="textarea">
<title xml:lang="ko">프로필</title>
@ -172,6 +192,7 @@
<title xml:lang="ge">Profil</title>
<title xml:lang="es">Perfil</title>
<title xml:lang="ru">Профиль</title>
<title xml:lang="zh-TW">簡介</title>
<description lang="ko">간단한 프로필을 입력해주세요</description>
<description lang="jp">簡単なプロフィールを入力してください。</description>
<description lang="zh-CN">请输入简单介绍。</description>
@ -179,6 +200,7 @@
<description lang="ge">Bitte geben Sie Ihre Simple Profile</description>
<description lang="es">Por favor, introduzca su perfil simple</description>
<description lang="ru">Введите простое профиль</description>
<description lang="zh-TW">請輸入簡單說明。</description>
</var>
</extra_vars>
@ -191,6 +213,7 @@
<title xml:lang="ge">Top-Menü</title>
<title xml:lang="es">Menú superior</title>
<title xml:lang="ru">Главное меню</title>
<title xml:lang="zh-TW">主選單</title>
</menu>
</menus>
</layout>
</layout>

View file

@ -7,8 +7,9 @@
<title xml:lang="ru">ZBXE Официальный сайт макет</title>
<title xml:lang="es">Diseño oficial de la página web de ZBXE</title>
<title xml:lang="zh-CN">ZBXE 官方网站布局</title>
<title xml:lang="zh-TW">ZBXE 官方網站版面</title>
<description xml:lang="ko">
제로보드XE 공식 사이트 레이아웃입니다.
XE 공식 사이트 레이아웃입니다.
디자인 : 이소라
퍼블리싱 : 정찬명
레이아웃 제작 : zero
@ -20,19 +21,19 @@
レイアウト作成Zero
</description>
<description xml:lang="en">
This layout is the Zeroboard XE Official website layout.
This layout is the XE Official website layout.
Designer : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
Layout producer : zero
</description>
<description xml:lang="ge">
Dieses Layout ist das Zeroboard XE Offizielle Website-Layout.
Dieses Layout ist das XE Offizielle Website-Layout.
Designer: So-Ra Lee
HTML / CSS: Chan-Myung Jeong
Layout Hersteller: Zero
</description>
<description xml:lang="ru">
Этот формат является Zeroboard XE Официальный сайт компоновку.
Этот формат является XE Официальный сайт компоновку.
Дизайнер: So-Ra Lee
HTML / CSS: Chan-Myung Jeong
Макет производителя: ноль
@ -44,22 +45,29 @@
Productor del diseño : zero
</description>
<description xml:lang="zh-CN">
Zeroboard XE官方网站布局。
XE官方网站布局。
设计 : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
布局 : zero
</description>
<description xml:lang="zh-TW">
XE官方網站版面。
設計 : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
版面設計 : zero
</description>
<version>0.1</version>
<date>2007-08-01</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
<extra_vars>
@ -67,6 +75,7 @@
<title xml:lang="ko">컬러셋</title>
<title xml:lang="jp">カラーセット</title>
<title xml:lang="zh-CN">颜色</title>
<title xml:lang="zh-TW">顏色設定</title>
<title xml:lang="en">Colorset</title>
<title xml:lang="ge">Colorset</title>
<title xml:lang="ru">Colorset</title>
@ -74,6 +83,7 @@
<description xml:lang="ko">원하시는 컬러셋을 선택해주세요.</description>
<description xml:lang="jp">希望するカラーセットを選択してください。</description>
<description xml:lang="zh-CN">请选择颜色。</description>
<description xml:lang="zh-TW">請選擇顏色。</description>
<description xml:lang="en">Please select a colorset you want.</description>
<description xml:lang="ge">Bitte wählen Sie ein colorset Sie wollen.</description>
<description xml:lang="ru">Выберите colorset хотите.</description>
@ -86,6 +96,7 @@
<title xml:lang="ru">Базовые</title>
<title xml:lang="es">Básico</title>
<title xml:lang="zh-CN">默认</title>
<title xml:lang="zh-TW">預設</title>
</options>
<options value="black">
<title xml:lang="ko">검은색</title>
@ -95,6 +106,7 @@
<title xml:lang="ru">Черного</title>
<title xml:lang="es">Negro</title>
<title xml:lang="zh-CN">黑色</title>
<title xml:lang="zh-TW">黑色</title>
</options>
<options value="white">
<title xml:lang="ko">하얀색</title>
@ -104,12 +116,14 @@
<title xml:lang="ru">белый</title>
<title xml:lang="es">Blanco</title>
<title xml:lang="zh-CN">白色</title>
<title xml:lang="zh-TW">白色</title>
</options>
</var>
<var name="logo_image" type="image">
<title xml:lang="ko">로고이미지</title>
<title xml:lang="jp">ロゴイメージ</title>
<title xml:lang="zh-CN">LOGO图片</title>
<title xml:lang="zh-TW">LOGO圖片</title>
<title xml:lang="en">Logo image</title>
<title xml:lang="ge">Logobildes</title>
<title xml:lang="ru">Изображения логотипа</title>
@ -117,6 +131,7 @@
<description xml:lang="ko">레이아웃의 상단에 표시될 로고이미지를 입력하세요. (세로길이가 23px인 투명이미지가 가장 어울립니다)</description>
<description xml:lang="jp">レイアウトの上段に表示されるロゴイメージを入力してください。 (縦幅が23pxである透明イメージが最も合います。)</description>
<description xml:lang="zh-CN">请输入显示在布局顶部的LOGO图片。(高度为23px的透明图片为适。)</description>
<description xml:lang="zh-TW">請輸入在版面上端要顯示的LOGO圖片。(適當高度為23px的透明圖片。)</description>
<description xml:lang="en">Please input a logo image which will be displayed on the top of layout. (Transparent image with height of 23px is recommended.)</description>
<description xml:lang="ge">Bitte geben Sie ein Logo das Bild wird auf dem oberen Layout. (Transparent Bild mit einer Höhe von 23px wird empfohlen).</description>
<description xml:lang="ru">Введите логотип изображение, которое будет отображаться в верхней части формы. (Прозрачный изображение с высотой 23px рекомендуется.)</description>
@ -126,6 +141,7 @@
<title xml:lang="ko">홈 페이지 URL</title>
<title xml:lang="jp">ホームページURL</title>
<title xml:lang="zh-CN">主页地址</title>
<title xml:lang="zh-TW">主頁URL</title>
<title xml:lang="en">Homepage URL</title>
<title xml:lang="ge">Homepage URL</title>
<title xml:lang="ru">Домашняя страница URL</title>
@ -133,6 +149,7 @@
<description xml:lang="ko">로고를 클릭시에 이동할 홈 페이지 URL을 입력해 주세요.</description>
<description xml:lang="jp">ロゴをクリックした時に移動するホームページのURLを入力してください。</description>
<description xml:lang="zh-CN">点击网站LOGO时要移动的页面URL。</description>
<description xml:lang="zh-TW">請輸入要移往的頁面URL當用戶按了網站LOGO後。</description>
<description xml:lang="en">Please input the URL to redirect when user clicks the logo</description>
<description xml:lang="ge">Bitte geben Sie die URL umzuleiten, wenn Benutzer klickt das Logo</description>
<description xml:lang="ru">Пожалуйста, введите URL для перенаправления, когда пользователь нажимает логотип</description>
@ -142,6 +159,7 @@
<title xml:lang="ko">배경 이미지</title>
<title xml:lang="jp">背景イメージ</title>
<title xml:lang="zh-CN">背景图片</title>
<title xml:lang="zh-TW">背景圖片</title>
<title xml:lang="en">Background Image</title>
<title xml:lang="ge">Hintergrundbild</title>
<title xml:lang="ru">Фоновое изображение</title>
@ -149,6 +167,7 @@
<description xml:lang="ko">배경 이미지를 사용하시려면 등록해주세요.</description>
<description xml:lang="jp">背景イメージを使う場合は、登録してください。</description>
<description xml:lang="zh-CN">要想使用背景图片请在这里上传。</description>
<description xml:lang="zh-TW">請在這裡上傳想要使用的背景圖片。</description>
<description xml:lang="en">Please input if you want to use background image.</description>
<description xml:lang="ge">Bitte geben Sie, wenn Sie verwenden wollen Hintergrundbild.</description>
<description xml:lang="ru">Введите, если вы хотите использовать фоновое изображение.</description>
@ -161,6 +180,7 @@
<title xml:lang="ko">상단 메뉴</title>
<title xml:lang="jp">上段メニュー</title>
<title xml:lang="zh-CN">主菜单</title>
<title xml:lang="zh-TW">主選單</title>
<title xml:lang="en">Top menu</title>
<title xml:lang="ge">Top Menü</title>
<title xml:lang="ru">Верхнее меню</title>
@ -170,10 +190,11 @@
<title xml:lang="ko">하단 메뉴 </title>
<title xml:lang="jp">下段メニュー</title>
<title xml:lang="zh-CN">底部菜单</title>
<title xml:lang="zh-TW">底部選單</title>
<title xml:lang="en">Bottom menu</title>
<title xml:lang="ge">Bottom-Menü</title>
<title xml:lang="ru">Внизу меню</title>
<title xml:lang="es">Menú Inferior </title>
</menu>
</menus>
</layout>
</layout>

View file

@ -1,91 +1,91 @@
@charset "utf-8";
/*
NHN UIT Lab. WebStandardization Team (http://html.nhndesign.com/)
Jeong, Chan Myeong 070601~070630
*/
/* Black Skin - Start */
#selectLang { margin:0; padding:0; }
#gnb { margin:0; padding:0; }
#lnb { margin:0; padding:0; }
#lnb ul { margin:0; padding:0; }
/* Site Layout - Body Wrap */
body { background:#3d3d3d url(../images/black/bgBody.gif) repeat-x;}
#bodyWrap { position:relative; width:980px; margin:0 auto; padding:1.5em 0 0 0;}
/* Site Layout - Header */
#header { position:relative; width:980px; height:120px; background:url(../images/black/bgHeader.jpg) no-repeat right top; margin-bottom:10px; z-index:99;}
#header h1 { position:absolute; top:32px; left:25px;}
#language { position:absolute; top:18px; right:19px; z-index:100;}
#language strong { color:#ffffff; font:.75em Tahoma; margin-right:3px;}
#language a img { vertical-align:-5px;}
#language ul { position:absolute; top:15px; right:0px; display:none; border:1px solid #282827; background:#3d3d3d;}
#language ul li { list-style:none; }
#language ul li a { display:block; width:61px; padding:3px 8px; font:9px Tahoma; color:#cbcbcb; text-decoration:none;}
#language ul li a:hover { background:#373736;}
#it_search_form { position:absolute; top:50px; right:15px;}
#it_search_form .input { border:1px solid #bc4032; height:17px; width:120px; color:#888888; font-size:.9em;}
#it_search_form .submit_button { width:1px; height:1px; visibility:hidden; }
#gnb { position:absolute; top:82px; left:0; height:38px; overflow:hidden; white-space:nowrap; margin-bottom:10px;}
#gnb li { list-style:none; float:left; background:url(../images/black/bgGnbVr.gif) no-repeat left center; padding-left:2px; position:relative; left:-2px; white-space:nowrap;}
#gnb li a { display:block; float:left; padding:13px 15px 0 15px; height:25px; color:#a6a6a6; white-space:nowrap; text-decoration:none; }
#gnb li a:hover,
#gnb li a:focus { color:#ffffff;}
#gnb li.on a { font-weight:bold; color:#ffffff; background:url(../images/black/bgGnbOn.gif) no-repeat center top;}
#isSearch { position:absolute; top:48px; right:15px; width:214px; text-align:right;}
#isSearch .searchOrder { display:none;}
#isSearch .checked { position:absolute; left:0; top:0; text-align:left; display:block; padding:5px 0 0 5px; width:64px; height:14px; background:url(../images/black/bgSearchTerm.gif) no-repeat; font:11px "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif; color:#ffffff; line-height:normal;}
#isSearch ul { display:none; position:absolute; left:0; top:18px; padding:2px 0 3px 0; text-align:left; border:1px solid #6e8081; background:#385153;}
#isSearch ul li { width:67px; height:18px; list-style:none;}
#isSearch ul li input { display:none;}
#isSearch ul li label { display:block; padding:4px 0 0 4px; width:63px; height:15px; font:11px "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif; color:#ffffff;}
#isSearch ul li label.on { background:#2f4345; }
#isSearch ul li label:hover,
#isSearch ul li label:focus { background:#2f4345;}
#isSearch .inputText { vertical-align:middle; position:relative; top:0; _top:-1px; left:1px; padding:3px 3px 1px 3px; width:94px; height:13px; color:#ffffff; border:1px solid #8E8E8D; background-color:#857C79; }
#isSearch .inputText:hover,
#isSearch .inputText:focus { border:1px solid #B0B0AF; background-color:#A9A4A3; }
*:first-child+html #isSearch .inputText { position:relative; top:-1px;}
#isSearch .submit { vertical-align:middle; _position:relative; _top:-1px;}
*:first-child+html #isSearch .submit { position:relative; top:-1px;}
/* Site Layout - Content Body */
#contentBody { position:relative; width:980px; padding-bottom:30px; overflow:hidden; background:url(../images/black/bgContentBody.gif) repeat-y left top; border-bottom:1px solid #515151;}
/* Site Layout - Column Left */
#columnLeft { position:relative; width:201px; float:left;}
#columnLeft .mask { width:201px; height:5px; background:#3d3d3d; display:block;}
#lnb { border-top:1px solid #515151; padding:4px 5px; width:190px;}
#lnb li { list-style:none; padding-bottom:4px;}
#lnb li a { padding:6px 5px 6px 13px; width:170px; display:block; border:1px solid #565655; background:url(../images/black/bgLnbOff.gif) repeat-x; color:#c2c2c2; position:relative; z-index:99; text-decoration:none;}
#lnb li a:hover,
#lnb li a:focus { color:#ffffff; background:#e61700; border:1px solid #ff1a00;}
#lnb li.on a { color:#ffffff; background:#e61700; border:1px solid #ff1a00;}
#lnb li.on a:hover,
#lnb li.on a:focus { font-weight:bold;}
#lnb li ul { display:block; position:relative; width:184px; padding:0 3px; position:relative; border-top:1px solid #3d3d3d; overflow:hidden;}
#lnb li.on ul { display:block;}
#lnb li ul li { padding:0; border-top:1px solid #474747; position:relative; top:-1px;}
#lnb li ul li a { padding:6px 5px 6px 10px; width:169px; color:#818181 !important; border:none; background:none !important; border:none !important;}
#lnb li ul li a:hover,
#lnb li ul li a:focus { font-weight:normal !important; color:#de4332 !important;}
#lnb li.on ul li.on a { color:#ff1a00 !important; font-weight:bold !important; background:url(../images/black/bulletLnb.gif) no-repeat 175px center !important;}
/* Site Layout - Column Right */
#columnRight { width:770px; float:right; overflow:hidden;}
#visualArea { width:770px; height:200px; background:#151514; margin-bottom:2.5em; position:relative; left:-15px; margin-right:-15px; color:#999999;}
#content { width:100%; overflow:hidden;}
/* Site Layout - Footer */
#footer { margin:0; padding:0; border-top:3px solid #424242; text-align:center; padding:2em 0 4em; clear:both;}
#footer li { display:inline; padding:0 .6em 0 1em; background:url(../images/black/vrType1.gif) no-repeat left center;}
#footer li.first-child { background:none;}
#footer li a { color:#818181; font:.9em "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif;}
#footer li address { display:inline; }
/* Black Skin - End */
@charset "utf-8";
/*
NHN UIT Lab. WebStandardization Team (http://html.nhndesign.com/)
Jeong, Chan Myeong 070601~070630
*/
/* Black Skin - Start */
#selectLang { margin:0; padding:0; }
#gnb { margin:0; padding:0; }
#lnb { margin:0; padding:0; }
#lnb ul { margin:0; padding:0; }
/* Site Layout - Body Wrap */
body { background:#000;}
#bodyWrap { position:relative; width:980px; margin:0 auto; padding:1.5em 0 0 0;}
/* Site Layout - Header */
#header { position:relative; width:980px; height:120px; background:url(../images/black/bgHeader.jpg) no-repeat right top; margin-bottom:10px; z-index:99;}
#header h1 { position:absolute; top:32px; left:25px;}
#language { position:absolute; top:18px; right:19px; z-index:100;}
#language strong { color:#ffffff; font:.75em Tahoma; margin-right:3px;}
#language a img { vertical-align:-5px;}
#language ul { position:absolute; top:15px; right:0px; display:none; border:1px solid #282827; background:#3d3d3d;}
#language ul li { list-style:none; }
#language ul li a { display:block; width:61px; padding:3px 8px; font:9px Tahoma; color:#cbcbcb; text-decoration:none;}
#language ul li a:hover { background:#373736;}
#it_search_form { position:absolute; top:50px; right:15px;}
#it_search_form .input { border:1px solid #bc4032; height:17px; width:120px; color:#888888; font-size:.9em;}
#it_search_form .submit_button { width:1px; height:1px; visibility:hidden; }
#gnb { position:absolute; top:82px; left:0; height:38px; overflow:hidden; white-space:nowrap; margin-bottom:10px;}
#gnb li { list-style:none; float:left; background:url(../images/black/bgGnbVr.gif) no-repeat left center; padding-left:2px; position:relative; left:-2px; white-space:nowrap;}
#gnb li a { display:block; float:left; padding:13px 15px 0 15px; height:25px; color:#a6a6a6; white-space:nowrap; text-decoration:none; }
#gnb li a:hover,
#gnb li a:focus { color:#ffffff;}
#gnb li.on a { font-weight:bold; color:#ffffff; background:url(../images/black/bgGnbOn.gif) no-repeat center top;}
#isSearch { position:absolute; top:48px; right:15px; width:214px; text-align:right;}
#isSearch .searchOrder { display:none;}
#isSearch .checked { position:absolute; left:0; top:0; text-align:left; display:block; padding:5px 0 0 5px; width:64px; height:14px; background:url(../images/black/bgSearchTerm.gif) no-repeat; font:11px "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif; color:#ffffff; line-height:normal;}
#isSearch ul { display:none; position:absolute; left:0; top:18px; padding:2px 0 3px 0; text-align:left; border:1px solid #6e8081; background:#385153;}
#isSearch ul li { width:67px; height:18px; list-style:none;}
#isSearch ul li input { display:none;}
#isSearch ul li label { display:block; padding:4px 0 0 4px; width:63px; height:15px; font:11px "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif; color:#ffffff;}
#isSearch ul li label.on { background:#2f4345; }
#isSearch ul li label:hover,
#isSearch ul li label:focus { background:#2f4345;}
#isSearch .inputText { vertical-align:middle; position:relative; top:0; _top:-1px; left:1px; padding:3px 3px 1px 3px; width:94px; height:13px; color:#ffffff; border:1px solid #8E8E8D; background-color:#857C79; }
#isSearch .inputText:hover,
#isSearch .inputText:focus { border:1px solid #B0B0AF; background-color:#A9A4A3; }
*:first-child+html #isSearch .inputText { position:relative; top:-1px;}
#isSearch .submit { vertical-align:middle; _position:relative; _top:-1px;}
*:first-child+html #isSearch .submit { position:relative; top:-1px;}
/* Site Layout - Content Body */
#contentBody { position:relative; width:980px; padding-bottom:30px; overflow:hidden; background:url(../images/black/bgContentBody.gif) repeat-y left top; border-bottom:1px solid #515151;}
/* Site Layout - Column Left */
#columnLeft { position:relative; width:201px; float:left;}
#columnLeft .mask { width:201px; height:5px; background:#3d3d3d; display:block;}
#lnb { border-top:1px solid #515151; padding:4px 5px; width:190px;}
#lnb li { list-style:none; padding-bottom:4px;}
#lnb li a { padding:6px 5px 6px 13px; width:170px; display:block; border:1px solid #565655; background:url(../images/black/bgLnbOff.gif) repeat-x; color:#c2c2c2; position:relative; z-index:99; text-decoration:none;}
#lnb li a:hover,
#lnb li a:focus { color:#ffffff; background:#e61700; border:1px solid #ff1a00;}
#lnb li.on a { color:#ffffff; background:#e61700; border:1px solid #ff1a00;}
#lnb li.on a:hover,
#lnb li.on a:focus { font-weight:bold;}
#lnb li ul { display:block; position:relative; width:184px; padding:0 3px; position:relative; border-top:1px solid #3d3d3d; overflow:hidden;}
#lnb li.on ul { display:block;}
#lnb li ul li { padding:0; border-top:1px solid #474747; position:relative; top:-1px;}
#lnb li ul li a { padding:6px 5px 6px 10px; width:169px; color:#818181 !important; border:none; background:none !important; border:none !important;}
#lnb li ul li a:hover,
#lnb li ul li a:focus { font-weight:normal !important; color:#de4332 !important;}
#lnb li.on ul li.on a { color:#ff1a00 !important; font-weight:bold !important; background:url(../images/black/bulletLnb.gif) no-repeat 175px center !important;}
/* Site Layout - Column Right */
#columnRight { width:770px; float:right; overflow:hidden;}
#visualArea { width:770px; height:200px; background:#151514; margin-bottom:2.5em; position:relative; left:-15px; margin-right:-15px; color:#999999;}
#content { width:100%; overflow:hidden;}
/* Site Layout - Footer */
#footer { margin:0; padding:0; border-top:3px solid #424242; text-align:center; padding:2em 0 4em; clear:both;}
#footer li { display:inline; padding:0 .6em 0 1em; background:url(../images/black/vrType1.gif) no-repeat left center;}
#footer li.first-child { background:none;}
#footer li a { color:#818181; font:.9em "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif;}
#footer li address { display:inline; }
/* Black Skin - End */

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -22,7 +22,7 @@
<div id="bodyWrap">
<div id="header">
<h1><a href="{$layout_info->index_url}"><!--@if(!$layout_info->logo_image)--><img src="./images/{$layout_info->colorset}/zeroBoardXE.png" alt="ZeroBoard™ XE" class="iePngFix" /><!--@else--><img src="{$layout_info->logo_image}" alt="logo" border="0" class="iePngFix" /><!--@end--></a></h1>
<h1><!--@if($layout_info->logo_image)--><a href="{$layout_info->index_url}"><img src="{$layout_info->logo_image}" alt="logo" border="0" class="iePngFix" /></a><!--@else-->&nbsp;<!--@end--></h1>
<div id="language">
<strong title="{$lang_type}">{$lang_supported[$lang_type]}</strong> <a href="#selectLang" onclick="showHide('selectLang');return false;"><img src="./images/{$layout_info->colorset}/buttonLang.gif" alt="Select Language" width="87" height="15" /></a>
@ -95,7 +95,7 @@
<ul id="footer">
<li class="first-child">
<address>
<a href="http://www.zeroboard.com" onclick="window.open(this.href);return false;"><img src="./images/{$layout_info->colorset}/powerdByZeroboard.gif" alt="Powered By ZeroBoard" width="106" height="5" /></a>
<a href="http://www.zeroboard.com" onclick="window.open(this.href);return false;"><img src="./images/powerdByXE.gif" alt="Powered By XpressEngine" width="70" height="5" /></a>
</address>
</li>

View file

@ -4,8 +4,9 @@
* @author zero (zero@nzeo.com)
* @brief addon 모듈의 admin controller class
**/
include_once('addon.controller.php');
class addonAdminController extends addon {
class addonAdminController extends addonController {
/**
* @brief 초기화
@ -48,34 +49,7 @@
$this->makeCacheFile();
}
/**
* @brief 캐시 파일 생성
**/
function makeCacheFile() {
// 모듈에서 애드온을 사용하기 위한 캐시 파일 생성
$buff = "";
$oAddonModel = &getAdminModel('addon');
$addon_list = $oAddonModel->getInsertedAddons();
foreach($addon_list as $addon => $val) {
if($val->is_used != 'Y' || !is_dir(_XE_PATH_.'addons/'.$addon) ) continue;
$extra_vars = unserialize($val->extra_vars);
$mid_list = $extra_vars->mid_list;
if(!is_array($mid_list)||!count($mid_list)) $mid_list = null;
$mid_list = base64_encode(serialize($mid_list));
if($val->extra_vars) {
unset($extra_vars);
$extra_vars = base64_encode($val->extra_vars);
}
$buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); if(file_exists("%saddons/%s/%s.addon.php") && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); $addon_path = "%saddons/%s/"; @include("%saddons/%s/%s.addon.php"); }', $mid_list, _XE_PATH_, $addon, $addon, $extra_vars, _XE_PATH_, $addon, _XE_PATH_, $addon, $addon);
}
$buff = sprintf('<?php if(!defined("__ZBXE__")) exit(); $_m = Context::get(\'mid\'); %s ?>', $buff);
FileHandler::writeFile($this->cache_file, $buff);
}
/**
* @brief 애드온 추가
@ -108,14 +82,6 @@
return executeQuery('addon.updateAddon', $args);
}
/**
* @brief 애드온 설정
**/
function doSetup($addon, $extra_vars) {
if($extra_vars->mid_list) $extra_vars->mid_list = explode('|@|', $extra_vars->mid_list);
$args->addon = $addon;
$args->extra_vars = serialize($extra_vars);
return executeQuery('addon.updateAddon', $args);
}
}
?>

View file

@ -0,0 +1,145 @@
<?php
/**
* @class addonController
* @author sol ngleader.com
* @brief addon 모듈의 controller class
**/
class addonController extends addon {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 애드온 mid 추가 설정
**/
function _getMidList($selected_addon) {
$oAddonAdminModel = &getAdminModel('addon');
$addon_info = $oAddonAdminModel->getAddonInfoXml($selected_addon);
return $addon_info->mid_list;
}
/**
* @brief 애드온 mid 추가 설정
**/
function _setAddMid($selected_addon,$mid) {
// 요청된 애드온의 정보를 구함
$mid_list = $this->_getMidList($selected_addon);
$mid_list[] = $mid;
$new_mid_list = array_unique($mid_list);
$this->_setMid($selected_addon,$new_mid_list);
}
/**
* @brief 애드온 mid 추가 설정
**/
function _setDelMid($selected_addon,$mid) {
// 요청된 애드온의 정보를 구함
$mid_list = $this->_getMidList($selected_addon);
$new_mid_list = array();
if(is_array($mid_list)){
for($i=0,$c=count($mid_list);$i<$c;$i++){
if($mid_list[$i] != $mid) $new_mid_list[] = $mid_list[$i];
}
}else{
$new_mid_list[] = $mid;
}
$this->_setMid($selected_addon,$new_mid_list);
}
/**
* @brief 애드온 mid 추가 설정
**/
function _setMid($selected_addon,$mid_list) {
$args->mid_list = join('|@|',$mid_list);
$this->doSetup($selected_addon, $args);
$this->makeCacheFile();
}
/**
* @brief 애드온 mid 추가
**/
function procAddonSetupAddonAddMid() {
$args = Context::getRequestVars();
$addon_name = $args->addon_name;
$mid = $args->mid;
$this->_setAddMid($addon_name,$mid);
}
/**
* @brief 애드온 mid 삭제
**/
function procAddonSetupAddonDelMid() {
$args = Context::getRequestVars();
$addon_name = $args->addon_name;
$mid = $args->mid;
$this->_setDelMid($addon_name,$mid);
}
/**
* @brief 캐시 파일 생성
**/
function makeCacheFile() {
// 모듈에서 애드온을 사용하기 위한 캐시 파일 생성
$buff = "";
$oAddonModel = &getAdminModel('addon');
$addon_list = $oAddonModel->getInsertedAddons();
foreach($addon_list as $addon => $val) {
if($val->is_used != 'Y' || !is_dir(_XE_PATH_.'addons/'.$addon) ) continue;
$extra_vars = unserialize($val->extra_vars);
$mid_list = $extra_vars->mid_list;
if(!is_array($mid_list)||!count($mid_list)) $mid_list = null;
$mid_list = base64_encode(serialize($mid_list));
if($val->extra_vars) {
unset($extra_vars);
$extra_vars = base64_encode($val->extra_vars);
}
$buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); if(file_exists("%saddons/%s/%s.addon.php") && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); $addon_path = "%saddons/%s/"; @include("%saddons/%s/%s.addon.php"); }', $mid_list, _XE_PATH_, $addon, $addon, $extra_vars, _XE_PATH_, $addon, _XE_PATH_, $addon, $addon);
}
$buff = sprintf('<?php if(!defined("__ZBXE__")) exit(); $_m = Context::get(\'mid\'); %s ?>', $buff);
FileHandler::writeFile($this->cache_file, $buff);
}
/**
* @brief 애드온 설정
**/
function doSetup($addon, $extra_vars) {
if($extra_vars->mid_list) $extra_vars->mid_list = explode('|@|', $extra_vars->mid_list);
$args->addon = $addon;
$args->extra_vars = serialize($extra_vars);
return executeQuery('addon.updateAddon', $args);
}
}
?>

View file

@ -7,6 +7,7 @@
<title xml:lang="jp">アドオン</title>
<title xml:lang="fr">Additions</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>
<description xml:lang="es">Este Módulo es para agregar Addons, como también el manejo de ellos.</description>
@ -14,18 +15,19 @@
<description xml:lang="jp">アドオンの「登録、使用、未使用」などを設定する管理モジュールです。</description>
<description xml:lang="fr">Ce module est pour les Additions de maintien qui peuvent basculer des états d'utilisation et de désuétude. </description>
<description xml:lang="ru">Этот модуль служит для управления аддонами, использование которых Вы можете включать и выключать.</description>
<description xml:lang="zh-TW">登錄或啟用/禁用插件的管理模組。</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>manager</category>
<link>http://www.zeroboard.com</link>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="fr">Zero</name>
<name xml:lang="ru">Zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="fr">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</module>
</module>

View file

@ -6,5 +6,7 @@
<action name="dispAddonAdminSetup" type="view" standalone="true" />
<action name="procAddonAdminToggleActivate" type="controller" standalone="true" />
<action name="procAddonAdminSetupAddon" type="controller" standalone="true" />
<action name="procAddonSetupAddonAddMid" type="controller" />
<action name="procAddonSetupAddonDelMid" type="controller" />
</actions>
</module>

View file

@ -1,17 +1,17 @@
<?php
/**
* @file jp.lang.php
* @author zero (zero@nzeo.com) 翻訳RisaPapa
* @brief 日本語言語パッケージ
* @author zero (zero@nzeo.com) 翻訳RisaPapa、ミニミ
* @brief 日本語言語パッケージ
**/
$lang->addon = "アドオン";
$lang->addon = 'アドオン';
$lang->addon_info = 'アドオン情報';
$lang->addon_maker = 'アドオン作者';
$lang->addon_license = 'License';
$lang->addon_license = 'ライセンス';
$lang->addon_history = '変更内容';
$lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)";
$lang->about_addon_mid = "アドオンが使われる対象を指定します。<br />(選択なしの場合、全ての対象で利用可能)";
$lang->about_addon = 'アドオンは、HTMLの出力をコントロールするというより動作を制御する役割をします。お好みのアドオンを「使用/未使用」に設定するだけでサイトの運営に有用な機能が利用できます。';
?>

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