mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-24 13:49:56 +09:00
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:
commit
4e35876019
19 changed files with 227 additions and 64 deletions
|
|
@ -317,22 +317,30 @@
|
|||
/**
|
||||
* @brief 결과를 fetch
|
||||
**/
|
||||
function _fetch($result, $output) {
|
||||
function _fetch($result, $output = null) {
|
||||
if(!$this->isConnected() || $this->isError() || !$result) return;
|
||||
|
||||
while($tmp = ibase_fetch_object($result)) {
|
||||
foreach($tmp as $key => $val) {
|
||||
$type = $output->column_type[$key];
|
||||
|
||||
// type 값이 null 일때는 $key값이 alias인 경우라 실제 column 이름을 찾아 type을 구함
|
||||
if($type == null) {
|
||||
foreach($output->columns as $cols) {
|
||||
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_hndl = ibase_blob_open($tmp->{$key});
|
||||
$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);
|
||||
if($size) $query .= sprintf(" %s(%s) ", $type, $size);
|
||||
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 ";
|
||||
|
||||
$this->_query($query);
|
||||
|
|
@ -434,9 +442,13 @@
|
|||
* $is_unique? unique : none
|
||||
**/
|
||||
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);
|
||||
|
||||
$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);
|
||||
|
||||
if(!$this->transaction_started) @ibase_commit($this->fd);
|
||||
|
|
@ -547,7 +559,7 @@
|
|||
$name,
|
||||
$this->column_type[$type],
|
||||
$size?'('.$size.')':'',
|
||||
$default?"DEFAULT '".$default."'":"",
|
||||
is_null($default)?"":"DEFAULT '".$default."'",
|
||||
$notnull?'NOT NULL':'');
|
||||
|
||||
if($auto_increment) $auto_increment_list[] = $name;
|
||||
|
|
@ -575,15 +587,12 @@
|
|||
|
||||
if(count($index_list)) {
|
||||
foreach($index_list as $key => $val) {
|
||||
// index_name = prefix + 'idx_' + no
|
||||
// index name 크기가 31byte로 제한되어 있어 일련번호로 대체
|
||||
$this->idx_no++;
|
||||
$index_name = $this->prefix;
|
||||
$index_name .= "idx_";
|
||||
$index_name .= sprintf("%04d", $this->idx_no);
|
||||
// index name 크기가 31byte로 제한으로 index name을 넣지 않음
|
||||
// Firebird에서는 index name을 넣지 않으면 "RDB$10"처럼 자동으로 이름을 부여함
|
||||
// table을 삭제 할 경우 인덱스도 자동으로 삭제 됨
|
||||
|
||||
$schema = sprintf("CREATE INDEX \"%s\" ON \"%s\" (\"%s\");",
|
||||
$index_name, $table_name, implode($val, "\",\""));
|
||||
$schema = sprintf("CREATE INDEX \"\" ON \"%s\" (\"%s\");",
|
||||
$table_name, implode($val, "\",\""));
|
||||
$output = $this->_query($schema);
|
||||
if(!$this->transaction_started) @ibase_commit($this->fd);
|
||||
if(!$output) return false;
|
||||
|
|
@ -726,9 +735,11 @@
|
|||
ibase_blob_add($blh, $value);
|
||||
$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) {
|
||||
$value = str_replace($val, "\"".$val."\"", $value);
|
||||
|
|
@ -980,15 +991,23 @@
|
|||
foreach($tmp as $key => $val){
|
||||
$type = $output->column_type[$key];
|
||||
|
||||
// type 값이 null 일때는 $key값이 alias인 경우라 실제 column 이름을 찾아 type을 구함
|
||||
if($type == null) {
|
||||
foreach($output->columns as $cols) {
|
||||
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_hndl = ibase_blob_open($tmp->{$key});
|
||||
$tmp->{$key} = ibase_blob_get($blob_hndl, $blob_data[0]);
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ var Validator = xe.createApp('Validator', {
|
|||
this.cast('ADD_RULE', ['email_address', regEmail]);
|
||||
|
||||
// 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', ['user_id', regUserid]);
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
* @brief XE의 전체 버전 표기
|
||||
* 이 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함
|
||||
**/
|
||||
define('__ZBXE_VERSION__', '1.4.0.3');
|
||||
define('__ZBXE_VERSION__', '1.4.0.4');
|
||||
|
||||
/**
|
||||
* @brief zbXE가 설치된 장소의 base path를 구함
|
||||
|
|
|
|||
|
|
@ -135,13 +135,17 @@
|
|||
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
|
||||
{
|
||||
$oModuleInstaller = new SFTPModuleInstaller($package);
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
}
|
||||
else if(function_exists(ftp_connect))
|
||||
{
|
||||
$oModuleInstaller = new PHPFTPModuleInstaller($package);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleInstaller = new FTPModuleInstaller($package);
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
}
|
||||
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
$output = $oModuleInstaller->install();
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
function FTPModuleInstaller(&$package)
|
||||
{
|
||||
|
|
@ -203,7 +284,7 @@
|
|||
if(!file_exists(FileHandler::getRealPath($real_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));
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
/**
|
||||
* @file zh-TW.lang.php
|
||||
* @author sol (sol@ngleader.com) 翻譯:royallin
|
||||
* @brief 自動安裝(autoinstall)模組正體中文語言
|
||||
* @brief 自動安裝(autoinstall)模組正體中文語言
|
||||
**/
|
||||
|
||||
$lang->autoinstall = '自動安裝';
|
||||
$lang->about_autoinstall = '可幫助您安裝/更新XE程式及面板。';
|
||||
$lang->about_autoinstall = '可幫助您安裝及更新 XE 程式和面板。';
|
||||
$lang->package_update = '最近更新';
|
||||
$lang->package_downloaded_count = '下載次數';
|
||||
$lang->need_update = "需要更新。";
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
$lang->order_download = "下載";
|
||||
$lang->success_installed = "安裝成功";
|
||||
$lang->view_all_package = "全部檢視";
|
||||
$lang->description_ftp_note = "請先將FTP設定好,否則無法執行自動安裝功能。";
|
||||
$lang->description_ftp_note = "請先將 FTP 設定好,否則無法執行自動安裝功能。";
|
||||
$lang->description_update = "如果您最近不是用自動安裝模組更新或安裝,請點擊更新按鈕更新。";
|
||||
$lang->install = "安裝";
|
||||
$lang->update = "更新";
|
||||
|
|
@ -24,10 +24,10 @@
|
|||
$lang->depending_programs = "此程式需要安裝";
|
||||
$lang->require_update = "需要更新";
|
||||
$lang->require_installation = "需要安裝";
|
||||
$lang->description_install = "One Click Installer will also install/update all other programs which this program is depending on";
|
||||
$lang->description_download = "如果FTP無法使用的話,必須要手動下載並解壓縮到目標路徑。(假設目標路徑為 ./modules/board的話,將檔案解壓縮到 ./modules就可以了)";
|
||||
$lang->description_install = "自動安裝也能夠同時安裝與更新其他相關程式";
|
||||
$lang->description_download = "如果 FTP 無法使用的話,必須要手動下載並解壓縮到目標路徑。(假設目標路徑為 ./modules/board的話,將檔案解壓縮到 ./modules就可以了)";
|
||||
$lang->path = "路徑";
|
||||
$lang->cmd_download = "下載";
|
||||
$lang->view_installed_packages = "已安裝套裝軟體";
|
||||
$lang->msg_ftp_password_input = "Please input FTP password.";
|
||||
$lang->msg_ftp_password_input = "請輸入 FTP 密碼";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
<column name="user_name" var="user_name" default="" />
|
||||
<column name="email_address" var="email_address" filter="email" 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="last_update" var="last_update" default="curdate()" />
|
||||
<column name="ipaddress" var="ipaddress" default="ipaddress()" />
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@
|
|||
<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_search" var="var_search" default="N" notnull="notnull" />
|
||||
<column name="var_default" var="var_default" notnull="notnull" />
|
||||
<column name="var_desc" var="var_desc" notnull="notnull" />
|
||||
<column name="var_default" var="var_default" default="" />
|
||||
<column name="var_desc" var="var_desc" default="" />
|
||||
<column name="eid" var="eid" notnull="notnull" />
|
||||
</columns>
|
||||
<conditions>
|
||||
|
|
|
|||
|
|
@ -5442,7 +5442,7 @@ var
|
|||
regex_font_weight = /font-weight\s*:\s*([a-z]+);?/i,
|
||||
regex_font_style = /font-style\s*:\s*italic;?/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; //"
|
||||
|
||||
var
|
||||
|
|
@ -5505,7 +5505,7 @@ xe.XE_XHTMLFormatter = $.Class({
|
|||
|
||||
if ($.browser.msie) {
|
||||
// remove $ attributes
|
||||
sContent = sContent.replace(regex_$, '');
|
||||
sContent = sContent.replace(regex_jquery, '');
|
||||
|
||||
// quote all attrs
|
||||
sContent = sContent.replace(/<(\w+) ([^>]+)>/g, function(m0,m1,m2){
|
||||
|
|
|
|||
|
|
@ -46,6 +46,9 @@ function _editorAutoSave(exe) {
|
|||
var fo_obj = editorAutoSaveObj.fo_obj;
|
||||
var editor_sequence = editorAutoSaveObj.editor_sequence;
|
||||
|
||||
// 50초마다 동기화를 시킴 강제 실행은 제외
|
||||
if(!exe) setTimeout('_editorAutoSave()', 50000);
|
||||
|
||||
// 현재 자동저장중이면 중지
|
||||
if(editorAutoSaveObj.locked == true) return;
|
||||
|
||||
|
|
@ -54,7 +57,11 @@ function _editorAutoSave(exe) {
|
|||
|
||||
// 자동저장을 위한 준비
|
||||
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) {
|
||||
|
|
@ -82,9 +89,6 @@ function _editorAutoSave(exe) {
|
|||
exec_xml("editor","procEditorSaveDoc", params, function() { editorAutoSaveObj.locked = false; } );
|
||||
show_waiting_message = true;
|
||||
}
|
||||
|
||||
// 50초마다 동기화를 시킴 강제 실행은 제외
|
||||
if(!exe) setTimeout('_editorAutoSave()', 50000);
|
||||
}
|
||||
|
||||
// 자동저장된 모든 메세지를 삭제하는 루틴
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
<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="ru">Запись информации пользователей или форума, используя XML-файл.</description>
|
||||
<description xml:lang="zh-TW">利用XML檔案匯入會員或討論板資料。</description>
|
||||
<description xml:lang="zh-TW">利用 XML 檔案匯入會員或討論板資料。</description>
|
||||
<version>0.2</version>
|
||||
<date>2007-12-13</date>
|
||||
<category>migration</category>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
$lang->importer = '匯入';
|
||||
$lang->source_type = '匯入目標';
|
||||
$lang->type_member = '會員資料';
|
||||
$lang->type_message = '短訊息(MemoBox)';
|
||||
$lang->type_message = '短訊息';
|
||||
$lang->type_ttxml = 'TTXML';
|
||||
$lang->type_module = '討論板資料';
|
||||
$lang->type_syncmember = '同步會員資料';
|
||||
|
|
@ -31,31 +31,31 @@
|
|||
);
|
||||
|
||||
$lang->import_step_desc = array(
|
||||
1 => '請選擇要匯入的XML檔案類型。',
|
||||
1 => '請選擇要匯入的 XML 檔案類型。',
|
||||
12 => '請選擇要匯入的目標模組。',
|
||||
121 => '文章:',
|
||||
122 => '討論板:',
|
||||
13 => '請選擇要匯入的目標分類。',
|
||||
2 => "請輸入要匯入的XML檔案位置。\n可輸入相對或絕對路徑。",
|
||||
2 => "請輸入要匯入的 XML 檔案位置。\n可輸入相對或絕對路徑。",
|
||||
3 => '資料匯入後,可能會導致會員資料和文章內容產生誤差。請以『user_id』進行同步即可解決。',
|
||||
99 => '資料匯入中...',
|
||||
);
|
||||
|
||||
// 訊息/提示
|
||||
$lang->msg_sync_member = '按同步按鈕,即可開始進行會員資料和文章的同步。';
|
||||
$lang->msg_no_xml_file = '找不到XML檔案,請重新確認路徑。';
|
||||
$lang->msg_no_xml_file = '找不到 XML 檔案,請重新確認路徑。';
|
||||
$lang->msg_invalid_xml_file = 'XML檔案格式錯誤!';
|
||||
$lang->msg_importing = '%d個的資料中正在輸入 %d個。(長時間沒有回應時,請按「繼續進行」按鈕)';
|
||||
$lang->msg_import_finished = '已完成輸入%d/%d個資料。根據情況的不同,可能會出現沒有被匯入的資料。';
|
||||
$lang->msg_importing = '%d個的資料中正在輸入 %d 個。(長時間沒有回應時,請按「繼續進行」按鈕)';
|
||||
$lang->msg_import_finished = '已完成輸入 %d/%d 個資料。根據情況的不同,可能會出現沒有被匯入的資料。';
|
||||
$lang->msg_sync_completed = '已完成會員和文章,評論的同步。';
|
||||
|
||||
// 其他
|
||||
$lang->about_type_member = '資料匯入目標為會員資料時,請選擇此項。';
|
||||
$lang->about_type_message = '資料匯入目標為短訊息(MemoBox)時,請選擇此項。';
|
||||
$lang->about_type_ttxml = '資料匯入目標為TTXML(textcube系列)時,請選擇此項。';
|
||||
$lang->about_ttxml_user_id = '請輸入匯入TTXML資料時,指定為主題發表者的ID(必須是已註冊會員)。';
|
||||
$lang->about_type_message = '資料匯入目標為短訊息時,請選擇此項。';
|
||||
$lang->about_type_ttxml = '資料匯入目標為 TTXML (textcube系列)時,請選擇此項。';
|
||||
$lang->about_ttxml_user_id = '請輸入匯入 TTXML 資料時,指定為主題發表者的 ID (必須是已註冊會員)。';
|
||||
$lang->about_type_module = '資料匯入目標為討論板主題時,請選擇此項。';
|
||||
$lang->about_type_syncmember = '匯入會員和文章資料後,需要同步會員資料時,請選擇此項。';
|
||||
$lang->about_importer = "不僅可以匯入Zeroboard 4,Zb5beta的資料,也能夠把其他程式資料匯入到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_importer = "不僅可以匯入 Zeroboard 4,Zb5beta 的資料,也能夠把其他程式資料匯入到 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 網址。";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -469,7 +469,7 @@ DAMAGES.
|
|||
|
||||
EndOfLicense;
|
||||
|
||||
$lang->install_condition_title = "確認安裝時必須要具備的條件";
|
||||
$lang->install_condition_title = '確認安裝時必須要具備的條件';
|
||||
|
||||
$lang->install_checklist_title = array(
|
||||
'php_version' => 'PHP版本',
|
||||
|
|
|
|||
|
|
@ -149,7 +149,8 @@ class Auth_OpenID_XEStore extends Auth_OpenID_OpenIDStore {
|
|||
function getAssociation($server_url, $handle = null)
|
||||
{
|
||||
$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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
<column name="email_host" var="email_host" notnull="notnull" />
|
||||
<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="homepage" var="homepage" />
|
||||
<column name="blog" var="blog" />
|
||||
<column name="homepage" var="homepage" default="" />
|
||||
<column name="blog" var="blog" default="" />
|
||||
<column name="birthday" var="birthday" />
|
||||
<column name="allow_mailing" var="allow_mailing" default="Y" />
|
||||
<column name="allow_message" var="allow_message" />
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@
|
|||
<column name="url" var="url" />
|
||||
<column name="open_window" var="open_window" />
|
||||
<column name="expand" var="expand" />
|
||||
<column name="normal_btn" var="normal_btn" />
|
||||
<column name="hover_btn" var="hover_btn" />
|
||||
<column name="active_btn" var="active_btn" />
|
||||
<column name="normal_btn" var="normal_btn" default="" />
|
||||
<column name="hover_btn" var="hover_btn" default="" />
|
||||
<column name="active_btn" var="active_btn" default="" />
|
||||
<column name="group_srls" var="group_srls" />
|
||||
</columns>
|
||||
<conditions>
|
||||
|
|
|
|||
|
|
@ -290,17 +290,45 @@
|
|||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
|
||||
|
||||
if($oDB->isIndexExists('sites','idx_domain')){
|
||||
$oDB->dropIndex('sites','idx_domain');
|
||||
}
|
||||
if(!$oDB->isIndexExists('sites','unique_domain')){
|
||||
$oDB->addIndex('sites','unique_domain',array('domain'),true);
|
||||
}
|
||||
if($oDB->isIndexExists('sites','idx_domain')){
|
||||
$oDB->dropIndex('sites','idx_domain');
|
||||
}
|
||||
if(!$oDB->isIndexExists('sites','unique_domain')){
|
||||
$this->updateForUniqueSiteDomain();
|
||||
$oDB->addIndex('sites','unique_domain',array('domain'),true);
|
||||
}
|
||||
|
||||
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 캐시 파일 재생성
|
||||
**/
|
||||
|
|
|
|||
12
modules/module/queries/getNonuniqueDomains.xml
Normal file
12
modules/module/queries/getNonuniqueDomains.xml
Normal 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>
|
||||
14
modules/module/queries/getSiteByDomain.xml
Normal file
14
modules/module/queries/getSiteByDomain.xml
Normal 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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue