Module의 업데이트 필요 현황을 파악하고 업데이트를 할 수 있는 코드 추가. db의 column exists정보와 add column 기능 추가

git-svn-id: http://xe-core.googlecode.com/svn/trunk@1974 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-07-23 07:35:47 +00:00
parent cb2254ef96
commit a2eb5d62bf
38 changed files with 299 additions and 64 deletions

View file

@ -203,6 +203,36 @@
return $output; return $output;
} }
/**
* @brief 특정 테이블에 특정 column 추가
**/
function addColumn($table_name, $column_name, $type='number', $size='', $default = '', $notnull=false) {
$type = $this->column_type[$type];
if(strtoupper($type)=='INTEGER') $size = '';
$query = sprintf("alter class %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($notnull) $query .= " not null ";
$this->_query($query);
}
/**
* @brief 특정 테이블의 column의 정보를 return
**/
function isColumnExists($table_name, $column_name) {
$query = sprintf("select %s from db_attribute where class_name = '%s%s'", $column_name, $this->prefix, $table_name);
$result = $this->_query($query);
if(cubrid_num_rows($result)>0) $output = true;
else $output = false;
if($result) cubrid_close_request($result);
return $output;
}
/** /**
* @brief xml 받아서 테이블을 생성 * @brief xml 받아서 테이블을 생성
**/ **/

View file

@ -197,6 +197,41 @@
return true; return true;
} }
/**
* @brief 특정 테이블에 특정 column 추가
**/
function addColumn($table_name, $column_name, $type='number', $size='', $default = '', $notnull=false) {
$type = $this->column_type[$type];
if(strtoupper($type)=='INTEGER') $size = '';
$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($notnull) $query .= " not null ";
$this->_query($query);
}
/**
* @brief 특정 테이블의 column의 정보를 return
**/
function isColumnExists($table_name, $column_name) {
$query = sprintf("show fields from %s%s", $this->prefix, $table_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
if($output) {
$column_name = strtolower($column_name);
foreach($output as $key => $val) {
$name = strtolower($val->Field);
if($column_name == $name) return true;
}
}
return false;
}
/** /**
* @brief xml 받아서 테이블을 생성 * @brief xml 받아서 테이블을 생성
**/ **/

View file

@ -206,6 +206,43 @@
return true; return true;
} }
/**
* @brief 특정 테이블에 특정 column 추가
**/
function addColumn($table_name, $column_name, $type='number', $size='', $default = '', $notnull=false) {
$type = $this->column_type[$type];
if(strtoupper($type)=='INTEGER') $size = '';
$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($notnull) $query .= " not null ";
$this->_query($query);
}
/**
* @brief 특정 테이블의 column의 정보를 return
**/
function isColumnExists($table_name, $column_name) {
$query = sprintf("show fields from %s%s", $this->prefix, $table_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
if($output) {
$column_name = strtolower($column_name);
foreach($output as $key => $val) {
$name = strtolower($val->Field);
if($column_name == $name) return true;
}
}
return false;
}
/** /**
* @brief xml 받아서 테이블을 생성 * @brief xml 받아서 테이블을 생성
**/ **/

View file

@ -191,6 +191,42 @@
return true; return true;
} }
/**
* @brief 특정 테이블에 특정 column 추가
**/
function addColumn($table_name, $column_name, $type='number', $size='', $default = '', $notnull=false) {
$type = $this->column_type[$type];
if(strtoupper($type)=='INTEGER') $size = '';
$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($notnull) $query .= " not null ";
$this->_prepare($query);
return $this->_execute();
}
/**
* @brief 특정 테이블의 column의 정보를 return
**/
function isColumnExists($table_name, $column_name) {
$query = sprintf("pragma table_info(%s%s)", $this->prefix, $table_name);
$this->_prepare($query);
$output = $this->_execute();
if($output) {
$column_name = strtolower($column_name);
foreach($output as $key => $val) {
$name = strtolower($val->name);
if($column_name == $name) return true;
}
}
return false;
}
/** /**
* @brief xml 받아서 테이블을 생성 * @brief xml 받아서 테이블을 생성
**/ **/

View file

@ -213,6 +213,41 @@
return true; return true;
} }
/**
* @brief 특정 테이블에 특정 column 추가
**/
function addColumn($table_name, $column_name, $type='number', $size='', $default = '', $notnull=false) {
$type = $this->column_type[$type];
if(strtoupper($type)=='INTEGER') $size = '';
$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($notnull) $query .= " not null ";
$this->_prepare($query);
return $this->_execute();
}
/**
* @brief 특정 테이블의 column의 정보를 return
**/
function isColumnExists($table_name, $column_name) {
$query = sprintf("pragma table_info(%s%s)", $this->prefix, $table_name);
$this->_prepare($query);
$output = $this->_execute();
if($output) {
$column_name = strtolower($column_name);
foreach($output as $key => $val) {
$name = strtolower($val->name);
if($column_name == $name) return true;
}
}
return false;
}
/** /**
* @brief xml 받아서 테이블을 생성 * @brief xml 받아서 테이블을 생성
**/ **/

View file

@ -39,8 +39,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -30,8 +30,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -38,8 +38,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -61,8 +61,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -21,8 +21,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -29,14 +29,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
$oDB = &DB::getInstance(); return false;
// 테이블 검사
if(!$oDB->isTableExists('counter_log')) return new Object(-1,'fail');
if(!$oDB->isTableExists('counter_status ')) return new Object(-1,'fail');
return new Object();
} }
/** /**

View file

@ -30,15 +30,33 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); $oDB = &DB::getInstance();
/**
* 2007. 7. 23 : 확장변수(extra_vars1~20까지 추가)
**/
if(!$oDB->isColumnExists("documents","extra_vars20")) return true;
return false;
} }
/** /**
* @brief 업데이트 실행 * @brief 업데이트 실행
**/ **/
function moduleUpdate() { function moduleUpdate() {
return new Object(); /**
* 2007. 7. 23 : 확장변수(extra_vars1~20까지 추가)
**/
$oDB = &DB::getInstance();
if(!$oDB->isColumnExists("documents","extra_vars20")) {
for($i=1;$i<=20;$i++) {
$column_name = "extra_vars".$i;
$oDB->addColumn('documents',$column_name,'text');
}
}
return new Object(0,'success_updated');
} }
} }

View file

@ -31,4 +31,24 @@
<column name="allow_comment" type="char" size="1" default="Y" notnull="notnull" /> <column name="allow_comment" type="char" size="1" default="Y" notnull="notnull" />
<column name="lock_comment" type="char" size="1" default="N" notnull="notnull" /> <column name="lock_comment" type="char" size="1" default="N" notnull="notnull" />
<column name="allow_trackback" type="char" size="1" default="Y" notnull="notnull" /> <column name="allow_trackback" type="char" size="1" default="Y" notnull="notnull" />
<column name="extra_vars1" type="text" />
<column name="extra_vars2" type="text" />
<column name="extra_vars3" type="text" />
<column name="extra_vars4" type="text" />
<column name="extra_vars5" type="text" />
<column name="extra_vars6" type="text" />
<column name="extra_vars7" type="text" />
<column name="extra_vars8" type="text" />
<column name="extra_vars9" type="text" />
<column name="extra_vars10" type="text" />
<column name="extra_vars11" type="text" />
<column name="extra_vars12" type="text" />
<column name="extra_vars13" type="text" />
<column name="extra_vars14" type="text" />
<column name="extra_vars15" type="text" />
<column name="extra_vars16" type="text" />
<column name="extra_vars17" type="text" />
<column name="extra_vars18" type="text" />
<column name="extra_vars19" type="text" />
<column name="extra_vars20" type="text" />
</table> </table>

View file

@ -38,8 +38,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -35,8 +35,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -43,8 +43,8 @@
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
* 설치시 필수 체크 부분이 있다면 검토하는 코드를 추가할 있다. * 설치시 필수 체크 부분이 있다면 검토하는 코드를 추가할 있다.
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -21,8 +21,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -9,6 +9,7 @@
<action name="procInstall" type="controller" standalone="true" /> <action name="procInstall" type="controller" standalone="true" />
<action name="procInstallAdminInstall" type="controller" standalone="true" /> <action name="procInstallAdminInstall" type="controller" standalone="true" />
<action name="procInstallAdminUpdate" type="controller" standalone="true" />
<action name="procInstallAdminSaveTimeZone" type="controller" standalone="true" /> <action name="procInstallAdminSaveTimeZone" type="controller" standalone="true" />
</actions> </actions>
</module> </module>

View file

@ -27,6 +27,20 @@
$this->setMessage('success_installed'); $this->setMessage('success_installed');
} }
/**
* @brief 모듈 업데이트
**/
function procInstallAdminUpdate() {
$module_name = Context::get('module_name');
if(!$module_name) return new object(-1, 'invalid_request');
$oModule = &getModule($module_name, 'class');
if($oModule) $output = $oModule->moduleUpdate();
else $output = new Object(-1, 'invalid_request');
return $output;
}
/** /**
* @brief time zone변경 * @brief time zone변경
**/ **/

View file

@ -17,8 +17,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -25,8 +25,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -29,8 +29,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -112,8 +112,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -26,8 +26,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -22,8 +22,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -27,8 +27,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -514,8 +514,14 @@
$info->path = $path; $info->path = $path;
$info->admin_index_act = $info->admin_index_act; $info->admin_index_act = $info->admin_index_act;
if($table_count > $created_table_count) $info->is_installed = false; // 설치 유무 체크 (설치는 DB의 설치만 관리)
else $info->is_installed = true; if($table_count > $created_table_count) $info->need_installed = false;
else $info->need_installed = true;
// 각 모듈의 module.class.php로 upgrade 유무 체크
$oDummy = null;
$oDummy = &getModule($module_name, 'class');
if($oDummy) $info->need_update = $oDummy->checkUpdate();
$list[] = $info; $list[] = $info;
} }

View file

@ -43,3 +43,10 @@ function completeInstallModule(ret_obj) {
alert(ret_obj['message']); alert(ret_obj['message']);
location.href = location.href; location.href = location.href;
} }
/* 모듈 업그레이드 */
function doUpdateModule(module) {
var params = new Array();
params['module_name'] = module;
exec_xml('install','procInstallAdminUpdate',params, completeInstallModule);
}

View file

@ -40,9 +40,11 @@
<td class="blue"><a href="#" onclick="popopen('{getUrl('','module','module','act','dispModuleAdminInfo','selected_module',$val->module)}','module_info');return false">{$lang->cmd_view}</a></td> <td class="blue"><a href="#" onclick="popopen('{getUrl('','module','module','act','dispModuleAdminInfo','selected_module',$val->module)}','module_info');return false">{$lang->cmd_view}</a></td>
<td class="red"> <td class="red">
<!--@if($val->need_update)--> <!--@if($val->need_update)-->
<a href="#">{$lang->cmd_update}</a> <a href="#" onclick="doUpdateModule('{$val->module}'); return false;">{$lang->cmd_update}</a>
<!--@else--> <!--@elseif($val->need_install)-->
<a href="#" onclick="doInstallModule('{$val->module}');return false;">{$lang->cmd_install}</a> <a href="#" onclick="doInstallModule('{$val->module}');return false;">{$lang->cmd_install}</a>
<!--@else-->
&nbsp;
<!--@end--> <!--@end-->
</td> </td>
<td> <td>

View file

@ -29,8 +29,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -28,8 +28,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -21,8 +21,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -23,8 +23,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -17,8 +17,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -22,8 +22,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -25,7 +25,7 @@
添付ファイルは、元のアドレスからダウンロードします。 添付ファイルは、元のアドレスからダウンロードします。
</description> </description>
<description xml:lang="en"> <description xml:lang="en">
Module for inputting TattertTools' backup file to ZeroboardXE. Module for inputting TattertTools backup file to ZeroboardXE.
Backup file without attachment is required. Backup file without attachment is required.
Attachments will be downloaded from the original address. Attachments will be downloaded from the original address.
</description> </description>

View file

@ -21,8 +21,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**

View file

@ -27,8 +27,8 @@
/** /**
* @brief 설치가 이상이 없는지 체크하는 method * @brief 설치가 이상이 없는지 체크하는 method
**/ **/
function moduleIsInstalled() { function checkUpdate() {
return new Object(); return false;
} }
/** /**