beta.0.2.8을 trunk로 copy

git-svn-id: http://xe-core.googlecode.com/svn/trunk@3433 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-12-28 05:55:41 +00:00
commit 7067f03407
212 changed files with 5367 additions and 2003 deletions

View file

@ -62,6 +62,7 @@
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
print $content;
Context::close();
exit();
}
?>

View file

@ -1,7 +1,7 @@
<?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="jp">BlogAPI アドオン</title>
<title xml:lang="zh-CN">BlogAPI</title>
<title xml:lang="en">Addon for BlogAPI</title>
<title xml:lang="es">Addon para BlogAPI</title>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">기본 카운터 애드온</title>
<title xml:lang="jp">接続カウンター</title>
<title xml:lang="jp">接続カウンターアドオン</title>
<title xml:lang="zh-CN">网站访问统计</title>
<title xml:lang="en">Addon for basic counter</title>
<title xml:lang="es">Addon contador básico</title>
@ -18,8 +18,8 @@
이 애드온을 켜셔야 접속 정보 수집이 됩니다.
</description>
<description xml:lang="jp">
セロボードXEの接続カウンターモジュールは、接続情報を記録します。
このアドオンを「使用」に設定しておくと接続情報が記録されます。
セロボードXEの接続カウンターモジュールで接続(アクセス)情報を記録します。
このアドオンを「使用」に設定しておくと接続(アクセス)情報が記録されます。
</description>
<description xml:lang="zh-CN">
利用ZeroboardXE的网站访问统计模块记录网站访问信息。

View file

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">Google Analytics</title>
<title xml:lang="jp">Google Analytics</title>
<title xml:lang="zh-CN">Google Analytics</title>
<title xml:lang="en">Google Analytics</title>
<title xml:lang="ru">Google Analytics</title>
<title xml:lang="jp">Google Analytics</title>
<title xml:lang="jp">Google Analyticsアドオン</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 9. 19">
<name xml:lang="ko">제로</name>
<name xml:lang="zh-CN">Zero</name>
@ -36,9 +35,9 @@
<title xml:lang="ru">uacct</title>
<title xml:lang="jp">uacct</title>
<description xml:lang="ko">Google Analytics 코드의 _uacct 값을 입력해주세요.</description>
<description xml:lang="zh-CN">请输入Google Analytics代码的_uacct值。</description>
<description xml:lang="en">Google Analytics _uacct</description>
<description xml:lang="ru">Google Analytics _uacct</description>
<description xml:lang="zh-CN">请输入Google Analytics代码的_uacct值。</description>
<description xml:lang="en">Google Analytics _uacct</description>
<description xml:lang="ru">Google Analytics _uacct</description>
<description xml:lang="jp">Google Analyticsコードの「_uacct」の値を入力してください。</description>
</var>
</extra_vars>

View file

@ -8,20 +8,23 @@
**/
// 관리자 모듈이면 패스~
if(Context::get('module')=='admin') return;
if(Context::get('module')=='admin') return;
// 한번만 출력시키기 위해 전역변수에 호출되었음을 체크해 놓음 (called position과 상관없음)
if($GLOBALS['_called_ga_']) return;
$GLOBALS['_called_ga_'] = true;
if($GLOBALS['_called_addon_google_analytics_']) return;
$GLOBALS['_called_addon_google_analytics_'] = true;
$js_code = <<<EndOfCss
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
$js_code = <<<EndOfGA
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
_uacct = "{$addon_info->uacct}";
urchinTracker();
var pageTracker = _gat._getTracker("{$addon_info->uacct}");
pageTracker._initData();
pageTracker._trackPageview();
</script>
EndOfCss;
EndOfGA;
Context::addHtmlFooter($js_code);
?>
?>

View file

@ -1,14 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">LemonPen XE 애드온</title>
<title xml:lang="jp">LemonPen XE アドオン</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 12. 10">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<description xml:lang="ko">활성화 하시면 레몬펜을 사이트에 달 수 있습니다.</description>
<description xml:lang="jp">機能をオンにすると、レモンペンをサイト上で使うことが出来ます。 (LemonPenOpenmaru社提供)</description>
</author>
<extra_vars>
<var name="sid">
<title xml:lang="ko">sid</title>
<title xml:lang="jp">sid</title>
<description xml:lang="ko">레몬펜에에서 사이트 등록시 발급받은 sid값을 입력해주세요.</description>
<description xml:lang="jp">レモンペンのサイトで発行されたsidを入力してください。 (LemonPenOpenmaru社提供)</description>
</var>
</extra_vars>
</addon>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">사용자 추가 정보 및 커뮤니케이션 기능 활성화</title>
<title xml:lang="jp">会員情報・コミュニティ</title>
<title xml:lang="jp">会員情報・コミュニティアドオン</title>
<title xml:lang="zh-CN">用户扩展信息</title>
<title xml:lang="en">Addon for enabling facilities for providing additional information about users and communicating</title>
<title xml:lang="es">Addon para activar la función de la Información addcional del usuario y de la comunicación.</title>

View file

@ -4,7 +4,7 @@
<title xml:lang="zh-CN">OpenID</title>
<title xml:lang="en">Addon for delegating domain name to OpenID</title>
<title xml:lang="es">Delegación ID para OpenID</title>
<title xml:lang="jp">OpenID</title>
<title xml:lang="jp">OpenIDアドオン</title>
<title xml:lang="ru">Аддон для делигирования доменного имени к OpenID</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</name>

View file

@ -2,7 +2,7 @@
<addon version="0.1">
<title xml:lang="ko">포인트 활성화 애드온</title>
<title xml:lang="zh-CN">积分插件</title>
<title xml:lang="jp">ポイントシステム</title>
<title xml:lang="jp">ポイントシステム用アドオン</title>
<title xml:lang="en">Addon for activating point</title>
<title xml:lang="es">Addon para activar los puntos</title>
<title xml:lang="ru">Аддон для активации поинтов</title>
@ -20,7 +20,7 @@
以积分系统模块中设置的内容为基础,对发表/删除新帖,发表/删除评论,上传/下载/删除/文件等动作记录为积分。
</description>
<description xml:lang="jp">
ポイントシステムモジュールで設定された内容を基に、書き込み作成・削除/コメント作成・削除/ファイルアップロード・削除/ダウンロードなどのユーザの活動に対してポイントを記録します。
ポイントシステムモジュールで設定された内容を基に、書き込み作成・削除/コメント作成・削除/ファイルアップロード・削除/ダウンロードなどのユーザの活動に対してそれぞれのポイント付与ができます。
</description>
<description xml:lang="en">
This addon records point on writing/deleting/adding comments/deleting comments/uploading/downloading following to point system module.

View file

@ -2,7 +2,7 @@
<addon version="0.1">
<title xml:lang="ko">포인트 레벨 아이콘 표시 애드온</title>
<title xml:lang="zh-CN">积分级别图标</title>
<title xml:lang="jp">ポイントレベルアイコン</title>
<title xml:lang="jp">ポイントレベルアイコン表示アドオン</title>
<title xml:lang="en">Addon for displaying level icon</title>
<title xml:lang="es">Addon para mostar el nivel del ícono</title>
<title xml:lang="ru">Аддон для отображения иконки уровня</title>

View file

@ -4,13 +4,15 @@
<title xml:lang="zh-CN">Rainbow 链接</title>
<title xml:lang="en">Addon for rainbow links</title>
<title xml:lang="es">Adición Enlace Arco Iris</title>
<title xml:lang="jp">レインボーリンク</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="es">dynamicdrive.com</name>
<name xml:lang="jp">dynamicdrive.com</name>
<name xml:lang="ru">dynamicdrive.com</name>
<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;에 저작권이 있습니다.
@ -30,5 +32,9 @@
<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;」に著作権があります。
</description>
<description xml:lang="ru">
Этот аддон добавляет файл с именем &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>

View file

@ -4,7 +4,7 @@
<title xml:lang="zh-CN">垃圾过滤</title>
<title xml:lang="en">Addon for filtering spam</title>
<title xml:lang="es">Addon para filtrar los Spam</title>
<title xml:lang="jp">スパムフィルター</title>
<title xml:lang="jp">スパムフィルター(SpamFilter)アドオン</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>
@ -31,7 +31,7 @@
</description>
<description xml:lang="jp">
SpamFilterモジュールを利用して書き込み・コメント・トラックバックが登録される前にフィルタリングを行います。
更に連続書き込みやロボットによる自動書き込みなどを防ぐことができます。
更に悪質な連続書き込みやロボットによる自動書き込みなどを防ぐことができます。
詳細な設定は &quot; スパムフィルターモジュール &quot; で行ってください。
</description>
<description xml:lang="ru">

View file

@ -221,6 +221,23 @@
return $this->db_info;
}
/**
* @brief 사이트 title adding
**/
function addBrowserTitle($site_title) {
if(!$site_title) return;
$oContext = &Context::getInstance();
$oContext->_addBrowserTitle($site_title);
}
/**
* @brief 사이트 title adding
**/
function _addBrowserTitle($site_title) {
if($this->site_title) $this->site_title .= ' - '.htmlspecialchars($site_title);
else $this->site_title .= htmlspecialchars($site_title);
}
/**
* @brief 사이트 title setting
**/

View file

@ -324,7 +324,7 @@
}
if(strpos($name,'.')!==false&&strpos($value,'.')!==false) {
list($column_name) = explode('.',$value);
list($table_name, $column_name) = explode('.',$value);
if($column_type[$column_name]) return $value;
}

View file

@ -220,10 +220,9 @@
* @brief RequestMethod에 맞춰 헤더 출력
***/
function _printHeader() {
if($this->gz_enabled) header("Content-Encoding: gzip");
if(Context::getResponseMethod() != 'HTML') return $this->_printXMLHeader();
else return $this->_printHTMLHeader();
if($this->gz_enabled) header("Content-Encoding: gzip");
}
/**

View file

@ -148,7 +148,7 @@
if(!eregi("^([a-z0-9\_\.])",$path)) return $str1;
$path = preg_replace('/^(\.\/|\/)/','',$path);
$path = '<?=$this->tpl_path?>'.$path;
$path = '<?php echo $this->tpl_path?>'.$path;
$output = str_replace($str2, $path, $str1);
return $output;
}

View file

@ -1,5 +1,11 @@
<?php
class Me2DayXmlParser {
/**
* @class GeneralXmlParser
* @author haneul (haneul0318@gmail.com)
* @brief XE에서 쓰는 XmlParser보다 좀더 범용으로 있는 Parser
* @version 0.1
*/
class GeneralXmlParser {
var $output = array();
function parse($input = '') {

View file

@ -58,7 +58,7 @@
unset($this->lang);
}
$this->oParser = xml_parser_create();
$this->oParser = xml_parser_create('UTF-8');
xml_set_object($this->oParser, $this);
xml_set_element_handler($this->oParser, "_tagOpen", "_tagClosed");

View file

@ -197,7 +197,7 @@ function displayMultimedia(src, width, height, auto_start) {
"<embed src=\""+src+"\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\" wmode=\"transparent\"></embed>"+
"<\/object>";
} else if(/\.flv/i.test(src)) {
html = "<embed src=\""+request_uri+"common/tpl/images/flvplayer.swf?autoStart="+auto_start+"&file="+src+"\" width=\""+width+"\" height=\""+height+"\" type=\"application/x-shockwave-flash\"></embed>";
html = "<embed src=\""+request_uri+"common/tpl/images/flvplayer.swf\" allowfullscreen=\"true\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\" flashvars=\"&file="+src+"&width="+width+"&height="+height+"&autostart="+auto_start+"\" />";
} else {
html = "<embed src=\""+src+"\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\"></embed>";
}
@ -605,7 +605,6 @@ function displayPopupMenu(ret_obj, response_tags, params) {
if(html) {
// 레이어 출력
xInnerHtml('popup_menu_area', "<div class=\"box\">"+html+"</div>");
xWidth(area, xWidth(area));
xLeft(area, params["page_x"]);
xTop(area, params["page_y"]);
if(xWidth(area)+xLeft(area)>xClientWidth()+xScrollLeft()) xLeft(area, xClientWidth()-xWidth(area)+xScrollLeft());

View file

@ -172,14 +172,14 @@ $before_month_month_day = convertDatetoDay( $month == 1 ? $year - 1 : $year, $mo
<div class="go">
<select name="year" class="selectTypeY" onchange="submit()">
<? for($i = $max_year; $i >= $min_year; $i--):?>
<?php for($i = $max_year; $i >= $min_year; $i--):?>
<option value="<?php echo $i?>" <?php echo $year == $i? "selected":""?> class="<?php echo $i%10?($i%2?"select_color1":"select_color2"):"select_color10"?>"><?php echo $i?></option>
<?endfor?>
<?php endfor?>
</select>
<select name="month" class="selectTypeM" onchange="submit()">
<? for($i = 1; $i <= 12; $i++):?>
<?php for($i = 1; $i <= 12; $i++):?>
<option value="<?php echo $i?>" <?php echo $month == $i? "selected":""?> class="<?php echo $i%2?"select_color1":"select_color2"?>"><?php echo sprintf("%02d",$i)?></option>
<?endfor?>
<?php endfor?>
</select>
</div>
<br /><br />
@ -188,15 +188,15 @@ $before_month_month_day = convertDatetoDay( $month == 1 ? $year - 1 : $year, $mo
<table cellspacing="0" class="dd">
<tr>
<?for($y = 0; $y < 7; $y++) {?>
<?php for($y = 0; $y < 7; $y++) {?>
<td class="<?php echo $y==0?"sun":($y==6?"sat":"")?>"><?php echo $dayName[$y]?></td>
<?}?>
<?php }?>
</tr>
<?php
//1주~6주
for($i = 0; $i < 6; $i++) {
?>
<tr class="<?if($i == 0){?>first<?}elseif($i == 5){?>last<?}?>">
<tr class="<?php if($i == 0){?>first<?php }elseif($i == 5){?>last<?php }?>">
<?php
//요일
for($j = 0; $j < 7; $j++) {
@ -235,13 +235,13 @@ $before_month_month_day = convertDatetoDay( $month == 1 ? $year - 1 : $year, $mo
$date_str = $y.sprintf("%02d", $m).sprintf("%02d", $day);
?>
<td class="<?php echo $class_name?>" <?if($day){?> onclick="selectDate('<?php echo $date?>','<?php echo $date_str?>','<?php echo $callback_func?>')"<?}?>>
<?if($m == $month){?><?if(date("Ymd")==$date_str){?><strong><?}?>
<?if($day){?><?php echo $day?><?}else{?>&nbsp;<?}?>
<?if(date("Ymd")==$date_str){?></strong><?}?>
<?}else{?>
<span class="disable"><?if($day){?><?php echo $day?><?}else{?>&nbsp;<?}?></span>
<?}?>
<td class="<?php echo $class_name?>" <?php if($day){?> onclick="selectDate('<?php echo $date?>','<?php echo $date_str?>','<?php echo $callback_func?>')"<?php }?>>
<?php if($m == $month){?><?php if(date("Ymd")==$date_str){?><strong><?php }?>
<?php if($day){?><?php echo $day?><?php }else{?>&nbsp;<?php }?>
<?php if(date("Ymd")==$date_str){?></strong><?php }?>
<?php }else{?>
<span class="disable"><?php if($day){?><?php echo $day?><?php }else{?>&nbsp;<?php }?></span>
<?php }?>
</td>
<?php
}

View file

@ -2,7 +2,7 @@
<html lang="{Context::getLangType()}" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="generator" content="zeroboard xe (http://www.zeroboard.com)" />
<meta name="generator" content="zeroboard xe (http://www.zeroboard.com)" version="{__ZBXE_VERSION__}"/>
<!--@if($module_info->module)--><meta name="module" content="{$module_info->module}" />
<!--@end--><!--@if($module_info->skin)--><meta name="module_skin" content="{$module_info->skin}" />
<!--@end--><!--@if($layout_info->title)--><meta name="layout" content="{$layout_info->title} ({$layout_info->layout})" />

Binary file not shown.

View file

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

View file

@ -211,6 +211,25 @@
return preg_match('/.{'.$cut_size.'}/su', $string, $arr) ? $arr[0].$tail : $string;
}
function zgap()
{
$time_zone = $GLOBALS['_time_zone'];
if($time_zone<0) $to = -1; else $to = 1;
$t_hour = substr($time_zone,1,2)*$to;
$t_min = substr($time_zone,3,2)*$to;
$server_time_zone = date("O");
if($server_time_zone<0) $so = -1; else $so = 1;
$c_hour = substr($server_time_zone,1,2)*$so;
$c_min = substr($server_time_zone,3,2)*$so;
$g_min = $t_min - $c_min;
$g_hour = $t_hour - $c_hour;
$gap = $g_min*60 + $g_hour*60*60;
return $gap;
}
/**
* @brief YYYYMMDDHHIISS 형식의 시간값을 unix time으로 변경
* @param str YYYYMMDDHHIISS 형식의 시간값
@ -227,20 +246,7 @@
if(strlen($str) <= 8) {
$gap = 0;
} else {
$time_zone = $GLOBALS['_time_zone'];
if($time_zone<0) $to = -1; else $to = 1;
$t_hour = substr($time_zone,1,2)*$to;
$t_min = substr($time_zone,3,2)*$to;
$server_time_zone = date("O");
if($server_time_zone<0) $so = -1; else $so = 1;
$c_hour = substr($server_time_zone,1,2)*$so;
$c_min = substr($server_time_zone,3,2)*$so;
$g_min = $t_min - $c_min;
$g_hour = $t_hour - $c_hour;
$gap = $g_min*60 + $g_hour*60*60;
$gap = zgap();
}
return mktime($hour, $min, $sec, $month?$month:1, $day?$day:1, $year)+$gap;
@ -411,6 +417,9 @@
// meta 태그 제거
$content = preg_replace("!<meta(.*?)>!is","",$content);
// style 태그 제거
$content = preg_replace("!<style(.*?)<\/style>!is","",$content);
return $content;
}

View file

@ -3,13 +3,13 @@
<title xml:lang="ko">ZBXE 공식 사이트 레이아웃</title>
<title xml:lang="jp">ZBXEオフィシャルレイアウト</title>
<title xml:lang="en">ZBXE Official website layout</title>
<title xml:lang="es">Diseño oficial de la página web de 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">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="zh-CN">zero</name>
<description xml:lang="ko">
제로보드XE 공식 사이트 레이아웃입니다.
@ -29,7 +29,7 @@
HTML/CSS : Chan-Myung Jeong
Layout producer : zero
</description>
<description xml:lang="es">
<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
@ -58,7 +58,7 @@
<title xml:lang="ko">기본</title>
<title xml:lang="jp">デフォルト</title>
<title xml:lang="en">Basic</title>
<title xml:lang="es">Básico</title>
<title xml:lang="es">Básico</title>
<title xml:lang="zh-CN">默认</title>
<value>default</value>
</options>
@ -66,7 +66,7 @@
<title xml:lang="ko">검은색</title>
<title xml:lang="jp"></title>
<title xml:lang="en">Black</title>
<title xml:lang="es">Negro</title>
<title xml:lang="es">Negro</title>
<title xml:lang="zh-CN">黑色</title>
<value>black</value>
</options>
@ -74,7 +74,7 @@
<title xml:lang="ko">하얀색</title>
<title xml:lang="jp"></title>
<title xml:lang="en">white</title>
<title xml:lang="es">Blanco</title>
<title xml:lang="es">Blanco</title>
<title xml:lang="zh-CN">白色</title>
<value>white</value>
</options>
@ -101,19 +101,19 @@
<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="es">Ingresar el URL de la página web para redireccionar al pulsar el logotipo</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">
<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="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="es">Ingresar imagen de fondo si desea usar.</description>
<description xml:lang="es">Ingresar imagen de fondo si desea usar.</description>
</var>
</extra_vars>
<menus>

View file

@ -130,7 +130,8 @@
$obj->type = $val->type->body;
$obj->description = $val->description->body;
$obj->value = $extra_vals->{$obj->name};
if(strpos($obj->value, '|@|') != 0) { $obj->value = explode('|@|', $obj->value); }
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
// 'select'type에서 option목록을 구한다.
if(is_array($val->options)) {

View file

@ -11,13 +11,61 @@
<!-- 애드온의 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
<col />
<col width="50" />
<col width="100" />
<col width="45" />
<col width="130" />
<col width="70" />
<col width="150" />
<col width="50" />
<col width="45" />
<col width="55" />
<!--@else if($lang_type == 'en')-->
<col />
<col width="60" />
<col width="130" />
<col width="75" />
<col width="150" />
<col width="75" />
<col width="65" />
<!--@else if($lang_type == 'zh-CN')-->
<col />
<col width="50" />
<col width="130" />
<col width="70" />
<col width="150" />
<col width="45" />
<col width="60" />
<!--@else if($lang_type == 'jp')-->
<col />
<col width="80" />
<col width="130" />
<col width="70" />
<col width="150" />
<col width="45" />
<col width="55" />
<!--@else if($lang_type == 'es')-->
<col />
<col width="60" />
<col width="130" />
<col width="75" />
<col width="150" />
<col width="100" />
<col width="65" />
<!--@else if($lang_type == 'ru')-->
<col />
<col width="60" />
<col width="130" />
<col width="70" />
<col width="150" />
<col width="100" />
<col width="115" />
<!--@end-->
<thead>
<tr>
<th scope="col">{$lang->addon_name}</th>

View file

@ -64,7 +64,7 @@ h3 .gray { color:#9d9d9d;}
.adminTable td.tCenter { text-align:center; }
.adminTable td select { height:20px; }
.adminTable td textarea { width:98%; height:50px; }
.adminTable td textarea { width:98%; height:120px; }
.adminTable td a { color:#555555; text-decoration:none; }
.adminTable td a:hover { text-decoration:underline; }
.adminTable td p, .adminTable td label { color:#AAAAAA; font-size:.9em; margin-top:5px; }

View file

@ -101,7 +101,7 @@
} else {
// 브라우저 타이틀 설정
Context::setBrowserTitle($oDocument->getTitleText());
Context::addBrowserTitle($oDocument->getTitleText());
// 댓글에디터 설정
if($this->grant->write_comment && $oDocument->allowComment() && !$oDocument->isLocked()) $comment_editor[$oDocument->document_srl] = $this->getCommentEditor($oDocument->document_srl, 0, 100);

View file

@ -19,7 +19,7 @@
<tr>
<th scope="row">{$lang->mid}</th>
<td>
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText" />
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText w300" />
<p>{$lang->about_mid}</p>
</td>
</tr>
@ -48,7 +48,7 @@
<tr>
<th scope="row">{$lang->browser_title}</th>
<td>
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText" />
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText w400" />
<p>{$lang->about_browser_title}</p>
</td>
</tr>

View file

@ -2,42 +2,42 @@
<!--%import("filter/insert_grant.xml")-->
<form action="./" method="post" onsubmit="return procFilter(this, insert_grant)">
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<table cellspacing="0" class="adminTable">
<col width="130" />
<col width="*" />
<col width="80" />
<col width="80" />
<caption>{$lang->about_grant}</caption>
<thead>
<table cellspacing="0" class="adminTable">
<col width="150" />
<col width="" />
<col width="120" />
<col width="120" />
<caption>{$lang->about_grant}</caption>
<thead>
<tr>
<th scope="col">{$lang->grant}</th>
<th scope="col" colspan="3">{$lang->target}</th>
</tr>
</thead>
<tbody>
<!--@foreach($grant_list as $key => $val)-->
<tr>
<th scope="col">{$lang->grant}</th>
<th scope="col" colspan="3">{$lang->target}</th>
<th scope="row">{$val->title}</th>
<td class="left">
<!--@foreach($group_list as $k => $v)-->
<div>
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
</div>
<!--@end-->
</td>
<th class="centerButton"><a href="#" onclick="doSelectAll(this, '{$key}');return false;" class="blue">{$lang->cmd_select_all}</a></th>
<th class="centerButton"><a href="#" onclick="doUnSelectAll(this, '{$key}');return false;" class="red">{$lang->cmd_unselect_all}</a></th>
</tr>
</thead>
<tbody>
<!--@foreach($grant_list as $key => $val)-->
<tr>
<th scope="row">{$val->title}</th>
<td class="left">
<!--@foreach($group_list as $k => $v)-->
<div>
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
</div>
<!--@end-->
</td>
<th class="centerButton"><a href="#" onclick="doSelectAll(this, '{$key}')" class="blue">{$lang->cmd_select_all}</a></th>
<th class="centerButton"><a href="#" onclick="doUnSelectAll(this, '{$key}')" class="red">{$lang->cmd_unselect_all}</a></th>
</tr>
<!--@end-->
<tr>
<th scope="row" colspan="4" class="button"><span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span></th>
</tr>
</tbody>
</table>
<!--@end-->
<tr>
<th scope="row" colspan="4" class="button"><span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span></th>
</tr>
</tbody>
</table>
</form>

View file

@ -7,13 +7,61 @@
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
<col width="50" />
<col width="130" />
<col />
<col width="65" />
<col width="45" />
<col width="45" />
<col width="45" />
<!--@else if($lang_type == 'en')-->
<col width="50" />
<col width="130" />
<col />
<col width="80" />
<col width="60" />
<col width="60" />
<col width="60" />
<col width="45" />
<col width="50" />
<col width="55" />
<!--@else if($lang_type == 'zh-CN')-->
<col width="50" />
<col width="130" />
<col />
<col width="65" />
<col width="45" />
<col width="45" />
<col width="45" />
<!--@else if($lang_type == 'jp')-->
<col width="50" />
<col width="130" />
<col />
<col width="65" />
<col width="45" />
<col width="55" />
<col width="45" />
<!--@else if($lang_type == 'es')-->
<col width="50" />
<col width="130" />
<col />
<col width="80" />
<col width="40" />
<col width="55" />
<col width="70" />
<!--@else if($lang_type == 'ru')-->
<col width="50" />
<col width="130" />
<col />
<col width="90" />
<col width="95" />
<col width="85" />
<col width="70" />
<!--@end-->
<thead>
<tr>
<th scope="col">{$lang->no}</th>

View file

@ -78,10 +78,10 @@
<th scope="row">{$val->title}</th>
<td class="left">
<!--@if($val->type=="text")-->
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w100" />
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w400" />
<!--@elseif($val->type=="textarea")-->
<textarea name="{$val->name}" class="inputTypeTextArea w100">{htmlspecialchars($val->value)}</textarea>
<textarea name="{$val->name}" class="inputTypeTextArea w400">{htmlspecialchars($val->value)}</textarea>
<!--@elseif($val->type=="select")-->
<select name="{$val->name}">

View file

@ -98,7 +98,7 @@
} else {
// 브라우저 타이틀 설정
Context::setBrowserTitle($oDocument->getTitleText());
Context::addBrowserTitle($oDocument->getTitleText());
// 조회수 증가
$oDocument->updateReadedCount();

View file

@ -446,6 +446,8 @@ Jeong, Chan Myeong 070601~070630
.smallBox .pwModify input { width:9em;}
.smallBox .pwModify br { display:block; margin-bottom:.2em}
.smallBox .pwModify p { text-align:center; margin-top:1em; color:#54564b;}
.smallBox .messageBox { padding:20px; border:1px solid #EEEEEE;}
.smallBox .messageBtnBox { text-align:center; padding:10px; background-color:#F3F3F3; border:1px solid #EEEEEE; border-top:none;}
/* messageList */

View file

@ -1,11 +1,16 @@
<!--#include("header.html")-->
<div>
{$message}
<div class="smallBox w268">
<div class="tCenter messageBox">{$message}</div>
<div class="tCenter messageBtnBox">
<!--@if(!$is_logged)-->
<a href="{getUrl('act','dispMemberLoginForm')}" class="button"><span>{$lang->cmd_login}</span></a>
<!--@end-->
<a href="#" onclick="history.back(); return false;" class="button"><span>{$lang->cmd_back}</span></a>
</div>
</div>
<!--@if(!$is_logged)-->
<a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a>
<!--@end-->
<!--#include("footer.html")-->

View file

@ -36,7 +36,7 @@
</select>
<!--@end-->
<input type="text" name="title" id="title" class="inputTypeText" value="{$oDocument->getTitleText()}" />
<input type="text" name="title" id="title" class="inputTypeText" value="{htmlspecialchars($oDocument->getTitleText())}" />
</div>
<dl class="option">

View file

@ -71,7 +71,7 @@ Jeong, Chan Myeong 070601~070630
.boardList td.title a:visited { color:#777777;}
.boardList td.topic { padding-left:1em; color:#888888; }
.boardList td.topic strong a { font-size:1.2em; font-weight:normal; text-decoration:none; color:#444444; }
.boardList td.topic strong a { font-size:1em; font-weight:normal; text-decoration:none; color:#222222; }
.boardList td.topic strong a:visited { color:#777777; }
.boardList td.topic .category { background:url(../images/common/line_1x10_e0e0e0.gif) no-repeat left 3px; padding-left:.5em; margin-left:.5em; color:#AAAAAA; }
.boardList td.topic div.author { margin-top:.5em; color:#BBBBBB; font-size:0.8em; }
@ -291,6 +291,7 @@ Jeong, Chan Myeong 070601~070630
.smallBox .inputPassword { position:relative; border:none; padding:2em 2em 1.5em 2em;}
.smallBox .inputPassword .inputTypeText { float:left; margin-right:.5em; width:8em;}
.smallBox .inputPassword legend { position:absolute; overflow:hidden; width:1px; height:1px; font-size:.001em; text-indent:-100em;}
.smallBox .messageBox { background-color:#F3F3F3; padding:20px; border-bottom:1px solid #EEEEEE;}
/* 게시물의 팝업 메뉴 */

View file

@ -107,9 +107,9 @@
<!-- 목록형태 (포럼형이 기본으로 되어 있을 경우 다른 형태를 지정 못하게 함) -->
<!--@if($module_info->default_style != 'forum')-->
<li class="listType"><a href="{getUrl('listStyle','list')}"><img src="./images/common/typeList.gif" border="0" width="13" height="13" alt="List" /></a></li>
<li class="listType"><a href="{getUrl('listStyle','webzine')}"><img src="./images/common/typeWebzine.gif" border="0" width="13" height="13" alt="Webzine" /></a></li>
<li class="listType"><a href="{getUrl('listStyle','gallery')}"><img src="./images/common/typeGallery.gif" border="0" width="13" height="13" alt="Gallery" /></a></li>
<li class="listType"><a href="{getUrl('listStyle','list','act','')}"><img src="./images/common/typeList.gif" border="0" width="13" height="13" alt="List" /></a></li>
<li class="listType"><a href="{getUrl('listStyle','webzine','act','')}"><img src="./images/common/typeWebzine.gif" border="0" width="13" height="13" alt="Webzine" /></a></li>
<li class="listType"><a href="{getUrl('listStyle','gallery','act','')}"><img src="./images/common/typeGallery.gif" border="0" width="13" height="13" alt="Gallery" /></a></li>
<!--@end-->
</ul>
</div>

View file

@ -1,11 +1,16 @@
<!--#include("header.html")-->
<div>
{$message}
<div class="smallBox w268">
<div class="tCenter messageBox">{$message}</div>
<div class="gap1 tCenter">
<!--@if(!$is_logged)-->
<a href="{getUrl('act','dispMemberLoginForm')}" class="button"><span>{$lang->cmd_login}</span></a>
<!--@end-->
<a href="#" onclick="history.back(); return false;" class="button"><span>{$lang->cmd_back}</span></a>
</div>
</div>
<!--@if(!$is_logged)-->
<a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a>
<!--@end-->
<!--#include("footer.html")-->

View file

@ -36,7 +36,7 @@
</select>
<!--@end-->
<input type="text" name="title" id="title" class="inputTypeText" value="{$oDocument->getTitleText()}" />
<input type="text" name="title" id="title" class="inputTypeText" value="{htmlspecialchars($oDocument->getTitleText())}" />
</div>
<dl class="option">

View file

@ -16,7 +16,7 @@
<tr>
<th scope="row">{$lang->mid}</th>
<td>
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText" />
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText w200" />
<p>{$lang->about_mid}</p>
</td>
</tr>
@ -45,7 +45,7 @@
<tr>
<th scope="row">{$lang->browser_title}</th>
<td>
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText" />
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText w400" />
<p>{$lang->about_browser_title}</p>
</td>
</tr>

View file

@ -28,7 +28,7 @@
<tbody>
<!--@if(!count($category_list))-->
<tr>
<td colspan="6">{$lang->msg_category_is_null}</td>
<td colspan="5">{$lang->msg_category_is_null}</td>
</tr>
<!--@end-->

View file

@ -5,40 +5,40 @@
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<table cellspacing="0" class="adminTable">
<col width="130" />
<col width="*" />
<col width="80" />
<col width="80" />
<caption>{$lang->about_grant}</caption>
<thead>
<tr>
<th scope="col">{$lang->grant}</th>
<th scope="col" colspan="3">{$lang->target}</th>
</tr>
</thead>
<table cellspacing="0" class="adminTable">
<col width="150" />
<col width="*" />
<col width="120" />
<col width="120" />
<caption>{$lang->about_grant}</caption>
<thead>
<tr>
<th scope="col">{$lang->grant}</th>
<th scope="col" colspan="3">{$lang->target}</th>
</tr>
</thead>
<tbody>
<!--@foreach($grant_list as $key => $val)-->
<tr>
<th scope="row">{$val->title}</th>
<td class="left">
<!--@foreach($group_list as $k => $v)-->
<div>
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
</div>
<!--@end-->
</td>
<td><a href="#" onclick="doSelectAll(this, '{$key}')" class="blue">{$lang->cmd_select_all}</a></td>
<td><a href="#" onclick="doUnSelectAll(this, '{$key}')" class="red">{$lang->cmd_unselect_all}</a></td>
</tr>
<!--@end-->
<tr>
<th scope="row" colspan="4" class="button">
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
</th>
</tr>
</tbody>
</table>
<tbody>
<!--@foreach($grant_list as $key => $val)-->
<tr>
<th scope="row">{$val->title}</th>
<td class="left">
<!--@foreach($group_list as $k => $v)-->
<div>
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
</div>
<!--@end-->
</td>
<td><a href="#" onclick="doSelectAll(this, '{$key}');return false;" class="blue">{$lang->cmd_select_all}</a></td>
<td><a href="#" onclick="doUnSelectAll(this, '{$key}');return false;" class="red">{$lang->cmd_unselect_all}</a></td>
</tr>
<!--@end-->
<tr>
<th scope="row" colspan="4" class="button">
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
</th>
</tr>
</tbody>
</table>
</form>

View file

@ -7,13 +7,60 @@
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
<col width="50" />
<col width="130" />
<col />
<col width="65" />
<col width="45" />
<col width="45" />
<col width="45" />
<!--@else if($lang_type == 'en')-->
<col width="50" />
<col width="130" />
<col />
<col width="80" />
<col width="45" />
<col width="50" />
<col width="55" />
<!--@else if($lang_type == 'zh-CN')-->
<col width="50" />
<col width="130" />
<col />
<col width="65" />
<col width="45" />
<col width="45" />
<col width="45" />
<!--@else if($lang_type == 'jp')-->
<col width="50" />
<col width="130" />
<col />
<col width="65" />
<col width="45" />
<col width="55" />
<col width="45" />
<!--@else if($lang_type == 'es')-->
<col width="50" />
<col width="130" />
<col />
<col width="80" />
<col width="40" />
<col width="55" />
<col width="70" />
<!--@else if($lang_type == 'ru')-->
<col width="50" />
<col width="130" />
<col />
<col width="90" />
<col width="95" />
<col width="85" />
<col width="70" />
<!--@end-->
<thead>
<tr>
<th scope="col">{$lang->no}</th>
@ -55,7 +102,7 @@
<a href="{getUrl('act','dispBoardAdminBoardInfo','module_srl',$val->module_srl)}" class="blue">{htmlspecialchars($val->browser_title)}</a>
</td>
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
<td class="blue"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
<td class="green"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
<td class="blue"><a href="./?module=module&amp;act=dispModuleAdminCopyModule&amp;module_srl={$val->module_srl}" onclick="popopen(this.href);return false;">{$lang->cmd_copy}</a></td>
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispBoardAdminDeleteBoard','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@else-->&nbsp;<!--@end--></td>
</tr>

View file

@ -63,10 +63,10 @@
<th scope="row">{$val->title}</th>
<td class="left">
<!--@if($val->type=="text")-->
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w100" />
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w400" />
<!--@elseif($val->type=="textarea")-->
<textarea name="{$val->name}" class="inputTypeTextArea w100">{htmlspecialchars($val->value)}</textarea>
<textarea name="{$val->name}" class="inputTypeTextArea w400">{htmlspecialchars($val->value)}</textarea>
<!--@elseif($val->type=="select")-->
<select name="{$val->name}">

View file

@ -9,56 +9,103 @@
<form id="fo_list" action="./" method="get" onsubmit="return procFilter(this, delete_checked)">
<input type="hidden" name="page" value="{$page}" />
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<col width="50" />
<col />
<col width="120" />
<col width="80" />
<col width="100" />
<col width="70" />
<col width="50" />
<thead>
<tr>
<th scope="col"><input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" /></th>
<th scope="col">
<div class="nowrap">
<select name="module_srl" id="module_srl" class="w180">
<option value="">{$lang->module}</option>
<!--@foreach($mid_list as $key => $val)-->
<option value="{$val->module_srl}" <!--@if($module_srl == $val->module_srl)-->selected="selected"<!--@end-->>{$val->browser_title}</option>
<!--@end-->
</select>
<input type="button" name="go_button" id="go_button" value="GO" class="buttonTypeGo" onclick="location.href=current_url.setQuery('module_srl',xGetElementById('module_srl').options[xGetElementById('module_srl').selectedIndex].value);return false;"/>
</div>
</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->date}</th>
<th scope="col">{$lang->last_update}</th>
<th scope="col">{$lang->ipaddress}</th>
<th scope="col">{$lang->cmd_move}</th>
</tr>
</thead>
<tbody>
<!--@foreach($comment_list as $no => $val)-->
<tr>
<td rowspan="2" class="tahoma">{$no}</td>
<td class="blue"><a href="./?mid={$module_list[$val->module_srl]->mid}" onclick="window.open(this.href);return false">{htmlspecialchars($module_list[$val->module_srl]->browser_title)}</a></td>
<td><div class="member_{$val->member_srl}">{htmlspecialchars($val->nick_name)}</div></td>
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
<td class="tahoma"><!--@if($val->last_upgdate)-->{zdate($val->last_upgdate,"Y-m-d")}<!--@else-->&nbsp;<!--@end--></td>
<td class="tahoma">{$val->ipaddress}</td>
<td class="blue"><a href="{getUrl('','document_srl',$val->document_srl)}#comment_{$val->comment_srl}" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
</tr>
<tr>
<td colspan="6" class="left">
<input type="checkbox" name="cart" value="{$val->comment_srl}" />
{cut_str(htmlspecialchars(strip_tags($val->content)),100,'...')}
</td>
</tr>
<!--@end-->
</tbody>
</table>
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
<col width="50" />
<col />
<col width="150" />
<col width="65" />
<col width="85" />
<col width="90" />
<col width="45" />
<!--@else if($lang_type == 'en')-->
<col width="50" />
<col />
<col width="150" />
<col width="75" />
<col width="85" />
<col width="90" />
<col width="45" />
<!--@else if($lang_type == 'zh-CN')-->
<col width="50" />
<col />
<col width="150" />
<col width="70" />
<col width="70" />
<col width="90" />
<col width="45" />
<!--@else if($lang_type == 'jp')-->
<col width="50" />
<col />
<col width="150" />
<col width="75" />
<col width="85" />
<col width="90" />
<col width="45" />
<!--@else if($lang_type == 'es')-->
<col width="50" />
<col />
<col width="150" />
<col width="75" />
<col width="90" />
<col width="90" />
<col width="50" />
<!--@else if($lang_type == 'ru')-->
<col width="50" />
<col />
<col width="150" />
<col width="75" />
<col width="85" />
<col width="90" />
<col width="95" />
<!--@end-->
<thead>
<tr>
<th scope="col"><input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" /></th>
<th scope="col">
<div class="nowrap">
<select name="module_srl" id="module_srl" class="w180">
<option value="">{$lang->module}</option>
<!--@foreach($mid_list as $key => $val)-->
<option value="{$val->module_srl}" <!--@if($module_srl == $val->module_srl)-->selected="selected"<!--@end-->>{$val->browser_title}</option>
<!--@end-->
</select>
<input type="button" name="go_button" id="go_button" value="GO" class="buttonTypeGo" onclick="location.href=current_url.setQuery('module_srl',xGetElementById('module_srl').options[xGetElementById('module_srl').selectedIndex].value);return false;"/>
</div>
</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->date}</th>
<th scope="col">{$lang->last_update}</th>
<th scope="col">{$lang->ipaddress}</th>
<th scope="col">{$lang->cmd_move}</th>
</tr>
</thead>
<tbody>
<!--@foreach($comment_list as $no => $val)-->
<tr>
<td rowspan="2" class="tahoma">{$no}</td>
<td class="blue"><a href="./?mid={$module_list[$val->module_srl]->mid}" onclick="window.open(this.href);return false">{htmlspecialchars($module_list[$val->module_srl]->browser_title)}</a></td>
<td><div class="member_{$val->member_srl}">{htmlspecialchars($val->nick_name)}</div></td>
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
<td class="tahoma"><!--@if($val->last_update)-->{zdate($val->last_update, 'Y-m-d H:i:s')}<!--@else-->&nbsp;<!--@end--></td>
<td class="tahoma">{$val->ipaddress}</td>
<td class="blue"><a href="{getUrl('','document_srl',$val->document_srl)}#comment_{$val->comment_srl}" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
</tr>
<tr>
<td colspan="6" class="left">
<input type="checkbox" name="cart" value="{$val->comment_srl}" />
{cut_str(htmlspecialchars(strip_tags($val->content)),100,'...')}
</td>
</tr>
<!--@end-->
</tbody>
</table>
<!-- 버튼 -->
<div class="fr gap1">

View file

@ -9,40 +9,87 @@
<form id="fo_list" action="./" method="get" onsubmit="return procFilter(this, delete_checked)">
<input type="hidden" name="page" value="{$page}" />
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<col width="60" />
<col />
<col width="120" />
<col width="80" />
<col width="80" />
<col width="70" />
<col width="50" />
<thead>
<tr>
<th scope="col"><input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" /></th>
<th scope="col">{$lang->comment}</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->date}</th>
<th scope="col">{$lang->cmd_declare}</th>
<th scope="col">{$lang->ipaddress}</th>
<th scope="col">{$lang->cmd_move}</th>
</tr>
</thead>
<tbody>
<!--@foreach($comment_list as $no => $oComment)-->
<tr>
<td class="tahoma">{$no}</td>
<td class="left"><input type="checkbox" name="cart" value="{$oComment->get('comment_srl')}" /> {$oComment->getSummary(100)}</td>
<td><div class="member_{$oComment->getMemberSrl()}">{$oComment->getNickName()}</div></td>
<td class="tahoma">{$oComment->getRegdate("Y-m-d")}</td>
<td class="tahoma red"><strong>{$oComment->get('declared_count')}</strong></td>
<td class="tahoma">{$oComment->get('ipaddress')}</td>
<td class="blue"><a href="{getUrl('','document_srl',$oComment->get('document_srl'))}#comment_{$oComment->get('comment_srl')}" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
</tr>
<!--@end-->
</tbody>
</table>
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
<col width="50" />
<col />
<col width="150" />
<col width="65" />
<col width="50" />
<col width="90" />
<col width="45" />
<!--@else if($lang_type == 'en')-->
<col width="50" />
<col />
<col width="150" />
<col width="80" />
<col width="60" />
<col width="90" />
<col width="50" />
<!--@else if($lang_type == 'zh-CN')-->
<col width="50" />
<col />
<col width="150" />
<col width="65" />
<col width="45" />
<col width="90" />
<col width="45" />
<!--@else if($lang_type == 'jp')-->
<col width="50" />
<col />
<col width="150" />
<col width="80" />
<col width="60" />
<col width="90" />
<col width="50" />
<!--@else if($lang_type == 'es')-->
<col width="50" />
<col />
<col width="150" />
<col width="80" />
<col width="60" />
<col width="90" />
<col width="50" />
<!--@else if($lang_type == 'ru')-->
<col width="50" />
<col />
<col width="150" />
<col width="70" />
<col width="75" />
<col width="70" />
<col width="95" />
<!--@end-->
<thead>
<tr>
<th scope="col"><input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" /></th>
<th scope="col">{$lang->comment}</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->date}</th>
<th scope="col">{$lang->cmd_declare}</th>
<th scope="col">{$lang->ipaddress}</th>
<th scope="col">{$lang->cmd_move}</th>
</tr>
</thead>
<tbody>
<!--@foreach($comment_list as $no => $oComment)-->
<tr>
<td class="tahoma">{$no}</td>
<td class="left"><input type="checkbox" name="cart" value="{$oComment->get('comment_srl')}" /> {$oComment->getSummary(100)}</td>
<td><div class="member_{$oComment->getMemberSrl()}">{$oComment->getNickName()}</div></td>
<td class="tahoma">{$oComment->getRegdate("Y-m-d")}</td>
<td class="tahoma red"><strong>{$oComment->get('declared_count')}</strong></td>
<td class="tahoma">{$oComment->get('ipaddress')}</td>
<td class="blue"><a href="{getUrl('','document_srl',$oComment->get('document_srl'))}#comment_{$oComment->get('comment_srl')}" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
</tr>
<!--@end-->
</tbody>
</table>
<!-- 버튼 -->
<div class="fl gap1">

View file

@ -17,7 +17,7 @@
<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="jp">掲示板、ブログなどのモジュルで使用されるドキュメント(書き込み)を管理するモジュルです。</description>
<description xml:lang="ru">Модуль для управления документами в форуме, блоге и прочее.</description>
</author>
</module>

View file

@ -768,7 +768,7 @@
else $group_check_code = "true";
$attribute = sprintf(
'node_srl="%s" text="<?=(%s?"%s":"")?>" url="%s" expand="%s" document_count="%d" ',
'node_srl="%s" text="<?php echo (%s?"%s":"")?>" url="%s" expand="%s" document_count="%d" ',
$category_srl,
$group_check_code,
$title,

View file

@ -101,6 +101,7 @@
}
function doCart() {
if(!$this->document_srl) return false;
if($this->isCarted()) $this->removeCart();
else $this->addCart();
}
@ -118,6 +119,8 @@
}
function notify($type, $content) {
if(!$this->document_srl) return;
// useNotify가 아니면 return
if(!$this->useNotify()) return;
@ -171,7 +174,7 @@
}
function getTitleText($cut_size = 0, $tail='...') {
if($this->isSecret() && !$this->isGranted()) return Context::getLang('msg_is_secret');
if(!$this->document_srl) return;
if($cut_size) $title = cut_str($this->get('title'), $cut_size, $tail);
else $title = $this->get('title');
@ -180,6 +183,8 @@
}
function getTitle($cut_size = 0, $tail='...') {
if(!$this->document_srl) return;
$title = $this->getTitleText($cut_size, $tail);
$attrs = array();
@ -191,6 +196,8 @@
}
function getContentText($strlen = 0) {
if(!$this->document_srl) return;
if($this->isSecret() && !$this->isGranted()) return Context::getLang('msg_is_secret');
$_SESSION['accessible'][$this->document_srl] = true;
@ -203,6 +210,8 @@
}
function getContent($add_document_info = true) {
if(!$this->document_srl) return;
if($this->isSecret() && !$this->isGranted()) return Context::getLang('msg_is_secret');
$_SESSION['accessible'][$this->document_srl] = true;
@ -242,6 +251,8 @@
}
function getSummary($str_size = 50) {
if(!$this->document_srl) return;
$content = htmlspecialchars(strip_tags(str_replace("&nbsp;"," ",$this->getContent(false))));
return cut_str($content, $str_size, '...');
}
@ -288,6 +299,8 @@
}
function getTrackbackUrl() {
if(!$this->document_srl) return;
// 스팸을 막기 위한 key 생성
$oTrackbackModel = &getModel('trackback');
return $oTrackbackModel->getTrackbackUrl($this->document_srl);
@ -340,6 +353,8 @@
}
function getTrackbacks() {
if(!$this->document_srl) return;
if(!$this->allowTrackback() || !$this->get('trackback_count')) return;
$oTrackbackModel = &getModel('trackback');
@ -347,17 +362,25 @@
}
function thumbnailExists($width = 80, $height = 0, $type = '') {
if(!$this->document_srl) return false;
if(!$this->getThumbnail($width, $height, $type)) return false;
return true;
}
function getThumbnail($width = 80, $height = 0, $thumbnail_type = '') {
if(!$this->document_srl) return;
if(!$height) $height = $width;
$thumbnail_type = '';
// 문서 모듈의 기본 설정에서 Thumbnail의 생성 방법을 구함
if(!in_array($thumbnail_type, array('crop','ratio'))) {
$oDocumentModel = &getModel('document');
$config = $oDocumentModel->getDocumentConfig();
$config = $GLOBALS['__document_config__'];
if(!$config) {
$oDocumentModel = &getModel('document');
$config = $oDocumentModel->getDocumentConfig();
$GLOBALS['__document_config__'] = $config;
}
$thumbnail_type = $config->thumbnail_type;
}
@ -431,26 +454,14 @@
* $time_interval 지정된 시간() 새글/최신 업데이트글의 판별
**/
function getExtraImages($time_interval = 43200) {
if(!$this->document_srl) return;
// 아이콘 목록을 담을 변수 미리 설정
$buffs = array();
$check_files = false;
// 사진 이미지 체크
if(preg_match('!<img([^>]*?)>!is', $this->get('content'))) {
$buffs[] = "image";
$check_files = true;
}
// 동영상 체크
if(preg_match('!<embed([^>]*?)>!is', $this->get('content'))) {
$buffs[] = "movie";
$check_files = true;
}
// 첨부파일 체크
if(!$check_files && $this->hasUploadedFiles()) $buffs[] = "file";
$content = $this->get('content');
// 비밀글 체크
if($this->isSecret()) $buffs[] = "secret";
@ -462,6 +473,25 @@
if($this->get('regdate')>$time_check) $buffs[] = "new";
else if($this->get('last_update')>$time_check) $buffs[] = "update";
// 사진 이미지 체크
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;
$buffs[] = "image";
$check_files = true;
break;
}
// 동영상 체크
if(preg_match('!<embed([^>]*?)>!is', $content) || preg_match('/editor_component=("|\')*multimedia_link/i', $content) ) {
$buffs[] = "movie";
$check_files = true;
}
// 첨부파일 체크
if(!$check_files && $this->hasUploadedFiles()) $buffs[] = "file";
return $buffs;
}
@ -470,6 +500,8 @@
* @brief getExtraImages로 구한 값을 이미지 태그를 씌워서 리턴
**/
function printExtraImages($time_check = 43200) {
if(!$this->document_srl) return;
// 아이콘 디렉토리 구함
$path = sprintf('%s%s',getUrl(), 'modules/document/tpl/icons/');
@ -484,11 +516,15 @@
}
function hasUploadedFiles() {
if(!$this->document_srl) return;
if($this->isSecret() && !$this->isGranted()) return false;
return $this->get('uploaded_count')? true : false;
}
function getUploadedFiles() {
if(!$this->document_srl) return;
if($this->isSecret() && !$this->isGranted()) return;
if(!$this->get('uploaded_count')) return;

View file

@ -11,53 +11,105 @@
<form id="fo_list" action="./" method="get" onsubmit="return procFilter(this, delete_checked)">
<input type="hidden" name="page" value="{$page}" />
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<col width="60" />
<col width="40" />
<col />
<col width="120" />
<col width="60" />
<col width="60" />
<col width="60" />
<col width="80" />
<thead>
<tr>
<th scope="col">{$lang->no}</th>
<th scope="col"><input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" /></th>
<th scope="col">{$lang->title}</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->cmd_declare}</th>
<th scope="col">{$lang->readed_count}</th>
<th scope="col">{$lang->voted_count}</th>
<th scope="col">{$lang->date}</th>
</tr>
</thead>
<tbody>
<!--@foreach($document_list as $no => $oDocument)-->
<tr>
<td class="tahoma">{$no}</td>
<td><input type="checkbox" name="cart" value="{$oDocument->document_srl}" onclick="doAddDocumentCart(this)" <!--@if($oDocument->isCarted())-->checked="checked"<!--@end-->/></td>
<td class="left subject">
<a href="{getUrl('','document_srl',$oDocument->document_srl)}" onclick="window.open(this.href);return false">{$oDocument->getTitleText()}</a>
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
<col width="50" />
<col width="40" />
<col />
<col width="150" />
<col width="55" />
<col width="55" />
<col width="55" />
<col width="65" />
<!--@if($oDocument->getCommentCount())-->
[{$oDocument->getCommentCount()}]
<!--@end-->
<!--@else if($lang_type == 'en')-->
<col width="50" />
<col width="40" />
<col />
<col width="150" />
<col width="60" />
<col width="55" />
<col width="55" />
<col width="75" />
<!--@if($oDocument->getTrackbackCount())-->
[{$oDocument->getTrackbackCount()}]
<!--@end-->
</td>
<td class="left"><div class="member_{$oDocument->get('member_srl')}">{$oDocument->getNickName()}</div></td>
<td class="tahoma red"><strong>{$oDocument->get('declared_count')}</strong></td>
<td class="tahoma">{$oDocument->get('readed_count')}</td>
<td class="tahoma">{$oDocument->get('voted_count')}</td>
<td class="tahoma">{$oDocument->getRegdate("Y-m-d")}</td>
</tr>
<!--@end-->
</tbody>
</table>
<!--@else if($lang_type == 'zh-CN')-->
<col width="50" />
<col width="40" />
<col />
<col width="150" />
<col width="45" />
<col width="45" />
<col width="45" />
<col width="65" />
<!--@else if($lang_type == 'jp')-->
<col width="50" />
<col width="40" />
<col />
<col width="150" />
<col width="55" />
<col width="55" />
<col width="55" />
<col width="75" />
<!--@else if($lang_type == 'es')-->
<col width="50" />
<col width="40" />
<col />
<col width="150" />
<col width="55" />
<col width="55" />
<col width="110" />
<col width="75" />
<!--@else if($lang_type == 'ru')-->
<col width="50" />
<col width="40" />
<col />
<col width="150" />
<col width="75" />
<col width="50" />
<col width="60" />
<col width="65" />
<!--@end-->
<thead>
<tr>
<th scope="col">{$lang->no}</th>
<th scope="col"><input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" /></th>
<th scope="col">{$lang->title}</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->cmd_declare}</th>
<th scope="col">{$lang->readed_count}</th>
<th scope="col">{$lang->voted_count}</th>
<th scope="col">{$lang->date}</th>
</tr>
</thead>
<tbody>
<!--@foreach($document_list as $no => $oDocument)-->
<tr>
<td class="tahoma">{$no}</td>
<td><input type="checkbox" name="cart" value="{$oDocument->document_srl}" onclick="doAddDocumentCart(this)" <!--@if($oDocument->isCarted())-->checked="checked"<!--@end-->/></td>
<td class="left subject">
<a href="{getUrl('','document_srl',$oDocument->document_srl)}" onclick="window.open(this.href);return false">{$oDocument->getTitleText()}</a>
<!--@if($oDocument->getCommentCount())-->
[{$oDocument->getCommentCount()}]
<!--@end-->
<!--@if($oDocument->getTrackbackCount())-->
[{$oDocument->getTrackbackCount()}]
<!--@end-->
</td>
<td class="left"><div class="member_{$oDocument->get('member_srl')}">{$oDocument->getNickName()}</div></td>
<td class="tahoma red"><strong>{$oDocument->get('declared_count')}</strong></td>
<td class="tahoma">{$oDocument->get('readed_count')}</td>
<td class="tahoma">{$oDocument->get('voted_count')}</td>
<td class="tahoma">{$oDocument->getRegdate("Y-m-d")}</td>
</tr>
<!--@end-->
</tbody>
</table>
<!-- 버튼 -->
<div class="fl gap1">

View file

@ -11,65 +11,76 @@
<form id="fo_list" action="./" method="get" onsubmit="return procFilter(this, delete_checked)">
<input type="hidden" name="page" value="{$page}" />
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<col width="60" />
<col width="35" />
<col />
<col width="120" />
<col width="60" />
<col width="60" />
<col width="80" />
<thead>
<tr>
<th scope="col">{$lang->no}</th>
<th scope="col"><input type="checkbox" onclick="clickCheckBoxAll(this.form, 'cart'); return false;" /></th>
<th scope="col">
<div class="nowrap">
<select name="module_srl" id="module_srl" class="w230">
<option value="">{$lang->module}</option>
<!--@foreach($mid_list as $key => $val)-->
<option value="{$val->module_srl}" <!--@if($module_srl == $val->module_srl)-->selected="selected"<!--@end-->>{$val->browser_title}</option>
<!--@end-->
</select>
<input type="button" name="go_button" id="go_button" value="GO" class="buttonTypeGo" onclick="location.href=current_url.setQuery('module_srl',xGetElementById('module_srl').options[xGetElementById('module_srl').selectedIndex].value);return false;"/>
</div>
</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->readed_count}</th>
<th scope="col">{$lang->voted_count}</th>
<th scope="col">{$lang->date}</th>
</tr>
</thead>
<tbody>
<!--@foreach($document_list as $no => $oDocument)-->
<tr>
<td class="tahoma">{$no}</td>
<td><input type="checkbox" name="cart" value="{$oDocument->document_srl}" onclick="doAddDocumentCart(this)" <!--@if($oDocument->isCarted())-->checked="checked"<!--@end-->/></td>
<td class="left subject">
<!--@if($oDocument->get('module_srl')==$oDocument->get('member_srl'))-->
{$lang->cmd_save}
<!--@else-->
<a href="{getUrl('','mid',$module_list[$oDocument->get('module_srl')]->mid)}" class="blue" onclick="window.open(this.href);return false">[{htmlspecialchars($module_list[$oDocument->get('module_srl')]->browser_title)}]</a><br />
<a href="{getUrl('','document_srl',$oDocument->document_srl)}" onclick="window.open(this.href);return false">{$oDocument->getTitle()}</a>
<!--@end-->
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
{@ $col_width = array(50,40,0,150,55,55,65)}
<!--@else if($lang_type == 'en')-->
{@ $col_width = array(50,40,0,150,55,55,75)}
<!--@else if($lang_type == 'zh-CN')-->
{@ $col_width = array(50,40,0,150,50,50,70)}
<!--@else if($lang_type == 'jp')-->
{@ $col_width = array(50,40,0,150,55,55,75)}
<!--@else if($lang_type == 'es')-->
{@ $col_width = array(50,40,0,150,55,110,75)}
<!--@else if($lang_type == 'ru')-->
{@ $col_width = array(50,40,0,150,50,60,65)}
<!--@end-->
<!--@if($oDocument->getCommentCount())-->
[{$oDocument->getCommentCount()}]
<!--@end-->
<!--@foreach($col_width as $width)-->
<col <!--@if($width)-->width="{$width}" <!--@end-->/>
<!--@end-->
<!--@if($oDocument->getTrackbackCount())-->
[{$oDocument->getTrackbackCount()}]
<!--@end-->
</td>
<td class="left"><div class="member_{$oDocument->get('member_srl')}">{$oDocument->getNickName()}</div></td>
<td class="tahoma">{$oDocument->get('readed_count')}</td>
<td class="tahoma">{$oDocument->get('voted_count')}</td>
<td class="tahoma">{$oDocument->getRegdate("Y-m-d")}</td>
</tr>
<!--@end-->
</tbody>
</table>
<thead>
<tr>
<th scope="col">{$lang->no}</th>
<th scope="col"><input type="checkbox" onclick="clickCheckBoxAll(this.form, 'cart'); return false;" /></th>
<th scope="col">
<div class="nowrap">
<select name="module_srl" id="module_srl" class="w230">
<option value="">{$lang->module}</option>
<!--@foreach($mid_list as $key => $val)-->
<option value="{$val->module_srl}" <!--@if($module_srl == $val->module_srl)-->selected="selected"<!--@end-->>{$val->browser_title}</option>
<!--@end-->
</select>
<input type="button" name="go_button" id="go_button" value="GO" class="buttonTypeGo" onclick="location.href=current_url.setQuery('module_srl',xGetElementById('module_srl').options[xGetElementById('module_srl').selectedIndex].value);return false;"/>
</div>
</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->readed_count}</th>
<th scope="col">{$lang->voted_count}</th>
<th scope="col">{$lang->date}</th>
</tr>
</thead>
<tbody>
<!--@foreach($document_list as $no => $oDocument)-->
<tr>
<td class="tahoma">{$no}</td>
<td><input type="checkbox" name="cart" value="{$oDocument->document_srl}" onclick="doAddDocumentCart(this)" <!--@if($oDocument->isCarted())-->checked="checked"<!--@end-->/></td>
<td class="left subject">
<!--@if($oDocument->get('module_srl')==$oDocument->get('member_srl'))-->
{$lang->cmd_save}
<!--@else-->
<a href="{getUrl('','mid',$module_list[$oDocument->get('module_srl')]->mid)}" class="blue" onclick="window.open(this.href);return false">[{htmlspecialchars($module_list[$oDocument->get('module_srl')]->browser_title)}]</a><br />
<a href="{getUrl('','document_srl',$oDocument->document_srl)}" onclick="window.open(this.href);return false">{$oDocument->getTitle()}</a>
<!--@end-->
<!--@if($oDocument->getCommentCount())-->
[{$oDocument->getCommentCount()}]
<!--@end-->
<!--@if($oDocument->getTrackbackCount())-->
[{$oDocument->getTrackbackCount()}]
<!--@end-->
</td>
<td class="left"><div class="member_{$oDocument->get('member_srl')}">{$oDocument->getNickName()}</div></td>
<td class="tahoma">{$oDocument->get('readed_count')}</td>
<td class="tahoma">{$oDocument->get('voted_count')}</td>
<td class="tahoma">{$oDocument->getRegdate("Y-m-d")}</td>
</tr>
<!--@end-->
</tbody>
</table>
<!-- 버튼 -->
<div class="fr gap1">

View file

@ -7,70 +7,82 @@
class code_highlighter extends EditorHandler {
// editor_sequence 는 에디터에서 필수로 달고 다녀야 함
var $editor_sequence = 0;
var $component_path = '';
// editor_sequence 는 에디터에서 필수로 달고 다녀야 함
var $editor_sequence = 0;
var $component_path = '';
/**
* @brief editor_sequence과 컴포넌트의 경로를 받음
**/
function code_highlighter($editor_sequence, $component_path) {
$this->editor_sequence = $editor_sequence;
$this->component_path = $component_path;
}
/**
* @brief editor_sequence과 컴포넌트의 경로를 받음
**/
function code_highlighter($editor_sequence, $component_path) {
$this->editor_sequence = $editor_sequence;
$this->component_path = $component_path;
}
/**
* @brief popup window요청시 popup window에 출력할 내용을 추가하면 된다
**/
function getPopupContent() {
// 템플릿을 미리 컴파일해서 컴파일된 소스를 return
$tpl_path = $this->component_path.'tpl';
$tpl_file = 'popup.html';
/**
* @brief popup window요청시 popup window에 출력할 내용을 추가하면 된다
**/
function getPopupContent() {
// 템플릿을 미리 컴파일해서 컴파일된 소스를 return
$tpl_path = $this->component_path.'tpl';
$tpl_file = 'popup.html';
Context::set("tpl_path", $tpl_path);
Context::set("tpl_path", $tpl_path);
$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($tpl_path, $tpl_file);
}
$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($tpl_path, $tpl_file);
}
/**
* @brief 에디터 컴포넌트가 별도의 고유 코드를 이용한다면 코드를 html로 변경하여 주는 method
*
* 이미지나 멀티미디어, 설문등 고유 코드가 필요한 에디터 컴포넌트는 고유코드를 내용에 추가하고 나서
* DocumentModule::transContent() 에서 해당 컴포넌트의 transHtml() method를 호출하여 고유코드를 html로 변경
**/
function transHTML($xml_obj) {
$code_type = $xml_obj->attrs->code_type;
$option_collapse = $xml_obj->attrs->collapse;
$option_nogutter = $xml_obj->attrs->nogutter;
$option_nocontrols = $xml_obj->attrs->nocontrols;
if($option_collapse == 'Y') $code_type = $code_type.':collapse';
if($option_nogutter == 'Y') $code_type = $code_type.':nogutter';
if($option_nocontrols == 'Y' && $option_collapse !== 'Y') $code_type = $code_type.':nocontrols';
$body = $xml_obj->body;
/**
* @brief 에디터 컴포넌트가 별도의 고유 코드를 이용한다면 코드를 html로 변경하여 주는 method
*
* 이미지나 멀티미디어, 설문등 고유 코드가 필요한 에디터 컴포넌트는 고유코드를 내용에 추가하고 나서
* DocumentModule::transContent() 에서 해당 컴포넌트의 transHtml() method를 호출하여 고유코드를 html로 변경
**/
function transHTML($xml_obj) {
$code_type = $xml_obj->attrs->code_type;
$option_file_path = $xml_obj->attrs->file_path;
$option_description = $xml_obj->attrs->description;
$option_first_line = $xml_obj->attrs->first_line;
$option_collapse = $xml_obj->attrs->collapse;
$option_nogutter = $xml_obj->attrs->nogutter;
$option_nocontrols = $xml_obj->attrs->nocontrols;
if($option_collapse == 'true') $option = $option.':collapse';
if($option_nogutter == 'true') $option = $option.':nogutter';
if($option_nocontrols == 'true' && $option_collapse != 'true') $option = $option.':nocontrols';
if($option_first_line > 1) $option = $option.":firstline[$option_first_line]";
$body = $xml_obj->body;
$body = preg_replace('@<br\\s*/?>@Ui' , "\r\n", $body);
$body = strip_tags($body);
if(!$GLOBALS['_called_code_highlighter_']) {
$GLOBALS['_called_code_highlighter_'] = true;
$js_code = <<<dpScript
$body = preg_replace('@(<br\\s*/?>)(\n)?@i' , "\n", $body);
$body = strip_tags($body);
if(!$GLOBALS['_called_editor_component_code_highlighter_']) {
$GLOBALS['_called_editor_component_code_highlighter_'] = true;
$js_code = <<<dpScript
<script type="text/javascript">
dp.SyntaxHighlighter.ClipboardSwf = '{$this->component_path}script/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('CodeHighLighterArea');
dp.SyntaxHighlighter.HighlightAll('code');
</script>
dpScript;
Context::addHtmlFooter($js_code);
}
Context::addHtmlFooter($js_code);
Context::addCSSFile($this->component_path.'css/SyntaxHighlighter.css');
Context::addJsFile($this->component_path.'script/shCore.js');
}
Context::addCSSFile($this->component_path.'css/SyntaxHighlighter.css');
Context::addJsFile($this->component_path.'script/shBrush'.$code_type.'.js');
Context::addJsFile($this->component_path.'script/shCore.js');
Context::addJsFile($this->component_path.'script/shBrush'.$code_type.'.js');
$output = sprintf('<pre name="CodeHighLighterArea" class="%s">%s</pre>', $code_type, $body);
return $output;
}
$output = null;
if($option_file_path != null || $option_description != null) {
$output .= '<div class="ch_infobox">';
if($option_file_path != null) $output .= '<span class="file_path">'.$option_file_path.'</span>';
if($option_description != null) $output .= '<span class="description">'.$option_description.'</span>';
$output .= '</div>';
}
$output .= sprintf('<pre name="code" class="%s">%s</pre>', $code_type.$option, $body);
return $output;
}
}
?>

View file

@ -1,18 +1,17 @@
.dp-highlighter
{
font-family: "Consolas", "Courier New", Courier, mono, serif;
font-family: "Consolas", "Courier New", "Courier", "mono", "serif";
font-size: 12px;
background-color: #E7E5DC;
width: 99%;
overflow: auto;
margin: 18px 0 18px 0 !important;
padding-top: 1px; /* adds a little border on top when controls are hidden */
}
/* clear styles */
.dp-highlighter ol,
.dp-highlighter ol li,
.dp-highlighter ol li span
.dp-highlighter ol li span
{
margin: 0;
padding: 0;
@ -60,7 +59,6 @@
{
list-style: decimal; /* better look for others, override cascade from OL */
list-style-position: outside !important;
border-left: 3px solid #22AAEE;
background-color: #F8F8F8;
color: #5C5C5C;
padding: 0 3px 0 10px !important;
@ -137,7 +135,6 @@
color: silver;
background-color: #f8f8f8;
padding-bottom: 10px;
border-left: 3px solid #22AAEE;
}
.dp-highlighter.nogutter .tools
@ -247,6 +244,7 @@
.dp-css {}
.dp-css .comment { color: green; }
.dp-css .string { color: red; }
.dp-css .value { color: red; }
.dp-css .keyword { color: blue; }
.dp-css .colors { color: darkred; }
.dp-css .vars { color: #d00; }
@ -282,11 +280,31 @@
.dp-abap .datatypes { color: #2E8B57; font-weight: bold; }
pre[name='CodeHighLighterArea'] {
max-height: 200px;
pre[name='code'] {
max-height: 300px;
font-size: 1.1em;
border: #666666 dotted 1px;
border-left: #22AAEE solid 5px;
padding: 5px;
overflow: auto;
}
.ch_infobox {
padding: 5px 0;
width: 99%;
background-color: #F8F8F8;
border-top: 1px solid #E7E5DC;
}
.ch_infobox .file_path {
font-size: 0.9em;
font-weight: bold;
margin-left: 10px;
}
.ch_infobox .description {
color: #AAA;
font-size: 0.9em;
margin-left: 10px;
}

View file

@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<component version="0.2">
<component version="0.3">
<title xml:lang="ko">Code Highlighter</title>
<title xml:lang="jp">コードハイライト</title>
<title xml:lang="zh-CN">代码高亮显示</title>
<title xml:lang="zh-CN">代码高亮显示</title>
<title xml:lang="en">Code Highlighter</title>
<title xml:lang="ru">Подсветка кода</title>
<author email_address="bnufactory@gmail.com" link="http://bnufactory.com" date="2007. 11. 29">
<author email_address="bnufactory@gmail.com" link="http://bnufactory.com" date="2007. 12. 22">
<name xml:lang="ko">BNU</name>
<name xml:lang="jp">BNU</name>
<name xml:lang="zh-CN">BNU</name>
<name xml:lang="zh-CN">BNU</name>
<name xml:lang="en">BNU</name>
<name xml:lang="ru">BNU</name>
<description xml:lang="ko">코드를 보기 좋게 출력합니다.</description>
<description xml:lang="jp">ソースコードを見やすく表示します。</description>
<description xml:lang="zh-CN">高亮显示所选代码。</description>
<description xml:lang="en">Component serving for code highlighting.</description>
<description xml:lang="zh-CN">高亮显示所选代码。</description>
<description xml:lang="en">It displays code in good shape.</description>
<description xml:lang="ru">Компонент служащий для подсветки кода</description>
</author>
</component>

View file

@ -6,7 +6,11 @@
**/
$lang->code_type = 'Code Type';
$lang->used_collapse = 'Used Collapse';
$lang->hidden_linenumber = 'Hidden Linenumber';
$lang->hidden_controls = 'Hidden Control';
$lang->used_collapse = 'Use Folding';
$lang->hidden_linenumber = 'Hide Line Number';
$lang->hidden_controls = 'Hide Toolbar';
$lang->file_path = 'File Path';
$lang->description = 'Description';
$lang->first_line = 'First Line';
?>

View file

@ -9,4 +9,8 @@
$lang->used_collapse = '접기 기능 사용';
$lang->hidden_linenumber = '줄 번호 감추기';
$lang->hidden_controls = '도구바 감추기';
$lang->file_path = '파일경로';
$lang->description = '설명';
$lang->first_line = '시작 줄 번호';
?>

View file

@ -9,4 +9,8 @@
$lang->used_collapse = 'Использованное сокращение';
$lang->hidden_linenumber = 'Скрытый номер строки';
$lang->hidden_controls = 'Скрытый контрол';
$lang->file_path = 'Путь файла';
$lang->description = 'Описание';
$lang->first_line = 'Первая строка';
?>

View file

@ -5,10 +5,29 @@
* http://www.smallsharptools.com/
*/
dp.sh.Brushes.CSS=function()
{var keywords='ascent azimuth background-attachment background-color background-image background-position '+'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top '+'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color '+'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width '+'border-bottom-width border-left-width border-width border cap-height caption-side centerline clear clip color '+'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display '+'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font '+'height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top '+'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans '+'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page '+'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position '+'quotes richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress '+'table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em '+'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';var values='above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';var fonts='[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif';this.regexList=[{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\#[a-zA-Z0-9]{3,6}','g'),css:'value'},{regex:new RegExp('(-?\\d+)(\.\\d+)?(px|em|pt|\:|\%|)','g'),css:'value'},{regex:new RegExp('!important','g'),css:'important'},{regex:new RegExp(this.GetKeywordsCSS(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetValuesCSS(values),'g'),css:'value'},{regex:new RegExp(this.GetValuesCSS(fonts),'g'),css:'value'}];this.CssClass='dp-css';this.Style='.dp-css .value { color: black; }'+'.dp-css .important { color: red; }';}
dp.sh.Brushes.CSS=function() {
var keywords='ascent azimuth background background-attachment background-color background-image background-position background-repeat baseline bbox border border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width bottom cap-height caption-side centerline clear clip color content counter-increment counter-reset cue cue-after cue-before cursor definition-src descent direction display elevation empty-cells float font font-family font-size font-size-adjust font-stretch font-style font-variant font-weight height left letter-spacing line-height list-style list-style-image list-style-position list-style-type margin margin-top margin-right margin-bottom margin-left marker-offset marks mathline max-height max-width min-height min-width orphans outline outline-color outline-style outline-width overflow padding padding-top padding-right padding-bottom padding-left page page-break-after page-break-before page-break-inside panose-1 pause pause-after pause-before pitch pitch-range play-during position quotes richness right size slope src speak speak-header speak-numeral speak-punctuation speech-rate stemh stemv stress table-layout text-align text-decoration text-indent text-shadow text-transform top unicode-bidi unicode-range units-per-em vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';
var values='above absolute ActiveBorder ActiveCaption all always AppWorkspace aqua armenian attr aural auto avoid Background baseline behind below bidi-override black blink block blue bold bolder both bottom braille ButtonFace ButtonHighlight ButtonShadow ButtonText capitalize caption CaptionText center center-left center-right circle cjk-ideographic close-quote code collapse compact condensed continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia georgian gray GrayText green groove handheld hebrew help hidden hide high higher Highlight HighlightText hiragana hiragana-iroha icon InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText inline inline-table inset inside invert italic justify katakana katakana-iroha landscape large larger left left-side leftwards level lighter lime line-through list-item local loud low lower lower-alpha lowercase lower-greek lower-latin lower-roman ltr marker maroon medium Menu MenuText message-box middle mix monospace move narrower navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side rightwards rtl run-in sans-serif screen scroll Scrollbar semi-condensed semi-expanded separate se-resize serif show silent silver slow slower small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal text text-bottom text-top thick thin ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin upper-roman url visible wait white wider Window WindowFrame WindowText w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';
var fonts='[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier [mM]ono [gG]eneva ';
this.regexList=[
{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},
{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},
{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},
{regex:new RegExp('\\#[a-zA-Z0-9]{3,6}','g'),css:'value'},
{regex:new RegExp('(-?\\d+)(\.\\d+)?(px|em|pt|\:|\%|)','g'),css:'value'},
{regex:new RegExp('!important','g'),css:'important'},
{regex:new RegExp(this.GetKeywordsCSS(keywords),'gm'),css:'keyword'},
{regex:new RegExp(this.GetValuesCSS(values),'g'),css:'value'},
{regex:new RegExp(this.GetValuesCSS(fonts),'g'),css:'value'}
];
this.CssClass='dp-css';
this.Style='.dp-css .important { color: black; }';
}
dp.sh.Highlighter.prototype.GetKeywordsCSS=function(str)
{return'\\b([a-z_]|)'+str.replace(/ /g,'(?=:)\\b|\\b([a-z_\\*]|\\*|)')+'(?=:)\\b';}
{return'\\b([a-z_]|)'+str.replace(/ /g,'(?= ?: ?)\\b|\\b([a-z_\\*]|\\*|)')+'(?=:)\\b';}
dp.sh.Highlighter.prototype.GetValuesCSS=function(str)
{return'\\b'+str.replace(/ /g,'(?!-)(?!:)\\b|\\b()')+'\:\\b';}
dp.sh.Brushes.CSS.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSS.Aliases=['css'];

View file

@ -1,66 +1,59 @@
dp.sh.Brushes.Php = function()
{
var funcs = 'abs acos acosh addcslashes addslashes '+
'array_change_key_case array_chunk array_combine array_count_values array_diff '+
'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+
'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+
'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+
'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+
'array_push array_rand array_reduce array_reverse array_search array_shift '+
'array_slice array_splice array_sum array_udiff array_udiff_assoc '+
'array_udiff_uassoc array_uintersect array_uintersect_assoc '+
'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+
'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+
'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+
'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+
'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+
'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+
'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+
'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+
'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+
'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+
'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+
'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+
'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+
'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+
'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+
'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+
'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+
'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+
'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+
'parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir '+
'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+
'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+
'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+
'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+
'strtoupper strtr strval substr substr_compare get_magic_quotes_gpc sprintf implode';
var funcs = 'abs acos acosh addcslashes addslashes '+
'array_change_key_case array_chunk array_combine array_count_values array_diff '+
'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+
'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+
'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+
'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+
'array_push array_rand array_reduce array_reverse array_search array_shift '+
'array_slice array_splice array_sum array_udiff array_udiff_assoc '+
'array_udiff_uassoc array_uintersect array_uintersect_assoc '+
'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+
'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+
'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+
'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+
'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+
'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+
'deg2rad delete ebcdic2ascii end ereg ereg_replace eregi eregi_replace error_log '+
'error_reporting escapeshellarg escapeshellcmd exec exp explode extension_loaded '+
'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+
'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+
'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+
'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+
'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+
'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+
'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+
'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+
'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+
'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+
'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+
'phpinfo parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir preg_replace '+
'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+
'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+
'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+
'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+
'strtoupper strtr strval substr substr_compare get_magic_quotes_gpc sprintf implode';
var keywords = 'and or xor __FILE__ __LINE__ array as break case :: ' +
'cfunction class const continue declare default die do else ' +
'elseif empty enddeclare endfor endforeach endif endswitch endwhile ' +
'extends for foreach function include include_once global if ' +
'new old_function return static switch use require require_once ' +
'var while __FUNCTION__ __CLASS__ ' +
'__METHOD__ abstract interface public implements extends private protected throw '+
'NULL FALSE TRUE';
var keywords = '__CLASS__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ abstract and array as break case catch cfunction '+
'class clone const continue declare default die do echo else elseif empty enddeclare endfor endforeach '+
'endif endswitch endwhile eval exception exit extends final for foreach function global if implements '+
'include include_once interface isset list new old_function or php_user_filter print private protected '+
'public require require_once return static switch this throw try unset use var while xor '+
'-&gt; :: @ TRUE FALSE NULL true false null';
this.regexList = [
{ regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
{ regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
{ regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
{ regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
{ regex: new RegExp('\\$[a-zA-Z0-9_]+', 'g'), css: 'vars' }, // variables
{ regex: new RegExp(this.GetKeywords(funcs), 'gmi'), css: 'func' }, // functions
{ regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
];
var zbxe_funcs = 'moduleInstall checkUpdate moduleUpdate getModel setBrowserTitle';
var zbxe_class = 'ModuleObject Context';
this.regexList = [
{ regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
{ regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
{ regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
{ regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
{ regex: new RegExp('\\$[a-zA-Z0-9_\\-&lt;]+', 'g'), css: 'vars' }, // variables
{ regex: new RegExp(this.GetKeywords(funcs), 'gmi'), css: 'func' }, // functions
{ regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
];
this.CssClass = 'dp-php';
this.CssClass = 'dp-php';
}
dp.sh.Brushes.Php.prototype = new dp.sh.Highlighter();
dp.sh.Brushes.Php.Aliases = ['php'];
dp.sh.Brushes.Php.prototype = new dp.sh.Highlighter();
dp.sh.Brushes.Php.Aliases = ['php'];

View file

@ -74,6 +74,7 @@ dp.sh.Toolbar.Commands = {
.replace(/&lt;/g,'<')
.replace(/&gt;/g,'>')
.replace(/&amp;/g,'&')
.replace(/&nbsp;/g,' ')
;
if(window.clipboardData)

View file

@ -14,25 +14,40 @@
<tr>
<th scope="row">{$lang->code_type}</th>
<td>
<ul class="buttonLeft nospace">
<li>
<select id="code_type" name="code_type">
<option value="Php">PHP</option>
<option value="Css">CSS</option>
<option value="JScript">Javascript</option>
<option value="Xml">XML</option>
<option value="Cpp">C++</option>
<option value="CSharp">C#</option>
<option value="Vb">VB</option>
<option value="Java">Java</option>
<option value="Delphi">Delphi</option>
<option value="Python">Python</option>
<option value="Ruby">Ruby</option>
<option value="Sql">SQL</option>
<option value="Abap">Abap</option>
</select>
</li>
</ul>
<select id="code_type" name="code_type">
<option value="Php">PHP</option>
<option value="Xml">HTML/XML</option>
<option value="Css">CSS</option>
<option value="JScript">Javascript</option>
<option value="Cpp">C++</option>
<option value="CSharp">C#</option>
<option value="Vb">VB</option>
<option value="Java">Java</option>
<option value="Delphi">Delphi</option>
<option value="Python">Python</option>
<option value="Ruby">Ruby</option>
<option value="Sql">SQL</option>
<option value="Abap">Abap</option>
</select>
</td>
</tr>
<tr>
<th scope="row">{$lang->file_path}</th>
<td>
<input type="text" id="file_path" name="file_path" class="inputTypeText w400" />
</td>
</tr>
<tr>
<th scope="row">{$lang->description}</th>
<td>
<input type="text" id="description" name="description" class="inputTypeText w400" />
</td>
</tr>
<tr>
<th scope="row">{$lang->first_line}</th>
<td>
<input type="text" id="first_line" name="first_line" value="1" class="inputTypeText w40" />
<input type="checkbox" id="nogutter" name="nogutter" value="Y" /> <label for="nogutter">{$lang->hidden_linenumber}</label>
</td>
</tr>
<tr>
@ -41,12 +56,6 @@
<input type="checkbox" id="collapse" name="collapse" value="Y" />
</td>
</tr>
<tr>
<th scope="row">{$lang->hidden_linenumber}</th>
<td>
<input type="checkbox" id="nogutter" name="nogutter" value="Y" />
</td>
</tr>
<tr>
<th scope="row">{$lang->hidden_controls}</th>
<td>
@ -62,4 +71,4 @@
<a href="#" onclick="winopen('./?module=editor&amp;act=dispEditorComponentInfo&amp;component_name={$component_info->component_name}','ComponentInfo','left=10,top=10,width=10,height=10,resizable=no,scrollbars=no,toolbars=no');return false;" class="button"><span>{$lang->about_component}</span></a>
</div>
</form>
</form>

View file

@ -13,11 +13,18 @@ function getCode() {
selected_node = node;
var code_type = node.getAttribute('code_type');
var file_path = node.getAttribute('file_path');
var description = node.getAttribute('description');
var first_line = node.getAttribute('first_line');
var collapse = node.getAttribute('collapse');
var nogutter = node.getAttribute('nogutter');
var nocontrols = node.getAttribute('nocontrols');
xGetElementById('code_type').value = code_type;
xGetElementById('file_path').value = file_path;
xGetElementById('description').value = description;
if(!first_line) xGetElementById('first_line').value = '1';
else xGetElementById('first_line').value = first_line;
if(collapse == 'Y') xGetElementById('collapse').checked = true;
if(nogutter == 'Y') xGetElementById('nogutter').checked = true;
if(nocontrols == 'Y') xGetElementById('nocontrols').checked = true;
@ -28,6 +35,9 @@ function insertCode() {
if(typeof(opener)=='undefined') return;
var code_type = xGetElementById('code_type').value;
var file_path = xGetElementById('file_path').value;
var description = xGetElementById('description').value;
var first_line = xGetElementById('first_line').value;
var collapse = xGetElementById('collapse').checked;
var nogutter = xGetElementById("nogutter").checked;
var nocontrols = xGetElementById("nocontrols").checked;
@ -40,25 +50,16 @@ function insertCode() {
if(!content) content = "&nbsp;";
var text = "\n<div editor_component=\"code_highlighter\" code_type=\""+code_type+"\" style=\""+style+"\">"+content+"</div>\n<br />";
var text = "\n"+'<div editor_component="code_highlighter" code_type="'+code_type+'" file_path="'+file_path+'" description="'+description+'" first_line="'+first_line+'" collapse="'+collapse+'" nogutter="'+nogutter+'" nocontrols="'+nocontrols+'" style="'+style+'">'+content+'</div>'+"\n<br />";
if(selected_node) {
selected_node.setAttribute('code_type', code_type);
if(collapse == true) {
selected_node.setAttribute('collapse', 'Y');
} else {
selected_node.setAttribute('collapse', 'N');
}
if(nogutter == true) {
selected_node.setAttribute('nogutter', 'Y');
} else {
selected_node.setAttribute('nogutter', 'N');
}
if(nocontrols == true && collapse == false) {
selected_node.setAttribute('nocontrols', 'Y');
} else {
selected_node.setAttribute('nocontrols', 'N');
}
selected_node.setAttribute('file_path', file_path);
selected_node.setAttribute('description', description);
selected_node.setAttribute('first_line', first_line);
selected_node.setAttribute("collapse", collapse);
selected_node.setAttribute('nogutter', nogutter);
selected_node.setAttribute('nocontrols', nocontrols);
selected_node.setAttribute('style', style);
opener.editorFocus(opener.editorPrevSrl);

View file

@ -1,40 +1,40 @@
@charset "utf-8";
.xeEditor { }
.xeEditor .optionABC { clear:both; width:100%; border-bottom:1px solid #c2c2c2; overflow:hidden; background:#ffffff url(../images/bgBoardEditorOption.gif) no-repeat -3px bottom;}
.xeEditor .optionABC { clear:both; width:100%; overflow:hidden; background:transparent;}
.xeEditor .optionABC .selectGroup { white-space:nowrap; display:block; height:21px; margin:0 .5em 0 0; padding-left:1em; float:left;}
.xeEditor .optionABC .buttonGroup { white-space:nowrap; position:relative; display:block; margin:0 .5em 0 0; float:left; height:21px; overflow:hidden; padding-left:2px;}
.xeEditor .optionABC .buttonGroup img { float:left; display:block; margin-left:-1px; cursor:pointer;}
.xeEditor .optionA,
.xeEditor .optionB,
.xeEditor .optionC { float:left; background:#ffffff url(../images/bgBoardEditorOption.gif) no-repeat left bottom; padding:.5em 0 .5em .7em; overflow:hidden;}
.xeEditor .optionC { float:left; background:transparent; padding:.5em 0 .5em .7em; overflow:hidden;}
.xeEditor .optionA *,
.xeEditor .optionB *,
.xeEditor .optionC * { vertical-align:middle;}
.xeEditor .optionA { background-position:-3px bottom; padding-left:0;}
.xeEditor .optionA select option { font-size:.9em; }
.xeEditor .optionDE { width:100%; clear:both; overflow:hidden; background:#f8f8f8; border-bottom:1px solid #e1e1e1; height:29px;}
.xeEditor .optionDE { width:100%; clear:both; overflow:hidden; background:transparent;height:29px;}
.xeEditor .optionDE .buttonGroup { white-space:nowrap; position:relative; display:block; float:left; height:21px; overflow:hidden; padding-left:2px;}
.xeEditor .optionDE img { float:left; display:block; margin-right:.5em; cursor:pointer;}
.xeEditor .optionD { padding:.5em 0 .5em .8em; overflow:hidden; float:left; border-right:1px solid #e0e0e0;}
.xeEditor .optionE { padding:4px 0 0 8px; overflow:hidden; border-left:1px solid #ffffff; float:left;}
.xeEditor .optionE { padding:4px 0 0 9px; overflow:hidden; float:left;}
.xeEditor .editorInfo { background:#fbfbfb; padding:.5em; border:1px solid #e1e1dd; color:#999999; position:relative; margin:5px 20px 0 20px;}
.xeEditor .editorInfo { background:transparent; padding:.5em; border:1px solid #e1e1dd; color:#999999; position:relative; margin:5px 20px 0 20px;}
.xeEditor .close { cursor:pointer; position:absolute; top:3px; right:3px; _top:3px; _right:25px;}
.xeEditor .editor_iframe_box { background:#ffffff; clear:both; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:5px; margin:10px 20px 10px 20px; }
.xeEditor .editor_iframe_box { clear:both; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; margin:3px 10px 5px 10px; }
.xeEditor .editor_iframe_textarea { background:#ffffff; clear:both; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:.5em; margin:0 20px 0 20px; width:100%; font-size:1em; display:none;}
.xeEditor .textAreaDragIndicator { text-align:center; background:url(../images/lineTextAreaDrag.gif) repeat-x left center; padding:5px 0 5px 0; }
.xeEditor .textAreaDragIndicatorBar { background:url(../images/buttonTextAreaDrag.gif) no-repeat center; cursor:move;height:14px;}
.xeEditor .editor_info { clear:both; padding:10px 20px 5px 20px; overflow:hidden;}
.xeEditor .editor_info { clear:both; padding:5px 20px 0 10px; overflow:hidden;}
.xeEditor .editor_info .editor_option { float:left; color:#888888; }
.xeEditor .editor_info .editor_autosaved_message { color:#888888; float:right; }
.xeEditor .inputTypeTextArea { background:#fbfbfb; padding:1em; width:94%;}
.xeEditor #textAreaDrag {}
.xeEditor .fileAttach { padding:0 1em .5em 1em;}
.xeEditor .fileAttach .preview { padding:5px; width:110px; height:110px; border:1px solid #e1e1dd; background:#fbfbfb; float:left; margin-right:.5em;}
.xeEditor .fileAttach .preview { padding:5px; width:110px; height:110px; border:1px solid #e1e1dd; background:transparent; float:left; margin-right:.5em;}
.xeEditor .fileAttach .preview img { width:110px; height:110px; float:left; display:block;}
.xeEditor .fileAttach .fileListArea { float:left; width:50%; margin-right:.7em; padding-bottom:.5em; margin-bottom:1em}
.xeEditor .fileAttach .fileListArea .fileList { overflow:auto; width:100%; height:auto; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; margin-bottom:.3em; font-size:11px;}

View file

@ -144,7 +144,7 @@
<!--@end-->
<!-- 에디터 출력 -->
<div class="editor_iframe_box"><iframe id="editor_iframe_{$editor_sequence}" frameborder="0" height="{$editor_height}" style="background-color:transparent;"></iframe></div>
<div class="editor_iframe_box"><iframe id="editor_iframe_{$editor_sequence}" frameborder="0" height="{$editor_height}" style="background-color:transparent;" allowTransparency="true"></iframe></div>
<textarea id="editor_textarea_{$editor_sequence}" class="editor_iframe_textarea" style="display:none; height:{$editor_height}" rows="10" cols="10"></textarea>
<!-- 에디터 크기 조절 bar -->

View file

@ -3,13 +3,60 @@
<h3>{$lang->editor} <span class="gray">{$lang->cmd_management}</span></h3>
<table cellspacing="0" class="adminTable gap1">
<!--@if($lang_type == 'ko')-->
<col />
<col width="40"/>
<col width="120"/>
<col width="70"/>
<col width="50"/>
<col width="50"/>
<col width="50"/>
<col width="60" />
<col width="130" />
<col width="75" />
<col width="50" />
<col width="60" />
<col width="50" />
<!--@else if($lang_type == 'en')-->
<col />
<col width="60" />
<col width="130" />
<col width="75" />
<col width="75" />
<col width="60" />
<col width="50" />
<!--@else if($lang_type == 'zh-CN')-->
<col />
<col width="60" />
<col width="130" />
<col width="75" />
<col width="45" />
<col width="55" />
<col width="50" />
<!--@else if($lang_type == 'jp')-->
<col />
<col width="80" />
<col width="130" />
<col width="80" />
<col width="50" />
<col width="60" />
<col width="50" />
<!--@else if($lang_type == 'es')-->
<col />
<col width="60" />
<col width="130" />
<col width="75" />
<col width="100" />
<col width="85" />
<col width="50" />
<!--@else if($lang_type == 'ru')-->
<col />
<col width="60" />
<col width="130" />
<col width="80" />
<col width="100" />
<col width="100" />
<col width="95" />
<!--@end-->
<thead>
<tr>
<th scope="col">{$lang->component_name}</th>

View file

@ -122,7 +122,7 @@ function editorStart(editor_sequence, primary_key, content_key, editor_height) {
'<link rel="stylesheet" href="'+request_uri+'common/css/default.css" type="text/css" />'+
'<link rel="stylesheet" href="'+request_uri+editor_path+'css/editor.css" type="text/css" />'+
'<style style="text/css">'+
'body {font-size:9pt;margin:0px; height:'+editor_height+'px;}'+
'body {font-size:9pt;margin:0px; height:'+editor_height+'px; background-color:transparent;}'+
'blockquote, ol, ul { margin-left:40px; }'+
'</style>'+
'</head><body editor_sequence="'+editor_sequence+'">'+

View file

@ -14,7 +14,12 @@ xAddEventListener(document, 'mousedown', editorDragStart);
xAddEventListener(document, 'mouseup', editorDragStop);
function editorGetContent(editor_sequence) {
return editorRelKeys[editor_sequence]["func"](editor_sequence);
// 입력된 내용을 받아옴
var content = editorRelKeys[editor_sequence]["func"](editor_sequence);
// 첨부파일 링크시 url을 변경
var reg_pattern = new RegExp( request_uri.replace(/\//g,'\\/')+"(files|common|modules|layouts|widgets)", 'ig' );
return content.replace(reg_pattern, "$1");
}
// 에디터에 포커스를 줌

View file

@ -54,12 +54,63 @@
}
}
// 목록의 loop를 돌면서 document를 구하기
$file_count = count($output->data);
if($file_count) {
$document_srl_list = array();
foreach($output->data as $val) {
$comment_srl = $val->upload_target_srl;
if(!in_array($comment_srl, $document_srl_list)) $document_srl_list[] = $comment_srl;
}
// comment를 먼저 구해서 document_srl을 구함
if(count($document_srl_list)) {
$args->comment_srls = implode(',', $document_srl_list);
$comment_output = executeQuery('comment.getComments', $args);
if($comment_output->data && !is_array($comment_output->data)) {
$comment_output->data = array($comment_output->data);
}
if($comment_output->data) {
for($i = 0; $i < count($comment_output->data); $i++) {
$comment_info = $comment_output->data[$i];
$comment_list[$comment_info->comment_srl] = $comment_info;
}
foreach($output->data as $val) {
$val->target_document_srl = $comment_list[$val->upload_target_srl]->document_srl;
}
foreach($comment_output->data as $val) {
$document_srl = $val->document_srl;
if(!in_array($document_srl, $document_srl_list)) $document_srl_list[] = $document_srl;
}
}
}
// document를 구함
if(count($document_srl_list)) {
$args->document_srls = implode(',', $document_srl_list);
$document_output = executeQuery('document.getDocuments', $args);
if($document_output->data && !is_array($document_output->data)) {
$document_output->data = array($document_output->data);
}
for($i = 0; $i < count($document_output->data); $i++) {
$document_info = $document_output->data[$i];
$document_list[$document_info->document_srl] = $document_info;
}
}
}
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('file_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
Context::set('module_list', $module_list);
Context::set('document_list', $document_list);
// 템플릿 지정
$this->setTemplatePath($this->module_path.'tpl');

View file

@ -90,17 +90,89 @@
$fp = fopen($uploaded_filename, 'rb');
if(!$fp) return $this->stop('msg_not_permitted_download');
// Support for broken downloads resuming via parsing 'Range' header value. Made by X-[Vr]bL1s5.
// This addition will ONLY work if PHP is run as Apache module and PHP >= 4.3.0
if (function_exists('apache_request_headers')) { // check if we run as Apache module.
$fr_buffer_size = 8192;
$fr_headers = apache_request_headers();
if (isset($fr_headers['Range'])) {
$fr_range_header = trim($fr_headers['Range']);
$fr_range_header = str_replace('bytes=', '', $fr_range_header);
$fr_range = explode ('-', $fr_range_header);
if (isset($fr_range[0]) && ($fr_range[0] != NULL)) {
if (!is_numeric($fr_range[0])) return $this->stop('msg_not_permitted_download'); // invalid header values
$fr_range_begin = $fr_range[0];
if ((int) ($fr_range_begin) < 0) $fr_range_begin = 0;
} else {
$fr_range_begin = 0;
}
if (isset($fr_range[1]) && ($fr_range[1] != NULL)) {
if (!is_numeric($fr_range[1])) return $this->stop('msg_not_permitted_download'); // invalid header values
$fr_range_end = $fr_range[1];
if ((int) ($fr_range_end) > ($file_obj->file_size - 1)) $fr_range_end = $file_obj->file_size - 1;
} else {
$fr_range_end = $file_obj->file_size - 1;
}
$fr_content_length = $fr_range_end - $fr_range_begin + 1;
header("HTTP/1.1 206 Partial Content"); // oh... maybe HTTP proto version will change... ^^;
header("Cache-Control: no-cache");
header("Pragma: no-cache");
header("Accept-Ranges: bytes");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Length: $fr_content_length");
header("Content-Range: bytes $fr_range_begin-$fr_range_end/" .(string)($file_obj->file_size));
header("Content-Transfer-Encoding: binary");
$fr_bytes_read = 0;
header("Cache-Control: ");
header("Pragma: ");
header("Content-Type: application/octet-stream");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
if (fseek($fp, $fr_range_begin) != 0) return $this->stop('msg_not_permitted_download'); // unable to seek file.
header("Content-Length: " .(string)($file_obj->file_size));
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary\n");
while (!feof($fp)) {
$fr_buffer = fread($fp, $fr_buffer_size);
$fr_bytes_read += strlen($fr_buffer);
if ($fr_content_length > $fr_bytes_read) {
echo $fr_buffer;
} else {
$fr_buffer = substr($fr_buffer, 0, strlen($fr_buffer) - ($fr_bytes_read - $fr_content_length));
echo $fr_buffer;
break;
}
}
} else {
header("HTTP/1.1 200 OK"); // oh... maybe HTTP proto version will change... ^^;
header("Cache-Control: no-cache");
header("Pragma: no-cache");
header("Accept-Ranges: bytes"); // we should claim that we accept ranges!
header("Content-Type: application/octet-stream");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
fpassthru($fp);
header("Content-Length: " .(string)($file_obj->file_size));
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");
fpassthru($fp);
}
} else { // end of the support...
header("Cache-Control: no-cache");
header("Pragma: no-cache");
header("Content-Type: application/octet-stream");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Content-Length: " .(string)($file_obj->file_size));
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");
fpassthru($fp);
}
// 이상이 없으면 download_count 증가
$args->file_srl = $file_srl;
@ -109,6 +181,8 @@
// trigger 호출 (after)
$output = ModuleHandler::triggerCall('file.downloadFile', 'after', $file_obj);
Context::close();
exit();
}
@ -308,6 +382,8 @@
$output->add('file_srl', $args->file_srl);
$output->add('file_size', $args->file_size);
$output->add('sid', $args->sid);
$output->add('direct_download', $args->direct_download);
$output->add('source_filename', $args->source_filename);
$output->add('upload_target_srl', $upload_target_srl);
return $output;

View file

@ -12,14 +12,14 @@
$lang->status = 'Status';
$lang->is_valid = 'Valid';
$lang->is_stand_by = 'Stand by';
$lang->file_list = 'Attachments list';
$lang->allowed_filesize = 'File size limit';
$lang->allowed_attach_size = 'Total size limit';
$lang->allowed_filetypes = 'Allowed extensions';
$lang->file_list = 'Attachments List';
$lang->allowed_filesize = 'Max Filesize';
$lang->allowed_attach_size = 'Max Attachments';
$lang->allowed_filetypes = 'Allowed Extensions';
$lang->enable_download_group = 'Download allowed groups';
$lang->about_allowed_filesize = 'You can assign file size limit for each file. (Excluding administrators)';
$lang->about_allowed_attach_size = 'You can assign file size limit for each document. (Excluding administrators)';
$lang->about_allowed_filesize = 'You can assign file size limit for each file. (Exclude administrators)';
$lang->about_allowed_attach_size = 'You can assign file size limit for each document. (Exclude administrators)';
$lang->about_allowed_filetypes = 'Only allowed extentsions can be attached. To allow an extension, use "*.extention". To allow multiple extensions, use ";" between each extension.<br />ex) *.* or *.jpg;*.gif;<br />(Exclude Administrators)';
$lang->cmd_delete_checked_file = 'Delete Selected';
@ -29,13 +29,13 @@
$lang->msg_not_permitted_download = 'You do not have any permission to download';
$lang->msg_cart_is_null = 'Please select file(s) to delete';
$lang->msg_checked_file_is_deleted = 'Total of %d attachment(s) was(were) deleted';
$lang->msg_exceeds_limit_size = 'Attachedment failed due to the excess of file size';
$lang->msg_exceeds_limit_size = 'Attachment failed due to the excess of file size';
$lang->search_target_list = array(
'filename' => 'File name',
'filesize' => 'File size (byte, Over)',
'download_count' => 'Downloads (Over)',
'regdate' => 'Date',
'regdate' => 'Registered Date',
'ipaddress' => 'IP Address',
);
?>

View file

@ -0,0 +1,5 @@
@charset "utf-8";
.adminTable tr.bg1 td {
background-color: #FAFAFA;
}

View file

@ -1,5 +1,6 @@
<!--%import("filter/delete_checked.xml")-->
<!--%import("js/file_admin.js")-->
<!--%import("css/file_list.css")-->
<!--#include("header.html")-->
<div class="tableSummaryType1">
@ -11,15 +12,72 @@
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
<col width="50" />
<col width="30" />
<col width="40" />
<col />
<col width="70" />
<col width="45" />
<col width="65" />
<col width="65" />
<col width="90" />
<col width="45" />
<!--@else if($lang_type == 'en')-->
<col width="50" />
<col width="40" />
<col width="100" />
<col width="70" />
<col />
<col width="70" />
<col width="70" />
<col width="75" />
<col width="75" />
<col width="90" />
<col width="50" />
<!--@else if($lang_type == 'zh-CN')-->
<col width="50" />
<col width="40" />
<col />
<col width="65" />
<col width="45" />
<col width="45" />
<col width="65" />
<col width="90" />
<col width="45" />
<!--@else if($lang_type == 'jp')-->
<col width="50" />
<col width="40" />
<col />
<col width="65" />
<col width="45" />
<col width="65" />
<col width="65" />
<col width="90" />
<col width="45" />
<!--@else if($lang_type == 'es')-->
<col width="50" />
<col width="40" />
<col />
<col width="75" />
<col width="75" />
<col width="80" />
<col width="75" />
<col width="90" />
<col width="50" />
<!--@else if($lang_type == 'ru')-->
<col width="50" />
<col width="40" />
<col />
<col width="65" />
<col width="80" />
<col width="65" />
<col width="65" />
<col width="90" />
<col width="95" />
<!--@end-->
<thead>
<tr>
<th scope="col">{$lang->no}</th>
@ -45,11 +103,29 @@
</thead>
<tbody>
<!--@foreach($file_list as $no => $val)-->
<!--@if($val->upload_target_srl != $cur_upload_target_srl)-->
<!--@if($val->target_document_srl)-->
{@ $document_srl = $val->target_document_srl}
{@ $move_uri = './?mid='.$module_list[$val->module_srl]->mid.'&document_srl='.$document_srl.'#comment_'.$val->upload_target_srl}
<!--@else-->
{@ $document_srl = $val->upload_target_srl}
{@ $move_uri = './?mid='.$module_list[$val->module_srl]->mid.'&document_srl='.$val->upload_target_srl}
<!--@end-->
{@ $cur_upload_target_srl = $val->upload_target_srl}
<tr class="bg1">
<td colspan="9">
<!--@if(!$document_list[$document_srl])-->
{$lang->cmd_save}
<!--@else-->
<a href="./?mid={$module_list[$val->module_srl]->mid}" onclick="window.open(this.href);return false;" class="blue">{$module_list[$val->module_srl]->browser_title}</a> - <a href="{$move_uri}" onclick="window.open(this.href);return false;">{htmlspecialchars($document_list[$document_srl]->title)}</a>
<!--@end-->
</td>
</tr>
<!--@end-->
<tr>
<td class="tahoma">{$no}</td>
<td><input type="checkbox" name="cart" value="{$val->file_srl}" /></td>
<td class="left subject">
<a href="./?mid={$module_list[$val->module_srl]->mid}" onclick="window.open(this.href);return false;" class="blue">{$module_list[$val->module_srl]->browser_title}</a><br />
<a href="{$val->download_url}" class="red">{htmlspecialchars($val->source_filename)}</a>
</td>
<td class="tahoma">{$val->file_size}</td>
@ -63,7 +139,10 @@
<td class="tahoma">{$val->download_count}</td>
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
<td class="tahoma">{$val->ipaddress}</td>
<td class="blue"><a href="./?document_srl={$val->upload_target_srl}" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
<td class="blue">
<!--@if($document_list[$document_srl])-->
<a href="{$move_uri}" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
<!--@end-->
</tr>
<!--@end-->
</tbody>
@ -80,12 +159,12 @@
<!-- 페이지 네비게이션 -->
<div class="pageNavigation">
<a href="{getUrl('page','','module_srl','')}" class="goToFirst"><img src="../../admin/tpl/images/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<a href="{getUrl('page','','module_srl','')}" class="goToFirst"><img src="../../admin/tpl/images/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<span class="current">{$page_no}</span>
<span class="current">{$page_no}</span>
<!--@else-->
<a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a>
<a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="goToLast"><img src="../../admin/tpl/images/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>

View file

@ -7,32 +7,32 @@
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<table cellspacing="0" class="adminTable">
<col width="130" />
<col width="*" />
<col width="80" />
<col width="80" />
<caption>{$lang->target}</caption>
<tbody>
<!--@foreach($grant_list as $key => $val)-->
<tr>
<th scope="row">{$val->title}</th>
<td class="left">
<!--@foreach($group_list as $k => $v)-->
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
<!--@end-->
</td>
<td><a href="#" onclick="doSelectAll(this, '{$key}')" class="blue">{$lang->cmd_select_all}</a></td>
<td><a href="#" onclick="doUnSelectAll(this, '{$key}')" class="red">{$lang->cmd_unselect_all}</a></td>
</tr>
<!--@end-->
<tr>
<th scope="row" colspan="4" class="button">
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
</th>
</tr>
</tbody>
</table>
<table cellspacing="0" class="adminTable">
<col width="150" />
<col width="" />
<col width="120" />
<col width="120" />
<caption>{$lang->target}</caption>
<tbody>
<!--@foreach($grant_list as $key => $val)-->
<tr>
<th scope="row">{$val->title}</th>
<td class="left">
<!--@foreach($group_list as $k => $v)-->
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
<!--@end-->
</td>
<td><a href="#" onclick="doSelectAll(this, '{$key}'); return false;" class="blue">{$lang->cmd_select_all}</a></td>
<td><a href="#" onclick="doUnSelectAll(this, '{$key}'); return false;" class="red">{$lang->cmd_unselect_all}</a></td>
</tr>
<!--@end-->
<tr>
<th scope="row" colspan="4" class="button">
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
</th>
</tr>
</tbody>
</table>
</form>

View file

@ -18,7 +18,7 @@
<tr>
<th scope="row">{$lang->mid}</th>
<td>
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText" />
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText w200" />
<p>{$lang->about_mid}</p>
</td>
</tr>
@ -47,7 +47,7 @@
<tr>
<th scope="row">{$lang->browser_title}</th>
<td>
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText" />
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText w400" />
<p>{$lang->about_browser_title}</p>
</td>
</tr>

View file

@ -7,13 +7,60 @@
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
<col width="50" />
<col width="130" />
<col />
<col width="65" />
<col width="45" />
<col width="45" />
<col width="45" />
<!--@else if($lang_type == 'en')-->
<col width="50" />
<col width="130" />
<col />
<col width="80" />
<col width="45" />
<col width="50" />
<col width="55" />
<!--@else if($lang_type == 'zh-CN')-->
<col width="50" />
<col width="130" />
<col />
<col width="65" />
<col width="45" />
<col width="45" />
<col width="45" />
<!--@else if($lang_type == 'jp')-->
<col width="50" />
<col width="130" />
<col />
<col width="80" />
<col width="50" />
<col width="60" />
<col width="70" />
<!--@else if($lang_type == 'es')-->
<col width="50" />
<col width="130" />
<col />
<col width="80" />
<col width="40" />
<col width="55" />
<col width="70" />
<!--@else if($lang_type == 'ru')-->
<col width="50" />
<col width="130" />
<col />
<col width="90" />
<col width="95" />
<col width="85" />
<col width="70" />
<!--@end-->
<thead>
<tr>
<th scope="col">{$lang->no}</th>
@ -55,7 +102,7 @@
<a href="{getUrl('act','dispGuestbookAdminGuestbookInfo','module_srl',$val->module_srl)}" class="blue">{htmlspecialchars($val->browser_title)}</a>
</td>
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
<td class="blue"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
<td class="green"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
<td class="blue"><a href="./?module=module&amp;act=dispModuleAdminCopyModule&amp;module_srl={$val->module_srl}" onclick="popopen(this.href);return false;">{$lang->cmd_copy}</a></td>
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispGuestbookAdminDeleteGuestbook','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@end--></td>
</tr>

View file

@ -58,10 +58,10 @@
<th scope="row">{$val->title}</th>
<td class="left">
<!--@if($val->type=="text")-->
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w100" />
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w400" />
<!--@elseif($val->type=="textarea")-->
<textarea name="{$val->name}" class="inputTypeTextArea w100">{htmlspecialchars($val->value)}</textarea>
<textarea name="{$val->name}" class="inputTypeTextArea w400">{htmlspecialchars($val->value)}</textarea>
<!--@elseif($val->type=="select")-->
<select name="{$val->name}">

View file

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="accessory">
<module version="0.2" category="accessory">
<title xml:lang="ko">제로보드 데이터 이전</title>
<title xml:lang="en">Zeroboard data transferation</title>
<title xml:lang="zh-CN">数据导入</title>
<title xml:lang="jp">ZBデータ移転</title>
<title xml:lang="es">Transferencia de los datos de ZeroBoard</title>
<title xml:lang="ru">Трансферинг данных Zeroboard</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 12. 13">
<name xml:lang="ko">제로</name>
<name xml:lang="en">Zero</name>
<name xml:lang="zh-CN">zero</name>

View file

@ -3,9 +3,10 @@
<actions>
<action name="dispImporterAdminContent" type="view" standalone="true" admin_index="true" />
<action name="procImporterAdminStep1" type="controller" standalone="true" />
<action name="procImporterAdminStep12" type="controller" standalone="true" />
<action name="procImporterAdminImport" type="controller" standalone="true" />
<action name="procImporterAdminSync" type="controller" standalone="true" />
<action name="procImporterAdminMemberImport" type="controller" standalone="true" />
<action name="procImporterAdminMessageImport" type="controller" standalone="true" />
<action name="procImporterAdminModuleImport" type="controller" standalone="true" />
<action name="procImporterAdminTTXMLImport" type="controller" standalone="true" />
</actions>
</module>

File diff suppressed because it is too large Load diff

View file

@ -20,7 +20,37 @@
**/
function dispImporterAdminContent() {
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('index');
$source_type = Context::get('source_type');
switch($source_type) {
case 'member' :
$template_filename = "member";
break;
case 'ttxml' :
$oModuleModel = &getModel('module');
$mid_list = $oModuleModel->getMidList();
Context::set('mid_list', $mid_list);
$template_filename = "ttxml";
break;
case 'module' :
$oModuleModel = &getModel('module');
$mid_list = $oModuleModel->getMidList();
Context::set('mid_list', $mid_list);
$template_filename = "module";
break;
case 'message' :
$template_filename = "message";
break;
case 'sync' :
$template_filename = "sync";
break;
default :
$template_filename = "index";
break;
}
$this->setTemplateFile($template_filename);
}
}

View file

@ -10,13 +10,15 @@
$lang->cmd_continue = 'Continue';
// items
$lang->importer = 'Transfer zeroboard datas';
$lang->source_type = 'Previous target';
$lang->type_member = 'Member data';
$lang->type_module = 'Articles data';
$lang->type_syncmember = 'Synchronize member data';
$lang->target_module = 'Target module';
$lang->xml_file = 'XML file';
$lang->importer = 'Transfer Zeroboard Data';
$lang->source_type = 'Previous Target';
$lang->type_member = 'Member Data';
$lang->type_message = 'Message Data';
$lang->type_ttxml = 'TTXML';
$lang->type_module = 'Articles Data';
$lang->type_syncmember = 'Synchronize Member Data';
$lang->target_module = 'Target Module';
$lang->xml_file = 'XML File';
$lang->import_step_title = array(
1 => 'Step 1. Select previous target',
@ -39,11 +41,14 @@
$lang->msg_no_xml_file = 'Could not find XML file. Please check the path again';
$lang->msg_invalid_xml_file = 'Invalid type of XML file.';
$lang->msg_importing = 'Writing %d datas of %d. (If it keeps being frozen, click the button "Continue")';
$lang->msg_import_finished = '%d datas were inputted completely. Depending on the situation, there might be some datas which couldn\'t be inputted.';
$lang->msg_import_finished = '%d/%d datas were inputted completely. Depending on the situation, there might be some datas which couldn\'t be inputted.';
$lang->msg_sync_completed = 'Completed synchronzing member article and comments.';
// blah blah..
$lang->about_type_member = 'If you are transfering the member information, select this option';
$lang->about_type_message = 'If you are transfering the message information, select this option';
$lang->about_type_ttxml = 'If you are transfering the TTXML(textcube) information, select this option';
$lang->about_ttxml_user_id = 'Please input user ID to set as author on transfering TTXML. (user ID must be already signed up)';
$lang->about_type_module = 'If you are transfering the board or articles information, select this option';
$lang->about_type_syncmember = 'If you are trying to synchronize the member information after transfering member and article information, select this option';
$lang->about_importer = "You can transfer Zeroboard4, Zeroboard5 Beta or other program's data into ZeroboardXE's data.\nIn order to tranfer, you have to use <a href=\"#\" onclick=\"winopen('');return false;\">XML Exporter</a> to convert the data you want into XML File then upload it.";

View file

@ -13,6 +13,8 @@
$lang->importer = 'Transferir los datos de zeroboard';
$lang->source_type = 'Objetivo a transferir';
$lang->type_member = 'Información del usuario';
$lang->type_message = '쪽지(메세지) 정보';
$lang->type_ttxml = 'TTXML';
$lang->type_module = 'Información del documento.';
$lang->type_syncmember = 'Sincronizar la información del usuario';
$lang->target_module = 'Objetivo del módulo';
@ -39,11 +41,14 @@
$lang->msg_no_xml_file = 'No se puede encontrar el archivo XML. Verifique su ruta.';
$lang->msg_invalid_xml_file = 'Tipo de archivo XML inválido.';
$lang->msg_importing = 'Ingresando %d dotos de %d. (Si esto mantiene paralizado presione el botón "Continuar".)';
$lang->msg_import_finished = '%d datos fueron completamente ingresados. Dependiendo del caso, pueden haber algunos datos no ingresados.';
$lang->msg_import_finished = '%d/%d datos fueron completamente ingresados. Dependiendo del caso, pueden haber algunos datos no ingresados.';
$lang->msg_sync_completed = 'Sincronización del usuario, artículo y respuestas finalizadas.';
// bla bla...
$lang->about_type_member = 'Seleccione esta opción si estas transferiendo la información del usuario.';
$lang->about_type_message = '데이터 이전 대상이 쪽지(메세지)일 경우 선택해주세요';
$lang->about_type_ttxml = '데이터 이전 대상이 TTXML(textcube계열)일 경우 선택해주세요';
$lang->about_ttxml_user_id = 'TTXML이전시에 글쓴이로 지정할 사용자 아이디를 입력해주세요. (이미 가입된 아이디여야 합니다)';
$lang->about_type_module = 'Seleccione esta opción si estas transfeririendo información del documento de los tableros';
$lang->about_type_syncmember = 'Seleccione esta opción cuando tenga que sincronizar la información del usuario luego de haber transferido la información del usuario y del artículo.';
$lang->about_importer = "Es posible trasferir los datos de Zeroboard4, zb5beta o de otros programas a ZeroBoardXE.\nPara la transferencia debe utilizar <a href=\"#\" onclick=\"winopen('');return false;\">Exportador XML</a> para transformar los datos en archivo XML, y luego subir ese archivo.";

View file

@ -13,6 +13,8 @@
$lang->importer = 'ZBデータ変換';
$lang->source_type = 'データ変換の対象';
$lang->type_member = '会員情報';
$lang->type_message = '쪽지(메세지) 정보';
$lang->type_ttxml = 'TTXML';
$lang->type_module = '書き込みデータ情報';
$lang->type_syncmember = '会員情報同期化';
$lang->target_module = '対象モジュール';
@ -39,11 +41,14 @@
$lang->msg_no_xml_file = 'XMLファイルが見つかりません。パスをもう一度確認してください。';
$lang->msg_invalid_xml_file = 'XMLファイルのフォーマットが正しくありません。';
$lang->msg_importing = '%d個のデータの内、%d個を変換中です止まったままの場合は「続ける」ボタンをクリックしてください。';
$lang->msg_import_finished = '%d個のデータ変換が完了しました。場合によって変換されていないデータがあることもあります。';
$lang->msg_import_finished = '%d/%d個のデータ変換が完了しました。場合によって変換されていないデータがあることもあります。';
$lang->msg_sync_completed = '会員情報、書き込みデータ、コメントのデータの同期化(変換)が完了しました。';
// Bla, Blah..
$lang->about_type_member = 'データ変換の対象が会員情報の場合は選択してください。';
$lang->about_type_message = '데이터 이전 대상이 쪽지(메세지)일 경우 선택해주세요';
$lang->about_type_ttxml = '데이터 이전 대상이 TTXML(textcube계열)일 경우 선택해주세요';
$lang->about_ttxml_user_id = 'TTXML이전시에 글쓴이로 지정할 사용자 아이디를 입력해주세요. (이미 가입된 아이디여야 합니다)';
$lang->about_type_module = 'データ変換の対象が書き込みデータである場合は選択してください。';
$lang->about_type_syncmember = '会員情報と書き込みデータなどの変換を行った後、会員情報を同期化する必要がある場合は、選択してください。';
$lang->about_importer = "ゼロボード4、zb5betaまたは他のプログラムの書き込みデータをゼロボードXEのデータに変換することができます。\n変換するためには、<a href=\"#\" onclick=\"winopen('');return false;\">XML Exporter</a>を利用して変換したい書き込みデータをXMLファイルで作成してアップロードしてください。";

View file

@ -13,6 +13,8 @@
$lang->importer = '제로보드 데이터 이전';
$lang->source_type = '이전 대상';
$lang->type_member = '회원 정보';
$lang->type_message = '쪽지(메세지) 정보';
$lang->type_ttxml = 'TTXML';
$lang->type_module = '게시물 정보';
$lang->type_syncmember = '회원정보 동기화';
$lang->target_module = '대상 모듈';
@ -39,14 +41,16 @@
$lang->msg_no_xml_file = 'XML파일을 찾을 수 없습니다. 경로를 다시 확인해주세요';
$lang->msg_invalid_xml_file = '잘못된 형식의 XML파일입니다';
$lang->msg_importing = '%d개의 데이터중 %d개를 입력중입니다. (계속 멈추어 있으면 "계속진행" 버튼을 클릭해주세요)';
$lang->msg_import_finished = '%d개의 데이터 입력이 완료되었습니다. 상황에 따라 입력되지 못한 데이터가 있을 수 있습니다.';
$lang->msg_import_finished = '%d/%d 개의 데이터 입력이 완료되었습니다. 상황에 따라 입력되지 못한 데이터가 있을 수 있습니다.';
$lang->msg_sync_completed = '회원과 게시물, 댓글의 동기화가 완료되었습니다.';
// 주절 주절..
$lang->about_type_member = '데이터 이전 대상이 회원정보일 경우 선택해주세요';
$lang->about_type_message = '데이터 이전 대상이 쪽지(메세지)일 경우 선택해주세요';
$lang->about_type_ttxml = '데이터 이전 대상이 TTXML(textcube계열)일 경우 선택해주세요';
$lang->about_ttxml_user_id = 'TTXML이전시에 글쓴이로 지정할 사용자 아이디를 입력해주세요. (이미 가입된 아이디여야 합니다)';
$lang->about_type_module = '데이터 이전 대상이 게시판등의 게시물 정보일 경우 선택해주세요';
$lang->about_type_syncmember = '회원정보와 게시물정보등을 이전후 회원정보 동기화 해야 할때 선택해주세요';
$lang->about_importer = "제로보드4, zb5beta 또는 다른 프로그램의 데이터를 제로보드XE 데이터로 이전할 수 있습니다.\n이전을 위해서는 <a href=\"#\" onclick=\"winopen('');return false;\">XML Exporter</a>를 이용해서 원하는 데이터를 XML파일로 생성후 업로드해주셔야 합니다.";
$lang->about_target_path = "첨부파일을 받기 위해 제로보드4가 설치된 위치를 입력해주세요.\n같은 서버에 있을 경우 /home/아이디/public_html/bbs 등과 같이 제로보드4의 위치를 입력하시고\n다른 서버일 경우 http://도메인/bbs 처럼 제로보드가 설치된 곳의 url을 입력해주세요";
?>

View file

@ -13,6 +13,8 @@
$lang->importer = 'Импортировать данные zeroboard';
$lang->source_type = 'Предыдущее назначение';
$lang->type_member = 'Данные пользователей';
$lang->type_message = '쪽지(메세지) 정보';
$lang->type_ttxml = 'TTXML';
$lang->type_module = 'Данные статей';
$lang->type_syncmember = 'Синхронизировать данные пользователей';
$lang->target_module = 'Модуль назначения';
@ -39,11 +41,14 @@
$lang->msg_no_xml_file = 'XML файл не найден. Пожалуйста, проверьте путь еще раз';
$lang->msg_invalid_xml_file = 'Неверный тип XML файла.';
$lang->msg_importing = 'Пишем %d данные %d. (Если процесс "завис", нажмите кнопку "Продолжить")';
$lang->msg_import_finished = '%d данные были поностью импортированы. В зависимости от ситуации, некоторые данные могут не быть импортированы.';
$lang->msg_import_finished = '%d/%d данные были поностью импортированы. В зависимости от ситуации, некоторые данные могут не быть импортированы.';
$lang->msg_sync_completed = 'Выполнена синхронизация пользователей, статей и комментариев.';
// blah blah.. чепуха)
$lang->about_type_member = 'Если Вы импортируете информацию пользователей, выберите эту опцию';
$lang->about_type_message = '데이터 이전 대상이 쪽지(메세지)일 경우 선택해주세요';
$lang->about_type_ttxml = '데이터 이전 대상이 TTXML(textcube계열)일 경우 선택해주세요';
$lang->about_ttxml_user_id = 'TTXML이전시에 글쓴이로 지정할 사용자 아이디를 입력해주세요. (이미 가입된 아이디여야 합니다)';
$lang->about_type_module = 'Если Вы импортируете информацию форума или статей, выберите эту опцию';
$lang->about_type_syncmember = 'Если Вы пытаетесь синхронизировать информацию пользователей после импорта информации пользователей и статей, выберите эту опцию';
$lang->about_importer = "Вы можете импортировать данные Zeroboard4, Zeroboard5 Beta или других программ в ZeroboardXE.\nЧтобы импортировать, Вам следует использовать <a href=\"#\" onclick=\"winopen('');return false;\">XML Экспортер (XML Exporter)</a>, чтобы конвертировать нужные данные в XML Файл и затем загрузить его.";

View file

@ -13,6 +13,8 @@
$lang->importer = '数据导入';
$lang->source_type = '导入对象';
$lang->type_member = '会员信息';
$lang->type_message = '短信息(MemoBox)';
$lang->type_ttxml = 'TTXML';
$lang->type_module = '版面信息';
$lang->type_syncmember = '同步会员信息';
$lang->target_module = '模块对象';
@ -39,11 +41,14 @@
$lang->msg_no_xml_file = '找不到XML文件请重新确认路径。';
$lang->msg_invalid_xml_file = '错误形式的XML文件';
$lang->msg_importing = '%d个的数据中正在输入 %d个。 (长时间没有响应时请按“继续进行”按钮)';
$lang->msg_import_finished = '已完成输入%d个数据。根据情况的不同可能有没有被导入的数据。';
$lang->msg_import_finished = '已完成输入%d/%d个数据。根据情况的不同可能有没有被导入的数据。';
$lang->msg_sync_completed = '已完成会员和文章,评论的同步。';
// 说明
$lang->about_type_member = '数据导入对象为会员信息时请选择此项。';
$lang->about_type_message = '数据导入对象为短信息(MemoBox)时请选择此项。';
$lang->about_type_ttxml = '데이터 이전 대상이 TTXML(textcube계열)일 경우 선택해주세요';
$lang->about_ttxml_user_id = 'TTXML이전시에 글쓴이로 지정할 사용자 아이디를 입력해주세요. (이미 가입된 아이디여야 합니다)';
$lang->about_type_module = '数据导入对象为版面主题时请选择此项。';
$lang->about_type_syncmember = '导入会员信息和文章信息后需要同步会员信息时请选择此项。';
$lang->about_importer = "不仅可以导入Zeroboard 4Zb5beta的数据,也可以把其他程序数据导入到Zeroboard XE当中。\n导入数据时请利用 <a href=\"#\" onclick=\"winopen('');return false;\">XML Exporter</a>生成XML文件后再上传。";

View file

@ -1,14 +0,0 @@
<filter name="import_xml" module="importer" act="procImporterAdminImport">
<form>
<node target="xml_file" required="true" />
</form>
<parameter />
<response callback_func="completeImport">
<tag name="error" />
<tag name="message" />
<tag name="is_finished" />
<tag name="position" />
<tag name="file_point" />
<tag name="total_count" />
</response>
</filter>

View file

@ -1,13 +0,0 @@
<filter name="step12" module="importer" act="procImporterAdminStep12">
<form>
<node target="target_module" required="true" />
<node target="target_path" required="true" />
</form>
<parameter />
<response callback_func="completeStep12">
<tag name="error" />
<tag name="message" />
<tag name="next_step" />
<tag name="category_list" />
</response>
</filter>

View file

@ -1,8 +1,5 @@
<!--%import("js/importer_admin.js")-->
<!--%import("css/importer.js")-->
<!--%import("filter/step1.xml")-->
<!--%import("filter/step12.xml")-->
<!--%import("filter/import_xml.xml")-->
<!--%import("css/importer.css")-->
<h3>{$lang->importer} <span class="gray">{$lang->cmd_management}</span></h3>
@ -11,22 +8,32 @@
<!-- step 1. import하려는 XML파일의 성격 및 대상 모듈을 지정 -->
<div id="step1">
<form action="./" method="get" onsubmit="return procFilter(this, step1);">
<form action="./" method="get">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<table cellspacing="0" class="adminTable">
<col width="150" />
<col />
<caption>{$lang->import_step_title[1]} - {$lang->import_step_desc[1]}</caption>
<tr>
<th scope="col"><label for="source_type_module">{$lang->type_module}</label></th>
<td class="left"><input type="radio" name="source_type" value="module" id="source_type_module" /> {$lang->about_type_module}</td>
<td class="left"><input type="radio" name="source_type" value="module" id="source_type_module" /> <label for="source_type_module">{$lang->about_type_module}</label></td>
</tr>
<tr>
<th scope="col"><label for="source_type_member">{$lang->type_member}</label></th>
<td class="left"><input type="radio" name="source_type" value="member" id="source_type_member" /> {$lang->about_type_member}</td>
<td class="left"><input type="radio" name="source_type" value="member" id="source_type_member" /> <label for="source_type_member">{$lang->about_type_member}</label></td>
</tr>
<tr>
<th scope="col"><label for="source_type_message">{$lang->type_message}</label></th>
<td class="left"><input type="radio" name="source_type" value="message" id="source_type_message" /> <label for="source_type_message">{$lang->about_type_message}</label></td>
</tr>
<tr>
<th scope="col"><label for="source_type_ttxml">{$lang->type_ttxml}</label></th>
<td class="left"><input type="radio" name="source_type" value="ttxml" id="source_type_ttxml" /> <label for="source_type_ttxml">{$lang->about_type_ttxml}</label></td>
</tr>
<tr>
<th scope="col"><label for="source_type_syncmember">{$lang->type_syncmember}</label></th>
<td class="left"><input type="radio" name="source_type" value="syncmember" id="source_type_syncmember" /> {$lang->about_type_syncmember}</td>
<td class="left"><input type="radio" name="source_type" value="sync" id="source_type_syncmember" /> <label for="source_type_syncmember">{$lang->about_type_syncmember}</label></td>
</tr>
<tr>
<th scope="row" colspan="2" class="button">
@ -37,98 +44,3 @@
</form>
</div>
<!-- step 1-2. 대상이 게시물 정보일 경우 대상 모듈 목록을 선택하도록 함 -->
<div id="step12" style="display:none">
<form action="./" method="get" onsubmit="return procFilter(this, step12);">
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[12]} - {$lang->import_step_desc[12]}</caption>
<tr>
<td><select name="target_module" id="target_module"></select></td>
</tr>
</table>
<table cellspacing="0" class="adminTable">
<col width="150" />
<col />
<caption>{nl2br($lang->about_target_path)}</caption>
<tr>
<th>Path/URL</th>
<td><input type="text" name="target_path" id="target_path" class="inputTypeText w400" /></td>
</tr>
<tr>
<th scope="row" colspan="2" class="button">
<span class="button"><input type="submit" value="{$lang->cmd_next}" /></span>
</th>
</tr>
</table>
</form>
</div>
<!-- step 1-3. 대상이 게시물 정보일 경우 모듈 선택후 분류가 있으면 분류 선택을 하도록 함 -->
<div id="step13" style="display:none">
<form action="./" method="get" onsubmit="return doStep13(this)">
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[13]} - {$lang->import_step_desc[13]}</caption>
<tr>
<td><select name="target_category" id="target_category"><option value=""></option></select></td>
</tr>
<tr>
<th class="button"><span class="button"><input type="submit" value="{$lang->cmd_next}" /></span></th>
</tr>
</table>
</form>
</div>
<!-- step 2. XML 파일 지정 -->
<div id="step2" style="display:none">
<form action="./" method="get" onsubmit="return doStep2(this)" id="fo_step2">
<input type="hidden" name="module_srl" value="" />
<input type="hidden" name="target_path" value="" />
<input type="hidden" name="category_srl" value="" />
<input type="hidden" name="position" value="0" />
<input type="hidden" name="file_point" value="0" />
<input type="hidden" name="total_count" value="0" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[2]} - {$lang->import_step_desc[2]}</caption>
<tr>
<td>
<input type="text" name="xml_file" value="./" class="inputTypeText w400" />
</td>
</tr>
<tr>
<th class="button"><span class="button"><input type="submit" value="{$lang->cmd_next}" /></span></th>
</tr>
</table>
<div id="step2_status" style="display:none;" class="gap1">
<table border="0" cellspacing="0" cellpadding="0" width="100%" style="margin-bottom:10px;">
<col />
<col width="120" />
<tr>
<td><div id="bar" style="width:1px;height:10px;background-color:#EFEFEF;border:1px solid #888888"></div></td>
<td class="tRight"><span id="bar_status"></span>
</tr>
</table>
<div id="step2_position" style="height:100px;overflow-y:scroll;border:2px solid #DDDDDD;padding:10px;" class="desc"></div>
<div class="tRight gap1">
<span class="button"><input type="button" value="{$lang->cmd_continue}" onclick="doManualProcess(); return false" /></span>
</div>
</div>
</form>
</div>
<!-- step 3. 회원 동기화 시작 버튼 -->
<div id="step3" style="display:none">
<form action="./" method="get" onsubmit="return doStep3(this)">
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[3]} - {$lang->import_step_desc[3]}</caption>
<tr>
<th class="button"><span class="button"><input type="submit" value="{$lang->cmd_sync_member}" /></span></th>
</tr>
</table>
</form>
</div>
<!-- final step. 진행 완료 또는 실패 메세지 -->
<div id="step_finish" style="display:none;"></div>

View file

@ -3,135 +3,243 @@
* @author zero (zero@nzeo.com)
* @brief importer에서 사용하는 javascript
**/
/* Step 1 처리 */
function completeStep1(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
var next_step = ret_obj['next_step'];
var module_list = ret_obj['module_list'];
if(module_list) {
var sel = xGetElementById("target_module");
var module_list_arr = module_list.split("\n");
for(var i=0;i<module_list_arr.length;i++) {
var pos = module_list_arr[i].indexOf(',');
var value = module_list_arr[i].substr(0,pos);
var text = module_list_arr[i].substr(pos+1);
var opt_obj = new Option(text, value, true, true);
sel.options[sel.options.length] = opt_obj;
}
sel.selectedIndex = 0;
}
xGetElementById('step1').style.display = 'none';
xGetElementById('step'+next_step).style.display = 'block';
}
/* Step 1-2 모듈선택 처리 (카테고리 있으면 카테고리 선택으로, 아니면 바로 파일 업로드로) */
function completeStep12(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
var next_step = ret_obj['next_step'];
var category_list = ret_obj['category_list'];
if(category_list) {
var sel = xGetElementById("target_category");
var category_list_arr = category_list.split("\n");
for(var i=0;i<category_list_arr.length;i++) {
var pos = category_list_arr[i].indexOf(',');
var value = category_list_arr[i].substr(0,pos);
var text = category_list_arr[i].substr(pos+1);
var opt_obj = new Option(text, value, true, true);
sel.options[sel.options.length] = opt_obj;
}
sel.selectedIndex = 0;
}
xGetElementById('step12').style.display = 'none';
xGetElementById('step'+next_step).style.display = 'block';
}
/* Step 1-3 카테고리 선택후 파일 업로드 보여주기 */
function doStep13(fo_obj) {
xGetElementById('step13').style.display = 'none';
xGetElementById('step2').style.display = 'block';
return false;
}
/* Step 2 XML파일을 입력받아서 처리~ */
function doStep2(fo_obj) {
var sel_module = xGetElementById("target_module");
if(sel_module.options.length>0) {
var module_srl = sel_module.options[sel_module.selectedIndex].value;
fo_obj.module_srl.value = module_srl;
}
var sel_category = xGetElementById("target_category");
if(sel_category.options.length>1) {
var category_srl = sel_category.options[sel_category.selectedIndex].value;
fo_obj.category_srl.value = category_srl;
}
var target_path = xGetElementById("target_path").value;
fo_obj.target_path.value = target_path;
procFilter(fo_obj, import_xml);
xGetElementById('step2_status').style.display = 'block';
return false;
}
/* Step Complete Import */
function completeImport(ret_obj) {
var message = ret_obj['message'];
var is_finished = ret_obj['is_finished'];
var position = ret_obj['position'];
var file_point = ret_obj['file_point'];
var total_count = ret_obj['total_count'];
if(total_count>0) {
var bar = xGetElementById('bar');
var status = xGetElementById('bar_status');
var per = parseInt(position/total_count*100,10)
xInnerHtml(status, position+'/'+total_count+' ('+per+'%)');
bar.style.width = per+'%';
}
if(is_finished=='Y') {
alert(ret_obj["message"]);
location.href = location.href;
} else {
var fo_obj = xGetElementById('fo_step2');
fo_obj.position.value = position;
fo_obj.file_point.value = file_point;
fo_obj.total_count.value = total_count;
message = message.replace(/&lt;/g,"<").replace(/&gt;/g,">");
var obj = xGetElementById('step2_position');
var txt = xInnerHtml(obj);
if(txt.length > 1024*10) txt = '';
if(message != "success") xInnerHtml(obj, txt+message);
obj.scrollTop += xHeight(obj);
procFilter(fo_obj, import_xml);
}
}
function doManualProcess() {
var fo_obj = xGetElementById('fo_step2');
procFilter(fo_obj, import_xml);
}
/* 회원정보와 게시물의 싱크 */
function doStep3(fo_obj) {
exec_xml('importer','procImporterAdminSync', new Array(), completeStep3);
function doSync(fo_obj) {
exec_xml('importer','procImporterAdminSync', new Array(), completeSync);
return false;
}
function completeStep3(ret_obj) {
function completeSync(ret_obj) {
alert(ret_obj['message']);
location.href=location.href;
}
/* 회원정보 데이터 import */
function doImportMember(fo_obj) {
var xml_file = fo_obj.xml_file.value;
if(!xml_file) return false;
var params = new Array();
params['xml_file'] = xml_file;
params['total_count'] = fo_obj.total_count.value;
params['success_count'] = fo_obj.success_count.value;
params['readed_line'] = fo_obj.readed_line.value;
var response_tags = new Array("error","message", "total_count", "success_count", "readed_line", "is_finished");
exec_xml('importer','procImporterAdminMemberImport', params, completeImportMember, response_tags);
return false;
}
function completeImportMember(ret_obj) {
var total_count = ret_obj['total_count'];
var success_count = ret_obj['success_count'];
var readed_line = ret_obj['readed_line'];
var is_finished = ret_obj['is_finished'];
if(is_finished == '1') {
var fo_obj = xGetElementById("fo_import");
fo_obj.total_count.value = 0;
fo_obj.success_count.value = 0;
fo_obj.readed_line.value = 0;
fo_obj.xml_file.disabled = false;
xGetElementById("status").style.display = "none";
xGetElementById("status_button_prev").style.display = "block";
xGetElementById("status_button").style.display = "none";
xInnerHtml("status", ret_obj['message']);
alert(ret_obj['message']);
} else {
var fo_obj = xGetElementById("fo_import");
fo_obj.total_count.value = total_count;
fo_obj.success_count.value = success_count;
fo_obj.readed_line.value = readed_line;
fo_obj.xml_file.disabled = true;
xGetElementById("status").style.display = "block";
xGetElementById("status_button_prev").style.display = "none";
xGetElementById("status_button").style.display = "block";
xInnerHtml("status", ret_obj['message']);
doImportMember(fo_obj);
}
}
/* 쪽지 데이터 import */
function doImportMessage(fo_obj) {
var xml_file = fo_obj.xml_file.value;
if(!xml_file) return false;
var params = new Array();
params['xml_file'] = xml_file;
params['total_count'] = fo_obj.total_count.value;
params['success_count'] = fo_obj.success_count.value;
params['readed_line'] = fo_obj.readed_line.value;
var response_tags = new Array("error","message", "total_count", "success_count", "readed_line", "is_finished");
exec_xml('importer','procImporterAdminMessageImport', params, completeImportMessage, response_tags);
return false;
}
function completeImportMessage(ret_obj) {
var total_count = ret_obj['total_count'];
var success_count = ret_obj['success_count'];
var readed_line = ret_obj['readed_line'];
var is_finished = ret_obj['is_finished'];
if(is_finished == '1') {
var fo_obj = xGetElementById("fo_import");
fo_obj.total_count.value = 0;
fo_obj.success_count.value = 0;
fo_obj.readed_line.value = 0;
fo_obj.xml_file.disabled = false;
xGetElementById("status").style.display = "none";
xGetElementById("status_button_prev").style.display = "block";
xGetElementById("status_button").style.display = "none";
xInnerHtml("status", ret_obj['message']);
alert(ret_obj['message']);
} else {
var fo_obj = xGetElementById("fo_import");
fo_obj.total_count.value = total_count;
fo_obj.success_count.value = success_count;
fo_obj.readed_line.value = readed_line;
fo_obj.xml_file.disabled = true;
xGetElementById("status").style.display = "block";
xGetElementById("status_button_prev").style.display = "none";
xGetElementById("status_button").style.display = "block";
xInnerHtml("status", ret_obj['message']);
doImportMessage(fo_obj);
}
}
/* 모듈 데이터 import */
function doImportModule(fo_obj) {
var target_module = fo_obj.target_module.options[fo_obj.target_module.selectedIndex].value;
if(!target_module) return false;
var xml_file = fo_obj.xml_file.value;
if(!xml_file) return false;
var params = new Array();
params['xml_file'] = xml_file;
params['target_module'] = target_module;
params['total_count'] = fo_obj.total_count.value;
params['success_count'] = fo_obj.success_count.value;
params['readed_line'] = fo_obj.readed_line.value;
var response_tags = new Array("error","message", "total_count", "success_count", "readed_line", "is_finished");
exec_xml('importer','procImporterAdminModuleImport', params, completeImportModule, response_tags);
return false;
}
function completeImportModule(ret_obj, response_tags) {
var total_count = ret_obj['total_count'];
var success_count = ret_obj['success_count'];
var readed_line = ret_obj['readed_line'];
var is_finished = ret_obj['is_finished'];
if(is_finished == '1') {
var fo_obj = xGetElementById("fo_import");
fo_obj.target_module.disabled = false;
fo_obj.xml_file.disabled = false;
fo_obj.total_count.value = 0;
fo_obj.success_count.value = 0;
fo_obj.readed_line.value = 0;
xGetElementById("status").style.display = "none";
xGetElementById("status_button_prev").style.display = "block";
xGetElementById("status_button").style.display = "none";
xInnerHtml("status", ret_obj['message']);
alert(ret_obj['message']);
} else {
var fo_obj = xGetElementById("fo_import");
fo_obj.target_module.disabled = true;
fo_obj.xml_file.disabled = true;
fo_obj.total_count.value = total_count;
fo_obj.success_count.value = success_count;
fo_obj.readed_line.value = readed_line;
xGetElementById("status").style.display = "block";
xGetElementById("status_button_prev").style.display = "none";
xGetElementById("status_button").style.display = "block";
xInnerHtml("status", ret_obj['message']);
doImportModule(fo_obj);
}
}
/* TTXML 데이터 import */
function doImportTTXML(fo_obj) {
var target_module = fo_obj.target_module.options[fo_obj.target_module.selectedIndex].value;
if(!target_module) return false;
var xml_file = fo_obj.xml_file.value;
if(!xml_file) return false;
var params = new Array();
params['xml_file'] = xml_file;
params['target_module'] = target_module;
params['total_count'] = fo_obj.total_count.value;
params['success_count'] = fo_obj.success_count.value;
params['readed_line'] = fo_obj.readed_line.value;
params['user_id'] = fo_obj.user_id.value;
var response_tags = new Array("error","message", "total_count", "success_count", "readed_line", "is_finished");
exec_xml('importer','procImporterAdminTTXMLImport', params, completeImportTTXML, response_tags);
return false;
}
function completeImportTTXML(ret_obj, response_tags) {
var total_count = ret_obj['total_count'];
var success_count = ret_obj['success_count'];
var readed_line = ret_obj['readed_line'];
var is_finished = ret_obj['is_finished'];
if(is_finished == '1') {
var fo_obj = xGetElementById("fo_import");
fo_obj.target_module.disabled = false;
fo_obj.xml_file.disabled = false;
fo_obj.total_count.value = 0;
fo_obj.success_count.value = 0;
fo_obj.readed_line.value = 0;
xGetElementById("status").style.display = "none";
xGetElementById("status_button_prev").style.display = "block";
xGetElementById("status_button").style.display = "none";
xInnerHtml("status", ret_obj['message']);
alert(ret_obj['message']);
} else {
var fo_obj = xGetElementById("fo_import");
fo_obj.target_module.disabled = true;
fo_obj.xml_file.disabled = true;
fo_obj.total_count.value = total_count;
fo_obj.success_count.value = success_count;
fo_obj.readed_line.value = readed_line;
xGetElementById("status").style.display = "block";
xGetElementById("status_button_prev").style.display = "none";
xGetElementById("status_button").style.display = "block";
xInnerHtml("status", ret_obj['message']);
doImportTTXML(fo_obj);
}
}

View file

@ -0,0 +1,33 @@
<!--%import("js/importer_admin.js")-->
<!--%import("css/importer.css")-->
<h3>{$lang->importer} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="infoText">{nl2br($lang->about_importer)}</div>
<div>
<form action="./" method="get" onsubmit="return doImportMember(this)" id="fo_import">
<input type="hidden" name="total_count" value="0" />
<input type="hidden" name="success_count" value="0" />
<input type="hidden" name="readed_line" value="0" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[2]} - {$lang->import_step_desc[2]}</caption>
<tr>
<td>
<input type="text" name="xml_file" value="./" class="inputTypeText w400" />
<p>ex1) ../member.xml</p>
<p>ex2) http://...../member.xml</p>
</td>
</tr>
<tr>
<th class="button">
<div id="status_button_prev"><span class="button"><input type="submit" value="{$lang->cmd_next}" /></span></div>
<div id="status_button" style="display:none"><span class="button"><input type="submit" value="{$lang->cmd_continue}" /></span></div>
</th>
</tr>
</table>
<div id="status" style="display:none"></div>
</form>
</div>

View file

@ -0,0 +1,33 @@
<!--%import("js/importer_admin.js")-->
<!--%import("css/importer.css")-->
<h3>{$lang->importer} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="infoText">{nl2br($lang->about_importer)}</div>
<div>
<form action="./" method="get" onsubmit="return doImportMessage(this)" id="fo_import">
<input type="hidden" name="total_count" value="0" />
<input type="hidden" name="success_count" value="0" />
<input type="hidden" name="readed_line" value="0" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[2]} - {$lang->import_step_desc[2]}</caption>
<tr>
<td>
<input type="text" name="xml_file" value="./" class="inputTypeText w400" />
<p>ex1) ../message.xml</p>
<p>ex2) http://...../message.xml</p>
</td>
</tr>
<tr>
<th class="button">
<div id="status_button_prev"><span class="button"><input type="submit" value="{$lang->cmd_next}" /></span></div>
<div id="status_button" style="display:none"><span class="button"><input type="submit" value="{$lang->cmd_continue}" /></span></div>
</th>
</tr>
</table>
<div id="status" style="display:none"></div>
</form>
</div>

View file

@ -0,0 +1,51 @@
<!--%import("js/importer_admin.js")-->
<!--%import("css/importer.css")-->
<h3>{$lang->importer} <span class="gray">{$lang->cmd_management}</span></h3>
<!-- 설명 -->
<div class="infoText">{nl2br($lang->about_importer)}</div>
<!-- step 1-2. 대상이 게시물 정보일 경우 대상 모듈 목록을 선택하도록 함 -->
<div>
<form action="./" method="get" onsubmit="return doImportModule(this)" id="fo_import">
<input type="hidden" name="total_count" value="0" />
<input type="hidden" name="success_count" value="0" />
<input type="hidden" name="readed_line" value="0" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[1]} - {$lang->import_step_desc[12]}</caption>
<tr>
<td>
<select name="target_module">
<option value="">====================</option>
<!--@foreach($mid_list as $key => $val)-->
<option value="{$val->module_srl}">{$val->browser_title}</option>
<!--@end-->
</select>
</td>
</tr>
</table>
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[2]} - {$lang->import_step_desc[2]}</caption>
<tr>
<td>
<input type="text" name="xml_file" value="./" class="inputTypeText w400" />
<p>ex1) ../module.xml</p>
<p>ex2) http://...../module.xml</p>
</td>
</tr>
<tr>
<th class="button">
<div id="status_button_prev"><span class="button"><input type="submit" value="{$lang->cmd_next}" /></span></div>
<div id="status_button" style="display:none"><span class="button"><input type="submit" value="{$lang->cmd_continue}" /></span></div>
</th>
</tr>
</table>
<div id="status" style="display:none"></div>
</form>
</div>

View file

@ -0,0 +1,16 @@
<!--%import("js/importer_admin.js")-->
<!--%import("css/importer.css")-->
<h3>{$lang->importer} <span class="gray">{$lang->cmd_management}</span></h3>
<!-- 설명 -->
<div class="infoText">{nl2br($lang->about_importer)}</div>
<form action="./" method="get" onsubmit="return doSync(this)">
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[3]} - {$lang->import_step_desc[3]}</caption>
<tr>
<td><span class="button"><input type="submit" value="{$lang->cmd_sync_member}" /></span></td>
</tr>
</table>
</form>

View file

@ -0,0 +1,60 @@
<!--%import("js/importer_admin.js")-->
<!--%import("css/importer.css")-->
<h3>{$lang->importer} <span class="gray">{$lang->cmd_management}</span></h3>
<!-- 설명 -->
<div class="infoText">{nl2br($lang->about_importer)}</div>
<!-- step 1-2. 대상이 게시물 정보일 경우 대상 모듈 목록을 선택하도록 함 -->
<div>
<form action="./" method="get" onsubmit="return doImportTTXML(this)" id="fo_import">
<input type="hidden" name="total_count" value="0" />
<input type="hidden" name="success_count" value="0" />
<input type="hidden" name="readed_line" value="0" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[1]} - {$lang->import_step_desc[12]}</caption>
<tr>
<td>
<select name="target_module">
<option value="">====================</option>
<!--@foreach($mid_list as $key => $val)-->
<option value="{$val->module_srl}">{$val->browser_title}</option>
<!--@end-->
</select>
</td>
</tr>
</table>
<table cellspacing="0" class="adminTable">
<tr>
<td>
{$lang->user_id} : <input type="text" name="user_id" value="{$logged_info->user_id}" class="inputTypeText w200" />
<p>{$lang->about_ttxml_user_id}</p>
</td>
</tr>
</table>
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[2]} - {$lang->import_step_desc[2]}</caption>
<tr>
<td>
<input type="text" name="xml_file" value="./" class="inputTypeText w400" />
<p>ex1) ../module.xml</p>
<p>ex2) http://...../module.xml</p>
</td>
</tr>
<tr>
<th class="button">
<div id="status_button_prev"><span class="button"><input type="submit" value="{$lang->cmd_next}" /></span></div>
<div id="status_button" style="display:none"><span class="button"><input type="submit" value="{$lang->cmd_continue}" /></span></div>
</th>
</tr>
</table>
<div id="status" style="display:none"></div>
</form>
</div>

View file

@ -220,23 +220,23 @@ EndOfLicense;
);
$lang->install_checklist_xml = 'XMLライブラリのインストール';
$lang->install_without_xml = 'XMLライブラリがインストールされていません';
$lang->install_without_xml = 'XMLライブラリがインストールされていません';
$lang->install_checklist_gd = 'GDライブラリのインストール';
$lang->install_without_gd = 'イメージ変換用のGDライブラリがインストールされていません';
$lang->install_without_gd = 'イメージ変換用のGDライブラリがインストールされていません';
$lang->install_checklist_gd = 'GDライブラリのインストール';
$lang->install_without_iconv = '文字列処理のための「iconv」ライブラリがインストールされていません';
$lang->install_session_auto_start = 'PHPの設定で「session.auto_start==1」 にするとセッション処理に問題が発生することがあります';
$lang->install_permission_denied = 'インストールする対象のディレクトリのパーミッションが「707」になっていません';
$lang->install_without_iconv = '文字列処理のための「iconv」ライブラリがインストールされていません';
$lang->install_session_auto_start = 'PHPの設定で「session.auto_start==1」 にするとセッション処理に問題が発生することがあります';
$lang->install_permission_denied = 'インストールする対象のディレクトリのパーミッションが「707」になっていません';
$lang->cmd_agree_license = 'ライセンスに同意します';
$lang->cmd_agree_license = 'ライセンスに同意します';
$lang->cmd_install_fix_checklist = 'インストールするための必須条件を設定しました。';
$lang->cmd_install_next = 'インストールを続けます';
$lang->cmd_install_next = 'インストールを続けます';
$lang->db_desc = array(
'mysql' => 'MySQL DBで PHPの「mysql*()」関数を利用してデータの入出力を行います。DBは「myisam」タイプで作成されるため、トランザクション処理はできません。',
'mysql_innodb' => 'MySQL DBで「innodb」タイプでデータの入出力を行います。「innodb」ではトランザクションの処理が行えます。',
'sqlite2' => 'ファイルタイプデータベースである「sqlite2」をサポートします。インストールの際は、DBファイルはウェブがらアクセスできない場所に作成してください。安定化までのテストは行われていません',
'sqlite3_pdo' => 'PHPのPDOを経由うして「sqlite3」をサポートします。インストールの際は、ウェブからアクセスできない場所に作成してください。',
'mysql' => 'MySQL DBで PHPの「mysql*()」関数を利用してデータの入出力を行います。<br />DBは「myisam」タイプで作成されるため、トランザクション処理はできません。',
'mysql_innodb' => 'MySQL DBで「innodb」タイプでデータの入出力を行います。<br />「innodb」ではトランザクションの処理が行えます。',
'sqlite2' => 'ファイルタイプデータベースである「sqlite2」をサポートします。<br />インストールの際は、DBファイルはウェブがらアクセスできない場所に作成してください。<br />(安定化までのテストは行われていません)',
'sqlite3_pdo' => 'PHPのPDOを経由うして「sqlite3」をサポートします。<br />インストールの際は、DBファイルはウェブからアクセスできない場所に生成してください。',
'cubrid' => 'CUBRID DBを利用します。',
'postgresql' => 'PostgreSql DBを利用します。',
);
@ -257,11 +257,11 @@ EndOfLicense;
$lang->env_title = '環境設定';
$lang->use_optimizer = 'オプティマイザ使用';
$lang->about_optimizer = 'オプティマイザを使用すると多数の「CSS/ JS」ファイルを、統合圧縮してから転送するため、レスポンスが早くなります。但し、CSSまたはJSファイルによっては問題が生じる場合があります。この場合は、チェックを外すと正常に動作します。';
$lang->use_rewrite = 'リライトモジュール使用';
$lang->about_rewrite = 'Webサーバで「リライトモジュールmod_rewrite」をサポートしている場合は、「http://アドレス/?document_srl=123」のようなアドレスを「http://アドレス/123」のように簡単にすることができます。';
$lang->about_optimizer = 'オプティマイザを使用すると多数の「CSS/ JS」ファイルを、統合圧縮して転送するため、レスポンスが早くなります。<br />但し、CSSまたはJSファイルによっては問題が生じる場合があります。この場合は、チェックを外すと正常に動作します。';
$lang->use_rewrite = 'リライトモジュール使用';
$lang->about_rewrite = 'Webサーバで「リライトモジュールmod_rewrite」をサポートしている場合は、「http://アドレス/?document_srl=123」のようなアドレスを「http://アドレス/123」のように動的だけど静的なページに見せることができます。';
$lang->time_zone = 'タイムゾーン';
$lang->about_time_zone = 'サーバの設定時間とサービスしているローカル時間との差が生じる場合、タイムゾーンを指定すれば、表示時間をWebサービスをしているローカル時間に設定できます。';
$lang->about_time_zone = 'サーバの設定時間とサービスしているローカル時間との差が生じる場合、タイムゾーンを指定すれば、表示時間を指定したところの時間に設定できます。';
$lang->about_database_file = 'Sqliteはファイルにデータを保存します。そのため、データベースファイルにはウェブからアクセスできない場所にしなければなりません。<br/><span style="color:red">データファイルのパーミッションは「707」に設定してください。</span>';
@ -270,7 +270,7 @@ EndOfLicense;
$lang->msg_cannot_proc = 'インストールできる環境が整っていないため、リクエストを実行できませんでした。';
$lang->msg_already_installed = '既にインストールされています。';
$lang->msg_dbconnect_failed = "データベースの接続エラーです\nデータベースの情報をもう一度確認してください。";
$lang->msg_dbconnect_failed = "データベースアクセスにエラーが発生しました\nデータベースの情報をもう一度確認してください。";
$lang->msg_table_is_exists = "既にデータベースにデーブルが作成されています。\nconfigファイルを再作成しました。";
$lang->msg_install_completed = "インストールが完了しました。\nありがとうございます。";
$lang->msg_install_failed = "インストールファイルを作成する際にエラーが発生しました。";

View file

@ -59,10 +59,10 @@
<th scope="row">{$val->title}</th>
<td class="left">
<!--@if($val->type=="text")-->
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w100" />
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w400" />
<!--@elseif($val->type=="textarea")-->
<textarea name="{$val->name}" class="inputTypeTextArea w100">{htmlspecialchars($val->value)}</textarea>
<textarea name="{$val->name}" class="inputTypeTextArea w400">{htmlspecialchars($val->value)}</textarea>
<!--@elseif($val->type=="select")-->
<select name="{$val->name}">

View file

@ -2,13 +2,60 @@
<!-- 레이아웃의 목록 -->
<table cellspacing="0" class="adminTable">
<!--@if($lang_type == 'ko')-->
<col />
<col width="50"/>
<col width="120"/>
<col width="60"/>
<col width="70"/>
<col width="75"/>
<col width="140"/>
<col width="80"/>
<!--@else if($lang_type == 'en')-->
<col />
<col width="60"/>
<col width="130"/>
<col width="55"/>
<col width="75"/>
<col width="140"/>
<col width="95"/>
<!--@else if($lang_type == 'zh-CN')-->
<col />
<col width="50"/>
<col width="120"/>
<col width="60"/>
<col width="75"/>
<col width="140"/>
<col width="80"/>
<!--@else if($lang_type == 'jp')-->
<col />
<col width="80"/>
<col width="120"/>
<col width="80"/>
<col width="75"/>
<col width="140"/>
<col width="80"/>
<!--@else if($lang_type == 'es')-->
<col />
<col width="60"/>
<col width="120"/>
<col width="70"/>
<col width="75"/>
<col width="140"/>
<col width="90"/>
<!--@else if($lang_type == 'ru')-->
<col />
<col width="60"/>
<col width="120"/>
<col width="60"/>
<col width="75"/>
<col width="140"/>
<col width="110"/>
<!--@end-->
<thead>
<tr>
<th scope="col">{$lang->layout_name}</th>
@ -26,10 +73,10 @@
<!-- 레이아웃 정보 파일(conf/info.xml)가 있는 경우-->
<!--@if($val->title)-->
<tr>
<td rowspan="2">
<th rowspan="2">
<a href="{getUrl('','module','layout','act','dispLayoutAdminInfo','selected_layout',$val->layout)}" onclick="popopen(this.href,'layout_info');return false" class="blue">{$val->title}</a> <br />
({$val->layout})
</td>
</th>
<td class="tahoma">{$val->version}</td>
<td><a href="{$val->author->homepage}" onclick="window.open(this.href);return false;" class="blue">{$val->author->name}</a></td>
<td class="tahoma">{$val->menu_count}</td>

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