git-svn-id: http://xe-core.googlecode.com/svn/trunk@3022 201d5d3c-b55e-5fd7-737f-ddc643e51545
|
|
@ -1,5 +1,10 @@
|
|||
RewriteEngine On
|
||||
|
||||
# image...
|
||||
RewriteRule ^([a-zA-Z0-9_]+)/files/attach/images/(.*) ./files/attach/images/$2 [L]
|
||||
RewriteRule ^([a-zA-Z0-9_]+)/modules/(.*) ./modules/$2 [L]
|
||||
RewriteRule ^([a-zA-Z0-9_]+)/common/(.*) ./common/$2 [L]
|
||||
|
||||
# page
|
||||
RewriteRule ^([a-zA-Z0-9_]+)/([[:digit:]]+)page$ ./index.php?mid=$1&page=$2 [L]
|
||||
|
||||
|
|
|
|||
|
|
@ -143,6 +143,42 @@
|
|||
printContent($content);
|
||||
break;
|
||||
|
||||
// 글 가져오기
|
||||
case 'metaWeblog.getPost' :
|
||||
$document_srl = $params[0]->value->string->body;
|
||||
if(!$document_srl) {
|
||||
printContent( getXmlRpcFailure(1, 'no permission') );
|
||||
} else {
|
||||
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
if(!$oDocument->isExists() || !$oDocument->isGranted()) {
|
||||
printContent( getXmlRpcFailure(1, 'no permission') );
|
||||
} else {
|
||||
$content = sprintf(
|
||||
'<methodResponse>'.
|
||||
'<params><param><value><struct>'.
|
||||
'<member><name>categories</name><value><array><data><value>%s</value></data></array></value></member>'.
|
||||
'<member><name>dateCreated</name><value><dateTime.iso8601>%s</dateTime.iso8601></value></member>'.
|
||||
'<member><name>description</name><value>%s</value></value></member>'.
|
||||
'<member><name>link</name><value>%s</value></member>'.
|
||||
'<member><name>postid</name><value><string>%s</string></value></member>'.
|
||||
'<member><name>title</name><value>%s</value></member>'.
|
||||
'<member><name>publish</name><value><boolean>1</boolean></value></member>'.
|
||||
'</struct></value></param></params></methodResponse>',
|
||||
$oDocument->get('category_srl'),
|
||||
date("Ymd", $oDocument->getRegdateTime()).'T'.date("H:i:s", $oDocument->getRegdateTime()),
|
||||
'sadfsadf',//$oDocument->getContent(false),
|
||||
$oDocument->getPermanentUrl(),
|
||||
$oDocument->document_srl,
|
||||
'asfasdfs'//$oDocument->getTitleText()
|
||||
);
|
||||
debugPrint($content);
|
||||
printContent($content);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
// 글작성
|
||||
case 'metaWeblog.newPost' :
|
||||
unset($obj);
|
||||
|
|
@ -335,6 +371,9 @@
|
|||
$args->page = 1;
|
||||
$args->list_count = 20;
|
||||
$args->sort_index = 'list_order'; ///< 소팅 값
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->search_target = 'member_srl';
|
||||
$args->search_keyword = $logged_info->member_srl;
|
||||
$output = $oDocumentModel->getDocumentList($args);
|
||||
if(!$output->toBool() || !$output->data) {
|
||||
$content = getXmlRpcFailure(1, 'post not founded');
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
사용으로 하셔야 RSD태그 및 api가 동작을 합니다.
|
||||
</description>
|
||||
<description xml:lang="jp">
|
||||
MetaWeblogをサポートするBlogAPI アドオンです。「使用する」をクリックして設定すると各モジュールごとRSDのアドレスを表示します。API のアドレスは「http://インストールURL/モジュール名/api」です。 「使用する」に設定しておけば RSDのアドレスが表示され、 API が動作します。
|
||||
MetaWeblogをサポートするBlogAPI のアドオンです。「使用」をクリックして設定すると各モジュールごとRSDのアドレスを表示します。API のアドレスは「http://インストールURL/モジュール名/api」です。 「使用する」に設定しておけば RSDのアドレスが表示され、 API が動作します。
|
||||
</description>
|
||||
<description xml:lang="zh-CN">
|
||||
支持metaWeblog的 blogApi插件。
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,18 @@
|
|||
<?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>
|
||||
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 9. 19">
|
||||
<name xml:lang="ko">제로</name>
|
||||
<name xml:lang="jp">Zero</name>
|
||||
<name xml:lang="zh-CN">Zero</name>
|
||||
<description xml:lang="ko">
|
||||
Google Analytics 코드를 사이트에 추가할 수 있습니다.
|
||||
</description>
|
||||
<description xml:lang="jp">
|
||||
Google Analytics コードをサイトに追加することができます。
|
||||
</description>
|
||||
<description xml:lang="zh-CN">
|
||||
可以添加Google Analytics代码。
|
||||
</description>
|
||||
|
|
@ -17,7 +22,8 @@
|
|||
<title xml:lang="ko">uacct</title>
|
||||
<title xml:lang="zh-CN">uacct</title>
|
||||
<description xml:lang="ko">Google Analytics 코드의 _uacct 값을 입력해주세요.</description>
|
||||
<description xml:lang="ko">请输入Google Analytics代码的_uacct值。</description>
|
||||
<description xml:lang="jp">Google Analytics コードの値を入力してください。</description>
|
||||
<description xml:lang="zh-CN">请输入Google Analytics代码的_uacct值。</description>
|
||||
</var>
|
||||
</extra_vars>
|
||||
</addon>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -22,11 +22,11 @@
|
|||
5. MemberModel::getMemberMenu 호출시 친구 등록 메뉴를 추가합니다.
|
||||
</description>
|
||||
<description xml:lang="jp">
|
||||
会員情報のイメージ名、イメージマーク、署名などを画面に表示するアドオンです。このような情報を使用しない場合、アドオンを「使用」に設定すれば、実行時間を少なくします。イメージ名、イメージマーク、署名などを表示させたい時は、このアドオンを「使用」に設定して下さい。
|
||||
会員情報のイメージ名、イメージマーク、署名などを画面に表示するアドオンです。このような情報を使用しない場合、アドオンを「未使用」に設定すれば、実行時間を少なくします。イメージ名、イメージマーク、署名などを表示させたい時は、このアドオンを「使用」に設定して下さい。
|
||||
|
||||
1. 出力の直前 <div class="member_会員番号">....</div> に定義された部分を探し、会員番号をチェックしてイメージ名、イメージマークがあるかを確認します。あった場合は内容を変更します
|
||||
2. 出力の直前 <div class="document_番号">...</div>に定義された部分を探し、書込みの内容だと判断して、下段に署名を追加します
|
||||
3. 新しいメッセージが来た場合ポップアップで表示します
|
||||
3. 新しいメッセージが届いた時、ポップアップで表示します
|
||||
4. MemberModel::getMemberMenu を呼出す時、相手が会員の場合はメッセージ送信の機能を追加します
|
||||
5. MemberModel::getMemberMenu を呼出す時、友達登録メニュを追加します
|
||||
</description>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
|
||||
<name xml:lang="ko">제로</name>
|
||||
<name xml:lang="zh-CN">zero</name>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 7. 26">
|
||||
|
|
@ -18,7 +18,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.
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 7. 26">
|
||||
|
|
|
|||
|
|
@ -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">スパムフィルターアドオン</title>
|
||||
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
|
||||
<name xml:lang="ko">제로</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
|
|
|
|||
|
|
@ -836,23 +836,24 @@
|
|||
**/
|
||||
function transContent($content) {
|
||||
// 위젯 코드 변경
|
||||
$content = preg_replace_callback('!<img([^\>]*)widget=([^\>]*?)\>!is', array($this,'_transWidget'), $content);
|
||||
$oWidgetController = &getController('widget');
|
||||
$content = $oWidgetController->transWidgetCode($content, false);
|
||||
|
||||
// 메타 파일 변경
|
||||
$content = preg_replace_callback('!<\!\-\-Meta:([^\-]*?)\-\->!is', array($this,'_transMeta'), $content);
|
||||
$content = preg_replace_callback('!<\!\-\-Meta:([^\-]*?)\-\->!is', array($this,'transMeta'), $content);
|
||||
|
||||
// 에디터 컴포넌트를 찾아서 결과 코드로 변환
|
||||
$content = preg_replace_callback('!<div([^\>]*)editor_component=([^\>]*)>(.*?)\<\/div\>!is', array($this,'_transEditorComponent'), $content);
|
||||
$content = preg_replace_callback('!<img([^\>]*)editor_component=([^\>]*?)\>!is', array($this,'_transEditorComponent'), $content);
|
||||
$content = preg_replace_callback('!<div([^\>]*)editor_component=([^\>]*)>(.*?)\<\/div\>!is', array($this,'transEditorComponent'), $content);
|
||||
$content = preg_replace_callback('!<img([^\>]*)editor_component=([^\>]*?)\>!is', array($this,'transEditorComponent'), $content);
|
||||
|
||||
// body 내의 <style ..></style>를 header로 이동
|
||||
$content = preg_replace_callback('!<style(.*?)<\/style>!is', array($this,'_moveStyleToHeader'), $content);
|
||||
$content = preg_replace_callback('!<style(.*?)<\/style>!is', array($this,'moveStyleToHeader'), $content);
|
||||
|
||||
// <br> 코드 변환
|
||||
$content = preg_replace('/<br([^>\/]*)(\/>|>)/i','<br$1 />', $content);
|
||||
|
||||
// 몇가지 대문자 태그를 소문자로 변경
|
||||
//$content = preg_replace_callback('!<(\/){0,1}([A-Z]+)([^>]*?)>!s',array($this,'_transTagToLowerCase'), $content);
|
||||
//$content = preg_replace_callback('!<(\/){0,1}([A-Z]+)([^>]*?)>!s',array($this,'transTagToLowerCase'), $content);
|
||||
|
||||
// <img ...> 코드를 <img ... /> 코드로 변환
|
||||
$content = preg_replace('/<img(.*?)(\/){0,1}>/i','<img$1 />', $content);
|
||||
|
|
@ -866,14 +867,14 @@
|
|||
/**
|
||||
* @brief IE위지윅에디터에서 태그가 대문자로 사용되기에 이를 소문자로 치환
|
||||
**/
|
||||
function _transTagToLowerCase($matches) {
|
||||
function transTagToLowerCase($matches) {
|
||||
return sprintf('<%s%s%s>', $matches[1], strtolower($matches[2]), $matches[3]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <!--Meta:파일이름.(css|js)-->를 변경
|
||||
**/
|
||||
function _transMeta($matches) {
|
||||
function transMeta($matches) {
|
||||
if(eregi('\.css$', $matches[1])) $this->addCSSFile($matches[1]);
|
||||
elseif(eregi('\.js$', $matches[1])) $this->addJSFile($matches[1]);
|
||||
}
|
||||
|
|
@ -881,7 +882,7 @@
|
|||
/**
|
||||
* @brief <body>내의 <style태그를 header로 이동
|
||||
**/
|
||||
function _moveStyleToHeader($matches) {
|
||||
function moveStyleToHeader($matches) {
|
||||
$this->addHtmlHeader($matches[0]);
|
||||
return '';
|
||||
}
|
||||
|
|
@ -896,13 +897,13 @@
|
|||
return sprintf('%s=%s', $key, $val);
|
||||
}
|
||||
|
||||
function _transEditorComponent($matches) {
|
||||
function transEditorComponent($matches) {
|
||||
// IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌
|
||||
$buff = $matches[0];
|
||||
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', array($this, _fixQuotation), $buff);
|
||||
$buff = str_replace("&","&",$buff);
|
||||
|
||||
// 위젯에서 생성된 코드 (img, div태그내에 editor_widget코드 존재)의 parameter를 추출
|
||||
// 에디터 컴포넌트에서 생성된 코드
|
||||
$oXmlParser = new XmlParser();
|
||||
$xml_doc = $oXmlParser->parse($buff);
|
||||
if($xml_doc->div) $xml_doc = $xml_doc->div;
|
||||
|
|
@ -921,38 +922,6 @@
|
|||
return $oComponent->transHTML($xml_doc);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 위젯 코드를 실제 php코드로 변경
|
||||
**/
|
||||
function _transWidget($matches) {
|
||||
// IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌
|
||||
$buff = $matches[0];
|
||||
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', array($this, _fixQuotation), $buff);
|
||||
$buff = str_replace("&","&",$buff);
|
||||
|
||||
$oXmlParser = new XmlParser();
|
||||
$xml_doc = $oXmlParser->parse(trim($buff));
|
||||
|
||||
if($xml_doc->img) $vars = $xml_doc->img->attrs;
|
||||
else $vars = $xml_doc->attrs;
|
||||
|
||||
if(!$vars->widget) return "";
|
||||
|
||||
// 캐시 체크
|
||||
$widget_sequence = $vars->widget_sequence;
|
||||
$widget_cache = $vars->widget_cache;
|
||||
if($widget_cache && $widget_sequence) {
|
||||
$output = WidgetHandler::getCache($widget_sequence, $widget_cache);
|
||||
if($output) return $output;
|
||||
}
|
||||
|
||||
// 위젯의 이름을 구함
|
||||
$widget = $vars->widget;
|
||||
unset($vars->widget);
|
||||
|
||||
return WidgetHandler::execute($widget, $vars);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief gzip encoding 여부 체크
|
||||
**/
|
||||
|
|
|
|||
|
|
@ -217,7 +217,9 @@
|
|||
else $height_per = $height / $resize_height;
|
||||
|
||||
if($thumbnail_type == 'ratio') {
|
||||
$per = $width_per;
|
||||
if($width_per>$height_per) $per = $height_per;
|
||||
else $per = $width_per;
|
||||
$resize_width = $width * $per;
|
||||
$resize_height = $height * $per;
|
||||
} else {
|
||||
if($width_per < $height_per) $per = $height_per;
|
||||
|
|
|
|||
78
classes/httprequest/XEHttpRequest.class.php
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
/**
|
||||
* @class HttpRequest
|
||||
* @author haneul (haneul@gmail.com)
|
||||
* @version 0.1
|
||||
* @brief 다른 서버에 HTTP Request를 전송하고 result를 받아오는 클래스
|
||||
* @remarks Connection: keep-alive 는 지원하지 않음
|
||||
*/
|
||||
|
||||
class XEHttpRequest {
|
||||
|
||||
/// target host
|
||||
var $m_host;
|
||||
/// target Port
|
||||
var $m_port;
|
||||
/// header array
|
||||
var $m_headers;
|
||||
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
function XEHttpRequest($host, $port)
|
||||
{
|
||||
$this->m_host = $host;
|
||||
$this->m_port = $port;
|
||||
$this->m_headers = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Add (key, value) pair to the HTTP request header
|
||||
*/
|
||||
function AddToHeader($key, $value)
|
||||
{
|
||||
$this->m_headers[$key] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief send HTTP message to the host
|
||||
* @return (result code, response body)
|
||||
*/
|
||||
function Send($target, $method="GET", $timeout = 3)
|
||||
{
|
||||
$socket = @fsockopen($this->m_host, $this->m_port, $errno, $errstr, $timeout);
|
||||
if(!$socket)
|
||||
{
|
||||
return new Object(-1, "socket_connect_failed");
|
||||
}
|
||||
|
||||
$this->AddToHeader('Host', $this->m_host);
|
||||
$this->AddToHeader('Connection', "close");
|
||||
|
||||
$crlf = "\r\n";
|
||||
$request = "$method $target HTTP/1.1$crlf";
|
||||
|
||||
foreach($this->m_headers as $equiv => $content)
|
||||
{
|
||||
$request .= "$equiv: $content$crlf";
|
||||
}
|
||||
$request .= $crlf;
|
||||
fwrite($socket, $request);
|
||||
|
||||
list($httpver, $code, $status) = split(' +', rtrim(fgets($socket)));
|
||||
// read response header
|
||||
while(strlen(trim($line = fgets($socket))))
|
||||
{
|
||||
list($equiv, $content) = split(' *: *', rtrim($line));
|
||||
}
|
||||
$body = '';
|
||||
while(!feof($socket))
|
||||
{
|
||||
$body .= fgets($socket, 128);
|
||||
}
|
||||
fclose($socket);
|
||||
|
||||
return array($code, $body);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -31,75 +31,145 @@
|
|||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 생성
|
||||
**/
|
||||
function writeCache($widget_sequence, $output) {
|
||||
$cache_path = './files/cache/widget_cache/';
|
||||
$cache_file = sprintf('%s%d.%s.cache', $cache_path, $widget_sequence, Context::getLangType());
|
||||
FileHandler::writeFile($cache_file, $output);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 위젯을 찾아서 실행하고 결과를 출력
|
||||
* <div widget='위젯'...></div> 태그 사용 templateHandler에서 WidgetHandler::execute()를 실행하는 코드로 대체하게 된다
|
||||
*
|
||||
* $include_info가 true일 경우 css 코드와 위젯핸들링을 위한 코드까지 포함하도록 한다
|
||||
**/
|
||||
function execute($widget, $args) {
|
||||
function execute($widget, $args, $include_info = false) {
|
||||
// 디버그를 위한 위젯 실행 시간 저장
|
||||
if(__DEBUG__==3) $start = getMicroTime();
|
||||
|
||||
// widget중 widgetContent 는 page 모듈에 종속적인 위젯으로 직접 page.admin.controller.php를 호출하여 처리를 해야 함 (차후 정리 필요)
|
||||
if($widget == 'widgetContent') {
|
||||
$style = $args->style;
|
||||
$body = base64_decode($args->body);
|
||||
$widget_padding_left = $args->widget_padding_left;
|
||||
$widget_padding_right = $args->widget_padding_right;
|
||||
$widget_padding_top = $args->widget_padding_top;
|
||||
$widget_padding_bottom = $args->widget_padding_bottom;
|
||||
if($include_info) {
|
||||
$oWidgetController = &getController('widget');
|
||||
$tpl = $oWidgetController->transEditorContent($body, $args);
|
||||
} else {
|
||||
$tpl = sprintf('<div style="overflow:hidden;%s"><div style="padding:%s %s %s %s;">%s</div></div>', $style, $widget_padding_top, $widget_padding_right, $widget_padding_bottom, $widget_padding_left, $body);
|
||||
}
|
||||
return $tpl;
|
||||
// widget Box일 경우 간단히 변경만 시도함
|
||||
} else if($widget == 'widgetBox') {
|
||||
$style = $args->style;
|
||||
$widget_padding_left = $args->widget_padding_left;
|
||||
$widget_padding_right = $args->widget_padding_right;
|
||||
$widget_padding_top = $args->widget_padding_top;
|
||||
$widget_padding_bottom = $args->widget_padding_bottom;
|
||||
if($include_info) {
|
||||
$tpl = sprintf('<div class="widgetOutput" widget="widgetBox" style="%s;" widget_padding_top="%s" widget_padding_right="%s" widget_padding_bottom="%s" widget_padding_left="%s"><div class="widgetCopy"></div><div class="widgetSize"></div><div class="widgetRemove"></div><div class="widgetResize"></div><div class="widgetResizeLeft"></div><div class="widgetBorder"><div class="nullWidget" style="padding:%s %s %s %s;">', $style, $widget_padding_top, $widget_padding_right, $widget_padding_bottom, $widget_padding_left, $widget_padding_top, $widget_padding_right, $widget_padding_bottom, $widget_padding_left);
|
||||
} else {
|
||||
$tpl = sprintf('<div style="overflow:hidden;%s;"><div style="padding:%s %s %s %s;"><div>%s', $style, $widget_padding_top, $widget_padding_right, $widget_padding_bottom, $widget_padding_left, $body);
|
||||
}
|
||||
return $tpl;
|
||||
}
|
||||
|
||||
// 설치된 위젯들에 대한 처리
|
||||
if(!is_dir(sprintf('./widgets/%s/',$widget))) return;
|
||||
|
||||
$cache_path = './files/cache/widget_cache/';
|
||||
if(!is_dir($cache_path)) FileHandler::makeDir($cache_path);
|
||||
$cache_path = './files/cache/widget_cache/';
|
||||
if(!is_dir($cache_path)) FileHandler::makeDir($cache_path);
|
||||
|
||||
// $widget의 객체를 받음
|
||||
$oWidget = WidgetHandler::getObject($widget);
|
||||
if(!$oWidget) return;
|
||||
|
||||
// 위젯 실행
|
||||
if($oWidget) {
|
||||
$output = $oWidget->proc($args);
|
||||
}
|
||||
// 위젯 output을 생성하기 위한 변수 설정
|
||||
$widget_padding_top = $args->widget_padding_top;
|
||||
$widget_padding_bottom = $args->widget_padding_bottom;
|
||||
$widget_padding_left = $args->widget_padding_left;
|
||||
$widget_padding_right = $args->widget_padding_right;
|
||||
|
||||
if($args->widget_fix_width == 'Y') {
|
||||
$widget_width_type = strtolower($args->widget_width_type);
|
||||
if(!$widget_width_type||!in_array($widget_width_type,array("px","%"))) $widget_width_type = "px";
|
||||
$inner_style = sprintf("padding:%dpx %dpx %dpx %dpx !important; padding:none !important;", $widget_padding_top, $widget_padding_right, $widget_padding_bottom, $widget_padding_left);
|
||||
|
||||
/**
|
||||
* 출력을 위해 위젯 내용을 div로 꾸밈
|
||||
**/
|
||||
// 서비스에 사용하기 위해 위젯 정보를 포함하지 않을 경우
|
||||
if(!$include_info) {
|
||||
|
||||
if($widget_width_type == "px") {
|
||||
// 위젯 실행
|
||||
$html = $oWidget->proc($args);
|
||||
$output = sprintf('<div style="overflow:hidden;%s;"><div style="%s">%s</div></div>', $args->style, $inner_style, $html);
|
||||
|
||||
$style = "overflow:hidden;";
|
||||
$style .= sprintf("%s:%s%s;", "width", $args->widget_width - $args->widget_margin_right - $args->widget_margin_left, $widget_width_type);
|
||||
$style .= sprintf("margin-top:%dpx;margin-bottom:%dpx;", $args->widget_margin_top, $args->widget_margin_bottom);
|
||||
$inner_style = sprintf("margin-left:%dpx;margin-right:%dpx;", $args->widget_margin_left, $args->widget_margin_right);
|
||||
// 위젯 sequence가 있고 위젯의 캐싱을 지정하였고 위젯정보를 담지 않도록 하였을 경우 캐시 파일을 저장
|
||||
if($args->widget_sequence && $args->widget_cache) WidgetHandler::writeCache($args->widget_sequence, $output);
|
||||
|
||||
if($args->widget_position) {
|
||||
$style .= sprintf("%s:%s;", "float", $args->widget_position);
|
||||
$output = sprintf('<div style="%s"><div style="%s">%s</div></div>',$style, $inner_style, $output);
|
||||
} else {
|
||||
$style .= "float:left;";
|
||||
$output = sprintf('<div class="clear"></div><div style="%s"><div style="%s">%s</div></div>',$style, $inner_style, $output);
|
||||
}
|
||||
// 에디팅등에 사용하기 위한 목적으로 위젯 정보를 포함할 경우
|
||||
} else {
|
||||
// 위젯 실행
|
||||
//if($args->widget_sequence && $args->widget_cache) $html = WidgetHandler::getCache($args->widget_sequence, $args->widget_cache);
|
||||
//if(!$html) $html = $oWidget->proc($args);
|
||||
$html = $oWidget->proc($args);
|
||||
|
||||
} else {
|
||||
|
||||
$style = sprintf("padding:0;overflow:hidden;%s:%s%s;", "width", $args->widget_width, $widget_width_type);
|
||||
|
||||
$output = sprintf('<div style="margin:%dpx %dpx %dpx %dpx;">%s</div>', $args->widget_margin_top, $args->widget_margin_right,$args->widget_margin_bottom,$args->widget_margin_left, $output);
|
||||
|
||||
if($args->widget_position) {
|
||||
$style .= sprintf("%s:%s;", "float", $args->widget_position);
|
||||
$output = sprintf('<div style="%s">%s</div>',$style, $output);
|
||||
} else {
|
||||
$style .= "float:left;";
|
||||
$output = sprintf('<div class="clear"></div><div style="%s">%s</div>',$style, $output);
|
||||
// args 정리
|
||||
$attribute = array();
|
||||
if($args) {
|
||||
foreach($args as $key => $val) {
|
||||
if($key == 'class' || $key == 'style') continue;
|
||||
if(strpos($val,'|@|')>0) {
|
||||
$val = str_replace('|@|',',',$val);
|
||||
}
|
||||
$attribute[] = sprintf('%s="%s"', $key, str_replace('"','\"',$val));
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
$output = sprintf('<div style="margin:%dpx %dpx %dpx %dpx;padding:0;clear:both;">%s</div>', $args->widget_margin_top, $args->widget_margin_right,$args->widget_margin_bottom,$args->widget_margin_left, $output);
|
||||
// 결과물에 있는 css Meta 목록을 구해와서 해당 css를 아예 읽어버림
|
||||
require_once("./classes/optimizer/Optimizer.class.php");
|
||||
$oOptimizer = new Optimizer();
|
||||
preg_match_all('!<\!\-\-Meta:([^\-]*?)\-\->!is', $html, $matches);
|
||||
$css_header = null;
|
||||
for($i=0;$i<count($matches[1]);$i++) {
|
||||
$css_file = $matches[1][$i];
|
||||
$buff = FileHandler::readFile($css_file);
|
||||
$css_header .= $oOptimizer->replaceCssPath($css_file, $buff)."\n";
|
||||
}
|
||||
|
||||
if(!$html) $html = ' ';
|
||||
$output = sprintf(
|
||||
'<div class="widgetClass"><style type="text/css">%s</style></div>'.
|
||||
'<div class="widgetOutput" style="%s" widget_padding_top="%s" widget_padding_right="%s" widget_padding_bottom="%s" widget_padding_left="%s" widget="%s" %s >'.
|
||||
'<div class="widgetSetup"></div>'.
|
||||
'<div class="widgetCopy"></div>'.
|
||||
'<div class="widgetSize"></div>'.
|
||||
'<div class="widgetRemove"></div>'.
|
||||
'<div class="widgetResize"></div>'.
|
||||
'<div class="widgetResizeLeft"></div>'.
|
||||
'<div class="widgetBorder">'.
|
||||
'<div style="%s">'.
|
||||
'%s'.
|
||||
'</div><div class="clear"></div>'.
|
||||
'</div>'.
|
||||
'</div>',
|
||||
$css_header,
|
||||
$args->style,
|
||||
$widget_padding_top, $widget_padding_right, $widget_padding_bottom, $widget_padding_left,
|
||||
$widget, implode(' ',$attribute),
|
||||
$inner_style,
|
||||
$html
|
||||
);
|
||||
}
|
||||
|
||||
// 위젯 결과물 생성 시간을 debug 정보에 추가
|
||||
if(__DEBUG__==3) $GLOBALS['__widget_excute_elapsed__'] += getMicroTime() - $start;
|
||||
|
||||
if($args->widget_sequence && $args->widget_cache) {
|
||||
$cache_path = './files/cache/widget_cache/';
|
||||
$cache_file = sprintf('%s%d.%s.cache', $cache_path, $args->widget_sequence, Context::getLangType());
|
||||
|
||||
FileHandler::writeFile($cache_file, $output);
|
||||
}
|
||||
|
||||
// 결과 return
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,14 +53,14 @@ form { margin:0; padding:0; }
|
|||
/* editor style */
|
||||
a.bold { font-weight:bold; }
|
||||
|
||||
.editor_blue_text { color: #145ff9; text-decoration:underline; }
|
||||
.editor_blue_text a { color: #145ff9; text-decoration:underline; }
|
||||
.editor_red_text { color: #f42126; text-decoration:underline; }
|
||||
.editor_red_text a { color: #f42126; text-decoration:underline; }
|
||||
.editor_yellow_text { color: #c9bd00; text-decoration:underline; }
|
||||
.editor_yellow_text a { color: #c9bd00; text-decoration:underline; }
|
||||
.editor_green_text { color: #08830B; text-decoration:underline; }
|
||||
.editor_green_text a { color: #08830B; text-decoration:underline; }
|
||||
.editor_blue_text { color: #145ff9 !important; text-decoration:underline !important; }
|
||||
.editor_blue_text a { color: #145ff9 !important; text-decoration:underline !important; }
|
||||
.editor_red_text { color: #f42126 !important; text-decoration:underline !important; }
|
||||
.editor_red_text a { color: #f42126 !important; text-decoration:underline !important; }
|
||||
.editor_yellow_text { color: #c9bd00 !important; text-decoration:underline !important; }
|
||||
.editor_yellow_text a { color: #c9bd00 !important; text-decoration:underline !important; }
|
||||
.editor_green_text { color: #08830B !important; text-decoration:underline !important; }
|
||||
.editor_green_text a { color: #08830B !important; text-decoration:underline !important; }
|
||||
|
||||
.folder_opener { display: block; }
|
||||
.folder_closer { display: none; }
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ String.prototype.setQuery = function(key, val) {
|
|||
|
||||
var q_list = new Array();
|
||||
for(var i in args) {
|
||||
if( !args.hasOwnProperty(i) ) continue;
|
||||
var arg = args[i];
|
||||
if(!arg.toString().trim()) continue;
|
||||
|
||||
|
|
@ -49,6 +50,33 @@ String.prototype.setQuery = function(key, val) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @breif replace outerHTML
|
||||
**/
|
||||
function replaceOuterHTML(obj, html) {
|
||||
if(obj.outerHTML) {
|
||||
obj.outerHTML = html;
|
||||
} else {
|
||||
var dummy = xCreateElement("div");
|
||||
xInnerHtml(dummy, html);
|
||||
var parent = obj.parentNode;
|
||||
while(dummy.firstChild) {
|
||||
parent.insertBefore(dummy.firstChild, obj);
|
||||
}
|
||||
parent.removeChild(obj);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @breif get outerHTML
|
||||
**/
|
||||
function getOuterHTML(obj) {
|
||||
if(obj.outerHTML) return obj.outerHTML;
|
||||
var dummy = xCreateElement("div");
|
||||
dummy.insertBefore(obj, dummy.lastChild);
|
||||
return xInnerHtml(dummy);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief xSleep(micro time)
|
||||
**/
|
||||
|
|
@ -106,7 +134,7 @@ function winopen(url, target, attribute) {
|
|||
**/
|
||||
function popopen(url, target) {
|
||||
if(typeof(target)=="undefined") target = "_blank";
|
||||
winopen(url, target, "left=10,top=10,width=10,height=10,scrollbars=no,resizable=no,toolbars=no");
|
||||
winopen(url, target, "left=10,top=10,width=10,height=10,scrollbars=no,resizable=yes,toolbars=no");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -173,7 +201,6 @@ function displayMultimedia(src, width, height, auto_start) {
|
|||
} else {
|
||||
html = "<embed src=\""+src+"\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\"></embed>";
|
||||
}
|
||||
|
||||
document.writeln(html);
|
||||
}
|
||||
|
||||
|
|
@ -187,6 +214,13 @@ function resizeImageContents() {
|
|||
var obj = objs[i];
|
||||
if(!obj.parentNode) continue;
|
||||
|
||||
if(/\/modules\//i.test(obj.src)) continue;
|
||||
if(/\/layouts\//i.test(obj.src)) continue;
|
||||
if(/\/widgets\//i.test(obj.src)) continue;
|
||||
if(/\/classes\//i.test(obj.src)) continue;
|
||||
if(/\/common\/tpl\//i.test(obj.src)) continue;
|
||||
if(/\/member_extra_info\//i.test(obj.src)) continue;
|
||||
|
||||
// 상위 node의 className이 document_ 또는 comment_ 로 시작하지 않으면 패스
|
||||
var parent = obj.parentNode;
|
||||
while(parent) {
|
||||
|
|
@ -196,13 +230,8 @@ function resizeImageContents() {
|
|||
if(!parent || !/(document_|comment_)/ig.test(parent.className)) continue;
|
||||
|
||||
if(parent.parentNode) xWidth(parent, xWidth(parent.parentNode));
|
||||
|
||||
if(/\/modules\//i.test(obj.src)) continue;
|
||||
if(/\/layouts\//i.test(obj.src)) continue;
|
||||
if(/\/widgets\//i.test(obj.src)) continue;
|
||||
if(/\/classes\//i.test(obj.src)) continue;
|
||||
if(/\/common\/tpl\//i.test(obj.src)) continue;
|
||||
if(/\/member_extra_info\//i.test(obj.src)) continue;
|
||||
parent.style.width = '100%';
|
||||
parent.style.overflow = 'hidden';
|
||||
|
||||
var parent_width = xWidth(parent);
|
||||
if(parent.parentNode && xWidth(parent.parentNode)<parent_width) parent_width = xWidth(parent.parentNode);
|
||||
|
|
@ -211,7 +240,7 @@ function resizeImageContents() {
|
|||
var orig_img = new Image();
|
||||
orig_img.src = obj.src;
|
||||
|
||||
if(parent_width<1 || obj_width <1 || parent_width >= obj_width) continue;
|
||||
if(parent_width<1 || obj_width <1 || parent_width >= orig_img.width) continue;
|
||||
|
||||
obj.style.cursor = "pointer";
|
||||
|
||||
|
|
@ -282,10 +311,10 @@ function svc_folder_close(id) {
|
|||
function setFixedPopupSize() {
|
||||
|
||||
if(xGetElementById('popBody')) {
|
||||
if(xHeight('popBody')>600) {
|
||||
if(xHeight('popBody')>500) {
|
||||
xGetElementById('popBody').style.overflowY = 'scroll';
|
||||
xGetElementById('popBody').style.overflowX = 'hidden';
|
||||
xHeight('popBody', 600);
|
||||
xHeight('popBody', 500);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -359,6 +388,7 @@ function showOriginalImage(evt) {
|
|||
xAddEventListener(orig_image, "dblclick", closeOriginalImage);
|
||||
xAddEventListener(window, "scroll", closeOriginalImage);
|
||||
xAddEventListener(window, "resize", closeOriginalImage);
|
||||
xAddEventListener(document, 'keydown',closeOriginalImage);
|
||||
|
||||
areabg.style.visibility = 'visible';
|
||||
}
|
||||
|
|
@ -378,6 +408,7 @@ function closeOriginalImage(evt) {
|
|||
xRemoveEventListener(area, "mousedown", closeOriginalImage);
|
||||
xRemoveEventListener(window, "scroll", closeOriginalImage);
|
||||
xRemoveEventListener(window, "resize", closeOriginalImage);
|
||||
xRemoveEventListener(document, 'keydown',closeOriginalImage);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -467,7 +498,7 @@ function origImageDragMouseMove(evt) {
|
|||
xAddEventListener(document, 'click', chkPopupMenu);
|
||||
var loaded_popup_menu_list = new Array();
|
||||
|
||||
// 클릭 이벤트 발생시 이벤트가 일어난 대상을 검사하여 적절한 규칙에 맞으면 처리
|
||||
/* 클릭 이벤트 발생시 이벤트가 일어난 대상을 검사하여 적절한 규칙에 맞으면 처리 */
|
||||
function chkPopupMenu(evt) {
|
||||
// 이전에 호출되었을지 모르는 팝업메뉴 숨김
|
||||
var area = xGetElementById("popup_menu_area");
|
||||
|
|
@ -599,7 +630,7 @@ function completeCallModuleAction(ret_obj, response_tags) {
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 날짜 선택 (달력 열기)
|
||||
* @brief 날짜 선택 (달력 열기)
|
||||
**/
|
||||
function open_calendar(fo_id, day_str, callback_func) {
|
||||
if(typeof(day_str)=="undefined") day_str = "";
|
||||
|
|
@ -612,7 +643,7 @@ function open_calendar(fo_id, day_str, callback_func) {
|
|||
popopen(url, 'Calendar');
|
||||
}
|
||||
|
||||
// 언어코드 (lang_type) 쿠키값 변경
|
||||
/* 언어코드 (lang_type) 쿠키값 변경 */
|
||||
function doChangeLangType(obj) {
|
||||
if(typeof(obj)=="string") {
|
||||
setLangType(obj);
|
||||
|
|
@ -727,7 +758,14 @@ function checkboxSelectAll(form, name, option){
|
|||
else if(option == true) value = true
|
||||
else if(option == false) value = false
|
||||
|
||||
//if(fo_obj[i].name == name) fo_obj[i].checked = value;
|
||||
if(fo_obj[i].name == name) fo_obj[i].checked = value;
|
||||
}
|
||||
}
|
||||
|
||||
/* 체크박스를 실행 */
|
||||
function clickCheckBoxAll(form, name) {
|
||||
var fo_obj = xGetElementById(form);
|
||||
for ( var i = 0 ; i < fo_obj.length ; i++ ){
|
||||
if(fo_obj[i].name == name) fo_obj[i].click();
|
||||
}
|
||||
}
|
||||
|
|
@ -740,3 +778,162 @@ function doAddDocumentCart(obj) {
|
|||
exec_xml("document","procDocumentAdminAddCart", params, null);
|
||||
}
|
||||
|
||||
/* ff의 rgb(a,b,c)를 #... 로 변경 */
|
||||
function transRGB2Hex(value) {
|
||||
if(!value) return value;
|
||||
if(value.indexOf('#')>-1) return value.replace(/^#/,'');
|
||||
|
||||
if(value.toLowerCase().indexOf('rgb')<0) return value;
|
||||
value = value.replace(/^rgb\(/i,'').replace(/\)$/,'');
|
||||
value_list = value.split(',');
|
||||
|
||||
var hex = '';
|
||||
for(var i=0;i<value_list.length;i++) {
|
||||
var color = parseInt(value_list[i],10).toString(16);
|
||||
hex += color;
|
||||
}
|
||||
return '#'+hex;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Base64 encode / decode
|
||||
* http://www.webtoolkit.info/
|
||||
*
|
||||
**/
|
||||
|
||||
var Base64 = {
|
||||
|
||||
// private property
|
||||
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
||||
|
||||
// public method for encoding
|
||||
encode : function (input) {
|
||||
var output = "";
|
||||
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
||||
var i = 0;
|
||||
|
||||
input = Base64._utf8_encode(input);
|
||||
|
||||
while (i < input.length) {
|
||||
|
||||
chr1 = input.charCodeAt(i++);
|
||||
chr2 = input.charCodeAt(i++);
|
||||
chr3 = input.charCodeAt(i++);
|
||||
|
||||
enc1 = chr1 >> 2;
|
||||
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
||||
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
||||
enc4 = chr3 & 63;
|
||||
|
||||
if (isNaN(chr2)) {
|
||||
enc3 = enc4 = 64;
|
||||
} else if (isNaN(chr3)) {
|
||||
enc4 = 64;
|
||||
}
|
||||
|
||||
output = output +
|
||||
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
|
||||
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
|
||||
|
||||
}
|
||||
|
||||
return output;
|
||||
},
|
||||
|
||||
// public method for decoding
|
||||
decode : function (input) {
|
||||
var output = "";
|
||||
var chr1, chr2, chr3;
|
||||
var enc1, enc2, enc3, enc4;
|
||||
var i = 0;
|
||||
|
||||
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
||||
|
||||
while (i < input.length) {
|
||||
|
||||
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
||||
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
||||
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
||||
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
||||
|
||||
chr1 = (enc1 << 2) | (enc2 >> 4);
|
||||
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
||||
chr3 = ((enc3 & 3) << 6) | enc4;
|
||||
|
||||
output = output + String.fromCharCode(chr1);
|
||||
|
||||
if (enc3 != 64) {
|
||||
output = output + String.fromCharCode(chr2);
|
||||
}
|
||||
if (enc4 != 64) {
|
||||
output = output + String.fromCharCode(chr3);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
output = Base64._utf8_decode(output);
|
||||
|
||||
return output;
|
||||
|
||||
},
|
||||
|
||||
// private method for UTF-8 encoding
|
||||
_utf8_encode : function (string) {
|
||||
string = string.replace(/\r\n/g,"\n");
|
||||
var utftext = "";
|
||||
|
||||
for (var n = 0; n < string.length; n++) {
|
||||
|
||||
var c = string.charCodeAt(n);
|
||||
|
||||
if (c < 128) {
|
||||
utftext += String.fromCharCode(c);
|
||||
}
|
||||
else if((c > 127) && (c < 2048)) {
|
||||
utftext += String.fromCharCode((c >> 6) | 192);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
else {
|
||||
utftext += String.fromCharCode((c >> 12) | 224);
|
||||
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return utftext;
|
||||
},
|
||||
|
||||
// private method for UTF-8 decoding
|
||||
_utf8_decode : function (utftext) {
|
||||
var string = "";
|
||||
var i = 0;
|
||||
var c = c1 = c2 = 0;
|
||||
|
||||
while ( i < utftext.length ) {
|
||||
|
||||
c = utftext.charCodeAt(i);
|
||||
|
||||
if (c < 128) {
|
||||
string += String.fromCharCode(c);
|
||||
i++;
|
||||
}
|
||||
else if((c > 191) && (c < 224)) {
|
||||
c2 = utftext.charCodeAt(i+1);
|
||||
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
|
||||
i += 2;
|
||||
}
|
||||
else {
|
||||
c2 = utftext.charCodeAt(i+1);
|
||||
c3 = utftext.charCodeAt(i+2);
|
||||
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
|
||||
i += 3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ function XmlJsFilterExecuteFilter(filter, value) {
|
|||
return regx.test(value);
|
||||
break;
|
||||
case "alpha_number" :
|
||||
var regx = /^[a-zA-Z0-9\_]*$/;
|
||||
var regx = /^[a-zA-Z][a-zA-Z0-9\_]*$/;
|
||||
return regx.test(value);
|
||||
break;
|
||||
case "number" :
|
||||
|
|
|
|||
|
|
@ -123,15 +123,15 @@
|
|||
$lang->document_count = 'Total Articles';
|
||||
$lang->page_count = 'Page Count';
|
||||
$lang->list_count = 'List Count';
|
||||
$lang->readed_count = 'Hits';
|
||||
$lang->readed_count = 'Views';
|
||||
$lang->voted_count = 'Votes';
|
||||
$lang->member_count = 'Member Count';
|
||||
$lang->date = 'Date';
|
||||
$lang->regdate = 'Registered Date';
|
||||
$lang->last_update = 'Late Update';
|
||||
$lang->last_post = 'Late Post';
|
||||
$lang->signup_date = 'Registered Date';
|
||||
$lang->last_login = 'Late Login';
|
||||
$lang->last_update = 'Last Update';
|
||||
$lang->last_post = 'Last Post';
|
||||
$lang->signup_date = 'Join Date';
|
||||
$lang->last_login = 'Last Login';
|
||||
$lang->first_page = 'First Page';
|
||||
$lang->last_page = 'Last Page';
|
||||
$lang->search_target = 'Searching Target';
|
||||
|
|
@ -157,7 +157,7 @@
|
|||
$lang->unit_year = 'year';
|
||||
|
||||
// Descriptions
|
||||
$lang->about_tag = 'You can submit multiple tags by inserting commas(,) between each tag';
|
||||
$lang->about_tag = 'You may submit multiple tags by inserting commas(,) between each tag';
|
||||
$lang->about_layout = 'Layouts decorate the appearance of your modules. you can configure them from Layout menu on the top';
|
||||
|
||||
// Messages
|
||||
|
|
@ -165,7 +165,7 @@
|
|||
$lang->msg_db_not_setted = 'DB configuration has not been set';
|
||||
$lang->msg_invalid_queryid = 'Specified query ID value is invalid';
|
||||
$lang->msg_not_permitted = 'You do not have permission to access';
|
||||
$lang->msg_input_password = 'Please enter your password';
|
||||
$lang->msg_input_password = 'Please input the password';
|
||||
$lang->msg_invalid_document = 'Invalid Article Number';
|
||||
$lang->msg_invalid_request = 'Invalid Request';
|
||||
$lang->msg_invalid_password = 'Invalid Password';
|
||||
|
|
|
|||
|
|
@ -21,15 +21,15 @@
|
|||
$lang->cmd_comment_registration = 'コメント登録';
|
||||
$lang->cmd_insert = '挿入';
|
||||
$lang->cmd_save = '保存';
|
||||
$lang->cmd_load = '불러오기';
|
||||
$lang->cmd_load = '読み込む';
|
||||
$lang->cmd_input = '入力';
|
||||
$lang->cmd_search = '検索';
|
||||
$lang->cmd_cancel = 'キャンセル';
|
||||
$lang->cmd_back = '戻る';
|
||||
$lang->cmd_vote = '推薦';
|
||||
$lang->cmd_vote_down = '비추천';
|
||||
$lang->cmd_declare = '신고';
|
||||
$lang->cmd_declared_list = '신고 목록';
|
||||
$lang->cmd_vote_down = '非推薦';
|
||||
$lang->cmd_declare = '通報';
|
||||
$lang->cmd_declared_list = '通報リスト';
|
||||
$lang->cmd_copy = 'コピー';
|
||||
$lang->cmd_move = '移動';
|
||||
$lang->cmd_move_up = '上へ';
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
$lang->cmd_close = '閉じる';
|
||||
$lang->cmd_open = '開く';
|
||||
$lang->cmd_setup = '設定';
|
||||
$lang->cmd_addition_setup = '추가 설정';
|
||||
$lang->cmd_addition_setup = '追加設定';
|
||||
$lang->cmd_apply = '適用';
|
||||
$lang->cmd_option = 'オプション';
|
||||
$lang->cmd_open_calendar = 'カレンダーを開く';
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
$lang->cmd_preview = 'プレビュー';
|
||||
$lang->cmd_reset = '初期化';
|
||||
$lang->cmd_remake_cache = "キャッシュファイル再生成";
|
||||
$lang->cmd_publish = "발행";
|
||||
$lang->cmd_publish = "発行";
|
||||
|
||||
$lang->enable = '可能';
|
||||
$lang->disable = '不可';
|
||||
|
|
@ -84,8 +84,8 @@
|
|||
$lang->browser_title = 'ブラウザタイトル';
|
||||
$lang->title = 'タイトル';
|
||||
$lang->title_content = 'タイトル+内容';
|
||||
$lang->topic = '주제';
|
||||
$lang->replies = '응답';
|
||||
$lang->topic = 'トッピック';
|
||||
$lang->replies = '返事';
|
||||
$lang->content = '内容';
|
||||
$lang->document = '書き込み';
|
||||
$lang->comment = 'コメント';
|
||||
|
|
@ -128,7 +128,7 @@
|
|||
$lang->date = '年月日';
|
||||
$lang->regdate = '登録日';
|
||||
$lang->last_update = '最近修正日';
|
||||
$lang->last_post = '최근 등록';
|
||||
$lang->last_post = '最近登録';
|
||||
$lang->signup_date = '加入日';
|
||||
$lang->last_login = '最近ログイン';
|
||||
$lang->first_page = '最初のページ';
|
||||
|
|
@ -177,7 +177,7 @@
|
|||
$lang->msg_module_is_not_standalone = 'このモジュールはスタンドアローンでは作動しません。';
|
||||
|
||||
$lang->success_registed = '登録しました。';
|
||||
$lang->success_declared = '신고되었습니다';
|
||||
$lang->success_declared = '通報しました。';
|
||||
$lang->success_updated = '修正しました。';
|
||||
$lang->success_deleted = '削除しました。';
|
||||
$lang->success_voted = '推薦しました。';
|
||||
|
|
@ -185,13 +185,13 @@
|
|||
$lang->success_sended = '送信しました。';
|
||||
$lang->success_reset = '初期化しました。';
|
||||
$lang->success_leaved = '脱会しました。';
|
||||
$lang->success_saved = '저장되었습니다';
|
||||
$lang->success_saved = '保存しました。';
|
||||
|
||||
$lang->fail_to_delete = '削除に失敗しました。';
|
||||
$lang->fail_to_move = '移動に失敗しました。';
|
||||
|
||||
$lang->failed_voted = '推薦できません。';
|
||||
$lang->failed_declared = '신고를 하실 수 없습니다';
|
||||
$lang->failed_declared = '通報できません。';
|
||||
$lang->fail_to_delete_have_children = '返信の書き込みがあり、削除できません。';
|
||||
|
||||
$lang->confirm_submit = '登録しますか?';
|
||||
|
|
|
|||
|
|
@ -21,15 +21,15 @@
|
|||
$lang->cmd_comment_registration = '提交评论';
|
||||
$lang->cmd_insert = '添加';
|
||||
$lang->cmd_save = '保存';
|
||||
$lang->cmd_load = '载入';
|
||||
$lang->cmd_load = '导入';
|
||||
$lang->cmd_input = '输入';
|
||||
$lang->cmd_search = '搜索';
|
||||
$lang->cmd_cancel = '取消';
|
||||
$lang->cmd_back = '返回';
|
||||
$lang->cmd_vote = '推荐';
|
||||
$lang->cmd_vote_down = '不推荐';
|
||||
$lang->cmd_declare = '申告';
|
||||
$lang->cmd_declared_list = '申告目录';
|
||||
$lang->cmd_vote_down = '反对';
|
||||
$lang->cmd_declare = '举报';
|
||||
$lang->cmd_declared_list = '举报目录';
|
||||
$lang->cmd_copy = '复制';
|
||||
$lang->cmd_move = '查看';
|
||||
$lang->cmd_move_up = '向上';
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
$lang->cmd_close = '关闭';
|
||||
$lang->cmd_open = '打开';
|
||||
$lang->cmd_setup = '设置';
|
||||
$lang->cmd_addition_setup = '额外设置';
|
||||
$lang->cmd_addition_setup = '扩展设置';
|
||||
$lang->cmd_option = '选项';
|
||||
$lang->cmd_apply = '应用';
|
||||
$lang->cmd_open_calendar = '选择日期';
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
$lang->cmd_preview = '预览';
|
||||
$lang->cmd_reset = '初始化';
|
||||
$lang->cmd_remake_cache = "重新生成缓冲文件";
|
||||
$lang->cmd_publish = "发行";
|
||||
$lang->cmd_publish = "发表";
|
||||
|
||||
$lang->enable = '可用';
|
||||
$lang->disable = '禁用';
|
||||
|
|
@ -86,7 +86,7 @@
|
|||
$lang->title = '标题';
|
||||
$lang->title_content = '标题+内容';
|
||||
$lang->topic = '主题';
|
||||
$lang->replies = '响应';
|
||||
$lang->replies = '回复';
|
||||
$lang->content = '内容';
|
||||
$lang->document = '文章';
|
||||
$lang->comment = '评论';
|
||||
|
|
@ -129,7 +129,7 @@
|
|||
$lang->date = '日期';
|
||||
$lang->regdate = '登录日期';
|
||||
$lang->last_update = '最后更新';
|
||||
$lang->last_post = '最新文章';
|
||||
$lang->last_post = '最后更新';
|
||||
$lang->signup_date = '注册日期';
|
||||
$lang->last_login = '最近登录';
|
||||
$lang->first_page = '第一页';
|
||||
|
|
@ -178,13 +178,13 @@
|
|||
$lang->msg_module_is_not_standalone = '您请求的模块不能单独执行';
|
||||
|
||||
$lang->success_registed = '提交成功!';
|
||||
$lang->success_declared = '申告成功!';
|
||||
$lang->success_declared = '举报成功!';
|
||||
$lang->success_updated = '修改成功!';
|
||||
$lang->success_deleted = '删除成功!';
|
||||
$lang->success_voted = '推荐成功!';
|
||||
$lang->success_moved = '移动成功!';
|
||||
$lang->success_sended = '发送成功!';
|
||||
$lang->success_reset = '初始化成功';
|
||||
$lang->success_reset = '初始化成功 !';
|
||||
$lang->success_leaved = '注销成功!';
|
||||
$lang->success_saved = '保存成功!';
|
||||
|
||||
|
|
@ -192,7 +192,7 @@
|
|||
$lang->fail_to_move = '移动成功!';
|
||||
|
||||
$lang->failed_voted = '您不能推荐!';
|
||||
$lang->failed_declared = '您不能申告!';
|
||||
$lang->failed_declared = '您不具备举报权限!';
|
||||
$lang->fail_to_delete_have_children = '不能删除有回复的评论!';
|
||||
|
||||
$lang->confirm_submit = '确定要提交吗?';
|
||||
|
|
@ -211,7 +211,7 @@
|
|||
$lang->column_type_list['textarea'] = '多行文本框 (textarea)';
|
||||
$lang->column_type_list['checkbox'] = '复选框 (checkbox)';
|
||||
$lang->column_type_list['select'] = '下拉列表框 (select)';
|
||||
$lang->column_type_list['kr_zip'] = '韩国地址 (zip)';
|
||||
$lang->column_type_list['kr_zip'] = '韩国邮编(zip)';
|
||||
$lang->column_type_list['date'] = '日期 (年月日)';
|
||||
//$lang->column_type_list['jp_zip'] = '日本地址 (zip)';
|
||||
$lang->column_name = '项目名';
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* 이 내용은 제로보드XE의 버전을 관리자 페이지에 표시하기 위한 용도이며
|
||||
* config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함
|
||||
**/
|
||||
define('__ZBXE_VERSION__', '0.2.5');
|
||||
define('__ZBXE_VERSION__', '0.2.6');
|
||||
|
||||
/**
|
||||
* @brief 디버깅 메세지 출력
|
||||
|
|
|
|||
|
|
@ -395,4 +395,32 @@
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief mysql old_password 의 php 구현 함수
|
||||
* 제로보드4나 기타 mysql4.1 이전의 old_password()함수를 쓴 데이터의 사용을 위해서
|
||||
* mysql의 password.c 소스 참조해서 구현함
|
||||
**/
|
||||
function mysql_pre4_hash_password($password) {
|
||||
$nr = 1345345333;
|
||||
$add = 7;
|
||||
$nr2 = 0x12345671;
|
||||
|
||||
settype($password, "string");
|
||||
|
||||
for ($i=0; $i<strlen($password); $i++) {
|
||||
if ($password[$i] == ' ' || $password[$i] == '\t') continue;
|
||||
$tmp = ord($password[$i]);
|
||||
$nr ^= ((($nr & 63) + $add) * $tmp) + ($nr << 8);
|
||||
$nr2 += ($nr2 << 8) ^ $nr;
|
||||
$add += $tmp;
|
||||
}
|
||||
$result1 = sprintf("%08lx", $nr & ((1 << 31) -1));
|
||||
$result2 = sprintf("%08lx", $nr2 & ((1 << 31) -1));
|
||||
|
||||
if($result1 == '80000000') $nr += 0x80000000;
|
||||
if($result2 == '80000000') $nr2 += 0x80000000;
|
||||
|
||||
return sprintf("%08lx%08lx", $nr, $nr2);
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
Productor del diseño : zero
|
||||
</description>
|
||||
<description xml:lang="zh-CN">
|
||||
ZBXE 官方网站布局。
|
||||
Zeroboard XE官方网站布局。
|
||||
设计 : So-Ra Lee
|
||||
HTML/CSS : Chan-Myung Jeong
|
||||
布局 : zero
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
<var name="index_url" type="text">
|
||||
<title xml:lang="ko">홈 페이지 URL</title>
|
||||
<title xml:lang="jp">ホームページ URL</title>
|
||||
<title xml:lang="zh-CN">网站 URL</title>
|
||||
<title xml:lang="zh-CN">主页地址</title>
|
||||
<title xml:lang="en">Homepage URL</title>
|
||||
<title xml:lang="es">URL de la página web</title>
|
||||
<description xml:lang="ko">로고를 클릭시에 이동할 홈 페이지 URL을 입력해 주세요.</description>
|
||||
|
|
|
|||
|
|
@ -54,10 +54,10 @@ body { background:#FFFFFF url(../images/default/bgBody.gif) repeat-x left top; }
|
|||
|
||||
/* Site Layout - Column Left */
|
||||
#columnLeft { position:relative; width:201px; float:left;}
|
||||
#columnLeft .mask { width:201px; height:5px; background:#ffffff; display:block;}
|
||||
#columnLeft .mask { width:201px; height:5px; background:#ffffff; display:block; clear:both;}
|
||||
|
||||
#lnb { border-top:1px solid #dddddd; padding:4px 5px; width:190px;}
|
||||
#lnb li { padding-bottom:4px;}
|
||||
#lnb li { padding-bottom:4px; list-style:none; }
|
||||
#lnb li a { padding:6px 5px 6px 13px; width:170px; display:block; border:1px solid #e8e8e8; background:url(../images/default/bgLnbOff.gif) repeat-x; color:#3e3e3e; position:relative; z-index:99; text-decoration:none;}
|
||||
#lnb li a:hover,
|
||||
#lnb li a:focus { color:#ffffff; background:#de4332; border:1px solid #de4332;}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@
|
|||
$buff .= sprintf(' if(file_exists("./addons/%s/%s.addon.php")) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); $addon_path = "./addons/%s/"; @include("./addons/%s/%s.addon.php"); }', $addon, $addon, $extra_vars, $addon, $addon, $addon);
|
||||
}
|
||||
|
||||
$buff = sprintf('<?if(!defined("__ZBXE__"))exit(); %s ?>', $buff);
|
||||
$buff = sprintf('<?php if(!defined("__ZBXE__"))exit(); %s ?>', $buff);
|
||||
|
||||
FileHandler::writeFile($this->cache_file, $buff);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,26 +5,26 @@
|
|||
* @brief 日本語言語パッケージ(基本的な内容のみ)
|
||||
**/
|
||||
|
||||
$lang->admin_info = '관리자 정보';
|
||||
$lang->admin_index = '관리자 초기 페이지';
|
||||
$lang->admin_info = '管理者情報';
|
||||
$lang->admin_index = '管理者トップページ';
|
||||
|
||||
$lang->module_category_title = array(
|
||||
'service' => '서비스형 모듈',
|
||||
'manager' => '관리형 모듈',
|
||||
'utility' => '기능성 모듈',
|
||||
'accessory' => '부가 모듈',
|
||||
'base' => '기본 모듈',
|
||||
'service' => 'サービス型モジュール',
|
||||
'manager' => '管理型モジュール',
|
||||
'utility' => '機能性モジュール',
|
||||
'accessory' => '付加モジュール',
|
||||
'base' => '基本モジュール',
|
||||
);
|
||||
|
||||
$lang->newest_news = "最新ニュース";
|
||||
|
||||
$lang->env_setup = "環境設定";
|
||||
|
||||
$lang->env_information = "환경 정보";
|
||||
$lang->current_version = "설치된 버전";
|
||||
$lang->current_path = "설치된 경로";
|
||||
$lang->released_version = "최신 버전";
|
||||
$lang->about_download_link = "설치된 버전보다 최신의 버전이 배포되었습니다. download링크를 클릭하시면 다운 받으실 수 있습니다.";
|
||||
$lang->env_information = "環境情報";
|
||||
$lang->current_version = "インストールバージョン";
|
||||
$lang->current_path = "インストールパス";
|
||||
$lang->released_version = "最新バージョン";
|
||||
$lang->about_download_link = "インストールされたバージョンより新しいバージョンが配布されました。ダウンロードリンクをクリックするとダウンロードできます。";
|
||||
|
||||
$lang->item_module = "モジュールリスト";
|
||||
$lang->item_addon = "アドオンリスト";
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
|
||||
$lang->welcome_to_zeroboard_xe = 'ゼロボードXEの管理者ページです。';
|
||||
$lang->about_admin_page = "管理者ページはまだ未完成です。クローズベタバージョンの期間に、多くの方々からご意見をいただきながら、必ず必要なコンテンツを埋めていきたいと思います。";
|
||||
$lang->about_lang_env = "위 설정한 언어셋을 처음 방문하는 사용자들에게 동일하게 적용하기 위해서는 원하는 언어로 변경후 아래 [저장] 버튼을 클릭하시면 됩니다";
|
||||
$lang->about_lang_env = "上で設定された言語を、初めてサイトに訪問したユーザに同じく適用させるためには、希望する言語に変更してから「保存」ボタンをクリックしてください。";
|
||||
|
||||
$lang->zeroboard_xe_user_links = 'ユーザのためのリンク';
|
||||
$lang->zeroboard_xe_developer_links = 'デベロッパーのためのリンク';
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@
|
|||
**/
|
||||
|
||||
$lang->admin_info = '管理员信息';
|
||||
$lang->admin_index = '管理员页面';
|
||||
$lang->admin_index = '管理首页';
|
||||
|
||||
$lang->module_category_title = array(
|
||||
'service' => '服务类型',
|
||||
'manager' => '管理类型',
|
||||
'service' => '服务类模块',
|
||||
'manager' => '管理类模块',
|
||||
'utility' => '功能模块',
|
||||
'accessory' => '附加模块',
|
||||
'base' => '基本模块',
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
$lang->cmd_shortcut_management = "编辑菜单";
|
||||
|
||||
$lang->msg_is_not_administrator = '只有管理员可以查看';
|
||||
$lang->msg_is_not_administrator = '只有管理员才可以查看';
|
||||
$lang->msg_manage_module_cannot_delete = '模块,插件,布局,控件模块的快捷菜单是不能删除的。';
|
||||
$lang->msg_default_act_is_null = '没有指定默认管理员的动作,是不能添加到快捷菜单的。';
|
||||
|
||||
|
|
|
|||
|
|
@ -423,17 +423,17 @@
|
|||
$target_category = $oDocumentModel->getCategory($target_category_srl);
|
||||
$source_category = $oDocumentModel->getCategory($source_category_srl);
|
||||
|
||||
// source_category에 target_category_srl의 parent_srl, listorder 값을 입력
|
||||
// source_category에 target_category_srl의 parent_srl, list_order 값을 입력
|
||||
$source_args->category_srl = $source_category_srl;
|
||||
$source_args->parent_srl = $target_category->parent_srl;
|
||||
$source_args->listorder = $target_category->listorder;
|
||||
$source_args->list_order = $target_category->list_order;
|
||||
$output = $oDocumentController->updateCategory($source_args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// target_category의 listorder값을 +1해 준다
|
||||
// target_category의 list_order값을 +1해 준다
|
||||
$target_args->category_srl = $target_category_srl;
|
||||
$target_args->parent_srl = $target_category->parent_srl;
|
||||
$target_args->listorder = $target_category->listorder -1;
|
||||
$target_args->parent_srl = $source_category->parent_srl;
|
||||
$target_args->list_order = $source_category->list_order;
|
||||
$output = $oDocumentController->updateCategory($target_args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
|
|
|
|||
|
|
@ -187,11 +187,12 @@
|
|||
**/
|
||||
function procBlogVerificationPassword() {
|
||||
// 비밀번호와 문서 번호를 받음
|
||||
$password = md5(Context::get('password'));
|
||||
|
||||
$password = Context::get('password');
|
||||
$document_srl = Context::get('document_srl');
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
$oMemberModel = &getModel('member');
|
||||
|
||||
// comment_srl이 있을 경우 댓글이 대상
|
||||
if($comment_srl) {
|
||||
// 문서번호에 해당하는 글이 있는지 확인
|
||||
|
|
@ -200,7 +201,7 @@
|
|||
if(!$oComment->isExists()) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($oComment->get('password') != $password) return new Object(-1, 'msg_invalid_password');
|
||||
if(!$oMemberModel->isValidPassword($oComment->get('password'),$password)) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oComment->setGrant();
|
||||
} else {
|
||||
|
|
@ -210,7 +211,7 @@
|
|||
if(!$oDocument->isExists()) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($oDocument->get('password') != $password) return new Object(-1, 'msg_invalid_password');
|
||||
if(!$oMemberModel->isValidPassword($oDocument->get('password'),$password)) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oDocument->setGrant();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,9 +17,7 @@
|
|||
레이아웃과 기본 메뉴를 직접 담당
|
||||
</description>
|
||||
<description xml:lang="jp">
|
||||
ブログの機能を担当するモジュール
|
||||
掲示板と似ているが、内容の表示が異なり、ブログに適切なメソッドが追加されている。
|
||||
レイアウトと基本メニューを直接担当します。
|
||||
ブログの機能を担当するモジュールです。掲示板と似ているが、内容の表示が異なり、ブログに適切なメソッドが追加されています。 レイアウトと基本メニューを直接担当します。
|
||||
</description>
|
||||
<description xml:lang="en">
|
||||
This module contains the blog functions.
|
||||
|
|
|
|||
|
|
@ -29,5 +29,5 @@
|
|||
$lang->about_category_group_srls = '選択したグループのみ現在のカテゴリが見えるようになります(XMLファイルを直接閲覧すると表示されます)';
|
||||
$lang->about_layout_setup = 'ブログのレイアウトのコードを直接修正できます。ウィジェットコードを入力、又は管理して下さい';
|
||||
$lang->about_blog_category = 'ブログのカテゴリが作成できます。<br />ブログのカテゴリが誤作動する場合キャッシュファイルの再生性を手動で行うと解決される事があります。';
|
||||
$lang->about_blog = "ブログを作成し管理できるブログモジュールです。ブログモジュールはブログスキンに含まれているレイアウトを利用するので生成後必ずカテゴリ、又はスキン管理を用いてブログを編集して下さい。ブログ内に他の掲示板を連結したい時はメニュモジュールでメニューを作成した後、スキン管理で連結して下さい。";
|
||||
$lang->about_blog = "ブログを作成し管理できるブログモジュールです。ブログモジュールはブログスキンに含まれているレイアウトを利用するので生成後必ずカテゴリ、又はスキン管理を用いてブログを編集して下さい。ブログ内に他の掲示板を連動させたい時はメニュモジュールでメニューを作成した後、スキン管理で行ってください。";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -28,30 +28,36 @@
|
|||
|
||||
<!-- 전화번호 -->
|
||||
<!--@elseif($val->type == 'tel')-->
|
||||
{htmlspecialchars($val->value[0])}
|
||||
{(int)htmlspecialchars($val->value[0])}
|
||||
<!--@if($val->value[1])-->-<!--@end-->
|
||||
{htmlspecialchars($val->value[1])}
|
||||
{(int)htmlspecialchars($val->value[1])}
|
||||
<!--@if($val->value[2])-->-<!--@end-->
|
||||
{htmlspecialchars($val->value[2])}
|
||||
{(int)htmlspecialchars($val->value[2])}
|
||||
|
||||
|
||||
<!-- textarea -->
|
||||
<!--@elseif($val->type == 'textarea')-->
|
||||
{nl2br(htmlspecialchars($val->value))}
|
||||
|
||||
|
||||
<!-- 다중 선택 -->
|
||||
<!--@elseif($val->type == 'checkbox')-->
|
||||
<!--@if(!is_array($val->value))-->{@ $val->value = array($val->value) }<!--@end-->
|
||||
<!--@foreach($val->value as $v)-->
|
||||
{@ $_tmp_value[] = htmlspecialchars($v)}
|
||||
<!--@end-->
|
||||
{implode(",",$_tmp_value)}
|
||||
|
||||
|
||||
<!-- 단일 선택 -->
|
||||
<!--@elseif($val->type == 'select')-->
|
||||
{htmlspecialchars($val->value)}
|
||||
|
||||
|
||||
<!-- 날짜 입력 -->
|
||||
<!--@elseif($val->type == 'date')-->
|
||||
{zdate($val->value,"Y-m-d")}
|
||||
|
||||
<!--@end-->
|
||||
|
||||
<!--@if(!$val->value)--> <!--@end-->
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
<param name="email_address" target="email_address" />
|
||||
<param name="homepage" target="homepage" />
|
||||
<param name="content" target="content" />
|
||||
<param name="is_secret" target="is_secret" />
|
||||
<param name="notify_message" target="notify_message" />
|
||||
</parameter>
|
||||
<response callback_func="completeInsertComment">
|
||||
<tag name="error" />
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
HTML/CSS:ジョンチャンミョン (http://naradesign.net)
|
||||
</description>
|
||||
<description xml:lang="zh-CN">
|
||||
Zeroboard XE样式皮肤。
|
||||
Zeroboard XE博客默认皮肤。
|
||||
设计 : Ki-Jeong Seo (http://blog.naver.com/addcozy)
|
||||
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
|
||||
</description>
|
||||
|
|
@ -66,11 +66,11 @@
|
|||
<var name="top_title" type="text">
|
||||
<title xml:lang="ko">상단 제목</title>
|
||||
<title xml:lang="jp">上段タイトル</title>
|
||||
<title xml:lang="zh-CN">顶部标题</title>
|
||||
<title xml:lang="zh-CN">博客标题</title>
|
||||
<title xml:lang="en">Top Title</title>
|
||||
<description xml:lang="ko">레이아웃의 상단에 표시할 제목을 입력하세요.</description>
|
||||
<description xml:lang="jp">レイアウト上段に表示させるタイトルを入力してください。</description>
|
||||
<description xml:lang="zh-CN">请输入布局顶部显示的标题。</description>
|
||||
<description xml:lang="zh-CN">请输入博客主标题。</description>
|
||||
<description xml:lang="en">Please input title which will be displayed on top of layout.</description>
|
||||
</var>
|
||||
<var name="sub_title" type="text">
|
||||
|
|
@ -80,7 +80,7 @@
|
|||
<title xml:lang="en">Subtitle</title>
|
||||
<description xml:lang="ko">레이아웃의 상단에 큰 제목 아래 부제목을 입력하세요.</description>
|
||||
<description xml:lang="jp">レイアウトの上段にメインタイトルの下のサブタイトルを入力してください。</description>
|
||||
<description xml:lang="zh-CN">部分顶部主标题下面显示的副标题。</description>
|
||||
<description xml:lang="zh-CN">请输入副标题。</description>
|
||||
<description xml:lang="en">Please input subtitle which will be displayed under the top title.</description>
|
||||
</var>
|
||||
<var name="logo_image" type="image">
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
<title xml:lang="en">Logo Image</title>
|
||||
<description xml:lang="ko">레이아웃의 상단에 표시될 로고이미지를 입력하세요.</description>
|
||||
<description xml:lang="jp">レイアウトの上段に表示されるロゴイメージを入力してください。</description>
|
||||
<description xml:lang="zh-CN">布局顶部显示的LOGO图片。</description>
|
||||
<description xml:lang="zh-CN">上传博客LOGO图片。</description>
|
||||
<description xml:lang="en">Please input logo image which will be displayed on top of layout.</description>
|
||||
</var>
|
||||
<var name="profile_image" type="image">
|
||||
|
|
@ -100,7 +100,7 @@
|
|||
<title xml:lang="en">Profile Image</title>
|
||||
<description xml:lang="ko">프로필 이미지를 입력해 주세요 (가로 사이즈는 160px이 가장 보기 좋습니다)</description>
|
||||
<description xml:lang="jp">プロフィールイメージを入力してください(横幅は「160px」が一番適しています)。</description>
|
||||
<description xml:lang="zh-CN">请输入博客个性图片。 (宽度160px图片为适)</description>
|
||||
<description xml:lang="zh-CN">请输入博客个性图片(推荐宽度160px)。</description>
|
||||
<description xml:lang="en">Please input profile image (It is recommended to set width as 160px)</description>
|
||||
</var>
|
||||
<var name="background_image" type="image">
|
||||
|
|
@ -137,10 +137,10 @@
|
|||
<title xml:lang="ko">글쓴이 표시</title>
|
||||
<title xml:lang="jp">投稿者表示</title>
|
||||
<title xml:lang="zh-CN">显示作者</title>
|
||||
<title xml:lang="en">Show Writer</title>
|
||||
<title xml:lang="en">Display Author</title>
|
||||
<description lang="ko">다수가 블로그를 함께 운영시에 글쓴이의 이름을 표시할 수 있습니다.</description>
|
||||
<description lang="jp">多数の人が一緒に運営している場合、投稿者の名前を表示させることができます。</description>
|
||||
<description lang="zh-CN">多数人一起管理博客时可以显示发表文章的作者。</description>
|
||||
<description lang="zh-CN">多人共同管理博客时可以显示日志发布者。</description>
|
||||
<description lang="en">It can display authors' name when the blog is being administrated by many administrators.</description>
|
||||
<default>off</default>
|
||||
<default>on</default>
|
||||
|
|
@ -150,7 +150,7 @@
|
|||
<menu name="top_menu" default="true">
|
||||
<title xml:lang="ko">상단 메뉴</title>
|
||||
<title xml:lang="jp">上段メニュー</title>
|
||||
<title xml:lang="zh-CN">主菜单</title>
|
||||
<title xml:lang="zh-CN">菜单</title>
|
||||
<title xml:lang="en">Top Menu</title>
|
||||
<maxdepth>1</maxdepth>
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -194,11 +194,12 @@
|
|||
**/
|
||||
function procBoardVerificationPassword() {
|
||||
// 비밀번호와 문서 번호를 받음
|
||||
$password = md5(Context::get('password'));
|
||||
|
||||
$password = Context::get('password');
|
||||
$document_srl = Context::get('document_srl');
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
$oMemberModel = &getModel('member');
|
||||
|
||||
// comment_srl이 있을 경우 댓글이 대상
|
||||
if($comment_srl) {
|
||||
// 문서번호에 해당하는 글이 있는지 확인
|
||||
|
|
@ -207,7 +208,7 @@
|
|||
if(!$oComment->isExists()) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($oComment->get('password') != $password) return new Object(-1, 'msg_invalid_password');
|
||||
if(!$oMemberModel->isValidPassword($oComment->get('password'),$password)) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oComment->setGrant();
|
||||
} else {
|
||||
|
|
@ -217,7 +218,7 @@
|
|||
if(!$oDocument->isExists()) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($oDocument->get('password') != $password) return new Object(-1, 'msg_invalid_password');
|
||||
if(!$oMemberModel->isValidPassword($oDocument->get('password'),$password)) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oDocument->setGrant();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@
|
|||
if(!$args->order_type) $args->order_type = $this->module_info->order_type?$this->module_info->order_type:'asc';
|
||||
|
||||
// 만약 document_srl은 있는데 page가 없다면 글만 호출된 경우 page를 구해서 세팅해주자..
|
||||
if($document_srl && ($oDocument->isExists()&&!$oDocument->isNotice()) && !$args->category_srl && !$args->search_keyword && $args->sort_index == 'list_order' && $args->order_type == 'asc') {
|
||||
if($document_srl && ($oDocument->isExists()&&!$oDocument->isNotice()) && !$args->category_srl && !$args->search_keyword && $args->sort_index == 'newest' && $args->order_type == 'asc') {
|
||||
$page = $oDocumentModel->getDocumentPage($document_srl, $this->module_srl, $this->list_count);
|
||||
Context::set('page', $page);
|
||||
$args->page = $page;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
$lang->board = "版面";
|
||||
|
||||
// 在按钮使用的语言
|
||||
// 按钮语言
|
||||
$lang->cmd_board_list = '版面目录';
|
||||
$lang->cmd_module_config = '版面共同设置';
|
||||
$lang->cmd_view_info = '版面信息';
|
||||
|
|
|
|||
|
|
@ -28,30 +28,36 @@
|
|||
|
||||
<!-- 전화번호 -->
|
||||
<!--@elseif($val->type == 'tel')-->
|
||||
{htmlspecialchars($val->value[0])}
|
||||
{(int)htmlspecialchars($val->value[0])}
|
||||
<!--@if($val->value[1])-->-<!--@end-->
|
||||
{htmlspecialchars($val->value[1])}
|
||||
{(int)htmlspecialchars($val->value[1])}
|
||||
<!--@if($val->value[2])-->-<!--@end-->
|
||||
{htmlspecialchars($val->value[2])}
|
||||
{(int)htmlspecialchars($val->value[2])}
|
||||
|
||||
|
||||
<!-- textarea -->
|
||||
<!--@elseif($val->type == 'textarea')-->
|
||||
{nl2br(htmlspecialchars($val->value))}
|
||||
|
||||
|
||||
<!-- 다중 선택 -->
|
||||
<!--@elseif($val->type == 'checkbox')-->
|
||||
<!--@if(!is_array($val->value))-->{@ $val->value = array($val->value) }<!--@end-->
|
||||
<!--@foreach($val->value as $v)-->
|
||||
{@ $_tmp_value[] = htmlspecialchars($v)}
|
||||
<!--@end-->
|
||||
{implode(",",$_tmp_value)}
|
||||
|
||||
|
||||
<!-- 단일 선택 -->
|
||||
<!--@elseif($val->type == 'select')-->
|
||||
{htmlspecialchars($val->value)}
|
||||
|
||||
|
||||
<!-- 날짜 입력 -->
|
||||
<!--@elseif($val->type == 'date')-->
|
||||
{zdate($val->value,"Y-m-d")}
|
||||
|
||||
<!--@end-->
|
||||
|
||||
<!--@if(!$val->value)--> <!--@end-->
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@
|
|||
<skin>
|
||||
<title xml:lang="ko">제로보드XE 게시판 기본 스킨</title>
|
||||
<title xml:lang="jp">ゼロボードXE掲示板のデフォルトスキン</title>
|
||||
<title xml:lang="zh-CN">Zeroboard XE Board 基本皮肤</title>
|
||||
<title xml:lang="zh-CN">Zeroboard XE版面默认皮肤</title>
|
||||
<title xml:lang="en">ZeroboardXE Basic Board Skin</title>
|
||||
<maker email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 10. 22">
|
||||
<name xml:lang="ko">zero</name>
|
||||
<name xml:lang="jp">zero</name>
|
||||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="zh-CN">Zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<description xml:lang="ko">
|
||||
제로보드XE 게시판의 기본 스킨입니다.
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
HTML/CSS:ジョンチャンミョン (http://naradesign.net)
|
||||
</description>
|
||||
<description xml:lang="zh-CN">
|
||||
zeroboard XE Board 基本皮肤。
|
||||
Zeroboard XE版面默认皮肤。
|
||||
设计 : Ki-Jeong Seo (http://blog.naver.com/addcozy)
|
||||
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
|
||||
</description>
|
||||
|
|
@ -65,10 +65,19 @@
|
|||
<extra_vars>
|
||||
<var name="default_style" type="select">
|
||||
<title xml:lang="ko">기본 형태</title>
|
||||
<title xml:lang="zh-CN">默认样式</title>
|
||||
<title xml:lang="en">Default Form</title>
|
||||
<description xml:lang="ko">
|
||||
목록형, 웹진형, 갤러리형, 포럼형의 기본 스타일을 지정할 수 있습니다.
|
||||
포럼형 스타일은 정렬대상을 updated로 하셔야 합니다.
|
||||
</description>
|
||||
<description xml:lang="jp">
|
||||
リスト型、ウェブジン型、ギャラリー型、フォーラム型の基本スタイルを指定することができます。
|
||||
フォーラム型のスタイルはソート対象を「updated」にしなければなりません。
|
||||
</description>
|
||||
<description xml:lang="zh-CN">
|
||||
可以把版面指定为默认的目录型,网络杂志型,相册型及论坛型。
|
||||
当使用论坛型的时候请把排列对象设置为updated。
|
||||
</description>
|
||||
<description xml:lang="en">
|
||||
You may select default styles such as list style, webzine style, gallery stylz or forum style.
|
||||
|
|
@ -94,12 +103,12 @@
|
|||
<var name="order_type" type="select">
|
||||
<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">Sorting Type</title>
|
||||
<title xml:lang="es">Tipo de ordenamiento</title>
|
||||
<description xml:lang="ko">정렬대상을 내림차순 또는 올림차순으로 정렬할 수 있습니다.</description>
|
||||
<description xml:lang="zh-CN">对其排序对象可进行升序/降序方式排序。</description>
|
||||
<description xml:lang="jp">ソートタイプを、降順、昇順にソートできます。</description>
|
||||
<description xml:lang="jp">ソート方法を、降順、昇順にできます。</description>
|
||||
<description xml:lang="en">You can sort target articles by asending or desending order.</description>
|
||||
<description xml:lang="es">Usted puede ordenar los documentos en orden acendente o en orden descendente.</description>
|
||||
<default>asc</default>
|
||||
|
|
@ -112,7 +121,7 @@
|
|||
<title xml:lang="en">Title of Board</title>
|
||||
<description xml:lang="ko">게시판의 제목을 적어주세요.</description>
|
||||
<description xml:lang="jp">掲示板タイトルを入力してください。</description>
|
||||
<description xml:lang="zh-CN">请输入版面标题。(留空为不显示)</description>
|
||||
<description xml:lang="zh-CN">请输入版面标题(留空为不显示)。</description>
|
||||
<description xml:lang="en">Plase input the title of board.</description>
|
||||
</var>
|
||||
<var name="sub_title" type="text">
|
||||
|
|
@ -121,18 +130,18 @@
|
|||
<title xml:lang="zh-CN">版面副标题</title>
|
||||
<title xml:lang="en">Subtitle of Board</title>
|
||||
<description lang="ko">게시판 제목 옆에 나타날 부제목을 적어주세요.</description>
|
||||
<description lang="jp">掲示板タイトルの横表示されるサブタイトルを入力してください。</description>
|
||||
<description lang="zh-CN">请输入显示在版面标题旁的副标题。(留空为不显示)</description>
|
||||
<description lang="jp">掲示板タイトルの横に表示されるサブタイトルを入力してください。</description>
|
||||
<description lang="zh-CN">请输入版面副标题(留空为不显示)。</description>
|
||||
<description lang="en">Please input the subtitle of board which will be displayed beside of board title.</description>
|
||||
</var>
|
||||
<var name="comment" type="textarea">
|
||||
<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">Description of Board</title>
|
||||
<description lang="ko">게시판 제목 아래 표시될 설명을 입력하실 수 있습니다.</description>
|
||||
<description lang="jp">掲示板タイトルの下に表示される説明文入力してください。</description>
|
||||
<description lang="zh-CN">请输入显示在版面标题下的说明。(留空为不显示)</description>
|
||||
<description lang="jp">掲示板タイトルの下に表示される説明文を入力してください。</description>
|
||||
<description lang="zh-CN">请输入版面说明(留空为不显示)。</description>
|
||||
<description lang="en">You may input description which will be displayed under the board title.</description>
|
||||
</var>
|
||||
<var name="subject_cut_size" type="text">
|
||||
|
|
@ -142,7 +151,7 @@
|
|||
<title xml:lang="en">Length of Subject</title>
|
||||
<description lang="ko">제목 글자수를 지정할 수 있습니다. (0또는 비워주시면 자르지 않습니다)</description>
|
||||
<description lang="jp">タイトルの文字数が指定できます(「0」または空欄の場合は、文字数を制限しません)。</description>
|
||||
<description lang="zh-CN">可以指定标题字数。(0或留空为不限)</description>
|
||||
<description lang="zh-CN">可以指定标题字数(0或留空为不限)。</description>
|
||||
<description lang="en">You may set length of title. (0 or blank value will not restrict the length)</description>
|
||||
</var>
|
||||
<var name="display_number" type="select">
|
||||
|
|
@ -175,7 +184,7 @@
|
|||
<var name="display_readed_count" type="select">
|
||||
<title xml:lang="ko">조회수 표시</title>
|
||||
<title xml:lang="jp">照合数表示</title>
|
||||
<title xml:lang="zh-CN">显示查看数</title>
|
||||
<title xml:lang="zh-CN">显示查看</title>
|
||||
<title xml:lang="en">Display Hit</title>
|
||||
<default>Y</default>
|
||||
<default>N</default>
|
||||
|
|
@ -184,7 +193,7 @@
|
|||
<var name="display_voted_count" type="select">
|
||||
<title xml:lang="ko">추천수 표시</title>
|
||||
<title xml:lang="jp">推薦数表示</title>
|
||||
<title xml:lang="zh-CN">显示推荐数</title>
|
||||
<title xml:lang="zh-CN">显示推荐</title>
|
||||
<title xml:lang="en">Display Votes</title>
|
||||
<default>Y</default>
|
||||
<default>N</default>
|
||||
|
|
@ -201,33 +210,41 @@
|
|||
</var>
|
||||
<var name="duration_new" type="text">
|
||||
<title xml:lang="ko">new표시 시간 (hours)</title>
|
||||
<title xml:lang="jp">Newの表示時間 (Hours)</title>
|
||||
<title xml:lang="zh-CN">new图标显示时间(hours)</title>
|
||||
<title xml:lang="en">Duration of indication for new item</title>
|
||||
<description xml:lang="ko">새로 등록된 게시물의 new 표시시간을 정할 수 있습니다. </description>
|
||||
<description xml:lang="jp">新しく登録された書き込みに対して「New」の表示時間を設定します。 </description>
|
||||
<description xml:lang="zh-CN">可以设置最新更新主题的new图标显示时间。</description>
|
||||
<description xml:lang="en">You may set the duration of indication for fresh item. </description>
|
||||
<default>24</default>
|
||||
</var>
|
||||
<var name="thumbnail_type" type="select">
|
||||
<title xml:lang="ko">썸네일 생성 방법</title>
|
||||
<title xml:lang="jp">サムネール生成方法</title>
|
||||
<title xml:lang="zh-CN">缩略图生成方式</title>
|
||||
<description xml:lang="ko">썸네일 생성 방법을 선택할 수 있습니다. (crop : 꽉 채우기, ratio : 비율 맞추기)</description>
|
||||
<description xml:lang="zh-CN">可以选择缩略图生成方式。 (crop : 裁减, ratio : 比例)</description>
|
||||
<description xml:lang="jp">サムネールの生成方法を選択します(Crop : 切り取り, Ratio : 比率)。</description>
|
||||
<description xml:lang="zh-CN">可以选择缩略图生成方式(crop : 裁减, ratio : 比例)。</description>
|
||||
<default>crop</default>
|
||||
<default>ratio</default>
|
||||
</var>
|
||||
<var name="thumbnail_width" type="text">
|
||||
<title xml:lang="ko">썸네일 가로크기</title>
|
||||
<title xml:lang="jp">サムネールの横幅</title>
|
||||
<title xml:lang="zh-CN">缩略图宽度</title>
|
||||
<description xml:lang="ko">썸네일의 가로 크기를 지정할 수 있습니다. (기본 100px)</description>
|
||||
<description xml:lang="zh-CN">可以指定缩略图宽度。 (默认为 100px)</description>
|
||||
<description xml:lang="jp">サムネールの横幅を指定します(デフォルト 100px)。</description>
|
||||
<description xml:lang="zh-CN">可以指定缩略图宽度(默认为 100px)。</description>
|
||||
<default>100</default>
|
||||
</var>
|
||||
<var name="thumbnail_height" type="text">
|
||||
<title xml:lang="ko">썸네일 세로크기</title>
|
||||
<title xml:lang="jp">サムネールの縦幅</title>
|
||||
<title xml:lang="zh-CN">缩略图高度</title>
|
||||
<description xml:lang="ko">썸네일의 세로 크기를 지정할 수 있습니다. (기본 100px)</description>
|
||||
<description xml:lang="zh-CN">可以指定缩略图高度。 (默认为 100px)</description>
|
||||
<description xml:lang="jp">サムネールの縦幅を指定します(デフォルト 100px)。</description>
|
||||
<description xml:lang="zh-CN">可以指定缩略图高度(默认为 100px)。</description>
|
||||
<default>100</default>
|
||||
</var>
|
||||
</extra_vars>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
<tr>
|
||||
<!--@if($grant->is_admin)-->
|
||||
<th scope="col" class="checkbox{$no_line_class}">
|
||||
<input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" />
|
||||
<input type="checkbox" onclick="clickCheckBoxAll(this.form, 'cart'); return false;" />
|
||||
</th>
|
||||
{@ $no_line_class=""}
|
||||
<!--@end-->
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<div class="boardSubMenu">
|
||||
<!--@if($module_info->use_category == "Y")-->
|
||||
<div class="fl">
|
||||
<!--@if($grant->is_admin)--><input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" /><!--@end-->
|
||||
<!--@if($grant->is_admin)--><input type="checkbox" onclick="clickCheckBoxAll(this.form, 'cart'); return false;" /><!--@end-->
|
||||
<!-- 카테고리 사용시 카테고리 선택 표시 -->
|
||||
<select name="category" id="board_category">
|
||||
<option value="">{$lang->category}</option>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
<strong class="category">{$category_list[$document->get('category_srl')]->title}</strong>
|
||||
<!--@end-->
|
||||
|
||||
<a href="{getUrl('document_srl',$document->document_srl, 'listStyle', $listStyle)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
|
||||
<a href="{getUrl('document_srl',$document->document_srl, 'listStyle', $listStyle)}">{$document->getTitle($module_info->subject_cut_size)}</a>
|
||||
|
||||
<!--@if($document->getCommentCount())-->
|
||||
<span class="replyAndTrackback" title="Replies"><img src="./images/common/iconReply.gif" alt="" width="12" height="12" class="icon" /> <strong>{$document->getCommentCount()}</strong></span>
|
||||
|
|
@ -110,7 +110,7 @@
|
|||
<input type="checkbox" name="cart" value="{$document->document_srl}" onclick="doAddDocumentCart(this)" <!--@if($document->isCarted())-->checked="checked"<!--@end--> />
|
||||
<!--@end-->
|
||||
|
||||
<a href="{getUrl('document_srl',$document->document_srl, 'listStyle', $listStyle)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
|
||||
<a href="{getUrl('document_srl',$document->document_srl, 'listStyle', $listStyle)}">{$document->getTitle($module_info->subject_cut_size)}</a>
|
||||
|
||||
<!--@if($document->getCommentCount())-->
|
||||
<span class="replyAndTrackback" title="Replies">(<strong>{$document->getCommentCount()}</strong>)</span>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
<tr>
|
||||
<!--@if($module_info->display_number!='N')--><th scope="col" class="num{$no_line_class}">{$lang->no}</th>{@ $no_line_class=""}<!--@end-->
|
||||
|
||||
<!--@if($grant->is_admin)--><th scope="col" class="checkbox{$no_line_class}"><input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" /></th>{@ $no_line_class=""}<!--@end-->
|
||||
<!--@if($grant->is_admin)--><th scope="col" class="checkbox{$no_line_class}"><input type="checkbox" onclick="clickCheckBoxAll(this.form, 'cart'); return false;" /></th>{@ $no_line_class=""}<!--@end-->
|
||||
|
||||
<th scope="col" class="<!--@if($module_info->use_category == 'Y')-->category<!--@else-->title<!--@end-->{$no_line_class}">
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
<tr>
|
||||
<!--@if($module_info->display_number!='N')--><th scope="col" class="num{$no_line_class}">{$lang->no}</th>{@ $no_line_class=""}<!--@end-->
|
||||
|
||||
<!--@if($grant->is_admin)--><th scope="col" class="checkbox{$no_line_class}"><input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" /></th>{@ $no_line_class=""}<!--@end-->
|
||||
<!--@if($grant->is_admin)--><th scope="col" class="checkbox{$no_line_class}"><input type="checkbox" onclick="clickCheckBoxAll(this.form, 'cart'); return false;" /></th>{@ $no_line_class=""}<!--@end-->
|
||||
|
||||
<th scope="col" colspan="2" class="<!--@if($module_info->use_category=='Y')-->category<!--@else-->title<!--@end-->{$no_line_class}">
|
||||
|
||||
|
|
@ -123,6 +123,7 @@
|
|||
<!--@if($module_info->display_last_update=='Y')--><td class="date">{zdate($document->get('last_update'),'Y-m-d H:i')}</td><!--@end-->
|
||||
</tr>
|
||||
{@ $_col_count = 1; }
|
||||
<!--@if(!$document->thumbnailExists($module_info->thumbnail_width, $module_info->thumbnail_height, $module_info->thumbnail_type))-->{@ $_col_count++}<!--@end-->
|
||||
<!--@if($module_info->display_author!='N')-->{@ $_col_count++ }<!--@end-->
|
||||
<!--@if($module_info->display_readed_count!='N')-->{@ $_col_count++ }<!--@end-->
|
||||
<!--@if($module_info->display_voted_count!='N')-->{@ $_col_count++ }<!--@end-->
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@
|
|||
* @brief コメント(comment) モジュールの基本言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = '이 댓글을..';
|
||||
$lang->cmd_comment_do = 'このコメントを..';
|
||||
|
||||
$lang->comment_list = '댓글 목록';
|
||||
$lang->comment_list = 'コメントリスト';
|
||||
$lang->cmd_delete_checked_comment = '選択項目削除';
|
||||
|
||||
$lang->msg_cart_is_null = '削除するコメントを選択してください';
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
* @brief 评论(comment)模块语言包
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = '把评论..';
|
||||
$lang->cmd_comment_do = '将把此评论..';
|
||||
|
||||
$lang->comment_list = '评论目录';
|
||||
$lang->cmd_toggle_checked_comment = '反选';
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
|
||||
<!-- 버튼 -->
|
||||
<div class="fr gap1">
|
||||
<a href="javascript:checkboxSelectAll('fo_list', 'cart', true)" class="button"><span>{$lang->cmd_select_all}</span></a>
|
||||
<a href="javascript:checkboxSelectAll('fo_list', 'cart', false)" class="button"><span>{$lang->cmd_unselect_all}</span></a>
|
||||
<a href="javascript:checkboxSelectAll('fo_list', 'cart')" class="button"><span>{$lang->cmd_reverse_all}</span></a>
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_delete_checked_comment}" /></span>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
'hour' => '按时',
|
||||
'day' => '按天',
|
||||
'month' => '按月',
|
||||
'year' => '按年度',
|
||||
'year' => '按年',
|
||||
);
|
||||
|
||||
$lang->total_counter = '总揽';
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<title xml:lang="en">Document</title>
|
||||
<title xml:lang="es">Documento</title>
|
||||
<title xml:lang="zh-CN">主题</title>
|
||||
<title xml:lang="jp">コンテンツ</title>
|
||||
<title xml:lang="jp">コンテンツ(ドキュメント)</title>
|
||||
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
|
||||
<name xml:lang="ko">제로</name>
|
||||
<name xml:lang="en">Zero</name>
|
||||
|
|
@ -15,6 +15,6 @@
|
|||
<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>
|
||||
</author>
|
||||
</module>
|
||||
|
|
|
|||
|
|
@ -29,11 +29,11 @@
|
|||
$oDB->addIndex("documents","idx_module_update_order", array("module_srl","update_order"));
|
||||
$oDB->addIndex("documents","idx_module_readed_count", array("module_srl","readed_count"));
|
||||
$oDB->addIndex("documents","idx_module_voted_count", array("module_srl","voted_count"));
|
||||
$oDB->addIndex("documents","idx_module_notice", array("module_srl","is_notice"));
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가
|
||||
$oModuleController->insertTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after');
|
||||
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
|
|
@ -81,6 +81,9 @@
|
|||
if(!$oDB->isColumnExists("document_categories","expand")) return true;
|
||||
if(!$oDB->isColumnExists("document_categories","group_srls")) return true;
|
||||
|
||||
// 2007. 11. 20 게시글에 module_srl + is_notice 복합인덱스 만들기
|
||||
if(!$oDB->isIndexExists("documents","idx_module_notice")) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -151,6 +154,9 @@
|
|||
if(!$oDB->isColumnExists("document_categories","expand")) $oDB->addColumn('document_categories',"expand","char",1,"N");
|
||||
if(!$oDB->isColumnExists("document_categories","group_srls")) $oDB->addColumn('document_categories',"group_srls","text");
|
||||
|
||||
// 2007. 11. 20 게시글에 module_srl + is_notice 복합인덱스 만들기
|
||||
if(!$oDB->isIndexExists("documents","idx_module_notice")) $oDB->addIndex("documents","idx_module_notice", array("module_srl","is_notice"));
|
||||
|
||||
return new Object(0,'success_updated');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -116,7 +116,6 @@
|
|||
// 수동입력을 대비해서 비밀번호의 hash상태를 점검, 수동입력이 아니면 무조건 md5 hash
|
||||
if($obj->password && !$obj->password_is_hashed) $obj->password = md5($obj->password);
|
||||
|
||||
|
||||
// 수동 등록이 아니고 로그인 된 회원일 경우 회원의 정보를 입력
|
||||
if(Context::get('is_logged')&&!$manual_inserted) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
|
|
|||
|
|
@ -457,7 +457,7 @@
|
|||
|
||||
$buff = null;
|
||||
foreach($buffs as $key => $val) {
|
||||
$buff .= sprintf('<img src="%s%s.gif" alt="%s" title="%s" align="absmiddle"/>', $path, $val, $val, $val);
|
||||
$buff .= sprintf('<img src="%s%s.gif" alt="%s" title="%s" style="vertical-align:middle;"/>', $path, $val, $val, $val);
|
||||
}
|
||||
return $buff;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,25 +5,25 @@
|
|||
* @brief Document module's basic language pack
|
||||
**/
|
||||
|
||||
$lang->document_list = 'Document list';
|
||||
$lang->document_list = 'Documents List';
|
||||
$lang->thumbnail_type = 'Thumbnail Type';
|
||||
$lang->thumbnail_crop = 'Crop';
|
||||
$lang->thumbnail_ratio = 'Ratio';
|
||||
$lang->cmd_delete_all_thumbnail = 'Delete all thumbnails';
|
||||
$lang->move_target_module = "Target module for changing position";
|
||||
$lang->title_bold = '제목 굵게';
|
||||
$lang->title_color = '제목 색깔';
|
||||
$lang->move_target_module = "Target module ";
|
||||
$lang->title_bold = 'Bold';
|
||||
$lang->title_color = 'Color';
|
||||
|
||||
$lang->cmd_temp_save = '임시 저장';
|
||||
$lang->cmd_temp_save = 'Temporary Save';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Reverse selected items';
|
||||
$lang->cmd_delete_checked_document = 'Delete selected';
|
||||
$lang->cmd_document_do = '이 게시물을..';
|
||||
$lang->cmd_document_do = 'You would..';
|
||||
|
||||
$lang->msg_cart_is_null = 'Select the articles you wish to delete';
|
||||
$lang->msg_category_not_moved = 'Unabled to move';
|
||||
$lang->msg_cart_is_null = 'Please select the articles to delete';
|
||||
$lang->msg_category_not_moved = 'Cannot move';
|
||||
$lang->msg_is_secret = 'This article is secret';
|
||||
$lang->msg_checked_document_is_deleted = 'Total of %d articles has been deleted';
|
||||
$lang->msg_checked_document_is_deleted = 'Total of %d article(s) was(were) deleted';
|
||||
|
||||
// Search targets in admin page
|
||||
$lang->search_target_list = array(
|
||||
|
|
@ -31,18 +31,18 @@
|
|||
'content' => 'Content',
|
||||
'user_id' => 'User ID',
|
||||
'member_srl' => 'Member No.',
|
||||
'user_name' => 'Content',
|
||||
'nick_name' => 'Content',
|
||||
'user_name' => 'User Name',
|
||||
'nick_name' => 'Nickname',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Homepage',
|
||||
'is_notice' => 'Notice',
|
||||
'is_secret' => 'Secret',
|
||||
'tags' => 'Tag',
|
||||
'readed_count' => 'Number of Views (Above)',
|
||||
'voted_count' => 'Number of Votes (Above)',
|
||||
'comment_count ' => 'Number of Comments (Above)',
|
||||
'trackback_count ' => 'Number of trackbacks (Above)',
|
||||
'uploaded_count ' => 'Number of Attachments (Above)',
|
||||
'readed_count' => 'Number of Views (Over)',
|
||||
'voted_count' => 'Number of Votes (Over)',
|
||||
'comment_count ' => 'Number of Comments (Over)',
|
||||
'trackback_count ' => 'Number of trackbacks (Over)',
|
||||
'uploaded_count ' => 'Number of Attachments (Over)',
|
||||
'regdate' => 'Date',
|
||||
'last_update' => 'Last Revised',
|
||||
'ipaddress' => 'IP Address',
|
||||
|
|
|
|||
|
|
@ -5,20 +5,20 @@
|
|||
* @brief ドキュメント(document)モジュルの基本言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->document_list = 'Document list';
|
||||
$lang->thumbnail_type = 'Thumbnail Type';
|
||||
$lang->document_list = 'ドキュメントリスト';
|
||||
$lang->thumbnail_type = 'サムネールタイプ';
|
||||
$lang->thumbnail_crop = 'Crop';
|
||||
$lang->thumbnail_ratio = 'Ratio';
|
||||
$lang->cmd_delete_all_thumbnail = 'Delete all thumbnails';
|
||||
$lang->cmd_delete_all_thumbnail = 'すべてのサムネール削除';
|
||||
$lang->move_target_module = "移動対象モジュール";
|
||||
$lang->title_bold = '제목 굵게';
|
||||
$lang->title_color = '제목 색깔';
|
||||
$lang->title_bold = 'タイトル太字';
|
||||
$lang->title_color = 'タイトル文字色';
|
||||
|
||||
$lang->cmd_temp_save = '臨時保存';
|
||||
|
||||
$lang->cmd_temp_save = '임시 저장';
|
||||
|
||||
$lang->cmd_toggle_checked_document = '선택항목 반전';
|
||||
$lang->cmd_toggle_checked_document = '選択項目反転';
|
||||
$lang->cmd_delete_checked_document = '選択項目削除';
|
||||
$lang->cmd_document_do = '이 게시물을..';
|
||||
$lang->cmd_document_do = 'この書き込みを..';
|
||||
|
||||
$lang->msg_cart_is_null = '削除する書き込みを選択してください。';
|
||||
$lang->msg_category_not_moved = '移動することができません。';
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
$lang->msg_is_secret = '비밀글입니다';
|
||||
$lang->msg_checked_document_is_deleted = '%d개의 글이 삭제되었습니다';
|
||||
|
||||
$lang->move_target_module = "이동 대상 모듈";
|
||||
$lang->move_target_module = "대상 모듈";
|
||||
|
||||
// 관리자 페이지에서 검색할 대상
|
||||
$lang->search_target_list = array(
|
||||
|
|
@ -32,8 +32,8 @@
|
|||
'content' => '내용',
|
||||
'user_id' => '아이디',
|
||||
'member_srl' => '회원번호',
|
||||
'user_name' => '내용',
|
||||
'nick_name' => '내용',
|
||||
'user_name' => '사용자 이름',
|
||||
'nick_name' => '닉네임',
|
||||
'email_address' => '이메일',
|
||||
'homepage' => '홈페이지',
|
||||
'is_notice' => '공지사항',
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@
|
|||
$lang->thumbnail_ratio = '比例';
|
||||
$lang->cmd_delete_all_thumbnail = '删除全部缩略图';
|
||||
$lang->move_target_module = "移动目标模块";
|
||||
$lang->title_bold = '标题粗体';
|
||||
$lang->title_bold = '粗标题';
|
||||
$lang->title_color = '标题颜色';
|
||||
|
||||
$lang->cmd_temp_save = '임시 저장';
|
||||
$lang->cmd_temp_save = '临时保存';
|
||||
|
||||
$lang->cmd_toggle_checked_document = '反选';
|
||||
$lang->cmd_delete_checked_document = '删除所选';
|
||||
$lang->cmd_document_do = '把文章..';
|
||||
$lang->cmd_document_do = '将把此主题..';
|
||||
|
||||
$lang->msg_cart_is_null = '请选择要删除的文章。';
|
||||
$lang->msg_category_not_moved = '不能移动!';
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
<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"><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="w200">
|
||||
|
|
|
|||
|
|
@ -32,4 +32,4 @@ img.color_icon_over {
|
|||
|
||||
.editor_color_box { clear:both; height:65px; width:400px; border:1px solid #DDDDDD; padding:2px; }
|
||||
|
||||
.image_list { width:100%; border:1px solid #EEEEEE; }
|
||||
.image_list { width:100%; border:1px solid #EEEEEE; height:200px !important; }
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
</div>
|
||||
<ul class="buttonLeft">
|
||||
<li><img src="./images/border_solid.gif" alt="blank" class="border_preview_color" id="border_preview_color" /></li>
|
||||
<li>#<input type="text" id="border_color_input" size="6" maxlength="6" class="inputTypeText" value="000000" onkeyup="manual_select_color('border',this)"/></li>
|
||||
<li>#<input type="text" id="border_color_input" size="7" maxlength="6" class="inputTypeText" value="000000" onkeyup="manual_select_color('border',this)"/></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
</div>
|
||||
<ul class="buttonLeft">
|
||||
<li><img src="./images/blank.gif" alt="blank" class="bg_preview_color" id="bg_preview_color" /></li>
|
||||
<li>#<input type="text" id="bg_color_input" size="6" maxlength="6" class="inputTypeText" value="FFFFFF" onkeyup="manual_select_color('bg',this)"/></li>
|
||||
<li>#<input type="text" id="bg_color_input" size="7" maxlength="6" class="inputTypeText" value="FFFFFF" onkeyup="manual_select_color('bg',this)"/></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<description xml:lang="ko">에디터에 이미지를 추가하거나 속성을 변경할 수 있습니다.</description>
|
||||
<description xml:lang="jp">エディターにイメージを追加したり、属性を変更したりすることができます。</description>
|
||||
<description xml:lang="jp">エディターでイメージを追加したり、属性を変更したりすることができます。</description>
|
||||
<description xml:lang="zh-CN">可以插入图像或编辑其相应属性。</description>
|
||||
<description xml:lang="en">It can add an image to editor or change the attribution of image.</description>
|
||||
</author>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
<tr>
|
||||
<th scope="row">{$lang->image_url}</th>
|
||||
<td><input type="text" id="image_url" value="{url_decode($manual_url)}" onblur="getImageScale();" class="inputTypeText w100" /></td>
|
||||
<td><input type="text" id="image_url" value="{url_decode($manual_url)}" onblur="getImageScale();" class="inputTypeText w400" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->image_scale}</th>
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<th scope="row">URL</th>
|
||||
<td><input type="text" id="link_url" value="" class="inputTypeText w100"/></td>
|
||||
<td><input type="text" id="link_url" value="" class="inputTypeText w400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->urllink_open_window}</th>
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->image_alt}</th>
|
||||
<td><input type="text" id="image_alt" value="" class="inputTypeText w100"/></td>
|
||||
<td><input type="text" id="image_alt" value="" class="inputTypeText w400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->image_align}</th>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<description xml:lang="ko">에디터에 wmv,avi,flv등의 멀티미디어 자료를 추가하거나 속성을 수정할 수 있습니다.</description>
|
||||
<description xml:lang="jp">エディターに拡張子が「wmv,avi,flv」などのマルチメディアコンテンツを追加したり、属性を修正したりすることができます。</description>
|
||||
<description xml:lang="jp">エディターで拡張子が「wmv,avi,flv」などのマルチメディアコンテンツを追加したり、属性を修正したりすることができます。</description>
|
||||
<description xml:lang="zh-CN">插入wmv,avi,flv等多媒体文件或修改其相应属性 。</description>
|
||||
<description xml:lang="en">It can add multimedia data like wmv,avi,flv to editor or change the attribution of multimedia data.</description>
|
||||
</author>
|
||||
|
|
|
|||
|
|
@ -13,11 +13,11 @@
|
|||
<col />
|
||||
<tr>
|
||||
<th scope="row">{$lang->multimedia_url}</th>
|
||||
<td><input type="text" class="inputTypeText w100" id="multimedia_url" value="{$manual_url}" /></td>
|
||||
<td><input type="text" class="inputTypeText w400" id="multimedia_url" value="{$manual_url}" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->multimedia_caption}</th>
|
||||
<td><input type="text" class="inputTypeText w100" id="multimedia_caption" value="" /></td>
|
||||
<td><input type="text" class="inputTypeText w400" id="multimedia_caption" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->multimedia_width}</th>
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
"실선",
|
||||
"점선",
|
||||
"좌측 실선",
|
||||
"우측 실선",
|
||||
"좌측 점선",
|
||||
);
|
||||
|
||||
$lang->quotation_bg_color = "배경 색";
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<description xml:lang="ko">에디터에 표(table)을 생성하거나 표(table) 또는 칸(td)의 속성을 변경할 수 있습니다.</description>
|
||||
<description xml:lang="jp">エディターにテーブル(table)を作成したり、テーブル(table)またはセル(td)の属性を変更したりすることができます。</description>
|
||||
<description xml:lang="jp">エディターでテーブル(table)を作成したり、テーブル(table)またはセル(td)の属性を変更したりすることができます。</description>
|
||||
<description xml:lang="zh-CN">插入表格(table)或编辑表格属性。</description>
|
||||
<description xml:lang="en">It can create a table on editor or modify the attribution of table or td.</description>
|
||||
</author>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<description xml:lang="ko">에디터에 링크를 추가하거나 링크의 속성을 변경할 수 있습니다.</description>
|
||||
<description xml:lang="jp">エディターにリンクを追加したり、属性を変更したりすることができます。</description>
|
||||
<description xml:lang="jp">エディターでリンクを追加したり、属性を変更したりすることができます。</description>
|
||||
<description xml:lang="zh-CN">插入链接或编辑链接属性。</description>
|
||||
<description xml:lang="en">It can add a link to editor or modify the attribution of link.</description>
|
||||
</author>
|
||||
|
|
|
|||
|
|
@ -15,11 +15,11 @@
|
|||
|
||||
<tr>
|
||||
<th scope="row">{$lang->urllink_title}</th>
|
||||
<td><input type="text" name="text" class="inputTypeText w100" /></td>
|
||||
<td><input type="text" name="text" class="inputTypeText w400" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->urllink_url}</th>
|
||||
<td><input type="text" name="url" class="inputTypeText w100" value="{$manual_url}"/></td>
|
||||
<td><input type="text" name="url" class="inputTypeText w400" value="{$manual_url}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->urllink_open_window}</th>
|
||||
|
|
|
|||
|
|
@ -60,9 +60,13 @@
|
|||
if(!$option->enable_component) $enable_component = false;
|
||||
else $enable_component = true;
|
||||
|
||||
// html 모드 조절
|
||||
if($option->disable_html) $html_mode = false;
|
||||
else $html_mode = true;
|
||||
|
||||
// 크기 조절 옵션 설정
|
||||
if(!$option->resizable) $resizable = 'false';
|
||||
else $resizable = 'true';
|
||||
if(!$option->resizable) $resizable = false;
|
||||
else $resizable = true;
|
||||
|
||||
// 높이 설정
|
||||
if(!$option->height) $editor_height = 400;
|
||||
|
|
@ -131,6 +135,7 @@
|
|||
|
||||
// 내용을 sync 맞추기 위한 content column name을 세팅한다
|
||||
Context::set('editor_content_key_name', $option->content_key_name);
|
||||
|
||||
|
||||
/**
|
||||
* 에디터 컴포넌트 체크
|
||||
|
|
@ -144,6 +149,11 @@
|
|||
Context::set('enable_component', $enable_component);
|
||||
Context::set('enable_default_component', $enable_default_component);
|
||||
|
||||
/**
|
||||
* html_mode 가능한지 변수 설정
|
||||
**/
|
||||
Context::set('html_mode', $html_mode);
|
||||
|
||||
/**
|
||||
* resizable 가능한지 변수 설정
|
||||
**/
|
||||
|
|
@ -154,6 +164,9 @@
|
|||
**/
|
||||
Context::set('editor_height', $editor_height);
|
||||
|
||||
// 에디터의 초기화를 수동으로하는 것에 대한 값 체크
|
||||
Context::set('editor_manual_start', $option->manual_start);
|
||||
|
||||
/**
|
||||
* 템플릿을 미리 컴파일해서 컴파일된 소스를 하기 위해 스킨의 경로를 설정
|
||||
**/
|
||||
|
|
|
|||
|
|
@ -21,13 +21,13 @@
|
|||
|
||||
.xeEditor .editorInfo { background:#fbfbfb; 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:10px; margin:0 20px 0 20px; }
|
||||
.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_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:5px 20px 5px 20px; overflow:hidden;}
|
||||
.xeEditor .editor_info { clear:both; padding:10px 20px 5px 20px; overflow:hidden;}
|
||||
.xeEditor .editor_info .editor_option { float:left; color:#888888; }
|
||||
.xeEditor .editor_info .editor_autosaved_message { color:#888888; float:right; }
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,10 @@
|
|||
<script type="text/javascript">//<![CDATA[
|
||||
var editor_path = "{$editor_path}";
|
||||
var auto_saved_msg = "{$lang->msg_auto_saved}";
|
||||
xAddEventListener(window, 'load', function() { editorStart("{$editor_sequence}", "{$editor_primary_key_name}", "{$editor_content_key_name}", {$enable_resizable}, '{$editor_height}' ) } );
|
||||
|
||||
<!--@if(!$editor_manual_start)-->
|
||||
xAddEventListener(window, 'load', function() { editorStart("{$editor_sequence}", "{$editor_primary_key_name}", "{$editor_content_key_name}", '{$editor_height}' ) } );
|
||||
<!--@end-->
|
||||
//]]></script>
|
||||
|
||||
<!-- 자동저장용 폼 -->
|
||||
|
|
@ -126,19 +129,27 @@
|
|||
<!--@end-->
|
||||
|
||||
<!-- HTML 모드 사용 기능 및 자동저장 메세지 출력용 -->
|
||||
<!--@if($html_mode || $enable_autosave)-->
|
||||
<div class="editor_info">
|
||||
<!--@if($html_mode)-->
|
||||
<div class="editor_option">
|
||||
<input type="checkbox" id="use_html_{$editor_sequence}" value="Y" onclick="editorChangeMode(this, '{$editor_sequence}');" /> <label for="use_html_{$editor_sequence}">HTML</label>
|
||||
</div>
|
||||
<!--@end-->
|
||||
<!--@if($enable_autosave)-->
|
||||
<div class="editor_autosaved_message" id="editor_autosaved_message_{$editor_sequence}"> </div>
|
||||
<!--@end-->
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 에디터 출력 -->
|
||||
<div class="editor_iframe_box"><iframe id="editor_iframe_{$editor_sequence}" frameborder="0" width="100%" 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;"></iframe></div>
|
||||
<textarea id="editor_textarea_{$editor_sequence}" class="editor_iframe_textarea" style="display:none; height:{$editor_height}" rows="10" cols="10"></textarea>
|
||||
|
||||
<!-- 에디터 크기 조절 bar -->
|
||||
<!--@if($enable_resizable)-->
|
||||
<div class="textAreaDragIndicator"><div class="textAreaDragIndicatorBar" id="editor_drag_bar_{$editor_sequence}"></div></div>
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($allow_fileupload)-->
|
||||
<!-- 첨부파일 영역 -->
|
||||
|
|
@ -146,17 +157,17 @@
|
|||
<script type="text/javascript">//<![CDATA[
|
||||
var zbxe_session_name = "{session_name()}";
|
||||
var uploader_setting = { "allowed_filesize" : "{$file_config->allowed_filesize}", "allowed_filetypes" : "{$file_config->allowed_filetypes}", "allowed_filetypes_description" : "{$file_config->allowed_filetypes}" }
|
||||
<!--@if(!$editor_manual_start)-->
|
||||
editor_upload_init("{$editor_sequence}");
|
||||
<!--@end-->
|
||||
//]]></script>
|
||||
|
||||
<div class="fileAttach">
|
||||
<div class="preview" id="preview_uploaded_{$editor_sequence}">
|
||||
<img src="./images/blank.gif" alt="preview" width="100" height="100" />
|
||||
</div>
|
||||
<div class="preview" id="preview_uploaded_{$editor_sequence}"><img src="./images/blank.gif" alt="preview" width="100" height="100" /></div>
|
||||
|
||||
<!-- 파일 업로드 영역 -->
|
||||
<div class="fileListArea">
|
||||
<select id="uploaded_file_list_{$editor_sequence}" multiple="multiple" size="8" class="fileList" onclick="editor_preview(this, '{$editor_sequence}');"></select>
|
||||
<select id="uploaded_file_list_{$editor_sequence}" multiple="multiple" size="5" class="fileList" onclick="editor_preview(this, '{$editor_sequence}');"></select>
|
||||
<span class="file_attach_info" id="uploader_status_{$editor_sequence}">{$upload_status}</span>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<skin>
|
||||
<title xml:lang="ko">제로보드XE 기본 에디터</title>
|
||||
<title xml:lang="zh-CN">Zeroboard XE编辑器默认皮肤</title>
|
||||
<title xml:lang="jp">ゼロボードXE基本エディター</title>
|
||||
<maker email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
|
||||
<name xml:lang="ko">zero</name>
|
||||
<name xml:lang="zh-CN">Zero</name>
|
||||
<name xml:lang="jp">Zero</name>
|
||||
<description xml:lang="ko">
|
||||
개발 : zero (http://www.zeroboard.com)
|
||||
</description>
|
||||
<description xml:lang="zh-CN">
|
||||
程序 : zero (http://www.zeroboard.com)
|
||||
</description>
|
||||
<description xml:lang="jp">
|
||||
開発 : Zero (http://www.zeroboard.com)
|
||||
</description>
|
||||
</maker>
|
||||
</skin>
|
||||
|
|
|
|||
|
|
@ -95,15 +95,11 @@ function editorGetSelectedNode(editor_sequence) {
|
|||
/**
|
||||
* editor 시작 (editor_sequence로 iframe객체를 얻어서 쓰기 모드로 전환)
|
||||
**/
|
||||
function editorStart(editor_sequence, primary_key, content_key, resizable, editor_height) {
|
||||
// resize 가/불가에 대한 체크
|
||||
if(typeof(resizable)=="undefined"||!resizable) resizable = false;
|
||||
else resizable = true;
|
||||
|
||||
function editorStart(editor_sequence, primary_key, content_key, editor_height) {
|
||||
// iframe obj를 찾음
|
||||
var iframe_obj = editorGetIFrame(editor_sequence);
|
||||
if(!iframe_obj) return;
|
||||
xWidth(iframe_obj, xWidth(iframe_obj.parentNode)-30);
|
||||
xWidth(iframe_obj, xWidth(iframe_obj.parentNode)-12);
|
||||
|
||||
// 현 에디터를 감싸고 있는 form문을 찾음
|
||||
var fo_obj = editorGetForm(editor_sequence);
|
||||
|
|
@ -140,13 +136,6 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito
|
|||
// IE가 아니고 내용이 없으면 <br /> 추가 (FF등에서 iframe 선택시 focus를 주기 위한 꽁수)
|
||||
if(!content && !xIE4Up) content = "<br />";
|
||||
|
||||
// 크기 변경 불가일 경우 드래그바 숨김
|
||||
var dragObj = xGetElementById("editor_drag_bar_"+editor_sequence);
|
||||
if(dragObj) {
|
||||
if(resizable == false) dragObj.style.display = "none";
|
||||
else dragObj.style.display = "block";
|
||||
}
|
||||
|
||||
// IE일 경우 ctrl-Enter 안내 문구를 노출
|
||||
var ieHelpObj = xGetElementById("for_ie_help_"+editor_sequence);
|
||||
if(xIE4Up && ieHelpObj) {
|
||||
|
|
@ -158,7 +147,7 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito
|
|||
var contentHtml = ''+
|
||||
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'+
|
||||
'<html lang="ko" xmlns="http://www.w3.org/1999/xhtml><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/>'+
|
||||
'<base href="'+request_uri+'" />'+
|
||||
//'<base href="'+request_uri+'" />'+
|
||||
'<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">'+
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<!--%import("../../../modules/admin/tpl/css/admin.css")-->
|
||||
|
||||
<div id="popHeadder">
|
||||
<h1>{$component->title} ver. {$component->version}</h1>
|
||||
<h3>{$component->title} ver. {$component->version}</h3>
|
||||
</div>
|
||||
|
||||
<div id="popBody">
|
||||
|
|
|
|||
|
|
@ -20,21 +20,21 @@
|
|||
|
||||
$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_filetypes = 'Only allowed extentsions can be attached. To allow an extention, use "*.extention". To allow multiple extentions, use ";" between each extentions.<br />ex) *.* or *.jpg;*.gif;<br />(Excludes 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';
|
||||
$lang->cmd_move_to_document = 'Move to document';
|
||||
$lang->cmd_download = 'Download';
|
||||
|
||||
$lang->msg_not_permitted_download = 'You do not have any permission to download';
|
||||
$lang->msg_cart_is_null = 'Select the file you wish to delete';
|
||||
$lang->msg_checked_file_is_deleted = 'Total of %d attachments has been deleted';
|
||||
$lang->msg_exceeds_limit_size = 'Attachment faild; exceeded the file size limit';
|
||||
$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->search_target_list = array(
|
||||
'filename' => 'File name',
|
||||
'filesize' => 'File size (byte, Above)',
|
||||
'download_count' => 'Downloads (Above)',
|
||||
'filesize' => 'File size (byte, Over)',
|
||||
'download_count' => 'Downloads (Over)',
|
||||
'regdate' => 'Date',
|
||||
'ipaddress' => 'IP Address',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
$lang->allowed_filesize = 'ファイルサイズ制限';
|
||||
$lang->allowed_attach_size = '書き込みへの添付制限';
|
||||
$lang->allowed_filetypes = '添付可能な拡張子';
|
||||
$lang->enable_download_group = '다운로드 가능 그룹';
|
||||
$lang->enable_download_group = 'ダウンロード可能グループ';
|
||||
|
||||
$lang->about_allowed_filesize = '一つのファイルに対して、アップロードできるファイルの最大サイズを指定します(管理者除外)。';
|
||||
$lang->about_allowed_attach_size = '一つの書き込みに対して、添付できる最大サイズを指定します(管理者除外)。';
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
$lang->cmd_move_to_document = '書き込みに移動する';
|
||||
$lang->cmd_download = 'ダウンロード';
|
||||
|
||||
$lang->msg_not_permitted_download = '다운로드 할 수 있는 권한이 없습니다';
|
||||
$lang->msg_not_permitted_download = 'ダウンロード権限がありません。';
|
||||
$lang->msg_cart_is_null = '削除するファイルを選択してください';
|
||||
$lang->msg_checked_file_is_deleted = '%d個の添付ファイルを削除しました';
|
||||
$lang->msg_exceeds_limit_size = 'ファイルサイズの制限を超えたため、添付できません。';
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
$lang->allowed_filesize = '文件大小限制';
|
||||
$lang->allowed_attach_size = '上传限制';
|
||||
$lang->allowed_filetypes = '可用扩展名';
|
||||
$lang->enable_download_group = '다운로드 가능 그룹';
|
||||
$lang->enable_download_group = '允许下载的用户组';
|
||||
|
||||
$lang->about_allowed_filesize = '最大单个上传文件大小(管理员不受此限制)。';
|
||||
$lang->about_allowed_attach_size = '每个主题最大上传文件大小(管理员不受此限制)。';
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
$lang->cmd_move_to_document = '查看源主题';
|
||||
$lang->cmd_download = '下载';
|
||||
|
||||
$lang->msg_not_permitted_download = '다운로드 할 수 있는 권한이 없습니다';
|
||||
$lang->msg_not_permitted_download = '您不具备下载的权限。';
|
||||
$lang->msg_cart_is_null = ' 请选择要删除的文件。';
|
||||
$lang->msg_checked_file_is_deleted = '已删除%d个文件!';
|
||||
$lang->msg_exceeds_limit_size = '已超过系统指定的上传文件大小!';
|
||||
|
|
|
|||
|
|
@ -1,20 +1,22 @@
|
|||
<query id="getOneFileInDocument" action="select">
|
||||
<tables>
|
||||
<table name="files" />
|
||||
<table name="files" alias="files"/>
|
||||
<table name="documents" alias="documents"/>
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="upload_target_srl" />
|
||||
<column name="documents.*" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="in" column="module_srl" var="module_srls" notnull="notnull" filter="numbers" />
|
||||
<condition operation="equal" column="direct_download" var="direct_download" pipe="and" />
|
||||
<condition operation="equal" column="isvalid" var="isvalid" pipe="and" />
|
||||
<condition operation="in" column="files.module_srl" var="module_srls" notnull="notnull" filter="numbers" />
|
||||
<condition operation="equal" column="files.direct_download" var="direct_download" pipe="and" />
|
||||
<condition operation="equal" column="files.isvalid" var="isvalid" pipe="and" />
|
||||
<condition operation="equal" column="files.upload_target_srl" var="documents.document_srl" pipe="and" />
|
||||
</conditions>
|
||||
<groups>
|
||||
<group column="upload_target_srl" />
|
||||
<group column="files.upload_target_srl" />
|
||||
</groups>
|
||||
<navigation>
|
||||
<index var="file_srl" default="file_srl" order="desc" />
|
||||
<index var="list_order" default="documents.list_order" order="asc" />
|
||||
<list_count var="list_count" default="20" />
|
||||
</navigation>
|
||||
</query>
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
|
||||
<!-- 버튼 -->
|
||||
<div class="fr gap1">
|
||||
<a href="javascript:checkboxSelectAll('fo_list', 'cart', true)" class="button"><span>{$lang->cmd_select_all}</span></a>
|
||||
<a href="javascript:checkboxSelectAll('fo_list', 'cart', false)" class="button"><span>{$lang->cmd_unselect_all}</span></a>
|
||||
<a href="javascript:checkboxSelectAll('fo_list', 'cart')" class="button"><span>{$lang->cmd_reverse_all}</span></a>
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_delete_checked_file}" /></span>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -212,23 +212,23 @@
|
|||
**/
|
||||
function procGuestbookVerificationPassword() {
|
||||
// 비밀번호와 문서 번호를 받음
|
||||
$password = md5(Context::get('password'));
|
||||
|
||||
$password = Context::get('password');
|
||||
$document_srl = Context::get('document_srl');
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
$oMemberModel = &getModel('member');
|
||||
|
||||
// comment_srl이 있을 경우 댓글이 대상
|
||||
if($comment_srl) {
|
||||
// 문서번호에 해당하는 글이 있는지 확인
|
||||
$oCommentModel = &getModel('comment');
|
||||
$data = $oCommentModel->getComment($comment_srl);
|
||||
if(!$data) return new Object(-1, 'msg_invalid_request');
|
||||
$oComment = $oCommentModel->getComment($comment_srl);
|
||||
if(!$oComment->isExists()) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($data->password != $password) return new Object(-1, 'msg_invalid_password');
|
||||
if(!$oMemberModel->isValidPassword($oComment->get('password'),$password)) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oCommentController = &getController('comment');
|
||||
$oCommentController->addGrant($comment_srl);
|
||||
$oComment->setGrant();
|
||||
} else {
|
||||
// 문서번호에 해당하는 글이 있는지 확인
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
|
@ -236,7 +236,7 @@
|
|||
if(!$oDocument->isExists()) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($oDocument->get('password') != $password) return new Object(-1, 'msg_invalid_password');
|
||||
if(!$oMemberModel->isValidPassword($oDocument->get('password'),$password)) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oDocument->setGrant();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,11 +38,6 @@
|
|||
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
|
||||
$this->setTemplatePath($template_path);
|
||||
|
||||
/**
|
||||
* 방명록 모듈 생성 또는 정보 수정시 open_rss값의 세팅에 따라서 rss_url을 선언해 놓는다.
|
||||
* 이 rss_url은 ./common/tpl/common_layout.html에서 application/rss+xml의 href로 지정된다
|
||||
**/
|
||||
if($this->module_info->open_rss != 'N') Context::set('rss_url', getUrl('','mid',$this->mid,'act','rss'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -83,10 +78,11 @@
|
|||
$option->primary_key_name = 'document_srl';
|
||||
$option->content_key_name = 'content';
|
||||
$option->allow_fileupload = false; ///< 파일 업로드 기능을 제한
|
||||
$option->enable_autosave = true; ///< 자동 저장 기능을 활성화
|
||||
$option->enable_default_component = true; ///< 기본 에디터 컴포넌트의 활성화
|
||||
$option->enable_component = true; ///< 추가 에디터 컴포넌트의 활성화
|
||||
$option->enable_autosave = false; ///< 자동 저장 기능을 활성화
|
||||
$option->enable_default_component = false; ///< 기본 에디터 컴포넌트의 활성화
|
||||
$option->enable_component = false; ///< 추가 에디터 컴포넌트의 활성화
|
||||
$option->resizable = false; ///< 글쓰기 폼의 상하 조절 가능하도록 설정
|
||||
$option->disable_html = true; ///< html_mode
|
||||
$option->height = 200; ///< 에디터의 높이 지정
|
||||
$editor = $oEditorModel->getEditor($document_srl, $option); ///< 에디터코드를 받음
|
||||
Context::set('editor', $editor); ///< 에디터코드를 editor라는 이름으로 세팅.
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@
|
|||
|
||||
$lang->guestbook = "留言本";
|
||||
|
||||
// 버튼에 사용되는 언어
|
||||
// 按钮语言
|
||||
$lang->cmd_guestbook_list = '留言本目录';
|
||||
$lang->cmd_module_config = '留言本共同设置';
|
||||
$lang->cmd_view_info = '留言本信息';
|
||||
|
||||
$lang->about_guestbook = "可生成并管理留言本的模块。\n生成留言本后在留言本目录中点击模块名既可设置更详细的相关项目。\n因留言本的模块名将变成其url中的一部分,所以请慎重填写模块名。 (ex : http://域名/zb/?mid=模块名)";
|
||||
$lang->about_guestbook = "可生成并管理留言本的模块。\n生成留言本后在留言本目录中点击模块名既可设置更详细的相关项目。\n因留言本的模块名将变成其url中的一部分,所以请慎重填写模块名(ex:http://域名/zb/?mid=模块名)。";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,43 +1,66 @@
|
|||
<!-- 댓글 정보 출력 -->
|
||||
<a name="comment_top_{$document->document_srl}"></a>
|
||||
<!--@if($document->getCommentCount())-->
|
||||
<div class="replyBox">
|
||||
|
||||
<!-- 댓글 출력 -->
|
||||
<div class="clear">
|
||||
<!-- 댓글 목록 -->
|
||||
{@ $_comment_list = $document->getComments() }
|
||||
<!--@foreach($_comment_list as $key => $comment)-->
|
||||
|
||||
<!--@if($document->getCommentCount())-->
|
||||
<div class="replyItem reply">
|
||||
<div style="margin-left:{($comment->get('depth'))*20}px" class="replyIndent">
|
||||
|
||||
<!--@foreach($document->getComments() as $key => $val)-->
|
||||
<a name="comment_{$key}"></a>
|
||||
<div class="comment_box" style="margin-left:{$val->depth*15}px" >
|
||||
<div class="fl member_{$val->member_srl}">{htmlspecialchars($val->nick_name)}</div>
|
||||
<div class="fr">{zdate($val->regdate, "Y-m-d H:i:s")}</div>
|
||||
<div class="comment_content">
|
||||
<div class="content">{$val->content}</div>
|
||||
<a name="comment_{$comment->comment_srl}"></a>
|
||||
|
||||
<div class="comment_sub_info">
|
||||
{$val->ipaddress}
|
||||
</div>
|
||||
<div class="button_area">
|
||||
<a href="{getUrl('act','dispGuestbookReplyComment','comment_srl',$val->comment_srl)}" class="button"><span>{$lang->cmd_reply}</span></a>
|
||||
|
||||
<!--@if($val->is_granted || !$val->member_srl || $grant->is_admin)-->
|
||||
<a href="{getUrl('act','dispGuestbookModifyComment','comment_srl',$val->comment_srl)}" class="button"><span>{$lang->cmd_modify}</span></a>
|
||||
<a href="{getUrl('act','dispGuestbookDeleteComment','comment_srl',$val->comment_srl)}" class="button"><span>{$lang->cmd_delete}</span></a>
|
||||
<!--@end-->
|
||||
</div>
|
||||
<div class="replyOption">
|
||||
<!--@if($comment->isGranted())-->
|
||||
<a href="{getUrl('act','dispGuestbookDeleteComment','comment_srl',$comment->comment_srl)}"><img src="./images/buttonDeleteX.gif" alt="{$lang->cmd_delete}" width="12" height="13" /></a>
|
||||
<a href="{getUrl('act','dispGuestbookModifyComment','comment_srl',$comment->comment_srl)}"><img src="./images/buttonModifyE.gif" alt="{$lang->cmd_modify}" width="20" height="17" /></a>
|
||||
<!--@end-->
|
||||
<a href="{getUrl('act','dispGuestbookReplyComment','comment_srl',$comment->comment_srl)}"><img src="./images/buttonReply.gif" alt="{$lang->cmd_reply}" width="20" height="17" /></a>
|
||||
</div>
|
||||
|
||||
<div class="date">
|
||||
|
||||
<strong>{$comment->getRegdate('Y.m.d')}</strong> {$comment->getRegdate('H:i:s')}
|
||||
|
||||
<!--@if($grant->is_admin)-->
|
||||
({$comment->get('ipaddress')})
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<div class="author">
|
||||
<!--@if(!$comment->member_srl)-->
|
||||
<!--@if($comment->homepage)-->
|
||||
<a href="{$comment->homepage}" onclick="window.open(this.href);return false;">{$comment->getNickName()}</a>
|
||||
<!--@else-->
|
||||
{$comment->getNickName()}
|
||||
<!--@end-->
|
||||
<!--@else-->
|
||||
<div class="member_{$comment->member_srl}">{$comment->getNickName()}</div>
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
<div class="replyContent">
|
||||
<!--@if(!$comment->isAccessible())-->
|
||||
<!--%import("filter/input_password.xml")-->
|
||||
<strong>{$lang->msg_is_secret}</strong>
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, input_password)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$comment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment->get('comment_srl')}" />
|
||||
<div class="inputPassword">
|
||||
<input type="password" name="password" class="inputTypeText" /><span class="button"><input type="submit" value="{$lang->cmd_input}" accesskey="s" /></span>
|
||||
</div>
|
||||
</form>
|
||||
<!--@else-->
|
||||
{$comment->getContent(false)}
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<!--@end-->
|
||||
|
||||
<!-- 댓글 입력 폼 -->
|
||||
|
||||
<!--@if($grant->write_comment && !$document->isLocked())-->
|
||||
{@ $document_srl = $document->document_srl }
|
||||
<!--#include("./comment_form.html")-->
|
||||
<!--@end-->
|
||||
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
|
|
|||
|
|
@ -7,72 +7,98 @@
|
|||
|
||||
<!-- 만약 댓글의 답을 다는 것이라면 원문 보여줌 -->
|
||||
<!--@if($source_comment)-->
|
||||
<div>
|
||||
<table cellspacing="0" width="100%">
|
||||
<col width="120" />
|
||||
<col width="*" />
|
||||
<tr>
|
||||
<th>{$lang->date}</th>
|
||||
<td>{$source_comment->regdate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->writer}</th>
|
||||
<td><div class="member_{$source_comment->member_srl}">{htmlspecialchars($source_comment->nick_name)}</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->content}</th>
|
||||
<td height="100" valign="top">{$source_comment->content}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="replyBox">
|
||||
<div class="replyItem">
|
||||
<div class="date">
|
||||
|
||||
<strong>{$source_comment->getRegdate('Y.m.d')}</strong> {$source_comment->getRegdate('H:i:s')}
|
||||
|
||||
<!--@if($grant->is_admin)-->
|
||||
({$source_comment->get('ipaddress')})
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<div class="author">
|
||||
<!--@if(!$source_comment->member_srl)-->
|
||||
<!--@if($source_comment->homepage)-->
|
||||
<a href="{$source_comment->homepage}" onclick="window.open(this.href);return false;">{$source_comment->getNickName()}</a>
|
||||
<!--@else-->
|
||||
{$source_comment->getNickName()}
|
||||
<!--@end-->
|
||||
<!--@else-->
|
||||
<div class="member_{$source_comment->member_srl}">{$source_comment->getNickName()}</div>
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
<div class="replyContent">
|
||||
<!--@if(!$source_comment->isAccessible())-->
|
||||
<!--%import("filter/input_password.xml")-->
|
||||
<strong>{$lang->msg_is_secret}</strong>
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, input_password)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$comment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment->get('comment_srl')}" />
|
||||
<div class="inputPassword">
|
||||
<input type="password" name="password" class="inputTypeText" /><span class="button"><input type="submit" value="{$lang->cmd_input}" accesskey="s" /></span>
|
||||
</div>
|
||||
</form>
|
||||
<!--@else-->
|
||||
{$source_comment->getContent(false)}
|
||||
<!--@end-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 글쓰기 폼 -->
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert_comment)" <!--@if($grant->fileupload)-->enctype="multipart/form-data"<!--@end-->>
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl?$document_srl:$document->document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
<input type="hidden" name="parent_srl" value="{$parent_srl}" />
|
||||
<div class="commentWrite">
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert_comment)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl?$document_srl:$document->document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
<input type="hidden" name="parent_srl" value="{$parent_srl}" />
|
||||
|
||||
<table width="100%">
|
||||
<col width="120" />
|
||||
<col width="*" />
|
||||
<!--@if(!$is_logged)-->
|
||||
<div class="userNameAndPw">
|
||||
<label for="userName">{$lang->writer}</label>
|
||||
<input type="text" name="nick_name" class="userName inputTypeText" value="{htmlspecialchars($comment->nick_name)}" id="userName"/>
|
||||
|
||||
<!--@if(!$is_logged)-->
|
||||
<tr>
|
||||
<th>{$lang->writer}</th>
|
||||
<td><input type="text" name="nick_name" value="{htmlspecialchars($comment->nick_name)}" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->password}</th>
|
||||
<td><input type="password" name="password" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->email_address}</th>
|
||||
<td><input type="text" name="email_address" value="{htmlspecialchars($comment->email_address)}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->homepage}</th>
|
||||
<td><input type="text" name="homepage" value="{htmlspecialchars($comment->homepage)}" /></td>
|
||||
</tr>
|
||||
<!--@end-->
|
||||
<label for="userPw">{$lang->password}</label>
|
||||
<input type="password" name="password" id="userPw" class="userPw inputTypeText" />
|
||||
|
||||
<tr>
|
||||
<td colspan="2" class="tRight">
|
||||
<textarea class="comment_form" name="content">{strip_tags($comment->content)}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="tRight">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
|
||||
<label for="emailAddress">{$lang->email_address}</label>
|
||||
<input type="text" name="email_address" id="emailAddress" class="emailAddress inputTypeText" value="{htmlspecialchars($comment->email_address)}"/>
|
||||
|
||||
<label for="homePage">{$lang->homepage}</label>
|
||||
<input type="text" name="homepage" id="homePage" class="homePage inputTypeText" value="{htmlspecialchars($comment->homepage)}"/>
|
||||
</div>
|
||||
<!--@end-->
|
||||
<dl class="option">
|
||||
<dd>
|
||||
<input type="checkbox" name="is_secret" value="Y" id="is_secret" <!--@if($comment->is_secret=='Y')-->checked="checked"<!--@end-->/>
|
||||
<label for="is_secret">{$lang->secret}</label>
|
||||
</dd>
|
||||
<!--@if($is_logged)-->
|
||||
<dd>
|
||||
<input type="checkbox" name="notify_message" value="Y" <!--@if($comment->notify_message == 'Y')-->checked="checked"<!--@end--> id="notify_message" />
|
||||
<label for="notify_message">{$lang->notify}</label>
|
||||
</dd>
|
||||
<!--@end-->
|
||||
</dl>
|
||||
|
||||
<div class="editorBox"><textarea name="content" rows="8" cols="20" class="textarea">{strip_tags($comment->content)}</textarea></div>
|
||||
|
||||
<div class="tCenter">
|
||||
<!--@if($act&&$act!='dispGuestbookContent')-->
|
||||
<span class="button"><input type="button" value="{$lang->cmd_back}" onclick="location.href='{getUrl('act','')}'" /></span>
|
||||
<!--@end-->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_comment_registration}" accesskey="s" /></span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!--@if($source_comment)-->
|
||||
<!--#include("footer.html")-->
|
||||
|
|
|
|||
|
|
@ -1,28 +1,105 @@
|
|||
@charset "utf-8";
|
||||
|
||||
a { color:#555555; text-decoration:none; }
|
||||
/* guestbook Title */
|
||||
.guestbookHeader { border:1px solid #e1e1dd; border-bottom:none; background:#ffffff url(../images/bgH3.gif) repeat-x left bottom; overflow:hidden; _width:100%;}
|
||||
.guestbookHeader h3 { border-bottom:3px solid #fe3614; }
|
||||
.guestbookHeader h3 { float:left; font-size:1.2em; padding:1em 2em .7em 1.2em; background:#ffffff url(../images/lineH3.gif) no-repeat right bottom;}
|
||||
|
||||
.titleBox { border:4px solid #EEEEEE; padding:.5em; margin-bottom:1em; }
|
||||
.titleBox .title { font-weight:bold; }
|
||||
.titleBox .memo { color:#888888; }
|
||||
/* guestbook Description */
|
||||
.guestbookDescription { color:#AEAEAE; border:1px solid #DDDDDD; overflow:hidden; padding:1em; margin-top:1em;}
|
||||
|
||||
.info .status { float:left; overflow:hidden; }
|
||||
.info .link { float:right; overflow:hidden; }
|
||||
.guestbookInformation { width:100%; clear:both; margin:1em 0 .5em 0; overflow:hidden; color:#666666;}
|
||||
|
||||
.write_form { padding:10px; margin:0px; border:3px solid #CCCCCC; margin-top:.5em; }
|
||||
.write_form table { border:0; padding:0; }
|
||||
.write_form td.option { text-align:right; padding:.3em; }
|
||||
.articleNum { float:left; padding:0 0 0 15px; }
|
||||
|
||||
.document { padding:0; margin-top:1em; border:3px solid #EEEEEE; }
|
||||
.document .info { background-color:#EFEFEF; padding:.5em; }
|
||||
.document .subinfo { text-align:right; color:#CCCCCC;}
|
||||
.document .content { padding:1em; }
|
||||
.document .comment { padding:1em; }
|
||||
/* account Navigation */
|
||||
.accountNavigation { float:right; }
|
||||
.accountNavigation li { float:left; margin-left:7px; list-style:none; padding-top:3px;}
|
||||
.accountNavigation li a { font-size:12px; white-space:nowrap; color:#666666; text-decoration:none;}
|
||||
.accountNavigation li.setup a { background:url(../images/iconSetup.gif) no-repeat left top; padding-left:14px; }
|
||||
.accountNavigation li.admin a { background:url(../images/iconAdmin.gif) no-repeat left top; padding-left:12px; }
|
||||
.accountNavigation li.listType { margin-left:5px; }
|
||||
.accountNavigation li.loginAndLogout { background:url(../images/line_1x10_e0e0e0.gif) no-repeat left 5px; padding-left:8px; _padding-top:5px;}
|
||||
*:first-child+html li.loginAndLogout { padding-top:5px; }
|
||||
|
||||
.comment_box { border:0; padding:.5em; border-top:1px solid #EEEEEE; margin:1em 0 1em 0;}
|
||||
.comment_box .comment_content { }
|
||||
.comment_box .comment_content .content { margin:1em 0 2em 0;}
|
||||
.comment_box .comment_content .comment_sub_info { float:left; }
|
||||
.comment_box .comment_content .button_area { float:right; }
|
||||
|
||||
textarea.comment_form { border:1px solid #EEEEEE; width:90%;}
|
||||
/* pageNavigation */
|
||||
.pageNavigation { display:block; margin-top:1em; text-align:center; font:bold 11px Tahoma; margin-top:1.5em;}
|
||||
.pageNavigation a { position:relative; margin-left:-4px; font:bold 1em Tahoma; color:#666666; display:inline-block; padding:1px 7px 2px 6px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
|
||||
.pageNavigation .current { position:relative; margin-left:-4px; font:bold 11px Tahoma; display:inline-block; padding:1px 7px 1px 6px; border-left:1px solid #dedfde; text-decoration:none; line-height:1em; }
|
||||
.pageNavigation a:hover { background:#F7F7F7; text-decoration:none; }
|
||||
.pageNavigation a:visited { color:#999999; }
|
||||
.pageNavigation a.goToFirst, .pageNavigation a.goToLast { border:none; border-right:1px solid #ffffff; border-left:1px solid #ffffff; z-index:99; vertical-align:top; padding:0px 7px 4px 6px;}
|
||||
.pageNavigation a.goToFirst img, .pageNavigation a.goToLast img { display:inline-block; padding:2px 0; position:relative; top:2px; _top:1px;}
|
||||
|
||||
.boardWrite { border:1px solid #DDDDDD; background-color:#EFEFEF; overflow:hidden; position:relative; margin-bottom:20px; padding:.5em 0; }
|
||||
.boardWrite .inputTypeText { width:100px; }
|
||||
.boardWrite .userNameAndPw { margin-bottom:-1px; padding:.5em 0; margin-left:20px;}
|
||||
.boardWrite .boardEditor fieldset { width:auto; position:relative;}
|
||||
.boardWrite .option { margin-left:20px; padding:.5em 0; overflow:hidden; width:90%;}
|
||||
.boardWrite .option dd { float:left; margin-right:1em; padding-top:.2em; _padding-top:.1em;}
|
||||
.boardWrite .option dd * { vertical-align:middle;}
|
||||
.boardWrite .option dd select { width:7em; font-size:.95em;height:20px;}
|
||||
.boardWrite .inputTypeText { background:#fbfbfb;}
|
||||
|
||||
.commentWrite { border:1px solid #EFEFEF; overflow:hidden; position:relative; margin-top:10px; margin-bottom:20px; padding:.5em 0; }
|
||||
.commentWrite .inputTypeText { width:100px; }
|
||||
.commentWrite .userNameAndPw { margin-bottom:-1px; padding:.5em 0; margin-left:20px;}
|
||||
.commentWrite .commentEditor fieldset { width:auto; position:relative; border:none;}
|
||||
.commentWrite .option { margin-left:20px; padding:.5em 0; overflow:hidden; width:90%;}
|
||||
.commentWrite .option dd { float:left; margin-right:1em; padding-top:.2em; _padding-top:.1em;}
|
||||
.commentWrite .option dd * { vertical-align:middle;}
|
||||
.commentWrite .option dd select { width:7em; font-size:.95em;height:20px;}
|
||||
.commentWrite .inputTypeText { background:#fbfbfb;}
|
||||
.commentWrite .editorBox { text-align:center; margin-bottom:10px;}
|
||||
.commentWrite .textarea { width:98%; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; height:8em; padding:.2em 0 0 .3em; background:#ffffff; font-size:1em; }
|
||||
|
||||
.documentBox { padding:.6em .6em; color:#666666; border:1px solid #e0e1db; margin-top:.5em;}
|
||||
.documentBox .documentItem { padding:.6em .8em .6em .6em; line-height:1.25em; clear:both; list-style:none;}
|
||||
.documentBox p { display:inline; margin-bottom:1em;}
|
||||
.documentBox .author { float:left; padding:0 .3em 0 0; font-size:.9em; color:#3074a5; margin:0 .3em .5em 0;}
|
||||
.documentBox .author a { color:#3074a5; margin-right:.3em; text-decoration:none; }
|
||||
.documentBox .voted { float:left; font-size:.9em; color:#AAAAAA; margin:0 .3em .5em 1em;}
|
||||
.documentBox .date { float:right; font:.8em Tahoma; color:#cccccc; margin:.3em 0 .5em 0;}
|
||||
|
||||
.documentBox .documentOption { float:right; white-space:nowrap; margin-left:.2em;}
|
||||
.documentBox .documentOption img { vertical-align:middle;}
|
||||
|
||||
.documentBox .documentContent { clear:left; }
|
||||
.documentBox .documentContent p { display:block; }
|
||||
.documentBox .documentContent ul li { padding:0; border:none; line-height:1.25em; list-style:disc;}
|
||||
.documentBox .documentContent ol li { padding:0; border:none; line-height:1.25em; list-style:decimal;}
|
||||
.documentBox .document { background-color:#FAFAFA;}
|
||||
|
||||
.smallBox { border:1px solid #e0e1db; margin-left:auto; margin-right:auto; }
|
||||
.smallBox.w268 { width:268px;}
|
||||
.smallBox .header { position:relative; _width:100%; background:#ffffff url(../images/normal/bgH3.gif) no-repeat left bottom; overflow:hidden;}
|
||||
.smallBox .header h3 { clear:both; font-size:1.2em; padding:.8em 2em .6em 1.2em; border-bottom:3px solid #fe3614; }
|
||||
.smallBox .complex { padding:1.5em 2em 2em 2em;}
|
||||
.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;}
|
||||
|
||||
|
||||
.replyBox { padding:.6em .6em; color:#666666; border:1px solid #e0e1db; margin-top:.5em;}
|
||||
.replyBox .replyItem { padding:.6em .8em .6em .6em; line-height:1.25em; clear:both; list-style:none; border-bottom:1px dotted #e0e1db;}
|
||||
.replyBox p { display:inline; margin-bottom:1em;}
|
||||
.replyBox .author { float:left; padding:0 .3em 0 0; font-size:.9em; color:#3074a5; margin:0 .3em .5em 0;}
|
||||
.replyBox .author a { color:#3074a5; margin-right:.3em; text-decoration:none; }
|
||||
.replyBox .voted { float:left; font-size:.9em; color:#AAAAAA; margin:0 .3em .5em 1em;}
|
||||
.replyBox .date { float:right; font:.8em Tahoma; color:#cccccc; margin:.3em 0 .5em 0;}
|
||||
|
||||
.replyBox .replyOption { float:right; white-space:nowrap; margin-left:.2em;}
|
||||
.replyBox .replyOption img { vertical-align:middle;}
|
||||
|
||||
.replyBox .replyContent { clear:left; }
|
||||
.replyBox .replyContent p { display:block; }
|
||||
.replyBox .replyContent ul li { padding:0; border:none; line-height:1.25em; list-style:disc;}
|
||||
.replyBox .replyContent ol li { padding:0; border:none; line-height:1.25em; list-style:decimal;}
|
||||
.replyBox .reply { background-color:#FAFAFA;}
|
||||
.replyBox .replyIndent { background:url(../images/common/iconReplyArrow.gif) no-repeat .0em .3em; padding-left:1.3em;}
|
||||
|
||||
.replyBox .fileAttached { _width:99%; border:1px solid #eaeae7; overflow:hidden; background:#fbfbfb; margin-top:.3em; list-style:none;}
|
||||
.replyBox .fileAttached ul { float:left; padding:.3em 1em .2em 0; margin-left:.5em; _margin-left:.25em;}
|
||||
.replyBox .fileAttached li a { font-size:.9em; white-space:nowrap; position:relative; color:#444444; }
|
||||
.replyBox .fileAttached li a:visited { color:#777777;}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,25 @@
|
|||
<!--%import("filter/delete_comment.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_comment)">
|
||||
<div class="smallBox w268">
|
||||
|
||||
<div class="header">
|
||||
<h3>{$lang->confirm_delete}</h3>
|
||||
</div>
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_comment)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
<input type="hidden" name="document_srl" value="{$oComment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$oComment->get('comment_srl')}" />
|
||||
|
||||
<div class="inputPassword tCenter">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_delete}" accesskey="s" /></span>
|
||||
<a href="{getUrl('act','','comment_srl','')}" class="button"><span>{$lang->cmd_cancel}</span></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th colspan="2">{$lang->confirm_delete}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input type="submit" value="{$lang->cmd_delete}" />
|
||||
<input type="button" value="{$lang->cmd_back}" onclick="location.href='{getUrl('act','')}'" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
|
|
|
|||
|
|
@ -1,27 +1,23 @@
|
|||
<!--%import("filter/delete_document.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_document)">
|
||||
<div class="smallBox w268">
|
||||
|
||||
<div class="header">
|
||||
<h3>{$lang->confirm_delete}</h3>
|
||||
</div>
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_document)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th colspan="2">{$lang->confirm_delete}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->title}</th>
|
||||
<td>{$oDocument->getTitleText()}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input type="submit" value="{$lang->cmd_delete}" />
|
||||
<input type="button" value="{$lang->cmd_back}" onclick="location.href='{getUrl('act','')}'" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="inputPassword tCenter">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_delete}" accesskey="s" /></span>
|
||||
<a href="{getUrl('act','')}" class="button"><span>{$lang->cmd_cancel}</span></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
|
|
|
|||
|
|
@ -2,52 +2,57 @@
|
|||
<!--%import("css/guestbook.css")-->
|
||||
{$module_info->header_text}
|
||||
|
||||
<!-- 스킨의 제목/내용으로 내용 구성 -->
|
||||
<!--@if($module_info->title || $module_info->memo)-->
|
||||
<div class="titleBox">
|
||||
<!--@if($module_info->title)-->
|
||||
<div class="title">{$module_info->title}</div>
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($module_info->memo)-->
|
||||
<div class="memo">{nl2br($module_info->memo)}</div>
|
||||
<!--@end-->
|
||||
<!-- 스킨의 제목/간단한 설명 출력 -->
|
||||
<!--@if($module_info->title)-->
|
||||
<div class="guestbookHeader">
|
||||
<h3>{$module_info->title}</h3>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 스킨의 상세 설명 -->
|
||||
<!--@if($module_info->memo)-->
|
||||
<div class="guestbookDescription">{$module_info->memo}</div>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 정보 -->
|
||||
<div class="info">
|
||||
<div class="status">
|
||||
<div class="guestbookInformation">
|
||||
|
||||
<!-- 게시물 수 -->
|
||||
<!--@if($total_count)-->
|
||||
{$lang->document_count} : {number_format($total_count)},
|
||||
{$lang->page_count} : {number_format($page)} / {number_format($total_page)}
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<div class="link">
|
||||
<!--@if($rss_url)-->
|
||||
<a href="{$rss_url}">rss</a>
|
||||
<div class="articleNum">{$lang->document_count} <strong>{number_format($total_count)}</strong></div>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 로그인 정보 -->
|
||||
<ul class="accountNavigation">
|
||||
|
||||
<!-- 로그인 되어 있을 경우 -->
|
||||
<!--@if($is_logged)-->
|
||||
[
|
||||
<a href="{getUrl('act','dispMemberInfo')}">{$lang->cmd_view_member_info}</a> |
|
||||
<a href="{getUrl('act','dispMemberLogout')}">{$lang->cmd_logout}</a>
|
||||
]
|
||||
|
||||
<!--@else-->
|
||||
[
|
||||
<a href="{getUrl('act','dispMemberSignUpForm')}">{$lang->cmd_signup}</a> |
|
||||
<a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a>
|
||||
]
|
||||
<!-- 관리자이면 설정 버튼 출력 -->
|
||||
<!--@if($grant->is_admin)-->
|
||||
<li class="setup"><a href="{getUrl('act','dispGuestbookAdminGuestbookInfo')}">{$lang->cmd_setup}</a></li>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 최고관리자이면 관리자 페이지 버튼 출력 -->
|
||||
<!--@if($logged_info->is_admin == 'Y')-->
|
||||
<li class="admin"><a href="{getUrl('','module','admin','act','dispGuestbookAdminContent')}" onclick="window.open(this.href); return false;">{$lang->cmd_management}</a></li>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 레이아웃이 없으면 회원정보 버튼 출력 -->
|
||||
<!--@if(!$module_info->layout_srl)-->
|
||||
<li class="myInfo"><a href="{getUrl('act','dispMemberInfo')}">{$lang->cmd_view_member_info}</a></li>
|
||||
<li class="loginAndLogout"><a href="{getUrl('act','dispMemberLogout')}">{$lang->cmd_logout}</a></li>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 로그인 되어 있지 않고 레이아웃이 없으면 -->
|
||||
<!--@elseif(!$is_logged && !$module_info->layout_srl)-->
|
||||
<li class="join"><a href="{getUrl('act','dispMemberSignUpForm')}">{$lang->cmd_signup}</a></li>
|
||||
<li class="loginAndLogout"><a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a></li>
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($grant->is_admin)-->
|
||||
<a href="{getUrl('act','dispGuestbookAdminGuestbookInfo')}">[{$lang->cmd_setup}]</a>
|
||||
<a href="{getUrl('module','admin','act','dispGuestbookAdminGuestbookInfo')}" onclick="winopen(this.href);return false;">[{$lang->cmd_management}]</a>
|
||||
<!--@end-->
|
||||
</div>
|
||||
<li class="skin_info"><a href="{getUrl('','module','module','act','dispModuleSkinInfo','selected_module',$module_info->module, 'skin', $module_info->skin)}" onclick="popopen(this.href,'skinInfo'); return false;"><img src="./images/buttonHelp.gif" alt="Skin Info" width="13" height="13"/></a></li>
|
||||
|
||||
<div class="clear"></div>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
|
|||
BIN
modules/guestbook/skins/default/images/bgH3.gif
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
modules/guestbook/skins/default/images/bottomGotoFirst.gif
Normal file
|
After Width: | Height: | Size: 51 B |
BIN
modules/guestbook/skins/default/images/bottomGotoLast.gif
Normal file
|
After Width: | Height: | Size: 51 B |
BIN
modules/guestbook/skins/default/images/buttonDeleteX.gif
Normal file
|
After Width: | Height: | Size: 61 B |
BIN
modules/guestbook/skins/default/images/buttonHelp.gif
Normal file
|
After Width: | Height: | Size: 101 B |
BIN
modules/guestbook/skins/default/images/buttonModifyE.gif
Normal file
|
After Width: | Height: | Size: 407 B |
BIN
modules/guestbook/skins/default/images/buttonReply.gif
Normal file
|
After Width: | Height: | Size: 400 B |
BIN
modules/guestbook/skins/default/images/iconAdmin.gif
Normal file
|
After Width: | Height: | Size: 88 B |
BIN
modules/guestbook/skins/default/images/iconArrowD8.gif
Normal file
|
After Width: | Height: | Size: 46 B |
BIN
modules/guestbook/skins/default/images/iconRss.gif
Normal file
|
After Width: | Height: | Size: 988 B |
BIN
modules/guestbook/skins/default/images/iconSetup.gif
Normal file
|
After Width: | Height: | Size: 155 B |
BIN
modules/guestbook/skins/default/images/lineH3.gif
Normal file
|
After Width: | Height: | Size: 45 B |
BIN
modules/guestbook/skins/default/images/line_1x10_e0e0e0.gif
Normal file
|
After Width: | Height: | Size: 44 B |
|
|
@ -9,57 +9,121 @@
|
|||
<!--@end-->
|
||||
|
||||
<!-- 목록 -->
|
||||
<div>
|
||||
<!--@foreach($document_list as $no => $document)-->
|
||||
<!-- 글 내용 보여주기 -->
|
||||
<div class="document">
|
||||
<div class="info">
|
||||
<div class="fl member_{$document->get('member_srl')}">{$document->getNickName()}</div>
|
||||
|
||||
<!--@if($document->isEditable())-->
|
||||
<div class="fr">
|
||||
<a href="{getUrl('act','dispGuestbookModify','document_srl',$document->document_srl,'page',$page)}" class="button"><span>{$lang->cmd_modify}</span></a>
|
||||
<a href="{getUrl('act','dispGuestbookDelete','document_srl',$document->document_srl,'page',$page)}" class="button"><span>{$lang->cmd_delete}</span></a>
|
||||
</div>
|
||||
<div class="documentBox">
|
||||
<div class="documentItem">
|
||||
<div class="documentOption">
|
||||
<!--@if($document->isGranted())-->
|
||||
<a href="{getUrl('act','dispGuestbookDelete','document_srl',$document->document_srl)}"><img src="./images/buttonDeleteX.gif" alt="{$lang->cmd_delete}" width="12" height="13" /></a>
|
||||
<a href="{getUrl('act','dispGuestbookModify','document_srl',$document->document_srl)}"><img src="./images/buttonModifyE.gif" alt="{$lang->cmd_modify}" width="20" height="17" /></a>
|
||||
<!--@end-->
|
||||
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
|
||||
<div class="date">
|
||||
|
||||
<div class="clear content">
|
||||
{$document->getContent()}
|
||||
<strong>{$document->getRegdate('Y.m.d')}</strong> {$document->getRegdate('H:i:s')}
|
||||
|
||||
<!--@if($grant->is_admin)-->
|
||||
({$document->get('ipaddress')})
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<div class="subinfo">
|
||||
{$document->getRegdate('Y-m-d H:i:s')} |
|
||||
{$document->get('ipaddress')}
|
||||
</div>
|
||||
|
||||
<div class="comment">
|
||||
<!-- 댓글 파일 include -->
|
||||
<!--@if($grant->write_comment && $document->allowComment())-->
|
||||
<!--#include("./comment.html")-->
|
||||
<div class="author">
|
||||
<!--@if(!$document->member_srl)-->
|
||||
<!--@if($document->homepage)-->
|
||||
<a href="{$document->homepage}" onclick="window.open(this.href);return false;">{$document->getNickName()}</a>
|
||||
<!--@else-->
|
||||
{$document->getNickName()}
|
||||
<!--@end-->
|
||||
<!--@else-->
|
||||
<div class="member_{$document->member_srl}">{$document->getNickName()}</div>
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
<div class="documentContent">
|
||||
<!--@if($document->isSecret() && !$document->isGranted())-->
|
||||
<!--%import("filter/input_password.xml")-->
|
||||
<strong>{$lang->msg_is_secret}</strong>
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, input_password)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document->get('document_srl')}" />
|
||||
<div class="inputPassword">
|
||||
<input type="password" name="password" class="inputTypeText" /><span class="button"><input type="submit" value="{$lang->cmd_input}" accesskey="s" /></span>
|
||||
</div>
|
||||
</form>
|
||||
<!--@else-->
|
||||
{$document->getContent(false)}
|
||||
<!--@end-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 댓글 입력 폼 -->
|
||||
<!--#include("./comment.html")-->
|
||||
<!--@if($grant->write_comment && !$oDocument->isLocked() && $oDocument->allowComment() )-->
|
||||
<!--%import("filter/insert_comment.xml")-->
|
||||
<div class="commentWrite">
|
||||
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert_comment)" class="commentEditor" >
|
||||
<fieldset>
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document->document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="" />
|
||||
|
||||
<!--@if(!$is_logged)-->
|
||||
<div class="userNameAndPw">
|
||||
<label>{$lang->writer}</label>
|
||||
<input type="text" name="nick_name" value="" class="userName inputTypeText" />
|
||||
|
||||
<label>{$lang->password}</label>
|
||||
<input type="password" name="password" value="" class="userPw inputTypeText" />
|
||||
|
||||
<label>{$lang->email_address}</label>
|
||||
<input type="text" name="email_address" value="" class="emailAddress inputTypeText"/>
|
||||
|
||||
<label>{$lang->homepage}</label>
|
||||
<input type="text" name="homepage" value="" class="homePage inputTypeText"/>
|
||||
</div>
|
||||
<!--@end-->
|
||||
<dl class="option">
|
||||
<dd>
|
||||
<input type="checkbox" name="is_secret" value="Y" />
|
||||
<label>{$lang->secret}</label>
|
||||
</dd>
|
||||
<!--@if($is_logged)-->
|
||||
<dd>
|
||||
<input type="checkbox" name="notify_message" value="Y" id="notify_message" />
|
||||
<label for="notify_message">{$lang->notify}</label>
|
||||
</dd>
|
||||
<!--@end-->
|
||||
</dl>
|
||||
|
||||
<div class="editorBox"><textarea name="content" rows="8" cols="20" class="textarea"></textarea></div>
|
||||
|
||||
</fieldset>
|
||||
|
||||
<div class="tCenter">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_comment_registration}" accesskey="s" /></span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!--@end-->
|
||||
</div>
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<!-- 페이지 네비게이션 -->
|
||||
<div>
|
||||
<a href="{getUrl('page','','document_srl','')}">[{$lang->first_page}]</a>
|
||||
|
||||
<div class="pageNavigation">
|
||||
<a href="{getUrl('page','','document_srl','')}" class="goToFirst"><img src="./images/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<!--@if($page == $page_no)-->
|
||||
{$page_no}
|
||||
<!--@else-->
|
||||
<a href="{getUrl('page',$page_no,'document_srl','')}">[{$page_no}]</a>
|
||||
<!--@if($page == $page_no)-->
|
||||
<span class="current">{$page_no}</span>
|
||||
<!--@else-->
|
||||
<a href="{getUrl('page',$page_no,'document_srl','')}">{$page_no}</a>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}">[{$lang->last_page}]</a>
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="goToLast"><img src="./images/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
|
||||
</div>
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
|
|
|
|||