copy trunk, copy tags

git-svn-id: http://xe-core.googlecode.com/svn/trunk@7282 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
haneul 2010-02-05 09:55:26 +00:00
commit 4e35876019
19 changed files with 227 additions and 64 deletions

View file

@ -317,22 +317,30 @@
/** /**
* @brief 결과를 fetch * @brief 결과를 fetch
**/ **/
function _fetch($result, $output) { function _fetch($result, $output = null) {
if(!$this->isConnected() || $this->isError() || !$result) return; if(!$this->isConnected() || $this->isError() || !$result) return;
while($tmp = ibase_fetch_object($result)) { while($tmp = ibase_fetch_object($result)) {
foreach($tmp as $key => $val) { foreach($tmp as $key => $val) {
$type = $output->column_type[$key]; $type = $output->column_type[$key];
// type 값이 null 일때는 $key값이 alias인 경우라 실제 column 이름을 찾아 type을 구함
if($type == null) { if($type == null) {
foreach($output->columns as $cols) { foreach($output->columns as $cols) {
if($cols['alias'] == $key) { if($cols['alias'] == $key) {
$type = $output->column_type[$cols['name']]; // table.column 형식인지 정규식으로 검사 함
preg_match("/\w+[.](\w+)/", $cols['name'], $matches);
if($matches) {
$type = $output->column_type[$matches[1]];
}
else {
$type = $output->column_type[$cols['name']];
}
} }
} }
} }
if($type == "text" || $type == "bigtext") { if(($type == "text" || $type == "bigtext") && $tmp->{$key}) {
$blob_data = ibase_blob_info($tmp->{$key}); $blob_data = ibase_blob_info($tmp->{$key});
$blob_hndl = ibase_blob_open($tmp->{$key}); $blob_hndl = ibase_blob_open($tmp->{$key});
$tmp->{$key} = ibase_blob_get($blob_hndl, $blob_data[0]); $tmp->{$key} = ibase_blob_get($blob_hndl, $blob_data[0]);
@ -387,7 +395,7 @@
$query = sprintf("ALTER TABLE \"%s%s\" ADD \"%s\" ", $this->prefix, $table_name, $column_name); $query = sprintf("ALTER TABLE \"%s%s\" ADD \"%s\" ", $this->prefix, $table_name, $column_name);
if($size) $query .= sprintf(" %s(%s) ", $type, $size); if($size) $query .= sprintf(" %s(%s) ", $type, $size);
else $query .= sprintf(" %s ", $type); else $query .= sprintf(" %s ", $type);
if($default) $query .= sprintf(" DEFAULT '%s' ", $default); if(!is_null($default)) $query .= sprintf(" DEFAULT '%s' ", $default);
if($notnull) $query .= " NOT NULL "; if($notnull) $query .= " NOT NULL ";
$this->_query($query); $this->_query($query);
@ -434,9 +442,13 @@
* $is_unique? unique : none * $is_unique? unique : none
**/ **/
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) { function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
// index name 크기가 31byte로 제한으로 index name을 넣지 않음
// Firebird에서는 index name을 넣지 않으면 "RDB$10"처럼 자동으로 이름을 부여함
// table을 삭제 할 경우 인덱스도 자동으로 삭제 됨
if(!is_array($target_columns)) $target_columns = array($target_columns); if(!is_array($target_columns)) $target_columns = array($target_columns);
$query = sprintf('CREATE %s INDEX "%s" ON "%s%s" ("%s");', $is_unique?'UNIQUE':'', $index_name, $this->prefix, $table_name, implode('", "',$target_columns)); $query = sprintf('CREATE %s INDEX "" ON "%s%s" ("%s");', $is_unique?'UNIQUE':'', $this->prefix, $table_name, implode('", "',$target_columns));
$this->_query($query); $this->_query($query);
if(!$this->transaction_started) @ibase_commit($this->fd); if(!$this->transaction_started) @ibase_commit($this->fd);
@ -547,7 +559,7 @@
$name, $name,
$this->column_type[$type], $this->column_type[$type],
$size?'('.$size.')':'', $size?'('.$size.')':'',
$default?"DEFAULT '".$default."'":"", is_null($default)?"":"DEFAULT '".$default."'",
$notnull?'NOT NULL':''); $notnull?'NOT NULL':'');
if($auto_increment) $auto_increment_list[] = $name; if($auto_increment) $auto_increment_list[] = $name;
@ -575,15 +587,12 @@
if(count($index_list)) { if(count($index_list)) {
foreach($index_list as $key => $val) { foreach($index_list as $key => $val) {
// index_name = prefix + 'idx_' + no // index name 크기가 31byte로 제한으로 index name을 넣지 않음
// index name 크기가 31byte로 제한되어 있어 일련번호로 대체 // Firebird에서는 index name을 넣지 않으면 "RDB$10"처럼 자동으로 이름을 부여함
$this->idx_no++; // table을 삭제 할 경우 인덱스도 자동으로 삭제 됨
$index_name = $this->prefix;
$index_name .= "idx_";
$index_name .= sprintf("%04d", $this->idx_no);
$schema = sprintf("CREATE INDEX \"%s\" ON \"%s\" (\"%s\");", $schema = sprintf("CREATE INDEX \"\" ON \"%s\" (\"%s\");",
$index_name, $table_name, implode($val, "\",\"")); $table_name, implode($val, "\",\""));
$output = $this->_query($schema); $output = $this->_query($schema);
if(!$this->transaction_started) @ibase_commit($this->fd); if(!$this->transaction_started) @ibase_commit($this->fd);
if(!$output) return false; if(!$output) return false;
@ -726,9 +735,11 @@
ibase_blob_add($blh, $value); ibase_blob_add($blh, $value);
$value = ibase_blob_close($blh); $value = ibase_blob_close($blh);
} }
else if($output->column_type[$name]=='number') { else if($output->column_type[$name]=='number' ||
$output->column_type[$name]=='bignumber' ||
$output->column_type[$name]=='float') {
// 연산식이 들어갔을 경우 컬럼명이 있는 지 체크해 더블쿼터를 넣어줌 // 연산식이 들어갔을 경우 컬럼명이 있는 지 체크해 더블쿼터를 넣어줌
preg_match("/(?i)[a-z][a-z0-9_-]+/", $value, $matches); preg_match("/(?i)[a-z][a-z0-9_]+/", $value, $matches);
foreach($matches as $key => $val) { foreach($matches as $key => $val) {
$value = str_replace($val, "\"".$val."\"", $value); $value = str_replace($val, "\"".$val."\"", $value);
@ -980,15 +991,23 @@
foreach($tmp as $key => $val){ foreach($tmp as $key => $val){
$type = $output->column_type[$key]; $type = $output->column_type[$key];
// type 값이 null 일때는 $key값이 alias인 경우라 실제 column 이름을 찾아 type을 구함
if($type == null) { if($type == null) {
foreach($output->columns as $cols) { foreach($output->columns as $cols) {
if($cols['alias'] == $key) { if($cols['alias'] == $key) {
$type = $output->column_type[$cols['name']]; // table.column 형식인지 정규식으로 검사 함
preg_match("/\w+[.](\w+)/", $cols['name'], $matches);
if($matches) {
$type = $output->column_type[$matches[1]];
}
else {
$type = $output->column_type[$cols['name']];
}
} }
} }
} }
if($type == "text" || $type == "bigtext") { if(($type == "text" || $type == "bigtext") && $tmp->{$key}) {
$blob_data = ibase_blob_info($tmp->{$key}); $blob_data = ibase_blob_info($tmp->{$key});
$blob_hndl = ibase_blob_open($tmp->{$key}); $blob_hndl = ibase_blob_open($tmp->{$key});
$tmp->{$key} = ibase_blob_get($blob_hndl, $blob_data[0]); $tmp->{$key} = ibase_blob_get($blob_hndl, $blob_data[0]);

View file

@ -23,7 +23,7 @@ var Validator = xe.createApp('Validator', {
this.cast('ADD_RULE', ['email_address', regEmail]); this.cast('ADD_RULE', ['email_address', regEmail]);
// userid // userid
var regUserid = /^[a-z]+[\w-]*[a-z0-9]+$/i; var regUserid = /^[a-z]+[\w-]*[a-z0-9_]+$/i;
this.cast('ADD_RULE', ['userid', regUserid]); this.cast('ADD_RULE', ['userid', regUserid]);
this.cast('ADD_RULE', ['user_id', regUserid]); this.cast('ADD_RULE', ['user_id', regUserid]);

View file

@ -13,7 +13,7 @@
* @brief XE의 전체 버전 표기 * @brief XE의 전체 버전 표기
* 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 * 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야
**/ **/
define('__ZBXE_VERSION__', '1.4.0.3'); define('__ZBXE_VERSION__', '1.4.0.4');
/** /**
* @brief zbXE가 설치된 장소의 base path를 구함 * @brief zbXE가 설치된 장소의 base path를 구함

View file

@ -135,13 +135,17 @@
if($ftp_info->sftp && $ftp_info->sftp == 'Y') if($ftp_info->sftp && $ftp_info->sftp == 'Y')
{ {
$oModuleInstaller = new SFTPModuleInstaller($package); $oModuleInstaller = new SFTPModuleInstaller($package);
$oModuleInstaller->setPassword($ftp_password); }
else if(function_exists(ftp_connect))
{
$oModuleInstaller = new PHPFTPModuleInstaller($package);
} }
else else
{ {
$oModuleInstaller = new FTPModuleInstaller($package); $oModuleInstaller = new FTPModuleInstaller($package);
$oModuleInstaller->setPassword($ftp_password);
} }
$oModuleInstaller->setPassword($ftp_password);
$output = $oModuleInstaller->install(); $output = $oModuleInstaller->install();
if(!$output->toBool()) return $output; if(!$output->toBool()) return $output;
} }

View file

@ -150,6 +150,87 @@
} }
} }
class PHPFTPModuleInstaller extends ModuleInstaller {
function PHPFTPModuleInstaller(&$package)
{
$this->package =& $package;
}
function _copyDir(&$file_list) {
if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input');
$ftp_info = Context::getFTPInfo();
if($ftp_info->ftp_host)
{
$ftp_host = $ftp_info->ftp_host;
}
else
{
$ftp_host = "127.0.0.1";
}
$connection = ftp_connect($ftp_host, $ftp_info->ftp_port);
if(!$connection) return new Object(-1, 'msg_ftp_not_connected');
$login_result = ftp_login($connection, $ftp_info->ftp_user, $this->ftp_password);
if(!$login_result)
{
return new Object(-1,'msg_ftp_invalid_auth_info');
}
$_SESSION['ftp_password'] = $this->ftp_password;
$target_dir = $ftp_info->ftp_root_path.$this->target_path;
foreach($file_list as $k => $file){
$org_file = $file;
if($this->package->path == ".")
{
$file = substr($file,3);
}
$path = FileHandler::getRealPath("./".$this->target_path."/".$file);
$path_list = explode('/', dirname($this->target_path."/".$file));
$real_path = "./";
$ftp_path = $ftp_info->ftp_root_path;
for($i=0;$i<count($path_list);$i++)
{
if($path_list=="") continue;
$real_path .= $path_list[$i]."/";
$ftp_path .= $path_list[$i]."/";
if(!file_exists(FileHandler::getRealPath($real_path)))
{
if(!ftp_mkdir($connection, $ftp_path))
{
return new Object(-1, "msg_make_directory_failed");
}
if (function_exists('ftp_chmod')) {
if(!ftp_chmod($connection, 0755, $ftp_path))
{
return new Object(-1, "msg_permission_adjust_failed");
}
}
else
{
if(!ftp_site("CHMOD 755 ".$ftp_path))
{
return new Object(-1, "msg_permission_adjust_failed");
}
}
}
}
if(!ftp_put($connection, $target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file), FTP_BINARY))
{
return new Object(-1, "msg_ftp_upload_failed");
}
}
ftp_close($connection);
return new Object();
}
}
class FTPModuleInstaller extends ModuleInstaller { class FTPModuleInstaller extends ModuleInstaller {
function FTPModuleInstaller(&$package) function FTPModuleInstaller(&$package)
{ {
@ -203,7 +284,7 @@
if(!file_exists(FileHandler::getRealPath($real_path))) if(!file_exists(FileHandler::getRealPath($real_path)))
{ {
$oFtp->ftp_mkdir($ftp_path); $oFtp->ftp_mkdir($ftp_path);
$oFtp->ftp_site("CHMOD 755 ".$path); $oFtp->ftp_site("CHMOD 755 ".$ftp_path);
} }
} }
$oFtp->ftp_put($target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file)); $oFtp->ftp_put($target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file));

View file

@ -6,7 +6,7 @@
**/ **/
$lang->autoinstall = '自動安裝'; $lang->autoinstall = '自動安裝';
$lang->about_autoinstall = '可幫助您安裝/更新XE程式及面板。'; $lang->about_autoinstall = '可幫助您安裝及更新 XE 程式和面板。';
$lang->package_update = '最近更新'; $lang->package_update = '最近更新';
$lang->package_downloaded_count = '下載次數'; $lang->package_downloaded_count = '下載次數';
$lang->need_update = "需要更新。"; $lang->need_update = "需要更新。";
@ -16,7 +16,7 @@
$lang->order_download = "下載"; $lang->order_download = "下載";
$lang->success_installed = "安裝成功"; $lang->success_installed = "安裝成功";
$lang->view_all_package = "全部檢視"; $lang->view_all_package = "全部檢視";
$lang->description_ftp_note = "請先將FTP設定好否則無法執行自動安裝功能。"; $lang->description_ftp_note = "請先將 FTP 設定好,否則無法執行自動安裝功能。";
$lang->description_update = "如果您最近不是用自動安裝模組更新或安裝,請點擊更新按鈕更新。"; $lang->description_update = "如果您最近不是用自動安裝模組更新或安裝,請點擊更新按鈕更新。";
$lang->install = "安裝"; $lang->install = "安裝";
$lang->update = "更新"; $lang->update = "更新";
@ -24,10 +24,10 @@
$lang->depending_programs = "此程式需要安裝"; $lang->depending_programs = "此程式需要安裝";
$lang->require_update = "需要更新"; $lang->require_update = "需要更新";
$lang->require_installation = "需要安裝"; $lang->require_installation = "需要安裝";
$lang->description_install = "One Click Installer will also install/update all other programs which this program is depending on"; $lang->description_install = "自動安裝也能夠同時安裝與更新其他相關程式";
$lang->description_download = "如果FTP無法使用的話必須要手動下載並解壓縮到目標路徑。(假設目標路徑為 ./modules/board的話將檔案解壓縮到 ./modules就可以了)"; $lang->description_download = "如果 FTP 無法使用的話,必須要手動下載並解壓縮到目標路徑。(假設目標路徑為 ./modules/board的話將檔案解壓縮到 ./modules就可以了)";
$lang->path = "路徑"; $lang->path = "路徑";
$lang->cmd_download = "下載"; $lang->cmd_download = "下載";
$lang->view_installed_packages = "已安裝套裝軟體"; $lang->view_installed_packages = "已安裝套裝軟體";
$lang->msg_ftp_password_input = "Please input FTP password."; $lang->msg_ftp_password_input = "請輸入 FTP 密碼";
?> ?>

View file

@ -19,7 +19,7 @@
<column name="user_name" var="user_name" default="" /> <column name="user_name" var="user_name" default="" />
<column name="email_address" var="email_address" filter="email" maxlength="250" /> <column name="email_address" var="email_address" filter="email" maxlength="250" />
<column name="homepage" var="homepage" filter="homepage" maxlength="250" /> <column name="homepage" var="homepage" filter="homepage" maxlength="250" />
<column name="tags" var="tags" /> <column name="tags" var="tags" default="" />
<column name="extra_vars" var="extra_vars" /> <column name="extra_vars" var="extra_vars" />
<column name="last_update" var="last_update" default="curdate()" /> <column name="last_update" var="last_update" default="curdate()" />
<column name="ipaddress" var="ipaddress" default="ipaddress()" /> <column name="ipaddress" var="ipaddress" default="ipaddress()" />

View file

@ -7,8 +7,8 @@
<column name="var_type" var="var_type" notnull="notnull" /> <column name="var_type" var="var_type" notnull="notnull" />
<column name="var_is_required" var="var_is_required" default="N" notnull="notnull" /> <column name="var_is_required" var="var_is_required" default="N" notnull="notnull" />
<column name="var_search" var="var_search" default="N" notnull="notnull" /> <column name="var_search" var="var_search" default="N" notnull="notnull" />
<column name="var_default" var="var_default" notnull="notnull" /> <column name="var_default" var="var_default" default="" />
<column name="var_desc" var="var_desc" notnull="notnull" /> <column name="var_desc" var="var_desc" default="" />
<column name="eid" var="eid" notnull="notnull" /> <column name="eid" var="eid" notnull="notnull" />
</columns> </columns>
<conditions> <conditions>

View file

@ -5442,7 +5442,7 @@ var
regex_font_weight = /font-weight\s*:\s*([a-z]+);?/i, regex_font_weight = /font-weight\s*:\s*([a-z]+);?/i,
regex_font_style = /font-style\s*:\s*italic;?/i, regex_font_style = /font-style\s*:\s*italic;?/i,
regex_font_decoration = /text-decoration\s*:\s*([a-z -]+);?/i, regex_font_decoration = /text-decoration\s*:\s*([a-z -]+);?/i,
regex_$ = /$\d+\s*=(\s*"\d+"|\d+)/ig, regex_jquery = /jQuery\d+\s*=(\s*"\d+"|\d+)/ig,
regex_quote_attr = /([\w-]+\s*=(?:\s*"[^"]+"|\s*'[^']+'))|([\w-]+)=([^\s]+)/g; //" regex_quote_attr = /([\w-]+\s*=(?:\s*"[^"]+"|\s*'[^']+'))|([\w-]+)=([^\s]+)/g; //"
var var
@ -5505,7 +5505,7 @@ xe.XE_XHTMLFormatter = $.Class({
if ($.browser.msie) { if ($.browser.msie) {
// remove $ attributes // remove $ attributes
sContent = sContent.replace(regex_$, ''); sContent = sContent.replace(regex_jquery, '');
// quote all attrs // quote all attrs
sContent = sContent.replace(/<(\w+) ([^>]+)>/g, function(m0,m1,m2){ sContent = sContent.replace(/<(\w+) ([^>]+)>/g, function(m0,m1,m2){

View file

@ -46,6 +46,9 @@ function _editorAutoSave(exe) {
var fo_obj = editorAutoSaveObj.fo_obj; var fo_obj = editorAutoSaveObj.fo_obj;
var editor_sequence = editorAutoSaveObj.editor_sequence; var editor_sequence = editorAutoSaveObj.editor_sequence;
// 50초마다 동기화를 시킴 강제 실행은 제외
if(!exe) setTimeout('_editorAutoSave()', 50000);
// 현재 자동저장중이면 중지 // 현재 자동저장중이면 중지
if(editorAutoSaveObj.locked == true) return; if(editorAutoSaveObj.locked == true) return;
@ -54,7 +57,11 @@ function _editorAutoSave(exe) {
// 자동저장을 위한 준비 // 자동저장을 위한 준비
var title = fo_obj.title.value; var title = fo_obj.title.value;
var content = editorGetContent(editor_sequence); var content = '';
try{
content = editorGetContent(editor_sequence);
}catch(e){
}
// 내용이 이전에 저장하였던 것과 다르면 자동 저장을 함 또는 강제 저장 설정시 자동 저장 // 내용이 이전에 저장하였던 것과 다르면 자동 저장을 함 또는 강제 저장 설정시 자동 저장
if(title != editorAutoSaveObj.title || content != editorAutoSaveObj.content || exe) { if(title != editorAutoSaveObj.title || content != editorAutoSaveObj.content || exe) {
@ -82,9 +89,6 @@ function _editorAutoSave(exe) {
exec_xml("editor","procEditorSaveDoc", params, function() { editorAutoSaveObj.locked = false; } ); exec_xml("editor","procEditorSaveDoc", params, function() { editorAutoSaveObj.locked = false; } );
show_waiting_message = true; show_waiting_message = true;
} }
// 50초마다 동기화를 시킴 강제 실행은 제외
if(!exe) setTimeout('_editorAutoSave()', 50000);
} }
// 자동저장된 모든 메세지를 삭제하는 루틴 // 자동저장된 모든 메세지를 삭제하는 루틴

View file

@ -15,7 +15,7 @@
<description xml:lang="jp">XMLファイルを用いて会員情報または掲示板などの情報を入力します。</description> <description xml:lang="jp">XMLファイルを用いて会員情報または掲示板などの情報を入力します。</description>
<description xml:lang="es">Ingresa la información del usuario o los datos del tablero utilizando el archivo XML.</description> <description xml:lang="es">Ingresa la información del usuario o los datos del tablero utilizando el archivo XML.</description>
<description xml:lang="ru">Запись информации пользователей или форума, используя XML-файл.</description> <description xml:lang="ru">Запись информации пользователей или форума, используя XML-файл.</description>
<description xml:lang="zh-TW">利用XML檔案匯入會員或討論板資料。</description> <description xml:lang="zh-TW">利用 XML 檔案匯入會員或討論板資料。</description>
<version>0.2</version> <version>0.2</version>
<date>2007-12-13</date> <date>2007-12-13</date>
<category>migration</category> <category>migration</category>

View file

@ -14,7 +14,7 @@
$lang->importer = '匯入'; $lang->importer = '匯入';
$lang->source_type = '匯入目標'; $lang->source_type = '匯入目標';
$lang->type_member = '會員資料'; $lang->type_member = '會員資料';
$lang->type_message = '短訊息(MemoBox)'; $lang->type_message = '短訊息';
$lang->type_ttxml = 'TTXML'; $lang->type_ttxml = 'TTXML';
$lang->type_module = '討論板資料'; $lang->type_module = '討論板資料';
$lang->type_syncmember = '同步會員資料'; $lang->type_syncmember = '同步會員資料';
@ -31,31 +31,31 @@
); );
$lang->import_step_desc = array( $lang->import_step_desc = array(
1 => '請選擇要匯入的XML檔案類型。', 1 => '請選擇要匯入的 XML 檔案類型。',
12 => '請選擇要匯入的目標模組。', 12 => '請選擇要匯入的目標模組。',
121 => '文章:', 121 => '文章:',
122 => '討論板:', 122 => '討論板:',
13 => '請選擇要匯入的目標分類。', 13 => '請選擇要匯入的目標分類。',
2 => "請輸入要匯入的XML檔案位置。\n可輸入相對或絕對路徑。", 2 => "請輸入要匯入的 XML 檔案位置。\n可輸入相對或絕對路徑。",
3 => '資料匯入後可能會導致會員資料和文章內容產生誤差。請以『user_id』進行同步即可解決。', 3 => '資料匯入後可能會導致會員資料和文章內容產生誤差。請以『user_id』進行同步即可解決。',
99 => '資料匯入中...', 99 => '資料匯入中...',
); );
// 訊息/提示 // 訊息/提示
$lang->msg_sync_member = '按同步按鈕,即可開始進行會員資料和文章的同步。'; $lang->msg_sync_member = '按同步按鈕,即可開始進行會員資料和文章的同步。';
$lang->msg_no_xml_file = '找不到XML檔案請重新確認路徑。'; $lang->msg_no_xml_file = '找不到 XML 檔案,請重新確認路徑。';
$lang->msg_invalid_xml_file = 'XML檔案格式錯誤'; $lang->msg_invalid_xml_file = 'XML檔案格式錯誤';
$lang->msg_importing = '%d個的資料中正在輸入 %d個。(長時間沒有回應時,請按「繼續進行」按鈕)'; $lang->msg_importing = '%d個的資料中正在輸入 %d 個。(長時間沒有回應時,請按「繼續進行」按鈕)';
$lang->msg_import_finished = '已完成輸入%d/%d個資料。根據情況的不同可能會出現沒有被匯入的資料。'; $lang->msg_import_finished = '已完成輸入 %d/%d 個資料。根據情況的不同,可能會出現沒有被匯入的資料。';
$lang->msg_sync_completed = '已完成會員和文章,評論的同步。'; $lang->msg_sync_completed = '已完成會員和文章,評論的同步。';
// 其他 // 其他
$lang->about_type_member = '資料匯入目標為會員資料時,請選擇此項。'; $lang->about_type_member = '資料匯入目標為會員資料時,請選擇此項。';
$lang->about_type_message = '資料匯入目標為短訊息(MemoBox)時,請選擇此項。'; $lang->about_type_message = '資料匯入目標為短訊息時,請選擇此項。';
$lang->about_type_ttxml = '資料匯入目標為TTXML(textcube系列)時,請選擇此項。'; $lang->about_type_ttxml = '資料匯入目標為 TTXML (textcube系列)時,請選擇此項。';
$lang->about_ttxml_user_id = '請輸入匯入TTXML資料時指定為主題發表者的ID(必須是已註冊會員)。'; $lang->about_ttxml_user_id = '請輸入匯入 TTXML 資料時,指定為主題發表者的 ID (必須是已註冊會員)。';
$lang->about_type_module = '資料匯入目標為討論板主題時,請選擇此項。'; $lang->about_type_module = '資料匯入目標為討論板主題時,請選擇此項。';
$lang->about_type_syncmember = '匯入會員和文章資料後,需要同步會員資料時,請選擇此項。'; $lang->about_type_syncmember = '匯入會員和文章資料後,需要同步會員資料時,請選擇此項。';
$lang->about_importer = "不僅可以匯入Zeroboard 4Zb5beta的資料也能夠把其他程式資料匯入到XE當中。\n匯入資料時,請利用<a href=\"http://svn.zeroboard.com/zeroboard_xe/migration_tools/\" onclick=\"winopen(this.href);return false;\">XML Exporter</a>建立XML檔案後再上傳。"; $lang->about_importer = "不僅可以匯入 Zeroboard 4Zb5beta 的資料,也能夠把其他程式資料匯入到 XE 當中。\n匯入資料時,請利用 <a href=\"http://svn.zeroboard.com/zeroboard_xe/migration_tools/\" onclick=\"winopen(this.href);return false;\">XML Exporter</a> 建立 XML 檔案後再上傳。";
$lang->about_target_path = "為了下載附檔請輸入Zeroboard 4的安裝位置。\n位置在同一個主機時,請輸入如『/home/id/public_html/bbs』的路徑在不同主機時請輸入如『http://域名/bbs』的URL網址。"; $lang->about_target_path = "為了下載附檔請輸入 Zeroboard 4 的安裝位置。\n位置在同一個主機時,請輸入如『/home/id/public_html/bbs』的路徑在不同主機時請輸入如『http://域名/bbs』的 URL 網址。";
?> ?>

View file

@ -469,7 +469,7 @@ DAMAGES.
EndOfLicense; EndOfLicense;
$lang->install_condition_title = "確認安裝時必須要具備的條件"; $lang->install_condition_title = '確認安裝時必須要具備的條件';
$lang->install_checklist_title = array( $lang->install_checklist_title = array(
'php_version' => 'PHP版本', 'php_version' => 'PHP版本',

View file

@ -149,7 +149,8 @@ class Auth_OpenID_XEStore extends Auth_OpenID_OpenIDStore {
function getAssociation($server_url, $handle = null) function getAssociation($server_url, $handle = null)
{ {
$assoc = $this->_get_assoc($server_url, $handle); $assoc = $this->_get_assoc($server_url, $handle);
return $assoc; $assoc_o = new Auth_OpenID_Association($assoc->handle, $assoc->secret, $assoc->issued, $assoc->lifetime, $assoc->assoc_type);
return $assoc_o;
} }

View file

@ -9,8 +9,8 @@
<column name="email_host" var="email_host" notnull="notnull" /> <column name="email_host" var="email_host" notnull="notnull" />
<column name="user_name" var="user_name" notnull="notnull" minlength="2" maxlength="40" /> <column name="user_name" var="user_name" notnull="notnull" minlength="2" maxlength="40" />
<column name="nick_name" var="nick_name" notnull="notnull" minlength="2" maxlength="40" /> <column name="nick_name" var="nick_name" notnull="notnull" minlength="2" maxlength="40" />
<column name="homepage" var="homepage" /> <column name="homepage" var="homepage" default="" />
<column name="blog" var="blog" /> <column name="blog" var="blog" default="" />
<column name="birthday" var="birthday" /> <column name="birthday" var="birthday" />
<column name="allow_mailing" var="allow_mailing" default="Y" /> <column name="allow_mailing" var="allow_mailing" default="Y" />
<column name="allow_message" var="allow_message" /> <column name="allow_message" var="allow_message" />

View file

@ -7,9 +7,9 @@
<column name="url" var="url" /> <column name="url" var="url" />
<column name="open_window" var="open_window" /> <column name="open_window" var="open_window" />
<column name="expand" var="expand" /> <column name="expand" var="expand" />
<column name="normal_btn" var="normal_btn" /> <column name="normal_btn" var="normal_btn" default="" />
<column name="hover_btn" var="hover_btn" /> <column name="hover_btn" var="hover_btn" default="" />
<column name="active_btn" var="active_btn" /> <column name="active_btn" var="active_btn" default="" />
<column name="group_srls" var="group_srls" /> <column name="group_srls" var="group_srls" />
</columns> </columns>
<conditions> <conditions>

View file

@ -290,17 +290,45 @@
if(!$output->toBool()) return $output; if(!$output->toBool()) return $output;
} }
if($oDB->isIndexExists('sites','idx_domain')){
if($oDB->isIndexExists('sites','idx_domain')){ $oDB->dropIndex('sites','idx_domain');
$oDB->dropIndex('sites','idx_domain'); }
} if(!$oDB->isIndexExists('sites','unique_domain')){
if(!$oDB->isIndexExists('sites','unique_domain')){ $this->updateForUniqueSiteDomain();
$oDB->addIndex('sites','unique_domain',array('domain'),true); $oDB->addIndex('sites','unique_domain',array('domain'),true);
} }
return new Object(0, 'success_updated'); return new Object(0, 'success_updated');
} }
function updateForUniqueSiteDomain()
{
$output = executeQueryArray("module.getNonuniqueDomains");
if(!$output->data) return;
foreach($output->data as $data)
{
if($data->count == 1) continue;
$domain = $data->domain;
$args = null;
$args->domain = $domain;
$output2 = executeQueryArray("module.getSiteByDomain", $args);
$bFirst = true;
foreach($output2->data as $site)
{
if($bFirst)
{
$bFirst = false;
continue;
}
$domain .= "_";
$args = null;
$args->domain = $domain;
$args->site_srl = $site->site_srl;
$output3 = executeQuery("module.updateSite", $args);
}
}
}
/** /**
* @brief 캐시 파일 재생성 * @brief 캐시 파일 재생성
**/ **/

View file

@ -0,0 +1,12 @@
<query id="getNonuniqueDomains" action="select">
<tables>
<table name="sites" />
</tables>
<columns>
<column name="domain" />
<column name="count(*)" alias="count" />
</columns>
<groups>
<group column="domain" />
</groups>
</query>

View file

@ -0,0 +1,14 @@
<query id="getSiteInfoByDomain" action="select">
<tables>
<table name="sites" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="sites.domain" var="domain" notnull="notnull" />
</conditions>
<navigation>
<index var="sort_index" default="site_srl" order="desc" />
</navigation>
</query>