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;
}
/**
* @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 받아서 테이블을 생성
**/

View file

@ -197,6 +197,41 @@
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 받아서 테이블을 생성
**/

View file

@ -206,6 +206,43 @@
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 받아서 테이블을 생성
**/

View file

@ -191,6 +191,42 @@
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 받아서 테이블을 생성
**/

View file

@ -213,6 +213,41 @@
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 받아서 테이블을 생성
**/

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -30,15 +30,33 @@
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function moduleIsInstalled() {
return new Object();
function checkUpdate() {
$oDB = &DB::getInstance();
/**
* 2007. 7. 23 : 확장변수(extra_vars1~20까지 추가)
**/
if(!$oDB->isColumnExists("documents","extra_vars20")) return true;
return false;
}
/**
* @brief 업데이트 실행
**/
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="lock_comment" type="char" size="1" default="N" 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>

View file

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

View file

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

View file

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

View file

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

View file

@ -9,6 +9,7 @@
<action name="procInstall" 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" />
</actions>
</module>

View file

@ -27,6 +27,20 @@
$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변경
**/

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -514,8 +514,14 @@
$info->path = $path;
$info->admin_index_act = $info->admin_index_act;
if($table_count > $created_table_count) $info->is_installed = false;
else $info->is_installed = true;
// 설치 유무 체크 (설치는 DB의 설치만 관리)
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;
}

View file

@ -43,3 +43,10 @@ function completeInstallModule(ret_obj) {
alert(ret_obj['message']);
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="red">
<!--@if($val->need_update)-->
<a href="#">{$lang->cmd_update}</a>
<!--@else-->
<a href="#" onclick="doUpdateModule('{$val->module}'); return false;">{$lang->cmd_update}</a>
<!--@elseif($val->need_install)-->
<a href="#" onclick="doInstallModule('{$val->module}');return false;">{$lang->cmd_install}</a>
<!--@else-->
&nbsp;
<!--@end-->
</td>
<td>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -25,7 +25,7 @@
添付ファイルは、元のアドレスからダウンロードします。
</description>
<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.
Attachments will be downloaded from the original address.
</description>

View file

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

View file

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