git-svn-id: http://xe-core.googlecode.com/svn/trunk@4383 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2008-07-17 05:51:21 +00:00
commit 4db9ea4d86
239 changed files with 4862 additions and 1477 deletions

View file

@ -13,6 +13,11 @@ RewriteRule ^(.+)/widgets/(.*) ./widgets/$2 [L]
RewriteRule ^(.+)/layouts/(.*) ./layouts/$2 [L]
RewriteRule ^(.+)/addons/(.*) ./addons/$2 [L]
# tools
RewriteRule ^tools/([a-zA-Z0-9_]+)$ ./tools/$1 [L]
RewriteRule ^tools/$ ./tools/index.php [L]
RewriteRule ^tools$ ./tools/index.php [L]
# page
RewriteRule ^([a-zA-Z0-9_]+)/([[:digit:]]+)page$ ./index.php?mid=$1&page=$2 [L]

View file

@ -1,35 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">자동 링크 애드온</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>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2008. 4. 22">
<name xml:lang="ko">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>
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">자동 링크 애드온</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>
<description xml:lang="ko">
게시글과 댓글의 내용중 http로 시작되는 일반 문자열에 자동으로 링크를 걸고 각 링크에 마우스 오버시 새창과 현재창 메뉴가 나타나도록 꾸미는 애드온입니다.
</description>
<description xml:lang="en">
<description xml:lang="en">
This addon makes a link to a string that starts with http.
</description>
<description xml:lang="zh-CN">
<description xml:lang="zh-CN">
主题及评论中以http开始的字符串自动转换为链接。并且鼠标移到链接上方时将出现可选(新窗/本页面)提示框。
</description>
<description xml:lang="es">
<description xml:lang="es">
Los comentarios que comienzan con http naeyongjung tema común de la cadena para vincular automáticamente a colgar el puntero del ratón sobre cada uno de los vínculos y saechang Ciudad y aparecen en el menú de add-on de decoración.
</description>
<description xml:lang="ru">
<description xml:lang="ru">
Комментарии, которые начинаются с http naeyongjung темой общей строки автоматически ссылку повесить мышь над каждой ссылке и saechang Сити и появляться на меню добавить-на украшения.
</description>
<description xml:lang="ge">
<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>
</author>
</addon>
<version>0.1</version>
<date>2008-04-22</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">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>
</author>
</addon>

View file

@ -1,20 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">BlogAPI 애드온</title>
<title xml:lang="jp">BlogAPI アドオン</title>
<title xml:lang="zh-CN">BlogAPI</title>
<title xml:lang="en">Addon for BlogAPI</title>
<title xml:lang="ge">Addon für BlogAPI</title>
<title xml:lang="es">Addon para BlogAPI</title>
<title xml:lang="ru">Аддон для BlogAPI</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</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>
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">BlogAPI 애드온</title>
<title xml:lang="jp">BlogAPI アドオン</title>
<title xml:lang="zh-CN">BlogAPI</title>
<title xml:lang="en">Addon for BlogAPI</title>
<title xml:lang="ge">Addon für BlogAPI</title>
<title xml:lang="es">Addon para BlogAPI</title>
<title xml:lang="ru">Аддон для BlogAPI</title>
<description xml:lang="ko">
metaWeblog를 지원하는 blogApi애드온입니다.
사용으로 설정하시면 각 모듈마다 RSD 태그를 노출합니다.
@ -37,9 +29,9 @@
This blogApi addon supports metaWeblog.
By using this option, it lets the RSD tag to be exposed to each module.
URL to the api is http://setup_path/module_name/api.
RSD tag and the api will work only if u use this addon.
RSD tag and the api will work only if u use this addon.
</description>
<description xml:lang="ge">
<description xml:lang="ge">
Diese blogApi addon metaWeblog unterstützt.
Durch die Verwendung dieser Option, die es ermöglicht RSD Tag ausgesetzt werden jedes Modul.
URL der api ist http://setup_path/module_name/api.
@ -57,5 +49,16 @@
URL для api - http://setup_path/module_name/api.
Только выбор опции использовать включает поведение RSD тега и api.
</description>
</author>
</addon>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</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>
</author>
</addon>

View file

@ -1,20 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">기본 카운터 애드온</title>
<title xml:lang="jp">接続カウンターアドオン</title>
<title xml:lang="zh-CN">网站访问统计</title>
<title xml:lang="en">Counter Addon</title>
<title xml:lang="ge">Counter Addon</title>
<title xml:lang="es">Addon contador básico</title>
<title xml:lang="ru">Аддон для базового счетчика</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</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>
<?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">Counter Addon</title>
<title xml:lang="ge">Counter Addon</title>
<title xml:lang="es">Addon contador básico</title>
<title xml:lang="ru">Аддон для базового счетчика</title>
<description xml:lang="ko">
제로보드XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다.
이 애드온을 켜셔야 접속 정보 수집이 됩니다.
@ -24,24 +16,35 @@
このアドオンを「使用」に設定しておくと接続(アクセス)情報が記録されます。
</description>
<description xml:lang="zh-CN">
利用ZeroboardXE的网站访问统计模块记录网站访问信息。
利用ZeroboardXE的网站访问统计模块记录网站访问信息。
把状态设置为"使用"时,才会记录网站访问信息.
</description>
<description xml:lang="en">
This addon logs access information based on the basic counter module within Zeroboard XE.
The access information will be collected only if you turn on this addon.
The access information will be collected only if you turn on this addon.
</description>
<description xml:lang="ge">
<description xml:lang="ge">
Dieses Addon-Logs Zugriff auf Informationen basiert auf den grundlegenden Zähler-Modul innerhalb Zeroboard 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.
Es necesario activar este addon para agregar la información de acceso.
Es necesario activar este addon para agregar la información de acceso.
</description>
<description xml:lang="ru">
Этот аддон пишет в лог информацию о доступе к сайту, основанную на базовом модуле счетчика в Zeroboard XE.
Для сбора информации необходимо включить этот аддон.
</description>
</author>
</addon>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</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>
</author>
</addon>

View file

@ -1,44 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">LemonPen XE 애드온</title>
<title xml:lang="zh-CN">LemonPen XE插件</title>
<title xml:lang="en">LemonPen XE Addon</title>
<title xml:lang="ge">LemonPen XE Addon</title>
<title xml:lang="es">LemonPen XE addon</title>
<title xml:lang="ru">LemonPen XE Addon</title>
<title xml:lang="en">LemonPen XE Addon</title>
<title xml:lang="ge">LemonPen XE Addon</title>
<title xml:lang="es">LemonPen XE addon</title>
<title xml:lang="ru">LemonPen XE Addon</title>
<title xml:lang="jp">LemonPen XE アドオン</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 12. 10">
<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>
<description xml:lang="en">You can insert LemonPen to the site when you enable this.</description>
<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>
<version>0.1</version>
<date>2007-12-10</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.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="ru">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="jp">zero</name>
<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>
<description xml:lang="en">You can insert LemonPen to the site when you enable this.</description>
<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>
</author>
<extra_vars>
<var name="sid">
<title xml:lang="ko">sid</title>
<title xml:lang="zh-CN">sid</title>
<title xml:lang="en">sid</title>
<title xml:lang="ge">sid</title>
<title xml:lang="es">sid</title>
<title xml:lang="ru">sid</title>
<title xml:lang="en">sid</title>
<title xml:lang="ge">sid</title>
<title xml:lang="es">sid</title>
<title xml:lang="ru">sid</title>
<title xml:lang="jp">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>
<description xml:lang="ge">Bitte geben Sie Ihre SID-Wert ein, die Sie nach Registrierung auf der Website LemonPen.</description>
<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>
</var>
<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>
<description xml:lang="ge">Bitte geben Sie Ihre SID-Wert ein, die Sie nach Registrierung auf der Website LemonPen.</description>
<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>
</var>
</extra_vars>
</addon>
</addon>

View file

@ -1,20 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">커뮤니케이션</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>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2008. 5. 28">
<name xml:lang="ko">제로</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>
<?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">Communication</title>
<title xml:lang="ge">커뮤니케이션</title>
<title xml:lang="es">커뮤니케이션</title>
<title xml:lang="ru">커뮤니케이션</title>
<description xml:lang="ko">
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
@ -30,7 +22,7 @@
This addon enables communication module in order to use message or friend function.
Please enable this addon in case you want to use those functions.
</description>
<description xml:lang="ge">
<description xml:lang="ge">
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
</description>
@ -42,5 +34,16 @@
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
</description>
</author>
</addon>
<version>0.1</version>
<date>2008-05-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</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>
</author>
</addon>

View file

@ -33,7 +33,7 @@
$flag_file = sprintf('%s%s', $flag_path, $logged_info->member_srl);
if(file_exists($flag_file)) {
@unlink($flag_file);
FileHandler::removeFile($flag_file);
Context::loadLang('./addons/member_communication/lang');
$script = sprintf('<script type="text/javascript"> xAddEventListener(window,"load", function() {if(confirm("%s")) { popopen("%s"); }}); </script>', Context::getLang('alert_new_message_arrived'), Context::getRequestUri().'?module=communication&act=dispCommunicationNewMessage');

View file

@ -1,20 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?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">Extra Member Info</title>
<title xml:lang="ge">회원 확장 정보 출력</title>
<title xml:lang="es">회원 확장 정보 출력</title>
<title xml:lang="ru">회원 확장 정보 출력</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</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>
<title xml:lang="ko">회원 확장 정보 출력</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>
<description xml:lang="ko">
회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요.
</description>
@ -27,7 +19,7 @@
<description xml:lang="en">
This addon displays a member's image name, image mark.
</description>
<description xml:lang="ge">
<description xml:lang="ge">
회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요.
</description>
<description xml:lang="es">
@ -36,5 +28,16 @@
<description xml:lang="ru">
회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요.
</description>
</author>
</addon>
<version>0.2</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</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>
</author>
</addon>

View file

@ -0,0 +1,96 @@
<?php
/**
* HDML Library ver 0.1
* @author zero <zero@zeroboard.com>
**/
class wap extends mobileXE {
/**
* @brief hdml 헤더 출력
**/
function printHeader() {
header("Content-Type:text/x-hdml; charset=".$this->charset);
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
print '<hdml version=3.0 ttl=0 markable=true>';
print "\n";
print $this->hasChilds()?'<choice name=main>':'<display>';
print "\n";
if($this->upperUrl) {
$url = $this->upperUrl;
printf('<action type=soft1 task=go dest="%s" label="%s">%s', $url->url, $url->text, "\n");
}
}
/**
* @brief 제목을 출력
**/
function printTitle() {
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
printf('<b>&lt;%s%s&gt;%s', $this->title,$titlePageStr,"\n");
}
/**
* @brief 내용을 출력
* hasChilds() 있으면 목록형을 그렇지 않으면 컨텐츠를 출력
**/
function printContent() {
if($this->hasChilds()) {
foreach($this->getChilds() as $key => $val) {
if(!$val['link']) continue;
printf('<ce task=go label="%s" dest="%s">%s%s',Context::getLang('cmd_select'), $val['href'], $val['text'], "\n");
}
} else {
printf('<wrap>%s<br>%s', $this->getContent(),"\n");
}
}
/**
* @brief 버튼을 출력함
**/
function printBtn() {
// 메뉴 형식
if($this->hasChilds()) {
if($this->prevUrl) {
$url = $this->prevUrl;
printf('<ce task=go label="%s" dest="%s">%s%s', $url->text, $url->url, $url->text, "\n");
}
if($this->nextUrl) {
$url = $this->nextUrl;
printf('<ce task=go label="%s" dest="%s">%s%s', $url->text, $url->url, $url->text, "\n");
}
if($this->homeUrl) {
$url = $this->homeUrl;
printf('<ce task=go label="%s" dest="%s">%s%s', $url->text, $url->url, $url->text, "\n");
}
// 컨텐츠 형식
} else {
if($this->prevUrl) {
$url = $this->prevUrl;
printf('<a task=gosub label="%s" dest="%s">%s</a>', $url->text, $url->url, $url->text);
}
if($this->nextUrl) {
$url = $this->nextUrl;
printf('<a task=gosub label="%s" dest="%s">%s</a>', $url->text, $url->url, $url->text);
}
if($this->homeUrl) {
$url = $this->homeUrl;
printf('<a task=gosub label="%s" dest="%s">%s</a>', $url->text, $url->url, $url->text);
}
}
}
/**
* @brief 푸터 정보를 출력
**/
function printFooter() {
print $this->hasChilds()?'</choice>':'</display>';
print "\n";
print("</hdml>");
}
}
?>

View file

@ -0,0 +1,63 @@
<?php
/**
* mhtml Library ver 0.1
* @author zero <zero@zeroboard.com>
**/
class wap extends mobileXE {
/**
* @brief hdml 헤더 출력
**/
function printHeader() {
print("<html>\n");
}
// 제목을 출력
function printTitle() {
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
printf('&lt;%s%s&gt;<br>%s', $this->title,$titlePageStr,"\n");
}
/**
* @brief 내용을 출력
* hasChilds() 있으면 목록형을 그렇지 않으면 컨텐츠를 출력
**/
function printContent() {
if($this->hasChilds()) {
foreach($this->getChilds() as $key => $val) {
if(!$val['link']) continue;
printf('<a href="%s" accesskey="%s">%s</a><br>%s', $val['href'], $this->getNo(), $val['text'], "\n");
}
} else {
print $this->getContent()."\n";
}
}
/**
* @brief 버튼을 출력함
**/
function printBtn() {
if($this->prevUrl) {
$url = $this->prevUrl;
printf('<a href="%s">%s</a><br>%s', $url->url, $url->text, "\n");
}
if($this->nextUrl) {
$url = $this->nextUrl;
printf('<a href="%s">%s</a><br>%s', $url->url, $url->text, "\n");
}
if($this->upperUrl) {
$url = $this->upperUrl;
printf('<btn href="%s" name="%s">%s', $url->url, $url->text, "\n");
}
if($this->homeUrl) {
$url = $this->homeUrl;
printf('<a btn="%s" href="%s">%s</a>%s', $url->text, $url->url, $url->text, "\n");
}
}
// 푸터 정보를 출력
function printFooter() {
print("</html>\n");
}
}
?>

View file

@ -0,0 +1,246 @@
<?php
/**
* Mobile XE Library Class ver 0.1
* @author zero <zero@zeroboard.com>
* @brief WAP 태그 출력을 위한 라이브러리
**/
class mobileXE {
// 기본 url
var $homeUrl = NULL;
var $upperUrl = NULL;
var $nextUrl = NULL;
var $prevUrl = NULL;
// 메뉴 네비게이션을 위한 변수
var $childs = null;
// 기본 변수
var $title = NULL;
var $content = NULL;
var $mobilePage = 0;
var $totalPage = 1;
var $charset = 'euc-kr';
var $no = 0;
// Deck size
var $deckSize = 500;
// getInstance
function &getInstance() {
static $instance = null;
if(!$instance) {
$browserType = mobileXE::getBrowserType();
if(!$browserType) return;
$class_file = sprintf('%saddons/mobile/classes/%s.class.php', _XE_PATH_, $browserType);
require_once($class_file);
Context::loadLang(_XE_PATH_.'addons/mobile/lang');
$instance = new wap();
$mobilePage = (int)Context::get('mpage');
if(!$mobilePage) $mobilePage = 1;
$instance->setMobilePage($mobilePage);
}
return $instance;
}
/**
* @brief 접속 브라우저의 헤더를 판단하여 브라우저 타입을 return
* 모바일 브라우저가 아닐 경우 null return
**/
function getBrowserType() {
// 브라우저 타입을 판별
$browserAccept = $_SERVER['HTTP_ACCEPT'];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$wap_sid = $_SERVER['HTTP_X_UP_SUBNO'];
if(eregi("SKT11", $userAgent)) $browserType = "wml";
elseif(eregi("skt", $browserAccept)) $browserType = "wml";
elseif(eregi("hdml", $browserAccept)) $browserType = "hdml";
elseif(eregi("CellPhone", $userAgent)) $browserType = "mhtml";
else $browserType = "html";
// class 지정 (html일 경우 동작 하지 않도록 함)
if($browserType == 'html') return null;
return $browserType;
}
// charset 지정
function setCharSet($charset = 'euc-kr') {
if(!$charset) $charset = 'euc-kr';
$this->charset = $charset;
}
// 모바일 기기의 용량 제한에 다른 가상 페이지 지정
function setMobilePage($page=1) {
if(!$page) $page = 1;
$this->mobilePage = $page;
}
// 목록형 데이터 설정을 위한 child menu지정
function setChilds($childs) {
// menu개수가 9개 이상일 경우 자체 페이징 처리
$menu_count = count($childs);
if($menu_count>9) {
$startNum = ($this->mobilePage-1)*9;
$idx = 0;
$new_childs = array();
foreach($childs as $k => $v) {
if($idx >= $startNum && $idx < $startNum+9) {
$new_childs[$k] = $v;
}
$idx ++;
}
$childs = $new_childs;
$this->totalPage = (int)(($menu_count-1)/9)+1;
// next/prevUrl 지정
if($this->mobilePage>1) {
$url = getUrl('mid',$_GET['mid'],'mpage',$this->mobilePage-1);
$text = sprintf('%s (%d/%d)', Context::getLang('cmd_prev'), $this->mobilePage-1, $this->totalPage);
$this->setPrevUrl($url, $text);
}
if($this->mobilePage<$this->totalPage) {
$url = getUrl('mid',$_GET['mid'],'mpage',$this->mobilePage+1);
$text = sprintf('%s (%d/%d)', Context::getLang('cmd_next'), $this->mobilePage+1, $this->totalPage);
$this->setNextUrl($url, $text);
}
}
$this->childs = $childs;
}
// menu 출력대상이 있는지 확인
function hasChilds() {
return count($this->childs)?true:0;
}
// child menu반환
function getChilds() {
return $this->childs;
}
// title 지정
function setTitle($title) {
$this->title = $title;
}
// title 반환
function getTitle() {
return $this->title;
}
// 컨텐츠 지정
function setContent($content) {
$content = str_replace(array('&','<','>','"','&amp;nbsp;'), array('&amp;','&lt;','&gt;','&quot;',' '), strip_tags($content));
// 모바일의 경우 한 덱에 필요한 사이즈가 적어서 내용을 모두 페이지로 나눔
$contents = array();
while($content) {
$tmp = cut_str($content, $this->deckSize, '');
$contents[] = $tmp;
$content = substr($content, strlen($tmp));
}
$this->totalPage = count($contents);
// next/prevUrl 지정
if($this->mobilePage>1) {
$url = getUrl('mid',$_GET['mid'],'mpage',$this->mobilePage-1);
$text = sprintf('%s (%d/%d)', Context::getLang('cmd_prev'), $this->mobilePage-1, $this->totalPage);
$this->setPrevUrl($url, $text);
}
if($this->mobilePage<$this->totalPage) {
$url = getUrl('mid',$_GET['mid'],'mpage',$this->mobilePage+1);
$text = sprintf('%s (%d/%d)', Context::getLang('cmd_next'), $this->mobilePage+1, $this->totalPage);
$this->setNextUrl($url, $text);
}
$this->content = $contents[$this->mobilePage-1];
}
// 컨텐츠 반환
function getContent() {
return $this->content;
}
// home url 지정
function setHomeUrl($url, $text) {
if(!$url) $url = '#';
$this->homeUrl->url = $url;
$this->homeUrl->text = $text;
}
// upper url 지정
function setUpperUrl($url, $text) {
if(!$url) $url = '#';
$this->upperUrl->url = $url;
$this->upperUrl->text = $text;
}
// prev url 지정
function setPrevUrl($url, $text) {
if(!$url) $url = '#';
$this->prevUrl->url = $url;
$this->prevUrl->text = $text;
}
// next url 지정
function setNextUrl($url, $text) {
if(!$url) $url = '#';
$this->nextUrl->url = $url;
$this->nextUrl->text = $text;
}
// display
function display() {
ob_start();
// 헤더를 출력
$this->printHeader();
// 제목을 출력
$this->printTitle();
// 내용 출력
$this->printContent();
// 버튼 출력
$this->printBtn();
// 푸터를 출력
$this->printFooter();
$content = ob_get_clean();
// 변환 후 출력
if(strtolower($this->charset) == 'utf-8') print $content;
else print iconv('UTF-8',$this->charset, $content);
exit();
}
// 페이지 이동
function movepage($url) {
header("location:$url");
exit();
}
// 목록등에서 일련 번호를 리턴한다
function getNo() {
$this->no++;
$str = $this->no;
return $str;
}
}
?>

View file

@ -0,0 +1,17 @@
<?php
function getListedItems($menu, &$listed_items, &$mid_list) {
if(!count($menu)) return;
foreach($menu as $node_srl => $item) {
if(preg_match('/^([a-zA-Z0-9\_\-]+)$/', $item['url'])) {
$mid = $item['mid'] = $item['url'];
$mid_list[$node_srl] = $mid;
} else {
$mid = $item['mid'] = null;
}
$listed_items[$mid] = $item;
getListedItems($item['list'], $listed_items, $mid_list);
}
}
?>

View file

@ -0,0 +1,74 @@
<?php
/**
* WML Library ver 0.1
* @author zero <zero@zeroboard.com>
**/
class wap extends mobileXE {
/**
* @brief wml 헤더 출력
**/
function printHeader() {
header("Content-Type: text/vnd.wap.wml");
header("charset: ".$this->charset);
print("<?xml version=\"1.0\" encoding=\"".$this->charset."\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n");
print("<wml>\n<card>\n<p>\n");
}
/**
* @brief 제목을 출력
**/
function printTitle() {
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
printf('&lt;%s%s&gt;<br/>%s', $this->title,$titlePageStr,"\n");
}
/**
* @brief 내용을 출력
* hasChilds() 있으면 목록형을 그렇지 않으면 컨텐츠를 출력
**/
function printContent() {
if($this->hasChilds()) {
foreach($this->getChilds() as $key => $val) {
if(!$val['link']) continue;
printf('<do type="%s" label="%s"><go href="%s" /></do>%s', $this->getNo(), $val['text'], $val['href'], "\n");
}
} else {
printf('%s<br/>%s', str_replace("<br>","<br/>",$this->getContent()),"\n");
}
}
/**
* @brief 버튼을 출력함
**/
function printBtn() {
if($this->prevUrl) {
$url = $this->prevUrl;
printf('<do type="%s" label="%s"><go href="%s"/></do>%s', $this->getNo(), $url->text, $url->url, "\n");
}
if($this->nextUrl) {
$url = $this->nextUrl;
printf('<do type="%s" label="%s"><go href="%s"/></do>%s', $this->getNo(), $url->text, $url->url, "\n");
}
if($this->homeUrl) {
$url = $this->homeUrl;
printf('<do type="access" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
}
if($this->upperUrl) {
$url = $this->upperUrl;
printf('<do type="vnd.up" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
}
}
// 푸터 정보를 출력
function printFooter() {
print("</p>\n</card>\n</wml>");
}
// 목록등에서 일련 번호를 리턴한다
function getNo() {
return "vnd.skmn".parent::getNo();
return $str;
}
}
?>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">모바일XE 애드온</title>
<title xml:lang="en">Mobile XE</title>
<description xml:lang="ko">
모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 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>
<version>0.1</version>
<date>2008-06-20</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="en">zero</name>
</author>
<extra_vars>
<var name="charset">
<title xml:lang="ko">문자셋</title>
<title xml:lang="en">Charset</title>
<description xml:lang="ko">
모바일 기기의 경우 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>
</var>
</extra_vars>
</addon>

View file

@ -0,0 +1,10 @@
<?php
/**
* @file addons/mobile/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @brief English Language Pack (Basic Contents only)
**/
$lang->cmd_go_upper = 'Upper';
$lang->cmd_go_home = 'Go Home';
?>

View file

@ -0,0 +1,10 @@
<?php
/**
* @file addons/mobile/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
$lang->cmd_go_upper = '상위';
$lang->cmd_go_home = '홈으로';
?>

View file

@ -0,0 +1,155 @@
<?php
if(!defined("__ZBXE__")) exit();
/**
* @file mobile.addon.php
* @author zero (zero@nzeo.com)
* @brief 모바일XE 애드온
*
* 헤더정보를 가로채서 모바일에서의 접속일 경우 WAP 태그로 컨텐츠를 출력함
**/
// 재호출을 막기 위한 코드
// 관련 클래스 파일을 읽음
require_once(_XE_PATH_.'addons/mobile/classes/mobile.class.php');
require_once(_XE_PATH_.'addons/mobile/classes/mobile.func.php');
// 모바일 브라우저가 아니면 return
if(!mobileXE::getBrowserType()) return;
// 관리자 페이지이거나 입출력이 XMLRPC일 경우에도 return
if(Context::get('module')=='admin' || Context::getRequestMethod()=='XMLRPC' || Context::getResponseMethod()=='XMLRPC' ) return;
/**
* 전처리
* 게시판의 경우 목록과 내용을 제대로 보여주기 위해서 모듈 정보를 조작함
* 게시판 외의 경우 그냥 첫페이지의 내용을 출력함
* 게시판 이외의 모듈 결과값은 차후 적용예정
**/
if($called_position == 'before_module_proc' && $this->module == 'board') {
$this->list_count = $this->module_info->list_count = 9;
return;
}
/**
* 동작 조건
* 1. called_position == after_module_proc 경우에만 동작
* 2. 관리자 페이지가 아닐 경우
* 3. Context::getRequestMethod()!=='XMLRPC' 경우에만
* 4. Context::getResponseMethod()!=='XMLRPC' 경우에만
**/
if($called_position != 'after_module_proc') return;
$oMobile = &mobileXE::getInstance();
if(!$oMobile) return;
$oMobile->setCharSet($addon_info->charset);
// 모듈의 정보를 구함
$module_info = $this->module_info;
// 메뉴 정보가 있는지 검사
if($module_info->menu_srl) {
// menu php cache 파일을 호출
$menu_cache_file = sprintf(_XE_PATH_.'files/cache/menu/%d.php', $module_info->menu_srl);
if(file_exists($menu_cache_file)) {
include $menu_cache_file;
// 정리된 menu들을 1차원으로 변경
getListedItems($menu->list, $listed_items, $mid_list);
// url request parameter에 mid값이 없을 경우, 즉 첫페이지 인경우 전체 목록을 구함
if(!isset($_GET['mid'])) $childs = $menu->list;
// mid가 명시되어 있으면 해당 mid의 childs를 구함
else $childs = $listed_items[$module_info->mid]['list'];
// 현재 메뉴의 depth가 1이상이면 상위 버튼을 지정
if($module_info->is_default != 'Y') {
$cur_menu_item = $listed_items[$module_info->mid];
if($cur_menu_item['parent_srl']) {
$parent_srl = $cur_menu_item['parent_srl'];
if($parent_srl && $mid_list[$parent_srl]) {
$parent_item = $listed_items[$mid_list[$parent_srl]];
if($parent_item) $oMobile->setUpperUrl(getUrl('','mid',$parent_item['mid']), Context::getLang('cmd_go_upper') );
}
} else {
$oMobile->setUpperUrl(getUrl(), Context::getLang('cmd_go_upper'));
}
}
// childs 메뉴들을 지정
$oMobile->setChilds($childs);
}
}
// 만약 childs가 없을 경우 컨텐츠 입력
if(!$oMobile->hasChilds()) {
// 현재 모듈이 게시판일 경우 (다른 모듈의 경우는 차후에..)
if($module_info->module == 'board') {
// 선택된 게시글이 있으면 게시글의 내용을 출력
$oDocument = Context::get('oDocument');
if($oDocument && $oDocument->isExists()) {
// 내용 지정 (태그를 모두 제거한 내용을 설정)
$content = strip_tags($oDocument->getContent(false,false,false));
$oMobile->setContent( $content );
// 상위 페이지를 목록으로 돌아가기로 지정
$oMobile->setUpperUrl( getUrl('document_srl',''), Context::getLang('cmd_list') );
// 선택된 게시글이 없으면 목록을 출력
} else {
$document_list = Context::get('document_list');
$childs = array();
if($document_list && count($document_list)) {
foreach($document_list as $key => $val) {
$href = getUrl('mid',$_GET['mid'],'document_srl',$val->document_srl);
$text = $val->getTitleText(10);
$obj = null;
$obj['href'] = $href;
$obj['link'] = $obj['text'] = $text;
$childs[] = $obj;
}
$oMobile->setChilds($childs);
}
$page_navigation = Context::get('page_navigation');
$totalPage = $page_navigation->last_page;
$page = (int)Context::get('page');
if(!$page) $page = 1;
// next/prevUrl 지정
if($page>1) $oMobile->setPrevUrl(getUrl('mid',$_GET['mid'],'page',$page-1), sprintf('%s (%d/%d)', Context::getLang('cmd_prev'), $page-1, $totalPage));
if($page<$totalPage) $oMobile->setNextUrl(getUrl('mid',$_GET['mid'],'page',$page+1), sprintf('%s (%d/%d)', Context::getLang('cmd_next'), $page+1, $totalPage));
$oMobile->mobilePage = $page;
$oMobile->totalPage = $totalPage;
}
// 게시판 이외의 경우
} else {
// 레이아웃은 사용하지 않도록 함
Context::set('layout','none');
// 템플릿 컴파일
$oTemplate = new TemplateHandler();
$oContext = &Context::getInstance();
$content = $oTemplate->compile($this->getTemplatePath(), $this->getTemplateFile());
$content = $oContext->transContent($content);
$oMobile->setContent( $content);
}
}
// 홈버튼 지정
$oMobile->setHomeUrl(getUrl(), Context::getLang('cmd_go_home'));
// 제목 지정
$oMobile->setTitle(Context::getBrowserTitle());
// 출력
$oMobile->display();
?>

View file

@ -1,62 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">OpenID delegation ID</title>
<title xml:lang="zh-CN">OpenID</title>
<title xml:lang="en">OpenID Delegation ID</title>
<title xml:lang="ge">OpenID Delegation ID</title>
<title xml:lang="ge">OpenID Delegation ID</title>
<title xml:lang="es">Delegación ID para OpenID</title>
<title xml:lang="jp">OpenIDアドオン</title>
<title xml:lang="ru">Аддон для делигирования доменного имени к OpenID</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">
본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다.
꼭 설정을 통해서 openid provider관련 값을 입력후 사용해주세요.
</description>
<description xml:lang="zh-CN">
可以把本人的域名当分散式身份验证系统(OpenID)来使用。
必须在设置中输入openid provider相关值后再使用。
</description>
<description xml:lang="en">
This addon enables you to use your own domain name as an OpenID.
Just be sure to set the values related with openid provider before using.
</description>
<description xml:lang="ge">
Dieses Addon ermöglicht es Ihnen, mit Ihrem eigenen Domain-Namen als OpenID.
Einfach sicher sein, dass die Werte im Zusammenhang mit OpenID-Provider, bevor Sie.
</description>
<description xml:lang="es">
Utlizando su propio dominio puede usar como OpenID.
Debe utilizar luego de ingresar los valores relacionado con openid provider a través de la configuracion.
</description>
<description xml:lang="jp">
保有するドメインをオープンIDとして活用することができます。
必ず設定で、OpenIDのプロバイダー関連情報を入力してから使用してください。
</description>
<description xml:lang="ru">
Этот аддон позволяет Вам использовать Вашу доменное имя как OpenID.
Прежде, чем использовать, просто убедитесь, что установлены значения, имеющие отношение к провайдеру openid.
</description>
<version>0.1</version>
<date>2007-02-28</date>
<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="en">zero</name>
<name xml:lang="ge">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>
<description xml:lang="ko">
본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다.
꼭 설정을 통해서 openid provider관련 값을 입력후 사용해주세요.
</description>
<description xml:lang="zh-CN">
可以把本人的域名当分散式身份验证系统(OpenID)来使用。
必须在设置中输入openid provider相关值后再使用。
</description>
<description xml:lang="en">
This addon enables you to use your own domain name as an OpenID.
Just be sure to set the values related with openid provider before using.
</description>
<description xml:lang="ge">
Dieses Addon ermöglicht es Ihnen, mit Ihrem eigenen Domain-Namen als OpenID.
Einfach sicher sein, dass die Werte im Zusammenhang mit OpenID-Provider, bevor Sie.
</description>
<description xml:lang="es">
Utlizando su propio dominio puede usar como OpenID.
Debe utilizar luego de ingresar los valores relacionado con openid provider a través de la configuracion.
</description>
<description xml:lang="jp">
保有するドメインをオープンIDとして活用することができます。
必ず設定で、OpenIDのプロバイダー関連情報を入力してから使用してください。
</description>
<description xml:lang="ru">
Этот аддон позволяет Вам использовать Вашу доменное имя как OpenID.
Прежде, чем использовать, просто убедитесь, что установлены значения, имеющие отношение к провайдеру openid.
</description>
</author>
<extra_vars>
<var name="server">
<title xml:lang="ko">server</title>
<title xml:lang="zh-CN">server</title>
<title xml:lang="en">server</title>
<title xml:lang="ge">server</title>
<title xml:lang="ge">server</title>
<title xml:lang="es">Servidor</title>
<title xml:lang="jp">server</title>
<title xml:lang="ru">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>
<description xml:lang="ge">Bitte geben Sie Ihre openid.server Wert.</description>
<description xml:lang="ge">Bitte geben Sie Ihre openid.server Wert.</description>
<description xml:lang="es">Ingrese el valor del openid.server.</description>
<description xml:lang="jp">openid.server の値を入力してください。</description>
<description xml:lang="ru">Пожалуйста, введите Ваше значение openid сервера.</description>
@ -64,7 +68,7 @@
<var name="delegate">
<title xml:lang="ko">delegate</title>
<title xml:lang="en">delegate</title>
<title xml:lang="ge">delegate</title>
<title xml:lang="ge">delegate</title>
<title xml:lang="zh-CN">delegate</title>
<title xml:lang="es">delegado</title>
<title xml:lang="jp">delegate</title>
@ -72,7 +76,7 @@
<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>
<description xml:lang="ge">Bitte geben Sie Ihre openid.delegate Wert.</description>
<description xml:lang="ge">Bitte geben Sie Ihre openid.delegate Wert.</description>
<description xml:lang="es">Ingresar el valor del openid.delegate</description>
<description xml:lang="jp">openid.delegate の値を入力してください。</description>
<description xml:lang="ru">Пожалуйста, введите Ваше значение openid делегата.</description>
@ -81,17 +85,17 @@
<title xml:lang="ko">xrds</title>
<title xml:lang="zh-CN">xrds</title>
<title xml:lang="en">xrds</title>
<title xml:lang="ge">xrds</title>
<title xml:lang="ge">xrds</title>
<title xml:lang="es">xrds</title>
<title xml:lang="jp">xrds</title>
<title xml:lang="ru">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>
<description xml:lang="ge">Bitte geben Sie Ihre X-XRDS-Standort Wert.</description>
<description xml:lang="ge">Bitte geben Sie Ihre X-XRDS-Standort Wert.</description>
<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>
</var>
</extra_vars>
</addon>
</addon>

View file

@ -1,20 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">포인트 레벨 아이콘 표시 애드온</title>
<title xml:lang="zh-CN">积分级别图标</title>
<title xml:lang="jp">ポイントレベルアイコン表示アドオン</title>
<title xml:lang="en">Point Level Icon</title>
<title xml:lang="ge">Point-Level-Symbol</title>
<title xml:lang="es">Addon para mostar el nivel del ícono</title>
<title xml:lang="ru">Аддон для отображения иконки уровня</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 7. 26">
<name xml:lang="ko">제로</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>
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">포인트 레벨 아이콘 표시 애드온</title>
<title xml:lang="zh-CN">积分级别图标</title>
<title xml:lang="jp">ポイントレベルアイコン表示アドオン</title>
<title xml:lang="en">Point Level Icon</title>
<title xml:lang="ge">Point-Level-Symbol</title>
<title xml:lang="es">Addon para mostar el nivel del ícono</title>
<title xml:lang="ru">Аддон для отображения иконки уровня</title>
<description xml:lang="ko">
포인트 시스템을 사용중일 경우 사용자 이름 앞에 레벨 아이콘을 표시하도록 합니다.
레벨 아이콘은 모듈 &gt; 포인트시스템에서 선택 가능합니다.
@ -31,11 +23,11 @@
This addon displays level icon in front of the user name when you are using the point system.
You can choose the level icon on Module &gt; Point System.
</description>
<description xml:lang="ge">
<description xml:lang="ge">
Dieses Addon zeigt Level Icon vor dem Benutzernamen, wenn Sie die Punkte-System.
Sie können wählen, der Level Icon in Modul> Point-System.
</description>
<description xml:lang="es">
<description xml:lang="es">
Este addon muestra el nivel del ícono delante del nombre del usuario cuando es usado el sistema de puntos.
Tu puedes elegir los icono de cada nivel en el módulo &gt; Sistema de Puntos.
</description>
@ -43,5 +35,16 @@
Этот аддон отображает иконку уровня напротив имени пользователя, когда используется система поинтов.
Вы можете выбрать иконку уровня на Модуле Системы Поинтов.
</description>
</author>
</addon>
<version>0.1</version>
<date>2007-07-26</date>
<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>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
</author>
</addon>

View file

@ -1,20 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">레인보우 링크 애드온</title>
<title xml:lang="zh-CN">Rainbow链接</title>
<title xml:lang="en">Rainbow Link Addon</title>
<title xml:lang="ge">Rainbow Link Addon</title>
<title xml:lang="es">Adición Enlace Arco Iris</title>
<title xml:lang="jp">レインボーリンクアドオン</title>
<title xml:lang="ru">Аддон для радужных ссылок</title>
<author email_address="webmaster@dynamicdrive.com" link="http://dynamicdrive.com" date="2007. 2. 28">
<name xml:lang="ko">dynamicdrive.com</name>
<name xml:lang="zh-CN">dynamicdrive.com</name>
<name xml:lang="en">dynamicdrive.com</name>
<name xml:lang="ge">dynamicdrive.com</name>
<name xml:lang="es">dynamicdrive.com</name>
<name xml:lang="jp">dynamicdrive.com</name>
<name xml:lang="ru">dynamicdrive.com</name>
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">레인보우 링크 애드온</title>
<title xml:lang="zh-CN">Rainbow链接</title>
<title xml:lang="en">Rainbow Link Addon</title>
<title xml:lang="ge">Rainbow Link Addon</title>
<title xml:lang="es">Adición Enlace Arco Iris</title>
<title xml:lang="jp">レインボーリンクアドオン</title>
<title xml:lang="ru">Аддон для радужных ссылок</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;에 저작권이 있습니다.
@ -27,13 +19,13 @@
This addon will insert the &quot;rainbow.js&quot; file to the header, which will make the linked text to get the chameleon(rainbow) color change effect.
&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="ge">
<description xml:lang="ge">
Dieses Addon wird ersetzt durch die &quot;rainbow.js&quot;-Datei auf den Kopf, wodurch der verlinkten Text, um das Chamäleon (Regenbogen) Farbwechsel-Effekt.
&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="es">
incluye rainbow.js en header para mostrar enlaces en colores de arco iris.
&lt;a href=&quot;http://www.dynamicdrive.com&quot; target=&quot;_blank&quot;&gt;Dynamicdrive.com&lt;/a&gt; tiene derecho de autor sobre rainbow.js
&lt;a href=&quot;http://www.dynamicdrive.com&quot; target=&quot;_blank&quot;&gt;Dynamicdrive.com&lt;/a&gt; tiene derecho de autor sobre rainbow.js
</description>
<description xml:lang="jp">
「rainbow.js」をヘッダーに追加し、リンクされている文字列の色を虹色で表示します。この機能拡張の「 rainbow.js」は「&lt;a href=&quot;http://www.dynamicdrive.com&quot; target=&quot;_blank&quot;&gt;Dynamicdrive.com&lt;/a&gt;」に著作権があります。
@ -42,5 +34,16 @@
Этот аддон добавляет файл с именем &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>
</author>
</addon>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="webmaster@dynamicdrive.com" link="http://dynamicdrive.com">
<name xml:lang="ko">dynamicdrive.com</name>
<name xml:lang="zh-CN">dynamicdrive.com</name>
<name xml:lang="en">dynamicdrive.com</name>
<name xml:lang="ge">dynamicdrive.com</name>
<name xml:lang="es">dynamicdrive.com</name>
<name xml:lang="jp">dynamicdrive.com</name>
<name xml:lang="ru">dynamicdrive.com</name>
</author>
</addon>

View file

@ -1,40 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">리퍼러 수집기</title>
<title xml:lang="jp">リファラー コレクター</title>
<title xml:lang="zh-CN">反向链接统计</title>
<title xml:lang="en">Referer Collector</title>
<title xml:lang="ge">Referer Collector</title>
<title xml:lang="es">Referer Collector</title>
<title xml:lang="ru">Сборщик рефералов</title>
<author email_address="haneul0318@gmail.com" link="http://haneul.zetyx.net" date="2007. 11. 26">
<name xml:lang="ko">haneul</name>
<name xml:lang="jp">Haneul</name>
<name xml:lang="zn-CN">haneul</name>
<name xml:lang="en">haneul</name>
<name xml:lang="ge">haneul</name>
<name xml:lang="es">haneul</name>
<name xml:lang="ru">haneul</name>
<description xml:lang="ko">
Referer log를 수집합니다.
</description>
<description xml:lang="jp">
リファラーログを収集します。
</description>
<description xml:lang="zh-CN">
记录反向链接统计数据。
</description>
<description xml:lang="en">
Collect referer log and statistics.
</description>
<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>
</author>
</addon>
<?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">Referer Collector</title>
<title xml:lang="ge">Referer Collector</title>
<title xml:lang="es">Referer Collector</title>
<title xml:lang="ru">Сборщик рефералов</title>
<description xml:lang="ko">Referer log를 수집합니다.</description>
<description xml:lang="jp">リファラーログを収集します。</description>
<description xml:lang="zh-CN">记录反向链接统计数据。</description>
<description xml:lang="en">Collect referer log and statistics.</description>
<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>
<version>0.1</version>
<date>2007-11-26</date>
<author email_address="haneul0318@gmail.com" link="http://haneul.zetyx.net">
<name xml:lang="ko">haneul</name>
<name xml:lang="jp">Haneul</name>
<name xml:lang="zn-CN">haneul</name>
<name xml:lang="en">haneul</name>
<name xml:lang="ge">haneul</name>
<name xml:lang="es">haneul</name>
<name xml:lang="ru">haneul</name>
</author>
</addon>

View file

@ -1,37 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">본문내 이미지 조절 애드온</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>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2008. 4. 22">
<name xml:lang="ko">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>
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">본문내 이미지 조절 애드온</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>
<description xml:lang="ko">
본문내에 삽입된 이미지의 크기를 본문크기에 맞게 하고 클릭시 원본을 보여주는 애드온입니다.
</description>
<description xml:lang="zh-CN">
自动调整主题内容区内的图片大小,点击将显示原始大小的插件。
</description>
<description xml:lang="en">
<description xml:lang="en">
This addon resizes images inserted in the article, and shows original image when you click on them.
</description>
<description xml:lang="es">
<description xml:lang="es">
La imagen corporal se inserta dentro del cuerpo para que se adapte al tamaño de la muestra original cuando hago clic en los add-ons.
</description>
<description xml:lang="ru">
<description xml:lang="ru">
Орган изображение вставляется внутрь тела с учетом размера первоначального шоу, когда я нажимаю на надстройки.
</description>
<description xml:lang="ge">
<description xml:lang="ge">
Body Bild eingefügt im Inneren des Körpers zu passen die Größe des Originals zeigen, wenn ich darauf klicke auf das Add-ons.
</description>
</author>
</addon>
<version>0.1</version>
<date>2008-04-22</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">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>
</author>
</addon>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
<title xml:lang="ko">댓글알리미 애드온</title>
<title xml:lang="en">Comment Notifier Addon</title>
<description xml:lang="ko">댓글알리미를 지원하는 애드온입니다.</description>
<description xml:lang="en">This addon enables Comment Notifier module.</description>
<version>0.2</version>
<date>2008-06-02</date>
<author email_address="haneul0318@seungyeop.kr" link="http://www.seungyeop.kr">
<name xml:lang="ko">haneul</name>
<name xml:lang="en">haneul</name>
</author>
</addon>

View file

@ -0,0 +1,36 @@
<?php
if(!defined("__ZBXE__")) exit();
if(Context::getRequestMethod() == "XMLRPC" || Context::getResponseMethod() == "XMLRPC")
{
return;
}
if(Context::getRequestMethod() == "POST" && $called_position == 'before_module_proc') {
$mode = $_REQUEST['mode'];
if(!$mode || $mode != "fb")
{
return;
}
$oController = &getController('tccommentnotify');
$oController->procNotifyReceived();
return;
}
if($called_position == "after_module_proc")
{
$oModel = &getModel('tccommentnotify');
if($oModel->checkShouldNotify())
{
$scriptCode = <<<EndOfScript
<script type="text/javascript">
// <![CDATA[
exec_xml("tccommentnotify", "procDoNotify");
// ]]>
</script>
EndOfScript;
Context::addHtmlHeader($scriptCode);
}
}
?>

View file

@ -185,6 +185,14 @@
if(is_object($oDB)&&method_exists($oDB, 'close')) $oDB->close();
}
/**
* @brief DB의 기타 정보 load
**/
function loadDBInfo() {
$oContext = &Context::getInstance();
return $oContext->_loadDBInfo();
}
/**
* @brief DB 정보를 설정하고 DB Type과 DB 정보를 return
**/
@ -478,10 +486,11 @@
foreach($_REQUEST as $key => $val) {
if($key == "page" || $key == "cpage" || substr($key,-3)=="srl") $val = (int)$val;
if(is_array($val)) {
for($i=0;$i<count($val);$i++) {
if(get_magic_quotes_gpc()) $val[$i] = stripslashes($val[$i]);
$val[$i] = trim($val[$i]);
else if(is_array($val) && count($val) ) {
foreach($val as $k => $v) {
if(get_magic_quotes_gpc()) $v = stripslashes($v);
$v = trim($v);
$val[$k] = $v;
}
} else {
if(get_magic_quotes_gpc()) $val = stripslashes($val);
@ -1013,17 +1022,10 @@
/**
* @brief 내용의 에디터 컴포넌트 코드를 변환
**/
function _fixQuotation($matches) {
$key = $matches[1];
$val = $matches[2];
if(substr($val,0,1)!='"') $val = '"'.$val.'"';
return sprintf('%s=%s', $key, $val);
}
function transEditorComponent($matches) {
// IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌
$buff = $matches[0];
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', array($this, _fixQuotation), $buff);
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff);
$buff = str_replace("&","&amp;",$buff);
// 에디터 컴포넌트에서 생성된 코드

View file

@ -496,7 +496,7 @@
if(!is_array($tables)) $tables = array($tables);
foreach($tables as $alias => $table) {
$filename = sprintf('%s/cache.%s%s', $this->count_cache_path, $this->prefix, $table);
@unlink($filename);
FileHandler::removeFile($filename);
FileHandler::writeFile( $filename, '' );
}

View file

@ -9,10 +9,21 @@
class FileHandler extends Handler {
/**
* @brief 대상 파일, 디렉토리의 절대경로를 반환
**/
function getRealPath($source) {
$temp = explode('/', $source);
if($temp[0] == '.') $source = _XE_PATH_.substr($source, 2);
return $source;
}
/**
* @brief 파일의 내용을 읽어서 return
**/
function readFile($file_name) {
$file_name = FileHandler::getRealPath($file_name);
if(!file_exists($file_name)) return;
$filesize = filesize($file_name);
if($filesize<1) return;
@ -35,6 +46,8 @@
* @brief $buff의 내용을 파일에 쓰기
**/
function writeFile($file_name, $buff, $mode = "w") {
$file_name = FileHandler::getRealPath($file_name);
$pathinfo = pathinfo($file_name);
$path = $pathinfo['dirname'];
if(!is_dir($path)) FileHandler::makeDir($path);
@ -47,38 +60,58 @@
@chmod($file_name, 0644);
}
/**
* @brief 파일 삭제
**/
function removeFile($file_name) {
$file_name = FileHandler::getRealPath($file_name);
if(file_exists($file_name)) @unlink($file_name);
}
/**
* @brief 파일이름이나 디렉토리명이나 위치 변경
**/
function rename($source, $target) {
$source = FileHandler::getRealPath($source);
$target = FileHandler::getRealPath($target);
@rename($source, $target);
}
/**
* @brief 특정 디렉토리를 이동
**/
function moveDir($source_dir, $target_dir) {
if(!is_dir($source_dir)) return;
if(!is_dir($target_dir)) {
FileHandler::makeDir($target_dir);
@unlink($target_dir);
}
@rename($source_dir, $target_dir);
FileHandler::rename($source_dir, $target_dir);
}
/**
* @brief $path내의 파일들을 return ('.', '..', '.로 시작하는' 파일들은 제외)
**/
function readDir($path, $filter = '', $to_lower = false, $concat_prefix = false) {
$path = FileHandler::getRealPath($path);
if(substr($path,-1)!='/') $path .= '/';
if(!is_dir($path)) return array();
$oDir = dir($path);
while($file = $oDir->read()) {
if(substr($file,0,1)=='.') continue;
if($filter && !preg_match($filter, $file)) continue;
if($to_lower) $file = strtolower($file);
if($filter) $file = preg_replace($filter, '$1', $file);
else $file = $file;
if($concat_prefix) $file = $path.$file;
if($concat_prefix) {
$file = sprintf('%s%s', str_replace(_XE_PATH_, '', $path), $file);
}
$output[] = $file;
}
if(!$output) return array();
return $output;
}
@ -108,6 +141,7 @@
* @brief 지정된 디렉토리 이하 모두 파일을 삭제
**/
function removeDir($path) {
$path = FileHandler::getRealPath($path);
if(!is_dir($path)) return;
$directory = dir($path);
while($entry = $directory->read()) {
@ -123,6 +157,25 @@
@rmdir($path);
}
/**
* @brief 지정된 디렉토리에 내용이 없으면 삭제
**/
function removeBlankDir($path) {
$item_cnt = 0;
$path = FileHandler::getRealPath($path);
if(!is_dir($path)) return;
$directory = dir($path);
while($entry = $directory->read()) {
if ($entry == "." || $entry == "..") continue;
if (is_dir($path."/".$entry)) $item_cnt = FileHandler::removeBlankDir($path.'/'.$entry);
}
$directory->close();
if($item_cnt < 1) @rmdir($path);
}
/**
* @biref 지정된 디렉토리를 제외한 모든 파일을 삭제
**/
@ -145,6 +198,8 @@
* @brief 원격파일을 다운받아서 특정 위치에 저장
**/
function getRemoteFile($url, $target_filename) {
$target_filename = FileHandler::getRealPath($target_filename);
$url_info = parse_url($url);
if(!$url_info['port']) $url_info['port'] = 80;
@ -167,7 +222,7 @@
}
*/
$header = sprintf("GET %s%s HTTP/1.0\r\nHost: %s\r\nAccept-Charset: utf-8;q=0.7,*;q=0.7\r\nReferer: %s://%s\r\nRequestUrl: %s\r\nConnection: Close\r\n\r\n", $url_info['path'], $url_info['query']?'?'.$url_info['query']:'', $url_info['host'], $url_info['scheme'], $url_info['host'], Context::getRequestUri());
$header = sprintf("GET %s%s HTTP/1.0\r\nHost: %s\r\nAccept-Charset: utf-8;q=0.7,*;q=0.7\r\nReferer: %s://%s\r\nRequestUrl: %s\r\nConnection: Close\r\n\r\n", $url_info['path'], $url_info['query']?'?'.$url_info['query']:'', $url_info['host'], $url_info['scheme'], $url_info['host'], Context::getRequestUri());
@fwrite($fp, $header);
@ -191,6 +246,9 @@
* @brief 특정 이미지 파일을 특정 위치로 옮김 (옮길때 이미지의 크기를 리사이징할 있음..)
**/
function createImageFile($source_file, $target_file, $resize_width = 0, $resize_height = 0, $target_type = '', $thumbnail_type = 'crop') {
$source_file = FileHandler::getRealPath($source_file);
$target_file = FileHandler::getRealPath($target_file);
if(!file_exists($source_file)) return;
if(!$resize_width) $resize_width = 100;
if(!$resize_height) $resize_height = $resize_width;
@ -219,10 +277,10 @@
// 이미지 정보가 정해진 크기보다 크면 크기를 바꿈 (%를 구해서 처리)
if($resize_width > 0 && $width >= $resize_width) $width_per = $resize_width / $width;
else $width_per = $width / $resize_width;
else $width_per = 1;
if($resize_height>0 && $height >= $resize_height) $height_per = $resize_height / $height;
else $height_per = $height / $resize_height;
else $height_per = 1;
if($thumbnail_type == 'ratio') {
if($width_per>$height_per) $per = $height_per;
@ -249,31 +307,27 @@
// 원본 이미지의 타입으로 임시 이미지 생성
switch($type) {
case 'gif' :
case 'gif' :
$source = @imagecreatefromgif($source_file);
break;
// jpg
case 'jpeg' :
case 'jpg' :
case 'jpeg' :
case 'jpg' :
$source = @imagecreatefromjpeg($source_file);
break;
// png
case 'png' :
case 'png' :
$source = @imagecreatefrompng($source_file);
break;
// bmp
case 'wbmp' :
case 'bmp' :
case 'wbmp' :
case 'bmp' :
$source = @imagecreatefromwbmp($source_file);
break;
default :
return;
}
// 디렉토리 생성
$path = preg_replace('/\/([^\.^\/]*)\.(gif|png|jpg|jpeg|bmp|wbmp)$/i','',$target_file);
FileHandler::makeDir($path);
// 원본 이미지의 크기를 조절해서 임시 이미지에 넣음
$new_width = (int)($width * $per);
$new_height = (int)($height * $per);
@ -289,26 +343,37 @@
if($source) {
if(function_exists('imagecopyresampled')) @imagecopyresampled($thumb, $source, $x, $y, 0, 0, $new_width, $new_height, $width, $height);
else @imagecopyresized($thumb, $source, $x, $y, 0, 0, $new_width, $new_height, $width, $height);
}
} else return false;
// 디렉토리 생성
$path = dirname($target_file);
if(!is_dir($path)) FileHandler::makeDir($path);
// 파일을 쓰고 끝냄
switch($target_type) {
case 'gif' :
@imagegif($thumb, $target_file, 100);
$output = @imagegif($thumb, $target_file);
break;
case 'jpeg' :
case 'jpg' :
@imagejpeg($thumb, $target_file, 100);
$output = @imagejpeg($thumb, $target_file, 100);
break;
case 'png' :
@imagepng($thumb, $target_file, 9);
$output = @imagepng($thumb, $target_file, 9);
break;
case 'wbmp' :
case 'bmp' :
@imagewbmp($thumb, $target_file, 100);
$output = @imagewbmp($thumb, $target_file, 100);
break;
}
@imagedestroy($thumb);
@imagedestroy($source);
if(!$output) return false;
@chmod($target_file, 0644);
return true;
}
}
?>

View file

@ -45,13 +45,13 @@
if(!$tpl_file) $tpl_file = $tpl_path.$tpl_filename;
// tpl_file이 비어 있거나 해당 파일이 없으면 return
if(!$tpl_file || !file_exists($tpl_file)) return;
if(!$tpl_file || !file_exists(FileHandler::getRealPath($tpl_file))) return;
$this->tpl_path = $tpl_path;
$this->tpl_file = $tpl_file;
// compiled된(or 될) 파일이름을 구함
$compiled_tpl_file = $this->_getCompiledFileName($tpl_file);
$compiled_tpl_file = FileHandler::getRealPath($this->_getCompiledFileName($tpl_file));
// 일단 컴파일
$buff = $this->_compile($tpl_file, $compiled_tpl_file);
@ -61,7 +61,7 @@
if(__DEBUG__==3 ) $GLOBALS['__template_elapsed__'] += getMicroTime() - $start;
return $output;
return $output;
}
/**
@ -83,9 +83,9 @@
function _compile($tpl_file, $compiled_tpl_file) {
if(!file_exists($compiled_tpl_file)) return $this->_compileTplFile($tpl_file, $compiled_tpl_file);
$source_ftime = filemtime($tpl_file);
$source_ftime = filemtime(FileHandler::getRealPath($tpl_file));
$target_ftime = filemtime($compiled_tpl_file);
if($source_ftime>$target_ftime || $target_ftime < filemtime('./classes/template/TemplateHandler.class.php') ) return $this->_compileTplFile($tpl_file, $compiled_tpl_file);
if($source_ftime>$target_ftime || $target_ftime < filemtime(_XE_PATH_.'classes/template/TemplateHandler.class.php') ) return $this->_compileTplFile($tpl_file, $compiled_tpl_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);
// 변수를 변경
@ -176,19 +176,39 @@
case 'endif' :
case 'endfor' :
case 'endforeach' :
case 'endswitch' :
$output = '}';
break;
case 'break' :
$output = 'break;';
break;
case 'default' :
$output = 'default :';
break;
case 'break@default' :
$output = 'break; default :';
break;
default :
if(substr($code,0,4)=='else') {
$suffix = '{';
if(substr($code, 0, 4) == 'else') {
$code = '}'.$code;
} elseif(substr($code,0,7)=='foreach') {
$tmp_str = substr($code,8);
} elseif(substr($code, 0, 7) == 'foreach') {
$tmp_str = substr($code, 8);
$tmp_arr = explode(' ', $tmp_str);
$var_name = $tmp_arr[0];
if(substr($var_name,0,1)=='$') $prefix = sprintf('if(count($__Context->%s)) ', substr($var_name,1));
else $prefix = sprintf('if(count(%s)) ', $var_name);
}
$output = preg_replace('/\$([a-zA-Z0-9\_\-]+)/i','$__Context->\\1', $code).'{';
if(substr($var_name, 0, 1) == '$') {
$prefix = sprintf('if(count($__Context->%s)) ', substr($var_name, 1));
} else {
$prefix = sprintf('if(count(%s)) ', $var_name);
}
} elseif(substr($code, 0, 4) == 'case') {
$suffix = ':';
} elseif(substr($code, 0, 10) == 'break@case') {
$code = 'break; case'.substr($code, 10);
$suffix = ':';
}
$output = preg_replace('/\$([a-zA-Z0-9\_\-]+)/i', '$__Context->\\1', $code.$suffix);
break;
}

View file

@ -20,6 +20,15 @@
$widget_sequence = $args->widget_sequence;
$widget_cache = $args->widget_cache;
// args값에서 urldecode를 해줌
$object_vars = get_object_vars($args);
if(count($object_vars)) {
foreach($object_vars as $key => $val) {
if(in_array($key, array('body','class','style','widget_sequence','widget','widget_padding_left','widget_padding_top','widget_padding_bottom','widget_padding_right'))) continue;
$args->{$key} = utf8RawUrlDecode($val);
}
}
/**
* 캐시 번호와 캐시 값이 아예 없으면 바로 데이터를 추출해서 리턴
**/
@ -65,7 +74,7 @@
FileHandler::writeFile($cache_file, $widget_content);
// lock 파일 제거
@unlink($lock_file);
FileHandler::removeFile($lock_file);
return $widget_content;
}

View file

@ -536,6 +536,7 @@ function doDocumentSave(obj) {
var oFilter = new XmlJsFilter(obj.form, "member", "procMemberSaveDocument", completeDocumentSave);
oFilter.addResponseItem("error");
oFilter.addResponseItem("message");
oFilter.addResponseItem("document_srl");
oFilter.proc();
editorRelKeys[editor_sequence]['content'].value = prev_content;
@ -543,6 +544,7 @@ function doDocumentSave(obj) {
}
function completeDocumentSave(ret_obj) {
xGetElementsByAttribute('input', 'name', 'document_srl')[0].value = ret_obj['document_srl'];
alert(ret_obj['message']);
}
@ -562,7 +564,7 @@ function doDocumentSelect(document_srl) {
}
// 게시글을 가져와서 등록하기
opener.location.href = opener.current_url.setQuery('document_srl', document_srl);
opener.location.href = opener.current_url.setQuery('document_srl', document_srl).setQuery('act', 'dispBoardWrite');
window.close();
}
@ -603,11 +605,19 @@ function clickCheckBoxAll(form, name) {
}
/* 관리자가 문서를 관리하기 위해서 선택시 세션에 넣음 */
var addedDocument = new Array();
function doAddDocumentCart(obj) {
var srl = obj.value;
addedDocument[addedDocument.length] = srl;
setTimeout(function() { callAddDocumentCart(addedDocument.length); }, 100);
}
function callAddDocumentCart(document_length) {
if(addedDocument.length<1 || document_length != addedDocument.length) return;
var params = new Array();
params["srl"] = srl;
params["srls"] = addedDocument.join(",");
exec_xml("document","procDocumentAdminAddCart", params, null);
addedDocument = new Array();
}
/* ff의 rgb(a,b,c)를 #... 로 변경 */

View file

@ -50,7 +50,7 @@ function xml_response_filter(oXml, callback_func, response_tags, callback_func_a
// xml handler
function xml_handler() {
this.obj_xmlHttp = null;
this.objXmlHttp = null;
this.method_name = null;
this.xml_path = request_uri+"index.php";
@ -65,7 +65,7 @@ function xml_handler() {
this.toZMsgObject = xml_handlerToZMsgObject;
this.parseXMLDoc = xml_parseXmlDoc;
this.obj_xmlHttp = this.getXmlHttp();
this.objXmlHttp = this.getXmlHttp();
}
function zGetXmlHttp() {
@ -106,16 +106,16 @@ function xml_handlerRequest(callBackFunc, xmlObj, callBackFunc2, response_tags,
}
}
if(this.obj_xmlHttp.readyState!=0) {
this.obj_xmlHttp.abort();
this.obj_xmlHttp = this.getXmlHttp();
if(this.objXmlHttp.readyState!=0) {
this.objXmlHttp.abort();
this.objXmlHttp = this.getXmlHttp();
}
this.obj_xmlHttp.onreadystatechange = function () {callBackFunc(xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj)};
this.objXmlHttp.onreadystatechange = function () {callBackFunc(xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj)};
// 모든 xml데이터는 POST방식으로 전송. try-cacht문으로 오류 발생시 대처
try {
this.obj_xmlHttp.open("POST", this.xml_path, true);
this.objXmlHttp.open("POST", this.xml_path, true);
} catch(e) {
alert(e);
@ -132,7 +132,7 @@ function xml_handlerRequest(callBackFunc, xmlObj, callBackFunc2, response_tags,
waiting_obj.style.visibility = "visible";
}
this.obj_xmlHttp.send(rd);
this.objXmlHttp.send(rd);
}
function xml_handlerSetPath(path) {
@ -141,7 +141,7 @@ function xml_handlerSetPath(path) {
function xml_handlerReset() {
this.obj_xmlHttp = this.getXmlHttp();
this.objXmlHttp = this.getXmlHttp();
this.params = new Array();
}
@ -150,8 +150,8 @@ function xml_handlerAddParam(key, val) {
}
function xml_handlerGetResponseXML() {
if(this.obj_xmlHttp && this.obj_xmlHttp.readyState == 4 && isDef(this.obj_xmlHttp.responseXML)) {
var xmlDoc = this.obj_xmlHttp.responseXML;
if(this.objXmlHttp && this.objXmlHttp.readyState == 4 && isDef(this.objXmlHttp.responseXML)) {
var xmlDoc = this.objXmlHttp.responseXML;
this.reset();
return xmlDoc;
}

View file

@ -62,7 +62,7 @@
$lang->cmd_publish = "Publier";
$lang->cmd_layout_setup = 'Configurer la Mise en page';
$lang->cmd_layout_edit = 'Editer la Mise en page';
$lang->cmd_search_by_ipaddress = 'IP주소로 검색';
$lang->cmd_search_by_ipaddress = 'Recherce par l\'Address IP';
$lang->enable = 'Valide';
$lang->disable = 'Invalide';
@ -83,7 +83,7 @@
$lang->writer = 'Auteur';
$lang->user_name = 'Nom d\'utilisateur';
$lang->nick_name = 'Surnom';
$lang->email_address = 'Courriel';
$lang->email_address = 'l';
$lang->homepage = 'Page d\'accueil';
$lang->blog = 'Blogue';
$lang->birthday = 'Anniversaire';
@ -222,7 +222,7 @@
$lang->column_type = 'Types des colonnes';
$lang->column_type_list['text'] = 'Texte en une seul ligne';
$lang->column_type_list['homepage'] = 'URL';
$lang->column_type_list['email_address'] = 'Courriel';
$lang->column_type_list['email_address'] = 'l';
$lang->column_type_list['tel'] = 'Numéro de Telephone';
$lang->column_type_list['textarea'] = 'Texte en plusieurs lignes';
$lang->column_type_list['checkbox'] = 'Case à cocher (multichoix)';

View file

@ -14,7 +14,7 @@
* 내용은 제로보드XE의 버전을 관리자 페이지에 표시하기 위한 용도이며
* config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야
**/
define('__ZBXE_VERSION__', '1.0.4');
define('__ZBXE_VERSION__', '1.0.5');
/**
* @brief 디버깅 메세지 출력

View file

@ -382,9 +382,6 @@
* @brief 주어진 숫자를 주어진 크기로 recursive하게 잘라줌
* @param no 주어진 숫자
* @param size 잘라낼 크기
*
* ex) 12, 3 => 012/
* ex) 1234, 3 => 123/004/
**/
function getNumberingPath($no, $size=3) {
$mod = pow(10, $size);
@ -419,13 +416,58 @@
// XSS 사용을 위한 이벤트 제거
$content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeJSEvent, $content);
/**
* 이미지나 동영상등의 태그에서 src에 관리자 세션을 악용하는 코드를 제거
* - 취약점 제보 : 김상원님
**/
$content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeSrcHack, $content);
return $content;
}
function removeJSEvent($matches) {
$tag = strtolower($matches[1]);
if($tag == "a" && preg_match('/href=("|\'?)javascript:/i',$matches[2])) $matches[0] = preg_replace('/href=("|\'?)javascript:/i','href=$1_javascript:', $matches[0]);
return preg_replace('/on([a-z]+)=/i','_on$1=',$matches[0]);
return preg_replace('/ on([a-z]+)=/i',' _on$1=',$matches[0]);
}
function removeSrcHack($matches) {
$tag = $matches[1];
$buff = trim(preg_replace('/(\/>|>)/','/>',$matches[0]));
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff);
$oXmlParser = new XmlParser();
$xml_doc = $oXmlParser->parse($buff);
// src값에 module=admin이라는 값이 입력되어 있으면 이 값을 무효화 시킴
$src = $xml_doc->{$tag}->attrs->src;
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],'=');
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 sprintf("<%s>",$tag);
}
}
return $matches[0];
}
/**
* @brief attribute의 value를 " 로 둘러싸도록 처리하는 함수
**/
function fixQuotation($matches) {
$key = $matches[1];
$val = $matches[2];
if(substr($val,0,1)!='"') $val = '"'.$val.'"';
return sprintf('%s=%s', $key, $val);
}
// hexa값을 RGB로 변환
@ -472,8 +514,9 @@
* 현재 요청받은 스크립트 경로를 return
**/
function getScriptPath() {
$url = $_SERVER['PHP_SELF']?$_SERVER['PHP_SELF']:($_SERVER['REQUEST_URI']?$_SERVER['REQUEST_URI']:$_SERVER['URL']);
return preg_replace('/index.php/i','',$url);
static $url = null;
if($url == null) $url = preg_replace('/\/tools\//i','/',preg_replace('/index.php$/i','',str_replace('\\','/',$_SERVER['SCRIPT_NAME'])));
return $url;
}
/**

View file

@ -1,78 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<layout version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.2">
<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>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2008. 2. 26">
<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>
<description xml:lang="ko">
제로보드XE 블로그 기본 스킨입니다.
디자인 : 서기정 (http://blog.naver.com/addcozy)
HTML/CSS : 소지훈
</description>
<description xml:lang="jp">
ゼロボードXEブログの基本スキンです。
デザイン:ソギジョン (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<description xml:lang="zh-CN">
Zeroboard 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.
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.
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.
Diseño: Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<description xml:lang="ru">
Это умолчанию кожи Zeroboard 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">
<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>
<description xml:lang="ko">
제로보드XE 블로그 기본 스킨입니다.
디자인 : 서기정 (http://blog.naver.com/addcozy)
HTML/CSS : 소지훈
</description>
<description xml:lang="jp">
ゼロボードXEブログの基本スキンです。
デザイン:ソギジョン (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<description xml:lang="zh-CN">
Zeroboard 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.
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.
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.
Diseño: Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<description xml:lang="ru">
Это умолчанию кожи Zeroboard XE блоге.
Дизайн: Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Ju-Hoon So
</description>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
</author>
<extra_vars>
<var name="colorset" type="select">
<title xml:lang="ko">컬러셋</title>
<title xml:lang="jp">カラーセット</title>
<title xml:lang="zh-CN">颜色</title>
<title xml:lang="en">Colorset</title>
<title xml:lang="ge">Colorset</title>
<title xml:lang="ge">Colorset</title>
<title xml:lang="es">Set de Colores</title>
<title xml:lang="ru">Colorset</title>
<title xml:lang="ru">Colorset</title>
<description xml:lang="ko">원하시는 컬러셋을 선택해주세요.</description>
<description xml:lang="jp">希望するカラーセットを選択してください。</description>
<description xml:lang="zh-CN">请选择颜色。</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>
<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>
<options name="blue">
<title xml:lang="ko">파란색 (기본)</title>
<title xml:lang="jp">青 (default)</title>
<title xml:lang="zh-CN">蓝色 (default)</title>
<title xml:lang="en">Blue (default)</title>
<title xml:lang="ge">Blue (Standard)</title>
<title xml:lang="ge">Blue (Standard)</title>
<title xml:lang="es">Azul (default)</title>
<title xml:lang="ru">Blue (default)</title>
<value>blue</value>
@ -82,7 +86,7 @@
<title xml:lang="jp">灰色背景</title>
<title xml:lang="zh-CN">灰色背景</title>
<title xml:lang="en">Gray</title>
<title xml:lang="ge">Gray</title>
<title xml:lang="ge">Gray</title>
<title xml:lang="es">Gray</title>
<title xml:lang="ru">Gray</title>
<value>gray</value>
@ -92,9 +96,9 @@
<title xml:lang="jp">Orange</title>
<title xml:lang="zh-CN">Orange</title>
<title xml:lang="en">Orange</title>
<title xml:lang="ge">Orange</title>
<title xml:lang="es">Orange</title>
<title xml:lang="ru">Orange</title>
<title xml:lang="ge">Orange</title>
<title xml:lang="es">Orange</title>
<title xml:lang="ru">Orange</title>
<value>orange</value>
</options>
<options name="violet">
@ -102,9 +106,9 @@
<title xml:lang="jp">Violet</title>
<title xml:lang="zh-CN">Violet</title>
<title xml:lang="en">Violet</title>
<title xml:lang="ge">Violett</title>
<title xml:lang="es">Violet</title>
<title xml:lang="ru">Violet</title>
<title xml:lang="ge">Violett</title>
<title xml:lang="es">Violet</title>
<title xml:lang="ru">Violet</title>
<value>violet</value>
</options>
<options name="green">
@ -112,9 +116,9 @@
<title xml:lang="jp"></title>
<title xml:lang="zh-CN">绿色</title>
<title xml:lang="en">Green</title>
<title xml:lang="ge">Grün</title>
<title xml:lang="es">Verde</title>
<title xml:lang="ru">Green</title>
<title xml:lang="ge">Grün</title>
<title xml:lang="es">Verde</title>
<title xml:lang="ru">Green</title>
<value>green</value>
</options>
</var>
@ -123,75 +127,76 @@
<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="ge">Basismodul</title>
<title xml:lang="es">Módulo Básico</title>
<title xml:lang="ru">Основной модуль</title>
<description xml:lang="ko">기본 모듈을 지정해주시면 레이아웃에서 표시되는 위젯들이 정상적으로 동작을 하게 됩니다</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="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>
</var>
<var name="background_image" type="image">
<title xml:lang="ko">배경 이미지</title>
<title xml:lang="jp">背景イメージ</title>
<title xml:lang="zh-CN">背景图片</title>
<title xml:lang="en">Background Image</title>
<title xml:lang="es">Imagen de fondo</title>
<title xml:lang="ru">Фоновое изображение</title>
<title xml:lang="es">Imagen de fondo</title>
<title xml:lang="ru">Фоновое изображение</title>
<description xml:lang="ko">배경 이미지를 사용하시려면 등록해주세요.</description>
<description xml:lang="jp">背景イメージを使う場合は、登録してください。</description>
<description xml:lang="zh-CN">要想使用背景图片请在这里上传。</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="es">Entre, por favor, si desea utilizar la imagen de fondo.</description>
<description xml:lang="ru">Введите, если вы хотите использовать фоновое изображение.</description>
<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>
</var>
<var name="profile_image" type="image">
<title xml:lang="ko">프로필 이미지</title>
<title xml:lang="jp">プロフィールイメージ</title>
<title xml:lang="zh-CN">博客头像</title>
<title xml:lang="en">Profile Image</title>
<title xml:lang="ge">Profil Bilder</title>
<title xml:lang="es">Perfil de Imagen</title>
<title xml:lang="ru">Профиль Изображение</title>
<title xml:lang="ge">Profil Bilder</title>
<title xml:lang="es">Perfil de Imagen</title>
<title xml:lang="ru">Профиль Изображение</title>
<description xml:lang="ko">프로필 이미지를 입력해 주세요 (가로 사이즈는 160px이 가장 보기 좋습니다)</description>
<description xml:lang="jp">プロフィールイメージを入力してください横幅は「160px」が一番適しています</description>
<description xml:lang="zh-CN">请上传博客个性头像(推荐宽度为160px)。</description>
<description xml:lang="en">Please input profile image (It is recommended to set width as 160px)</description>
<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="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>
</var>
<var name="profile" type="textarea">
<title xml:lang="ko">프로필</title>
<title xml:lang="jp">プロフィール</title>
<title xml:lang="zh-CN">简介</title>
<title xml:lang="en">Profile</title>
<title xml:lang="ge">Profil</title>
<title xml:lang="es">Perfil</title>
<title xml:lang="ru">Профиль</title>
<title xml:lang="ge">Profil</title>
<title xml:lang="es">Perfil</title>
<title xml:lang="ru">Профиль</title>
<description lang="ko">간단한 프로필을 입력해주세요</description>
<description lang="jp">簡単なプロフィールを入力してください。</description>
<description lang="zh-CN">请输入简单介绍。</description>
<description lang="en">Please input your simple profile</description>
<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="ge">Bitte geben Sie Ihre Simple Profile</description>
<description lang="es">Por favor, introduzca su perfil simple</description>
<description lang="ru">Введите простое профиль</description>
</var>
</extra_vars>
<menus>
<menu name="top_menu" default="true">
<title xml:lang="ko">상단 메뉴</title>
<title xml:lang="jp">上段メニュー</title>
<title xml:lang="zh-CN">菜单</title>
<title xml:lang="en">Top Menu</title>
<title xml:lang="ge">Top-Menü</title>
<title xml:lang="es">Menú superior</title>
<title xml:lang="ru">Главное меню</title>
<title xml:lang="ge">Top-Menü</title>
<title xml:lang="es">Menú superior</title>
<title xml:lang="ru">Главное меню</title>
<maxdepth>1</maxdepth>
</menu>
</menus>
</layout>
</layout>

View file

@ -1,85 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<layout version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.2">
<title xml:lang="ko">ZBXE 공식 사이트 레이아웃</title>
<title xml:lang="jp">ZBXEオフィシャルレイアウト</title>
<title xml:lang="en">ZBXE Official website layout</title>
<title xml:lang="ge">ZBXE Offizielle Website-Layout</title>
<title xml:lang="ru">ZBXE Официальный сайт макет</title>
<title xml:lang="ge">ZBXE Offizielle Website-Layout</title>
<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>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 8. 1">
<description xml:lang="ko">
제로보드XE 공식 사이트 레이아웃입니다.
디자인 : 이소라
퍼블리싱 : 정찬명
레이아웃 제작 : zero
</description>
<description xml:lang="jp">
ゼロボードXEのオフィシャルサイトのレイアウトです。
デザイン:イ ソラ
パブリシング:ジョン チャンミョン
レイアウト作成Zero
</description>
<description xml:lang="en">
This layout is the Zeroboard 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.
Designer: So-Ra Lee
HTML / CSS: Chan-Myung Jeong
Layout Hersteller: Zero
</description>
<description xml:lang="ru">
Этот формат является Zeroboard XE Официальный сайт компоновку.
Дизайнер: So-Ra Lee
HTML / CSS: Chan-Myung Jeong
Макет производителя: ноль
</description>
<description xml:lang="es">
Este diseño is el diseño oficial de la página web de Zerobard XE.
Deseñador : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
Productor del diseño : zero
</description>
<description xml:lang="zh-CN">
Zeroboard 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">
<name xml:lang="ko">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="ge">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="zh-CN">zero</name>
<description xml:lang="ko">
제로보드XE 공식 사이트 레이아웃입니다.
디자인 : 이소라
퍼블리싱 : 정찬명
레이아웃 제작 : zero
</description>
<description xml:lang="jp">
ゼロボードXEのオフィシャルサイトのレイアウトです。
デザイン:イ ソラ
パブリシング:ジョン チャンミョン
レイアウト作成Zero
</description>
<description xml:lang="en">
This layout is the Zeroboard 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.
Designer: So-Ra Lee
HTML / CSS: Chan-Myung Jeong
Layout Hersteller: Zero
</description>
<description xml:lang="ru">
Этот формат является Zeroboard XE Официальный сайт компоновку.
Дизайнер: So-Ra Lee
HTML / CSS: Chan-Myung Jeong
Макет производителя: ноль
</description>
<description xml:lang="es">
Este diseño is el diseño oficial de la página web de Zerobard XE.
Deseñador : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
Productor del diseño : zero
</description>
<description xml:lang="zh-CN">
Zeroboard XE官方网站布局。
设计 : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
布局 : zero
</description>
</author>
<extra_vars>
<var name="colorset" type="select">
<title xml:lang="ko">컬러셋</title>
<title xml:lang="jp">カラーセット</title>
<title xml:lang="zh-CN">颜色</title>
<title xml:lang="en">Colorset</title>
<title xml:lang="ge">Colorset</title>
<title xml:lang="ru">Colorset</title>
<title xml:lang="ge">Colorset</title>
<title xml:lang="ru">Colorset</title>
<title xml:lang="es">Set de colores</title>
<description xml:lang="ko">원하시는 컬러셋을 선택해주세요.</description>
<description xml:lang="jp">希望するカラーセットを選択してください。</description>
<description xml:lang="zh-CN">请选择颜色。</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>
<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>
<options name="default">
<title xml:lang="ko">기본</title>
<title xml:lang="jp">デフォルト</title>
<title xml:lang="en">Basic</title>
<title xml:lang="ge">Basic</title>
<title xml:lang="ru">Базовые</title>
<title xml:lang="ge">Basic</title>
<title xml:lang="ru">Базовые</title>
<title xml:lang="es">Básico</title>
<title xml:lang="zh-CN">默认</title>
<value>default</value>
@ -88,8 +92,8 @@
<title xml:lang="ko">검은색</title>
<title xml:lang="jp"></title>
<title xml:lang="en">Black</title>
<title xml:lang="ge">Schwarz</title>
<title xml:lang="ru">Черного</title>
<title xml:lang="ge">Schwarz</title>
<title xml:lang="ru">Черного</title>
<title xml:lang="es">Negro</title>
<title xml:lang="zh-CN">黑色</title>
<value>black</value>
@ -98,8 +102,8 @@
<title xml:lang="ko">하얀색</title>
<title xml:lang="jp"></title>
<title xml:lang="en">white</title>
<title xml:lang="ge">weiß</title>
<title xml:lang="ru">белый</title>
<title xml:lang="ge">weiß</title>
<title xml:lang="ru">белый</title>
<title xml:lang="es">Blanco</title>
<title xml:lang="zh-CN">白色</title>
<value>white</value>
@ -110,15 +114,15 @@
<title xml:lang="jp">ロゴイメージ</title>
<title xml:lang="zh-CN">LOGO图片</title>
<title xml:lang="en">Logo image</title>
<title xml:lang="ge">Logobildes</title>
<title xml:lang="ru">Изображения логотипа</title>
<title xml:lang="ge">Logobildes</title>
<title xml:lang="ru">Изображения логотипа</title>
<title xml:lang="es">Imagen del logotipo</title>
<description xml:lang="ko">레이아웃의 상단에 표시될 로고이미지를 입력하세요. (세로길이가 23px인 투명이미지가 가장 어울립니다)</description>
<description xml:lang="jp">レイアウトの上段に表示されるロゴイメージを入力してください。 (縦幅が23pxである透明イメージが最も合います。)</description>
<description xml:lang="zh-CN">请输入显示在布局顶部的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>
<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>
<description xml:lang="es">Ingresar una imagen para logotipo. ( Se recomienda una imagen de fondo transparente con una altura de 23px.</description>
</var>
<var name="index_url" type="text">
@ -126,15 +130,15 @@
<title xml:lang="jp">ホームページURL</title>
<title xml:lang="zh-CN">主页地址</title>
<title xml:lang="en">Homepage URL</title>
<title xml:lang="ge">Homepage URL</title>
<title xml:lang="ru">Домашняя страница URL</title>
<title xml:lang="ge">Homepage URL</title>
<title xml:lang="ru">Домашняя страница URL</title>
<title xml:lang="es">URL de la página web</title>
<description xml:lang="ko">로고를 클릭시에 이동할 홈 페이지 URL을 입력해 주세요.</description>
<description xml:lang="jp">ロゴをクリックした時に移動するホームページのURLを入力してください。</description>
<description xml:lang="zh-CN">点击网站LOGO时要移动的页面URL。</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>
<description xml:lang="ge">Bitte geben Sie die URL umzuleiten, wenn Benutzer klickt das Logo</description>
<description xml:lang="ru">Пожалуйста, введите URL для перенаправления, когда пользователь нажимает логотип</description>
<description xml:lang="es">Ingresar el URL de la página web para redireccionar al pulsar el logotipo</description>
</var>
<var name="background_image" type="image">
@ -142,26 +146,27 @@
<title xml:lang="jp">背景イメージ</title>
<title xml:lang="zh-CN">背景图片</title>
<title xml:lang="en">Background Image</title>
<title xml:lang="ge">Hintergrundbild</title>
<title xml:lang="ru">Фоновое изображение</title>
<title xml:lang="es">Imagen de fondo</title>
<title xml:lang="ge">Hintergrundbild</title>
<title xml:lang="ru">Фоновое изображение</title>
<title xml:lang="es">Imagen de fondo</title>
<description xml:lang="ko">배경 이미지를 사용하시려면 등록해주세요.</description>
<description xml:lang="jp">背景イメージを使う場合は、登録してください。</description>
<description xml:lang="zh-CN">要想使用背景图片请在这里上传。</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>
<description xml:lang="ge">Bitte geben Sie, wenn Sie verwenden wollen Hintergrundbild.</description>
<description xml:lang="ru">Введите, если вы хотите использовать фоновое изображение.</description>
<description xml:lang="es">Ingresar imagen de fondo si desea usar.</description>
</var>
</extra_vars>
<menus>
<menu name="main_menu" default="true">
<title xml:lang="ko">상단 메뉴</title>
<title xml:lang="jp">上段メニュー</title>
<title xml:lang="zh-CN">主菜单</title>
<title xml:lang="en">Top menu</title>
<title xml:lang="ge">Top Menü</title>
<title xml:lang="ru">Верхнее меню</title>
<title xml:lang="ge">Top Menü</title>
<title xml:lang="ru">Верхнее меню</title>
<title xml:lang="es">Menú Principal</title>
<maxdepth>3</maxdepth>
</menu>
@ -170,10 +175,10 @@
<title xml:lang="jp">下段メニュー</title>
<title xml:lang="zh-CN">底部菜单</title>
<title xml:lang="en">Bottom menu</title>
<title xml:lang="ge">Bottom-Menü</title>
<title xml:lang="ru">Внизу меню</title>
<title xml:lang="ge">Bottom-Menü</title>
<title xml:lang="ru">Внизу меню</title>
<title xml:lang="es">Menú Inferior </title>
<maxdepth>1</maxdepth>
</menu>
</menus>
</layout>
</layout>

View file

@ -57,7 +57,7 @@
$oAddonModel = &getAdminModel('addon');
$addon_list = $oAddonModel->getInsertedAddons();
foreach($addon_list as $addon => $val) {
if($val->is_used != 'Y' || !is_dir('./addons/'.$addon) ) continue;
if($val->is_used != 'Y' || !is_dir(_XE_PATH_.'addons/'.$addon) ) continue;
$extra_vars = unserialize($val->extra_vars);
$mid_list = $extra_vars->mid_list;
@ -69,7 +69,7 @@
$extra_vars = base64_encode($val->extra_vars);
}
$buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); if(file_exists("./addons/%s/%s.addon.php") && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); $addon_path = "./addons/%s/"; @include("./addons/%s/%s.addon.php"); }', $mid_list, $addon, $addon, $extra_vars, $addon, $addon, $addon);
$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);

View file

@ -84,30 +84,82 @@
if(!$xml_obj) return;
$info->title = $xml_obj->title->body;
// 작성자 정보
$addon_info->addon_name = $addon;
$addon_info->title = $xml_obj->title->body;
$addon_info->version = $xml_obj->attrs->version;
$addon_info->author->name = $xml_obj->author->name->body;
$addon_info->author->email_address = $xml_obj->author->attrs->email_address;
$addon_info->author->homepage = $xml_obj->author->attrs->link;
$addon_info->author->date = $xml_obj->author->attrs->date;
$addon_info->author->description = trim($xml_obj->author->description->body);
// 애드온 정보
if($xml_obj->version && $xml_obj->attrs->version == '0.2') {
// addon format 0.2
$addon_info->title = $xml_obj->title->body;
$addon_info->description = trim($xml_obj->description->body);
$addon_info->version = $xml_obj->version->body;
$addon_info->homepage = $xml_obj->link->body;
sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d);
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$addon_info->license = $xml_obj->license->body;
$addon_info->license_link = $xml_obj->license->attrs->link;
if(!is_array($xml_obj->author)) $author_list[] = $xml_obj->author;
else $author_list = $xml_obj->author;
foreach($author_list as $author) {
unset($author_obj);
$author_obj->name = $author->name->body;
$author_obj->email_address = $author->attrs->email_address;
$author_obj->homepage = $author->attrs->link;
$addon_info->author[] = $author_obj;
}
} else {
// addon format 0.1
$addon_info->addon_name = $addon;
$addon_info->title = $xml_obj->title->body;
$addon_info->description = trim($xml_obj->author->description->body);
$addon_info->version = $xml_obj->attrs->version;
sscanf($xml_obj->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d);
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$author_obj->name = $xml_obj->author->name->body;
$author_obj->email_address = $xml_obj->author->attrs->email_address;
$author_obj->homepage = $xml_obj->author->attrs->link;
$addon_info->author[] = $author_obj;
}
// history
if(!is_array($xml_obj->history->author)) $history[] = $xml_obj->history->author;
else $history = $xml_obj->history->author;
if($xml_obj->history) {
if(!is_array($xml_obj->history)) $history[] = $xml_obj->history;
else $history = $xml_obj->history;
foreach($history as $item) {
unset($obj);
$obj->name = $item->name->body;
$obj->email_address = $item->attrs->email_address;
$obj->homepage = $item->attrs->link;
$obj->date = $item->attrs->date;
$obj->description = $item->description->body;
$addon_info->history[] = $obj;
foreach($history as $item) {
unset($obj);
if($item->author) {
(!is_array($item->author)) ? $obj->author_list[] = $item->author : $obj->author_list = $item->author;
foreach($obj->author_list as $author) {
unset($author_obj);
$author_obj->name = $author->name->body;
$author_obj->email_address = $author->attrs->email_address;
$author_obj->homepage = $author->attrs->link;
$obj->author[] = $author_obj;
}
}
$obj->name = $item->name->body;
$obj->email_address = $item->attrs->email_address;
$obj->homepage = $item->attrs->link;
$obj->version = $item->attrs->version;
$obj->date = $item->attrs->date;
$obj->description = $item->description->body;
if($item->log) {
(!is_array($item->log)) ? $obj->log[] = $item->log : $obj->log = $item->log;
foreach($obj->log as $log) {
$obj->logs[] = $log->body;
}
}
$addon_info->history[] = $obj;
}
}
// DB에 설정된 내역을 가져온다

View file

@ -1,26 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="manager">
<title xml:lang="ko">애드온</title>
<title xml:lang="en">Addon</title>
<title xml:lang="es">Addon</title>
<title xml:lang="zh-CN">插件</title>
<title xml:lang="jp">アドオン</title>
<title xml:lang="fr">Additions</title>
<title xml:lang="ru">Аддоны</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</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>
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">애드온</title>
<title xml:lang="en">Addon</title>
<title xml:lang="es">Addon</title>
<title xml:lang="zh-CN">插件</title>
<title xml:lang="jp">アドオン</title>
<title xml:lang="fr">Additions</title>
<title xml:lang="ru">Аддоны</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>
<description xml:lang="zh-CN">登录插件或设置启用/禁用插件的管理模块。</description>
<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="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>
</author>
</module>
<version>0.1</version>
<date>2007-02-28</date>
<category>manager</category>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</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>
</author>
</module>

View file

@ -9,6 +9,7 @@
$lang->addon_info = 'Summary of this Addon';
$lang->addon_maker = 'Author of this Addon';
$lang->addon_license = 'License';
$lang->addon_history = 'Addon History';
$lang->about_addon_mid = "Addons can select targets.<br />(All targets will be selected when nothing is selected)";

View file

@ -9,6 +9,7 @@
$lang->addon_info = 'Información de Addon';
$lang->addon_maker = 'Autor de Addon';
$lang->addon_license = 'License';
$lang->addon_history = 'Historia de Addon ';
$lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)";

View file

@ -9,6 +9,7 @@
$lang->addon_info = 'Le résumé de la Compagnon';
$lang->addon_maker = 'L\'Auteur de la Compagnon';
$lang->addon_license = 'License';
$lang->addon_history = 'L\'Histoire de la Compagnon';
$lang->about_addon_mid = "On peut choisir des objets dans lesquels la Compagnon soit utilisé.<br />(Tout sera choisi quand rien n'est choisi.)";

View file

@ -9,6 +9,7 @@
$lang->addon_info = 'アドオン情報';
$lang->addon_maker = 'アドオン作者';
$lang->addon_license = 'License';
$lang->addon_history = '変更内容';
$lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)";

View file

@ -2,14 +2,15 @@
/**
* @file ko.lang.php
* @author zero (zero@nzeo.com)
* @brief 한국어 언어팩
* @brief 한국어 언어팩
**/
$lang->addon = "애드온";
$lang->addon = '애드온';
$lang->addon_info = '애드온정보';
$lang->addon_maker = '애드온 제작자';
$lang->addon_history = '변경 사항 ';
$lang->addon_license = '라이센스';
$lang->addon_history = '변경 이력';
$lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)";
$lang->about_addon = '애드온은 html결과물을 출력하기 보다 동작을 제어하는 역할을 합니다.<br />원하시는 애드온을 on/ off하시는 것만으로 사이트 운영에 유용한 기능을 연동할 수 있습니다.';

View file

@ -9,6 +9,7 @@
$lang->addon_info = 'Информация об аддоне';
$lang->addon_maker = 'Автор аддона';
$lang->addon_license = 'License';
$lang->addon_history = 'История аддона';
$lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)";

View file

@ -9,6 +9,7 @@
$lang->addon_info = '插件信息';
$lang->addon_maker = '插件作者';
$lang->addon_license = 'License';
$lang->addon_history = '更新纪录 ';
$lang->about_addon_mid = "可以指定使用插件的对象。<br />(全部解除表示可用在所有对象。)";

View file

@ -13,24 +13,72 @@
</tr>
<tr>
<th scope="row">{$lang->author}</th>
<td class="blue"><a href="mailto:{$addon_info->author->email_address}">{$addon_info->author->name}</a></td>
<td class="blue">
<!--@foreach($addon_info->author as $author)-->
{$author->name} (<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a>, <a href="mailto:{$author->email_address}">{$author->email_address}</a>)<br />
<!--@endforeach-->
</td>
</tr>
<tr>
<th scope="row">{$lang->homepage}</th>
<td class="blue"><a href="{$addon_info->author->homepage}" onclick="window.open(this.href);return false;">{$addon_info->author->homepage}</a></td>
<td class="blue"><a href="{$addon_info->homepage}" onclick="window.open(this.href);return false;">{$addon_info->homepage}</a></td>
</tr>
<tr>
<th scope="row">{$lang->regdate}</th>
<td>{$addon_info->author->date}</td>
<td>{zdate($addon_info->date, 'Y-m-d')}</td>
</tr>
<tr>
<th scope="row">{$lang->addon_license}</th>
<td>
{nl2br(trim($addon_info->license))}
<!--@if($addon_info->license_link)-->
<p><a href="{$addon_info->license_link}" onclick="window.close(); return false;">{$addon_info->license_link}</a></p>
<!--@end-->
</td>
</tr>
<tr>
<th scope="row">{$lang->description}</th>
<td>{nl2br(trim($addon_info->author->description))}</td>
<td>{nl2br(trim($addon_info->description))}</td>
</tr>
</table>
</div>
<!--@if($addon_info->history)-->
<div id="popHistoryHeadder">
<h3>{$lang->addon_history}</h3>
</div>
<div id="popHistoryBody">
<table cellspacing="0" class="adminTable">
<col width="100" />
<col />
<!--@foreach($addon_info->history as $history)-->
<tr>
<th scope="row">
{$history->version}<br />
{$history->date}
</th>
<td>
<!--@foreach($history->author as $author)-->
<p>{$author->name} (<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a> / <a href="mailto:{$author->email_address}">{$author->email_address}</a>)</p>
<!--@endforeach-->
<!--@if($addon_info->description)-->
<p>{nl2br(trim($history->description))}</p>
<!--@endif-->
<!--@if($history->logs)-->
<ul>
<!--@foreach($history->logs as $log)--><li>{$log}</li><!--@endforeach-->
</ul>
<!--@endif-->
</td>
</tr>
<!--@endforeach-->
</table>
</div>
<!--@endif-->
<div id="popFooter" class="tCenter">
<a href="#" onclick="window.close(); return false;" class="button"><span>{$lang->cmd_close}</span></a>
</div>

View file

@ -50,8 +50,12 @@
({$val->addon})
</th>
<td class="tahoma">{$val->version}</td>
<td><a href="{$val->author->homepage}" onclick="window.open(this.href);return false;">{$val->author->name}</a></td>
<td class="tahoma">{$val->author->date}</td>
<td>
<!--@foreach($val->author as $author)-->
<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->name}</a>
<!--@endforeach-->
</td>
<td class="tahoma">{zdate($val->date, 'Y-m-d')}</td>
<td class="tahoma">{$val->path}</td>
<td><a href="{getUrl('','module','addon','act','dispAddonAdminSetup','selected_addon',$val->addon)}" onclick="popopen(this.href,'addon_info');return false" class="blue">{$lang->cmd_setup}</a></td>
<td>
@ -64,7 +68,7 @@
</tr>
<tr>
<td colspan="6">
{nl2br($val->author->description)}
{nl2br($val->description)}
</td>
</tr>
<!--@end-->

View file

@ -15,15 +15,19 @@
<col />
<tr>
<th scope="row"><label for="textfield1">{$lang->title}</label></th>
<td>{$addon_info->title} ver. {$addon_info->version}</td>
<td>{$addon_info->title} ver. {$addon_info->version} ({zdate($addon_info->date, 'Y-m-d')})</td>
</tr>
<tr>
<th scope="row"><label for="textfield2">{$lang->author}</label></th>
<td><a href="mailto:{$addon_info->author->email_address}">{$addon_info->author->name}</a></td>
<th scope="row">{$lang->author}</th>
<td class="blue">
<!--@foreach($addon_info->author as $author)-->
{$author->name} (<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a>, <a href="mailto:{$author->email_address}">{$author->email_address}</a>)<br />
<!--@endforeach-->
</td>
</tr>
<tr>
<th scope="row"><label for="textfield2">{$lang->homepage}</label></th>
<td><a href="{$addon_info->author->homepage}" onclick="window.open(this.href);return false;">{$addon_info->author->homepage}</a></td>
<td><a href="{$addon_info->homepage}" onclick="window.open(this.href);return false;">{$addon_info->homepage}</a></td>
</tr>
<!--@foreach($addon_info->extra_vars as $id => $var)-->

View file

@ -54,7 +54,7 @@
function dispAdminIndex() {
// 공식사이트에서 최신 뉴스를 가져옴
$newest_news_url = sprintf("http://news.zeroboard.com/%s/news.php", Context::getLangType());
$cache_file = sprintf("./files/cache/newest_news.%s.cache.php", Context::getLangType());
$cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_,Context::getLangType());
// 1시간 단위로 캐싱 체크
if(!file_exists($cache_file) || filemtime($cache_file)+ 60*60 < time()) {

View file

@ -46,9 +46,9 @@
FileHandler::removeFilesInDir("./files/cache/queries");
// ./files/cache/news* 파일 삭제
$directory = dir("./files/cache/");
$directory = dir(_XE_PATH_."files/cache/");
while($entry = $directory->read()) {
if(substr($entry,0,11)=='newest_news') @unlink("./files/cache/".$entry);
if(substr($entry,0,11)=='newest_news') FileHandler::removeFile("./files/cache/".$entry);
}
$directory->close();
}

View file

@ -1,23 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="base">
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">관리자 모듈</title>
<title xml:lang="en">Administrator Module</title>
<title xml:lang="es">Módulo del administrador</title>
<title xml:lang="zh-CN">管理员模块</title>
<title xml:lang="jp">管理者用モジュール</title>
<title xml:lang="ru">Модуль администратора</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">각 모듈들의 기능을 나열하고 관리자용 레이아웃을 적용하여 관리 기능을 사용할 수 있도록 하는 모듈입니다.</description>
<description xml:lang="en">This module shows a list of features of each module, and enables you to use a quite few of managers by applying layout for administrator.</description>
<description xml:lang="es">Este módulo muestra una lista de características de cada módulo, en donde puede activar la función de la administracion aplicando el diseño del administrador.</description>
<description xml:lang="zh-CN">列出各模块的功能并使用管理员布局,可以让其使用管理功能的模块。</description>
<description xml:lang="jp">各モジュールの機能を羅列し、管理者用のレイアウトを適用させ、管理機能が使用できるようにするモジュールです。</description>
<description xml:lang="ru">Этот модуль показывает список возможностей каждого модуля, и позволяет Вам использовать несколько менеджеров, применяя лейаут для администратора.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>base</category>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</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="ru">zero</name>
<description xml:lang="ko">각 모듈들의 기능을 나열하고 관리자용 레이아웃을 적용하여 관리 기능을 사용할 수 있도록 하는 모듈입니다.</description>
<description xml:lang="en">This module shows a list of features of each module, and enables you to use a quite few of managers by applying layout for administrator.</description>
<description xml:lang="es">Este módulo muestra una lista de características de cada módulo, en donde puede activar la función de la administracion aplicando el diseño del administrador.</description>
<description xml:lang="zh-CN">列出各模块的功能并使用管理员布局,可以让其使用管理功能的模块。</description>
<description xml:lang="jp">各モジュールの機能を羅列し、管理者用のレイアウトを適用させ、管理機能が使用できるようにするモジュールです。</description>
<description xml:lang="ru">Этот модуль показывает список возможностей каждого модуля, и позволяет Вам использовать несколько менеджеров, применяя лейаут для администратора.</description>
</author>
</module>
</module>

View file

@ -125,9 +125,10 @@ h4 .view { color:#158692; padding-right:.6em; font:bold .9em Tahoma; background:
.buttonTypeGo { border:none; cursor:pointer; width:24px; height:20px; position:relative; top:-1px; font:.75em Tahoma; text-align:center; background:url(../images/buttonTypeInput24.gif) no-repeat; }
#popHeadder { height:40px; background:url(../images/popupTopBg.png) repeat-x left top; padding:10px;}
#popHeadder h1 { background:url("../images/top_head_title_bg.gif") repeat-x left top; font-size:1em; border:1px solid #E3E3E2; padding:9px; color:#555555; margin:0; }
#popBody { width:600px; padding:10px; background:#ffffff;}
#popHeadder, #popHistoryHeadder { height:40px; background:url(../images/popupTopBg.png) repeat-x left top; padding:10px;}
#popHeadder h1, #popHistoryHeadder h1 { background:url("../images/top_head_title_bg.gif") repeat-x left top; font-size:1em; border:1px solid #E3E3E2; padding:9px; color:#555555; margin:0; }
#popBody, #popHistoryBody { width:600px; padding:10px; background:#ffffff;}
#popHistoryBody { height: 200px; overflow: auto; padding-right:0; }
#popFooter { width:620px; background:#f7f7f6; border-top:1px solid #e8e8e7; padding:.5em 0 .5em 0; overflow:hidden; }
#popFooter .close { position:relative; left:50%; margin-left:-1em; float:left;}

View file

@ -33,7 +33,7 @@
<!--@if($v->category == $key)-->
<!--@if($v->admin_index_act)-->
<li <!--@if(in_array($act, $v->actions))-->class="on"<!--@end--> onclick="location.href='{getUrl('','module','admin','act',$v->admin_index_act)}'; return false;">
<a href="{getUrl('','module','admin','act',$v->admin_index_act)}">{$v->title}</a>
<a href="{getUrl('','module','admin','act',$v->admin_index_act)}" title="{trim($v->description)}">{$v->title}</a>
</li>
<!--@end-->
<!--@end-->

View file

@ -67,7 +67,7 @@
$del_var = $obj->{"del_".$vars->name};
unset($obj->{"del_".$vars->name});
if($del_var == 'Y') {
@unlink($module_info->{$vars->name});
FileHandler::removeFile($module_info->{$vars->name});
continue;
}

View file

@ -1,23 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="service">
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">게시판</title>
<title xml:lang="zh-CN">版面</title>
<title xml:lang="en">Board</title>
<title xml:lang="es">Tablero</title>
<title xml:lang="jp">掲示板</title>
<title xml:lang="ru">Форум</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">게시판의 기능을 담당하는 모듈. 게시판의 생성/추가 관리등의 관리자 기능도 포함합니다.</description>
<description xml:lang="zh-CN">给用户提供相应版面功能,将包含版面的生成/添加及版面管理等管理员功能。</description>
<description xml:lang="en">Module in charge of function of the board. Also includes administrator functions such as creating/managing boards.</description>
<description xml:lang="es">Módulo para la función del tablero. Incluye funciones de administración como crear/ agregar o el manejo de los tableros.</description>
<description xml:lang="jp">掲示板の機能を担うモジュールです。掲示板の生成・追加・管理などの管理者機能も含まれています。</description>
<description xml:lang="ru">Модуль для функционирования форума. Также включает в себя функции администратора такие как создание/управление форумами.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>service</category>
<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="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">게시판의 기능을 담당하는 모듈. 게시판의 생성/추가 관리등의 관리자 기능도 포함합니다.</description>
<description xml:lang="zh-CN">给用户提供相应版面功能,将包含版面的生成/添加及版面管理等管理员功能。</description>
<description xml:lang="en">Module in charge of function of the board. Also includes administrator functions such as creating/managing boards.</description>
<description xml:lang="es">Módulo para la función del tablero. Incluye funciones de administración como crear/ agregar o el manejo de los tableros.</description>
<description xml:lang="jp">掲示板の機能を担うモジュールです。掲示板の生成・追加・管理などの管理者機能も含まれています。</description>
<description xml:lang="ru">Модуль для функционирования форума. Также включает в себя функции администратора такие как создание/управление форумами.</description>
</author>
</module>
</module>

View file

@ -20,7 +20,7 @@
$lang->category_group_srls = 'Groupe Accessible';
$lang->search_result = 'Résultat de la Recherche';
$lang->consultation = 'Consultation';
$lang->admin_mail = '관리자 메일';
$lang->admin_mail = 'Mél de l\'administrateur';
// Mots utiliss en bouton
$lang->cmd_board_list = 'Liste des Panneaux';
@ -30,11 +30,11 @@
// blah blah..
$lang->about_category_title = 'Entrez le nom de la catégorie, SVP.';
$lang->about_expand = 'Si vous cochez la case, ce sera toujours tendu';
$lang->about_category_group_srls = '선택하신 그룹만 현재 카테고리를 지정할 수 있도록 합니다';
$lang->about_category_group_srls = 'Le groupe choisi seulement pourront utiliser la catégorie courrante';
$lang->about_layout_setup = 'Vous pouvez manuellement modifier le code de Mise en Page du Panneau. Insérez ou arrangez le code de Widget n\'importe où vous voulez.';
$lang->about_board_category = 'Vous pouvez créer des catégories d\'affichage dans le tableau. Quand la catégorie d\'affichage est cassé, essayez manuellement rétablir la cachette du fichier.';
$lang->about_except_notice = "L'Article de Notice ne sera exposé sur la liste normale.";
$lang->about_board = "Ce module se sert à créer et arranger des Panneaux.\nAprés avoir créé un module, si vous cliquez le nom sur le liste, vous pouvez configurer spécifiquement.\nFaites attention quand vous nomer un module du Panneau, car ce sera URL. (ex : http://domain/zb/?mid=nom_de_module)";
$lang->about_consultation = "Les membres non-administratifs verront seulement les ariticles d\'eux-même.\nNon-membres ne pourraient pas écrire des articles quand la Consultation est appliqué.";
$lang->about_admin_mail = '글이나 댓글이 등록될때 등록된 메일주소로 메일이 발송됩니다<br /> ,(콤마)로 연결시 다수의 메일주소로 발송할 수 있습니다.';
$lang->about_admin_mail = 'Un message eletronique sera envoyé pour l\'address inscrite quand un article ou commentaire se soumet <br />On peut inscrire multiple addresses délimité par les virgules.';
?>

View file

@ -277,7 +277,7 @@ html:not([lang*=""]) .boardList th { height:33px; }
.boardWrite .tag { margin-top:10px; margin-left:10px; }
.boardWrite .tag .inputTypeText { width:90%; background:#FFFFFF url(../images/common/iconTag.gif) no-repeat 5px 5px; padding-left:30px;}
.boardWrite .tag .help { vertical-align:middle;}
.boardWrite .tag .info { font-size:.9em; color:#999999; background:url(../images/common/iconArrowD8.gif) no-repeat left center; margin-top:5px;}
.boardWrite .tag .info { font-size:.9em; color:#999999; background:url(../images/common/iconArrowD8.gif) no-repeat 0% 40%; margin-top:5px; padding-left:5px;}
.boardWrite .extraVarsList { width:100%; border-top:1px solid #e0e1db; border-bottom:none; margin:10px 0 10px 0; table-layout:fixed;}
.boardWrite .extraVarsList th { font-weight:normal; color:#555555; text-align:left; padding:4px 0 4px 10px; border-bottom:1px solid #e0e1db; border-right:1px solid #e0e1db;}

View file

@ -22,9 +22,9 @@
<div <!--@if($tag_class)-->class="{$tag_class}"<!--@end--> >
<!--@if($layout_info->mid)-->
<a href="{getUrl('','mid',$layout_info->mid,'search_target','tag','search_keyword',urlencode($val->tag))}">{htmlspecialchars($val->tag)}</a>
<a href="{getUrl('','mid',$layout_info->mid,'search_target','tag','search_keyword',$val->tag)}">{htmlspecialchars($val->tag)}</a>
<!--@else-->
<a href="{getUrl('','mid',$mid,'search_target','tag','search_keyword',urlencode($val->tag))}">{htmlspecialchars($val->tag)}</a>
<a href="{getUrl('','mid',$mid,'search_target','tag','search_keyword',$val->tag)}">{htmlspecialchars($val->tag)}</a>
<!--@end-->
</div>
<!--@end-->

View file

@ -25,7 +25,7 @@
<!--@end-->
<div class="clear"></div>
</div>
<div class="dateAndCount">
@ -123,7 +123,7 @@
<ul>
<!--@for($i=0;$i<count($tag_list);$i++)-->
{@ $tag = $tag_list[$i]; }
<li><a href="{getUrl('search_target','tag','search_keyword',urlencode($tag),'document_srl','')}" rel="tag">{htmlspecialchars($tag)}</a><!--@if($i<count($tag_list)-1)-->,&nbsp;<!--@end--></li>
<li><a href="{getUrl('search_target','tag','search_keyword',$tag,'document_srl','')}" rel="tag">{htmlspecialchars($tag)}</a><!--@if($i<count($tag_list)-1)-->,&nbsp;<!--@end--></li>
<!--@end-->
</ul>
</div>
@ -142,7 +142,7 @@
<!--@end-->
</div>
<!-- 목록, 수정/삭제 버튼 -->
<!-- 목록, 수정/삭제 버튼 -->
<div class="contentButton">
<!--@if($module_info->default_style != 'blog')-->
<a href="{getUrl('document_srl','')}" class="button"><span>{$lang->cmd_list}</span></a>

View file

@ -22,9 +22,9 @@
<div <!--@if($tag_class)-->class="{$tag_class}"<!--@end--> >
<!--@if($layout_info->mid)-->
<a href="{getUrl('','mid',$layout_info->mid,'search_target','tag','search_keyword',urlencode($val->tag))}">{htmlspecialchars($val->tag)}</a>
<a href="{getUrl('','mid',$layout_info->mid,'search_target','tag','search_keyword',$val->tag)}">{htmlspecialchars($val->tag)}</a>
<!--@else-->
<a href="{getUrl('','mid',$mid,'search_target','tag','search_keyword',urlencode($val->tag))}">{htmlspecialchars($val->tag)}</a>
<a href="{getUrl('','mid',$mid,'search_target','tag','search_keyword',$val->tag)}">{htmlspecialchars($val->tag)}</a>
<!--@end-->
</div>
<!--@end-->

View file

@ -5,7 +5,7 @@
* @brief comment 모듈의 high class
**/
require_once('./modules/comment/comment.item.php');
require_once(_XE_PATH_.'modules/comment/comment.item.php');
class comment extends ModuleObject {

View file

@ -127,7 +127,7 @@
function getIpaddress() {
if($this->isGranted()) return $this->get('ipaddress');
return preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','*.$1.$2.$3', $this->get('ipaddress'));
return preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','*.$2.$3.$4', $this->get('ipaddress'));
}
function isExistsHomepage() {

View file

@ -285,7 +285,7 @@
}
// 성공시 lock파일 제거
@unlink($lock_file);
FileHandler::removeFile($lock_file);
}
/**

View file

@ -1,23 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="utility">
<title xml:lang="ko">댓글</title>
<title xml:lang="jp">コメント</title>
<title xml:lang="zh-CN">评论</title>
<title xml:lang="en">Comment</title>
<title xml:lang="es">Commentarios</title>
<title xml:lang="ru">Комментарии</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">게시판이나 블로그등의 댓글을 관리하는 모듈입니다.</description>
<description xml:lang="jp">掲示板やブログなどのコメントを管理するモジュールです。</description>
<description xml:lang="zh-CN">管理版面或博客评论的模块。</description>
<description xml:lang="en">Module for managing board/blog's comments</description>
<description xml:lang="es">Es el módulo para manejar commentarios en blog o boletínes.</description>
<description xml:lang="ru">Модуль для управления комментариями форума/блога.</description>
</author>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">댓글</title>
<title xml:lang="jp">コメント</title>
<title xml:lang="zh-CN">评论</title>
<title xml:lang="en">Comment</title>
<title xml:lang="es">Commentarios</title>
<title xml:lang="ru">Комментарии</title>
<description xml:lang="ko">게시판이나 블로그등의 댓글을 관리하는 모듈입니다.</description>
<description xml:lang="jp">掲示板やブログなどのコメントを管理するモジュールです。</description>
<description xml:lang="zh-CN">管理版面或博客评论的模块。</description>
<description xml:lang="en">Module for managing board/blog's comments</description>
<description xml:lang="es">Es el módulo para manejar commentarios en blog o boletínes.</description>
<description xml:lang="ru">Модуль для управления комментариями форума/блога.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>utility</category>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
</author>
</module>

View file

@ -23,7 +23,7 @@
'user_name' => 'Nom',
'nick_name' => 'Surnom',
'member_srl' => 'Member Serial',
'email_address' => 'Courriel',
'email_address' => 'l',
'homepage' => 'Page d\'Accueil',
'regdate' => 'Jour',
'last_update' => 'Mise à Jour',

View file

@ -53,6 +53,7 @@
// 받을 회원이 있는지에 대한 검사
$oMemberModel = &getModel('member');
$oCommunicationModel = &getModel('communication');
$receiver_member_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
if($receiver_member_info->member_srl != $receiver_srl) return new Object(-1, 'msg_not_exists_member');

View file

@ -78,7 +78,7 @@
// 플래그 삭제
$flag_path = './files/communication_extra_info/new_message_flags/'.getNumberingPath($logged_info->member_srl);
$flag_file = sprintf('%s%s', $flag_path, $logged_info->member_srl);
@unlink($flag_file);
FileHandler::removeFile($flag_file);
$this->setTemplateFile('new_message');
}

View file

@ -1,14 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="utility">
<title xml:lang="ko">커뮤니케이션</title>
<title xml:lang="zh-CN">会员交流</title>
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">커뮤니케이션</title>
<title xml:lang="zh-CN">会员交流</title>
<title xml:lang="en">Communication</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2008. 5. 30">
<name xml:lang="ko">제로</name>
<description xml:lang="ko">회원들간의 쪽지, 친구기능을 담당하는 모듈입니다.</description>
<description xml:lang="zh-CN">管理在线会员间短信息及好友功能的模块。</description>
<description xml:lang="en">This module is for managing message, friend functions.</description>
<version>0.1</version>
<date>2008-05-30</date>
<category>utility</category>
<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="en">Zero</name>
<description xml:lang="ko">회원들간의 쪽지, 친구기능을 담당하는 모듈입니다.</description>
<description xml:lang="zh-CN">管理在线会员间短信息及好友功能的模块。</description>
<description xml:lang="en">This module is for managing message, friend functions.</description>
</author>
</module>
</author>
</module>

View file

@ -0,0 +1,48 @@
<?php
/**
* @file fr.lang.php
* @author zero (zero@nzeo.com)
* @brief Paquet de la langue française (choses fondamentales seulement)
**/
$lang->communication = 'Communication';
$lang->about_communication = 'Ce module exécute fonctions communicatives comme les messages ou les amis';
$lang->allow_message = 'Recevoir les Messages';
$lang->allow_message_type = array(
'Y' => 'Recevoir tout',
'N' => 'Refuser tout',
'F' => 'Amis seulement',
);
$lang->message_box = array(
'R' => 'Reçu',
'S' => 'Envoyé',
'T' => 'Boîte aux Lettres',
);
$lang->readed_date = "Jour";
$lang->sender = 'Envoyeur';
$lang->receiver = 'Receveur';
$lang->friend_group = 'Groupe des Amis';
$lang->default_friend_group = 'Groupe pas assigné ';
$lang->cmd_send_message = 'Envoyer un Message';
$lang->cmd_reply_message = 'Répondre à un Message';
$lang->cmd_view_friend = 'Amis';
$lang->cmd_add_friend = 'Inscrire des Amis';
$lang->cmd_view_message_box = 'Lire des Messages';
$lang->cmd_store = "Conserver";
$lang->cmd_add_friend_group = 'Ajouter Groupe des Amis';
$lang->cmd_rename_friend_group = 'Modifier le Nom du Groupe des Amis';
$lang->msg_no_message = 'Aucun Message';
$lang->message_received = 'Nouveau message';
$lang->msg_title_is_null = 'Entrez le titre du message, S.V.P.';
$lang->msg_content_is_null = 'Entrez le contenu, S.V.P.';
$lang->msg_allow_message_to_friend = "Echoué à envoyer parce que le receveur permet seulement les messages des amis.";
$lang->msg_disallow_message = 'Echoué à envoyer parce que le receveur refuse la réception des messages';
$lang->about_allow_message = 'Vous pouvez décider la réception des messages';
?>

View file

@ -18,19 +18,18 @@
<div id="memberModule">
<!--@if($member_title)-->
<div class="boardHeader">
<h3>{$member_title}</h3>
<div class="boardHeader">
<h3>{$member_title}</h3>
<!--@if($is_logged && $logged_info->menu_list && (!$member_srl || $member_srl == $logged_info->member_srl) )-->
<form action="./" method="get" class="member_option">
<input type="hidden" name="mid" value="{$mid}" />
<select name="act">
<div class="member_option">
<select name="act" id="selected_act">
<!--@foreach($logged_info->menu_list as $key => $val)-->
<option value="{$key}" <!--@if($key == $act)-->selected="selected"<!--@end-->>{Context::getLang($val)}</option>
<!--@end-->
</select>
<input type="image" src="./images/button_go.gif" />
</form>
<a href="#" onclick="location.href=current_url.setQuery('act', xGetElementById('selected_act').options[xGetElementById('selected_act').selectedIndex].value); return false;"><img src="./images/button_go.gif" border="0" alt="" class="button_go" /></a>
</div>
<!--@end-->
</div>
</div>
<!--@end-->

View file

@ -17,7 +17,7 @@
.boardInformation strong { font:bold 11px Tahoma; color:#ff6600;}
.boardHeader { position:relative; _width:100%; border-top:1px solid #e1e1dd; border-bottom:none; background:#ffffff url(../images/common/bgH3.gif) no-repeat right bottom; overflow:hidden;}
.boardHeader .member_option { float:right; position:relative; top:1em; right:1em; }
.boardHeader .member_option { float:right; position:relative; top:0.5em; right:1em; }
.boardHeader select { vertical-align:bottom; }
.boardHeader input { vertical-align:bottom; _padding-bottom:1px;}
.boardHeader .essential { position:absolute; top:1.5em; right:1em; color:#54564b; font-size:.9em;}

View file

@ -1,23 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="accessory">
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">기본 카운터</title>
<title xml:lang="zh-CN">访问统计</title>
<title xml:lang="en">Basic Counter</title>
<title xml:lang="es">Contador Básico</title>
<title xml:lang="jp">デフォルト接続カウンター</title>
<title xml:lang="ru">Базовый счетчик</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">기본 접속 통계 프로그램입니다.</description>
<description xml:lang="zh-CN">默认访问统计程序。</description>
<description xml:lang="en">Basic connection statistics program.</description>
<description xml:lang="es">Programa básico para la estadística de la conección.</description>
<description xml:lang="jp">デフォルト接続統計のプログラムです。</description>
<description xml:lang="ru">Базовая программа статистики подключений.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>accessory</category>
<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="en">Zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">기본 접속 통계 프로그램입니다.</description>
<description xml:lang="zh-CN">默认访问统计程序。</description>
<description xml:lang="en">Basic connection statistics program.</description>
<description xml:lang="es">Programa básico para la estadística de la conección.</description>
<description xml:lang="jp">デフォルト接続統計のプログラムです。</description>
<description xml:lang="ru">Базовая программа статистики подключений.</description>
</author>
</module>

View file

@ -1,23 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="utility">
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">문서</title>
<title xml:lang="en">Document</title>
<title xml:lang="es">Documento</title>
<title xml:lang="zh-CN">主题</title>
<title xml:lang="jp">ドキュメント</title>
<title xml:lang="ru">Документы</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">게시판, 블로그등의 모듈에서 사용되는 문서를 관리하는 모듈입니다. </description>
<description xml:lang="en">Module for managing documents used in board, blog, etc.</description>
<description xml:lang="es">Módulo para manejar los documentos en blog y en los tableros.</description>
<description xml:lang="zh-CN">管理版面,博客等处主题的模块。 </description>
<description xml:lang="jp">掲示板、ブログなどのモジュールで使用されるドキュメント(書き込み)を管理するモジュルです。</description>
<description xml:lang="ru">Модуль для управления документами в форуме, блоге и прочее.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>utility</category>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</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="ru">zero</name>
<description xml:lang="ko">게시판, 블로그등의 모듈에서 사용되는 문서를 관리하는 모듈입니다. </description>
<description xml:lang="en">Module for managing documents used in board, blog, etc.</description>
<description xml:lang="es">Módulo para manejar los documentos en blog y en los tableros.</description>
<description xml:lang="zh-CN">管理版面,博客等处主题的模块。 </description>
<description xml:lang="jp">掲示板、ブログなどのモジュールで使用されるドキュメント(書き込み)を管理するモジュルです。</description>
<description xml:lang="ru">Модуль для управления документами в форуме, блоге и прочее.</description>
</author>
</module>
</module>

View file

@ -40,13 +40,14 @@
* @brief 관리자가 선택시 세션에 담음
**/
function procDocumentAdminAddCart() {
$document_srl = Context::get('srl');
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
if(!$oDocument->isExists()) return;
$oDocument->doCart();
$document_srls = explode(',',Context::get('srls'));
$cnt = count($document_srls);
for($i=0;$i<$cnt;$i++) {
$document_srl = (int)trim($document_srls[$i]);
if(!$document_srls) continue;
if($_SESSION['document_management'][$document_srl]) unset($_SESSION['document_management'][$document_srl]);
else $_SESSION['document_management'][$document_srl] = true;
}
}
/**
@ -383,9 +384,12 @@
**/
function procDocumentAdminDeleteAllThumbnail() {
// files/attaches/images/ 디렉토리를 순환하면서 thumbnail_*.jpg 파일을 모두 삭제
// files/attaches/images/ 디렉토리를 순환하면서 thumbnail_*.jpg 파일을 모두 삭제 (1.0.4 이전까지)
$this->deleteThumbnailFile('./files/attach/images');
// files/cache/thumbnails 디렉토리 자체를 삭제 (1.0.5 이후 변경된 썸네일 정책)
FileHandler::removeFilesInDir('./files/cache/thumbnails');
$this->setMessage('success_deleted');
}
@ -397,7 +401,7 @@
$this->deleteThumbnailFile($path."/".$entry);
} else {
if(!preg_match('/^thumbnail_([^\.]*)\.jpg$/i',$entry)) continue;
@unlink($path.'/'.$entry);
FileHandler::removeFile($path.'/'.$entry);
}
}
}

View file

@ -5,7 +5,7 @@
* @brief document 모듈의 high 클래스
**/
require_once('./modules/document/document.item.php');
require_once(_XE_PATH_.'modules/document/document.item.php');
class document extends ModuleObject {
@ -31,7 +31,7 @@
$oDB->addIndex("documents","idx_module_voted_count", array("module_srl","voted_count"));
$oDB->addIndex("documents","idx_module_notice", array("module_srl","is_notice"));
$oDB->addIndex("documents","idx_module_document_srl", array("module_srl","document_srl"));
$oDB->addIndex("documents","idx_module_blamed_count", array("module_srl","blamed_count"));
$oDB->addIndex("documents","idx_module_blamed_count", array("module_srl","blamed_count"));
// 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가
$oModuleController->insertTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after');
@ -182,30 +182,27 @@
**/
if(!$oDB->isIndexExists("documents","idx_module_document_srl")) $oDB->addIndex("documents","idx_module_document_srl", array("module_srl","document_srl"));
// 2008. 04. 23 blamed count 컬럼 추가
if(!$oDB->isColumnExists("documents", "blamed_count"))
{
$oDB->addColumn('documents', 'blamed_count', 'number', 11, 0, true);
$oDB->addIndex('documents', 'idx_blamed_count', array('blamed_count'));
}
// 2008. 04. 23 blamed count 컬럼 추가
if(!$oDB->isColumnExists("documents", "blamed_count")) {
$oDB->addColumn('documents', 'blamed_count', 'number', 11, 0, true);
$oDB->addIndex('documents', 'idx_blamed_count', array('blamed_count'));
}
if(!$oDB->isIndexExists("documents","idx_module_blamed_count"))
{
$oDB->addIndex('documents', 'idx_module_blamed_count', array('module_srl', 'blamed_count'));
}
if(!$oDB->isIndexExists("documents","idx_module_blamed_count")) {
$oDB->addIndex('documents', 'idx_module_blamed_count', array('module_srl', 'blamed_count'));
}
if(!$oDB->isColumnExists("document_voted_log", "point"))
$oDB->addColumn('document_voted_log', 'point', 'number', 11, 0, true);
return new Object(0,'success_updated');
}
if(!$oDB->isColumnExists("document_voted_log", "point"))
$oDB->addColumn('document_voted_log', 'point', 'number', 11, 0, true);
return new Object(0,'success_updated');
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
// 게시글 분류 캐시 파일 삭제
FileHandler::removeFilesInDir("./files/cache/document_category");
FileHandler::removeFilesInDir(_XE_PATH_."files/cache/document_category");
}
/**

View file

@ -265,6 +265,9 @@
// commit
$oDB->commit();
// 썸네일 파일 제거
FileHandler::removeDir(sprintf('files/cache/thumbnails/%s',getNumberingPath($obj->document_srl, 3)));
$output->add('document_srl',$obj->document_srl);
return $output;
}
@ -316,6 +319,9 @@
}
}
// 썸네일 파일 제거
FileHandler::removeDir(sprintf('files/cache/thumbnails/%s',getNumberingPath($document_srl, 3)));
// commit
$oDB->commit();
@ -762,8 +768,8 @@
$category_list = $output->data;
if(!$category_list) {
@unlink($xml_file);
@unlink($php_file);
FileHandler::removeFile($xml_file);
FileHandler::removeFile($php_file);
return false;
}
if(!is_array($category_list)) $category_list = array($category_list);

View file

@ -173,7 +173,7 @@
function getIpaddress() {
if($this->isGranted()) return $this->get('ipaddress');
return preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','*.$1.$2.$3', $this->get('ipaddress'));
return preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','*.$2.$3.$4', $this->get('ipaddress'));
}
@ -428,10 +428,15 @@
}
function getThumbnail($width = 80, $height = 0, $thumbnail_type = '') {
// 존재하지 않는 문서일 경우 return false
if(!$this->document_srl) return;
// 높이 지정이 별도로 없으면 정사각형으로 생성
if(!$height) $height = $width;
// 첨부파일이 없거나 내용중 이미지가 없으면 return false;
if(!$this->hasUploadedFiles() && !preg_match("!<img!is", $this->get('content'))) return;
// 문서 모듈의 기본 설정에서 Thumbnail의 생성 방법을 구함
if(!in_array($thumbnail_type, array('crop','ratio'))) {
$config = $GLOBALS['__document_config__'];
@ -443,68 +448,72 @@
$thumbnail_type = $config->thumbnail_type;
}
// 문서의 이미지 첨부파일 위치를 구함
$document_path = sprintf('./files/attach/images/%d/%d/',$this->get('module_srl'), $this->get('document_srl'));
if(!is_dir($document_path)) FileHandler::makeDir($document_path);
// 썸네일 정보 정의
$thumbnail_path = sprintf('files/cache/thumbnails/%s',getNumberingPath($this->document_srl, 3));
$thumbnail_file = sprintf('%s%dx%d.%s.jpg', $thumbnail_path, $width, $height, $thumbnail_type);
$thumbnail_url = Context::getRequestUri().$thumbnail_file;
// 썸네일 임시 파일명을 구함
if($width != $height) $thumbnail_file = sprintf('%sthumbnail_%dx%d_%s.jpg', $document_path, $width, $height, $thumbnail_type);
else $thumbnail_file = sprintf('%sthumbnail_%d_%s.jpg', $document_path, $width, $thumbnail_type);
// 썸네일이 있더라도 글의 수정시간과 비교해서 다르면 다시 생성함
// 썸네일 파일이 있을 경우 파일의 크기가 0 이면 return false 아니면 경로 return
if(file_exists($thumbnail_file)) {
$file_created_time = date("YmdHis",filemtime($thumbnail_file));
$modified_time = $this->get('last_update');
if($modified_time > $file_created_time) @unlink($thumbnail_file);
if(filesize($thumbnail_file)<1) return false;
else return $thumbnail_url;
}
if(file_exists($thumbnail_file)&&filesize($thumbnail_file)<1) return;
// 대상 파일
$source_file = null;
$is_tmp_file = false;
// 썸네일 파일이 있으면 url return
if(file_exists($thumbnail_file)) return Context::getRequestUri().$thumbnail_file;
// 첨부된 파일중 이미지 파일이 있으면 찾음
if($this->hasUploadedFiles()) {
$file_list = $this->getUploadedFiles();
if(count($file_list)) {
foreach($file_list as $file) {
if($file->direct_download!='Y') continue;
if(!preg_match("/\.(jpg|png|jpeg|gif|bmp)$/i",$file->source_filename)) continue;
// 생성 시작
FileHandler::writeFile($thumbnail_file, '', 'w');
// 첨부파일이 있는지 확인하고 있으면 썸네일 만듬
$oFile = &getModel('file');
$file_list = $oFile->getFiles($this->document_srl);
if(count($file_list)) {
foreach($file_list as $file) {
if($file->direct_download!='Y') continue;
if(!preg_match("/(jpg|png|jpeg|gif)$/i",$file->source_filename)) continue;
$filename = $file->uploaded_filename;
if(!file_exists($filename)) continue;
FileHandler::createImageFile($filename, $thumbnail_file, $width, $height, 'jpg', $thumbnail_type);
if(file_exists($thumbnail_file)) return Context::getRequestUri().$thumbnail_file;
$source_file = $file->uploaded_filename;
if(!file_exists($source_file)) $source_file = null;
else break;
}
}
}
// 첨부파일이 없으면 내용에서 추출
$content = $this->get('content');
// 첨부된 파일이 없으면 내용중 이미지 파일을 구함
if(!$source_file) {
$content = $this->get('content');
$target_src = null;
preg_match_all("!src=(\"|')([^\"' ]*?)(\"|')!is", $content, $matches, PREG_SET_ORDER);
$cnt = count($matches);
for($i=0;$i<$cnt;$i++) {
$target_src = $matches[$i][2];
if(preg_match('/\/(common|modules|widgets|addons|layouts)\//i', $target_src)) continue;
else {
if(!preg_match('/^(http|https):\/\//i',$target_src)) $target_src = Context::getRequestUri().$target_src;
$tmp_file = sprintf('./files/cache/tmp/%d', md5(rand(111111,999999).$this->document_srl));
FileHandler::getRemoteFile($target_src, $tmp_file);
if(!file_exists($tmp_file)) continue;
else {
list($_w, $_h, $_t, $_a) = @getimagesize($tmp_file);
if($_w<$width || $_h<$height) continue;
$target_src = null;
preg_match_all("!http:\/\/([^ ^\"^']*?)\.(jpg|png|gif|jpeg)!is", $content, $matches, PREG_SET_ORDER);
for($i=0;$i<count($matches);$i++) {
$src = $matches[$i][0];
if(preg_match('/\/(common|modules|widgets|addons|layouts)\//i', $src)) continue;
else {
$target_src = $src;
break;
$source_file = $tmp_file;
$is_tmp_file = true;
break;
}
}
}
}
if($target_src) {
$tmp_file = sprintf('%sthumbnail_%d.tmp.jpg', $document_path, $width);
FileHandler::getRemoteFile($target_src, $tmp_file);
FileHandler::createImageFile($tmp_file, $thumbnail_file, $width, $height, 'jpg', $config->thumbnail_type);
@unlink($tmp_file);
return Context::getRequestUri().$thumbnail_file;
}
$output = FileHandler::createImageFile($source_file, $thumbnail_file, $width, $height, 'jpg', $thumbnail_type);
if($is_tmp_file) FileHandler::removeFile($source_file);
// 썸네일 생성 성공시 경로 return
if($output) return $thumbnail_url;
// 차후 다시 썸네일 생성을 시도하지 않기 위해 빈 파일을 생성
else FileHandler::writeFile($thumbnail_file, '','w');
FileHandler::writeFile($thumbnail_file,'');
return;
}
@ -536,7 +545,7 @@
preg_match_all('!<img([^>]*?)>!is', $content, $matches);
$cnt = count($matches[0]);
for($i=0;$i<$cnt;$i++) {
if(preg_match('/src=("|\'|\.|\/)*(common|modules|widgets|layouts)/i', $matches[0][$i])) continue;
if(preg_match('/src=("|\'|\.|\/)*(common|modules|widgets|addons|layouts)/i', $matches[0][$i])) continue;
$buffs[] = "image";
$check_files = true;
break;
@ -549,8 +558,7 @@
}
// 첨부파일 체크
if(!$check_files && $this->hasUploadedFiles()) $buffs[] = "file";
if($this->hasUploadedFiles()) $buffs[] = "file";
return $buffs;
}

View file

@ -35,7 +35,7 @@
'member_srl' => 'Nombre Sériel du Membre',
'user_name' => 'Nom',
'nick_name' => 'Surnom',
'email_address' => 'Courriel',
'email_address' => 'l',
'homepage' => 'Page d\'accueil',
'is_notice' => 'Notice',
'is_secret' => 'Secret',

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">Creative Commons Licenses</title>
<title xml:lang="es">Licencias Creative Commons</title>
<title xml:lang="ru">Creative Commons Licenses</title>
<title xml:lang="jp">クリエイティブコモンズライセンス</title>
<title xml:lang="zh-CN">知识共享许可协议</title>
<title xml:lang="en">Creative Commons Licenses</title>
<author email_address="zero@zeroboard.com" link="http://zeroboard.com" date="2008. 1. 7">
<title xml:lang="es">Licencias Creative Commons</title>
<title xml:lang="ru">Creative Commons Licenses</title>
<title xml:lang="jp">クリエイティブコモンズライセンス</title>
<title xml:lang="zh-CN">知识共享许可协议</title>
<title xml:lang="en">Creative Commons Licenses</title>
<description xml:lang="ko">CCL 라이센스를 출력합니다.</description>
<description xml:lang="es">CCL licencia de producto</description>
<description xml:lang="ru">CCL 라이센스를 출력합니다.</description>
<description xml:lang="jp">CCLライセンスを表示します。</description>
<description xml:lang="zh-CN">显示知识共享许可协议。</description>
<description xml:lang="en">Output CCL license</description>
<version>0.1</version>
<date>2008-01-07</date>
<author email_address="zero@zeroboard.com" link="http://zeroboard.com">
<name xml:lang="ko">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<description xml:lang="ko">CCL 라이센스를 출력합니다.</description>
<description xml:lang="es">CCL licencia de producto</description>
<description xml:lang="ru">CCL 라이센스를 출력합니다.</description>
<description xml:lang="jp">CCLライセンスを表示します。</description>
<description xml:lang="zh-CN">显示知识共享许可协议。</description>
<description xml:lang="en">Output CCL license</description>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
</author>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">글의 배경색 변경</title>
<title xml:lang="jp">文字の背景色変更</title>
<title xml:lang="zh-CN">背景颜色</title>
<title xml:lang="en">Change the background color of article</title>
<title xml:lang="es">Cambiar el color de fondo del artículo</title>
<title xml:lang="es">Cambiar el color de fondo del artículo</title>
<title xml:lang="ru">Изменение цвета фона статьи</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">글의 배경색을 변경합니다.</description>
<description xml:lang="jp">文字の背景色を変更します。</description>
<description xml:lang="zh-CN">可修改字体背景颜色。</description>
<description xml:lang="en">It will change the background color of article.</description>
<description xml:lang="es">Se cambiará el color de fondo del artículo.</description>
<description xml:lang="ru">Позволяет изменение цвета фона статьи.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">글의 배경색을 변경합니다.</description>
<description xml:lang="jp">文字の背景色を変更します。</description>
<description xml:lang="zh-CN">可修改字体背景颜色。</description>
<description xml:lang="en">It will change the background color of article.</description>
<description xml:lang="es">Se cambiará el color de fondo del artículo.</description>
<description xml:lang="ru">Позволяет изменение цвета фона статьи.</description>
</author>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">글자색 변경</title>
<title xml:lang="jp">文字色変更</title>
<title xml:lang="zh-CN">字体颜色</title>
<title xml:lang="en">Change the color of text</title>
<title xml:lang="es">Cambiar el color de texto</title>
<title xml:lang="es">Cambiar el color de texto</title>
<title xml:lang="ru">Изменение цвета текста</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">글자색을 변경합니다.</description>
<description xml:lang="jp">文字色を変更します。</description>
<description xml:lang="zh-CN">可修改字体颜色。</description>
<description xml:lang="en">It will change the color of text.</description>
<description xml:lang="es">Se va a cambiar el color del texto.</description>
<description xml:lang="ru">Позволяет изменение цвета текста.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">글자색을 변경합니다.</description>
<description xml:lang="jp">文字色を変更します。</description>
<description xml:lang="zh-CN">可修改字体颜色。</description>
<description xml:lang="en">It will change the color of text.</description>
<description xml:lang="es">Se va a cambiar el color del texto.</description>
<description xml:lang="ru">Позволяет изменение цвета текста.</description>
</author>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">이모티콘 출력</title>
<title xml:lang="jp">顔文字(イモティコン)</title>
<title xml:lang="zh-CN">表情图标</title>
<title xml:lang="en">Display Emoticons</title>
<title xml:lang="es">Mostrar iconos gestuales</title>
<title xml:lang="es">Mostrar iconos gestuales</title>
<title xml:lang="ru">Отображение смайлов</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">이모티콘을 에디터에 삽입할 수 있습니다.</description>
<description xml:lang="jp">顔文字(イモティコン)をエディターに追加することができます。</description>
<description xml:lang="zh-CN">可以插入表情图标到编辑器。</description>
<description xml:lang="en">You may insert emoticons to editor.</description>
<description xml:lang="es">Usted puede insertar emoticonos para el editor.</description>
<description xml:lang="ru">Вы можете вставить смыйлы в редактор.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">이모티콘을 에디터에 삽입할 수 있습니다.</description>
<description xml:lang="jp">顔文字(イモティコン)をエディターに追加することができます。</description>
<description xml:lang="zh-CN">可以插入表情图标到编辑器。</description>
<description xml:lang="en">You may insert emoticons to editor.</description>
<description xml:lang="es">Usted puede insertar emoticonos para el editor.</description>
<description xml:lang="ru">Вы можете вставить смыйлы в редактор.</description>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
</author>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">기본 이미지 갤러리</title>
<title xml:lang="jp">デフォルトイメージギャラリー</title>
<title xml:lang="zh-CN">图片相册</title>
<title xml:lang="en">Basic Image Gallery</title>
<title xml:lang="es">Galería de imágenes básicos</title>
<title xml:lang="es">Galería de imágenes básicos</title>
<title xml:lang="ru">Базовая галлерея изображений</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">첨부된 이미지파일을 이용하여 슬라이드/목록형 이미지 갤러리를 만들 수 있습니다.</description>
<description xml:lang="jp">添付されたイメージファイルを利用して、スライド型・リスト型のイメージギャラリーが作成できます。</description>
<description xml:lang="zh-CN">利用上传的图片文件实现幻灯片式或目录型相册图片。</description>
<description xml:lang="en">It can create image gallery of slide/list style by using attached image file.</description>
<description xml:lang="es">It can create image gallery of slide/list style by using attached image file.</description>
<description xml:lang="ru">Это может создать гллерею изображений в стиле слайдов/списка, используя вложенный файл изображения.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">첨부된 이미지파일을 이용하여 슬라이드/목록형 이미지 갤러리를 만들 수 있습니다.</description>
<description xml:lang="jp">添付されたイメージファイルを利用して、スライド型・リスト型のイメージギャラリーが作成できます。</description>
<description xml:lang="zh-CN">利用上传的图片文件实现幻灯片式或目录型相册图片。</description>
<description xml:lang="en">It can create image gallery of slide/list style by using attached image file.</description>
<description xml:lang="es">It can create image gallery of slide/list style by using attached image file.</description>
<description xml:lang="ru">Это может создать гллерею изображений в стиле слайдов/списка, используя вложенный файл изображения.</description>
</author>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">이미지 추가</title>
<title xml:lang="jp">イメージ追加</title>
<title xml:lang="zh-CN">插入图像</title>
<title xml:lang="en">Add Images</title>
<title xml:lang="es">Añadir imágenes</title>
<title xml:lang="es">Añadir imágenes</title>
<title xml:lang="ru">Добавление изображений</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">에디터에 이미지를 추가하거나 속성을 변경할 수 있습니다.</description>
<description xml:lang="jp">エディターでイメージの追加、属性の変更ができます。</description>
<description xml:lang="zh-CN">可以插入图像或编辑其相应属性。</description>
<description xml:lang="en">It can add an image to editor or change the attribution of image.</description>
<description xml:lang="es">Se puede añadir una imagen a editor o cambiar la atribución de la imagen.</description>
<description xml:lang="ru">Это может добавить изображение в редактор или изменить параметры изображения.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">에디터에 이미지를 추가하거나 속성을 변경할 수 있습니다.</description>
<description xml:lang="jp">エディターでイメージの追加、属性の変更ができます。</description>
<description xml:lang="zh-CN">可以插入图像或编辑其相应属性。</description>
<description xml:lang="en">It can add an image to editor or change the attribution of image.</description>
<description xml:lang="es">Se puede añadir una imagen a editor o cambiar la atribución de la imagen.</description>
<description xml:lang="ru">Это может добавить изображение в редактор или изменить параметры изображения.</description>
</author>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">멀티미디어 자료 관리</title>
<title xml:lang="jp">マルチメディア管理</title>
<title xml:lang="zh-CN">多媒体</title>
<title xml:lang="en">Manage Multimedia Data</title>
<title xml:lang="es">Administrar datos multimedia </title>
<title xml:lang="es">Administrar datos multimedia </title>
<title xml:lang="ru">Управление мультимедиа данными</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">에디터에 wmv,avi,flv등의 멀티미디어 자료를 추가하거나 속성을 수정할 수 있습니다.</description>
<description xml:lang="jp">エディターに拡張子が「wmv,avi,flv」などのマルチメディアコンテンツを追加、または属性の修正ができます。</description>
<description xml:lang="zh-CN">插入wmv,avi,flv等多媒体文件或修改其相应属性 。</description>
<description xml:lang="en">It can add multimedia data like wmv,avi,flv to editor or change the attribution of multimedia data.</description>
<description xml:lang="es">Se pueden agregar datos multimedia como wmv, avi, flv al editor o cambiar la atribución de datos multimedia.</description>
<description xml:lang="ru">Это может добавить мультимедиа данные как wmv,avi,flv в редактор или изменить параметры данных мультимедиа.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">에디터에 wmv,avi,flv등의 멀티미디어 자료를 추가하거나 속성을 수정할 수 있습니다.</description>
<description xml:lang="jp">エディターに拡張子が「wmv,avi,flv」などのマルチメディアコンテンツを追加、または属性の修正ができます。</description>
<description xml:lang="zh-CN">插入wmv,avi,flv等多媒体文件或修改其相应属性 。</description>
<description xml:lang="en">It can add multimedia data like wmv,avi,flv to editor or change the attribution of multimedia data.</description>
<description xml:lang="es">Se pueden agregar datos multimedia como wmv, avi, flv al editor o cambiar la atribución de datos multimedia.</description>
<description xml:lang="ru">Это может добавить мультимедиа данные как wmv,avi,flv в редактор или изменить параметры данных мультимедиа.</description>
</author>
</component>
</component>

View file

@ -1,39 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">네이버맵 연동</title>
<title xml:lang="jp">ネイバーマップ</title>
<title xml:lang="zh-CN">NAVER 地图</title>
<title xml:lang="en">Naver Map Open Api</title>
<title xml:lang="es">Naver mapa abierto api</title>
<title xml:lang="es">Naver mapa abierto api</title>
<title xml:lang="ru">Открытые API карт Naver</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">네이버에서 제공하는 네이버 지도 open api를 이용하여 에디터에 원하는 곳의 지도를 추가하거나 수정할 수 있습니다.\n네이버 지도 open api키를 발급 받아서 등록을 해주셔야 정상적인 사용이 가능합니다.</description>
<description xml:lang="jp">ネイバーから提供されるネイバーマップのOpenAPIを利用してエディターに表示したい地図を追加したり、修正したりすることができます。ネイバーマップは、OpenAPIキーを取得して登録すれば使用することができます。</description>
<description xml:lang="zh-CN">naver提供的naver地图利用open api在编辑器里添加或修改您所需要的地图。\n为了使用naver地图首先要取得open api key,然后登录此key才可正常使用。</description>
<description xml:lang="en">You can add a map to the editor or modify it by using Naver Map open api provided by Naver.\nYou would be able to use it when you register Naver Map api key after you get it from http://www.naver.com.</description>
<description xml:lang="es">Puede poner un mapa para el editor o modificarlo utilizando Naver Mapa abierta api proporcionada por Naver. \ NSe se podrá hacer uso del mismo cuando se registra Naver Mapa api clave se obtiene después de http://www.naver.com .</description>
<description xml:lang="ru">Вы можете добавить карту в редактор или изменить ее, используя Naver Map open api, предлагаемые Naver.\nВы сможете использовать это после регистрации ключа Naver Map API, полученного с http://www.naver.com.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">네이버에서 제공하는 네이버 지도 open api를 이용하여 에디터에 원하는 곳의 지도를 추가하거나 수정할 수 있습니다.\n네이버 지도 open api키를 발급 받아서 등록을 해주셔야 정상적인 사용이 가능합니다.</description>
<description xml:lang="jp">ネイバーから提供されるネイバーマップのOpenAPIを利用してエディターに表示したい地図を追加したり、修正したりすることができます。ネイバーマップは、OpenAPIキーを取得して登録すれば使用することができます。</description>
<description xml:lang="zh-CN">naver提供的naver地图利用open api在编辑器里添加或修改您所需要的地图。\n为了使用naver地图首先要取得open api key,然后登录此key才可正常使用。</description>
<description xml:lang="en">You can add a map to the editor or modify it by using Naver Map open api provided by Naver.\nYou would be able to use it when you register Naver Map api key after you get it from http://www.naver.com.</description>
<description xml:lang="es">Puede poner un mapa para el editor o modificarlo utilizando Naver Mapa abierta api proporcionada por Naver. \ NSe se podrá hacer uso del mismo cuando se registra Naver Mapa api clave se obtiene después de http://www.naver.com .</description>
<description xml:lang="ru">Вы можете добавить карту в редактор или изменить ее, используя Naver Map open api, предлагаемые Naver.\nВы сможете использовать это после регистрации ключа Naver Map API, полученного с http://www.naver.com.</description>
</author>
<extra_vars>
<var name="api_key">
<title xml:lang="ko">네이버지도 api key</title>
<title xml:lang="jp">ネイバーマップAPIキー</title>
<title xml:lang="zh-CN">naver地图 api key</title>
<title xml:lang="en">Naver Map api key</title>
<title xml:lang="es">Naver Map api key</title>
<title xml:lang="es">Naver Map api key</title>
<title xml:lang="ru">Naver Map API Ключ</title>
<description xml:lang="ko">http://www.naver.com/ 에서 네이버 지도 API key를 발급 받으신 후 입력해주세요.</description>
<description xml:lang="jp">http://www.naver.com/ からネイバーマップのAPIキーを取得してから入力してください。</description>
<description xml:lang="zh-CN">在http://www.naver.com/ 取得naver地图 API key后输入。</description>
<description xml:lang="en">Please get Naver Map API key from http://www.naver.com first and then input the key.</description>
<description xml:lang="es">Por favor Naver Mapa clave de la API de http://www.naver.com primero y luego ingrese la clave.</description>
<description xml:lang="es">Por favor Naver Mapa clave de la API de http://www.naver.com primero y luego ingrese la clave.</description>
<description xml:lang="ru">Пожалуйста, получите ключ Naver Map API с http://www.naver.com и введите его.</description>
</var>
</extra_vars>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">설문조사 컴포넌트</title>
<title xml:lang="jp">アンケート調査</title>
<title xml:lang="zh-CN">投票调查</title>
<title xml:lang="en">Poll Component</title>
<title xml:lang="es">Componente Poll</title>
<title xml:lang="es">Componente Poll</title>
<title xml:lang="ru">Компонент опросов</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">글 작성시에 설문조사를 첨부하실 수 있습니다. 설문조사 컴포넌트는 설문조사 모듈의 설정에 영향을 받습니다.</description>
<description xml:lang="jp">書き込みの時、アンケート機能の追加ができます。アンケートモジュールの影響を受けます。</description>
<description xml:lang="zh-CN">发表主题时可以附加投票调查。投票调查组件受投票调查模块设置的影响。</description>
<description xml:lang="en">You can attach a poll on writing articles. Poll component is affected by setting of poll module.</description>
<description xml:lang="es">Puede adjuntar una encuesta sobre la redacción de artículos. Encuesta componente se ve afectada por la configuración de módulo de encuesta.</description>
<description xml:lang="ru">Вы можете присоединить опрос при написании статей. Компонент опросов зависит от настроек модуля отпросов.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">글 작성시에 설문조사를 첨부하실 수 있습니다. 설문조사 컴포넌트는 설문조사 모듈의 설정에 영향을 받습니다.</description>
<description xml:lang="jp">書き込みの時、アンケート機能の追加ができます。アンケートモジュールの影響を受けます。</description>
<description xml:lang="zh-CN">发表主题时可以附加投票调查。投票调查组件受投票调查模块设置的影响。</description>
<description xml:lang="en">You can attach a poll on writing articles. Poll component is affected by setting of poll module.</description>
<description xml:lang="es">Puede adjuntar una encuesta sobre la redacción de artículos. Encuesta componente se ve afectada por la configuración de módulo de encuesta.</description>
<description xml:lang="ru">Вы можете присоединить опрос при написании статей. Компонент опросов зависит от настроек модуля отпросов.</description>
</author>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">인용구 작성</title>
<title xml:lang="jp">引用文作成</title>
<title xml:lang="zh-CN">引用</title>
<title xml:lang="es">Citas célebres</title>
<title xml:lang="en">Quotations</title>
<title xml:lang="en">Quotations</title>
<title xml:lang="ru">Цитаты</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">특정 범위를 인용문으로 꾸밀 수 있습니다. 외곽선의 종류나 색상, 굵기를 수정할 수 있으며 열기/닫기 기능을 가진 폴더기능을 만들 수 있습니다.</description>
<description xml:lang="jp">特定範囲を引用文として表示できます。ボーダーの種類、色、太さを修正することができ、「展開・折りたたみ」の機能も可能です。</description>
<description xml:lang="zh-CN">可以把要发表的主题特定范围用引用布置。可以修改外围线的种类或粗细,还支持展开/折叠功能。</description>
<description xml:lang="en">You can decorate specific range as quotation. The style, color or thickness of outline can be modified and folder system which has open/close function can be made.</description>
<description xml:lang="es">Puedes decorar rango específico como cita. El estilo, el color o el grosor de esquema puede ser modificado y carpeta de sistema que tiene abrir / cerrar la función se puede hacer.</description>
<description xml:lang="ru">Вы можете украсить определенную область цитаты. Стиль, цвет или толщина внешней линии может быть изменена, и система папок, которая имеет функцию открыть/закрыть может быть создана.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">특정 범위를 인용문으로 꾸밀 수 있습니다. 외곽선의 종류나 색상, 굵기를 수정할 수 있으며 열기/닫기 기능을 가진 폴더기능을 만들 수 있습니다.</description>
<description xml:lang="jp">特定範囲を引用文として表示できます。ボーダーの種類、色、太さを修正することができ、「展開・折りたたみ」の機能も可能です。</description>
<description xml:lang="zh-CN">可以把要发表的主题特定范围用引用布置。可以修改外围线的种类或粗细,还支持展开/折叠功能。</description>
<description xml:lang="en">You can decorate specific range as quotation. The style, color or thickness of outline can be modified and folder system which has open/close function can be made.</description>
<description xml:lang="es">Puedes decorar rango específico como cita. El estilo, el color o el grosor de esquema puede ser modificado y carpeta de sistema que tiene abrir / cerrar la función se puede hacer.</description>
<description xml:lang="ru">Вы можете украсить определенную область цитаты. Стиль, цвет или толщина внешней линии может быть изменена, и система папок, которая имеет функцию открыть/закрыть может быть создана.</description>
</author>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">표(table) 생성</title>
<title xml:lang="jp">テーブル作成</title>
<title xml:lang="zh-CN">表格</title>
<title xml:lang="en">Create Table</title>
<title xml:lang="es">Crear Tabla</title>
<title xml:lang="es">Crear Tabla</title>
<title xml:lang="ru">Создание таблиц</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">에디터에 표(table)을 생성하거나 표(table) 또는 칸(td)의 속성을 변경할 수 있습니다.</description>
<description xml:lang="jp">エディターでテーブルtableの作成、テーブルtableまたはセルtdの属性の変更ができます。</description>
<description xml:lang="zh-CN">插入表格(table)或编辑表格属性。</description>
<description xml:lang="en">It can create a table on editor or modify the attribution of table or td.</description>
<description xml:lang="es">Se puede crear una tabla en editor o modificar la atribución de la mesa o td.</description>
<description xml:lang="ru">Это может создать таблицу в редакторе или изменить ее параметры или ячейки.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">에디터에 표(table)을 생성하거나 표(table) 또는 칸(td)의 속성을 변경할 수 있습니다.</description>
<description xml:lang="jp">エディターでテーブルtableの作成、テーブルtableまたはセルtdの属性の変更ができます。</description>
<description xml:lang="zh-CN">插入表格(table)或编辑表格属性。</description>
<description xml:lang="en">It can create a table on editor or modify the attribution of table or td.</description>
<description xml:lang="es">Se puede crear una tabla en editor o modificar la atribución de la mesa o td.</description>
<description xml:lang="ru">Это может создать таблицу в редакторе или изменить ее параметры или ячейки.</description>
</author>
</component>
</component>

View file

@ -1,23 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.1">
<?xml version="1.0" encoding="UTF-8"?>
<component version="0.2">
<title xml:lang="ko">링크 생성</title>
<title xml:lang="jp">リンク生成</title>
<title xml:lang="zh-CN">链接</title>
<title xml:lang="en">Create Link</title>
<title xml:lang="es">Crear Link</title>
<title xml:lang="es">Crear Link</title>
<title xml:lang="ru">Создание ссылок</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">에디터에 링크를 추가하거나 링크의 속성을 변경할 수 있습니다.</description>
<description xml:lang="jp">エディターでリンクの追加、属性の変更ができます。</description>
<description xml:lang="zh-CN">插入链接或编辑链接属性。</description>
<description xml:lang="en">It can add a link to editor or modify the attribution of link.</description>
<description xml:lang="es">Puede añadir un enlace al editor o modificar la atribución de enlace.</description>
<description xml:lang="ru">Это может добавить ссылку в редактор или изменить ее параметры.</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">에디터에 링크를 추가하거나 링크의 속성을 변경할 수 있습니다.</description>
<description xml:lang="jp">エディターでリンクの追加、属性の変更ができます。</description>
<description xml:lang="zh-CN">插入链接或编辑链接属性。</description>
<description xml:lang="en">It can add a link to editor or modify the attribution of link.</description>
<description xml:lang="es">Puede añadir un enlace al editor o modificar la atribución de enlace.</description>
<description xml:lang="ru">Это может добавить ссылку в редактор или изменить ее параметры.</description>
</author>
</component>
</component>

View file

@ -1,23 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="utility">
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">위지윅 에디터 </title>
<title xml:lang="en">WYSIWYG Editor</title>
<title xml:lang="es">Editor WYSIWYG</title>
<title xml:lang="zh-CN">网页编辑器</title>
<title xml:lang="jp">ウイジウイグエディター</title>
<title xml:lang="ru">WYSIWYG-редактор</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<description xml:lang="ko">위지윅 에디터를 출력하거나 에디터 컴포넌트들을 관리/중계하는 모듈입니다.</description>
<description xml:lang="en">Module for displaying WYSIWYG editor and managing/relaying editor components.</description>
<description xml:lang="es">Módulo para mostrar en la pantalla el editor de WYSIWYG y para el manejo/relato de los componentes del editor.</description>
<description xml:lang="zh-CN">显示网页编辑器或管理/传递编辑器组件的模块。</description>
<description xml:lang="jp">ウイジウイグエディター を出力したり、エディターのコンポーネントを管理・中継するモジュールです。</description>
<description xml:lang="ru">Модуль для отображения WYSIWYG-редактора и управления/смены комментариев редактора.</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>utility</category>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com">
<name xml:lang="ko">제로</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="ru">zero</name>
<description xml:lang="ko">위지윅 에디터를 출력하거나 에디터 컴포넌트들을 관리/중계하는 모듈입니다.</description>
<description xml:lang="en">Module for displaying WYSIWYG editor and managing/relaying editor components.</description>
<description xml:lang="es">Módulo para mostrar en la pantalla el editor de WYSIWYG y para el manejo/relato de los componentes del editor.</description>
<description xml:lang="zh-CN">显示网页编辑器或管理/传递编辑器组件的模块。</description>
<description xml:lang="jp">ウイジウイグエディター を出力したり、エディターのコンポーネントを管理・中継するモジュールです。</description>
<description xml:lang="ru">Модуль для отображения WYSIWYG-редактора и управления/смены комментариев редактора.</description>
</author>
</module>
</module>

View file

@ -15,7 +15,7 @@
* 에디터의 경우 내부적으로 1~30까지의 임시 editor_seuqnece를 생성한다.
* 한페이지에 30 이상의 에디터를 출력하지는 못하도록 제한되어 있다.
*
* , 수정하는 경우 또는 파일업로드를 자동저장본의 경우는 getNextSequence() 값으로 저장된 editor_seqnece가
* , 수정하는 경우 또는 파일업로드를 자동저장본의 경우는 getNextSequence() 값으로 저장된 editor_seqnece가
* 설정된다.
**/
@ -64,7 +64,7 @@
if(!$option->allow_fileupload) $allow_fileupload = false;
else $allow_fileupload = true;
// 자동 저장 유무 옵션 설정
// 자동 저장 유무 옵션 설정
if(!$option->enable_autosave) $enable_autosave = false;
else $enable_autosave = true;
@ -146,16 +146,16 @@
// 에디터 동작을 위한 editor_sequence값 설정
Context::set('editor_sequence', $editor_sequence);
// 파일 첨부 관련 행동을 하기 위해 문서 번호를 upload_target_srl로 설정
// 파일 첨부 관련 행동을 하기 위해 문서 번호를 upload_target_srl로 설정
// 신규문서일 경우 upload_target_srl=0 이고 첨부파일 관련 동작이 요청될때 이 값이 변경됨
Context::set('upload_target_srl', $upload_target_srl);
Context::set('upload_target_srl', $upload_target_srl);
// 문서 혹은 댓글의 primary key값을 세팅한다.
Context::set('editor_primary_key_name', $option->primary_key_name);
// 내용을 sync 맞추기 위한 content column name을 세팅한다
Context::set('editor_content_key_name', $option->content_key_name);
/**
* 에디터 컴포넌트 체크
@ -238,7 +238,7 @@
} else {
$group_list = array();
}
// 에디터 옵션 변수를 미리 설정
$option->skin = $config->editor_skin;
@ -247,18 +247,18 @@
if(count($config->upload_file_grant)) {
foreach($group_list as $group_srl => $group_info) {
if(in_array($group_srl, $config->upload_file_grant)) {
$option->allow_fileupload = true;
$option->allow_fileupload = true;
break;
}
}
} else $option->allow_fileupload = true;
// 기본 컴포넌트 사용 권한
// 기본 컴포넌트 사용 권한
$option->enable_default_component = false;
if(count($config->enable_default_component_grant)) {
foreach($group_list as $group_srl => $group_info) {
if(in_array($group_srl, $config->enable_default_component_grant)) {
$option->enable_default_component = true;
$option->enable_default_component = true;
break;
}
}
@ -269,18 +269,18 @@
if(count($config->enable_component_grant)) {
foreach($group_list as $group_srl => $group_info) {
if(in_array($group_srl, $config->enable_component_grant)) {
$option->enable_component = true;
$option->enable_component = true;
break;
}
}
} else $option->enable_component = true;
// HTML 편집 권한
// HTML 편집 권한
$enable_html = false;
if(count($config->enable_html_grant)) {
foreach($group_list as $group_srl => $group_info) {
if(in_array($group_srl, $config->enable_html_grant)) {
$enable_html = true;
$enable_html = true;
break;
}
}
@ -295,7 +295,7 @@
// 높이 조절 옵션 설정
$option->resizable = $config->enable_height_resizable=='Y'?true:false;
// 자동 저장 유무 옵션 설정
// 자동 저장 유무 옵션 설정
$option->enable_autosave = $config->enable_autosave=='Y'?true:false;
// 기타 설정
@ -422,7 +422,7 @@
$is_granted = false;
foreach($group_list as $group_srl) {
if(in_array($group_srl, $target_group)) {
$is_granted = true;
$is_granted = true;
break;
}
}
@ -537,24 +537,86 @@
$xml_doc = $oParser->loadXmlFile($xml_file);
// 정보 정리
$xml_info->component_name = $component;
$xml_info->version = $xml_doc->component->attrs->version;
$xml_info->title = $xml_doc->component->title->body;
$xml_info->author->name = $xml_doc->component->author->name->body;
$xml_info->author->email_address = $xml_doc->component->author->attrs->email_address;
$xml_info->author->link = $xml_doc->component->author->attrs->link;
$xml_info->author->date = $xml_doc->component->author->attrs->date;
$xml_info->description = str_replace('\n', "\n", $xml_doc->component->author->description->body);
if($xml_doc->component->version && $xml_doc->component->attrs->version == '0.2') {
$component_info->component_name = $component;
$component_info->title = $xml_doc->component->title->body;
$component_info->description = str_replace('\n', "\n", $xml_doc->component->description->body);
$component_info->version = $xml_doc->component->version->body;
$component_info->date = $xml_doc->component->date->body;
$buff = '<?php if(!defined("__ZBXE__")) exit(); ';
$buff .= sprintf('$xml_info->component_name = "%s";', $component);
$buff .= sprintf('$xml_info->version = "%s";', $xml_info->version);
$buff .= sprintf('$xml_info->title = "%s";', $xml_info->title);
$buff .= sprintf('$xml_info->author->name = "%s";', $xml_info->author->name);
$buff .= sprintf('$xml_info->author->email_address = "%s";', $xml_info->author->email_address);
$buff .= sprintf('$xml_info->author->link = "%s";', $xml_info->author->link);
$buff .= sprintf('$xml_info->author->date = "%s";', $xml_info->author->date);
$buff .= sprintf('$xml_info->description = "%s";', $xml_info->description);
$buff = '<?php if(!defined("__ZBXE__")) exit(); ';
$buff .= sprintf('$xml_info->component_name = "%s";', $component_info->component_name);
$buff .= sprintf('$xml_info->title = "%s";', $component_info->title);
$buff .= sprintf('$xml_info->description = "%s";', $component_info->description);
$buff .= sprintf('$xml_info->version = "%s";', $component_info->version);
$buff .= sprintf('$xml_info->date = "%s";', $component_info->date);
// 작성자 정보
if(!is_array($xml_doc->component->author)) $author_list[] = $xml_doc->component->author;
else $author_list = $xml_doc->component->author;
for($i=0; $i < count($author_list); $i++) {
$buff .= sprintf('$xml_info->author['.$i.']->name = "%s";', $author_list[$i]->name->body);
$buff .= sprintf('$xml_info->author['.$i.']->email_address = "%s";', $author_list[$i]->attrs->email_address);
$buff .= sprintf('$xml_info->author['.$i.']->homepage = "%s";', $author_list[$i]->attrs->link);
}
// history
if($xml_doc->component->history) {
if(!is_array($xml_doc->component->history)) $history_list[] = $xml_doc->component->history;
else $history_list = $xml_doc->component->history;
for($i=0; $i < count($history_list); $i++) {
sscanf($history_list[$i]->attrs->date, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d);
$date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$buff .= sprintf('$xml_info->history['.$i.']->description = "%s";', $history_list[$i]->description->body);
$buff .= sprintf('$xml_info->history['.$i.']->version = "%s";', $history_list[$i]->attrs->version);
$buff .= sprintf('$xml_info->history['.$i.']->date = "%s";', $date);
if($history_list[$i]->author) {
(!is_array($history_list[$i]->author)) ? $obj->author_list[] = $history_list[$i]->author : $obj->author_list = $history_list[$i]->author;
for($j=0; $j < count($obj->author_list); $j++) {
$buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->name = "%s";', $obj->author_list[$j]->name->body);
$buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->email_address = "%s";', $obj->author_list[$j]->attrs->email_address);
$buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->homepage = "%s";', $obj->author_list[$j]->attrs->link);
}
}
if($history_list[$i]->log) {
(!is_array($history_list[$i]->log)) ? $obj->log_list[] = $history_list[$i]->log : $obj->log_list = $history_list[$i]->log;
for($j=0; $j < count($obj->log_list); $j++) {
$buff .= sprintf('$xml_info->history['.$i.']->logs['.$j.']->text = "%s";', $obj->log_list[$j]->body);
$buff .= sprintf('$xml_info->history['.$i.']->logs['.$j.']->link = "%s";', $obj->log_list[$j]->attrs->link);
}
}
}
}
} else {
sscanf($xml_doc->component->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d);
$date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
$xml_info->component_name = $component;
$xml_info->title = $xml_doc->component->title->body;
$xml_info->description = str_replace('\n', "\n", $xml_doc->component->author->description->body);
$xml_info->version = $xml_doc->component->attrs->version;
$xml_info->date = $date;
$xml_info->author->name = $xml_doc->component->author->name->body;
$xml_info->author->email_address = $xml_doc->component->author->attrs->email_address;
$xml_info->author->homepage = $xml_doc->component->author->attrs->link;
$buff = '<?php if(!defined("__ZBXE__")) exit(); ';
$buff .= sprintf('$xml_info->component_name = "%s";', $xml_info->component_name);
$buff .= sprintf('$xml_info->title = "%s";', $xml_info->title);
$buff .= sprintf('$xml_info->description = "%s";', $xml_info->description);
$buff .= sprintf('$xml_info->version = "%s";', $xml_info->version);
$buff .= sprintf('$xml_info->date = "%s";', $xml_info->date);
$buff .= sprintf('$xml_info->author[0]->name = "%s";', $xml_info->author->name);
$buff .= sprintf('$xml_info->author[0]->email_address = "%s";', $xml_info->author->email_address);
$buff .= sprintf('$xml_info->author[0]->homepage = "%s";', $xml_info->author->homepage);
}
// 추가 변수 정리 (에디터 컴포넌트에서는 text형만 가능)
$extra_vars = $xml_doc->component->extra_vars->var;

View file

@ -11,6 +11,8 @@
$lang->component_author = "Developer";
$lang->component_link = "Link";
$lang->component_date = "Date";
$lang->component_license = 'License';
$lang->component_history = 'Updates';
$lang->component_description = "Description";
$lang->component_extra_vars = "Option Variable";
$lang->component_grant = "Permission Setting";

View file

@ -11,6 +11,8 @@
$lang->component_author = "Autor";
$lang->component_link = "Enlace";
$lang->component_date = "Fecha";
$lang->component_license = 'License';
$lang->component_history = "History";
$lang->component_description = "Descripción";
$lang->component_extra_vars = "Varibles Extras";
$lang->component_grant = "Ajuste de las atribuciones";

View file

@ -11,13 +11,15 @@
$lang->component_author = "Développeur";
$lang->component_link = "Lien";
$lang->component_date = "Jour de Création";
$lang->component_license = 'License';
$lang->component_history = "History";
$lang->component_description = "Description";
$lang->component_extra_vars = "Variables d'Option";
$lang->component_grant = "Configuration de l'Autorisation";
$lang->about_component = "Sur le Composant";
$lang->about_component_grant = 'Vous pouvez configurer l\'autorisation à utiliser des composants tendus de l\'Editeur.<br /> (Tout le monde aura l\'autorisation si vous ne cochez rien)';
$lang->about_component_mid = "에디터 컴포넌트가 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)";
$lang->about_component_mid = "Vous pouvez indiquer les objectifs que les composants s'appliquer<br />(Tous les objectifs seront choisis quand rien est choisi.)";
$lang->msg_component_is_not_founded = 'Ne peut pas trouver Composant %s';
$lang->msg_component_is_inserted = 'Composant choisi est déjà inséré';

View file

@ -11,6 +11,8 @@
$lang->component_author = "作者";
$lang->component_link = "リンク";
$lang->component_date = "作成日";
$lang->component_license = 'License';
$lang->component_history = "History";
$lang->component_description = "説明";
$lang->component_extra_vars = "設定変数";
$lang->component_grant = "権限設定";

View file

@ -11,6 +11,8 @@
$lang->component_author = "제작자 ";
$lang->component_link = "링크";
$lang->component_date = "제작일";
$lang->component_license = '라이센스';
$lang->component_history = '변경 이력';
$lang->component_description = "설명";
$lang->component_extra_vars = "설정 변수";
$lang->component_grant = "권한설정";

View file

@ -11,6 +11,8 @@
$lang->component_author = "Разработчик";
$lang->component_link = "Ссылка";
$lang->component_date = "Дата";
$lang->component_license = 'License';
$lang->component_history = "History";
$lang->component_description = "Описание";
$lang->component_extra_vars = "Экстра перем.";
$lang->component_grant = "Настройки прав доступа";

View file

@ -11,6 +11,8 @@
$lang->component_author = "作者";
$lang->component_link = "链接";
$lang->component_date = "编写日期";
$lang->component_license = 'License';
$lang->component_history = "History";
$lang->component_description = "说明";
$lang->component_extra_vars = "变数设置";
$lang->component_grant = "权限设置";

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