path지정 잘못된 것 변경

git-svn-id: http://xe-core.googlecode.com/svn/trunk@2396 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-08-23 07:23:36 +00:00
commit 049a648486
75 changed files with 1489 additions and 164 deletions

View file

@ -515,8 +515,11 @@
for($i=0;$i<$num_args;$i=$i+2) {
$key = $args_list[$i];
$val = trim($args_list[$i+1]);
if(!$val) unset($get_vars[$key]);
else $get_vars[$key] = $val;
if(!$val) {
unset($get_vars[$key]);
continue;
}
$get_vars[$key] = $val;
}
$var_count = count($get_vars);
@ -554,7 +557,7 @@
// rewrite 모듈을 사용하지 않고 인자의 값이 2개 이상이거나 rewrite모듈을 위한 인자로 적당하지 않을 경우
foreach($get_vars as $key => $val) {
if(!$val) continue;
$url .= ($url?'&':'').$key.'='.$val;
$url .= ($url?'&':'').$key.'='.urlencode($val);
}
return $this->path.'?'.htmlspecialchars($url);
@ -565,8 +568,8 @@
**/
function getRequestUri() {
$hostname = $_SERVER['HTTP_HOST'];
$port = $_SERVER['SERVER_PORT'];
if($port!=80) $hostname .= ":{$port}";
//$port = $_SERVER['SERVER_PORT'];
//if($port!=80) $hostname .= ":{$port}";
$path = str_replace('index.php','',$_SERVER['SCRIPT_NAME']);
return sprintf("http://%s%s",$hostname,$path);
}

View file

@ -185,10 +185,20 @@
function executeQuery($query_id, $args = NULL) {
if(!$query_id) return new Object(-1, 'msg_invalid_queryid');
list($module, $id) = explode('.',$query_id);
if(!$module || !$id) return new Object(-1, 'msg_invalid_queryid');
$id_args = explode('.', $query_id);
if(count($id_args)==2) {
$target = 'modules';
$module = $id_args[0];
$id = $id_args[1];
} elseif(count($id_args)==3) {
$target = $id_args[0];
if(!in_array($target, array('addons','widgets'))) return;
$module = $id_args[1];
$id = $id_args[2];
}
if(!$target || !$module || !$id) return new Object(-1, 'msg_invalid_queryid');
$xml_file = sprintf('./modules/%s/queries/%s.xml', $module, $id);
$xml_file = sprintf('./%s/%s/queries/%s.xml', $target, $module, $id);
if(!file_exists($xml_file)) return new Object(-1, 'msg_invalid_queryid');
// 일단 cache 파일을 찾아본다

View file

@ -236,6 +236,24 @@
return $output;
}
/**
* @brief 특정 테이블에 특정 인덱스 추가
* $target_columns = array(col1, col2)
* $is_unique? unique : none
**/
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
if(!is_array($target_columns)) $target_columns = array($target_columns);
$query = sprintf("create %s index %s%s_%s on %s%s (%s);", $is_unique?'unique':'', $this->prefix, $table_name, $index_name, $this->prefix, $table_name, "'".implode("','",$target_columns)."'");
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
function isIndexExists($table_name, $index_name) {
return false;
}
/**
* @brief xml 받아서 테이블을 생성

View file

@ -177,15 +177,27 @@
* @brief 1 증가되는 sequence값을 return (mysql의 auto_increment는 sequence테이블에서만 사용)
**/
function getNextSequence() {
$query = sprintf("insert into `%ssequence` (seq) values ('')", $this->prefix);
$query = sprintf("insert into `%ssequence` (seq) values ('0')", $this->prefix);
$this->_query($query);
$sequence = mysql_insert_id();
$query = sprintf("delete from `%ssequence` where seq < %d", $this->prefix, $sequence);
$this->_query($query);
if($seqnece % 10000 == 0) {
$query = sprintf("delete from `%ssequence` where seq < %d", $this->prefix, $sequence);
$this->_query($query);
}
return $sequence;
}
/**
* @brief mysql old password를 가져오는 함수 (mysql에서만 사용)
**/
function getOldPassword($password) {
$query = sprintf("select old_password('%s') as password", $password);
$result = $this->_query($query);
$tmp = $this->_fetch($result);
return $tmp->password;
}
/**
* @brief 테이블 기생성 여부 return
**/
@ -232,6 +244,30 @@
return false;
}
/**
* @brief 특정 테이블에 특정 인덱스 추가
* $target_columns = array(col1, col2)
* $is_unique? unique : none
**/
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
if(!is_array($target_columns)) $target_columns = array($target_columns);
$query = sprintf("alter table %s%s add %s index %s (%s);", $this->prefix, $table_name, $is_unique?'unique':'', $index_name, implode(',',$target_columns));
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
function isIndexExists($table_name, $index_name) {
$query = sprintf("show indexes from %s%s where key_name = '%s' ", $this->prefix, $table_name, $index_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
if(!$output) return false;
return true;
}
/**
* @brief xml 받아서 테이블을 생성
**/
@ -460,6 +496,16 @@
if($output->list_count) return $this->_getNavigationData($table_list, $columns, $condition, $output);
// list_order, update_order 로 정렬시에 인덱스 사용을 위해 condition에 쿼리 추가
if($output->order) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
$query = sprintf("select %s from %s %s", $columns, implode(',',$table_list), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));
@ -509,6 +555,16 @@
if($page > $total_page) $page = $total_page;
$start_count = ($page-1)*$list_count;
// list_order, update_order 로 정렬시에 인덱스 사용을 위해 condition에 쿼리 추가
if($output->order) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
$query = sprintf("select %s from %s %s", $columns, implode(',',$table_list), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));

View file

@ -186,15 +186,27 @@
* @brief 1 증가되는 sequence값을 return (mysql의 auto_increment는 sequence테이블에서만 사용)
**/
function getNextSequence() {
$query = sprintf("insert into `%ssequence` (seq) values ('')", $this->prefix);
$query = sprintf("insert into `%ssequence` (seq) values ('0')", $this->prefix);
$this->_query($query);
$sequence = mysql_insert_id();
$query = sprintf("delete from `%ssequence` where seq < %d", $this->prefix, $sequence);
$this->_query($query);
if($seqnece % 10000 == 0) {
$query = sprintf("delete from `%ssequence` where seq < %d", $this->prefix, $sequence);
$this->_query($query);
}
return $sequence;
}
/**
* @brief mysql old password를 가져오는 함수 (mysql에서만 사용)
**/
function getOldPassword($password) {
$query = sprintf("select old_password('%s') as password", $password);
$result = $this->_query($query);
$tmp = $this->_fetch($result);
return $tmp->password;
}
/**
* @brief 테이블 기생성 여부 return
**/
@ -241,7 +253,29 @@
return false;
}
/**
* @brief 특정 테이블에 특정 인덱스 추가
* $target_columns = array(col1, col2)
* $is_unique? unique : none
**/
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
if(!is_array($target_columns)) $target_columns = array($target_columns);
$query = sprintf("alter table %s%s add %s index %s (%s);", $this->prefix, $table_name, $is_unique?'unique':'', $index_name, implode(',',$target_columns));
$this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
function isIndexExists($table_name, $index_name) {
$query = sprintf("show indexes from %s%s where key_name = '%s' ", $this->prefix, $table_name, $index_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
if(!$output) return false;
return true;
}
/**
* @brief xml 받아서 테이블을 생성
@ -471,6 +505,16 @@
if($output->list_count) return $this->_getNavigationData($table_list, $columns, $condition, $output);
// list_order, update_order 로 정렬시에 인덱스 사용을 위해 condition에 쿼리 추가
if($output->order) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
$query = sprintf("select %s from %s %s", $columns, implode(',',$table_list), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));
@ -520,6 +564,16 @@
if($page > $total_page) $page = $total_page;
$start_count = ($page-1)*$list_count;
// list_order, update_order 로 정렬시에 인덱스 사용을 위해 condition에 쿼리 추가
if($output->order) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
$query = sprintf("select %s from %s %s", $columns, implode(',',$table_list), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));

View file

@ -175,8 +175,10 @@
$query = sprintf("insert into %ssequence (seq) values ('')", $this->prefix);
$this->_query($query);
$sequence = sqlite_last_insert_rowid($this->fd);
$query = sprintf("delete from %ssequence where seq < %d", $this->prefix, $sequence);
$this->_query($query);
if($seqnece % 10000 == 0) {
$query = sprintf("delete from %ssequence where seq < %d", $this->prefix, $sequence);
$this->_query($query);
}
return $sequence;
}
@ -225,6 +227,33 @@
return false;
}
/**
* @brief 특정 테이블에 특정 인덱스 추가
* $target_columns = array(col1, col2)
* $is_unique? unique : none
**/
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
if(!is_array($target_columns)) $target_columns = array($target_columns);
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("pragma table_info(%s%s)", $this->prefix, $table_name);
$query = sprintf('CREATE %s INDEX %s ON %s%s (%s)', $is_unique?'UNIQUE':'', $key_name, $this->prefix, $table_name, implode(',',$target_columns));
return $this->_query($query);
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
function isIndexExists($table_name, $index_name) {
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("pragma index_info(%s)", $key_name);
$result = $this->_query($query);
$output = $this->_fetch($result);
if(!$output) return false;
return true;
}
/**
* @brief xml 받아서 테이블을 생성
**/
@ -493,6 +522,16 @@
if($output->list_count) return $this->_getNavigationData($table_list, $columns, $condition, $output);
// list_order, update_order 로 정렬시에 인덱스 사용을 위해 condition에 쿼리 추가
if($output->order) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
$query = sprintf("select %s from %s %s", $columns, implode(',',$table_list), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));
@ -542,6 +581,16 @@
if($page > $total_page) $page = $total_page;
$start_count = ($page-1)*$list_count;
// list_order, update_order 로 정렬시에 인덱스 사용을 위해 condition에 쿼리 추가
if($output->order) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
$query = sprintf("select %s from %s %s", $columns, implode(',',$table_list), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));

View file

@ -196,9 +196,11 @@
$this->_prepare($query);
$result = $this->_execute();
$sequence = $this->handler->lastInsertId();
$query = sprintf("delete from %ssequence where seq < %d", $this->prefix, $sequence);
$this->_prepare($query);
$result = $this->_execute();
if($seqnece % 10000 == 0) {
$query = sprintf("delete from %ssequence where seq < %d", $this->prefix, $sequence);
$this->_prepare($query);
$result = $this->_execute();
}
return $sequence;
}
@ -248,6 +250,34 @@
return false;
}
/**
* @brief 특정 테이블에 특정 인덱스 추가
* $target_columns = array(col1, col2)
* $is_unique? unique : none
**/
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
if(!is_array($target_columns)) $target_columns = array($target_columns);
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf('CREATE %s INDEX %s ON %s%s (%s)', $is_unique?'UNIQUE':'', $key_name, $this->prefix, $table_name, implode(',',$target_columns));
$this->_prepare($query);
$this->_execute();
}
/**
* @brief 특정 테이블의 index 정보를 return
**/
function isIndexExists($table_name, $index_name) {
$key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name);
$query = sprintf("pragma index_info(%s)", $key_name);
$this->_prepare($query);
$output = $this->_execute();
if(!$output) return false;
return true;
}
/**
* @brief xml 받아서 테이블을 생성
**/
@ -533,6 +563,16 @@
if($output->list_count) return $this->_getNavigationData($table_list, $columns, $condition, $output);
// list_order, update_order 로 정렬시에 인덱스 사용을 위해 condition에 쿼리 추가
if($output->order) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
$query = sprintf("select %s from %s %s", $columns, implode(',',$table_list), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));
@ -582,6 +622,16 @@
if($page > $total_page) $page = $total_page;
$start_count = ($page-1)*$list_count;
// list_order, update_order 로 정렬시에 인덱스 사용을 위해 condition에 쿼리 추가
if($output->order) {
foreach($output->order as $key => $val) {
$col = $val[0];
if(!in_array($col, array('list_order','update_order'))) continue;
if($condition) $condition .= sprintf(' and %s < 2100000000 ', $col);
else $condition = sprintf(' where %s < 2100000000 ', $col);
}
}
$query = sprintf("select %s from %s %s", $columns, implode(',',$table_list), $condition);
if(count($output->groups)) $query .= sprintf(' group by %s', implode(',',$output->groups));

View file

@ -14,11 +14,16 @@
var $content_size = 0; ///< 출력하는 컨텐츠의 사이즈
var $gz_enabled = false; ///< gzip 압축하여 컨텐츠 호출할 것인지에 대한 flag변수
/**
* @brief 모듈객체를 받아서 content 출력
**/
function printContent(&$oModule) {
// gzip encoding 지원 여부 체크
if(strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')!==false && function_exists('ob_gzhandler') ) $this->gz_enabled = true;
// header 출력
$this->_printHeader();
@ -86,7 +91,10 @@
// files로 시작되는 src나 href의 값을 절대경로로 변경
$content = preg_replace('!(href|src)=("|\'){0,1}files!is', '\\1=\\2'.$path.'files', $content);
print preg_replace('!(href|src)=("|\'){0,1}\.\/([a-zA-Z0-9\_^\/]+)\/!is', '\\1=\\2'.$path.'$3/', $content);
$content = preg_replace('!(href|src)=("|\'){0,1}\.\/([a-zA-Z0-9\_^\/]+)\/!is', '\\1=\\2'.$path.'$3/', $content);
if($this->gz_enabled) print ob_gzhandler($content, 5);
else print $content;
}
/**
@ -208,6 +216,8 @@
function _printHeader() {
if(Context::getResponseMethod() != 'HTML') return $this->_printXMLHeader();
else return $this->_printHTMLHeader();
if($this->gz_enabled) header("Content-Encoding: gzip");
}
/**

View file

@ -20,7 +20,17 @@
if(!$xml_obj) return;
unset($buff);
list($module, $id) = explode('.',$query_id);
$id_args = explode('.', $query_id);
if(count($id_args)==2) {
$target = 'modules';
$module = $id_args[0];
$id = $id_args[1];
} elseif(count($id_args)==3) {
$target = $id_args[0];
if(!in_array($target, array('modules','addons','widgets'))) return;
$module = $id_args[1];
$id = $id_args[2];
}
// insert, update, delete, select등의 action
$action = strtolower($xml_obj->query->attrs->action);
@ -39,12 +49,12 @@
$output->tables[$table_name] = $alias;
// 테이블을 찾아서 컬럼의 속성을 구함
$table_file = sprintf('./modules/%s/schemas/%s.xml', $module, $table_name);
$table_file = sprintf('./%s/%s/schemas/%s.xml', 'modules', $module, $table_name);
if(!file_exists($table_file)) {
$searched_list = FileHandler::readDir('./modules');
$searched_count = count($searched_list);
for($i=0;$i<$searched_count;$i++) {
$table_file = sprintf('./modules/%s/schemas/%s.xml', $searched_list[$i], $table_name);
$table_file = sprintf('./%s/%s/schemas/%s.xml', 'modules', $searched_list[$i], $table_name);
if(file_exists($table_file)) break;
}
}

View file

@ -23,7 +23,7 @@ IE7 & IE6 & Below
/* default.css - Type Selector Definition */
* { margin:0; padding:0; }
html { width:100%; position:relative;}
html { width:100%; }
body { margin:0; font-size:.75em; font-family:sans-serif;}
img { border:none; }
label { cursor:pointer; }

View file

@ -150,7 +150,7 @@ function displayMultimedia(src, width, height, auto_start) {
html = ""+
"<object classid=\""+clsid+"\" codebase=\""+codebase+"\" width=\""+width+"\" height=\""+height+"\" >"+
"<param name=\"wmode\" value=\"transparent\" />"+
"<param name=\"allowScriptAccess\" value=\"always\" />"+
"<param name=\"allowScriptAccess\" value=\"sameDomain\" />"+
"<param name=\"movie\" value=\""+src+"\" />"+
"<param name=\"quality\" value=\"high\" />"+
"<embed src=\""+src+"\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\"></embed>"+

View file

@ -76,7 +76,7 @@
$lang->birthday = 'Birthdate';
$lang->browser_title = 'Browser Title';
$lang->title = 'Subject';
$lang->title_content = 'Title+Content';
$lang->title_content = 'Subject+Content';
$lang->content = 'Content';
$lang->document = 'Article';
$lang->comment = 'Comment';
@ -87,7 +87,7 @@
$lang->lock_comment = 'Block Comment';
$lang->allow_trackback = 'Allow Trackback';
$lang->uploaded_file = 'Attachment';
$lang->grant = 'Permission';
$lang->grant = 'Authority';
$lang->target = 'Target';
$lang->total = 'Total';
$lang->total_count = 'Count Total';
@ -140,7 +140,7 @@
$lang->unit_sec = 'sec';
$lang->unit_min = 'min';
$lang->unit_hour = 'hr';
$lang->unit_day = 'day';
$lang->unit_day = 'th';
$lang->unit_week = 'week';
$lang->unit_month = 'month';
$lang->unit_year = 'year';

View file

@ -4,11 +4,8 @@
* @author zero (zero@nzeo.com)
* @brief 기본적으로 사용하는 class파일의 include 환경 설정을
**/
/**
* @brief 기본적인 상수 선언, 웹에서 직접 호출되는 것을 막기 위해 체크하는 상수 선언
**/
define('__ZBXE__', true);
if(!defined('__ZBXE__')) exit();
/**
* @brief 디버그 메세지의 출력 장소

View file

@ -5,6 +5,8 @@
* @brief 편의 목적으로 만든 함수라이브러리 파일
**/
if(!defined('__ZBXE__')) exit();
/**
* @brief php5에 대비하여 clone 정의
**/

View file

@ -19,8 +19,14 @@
* - SVN Repository : http://svn.zeroboard.com/zeroboard_xe/trunk
* - document : http://doc.zeroboard.com
* - pdf 문서 : http://doc.zeroboard.com/zeroboard_xe.pdf
*
**/
/**
* @brief 기본적인 상수 선언, 웹에서 직접 호출되는 것을 막기 위해 체크하는 상수 선언
**/
define('__ZBXE__', true);
/**
* @brief 필요한 설정 파일들을 include
**/

View file

@ -22,7 +22,7 @@
レイアウト作成Zero
</description>
<description xml:lang="en">
This layout is the ZeroboardXE Official website layout.
This layout is the Zeroboard XE Official website layout.
Designer : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
Layout producer : zero
@ -44,7 +44,7 @@
<description xml:lang="ko">원하시는 컬러셋을 선택해주세요.</description>
<description xml:lang="jp">希望する色を選択してください。</description>
<description xml:lang="zh-CN">请选择颜色。</description>
<description xml:lang="en">Select colorset the colorset you want.</description>
<description xml:lang="en">Please select a colorset you want.</description>
<description xml:lang="es">Seleccióne la colección de colores.</description>
<options name="default">
<title xml:lang="ko">기본</title>

View file

@ -94,7 +94,7 @@
$this->setCommentEditor(0, 100);
// 만약 document_srl은 있는데 page가 없다면 글만 호출된 경우 page를 구해서 세팅해주자..
if($document_srl && !$page && ($oDocument->isExists()&&!$oDocument->isNotice())) {
if($document_srl && !$page && ($oDocument->isExists()&&!$oDocument->isNotice()) && !Context::get('category') && !Context::get('search_keyword')) {
$page = $oDocumentModel->getDocumentPage($document_srl, $this->module_srl, $this->list_count);
Context::set('page', $page);
}

View file

@ -62,11 +62,7 @@
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="winopen(this.href,'viewDocument');return false;">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText($module_info->subject_cut_size)}
<!--@end-->
@ -111,11 +107,7 @@
<input type="checkbox" value="{$document->document_srl}" onclick="doAddCart('{$mid}',this)" <!--@if($check_list[$document->document_srl])-->checked="checked"<!--@end--> />
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="window.open(this.href,'viewDocument');return false;">{$document->getTitleText(8,'')}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText(8,'')}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText(8,'')}
<!--@end-->

View file

@ -80,11 +80,7 @@
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="winopen(this.href,'viewDocument');return false;">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText($module_info->subject_cut_size)}
<!--@end-->

View file

@ -62,11 +62,7 @@
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="winopen(this.href,'viewDocument');return false;">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText($module_info->subject_cut_size)}
<!--@end-->
@ -107,11 +103,7 @@
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="winopen(this.href,'viewDocument');return false;">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText($module_info->subject_cut_size)}
<!--@end-->

View file

@ -49,8 +49,3 @@
</ul>
<!--@end-->
<!-- 댓글 입력 폼 -->
<!--@if($grant->write_comment && !$oDocument->isLocked())-->
<!--#include("./comment_form.html")-->
<!--@end-->

View file

@ -61,11 +61,7 @@
<input type="checkbox" value="{$document->document_srl}" onclick="doAddCart('{$mid}',this)" <!--@if($check_list[$document->document_srl])-->checked="checked"<!--@end--> />
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="winopen(this.href,'viewDocument');return false;">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText($module_info->subject_cut_size)}
<!--@end-->
@ -108,11 +104,7 @@
<input type="checkbox" value="{$document->document_srl}" onclick="doAddCart('{$mid}',this)" <!--@if($check_list[$document->document_srl])-->checked="checked"<!--@end--> />
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="window.open(this.href,'viewDocument');return false;">{$document->getTitleText(8,'')}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText(8,'')}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText(8,'')}
<!--@end-->

View file

@ -128,7 +128,12 @@
<!--@end-->
<!-- 댓글 파일 include -->
<!--@if($grant->write_comment && $oDocument->allowComment())-->
<a name="comment"></a>
<!--#include("./comment.html")-->
<!-- 댓글 입력 폼 -->
<!--@if($grant->write_comment && !$oDocument->isLocked() && $oDocument->allowComment() )-->
<!--#include("./comment_form.html")-->
<!--@else-->
<div class="gap1"></div>
<!--@end-->

View file

@ -49,8 +49,3 @@
</ul>
<!--@end-->
<!-- 댓글 입력 폼 -->
<!--@if($grant->write_comment && !$oDocument->isLocked())-->
<!--#include("./comment_form.html")-->
<!--@end-->

View file

@ -95,11 +95,7 @@
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="winopen(this.href,'viewDocument');return false;">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText($module_info->subject_cut_size)}
<!--@end-->

View file

@ -128,7 +128,12 @@
<!--@end-->
<!-- 댓글 파일 include -->
<!--@if($grant->write_comment && $oDocument->allowComment())-->
<a name="comment"></a>
<!--#include("./comment.html")-->
<!-- 댓글 입력 폼 -->
<!--@if($grant->write_comment && !$oDocument->isLocked() && $oDocument->allowComment() )-->
<!--#include("./comment_form.html")-->
<!--@else-->
<div class="gap1"></div>
<!--@end-->

View file

@ -49,8 +49,3 @@
</ul>
<!--@end-->
<!-- 댓글 입력 폼 -->
<!--@if($grant->write_comment && !$oDocument->isLocked())-->
<!--#include("./comment_form.html")-->
<!--@end-->

View file

@ -78,11 +78,7 @@
<strong class="category">{$category_list[$document->get('category_srl')]->title}</strong>
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="winopen(this.href,'viewDocument');return false;">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText($module_info->subject_cut_size)}
<!--@end-->
@ -120,11 +116,7 @@
<strong>{$category_list[$document->get('category_srl')]->title}</strong>
<!--@end-->
<!--@if($grant->view)-->
<!--@if($search_target && $search_keyword)-->
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="winopen(this.href,'viewDocument');return false;">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@end-->
<a href="{getUrl('document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
<!--@else-->
{$document->getTitleText($module_info->subject_cut_size)}
<!--@end-->

View file

@ -128,7 +128,12 @@
<!--@end-->
<!-- 댓글 파일 include -->
<!--@if($grant->write_comment && $oDocument->allowComment())-->
<a name="comment"></a>
<!--#include("./comment.html")-->
<!-- 댓글 입력 폼 -->
<!--@if($grant->write_comment && !$oDocument->isLocked() && $oDocument->allowComment() )-->
<!--#include("./comment_form.html")-->
<!--@else-->
<div class="gap1"></div>
<!--@end-->

View file

@ -21,7 +21,7 @@
<tr>
<th scope="row">{$lang->move_target_module}</th>
<td>
<select name="target_board">
<select name="target_board" class="w100">
<!--@foreach($board_list as $key => $val)-->
<!--@if($module_srl != $val->module_srl)-->
<option value="{$val->module_srl}">{$val->browser_title} ({$val->mid})</option>

View file

@ -8,15 +8,15 @@
$lang->counter = "Counter";
$lang->cmd_select_date = 'Select date';
$lang->cmd_select_counter_type = array(
'hour' => 'By hour',
'day' => 'By day',
'month' => 'By month',
'year' => 'By year',
'hour' => 'By Hour',
'day' => 'By Day',
'month' => 'By Month',
'year' => 'By Year',
);
$lang->total_counter = 'Total status';
$lang->total_counter = 'Total Status';
$lang->selected_day_counter = 'Selected day status';
$lang->unique_visitor = 'Visitor';
$lang->unique_visitor = 'Visitors';
$lang->pageview = 'Pageview';
?>

View file

@ -46,6 +46,20 @@
{@$img_width = 1}
<!--@end-->
<tr>
<!--@if(Context::getLangType()=='en')-->
<th scope="row">
<!-- 시간대별 -->
<!--@if($type == 'year')-->
<em>{$key}</em>
<!--@elseif($type == 'month')-->
<em>{$key}</em>
<!--@elseif($type == 'day')-->
<em>{$key}</em> {$lang->unit_day}
<!--@else-->
<em>{$key}</em>
<!--@end-->
</th>
<!--@else-->
<th scope="row">
<!-- 시간대별 -->
<!--@if($type == 'year')-->
@ -58,6 +72,7 @@
<em>{$key}</em> {$lang->unit_hour}
<!--@end-->
</th>
<!--@end-->
<td>
<div class="graph">
<img src="./images/iconBar.gif" alt="" width="12" height="6" class="bar" />

View file

@ -24,6 +24,12 @@
$oModuleController->insertActionForward('document', 'view', 'dispDocumentAdminList');
$oModuleController->insertActionForward('document', 'view', 'dispDocumentPrint');
$oDB = &DB::getInstance();
$oDB->addIndex("documents","idx_module_list_order", array("module_srl","list_order"));
$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"));
return new Object();
}
@ -43,6 +49,14 @@
**/
if(!$oDB->isColumnExists("documents","notify_message")) return true;
/**
* 2007. 8. 23 : document테이블에 결합 인덱스 적용
**/
if(!$oDB->isIndexExists("documents","idx_module_list_order")) return true;
if(!$oDB->isIndexExists("documents","idx_module_update_order")) return true;
if(!$oDB->isIndexExists("documents","idx_module_readed_count")) return true;
if(!$oDB->isIndexExists("documents","idx_module_voted_count")) return true;
return false;
}
@ -69,6 +83,25 @@
$oDB->addColumn('documents',"notify_message","char",1);
}
/**
* 2007. 8. 23 : document테이블에 결합 인덱스 적용
**/
if(!$oDB->isIndexExists("documents","idx_module_list_order")) {
$oDB->addIndex("documents","idx_module_list_order", array("module_srl","list_order"));
}
if(!$oDB->isIndexExists("documents","idx_module_update_order")) {
$oDB->addIndex("documents","idx_module_update_order", array("module_srl","update_order"));
}
if(!$oDB->isIndexExists("documents","idx_module_readed_count")) {
$oDB->addIndex("documents","idx_module_readed_count", array("module_srl","readed_count"));
}
if(!$oDB->isIndexExists("documents","idx_module_voted_count")) {
$oDB->addIndex("documents","idx_module_voted_count", array("module_srl","voted_count"));
}
return new Object(0,'success_updated');
}

View file

@ -180,17 +180,18 @@
}
function getRegdateTime() {
$year = substr($this->get('regdate'),0,4);
$month = substr($this->get('regdate'),4,2);
$day = substr($this->get('regdate'),6,2);
$hour = substr($this->get('regdate'),8,2);
$min = substr($this->get('regdate'),10,2);
$sec = substr($this->get('regdate'),12,2);
$regdate = $this->get('regdate');
$year = substr($regdate,0,4);
$month = substr($regdate,4,2);
$day = substr($regdate,6,2);
$hour = substr($regdate,8,2);
$min = substr($regdate,10,2);
$sec = substr($regdate,12,2);
return mktime($hour,$min,$sec,$month,$day,$year);
}
function getRegdateGM() {
return gmdate("D, d M Y H:i:s", $this->getRegdateTime());
return $this->getRegdate('D, d M Y H:i:s').' '.$GLOBALS['_time_zone'];
}
function getUpdate($format = 'Y.m.d H:i:s') {

View file

@ -5,10 +5,10 @@
* @brief Guestbook modules's basic language pack
**/
$lang->board = "Guestbook";
$lang->guestbook = "Guestbook";
// Words used in button
$lang->cmd_board_list = 'Guestbook List';
// Words used in buttons
$lang->cmd_guestbook_list = 'Guestbook List';
$lang->cmd_module_config = 'Common Guestbook Configuration';
$lang->cmd_view_info = 'Guestbook Info';

View file

@ -4,14 +4,17 @@
<title xml:lang="en">Zeroboard data transferation</title>
<title xml:lang="zh-CN">数据导入</title>
<title xml:lang="jp">ZBデータ移転</title>
<title xml:lang="es">Transferenciación de datos ZeroBoard</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</name>
<name xml:lang="en">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="es">Zero</name>
<description xml:lang="ko">XML파일을 이용하여 회원정보 또는 게시판등의 데이터를 입력합니다. </description>
<description xml:lang="en">Inputting member information or board's data using XML file.</description>
<description xml:lang="zh-CN">利用XML文件导入会员信息或版面数据。</description>
<description xml:lang="jp">XMLファイルを用いて会員情報または掲示板などの情報を入力します。</description>
<description xml:lang="es">Utiliza archivo XML para la transferencia de información de miembros y articulos.</description>
</author>
</module>

View file

@ -48,5 +48,5 @@
$lang->about_type_syncmember = 'If you are trying to synchronize the member information after transfering member and article information, select this option';
$lang->about_importer = "You can transfer Zeroboard4, Zeroboard5 Beta or other program's data into ZeroboardXE's data.\nIn order to tranfer, you have to use <a href=\"#\" onclick=\"winopen('');return false;\">XML Exporter</a> to convert the data you want into XML File then upload it.";
$lang->about_target_path = "첨부파일을 받기 위해 제로보드4가 설치된 위치를 입력해주세요.\n같은 서버에 있을 경우 /home/아이디/public_html/bbs 등과 같이 제로보드4의 위치를 입력하시고\n다른 서버일 경우 http://도메인/bbs 처럼 제로보드가 설치된 곳의 url을 입력해주세요";
$lang->about_target_path = "To get attachments from Zeroboard4, please input the address where Zeroboard4 is installed.\nIf it is located in the same server, input Zeroboard4's path such as /home/USERID/public_html/bbs\nIf it is not located in the same server, input the address where Zeroboard4 is installed. ex. http://Domain/bbs";
?>

View file

@ -0,0 +1,52 @@
<?php
/**
* @file es.lang.php
* @author zero (zero@nzeo.com)
* @brief Importer(importer) paquete lingual
**/
// Lenguage para botones
$lang->cmd_sync_member = 'Sincronizar';
$lang->cmd_continue = 'Continuar';
// especificación
$lang->importer = 'Transferir los datos de zeroboard';
$lang->source_type = 'Tipo de origen';
$lang->type_member = 'Datos de miembros';
$lang->type_module = 'Datos de articulos.';
$lang->type_syncmember = 'Sincronizar datos de miembros';
$lang->target_module = 'Modulo objetivo';
$lang->xml_file = 'archivo XML';
$lang->import_step_title = array(
1 => 'Paso 1. seleccione la origen',
12 => 'Paso 1-2. seleccione el modulo objetivo',
13 => 'Paso 1-3. seleccione la categoria',
2 => 'Paso 2. Suvir archivo de XML',
3 => 'Paso 2. Sincronizar los datos de miembro y articulos',
);
$lang->import_step_desc = array(
1 => 'Por favor seleccione el tipo de archivo XML para transfrerir.',
12 => 'Por favor seleccione el modulo que Ud. desea para transferir los datos.',
13 => 'Por favor seleccione la categoria para transferir.',
2 => "Por favor inserta la ubicación de archivo XML.\nEsto puede ser paso absoluto o relativo.",
3 => 'La información de miembro y articulos puede ser incorrecto. Sincroniza para la corrección de este problema.',
);
// guía/ alerta
$lang->msg_sync_member = 'Preciónar Sincronizar para empezar sincronización de los datos miembro y articulos.';
$lang->msg_no_xml_file = 'No puede encontrar archivo XML. Verifique sus entrada.';
$lang->msg_invalid_xml_file = 'invalido tipo de archivo XML.';
$lang->msg_importing = 'Escribiendo datos %d de %d. (Si esta parece paralizado haga clic en "Continuar".)';
$lang->msg_import_finished = 'Importación de %d datos esta completo. Depende la situción, puede ser la información no puede agregar.';
$lang->msg_sync_completed = 'Sincronización de Miembro, ariculos, y respuestas esta completo.';
// bla bla...
$lang->about_type_member = 'seleccione si desea transferir información de miembro.';
$lang->about_type_module = 'seleccione si desea transferir información de articulos';
$lang->about_type_syncmember = 'seleccione si desea sincronizar despues de transferencia';
$lang->about_importer = "Puede importar Zeroboard4, zb5beta o datos de otras programas a ZeroBoardXE.\nPara la transferencia utiliza<a href=\"#\" onclick=\"winopen('');return false;\">Exportador XML</a> para recrear datos en archivo XML, y subir los resultos.";
$lang->about_target_path = "Escribe la ubicación de ZeroBoard4 para bajar el archivo.\nSi existe en mismo servidor escribe la ubicación de ZeroBoard4 por ejemplo: /home/ID/public_html/bbs o si existe en otro servidor escribe URL como ejemplo: http://dominio/bbs";
?>

View file

@ -4,14 +4,17 @@
<title xml:lang="en">Manage installation</title>
<title xml:lang="zh-CN">安装管理</title>
<title xml:lang="jp">インストール管理</title>
<title xml:lang="es">Manajar Instalación</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</name>
<name xml:lang="en">Zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="jp">Zero</name>
<name xml:lang="es">Zero</name>
<description xml:lang="ko">설치 관리 모듈</description>
<description xml:lang="en">Module for managing installation</description>
<description xml:lang="zh-CN">安装管理模块。</description>
<description xml:lang="jp">インストール管理モジュール</description>
<description xml:lang="es">Modulo para manejar la instalación</description>
</author>
</module>

View file

@ -144,7 +144,7 @@ EndOfLicense;
'mysql_innodb' => 'Using innodb to use mysql DB.<br />Transaction is enabled for innodb',
'sqlite2' => 'Supporting sqlite2 which saves the data into the file.<br />When installing, DB file should be created at unreachable place from web.<br />(Never got tested on stabilization)',
'sqlite3_pdo' => 'Suppots sqlite3 by PHP\'s PDO.<br />When installing, DB file should be created at unreachable place from web.',
'cubrid' => 'Use CUBRID DB.<br />(Never got tested on stabilization and didn\'t get tuned.)',
'cubrid' => 'Use CUBRID DB.',
);
$lang->form_title = 'Please input DB &amp; Admin information';

View file

@ -0,0 +1,304 @@
<?php
/**
* @file es.lang.php
* @author zero (zero@nzeo.com)
* @brief Paquete Lingual en Español
**/
$lang->introduce_title = 'Zeroboard XE Installation';
$lang->license = <<<EndOfLicense
- Nombre de programa : zeroboard XE (zeroboardXE)
- Licencia : GNU GENERAL PUBLIC LICENSE
- Official website : <a href="http://www.zeroboard.com">http://www.zeroboard.com</a>
- Author : zero (zero@zeroboard.com, http://www.zeroboard.com)
Esta es la traducción al español de la famosa licencia GPL "GNU Public License" (GPL), versión 2 que cubre la mayor parte del software de la Free Software Foundation, y muchos más programas.
IMPORTANTE: Esta traducción tiene carácter méramente informativo y carece de validez legal. Si distribuye software libre o ha recibido software libre con esta traducción utilice para cuestiones legales siempre la GPL versión 2 en Ingles de la Free Software Foundation.
GNU GENERAL PUBLIC LICENSE (GPL)
Versión 2, Junio 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USAEstá permitido copiar y distribuir copias idénticas de estalicencia, pero no está permitida su modificación.Preámbulo
Las licencias de la mayoría del software están diseñadas para eliminar su libertad de compartir y modificar dicho software. Por contra, la GNU General Public License (GPL) está diseñada para garantizar su libertad de compartir y modificar el software. Software libre para garantizar la libertad de sus usuarios. Esta licencia GNU General Public License (GPL) se aplica en la mayoría de los programas realizado por la Free Software Foundation (FSF, Fundación del Software Libre) y en cualquier otro programa en los que los autores quieran aplicarla. También, muchos otros programas de la Free Software Foundation están cubiertos por la GNU Lesser General Public License (LGPL) e igualmente puede usarla para cubrir sus programas.
Cuando hablamos de Software Libre, hablamos de libertad, no de precio. Nuestra licencia General Public License (GPL) está diseñada para asegurarle las libertades de distribuir cópias de Software Libre (y cobrar por ese servicio si quiere), asegurarle que recibirá el código fuente del programa o bien podrá conseguirlo si quiere, asegurarle que puede modificar el programa o modificar algunas de sus piezas para un nuevo programa y para garantizarle que puede hacer todas estas cosas.
Para proteger sus derechos, necesitamos realizar restricciones que prohíben a cualquiera denegar estos derechos o pedirle que reniegue de sus derechos. Estas restricciones se traducen en ciertas obligaciones por su parte si ustéd piensa distribuir copias del programa o tiene intención de modificarlo.
Por ejemplo, si usted distribuye copias de un programa, ya sea gratuitamente o no, usted tiene que otorgar a sus clientes todos los derechos que ha adquirido usted con el programa. Usted tiene que asegurarse de que sus clientes reciben o pueden recibir el código fuente si lo solicitan y ustéd tiene que mostrarles los términos de la licencia para que conozcan sus derechos.
Nosotros protegemos los derechos con dos pasos:
(1) utilizando el copyright en nuestros programas, y
(2) ofreciéndole esta licencia que le garantiza legalmente el derecho a copia, redistribución y/o modificación de este programa.
Además, para nuestra protección y la de cada uno de los autores, queremos tener la certeza de que todo el mundo entiende que no hay ninguna garantía por este Software Libre. Si el programa es modificado por alguien más y este falla, ese software no es el original y por tanto cualquier problema introducido por otras personas no afecta a la reputación de los autores originales.
Por último, cualquier programa está amenazado constantemente por las patentes de software. Desearíamos evitar el riesgo que distribuidores de programas libres adquieran individualmente patentes, transformando de facto el software libre en privativo. Para evitar este problema, dejamos claro que cualquier patente deberá ser licenciada para permitir el uso libre de cualquier persona o no ser patentada.
Los términos y condiciones para la copia, distribución y modificación del software se especifican en el siguiente punto.
TÉRMINOS Y CONDICIONES PARA LA COPIA, DISTRIBUCIÓN Y MODIFICACIÓN
0.La licencia se aplica a cualquier programa u otro trabajo que contenga un aviso del dueño del copyright diciendo que el software debe ser distribuido bajo los términos y condiciones de esta licencia General Public License (GPL). El "programa", desde ahora, se refiere tanto a el Programa como a cualquier trabajo derivado bajo la ley del copyrigth: es decir, un trabajo que contenga el programa o una porción de el, tanto copia como con modificaciones y/o traducido a otra lengua (más abajo, la traducción está incluida sin limitaciones en el término "Modificación".) Cada licencia está asignada a usted.
Otras actividades distintas de la copia, distribución y modificación no están cubiertas por esta licencia y están fuera de su objetivo. Ejecutar el programa no está restringido, y el resultado del programa está cubierto por la licencia solo si su contenido contribuye parte de un trabajo derivado del Programa (independiente de la ejecución del programa). Incluso si esto es verdad, depende de lo que haga el programa
1. Ustéd puede copiar y distribuir copias exactas del código fuente del Programa tal y como lo recibió, usando cualquier medio, a condición de, adecuadamente y de forma bien visible, publique en cada copia una nota de copyright y un repudio de garantía; mantenga intactas todas las notas que se refieran a esta licencia y a la exención de garantía; y proporcione a los receptores del Programa una copia de esta Licencia junto al programa.
Usted puede cobrar unos honorarios por la transferencia física de la copia, y puede a su criterio ofrecer una garantía adicional por un precio.
2. Ustéd puede modificar su copia o copias del Programa o cualquier porción de ella, obteniendo así un trabajo derivado del Programa, y copiar y distribuir estas modificaciones o trabajo derivado bajo los mismos término de la Sección 1, antedicho, cumpliendo además las siguientes condiciones:
a) Debe hacer que los ficheros modificados contengan información visible de que ha modificado el fichero y la fecha de cualquier cambios.
b) Debe hacer que cualquier trabajo que distribuya o publique y que en su totalidad o en parte contenga o sea derivado del Programa o de cualquier parte de el, sea licenciado como un todo, sin carga alguna a las terceras partes, bajo los términos de esta licencia.
c) Si la modificación del programa normalmente interpreta comandos interactivos en su ejecución, debe, cuando comience su ejecución para ese uso interactivo de la forma más habitual, imprimir o mostrar un aviso de exención de garantía (o por el contrario que ofrece garantía) y de como los usuarios pueden redistribuir el programa bajo estas condiciones, e informando a los usuarios de como pueden obtener una copia de esta Licencia. (Excepción: Si el programa es interactivo pero normalmente no muestra este anuncio, no es necesario en un trabajo derivado mostrar este aviso).
Estos requisitos se aplican a las modificaciones como un todo. Si secciones identificables del trabajo no están derivadas del Programa, pueden ser razonablemente consideradas independientes y trabajos separados en si mismos, por tanto esta Licencia, y sus términos, no se aplican a estas secciones cuando ustéd las distribuye como trabajos independientes. Pero cuando usted distribuye las mismas secciones como parte de un todo que es un trabajo derivado del Programa, la distribución del todo debe respetar los términos de esta licencia, cuyos permisos para otros licenciatarios se extienden al todo, y por lo tanto a todas y cada una de sus partes, con independencia de quién la escribió.
Por lo tanto, no es la intención de esta sección reclamar derechos o desafiar sus derechos sobre trabajos escritos totalmente por usted mismo. Por el contrario, la intención es ejercer el derecho a controlar la distribución de trabajos derivados o colectivos basados en el Programa.
Además, el mero acto de agregar otro trabajo no basado en el Programa con el Programa (o con otro trabajo derivado del Programa) en un volumen de almacenamiento o un medio de distribución no consigue que el otro trabajo se encuentre bajo los términos de esta licencia.
3. Ustéd puede modificar su copia y distribuir el Programa (o un trabajo derivado, cubierto bajo la Sección 2) en formato objeto o ejecutable bajo los términos de las Secciones 1 y 2 antedichas proporcionado con el al menos una de las siguientes:
a) Acompañando el Programa con con el código fuente completo, legible por un ordenador, correspondiente a la arquitectura correspondiente, que debe ser distribuido bajo los términos de las secciones 1 y 2 usando un médio físico habitual en el intercambio de software; o,
b) Acompañando el Programa con una oferta por escrito, valida al menos por tres años, de facilitar a cualquier tercera parte, sin un cargo mayo del coste del médio físico, una copia completa legible por un ordenador del código fuente de la arquitectura elegida, que será distribuido bajo los términos de las Secciónes 1 y 2 usando un médio físico habitual en el intercambio de software; o,
c) Acompañando el Programa con un la información que recibió, ofreciendo distribuir el código fuente correspondiente. (Esta opción se permite sólo para distribuir software gratuito -no comercial- y sólo si recibió el programa como código objeto o en formato ejecutable con esta misma oferta, de acuerdo con el apartado b anterior).
por código fuente de un trabajo se entiende la forma óptima para realizar modificaciones en el. Para un programa ejecutable, el código fuente completo se refiere a todo el código fuente para todos los módulos que contiene, mas cualquier fichero asociado de definición de interfaces, mas el script utilizado para la compilación y la instalación del ejecutable. Sin embargo, como una excepción especial, el código fuente distribuido no necesita incluir nada que no sea normalmente distribuido (ni en código fuente o en forma binaria) con los componentes mas importantes (compiladores, kernels y demás) del sistema operativo donde corre el ejecutable, salvo que el componente acompañe al ejecutable.
Si la distribución de ejecutables o compilado se realiza ofreciendo acceso a un sitio para la copia, entonces ofrecer un acceso equivalente de copia desde un sitio para el código fuente cuenta como una distribución de código fuente, incluso aunque terceras partes no estén obligadas a copiar el código fuente con el código compilado.
4. Usted no debe copiar, modificar, sublicenciar o distribuir el Programa excepto como está permitido expresamente en esta Licencia. Cualquier intento de copiar, modificar, sublicenciar o distribuir el Programa que no esté incluido en la Licencia está prohibido, y anulará automáticamente los derechos otorgados por esta licencia. Sin embargo, las partes que hayan recibido copias, o derechos, por usted bajo esta Licencia no verán sus licencias terminadas mientras estas partes continúen cumpliendo los términos de esta licencia.
5. Usted no está obligado a aceptar esta licencia, ya que usted no la ha firmado. Sin embargo, nada mas le garantiza los derechos de modificación o distribución del programa o de sus trabajos derivados. Estas acciones están prohibidas por la ley si usted no acepta esta Licencia. En cualquier caso, por modificar o distribuir el programa (o cualquier trabajo derivado del programa), usted indica su aceptación implícita de esta Licencia, ya que la necesita para hacerlo, y todos sus términos y condiciones de copia, distribución o modificación del Programa o trabajos derivados.
6. Cada vez que usted redistribuya el Programa (o cualquier trabajo derivado del Programa), el receptor automáticamente recibe la licencia por parte del licenciatario original para copiar, distribuir o modificar el Programa sujeto a estos términos y condiciones. Usted no puede imponer ninguna otra restricción a los receptores limitando los derechos garantizados en esta Licencia. Usted no es responsable de asegurar el cumplimiento de terceras partes sobre la Licencia.
7. Si, como consecuencia de una decisión judicial o una acusación de infracción de patentes o por cualquier otra razón (no limitada a una causa de patentes), le son impuestas condiciones (ya sea por una orden judicial, por un acuerdo o cualquier otra forma) que contradiga los términos y condiciones d esta Licencia, no le exime de cumplir los términos y condiciones de dicha Licencia. Si usted no puede distribuir el Programa cumpliendo simultáneamente tanto los términos y condiciones de la Licencia como cualquier otra obligación que le haya sido impuesta, usted consecuentemente no puede distribuir el Programa bajo ninguna forma. Por ejemplo, si una patente no permite la redistribución gratuita del Programa por parte de todos aquellos que reciben copias directa o indirectamente a través de usted, entonces la única forma de satisfacer tanto esa condición como los términos y condiciones de esta Licencia sería evitar completamente la distribución del Programa.
Si alguna porción de esta sección es inválida o imposible de cumplir bajo una circunstancia particular, el resto de la sección tiene que intentar aplicarse y la seccionó completa debe aplicarse en cualquier otra circunstancia.
El propósito de esta sección no es inducir a infringir ninguna patente o otros derechos de propiedad o impugnar la validez de estos derechos; esta sección tiene le único propósito de proteger la integridad del sistema de distribución del Software Libre, que está implementado bajo practicas de licencias públicas. Mucha gente ha realizado generosas contribuciones a la gran variedad de software distribuido bajo este sistema con confianza en una aplicación consistente del sistema; será el autor/donante quien decida si quiere distribuir software mediante cualquier otro sistema y una licencia no puede imponer esa elección.
Este apartado pretende dejar completamente claro lo que se cree que es una consecuencia del resto de esta Licencia.
8. Si la distribución y/o el uso del Programa está restringido en ciertos países, ya sea por patentes o por interfaces bajo copyright, el propietario del Copyright original que pone el Programa bajo esta Licencia debe añadir unos límites geográficos expecíficos excluyendo esos países, por lo que la distribución solo estará permitida en los países no excluidos. En este caso, la Licencia incorpora la limitación de escribir en el cuerpo de esta Licencia.
9. La Free Software Foundation puede publicar versiones revisadas y/o nuevas de la Licencia GPL de cuando en cuando. Dichas versiones serán similares en espíritu a la presente versión, pero pueden ser diferentes en detalles para considerar nuevos problemas o situaciones.
Cada versión tiene un número de versión propio. Si el Programa especifica un número de versión de esta Licencia que hace referencia a esta o "cualquier versión posterior", usted tiene la opción de seguir los términos y condiciones de o bien la versión referenciada o bien cualquiera de las versiones posteriores publicadas por la Free Software Foundation. Si el Programa no especifica ningún número de versión, usted debe elegir cualquiera de las versiones publicadas por la Free Software Foundation.
10. Si usted quiere incorporar parte del Programa en otros programas libres cuyas condiciones de distribución son diferentes, escriba al autor para pedir permiso. Para el software con el copyrigth bajo la Free Software Foundation, escriba a la Free Software Foundation; algunas veces hacemos excepciones en esto. Nuestra decisión estará guiada por los objetivos de preservar la libertad del software y de los trabajos derivados y el de promocionar el intercambio y reutilización del software en general.
SIN GARANTÍA
11. DADO QUE ESTE PROGRAMA ESTÁ LICENCIADO LIBRE DE COSTE, NO EXISTE GARANTÍA PARA EL PROGRAMA, EN TODA LA EXTENSIÓN PERMITIDA POR LA LEY APLICABLE. EXCEPTO CUANDO SE INDIQUE POR ESCRITO, LOS DUEÑOS DEL COPYRIGHT Y/O OTRAS PARTES PROVEEDORAS FACILITAN EL PROGRAMA "TAL CUAL" SI GARANTÍA DE NINGUNA CLASE, NI EXPLÍCITA NI IMPLÍCITA, INCLUYENDO, PERO NO LIMITANDO, LAS GARANTÍAS APLICABLES MERCANTILES O DE APLICABILIDAD PARA UN PROPÓSITO PARTICULAR. USTED ASUME CUALQUIER RIESGO SOBRE LA CALIDAD O LAS PRESTACIONES DEL PROGRAMA. SI EL PROGRAMA TIENE UN ERROR, USTED ASUME EL COSTE DE TODOS LOS SERVICIOS NECESARIOS PARA REPARARLO O CORREGIRLO.
12. EN NINGÚN CASO, EXCEPTO CUANDO SEA REQUERIDO POR LA LEGISLACIÓN APLICABLE O HAYA SIDO ACORDADO POR ESCRITO, NINGÚN PROPIETARIO DEL COPYRIGTH NI NINGUNA OTRA PARTE QUE MODIFIQUE Y/O REDISTRIBUYA EL PROGRAMA SEGÚN SE PERMITE EN ESTA LICENCIA SERÁ RESPONSABLE POR DAÑOS, INCLUYENDO CUALQUIER DAÑO GENERAL, ESPECIAL ACCIDENTAL O RESULTANTE PRODUCIDO POR EL USO O LA IMPOSIBILIDAD DE USO DEL PROGRAMA (CON INCLUSIÓN PERO SIN LIMITACIÓN DE LA PÉRDIDA DE DATOS O A LA GENERACIÓN INCORRECTA DE DATOS O A LAS PÉRDIDAS OCASIONADAS O POR USTED O POR TERCERAS PARTES, O A UN FALLO DEL PROGRAMA AL FUNCIONAR EN COMBINACIÓN CON CUALQUIER OTRO PROGRAMA), INCLUSO SI DICHO PROPIETARIO U OTRA PARTE HA SIDO ADVERTIDO SOBRE LA POSIBILIDAD DE DICHOS DAÑOS.
FIN DE LOS TÉRMINOS Y CONDICIONES.
Cómo aplicar estos términos a un nuevo programa
Si usted desarrolla un nuevo programa, y quiere que tenga el mejor uso público posible, la mejor manera para alcanzar esto es hacer el programa Software Libre para que cada uno pueda redistribuirlo y cambiarlo bajo estos términos.
Para hacer esto, adjunte la siguiente información al programa. Es mas seguro añadirla al inicio de cada fichero de código fuente para difundir lo mas efectivamente posible la exclusión de garantía; y cada fichero debería tener al menos la línea de "copyright" y un enlace a donde obtener la información completa.
Una linea para el nombre del programa y una idea de lo que hace el programa.Copyright (C) año nombre del autorEste programa es Software Libre; Usted puede redistribuirlo y/o modificarlo
bajo los términos de la GNU Licencia Pública General (GPL) tal y como ha sido
públicada por la Free Software Foundation; o bien la versión 2 de la Licencia,
o (a su opción) cualquier versión posterior.
Este programa se distribuye con la esperanza de que sea útil, pero SI NINGUNA
GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o ADECUACIÓN A UN
PROPÓSITO PARTICULAR. Consulte la GNU General Public License (GPL) para más
detalles. Usted debe recibir una copia de la GNU General Public License (GPL)
junto con este programa; si no, escriba a la Free Software Foundation Inc.
51 Franklin Street, 5º Piso, Boston, MA 02110-1301, USA.
También añada información sobre como ponerse en contacto con usted de manera electrónica y por correo ordinario.
Si el programa es interactivo, haga que la salida muestre una información como esta cuando se inicie el módo interactivo:
Gnomovision version 69, Copyright (C) año nombre del autorGnomovision se facilita sin ABSOLUTAMENTE NINGUNA GARANTÍ?A; vea los detalles
escribiendo `show w'. Esto es Software Libre, y está invitado a redistribuirlo
bajo unas ciertas condiciones. Escriba `show c' para ver los detalles.
Los comandos hipotéticos `show w' y `show c' deben mostrar las partes apropiadas de la General Public License (GPL). Por supuesto, los comandos que se usen pueden llamarse de una manera distinta a `show w' y `show c'; pueden ser incluso pulsaciones de ratón o elementos del menú, como sea mas apropiado a su Programa.
También debería conseguir que su empleador (si trabaja como programador) o su Universidad (si es el caso) firme una «renuncia de copyright» para el Programa, si es necesario. A continuación se ofrece un ejemplo, altere los nombres si es necesario:
Yoyodyne, Inc., por el presente documento renuncia a todos los intereses de
copyright para el programa `Gnomovision' escrito por James Hacker.
Firmado por Ty Coon, 1 de Abril de 1989Presidente o Vicepresidente de Ty CoonEsta licencia General Pública (GPL) no permite incluir este software dentro de programas privativos. Si su programa es una librería o subrituna, debería considerar si es mas útil permitir enlazar aplicaciones privativas con la libreraía. Si esto es lo que usted quiere, use la GNU Lesser General Public License (LGPL) en vez de esta licencia.
<b>GPL versión 2 en Ingles</b> -
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
EndOfLicense;
$lang->install_condition_title = "Please check the installation requirement.";
$lang->install_checklist_title = array(
'php_version' => 'Versión PHP',
'permission' => 'Permiso',
'xml' => 'XML Library',
'iconv' => 'ICONV Library',
'gd' => 'GD Library',
'session' => 'Configuración Session.auto_start',
);
$lang->install_checklist_desc = array(
'php_version' => '[Necesario] Si la versión de PHP es 5.2.2, zeroboard no van a instalar a su cuenta por el error',
'permission' => '[Necesario] Es necesario que tiene permiso de 707 donde la instalación de Zeroboard o ./ arcivos directorios',
'xml' => '[Necesario] XML Library es necesario para comunicación XML',
'session' => '[Necesario] el valor de Session.auto_start en el archivo de configuración PHP(php.ini) deberia 0(cero) para útilizar sesión en zeroboard',
'iconv' => 'Iconv deberia instalado para convertir UTF-8 y otro paquete lingual.',
'gd' => 'GD Library deberia instalado para utilizar función de convertir imagen',
);
$lang->install_checklist_xml = 'Instalar XML Library';
$lang->install_without_xml = 'XML Library no esta instalado';
$lang->install_checklist_gd = 'Instalar GD Library';
$lang->install_without_gd = 'GD Library no esta instalado para convertir imagen';
$lang->install_checklist_gd = 'Intalar GD Library';
$lang->install_without_iconv = 'Iconv Library no esta instalado para procesar fuentes';
$lang->install_session_auto_start = 'Problema possible puede ocurir por la configuración de PHP. session.auto_start es egual a 1';
$lang->install_permission_denied = 'Installation path\'s permission doesn\'t equal to 707';
$lang->cmd_agree_license = 'Yo accepto la licencia';
$lang->cmd_install_fix_checklist = 'Yo he configurado la condiciónes necesarios para la instalación.';
$lang->cmd_install_next = 'Continuar installation';
$lang->db_desc = array(
'mysql' => 'Usar funciónes mysql*() para usar Base de Datos mysql.<br />Transacción es desabilitado por archivo de DB es creado por myisam.',
'mysql_innodb' => 'Usar innodb para usar BD mysql.<br />Transacción es hablilitado para innodb',
'sqlite2' => 'Soporte de sqlite2 cual guardas datos en los archivos.<br />En la instalación, es necesario crear archivo de BD en lugar inalcanzable de web.<br />(Nunca preubado para la establización)',
'sqlite3_pdo' => 'Soporte sqlite3 por PDO de PHP.<br />En la instalación, es necesario crear archivo de BD en lugar inalcanzable de web.',
'cubrid' => 'Usar BD CUBRID.',
);
$lang->form_title = 'Por favor escribir BD &amp; información de Admin';
$lang->db_title = 'Por favor escribir información de BD';
$lang->db_type = 'Tipo de BD';
$lang->select_db_type = 'Por favor selecióne BD que desea a utilizar.';
$lang->db_hostname = 'Hostname de BD';
$lang->db_port = 'Port de BD';
$lang->db_userid = 'ID de BD';
$lang->db_password = 'Contraseña de BD';
$lang->db_database = 'Nombre de BD';
$lang->db_database_file = 'archivo de BD';
$lang->db_table_prefix = 'Cabezazo de la tabla';
$lang->admin_title = 'Información de Administrator';
$lang->env_title = 'Configuración';
$lang->use_rewrite = 'Usar rewrite mod';
$lang->about_rewrite = "Si servidor de web soporte rewrite mod, URL largas como http://bla/?documento_srl=123 puede abreviar como http://bla/123";
$lang->time_zone = 'Zona de hora';
$lang->about_time_zone = "Si es diferente la hora de su servidor y la hora de sus unbicacción, Ud. puede elegir Zona de hora de su lugar para corregir";
$lang->about_database_file = 'Sqlite guardas datos en el archivo. Es necesario guardar archivo de BD en lugar inalcanzable de web.<br/><span style="color:red">archivo de datos debe tener permiso 707.</span>';
$lang->success_installed = 'Installación Completo';
$lang->success_updated = 'Actualización Completo';
$lang->msg_cannot_proc = 'No puede ejecutar la requesta por no soporte de ambiente minimal para la instalación.';
$lang->msg_already_installed = 'instalación de Zeroboard existe.';
$lang->msg_dbconnect_failed = "Error ha occurido por la conección de BD.\nPor favor chequea la información de BD de nuevo";
$lang->msg_table_is_exists = "Tablas existe en BD.\nArchivo de configuración es recreado.";
$lang->msg_install_completed = "Installación completa.\nGracias para elegir ZeroboardXE";
$lang->msg_install_failed = "Error ha occurrido en crear archivos de installación.";
?>

View file

@ -237,7 +237,7 @@ EndOfLicense;
'mysql_innodb' => 'MySQL DBで「innodb」タイプでデータの入出力を行います。「innodb」ではトランザクションの処理が行えます。',
'sqlite2' => 'ファイルタイプデータベースである「sqlite2」をサポートします。インストールの際は、DBファイルはウェブがらアクセスできない場所に作成してください。安定化までのテストは行われていません',
'sqlite3_pdo' => 'PHPのPDOを経由うして「sqlite3」をサポートします。インストールの際は、ウェブからアクセスできない場所に作成してください。',
'cubrid' => 'CUBRID DBを利用します。<br />(安定化までのテスト及びチューニングは行われていません)',
'cubrid' => 'CUBRID DBを利用します。',
);
$lang->form_title = 'データベース &amp; 管理者情報入力';

View file

@ -236,7 +236,7 @@ EndOfLicense;
'mysql_innodb' => 'mysql DB를 innodb를 이용하여 사용합니다.<br />innodb는 트랜잭션을 사용할 수 있습니다',
'sqlite2' => '파일로 데이터를 저장하는 sqlite2를 지원합니다.<br />설치시 DB파일은 웹에서 접근할 수 없는 곳에 생성하여 주셔야 합니다.<br />(안정화 테스트가 되지 않았습니다)',
'sqlite3_pdo' => 'PHP의 PDO로 sqlite3를 지원합니다.<br />설치시 DB파일은 웹에서 접근할 수 없는 곳에 생성하여 주셔야 합니다.',
'cubrid' => 'CUBRID DB를 이용합니다.<br />(안정화 테스트 및 튜닝이 되지 않았습니다)',
'cubrid' => 'CUBRID DB를 이용합니다.',
);
$lang->form_title = 'DB &amp; 관리자 정보 입력';

View file

@ -229,7 +229,7 @@ EndOfLicense;
'mysql_innodb' => '利用innodb使用mysql DB。<br />innodb可以使用transaction。',
'sqlite2' => '支持用文件形式保存数据的sqlite2。<br />安装时DB文件应在web不能访问的地方生成。<br />(还没有通过安全的测试)',
'sqlite3_pdo' => '用PHP的 PDO支持 sqlite3。<br />安装时DB文件应在web不能访问的地方生成。',
'cubrid' => '使用CUBRID DB。<br />(还没有通过安全的测试)',
'cubrid' => '使用CUBRID DB。',
);
$lang->form_title = '输入数据库及管理员信息';

View file

@ -24,5 +24,9 @@
It supports integration search for chosen modules.
All articles except secret articles will be searched, so you need to be careful not to include secret module to target .
</description>
<description xml:lang="es">
Soporte la busqueda integración de los módulos elegidos.
Todo los articulos excepto secretos van a buscado, y es necesario manejar con cuido a no incluir modulo secretos a objetivo.
</description>
</author>
</module>

View file

@ -0,0 +1,31 @@
<?php
/**
* @file modules/integration_search/lang/es.lang.php
* @author zero <zero@nzeo.com>
* @brief Paquete Lingual
**/
$lang->integration_search = "Búesqueda Integrado";
$lang->sample_code = "Codigo Ejemplo";
$lang->about_target_module = "Solo modulos elegidos son objetivos. Por favor cuide para configurar autoridad";
$lang->about_sample_code = "Ud. puede insertar Búsqueda Integrado en su diseño por insertar codigos arriba";
$lang->msg_no_keyword = "Escribe palabra para la búsqueda";
$lang->is_result_text = "Búsqueda de <strong>'%s'</strong> tiene <strong>%d</strong> resultos";
$lang->is_search_option = array(
'title' => 'Titulo',
'content' => 'Contenido',
'title_content' => 'Titulo+Contenido',
//'comment' => 'Commentarios',
);
$lang->is_sort_option = array(
'regdate' => 'Fecha de Registro',
'comment_count' => 'Num de Commentarios',
'readed_count' => 'Num de query',
'voted_count' => 'Num de Votos',
);
?>
?>

View file

@ -6,15 +6,15 @@
**/
// normal words
$lang->krzip = "Korean Zip code";
$lang->krzip = "Korean Zip Code";
$lang->krzip_server_hostname = "Server name for zip code checking";
$lang->krzip_server_port = "Server port for zip code checking";
$lang->krzip_server_query = "Server path for zip code checking";
// descriptions
$lang->about_krzip_server_hostname = "Input the server's domain for checking zip codes and receiving the result list";
$lang->about_krzip_server_port = "Input the server's port number for checking the zip code";
$lang->about_krzip_server_query = "Input the query url that will be requested for checking the zip code";
$lang->about_krzip_server_hostname = "Please input the server's domain for checking zip codes and receiving the result list";
$lang->about_krzip_server_port = "Please input the server's port number for checking the zip code";
$lang->about_krzip_server_query = "Please input the query url that will be requested for checking the zip code";
// error messages
$lang->msg_not_exists_addr = "Target for searching doesn't exist";

View file

@ -4,14 +4,17 @@
<title xml:lang="zh-CN">布局</title>
<title xml:lang="jp">レイアウト</title>
<title xml:lang="en">Layout</title>
<title xml:lang="es">Diseños</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>
<name xml:lang="jp">Zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<description xml:lang="ko">레이아웃을 생성/관리하는 모듈입니다.</description>
<description xml:lang="zh-CN">生成/管理布局的模块。</description>
<description xml:lang="jp">レイアウトを生成・管理するモジュールです。</description>
<description xml:lang="en">This module is for creating/managing.</description>
<description xml:lang="es">Este modulo es para crear y manejar los Diseños.</description>
</author>
</module>

View file

@ -24,9 +24,9 @@
$lang->about_title = 'Please input the title that is easy to verify when connecting to module';
$lang->about_not_apply_menu = 'All connected module\'s layout will be changed by checking this option.';
$lang->about_layout = "Layout module helps you to create the site's layout easily.<br />By using layout setting and menu connection, website's completed shape will display with various modules.<br />* Those layouts which are unabled to delete or modify are the blog or other module's layout. ";
$lang->about_layout = "Layout module helps you to create the site's layout easily.<br />By using layout setting and menu connection, website's completed shape will be displayed with various modules.<br />* Those layouts which are unabled to delete or modify are the blog or other module's layout. ";
$lang->about_layout_code =
"It will be applied to the service when you save the layout code after editing it.
You must previous the result before saving it.
Refer to <a href=\"#\" onclick=\"winopen('http://trac.zeroboard.com/trac/wiki/TemplateHandler');return false;\">ZeroboardXE Pamphlet</a> for ZeroboardXE's grammer of pamphlet.";
Please first preview your code and then save it.
You can refer grammar of Zeroboard XE's template from <a href=\"#\" onclick=\"winopen('http://trac.zeroboard.com/trac/wiki/TemplateHandler');return false;\">ZeroboardXE Template</a>.";
?>

View file

@ -0,0 +1,32 @@
<?php
/**
* @file modules/layout/lang/es.lang.php
* @author zero <zero@nzeo.com>
* @brief Paquete Lingual para Diseño
**/
$lang->cmd_layout_management = 'Configuración de Diseño';
$lang->cmd_layout_edit = 'Modificar Diseño';
$lang->layout_name = 'Nombre de Diseño';
$lang->layout_maker = "Desarrollador de Diseño";
$lang->layout_history = "Actualización";
$lang->layout_info = "Información de Diseño";
$lang->layout_list = 'Lista de Diseño';
$lang->menu_count = 'Menú';
$lang->downloaded_list = 'Lista de descargados';
$lang->layout_preview_content = 'Los contenidos preliminado aquí.';
$lang->not_apply_menu = 'Aplicar Diseños';
$lang->cmd_move_to_installed_list = "Ver la lista creados";
$lang->about_downloaded_layouts = "Ver la lista de diseños descargado";
$lang->about_title = 'Por favor escribe el titulo para verficar con facilidad cuando connecta a módulo';
$lang->about_not_apply_menu = 'Para cambiar los diseños de todo los módulos connectado.';
$lang->about_layout = "Modulos de diseño ayuda Ud. para crear Diseño del sitio de web<br />Por usar la configuración de diseño y conección de menú, completa forma del sitio de web van a mostrar con modulos varios<br />* Los diseños cual no pueden eliminar o modificar son de blog o otro modulos de diseño. ";
$lang->about_layout_code =
"El diseño van a aplicado a la servicio despues de modificado y guardado.
Ud. tiene que ver resultos ante de guardarlos.
Referir a<a href=\"#\" onclick=\"winopen('http://trac.zeroboard.com/trac/wiki/TemplateHandler');return false;\">ZeroboardXE Pamphlet(Ingles)</a> para gramación de de ZeroboardXE.";
?>

View file

@ -75,7 +75,7 @@
$lang->cmd_signup = 'Join';
$lang->cmd_modify_member_info = 'Modify Member Info';
$lang->cmd_modify_member_password = 'Change Password';
$lang->cmd_view_member_info = 'View Member Info';
$lang->cmd_view_member_info = 'My Info';
$lang->cmd_leave = 'Leave';
$lang->cmd_member_list = 'Member List';
@ -85,13 +85,13 @@
$lang->cmd_manage_id = 'Manage Prohibited ID';
$lang->cmd_manage_form = 'Manage Join Form';
$lang->cmd_view_own_document = 'View Written Articles';
$lang->cmd_view_scrapped_document = 'View Scraps';
$lang->cmd_view_scrapped_document = 'Scraps';
$lang->cmd_send_email = 'Send Mail';
$lang->cmd_send_message = 'Send Message';
$lang->cmd_reply_message = 'Reply Message';
$lang->cmd_view_friend = 'View Friends';
$lang->cmd_view_friend = 'Friends';
$lang->cmd_add_friend = 'Register as Friend';
$lang->cmd_view_message_box = 'View Message Box';
$lang->cmd_view_message_box = 'Message Box';
$lang->cmd_store = "Save";
$lang->cmd_add_friend_group = 'Add Friend Group';
$lang->cmd_rename_friend_group = 'Change Name of Friend Group';

View file

@ -873,6 +873,7 @@
// 비밀번호 검사 : 우선 md5() hash값으로 비굥
if($password && $member_info->password != md5($password)) {
// 혹시나 하여.. -_-;; mysql old_password로 검사하여 맞으면 db의 비밀번호 교체
if($this->mysql_pre4_hash_password($password) == $member_info->password) {
@ -882,9 +883,21 @@
$output = executeQuery('member.updateMemberPassword', $password_args);
if(!$output->toBool()) return $output;
// md5(), mysql old_password와도 다르면 잘못된 비빌번호 오류 메세지 리턴
} else {
return new Object(-1, 'invalid_password');
// mysql_pre4_hash_password()함수의 결과와도 다를 경우 현재 mysql DB이용시 직접 쿼리 날림
if(substr(Context::getDBType(),0,5)=='mysql') {
$oDB = &DB::getInstance();
if($oDB->getOldPassword($password) == $member_info->password) {
$password_args->member_srl = $member_info->member_srl;
$password_args->password = md5($password);
$output = executeQuery('member.updateMemberPassword', $password_args);
if(!$output->toBool()) return $output;
} else return new Object(-1, 'invalid_password');
// md5(), mysql old_password와도 다르면 잘못된 비빌번호 오류 메세지 리턴
} else {
return new Object(-1, 'invalid_password');
}
}
}

View file

@ -460,7 +460,9 @@
else $member_info = $this->getMemberInfoByMemberSrl($message->sender_srl);
if($member_info) {
foreach($member_info as $key => $val) $message->{$key} = $val;
foreach($member_info as $key => $val) {
if($key != 'regdate') $message->{$key} = $val;
}
}
// 받은 쪽지이고 아직 읽지 않았을 경우 읽은 상태로 변경

View file

@ -4,7 +4,11 @@
<table name="member" alias="member" />
</tables>
<columns>
<column name="*" />
<column name="message.*" />
<column name="member.user_id" />
<column name="member.member_srl" />
<column name="member.nick_name" />
<column name="member.user_name" />
</columns>
<conditions>
<condition operation="equal" column="message.sender_srl" var="member_srl" notnull="notnull" />

View file

@ -4,7 +4,11 @@
<table name="member" alias="member" />
</tables>
<columns>
<column name="*" />
<column name="message.*" />
<column name="member.user_id" />
<column name="member.member_srl" />
<column name="member.nick_name" />
<column name="member.user_name" />
</columns>
<conditions>
<condition operation="equal" column="message.receiver_srl" var="member_srl" notnull="notnull" />

View file

@ -61,7 +61,7 @@
$lang->about_admin_id = 'You can grant a manager to have all permissions to the module.\n You can enter multiple IDs using <br />,(comma) \n(but the module manager cannot access the site admin page.)';
$lang->about_grant = 'If you disable all objects having specific permissions, all members even not logined may have permission.';
$lang->about_open_rss = 'You can select RSS on the current module to be open to the public.\nNo matter the view permission of article , RSS will be open to the public by its option.';
$lang->about_module = "All of Zeroboard XE except the basic library consist of module.\n [Manage module] module will show all installed modules and help you to manage them.\nThrough [Add shortcut] feature, you can manage frequently used modules easily.";
$lang->about_module = "Zeroboard XE consists of modules except basic library.\n [Module Manage] module will show all installed modules and help you to manage them.\nThrough [Add Shortcuts] feature, you can manage frequently used modules easily.";
$lang->about_extra_vars_default_value = 'If multiple default values are needed, you can link them with comma(,).';
?>

View file

@ -69,12 +69,7 @@
<a href="{getUrl('act','')}" class="button"><span>{$lang->cmd_back}</span></a>
<!--@end-->
</td>
<tr>
<th colspan="2">{$lang->content}</th>
</tr>
<tr>
<td colspan="2">{$module_info->content}</td>
</tr>
</tr>
</table>
</form>

View file

@ -27,9 +27,11 @@
* @brief 포인트를 구해옴
**/
function getPoint($member_srl, $from_db = false) {
$cache_filename = sprintf('./files/member_extra_info/point/%s%d.cache.txt', getNumberingPath($member_srl), $member_srl);
$path = sprintf('./files/member_extra_info/point/%s',getNumberingPath($member_srl));
if(!is_dir($path)) FileHandler::makeDir($path);
$cache_filename = sprintf('%s%d.cache.txt', $path, $member_srl);
if(!$from_db && file_exists($target_filename)) return trim(FileHandler::readFile($cache_filename));
if(!$from_db && file_exists($cache_filename)) return trim(FileHandler::readFile($cache_filename));
// DB에서 가져옴
$args->member_srl = $member_srl;

View file

@ -28,8 +28,8 @@
$page = (int)Context::get('page'); ///< 페이지, 없으면 1
if(!$page) $page = 1;
$list_count = (int)Context::get('list_count'); ///< 목록 갯수, 기본 20, 최고 100개
if(!$list_count|| $list_count>100) $list_count = 20;
$list_count = (int)Context::get('list_count'); ///< 목록 갯수, 기본 10, 최고 100개
if(!$list_count|| $list_count>100) $list_count = 10;
$start_date = Context::get('start_date'); ///< 시작 일자, 없으면 무시
if(strlen($start_date)!=14 || !ereg("^([0-9]){14}$", $start_date) ) unset($start_date);
@ -86,8 +86,8 @@
if($start_date) $args->start_date = $start_date;
if($end_date) $args->end_date = $end_date;
$args->sort_index = 'last_update';
$args->order_type = 'desc';
$args->sort_index = 'update_order';
$args->order_type = 'asc';
// 대상 문서들을 가져옴
$oDocumentModel = &getModel('document');
@ -104,7 +104,7 @@
}
$info->total_count = $output->total_count;
$info->total_page = $output->total_page;
$info->date = gmdate("D, d M Y H:i:s");
$info->date = date("D, d M Y H:i:s").' '.$GLOBALS['_time_zone'];
$info->language = Context::getLangType();
// RSS 출력물에서 사용될 변수 세팅

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1">
<title xml:lang="ko">TatterTools 데이터 이전</title>
<title xml:lang="zh-CN">TatterTools 数据导入</title>
<title xml:lang="jp">TTデータ移転</title>
<title xml:lang="en">Transfer data from TatterTools</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>
<name xml:lang="jp">Zero</name>
<name xml:lang="en">Zero</name>
<description xml:lang="ko">
태터툴즈의 백업파일을 제로보드XE에 입력을 하는 모듈입니다.
첨부파일 포함하지 않은 백업파일이 필요합니다.
첨부파일은 원주소에서 직접 다운로드를 하게 됩니다.
</description>
<description xml:lang="zh-CN">
导入TatterTools的备份文件到Zeroboard XE的模块。
需要不包含附件的备份文件。
附件将在原地址直接下载。
</description>
<description xml:lang="jp">
TatterToolsのバックアップファイルをゼロボードXE用にデータの変換を行うモジュールです。添付ファイルを含まないバックアップファイルが必要です。添付ファイルは、元のアドレスからダウンロードします。
</description>
<description xml:lang="en">
Module for inputting TattertTools' backup file to ZeroboardXE.
Backup file without attachment is required.
Attachments will be downloaded from the original address.
</description>
</author>
</module>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<actions>
<action name="dispTtimporterAdminContent" type="view" standalone="true" admin_index="true" />
<action name="procTtimporterAdminImport" type="controller" standalone="true" />
</actions>
</module>

View file

@ -0,0 +1,21 @@
<?php
/**
* @file modules/ttimporter/lang/en.lang.php
* @author zero (zero@nzeo.com)
* @brief Ttimporter module / basic language pack
**/
$lang->ttimporter = "Import Tetter Tools data";
$lang->about_tt_importer = "You can input the Tetter Tools data into the module you want.\n The attached file will be directly downloaded via web, so please be sure to enable the original Tetter Tools blog.";
$lang->target_module = "Target module";
$lang->target_file = "Target xml file";
$lang->target_url = "Blog URL";
$lang->cmd_continue = 'Continue';
$lang->msg_no_xml_file = 'Could not find the XML file! Please check the URL.';
$lang->msg_invalid_xml_file = 'Invalid XML file type!';
$lang->msg_importing = 'No. of importing: %d (if stopped long time, please click the "Continue" button.)';
$lang->msg_import_finished = 'No. of imported: %d (according to condition, some data may not be imported properly.)';
?>

View file

@ -0,0 +1,21 @@
<?php
/**
* @file ko.lang.php
* @author zero (zero@nzeo.com) 翻訳RisaPapa
* @brief Ttimporter モジュールの基本言語パッケージ
**/
$lang->ttimporter = "TTデータの移転";
$lang->about_tt_importer = "TatterTools データを希望するモジュールへデータを変換し、入力を行います。添付ファイルは、元のから直接ダウンロードするため、元のTatterTools が作動するようにしておいてください。";
$lang->target_module = "対象モジュール";
$lang->target_file = "対象XMLファイル";
$lang->target_url = "ブログURL";
$lang->cmd_continue = '続ける';
$lang->msg_no_xml_file = 'XMLファイルが見つかりません。パスを確認してください。';
$lang->msg_invalid_xml_file = '正しくないフォーマットのXMLファイルです。';
$lang->msg_importing = '%d個を変換・入力中です。止まっている場合は「続ける」ボタンをクリックしてください。';
$lang->msg_import_finished = '%d個のデータを変換し、入力が完了しました。正しく変換入力されていないデータがある場合もあります。';
?>

View file

@ -0,0 +1,21 @@
<?php
/**
* @file ko.lang.php
* @author zero (zero@nzeo.com)
* @brief Ttimporter 모듈의 기본 언어팩
**/
$lang->ttimporter = "태터툴즈 데이터 이전";
$lang->about_tt_importer = "태터툴즈 데이터를 원하는 모듈에 입력을 할 수 있습니다.\n첨부파일은 웹으로 직접 다운로드를 받으니 꼭 원래 태터툴즈 블로그를 활성화 시켜 주셔야 합니다.";
$lang->target_module = "대상 모듈";
$lang->target_file = "대상 xml파일";
$lang->target_url = "블로그URL";
$lang->cmd_continue = '계속진행';
$lang->msg_no_xml_file = 'XML파일을 찾을 수 없습니다. 경로를 다시 확인해주세요';
$lang->msg_invalid_xml_file = '잘못된 형식의 XML파일입니다';
$lang->msg_importing = '%d개를 입력중입니다. (계속 멈추어 있으면 "계속진행" 버튼을 클릭해주세요)';
$lang->msg_import_finished = '%d개의 데이터 입력이 완료되었습니다. 상황에 따라 입력되지 못한 데이터가 있을 수 있습니다.';
?>

View file

@ -0,0 +1,21 @@
<?php
/**
* @file zh-CN.lang.php
* @author zero (zero@nzeo.com)
* @brief Ttimporter 模块的基本语言包
**/
$lang->ttimporter = "TatterTools 数据导入";
$lang->about_tt_importer = "可以把TatterTools 的数据导入到指定的模块当中。\n因附件要在网站直接下载所以导入前必须先激活原TatterTools 博客。";
$lang->target_module = "对象模块";
$lang->target_file = "对象xml文件";
$lang->target_url = "博客URL";
$lang->cmd_continue = '继续进行';
$lang->msg_no_xml_file = '找不到XML文件。请重新确认路径';
$lang->msg_invalid_xml_file = '错误的XML文件格式。';
$lang->msg_importing = '正在输入%d个。长时间停止响应时请按“继续进行”按钮';
$lang->msg_import_finished = '已完成%d个数据导入。根据情况可能会有没有被导入的数据。';
?>

View file

@ -0,0 +1,14 @@
<filter name="import_tt" module="ttimporter" act="procTtimporterAdminImport">
<form>
<node target="xml_file" required="true" />
<node target="url" required="true" />
<node target="module_srl" required="true" />
</form>
<parameter />
<response callback_func="completeImport">
<tag name="error" />
<tag name="message" />
<tag name="is_finished" />
<tag name="position" />
</response>
</filter>

View file

@ -0,0 +1,46 @@
<!--%import("js/importer_admin.js")-->
<!--%import("filter/import_tt.xml")-->
<h3>{$lang->ttimporter} <span class="gray">{$lang->cmd_management}</span></h3>
<!-- 설명 -->
<div class="infoText">{nl2br($lang->about_tt_importer)}</div>
<form action="./" method="get" onsubmit="return procFilter(this, import_tt);" id="fo_import">
<input type="hidden" name="position" value="0" />
<table cellspacing="0" class="tableType3 gap1">
<col width="150" />
<col />
<tr>
<th scope="col">{$lang->target_module}</th>
<td class="left">
<select name="module_srl">
<!--@foreach($module_list as $key => $val)-->
<option value="{$val->module_srl}">{$val->browser_title} - {$key}</option>
<!--@end-->
</select>
</td>
</tr>
<tr>
<th scope="col">{$lang->target_file}</th>
<td class="left"><input type="text" name="xml_file" value="" class="inputTypeText w100" /></td>
</tr>
<tr>
<th scope="col">{$lang->target_url}</th>
<td class="left"><input type="text" name="url" value="" class="inputTypeText w100" /></td>
</tr>
</table>
<div class="tRight gap1">
<span class="button"><input type="submit" value="{$lang->cmd_registration}" /></span>
</div>
<div id="import_status" style="display:none" class="gap1">
<div id="step2_position" class="desc"></div>
<div class="tRight gap1">
<span class="button"><input type="button" value="{$lang->cmd_continue}" onclick="doManualProcess(); return false" /></span>
</div>
</div>
</form>

View file

@ -0,0 +1,29 @@
/**
* @file modules/ttimporter/js/importer_admin.js
* @author zero (zero@nzeo.com)
* @brief importer에서 사용하는 javascript
**/
/* Step Complete Import */
function completeImport(ret_obj) {
var message = ret_obj['message'];
var is_finished = ret_obj['is_finished'];
var position = ret_obj['position'];
xGetElementById("import_status").style.display = "block";
if(is_finished=='Y') {
alert(ret_obj["message"]);
location.href = location.href;
} else {
var fo_obj = xGetElementById('fo_import');
fo_obj.position.value = position;
xInnerHtml('import_status', message);
procFilter(fo_obj, import_tt);
}
}
function doManualProcess() {
var fo_obj = xGetElementById('fo_import');
procFilter(fo_obj, import_tt);
}

View file

@ -0,0 +1,264 @@
<?php
/**
* @class ttimporterAdminController
* @author zero (zero@nzeo.com)
* @brief ttimporter 모듈의 admin controller class
**/
class ttimporterAdminController extends ttimporter {
var $oXml = null;
var $oDocumentController = null;
var $oFileController = null;
var $oCommentController = null;
var $oTrackbackController = null;
var $position = 0;
var $imported_count = 0;
var $limit_count = 20;
var $url = '';
var $module_srl = 0;
var $category_list = array();
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief import 실행
**/
function procTtimporterAdminImport() {
// 실행시간 무한대로 설정
@set_time_limit(0);
// 변수 체크
$this->module_srl = Context::get('module_srl');
$xml_file = Context::get('xml_file');
$this->url = Context::get('url');
$this->position = (int)Context::get('position');
if(substr($this->url,-1)!='/') $this->url .= '/';
// 파일을 찾을 수 없으면 에러 표시
if(!file_exists($xml_file)) return new Object(-1,'msg_no_xml_file');
$this->oXml = new XmlParser();
$oDocumentModel = &getModel('document');
$tmp_category_list = $oDocumentModel->getCategoryList($this->module_srl);
if(count($tmp_category_list)) {
foreach($tmp_category_list as $key => $val) $this->category_list[$val->title] = $key;
} else {
$this->category_list = array();
}
// module_srl이 있으면 module데이터로 판단하여 처리, 아니면 회원정보로..
$is_finished = $this->importDocument($xml_file);
if($is_finished) {
$this->add('is_finished', 'Y');
$this->setMessage( sprintf(Context::getLang('msg_import_finished'), $this->imported_count) );
} else {
$this->add('position', $this->imported_count);
$this->add('is_finished', 'N');
$this->setMessage( sprintf(Context::getLang('msg_importing'), $this->imported_count) );
}
}
/**
* @brief 게시물정보 import
**/
function importDocument($xml_file) {
$filesize = filesize($xml_file);
if($filesize<1) return;
$this->oDocumentController = &getController('document');
$this->oFileController = &getController('file');
$this->oCommentController = &getController('comment');
$this->oTrackbackController = &getController('trackback');
$is_finished = true;
$fp = @fopen($xml_file, "r");
if($fp) {
$buff = '';
while(!feof($fp)) {
$str = fread($fp,1024);
$buff .= $str;
$buff = preg_replace_callback("!<category>(.*?)<\/category>!is", array($this, '_parseCategoryInfo'), trim($buff));
$buff = preg_replace_callback("!<post (.*?)<\/post>!is", array($this, '_importDocument'), trim($buff));
if($this->position+$this->limit_count <= $this->imported_count) {
$is_finished = false;
break;
}
}
fclose($fp);
}
return $is_finished;
}
function _insertAttachment($matches) {
$xml_doc = $this->oXml->parse($matches[0]);
$filename = $xml_doc->attachment->name->body;
$url = sprintf("%sattach/1/%s", $this->url, $filename);
$tmp_filename = './files/cache/tmp_uploaded_file';
if(FileHandler::getRemoteFile($url, $tmp_filename)) {
$file_info['tmp_name'] = $tmp_filename;
$file_info['name'] = $filename;
$this->oFileController->insertFile($file_info, $this->module_srl, $this->document_srl, 0, true);
$this->uploaded_count++;
}
@unlink($tmp_filename);
}
function _importDocument($matches) {
if($this->position > $this->imported_count) {
$this->imported_count++;
return;
}
$this->uploaded_count = 0;
$xml_doc = $this->oXml->parse($matches[0]);
// 문서 번호와 내용 미리 구해 놓기
$this->document_srl = $args->document_srl = getNextSequence();
$args->content = $xml_doc->post->content->body;
// 첨부파일 미리 등록
preg_replace_callback("!<attachment (.*?)<\/attachment>!is", array($this, '_insertAttachment'), $matches[0]);
// 컨텐츠의 내용 수정 (이미지 첨부파일 관련)
$args->content = preg_replace("!(\[##\_1)([a-zA-Z]){1}\|([^\|]*)\|([^\|]*)\|([^\]]*)\]!is", sprintf('<img src="./files/attach/images/%s/%s/$3" $4 />', $this->module_srl, $args->document_srl), $args->content);
if($xml_doc->post->comment && !is_array($xml_doc->post->comment)) $xml_doc->post->comment = array($xml_doc->post->comment);
$logged_info = Context::get('logged_info');
// 문서 입력
$args->module_srl = $this->module_srl;
$args->category_srl = $this->category_list[$xml_doc->post->category->body];
$args->is_notice = 'N';
$args->is_secret = 'N';
$args->title = $xml_doc->post->title->body;
$args->readed_count = 0;
$args->voted_count = 0;
$args->comment_count = count($xml_doc->post->comment);
$args->trackback_count = 0;
$args->uploaded_count = $this->uploaded_count;
$args->password = '';
$args->nick_name = $logged_info->nick_name;
$args->member_srl = $logged_info->member_srl;
$args->user_id = $logged_info->user_id;
$args->user_name = $logged_info->user_name;
$args->email_address = $logged_info->email_address;
$args->homepage = $logged_info->homepage;
$tag_list = array();
$tags = $xml_doc->post->tag;
if($tags && !is_array($tags)) $tags = array($tags);
for($i=0;$i<count($tags);$i++) {
$tag_list[] = $tags[$i]->body;
}
$args->tags = implode(',',$tag_list);
$args->regdate = date("YmdHis", $xml_doc->post->created->body);
$args->ipaddress = '';
$args->allow_comment = $xml_doc->post->acceptcomment->body?'Y':'N';
$args->lock_comment = 'N';
$args->allow_trackback = $xml_doc->post->accepttrackback->body?'Y':'N';
$output = $this->oDocumentController->insertDocument($args, true);
if($output->toBool()) {
// 코멘트 입력
$comments = $xml_doc->post->comment;
if(count($comments)) {
foreach($comments as $key => $val) {
unset($comment_args);
$comment_args->document_srl = $args->document_srl;
$comment_args->comment_srl = getNextSequence();
$comment_args->module_srl = $this->module_srl;
$comment_args->parent_srl = 0;
$comment_args->content = $val->content->body;
$comment_args->password = '';
$comment_args->nick_name = $val->commenter->name->body;
$comment_args->user_id = '';
$comment_args->user_name = '';
$comment_args->member_srl = 0;
$comment_args->email_address = '';
$comment_args->regdate = date("YmdHis",$val->written->body);
$comment_args->ipaddress = $val->commenter->ip->body;
$this->oCommentController->insertComment($comment_args, true);
if($val->comment) {
$val = $val->comment;
unset($child_comment_args);
$child_comment_args->document_srl = $args->document_srl;
$child_comment_args->comment_srl = getNextSequence();
$child_comment_args->module_srl = $this->module_srl;
$child_comment_args->parent_srl = $comment_args->comment_srl;
$child_comment_args->content = $val->content->body;
$child_comment_args->password = '';
$child_comment_args->nick_name = $val->commenter->name->body;
$child_comment_args->user_id = '';
$child_comment_args->user_name = '';
$child_comment_args->member_srl = 0;
$child_comment_args->email_address = '';
$child_comment_args->regdate = date("YmdHis",$val->written->body);
$child_comment_args->ipaddress = $val->commenter->ip->body;
$this->oCommentController->insertComment($child_comment_args, true);
}
}
}
/*
// 트랙백 입력
$trackbacks = $xml_doc->document->trackbacks->trackback;
if($trackbacks && !is_array($trackbacks)) $trackbacks = array($trackbacks);
if(count($trackbacks)) {
foreach($trackbacks as $key => $val) {
$trackback_args->document_srl = $args->document_srl;
$trackback_args->module_srl = $this->module_srl;
$trackback_args->url = $val->url->body;
$trackback_args->title = $val->title->body;
$trackback_args->blog_name = $val->blog_name->body;
$trackback_args->excerpt = $val->excerpt->body;
$trackback_args->regdate = $val->regdate->body;
$trackback_args->ipaddress = $val->ipaddress->body;
$this->oTrackbackController->insertTrackback($trackback_args, true);
}
}
*/
}
$this->imported_count ++;
return '';
}
/**
* @brief <categories>정보를 읽어서 정보를 구함
**/
function _parseCategoryInfo($matches) {
$xml_doc = $this->oXml->parse($matches[0]);
if(!$xml_doc->category->priority) return $matches[0];
$title = trim($xml_doc->category->name->body);
if(!$title || $this->category_list[$title]) return;
$oDocumentController = &getAdminController('document');
$output = $oDocumentController->insertCategory($this->module_srl, $title);
$this->category_list[$title] = $output->get('category_srl');
}
}
?>

View file

@ -0,0 +1,32 @@
<?php
/**
* @class ttimporterAdminView
* @author zero (zero@nzeo.com)
* @brief ttimporter 모듈의 admin view class
**/
class ttimporterAdminView extends ttimporter {
/**
* @brief 초기화
*
* importer 모듈은 일반 사용과 관리자용으로 나누어진다.\n
**/
function init() {
}
/**
* @brief XML 파일을 업로드하는 form 출력
**/
function dispTtimporterAdminContent() {
// 모듈 목록을 구함
$oModuleModel = &getModel('module');
$module_list = $oModuleModel->getMidList();
Context::set('module_list', $module_list);
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('index');
}
}
?>

View file

@ -0,0 +1,36 @@
<?php
/**
* @class ttimporter
* @author zero (zero@nzeo.com)
* @brief ttimporter 모듈의 high class
**/
class ttimporter extends ModuleObject {
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
// action forward에 등록 (관리자 모드에서 사용하기 위함)
$oModuleController = &getController('module');
$oModuleController->insertActionForward('ttimporter', 'view', 'dispTtimporterAdminContent');
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
return false;
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
return new Object();
}
}
?>

View file

@ -23,7 +23,7 @@
<ul class="commentList">
<!--@foreach($widget_info->comment_list as $val)-->
<li><a href="{getUrl('','document_srl',$val->document_srl)}#comment_{$val->comment_srl}">{htmlspecialchars(cut_str($val->content,20,'...'))}</a></li>
<li><a href="{getUrl('','document_srl',$val->document_srl)}#comment_{$val->comment_srl}">{htmlspecialchars(cut_str(strip_tags($val->content),20,'...'))}</a></li>
<!--@end-->
</ul>
</div>

View file

@ -18,27 +18,58 @@
// 위젯 자체적으로 설정한 변수들을 체크
$title = $args->title;
$order_target = $args->order_target;
if(!in_array($order_target, array('list_order','update_order'))) $order_target = 'list_order';
$order_type = $args->order_type;
if(!in_array($order_type, array('asc','desc'))) $order_type = 'asc';
$list_count = (int)$args->list_count;
if(!$list_count) $list_count = 5;
$mid_list = explode(",",$args->mid_list);
$subject_cut_size = $args->subject_cut_size;
if(!$subject_cut_size) $subject_cut_size = 0;
// DocumentModel::getDocumentList()를 이용하기 위한 변수 정리
$obj->mid = $mid_list;
$obj->sort_index = $order_target;
$obj->list_count = $list_count;
// module_srl 대신 mid가 넘어왔을 경우는 직접 module_srl을 구해줌
if($mid_list) {
$oModuleModel = &getModel('module');
$module_srl = $oModuleModel->getModuleSrlByMid($mid_list);
}
// document 모듈의 model 객체를 받아서 getDocumentList() method를 실행
// DocumentModel::getDocumentList()를 이용하기 위한 변수 정리
$obj->module_srl = implode(',',$module_srl);
$obj->sort_index = $order_target;
$obj->order_type = $order_type=="desc"?"asc":"desc";
$obj->list_count = $list_count;
if($obj->sort_index == 'list_order') $obj->avoid_notice = -2100000000;
$output = executeQuery('widgets.newest_document.getNewestDocuments', $obj);
// document 모듈의 model 객체를 받아서 결과를 객체화 시킴
$oDocumentModel = &getModel('document');
$output = $oDocumentModel->getDocumentList($obj);
// 오류가 생기면 그냥 무시
if(!$output->toBool()) return;
// 결과가 있으면 각 문서 객체화를 시킴
if(count($output->data)) {
foreach($output->data as $key => $attribute) {
$document_srl = $attribute->document_srl;
$oDocument = null;
$oDocument = new documentItem();
$oDocument->setAttribute($attribute);
$document_list[$key] = $oDocument;
}
} else {
$document_list = array();
}
// 템플릿 파일에서 사용할 변수들을 세팅
if(count($mid_list)==1) $widget_info->module_name = $mid_list[0];
$widget_info->title = $title;
$widget_info->document_list = $output->data;
$widget_info->document_list = $document_list;
$widget_info->subject_cut_size = $subject_cut_size;
Context::set('widget_info', $widget_info);

View file

@ -0,0 +1,17 @@
<query id="getDocumentList" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="in" column="module_srl" var="module_srl" filter="number" />
<condition operation="equal" column="category_srl" var="category_srl" pipe="and" />
<condition operation="excess" column="list_order" var="avoid_notice" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="list_order" order="order_type" />
<list_count var="list_count" default="20" />
</navigation>
</query>

View file

@ -91,11 +91,13 @@
<options>
<name xml:lang="ko">표시</name>
<name xml:lang="zh-CN">显示</name>
<name xml:lang="en">Show</name>
<value>Y</value>
</options>
<options>
<name xml:lang="ko">표시하지 않음</name>
<name xml:lang="zh-CN">不显示</name>
<name xml:lang="en">Hide</name>
<value>N</value>
</options>
</var>
@ -109,11 +111,13 @@
<options>
<name xml:lang="ko">표시</name>
<name xml:lang="zh-CN">显示</name>
<name xml:lang="en">Show</name>
<value>Y</value>
</options>
<options>
<name xml:lang="ko">표시하지 않음</name>
<name xml:lang="zh-CN">不显示</name>
<name xml:lang="en">Hide</name>
<value>N</value>
</options>
</var>
@ -127,11 +131,13 @@
<options>
<name xml:lang="ko">표시</name>
<name xml:lang="zh-CN">显示</name>
<name xml:lang="en">Show</name>
<value>Y</value>
</options>
<options>
<name xml:lang="ko">표시하지 않음</name>
<name xml:lang="zh-CN">不显示</name>
<name xml:lang="en">Hide</name>
<value>N</value>
</options>
</var>
@ -145,11 +151,13 @@
<options>
<name xml:lang="ko">표시</name>
<name xml:lang="zh-CN">显示</name>
<name xml:lang="en">Show</name>
<value>Y</value>
</options>
<options>
<name xml:lang="ko">표시하지 않음</name>
<name xml:lang="zh-CN">不显示</name>
<name xml:lang="en">Hide</name>
<value>N</value>
</options>
</var>