diff --git a/classes/db/DBCubrid.class.php b/classes/db/DBCubrid.class.php index cddc4dc24..c39d19567 100644 --- a/classes/db/DBCubrid.class.php +++ b/classes/db/DBCubrid.class.php @@ -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 을 받아서 테이블을 생성 **/ diff --git a/classes/db/DBMysql.class.php b/classes/db/DBMysql.class.php index cdafbc921..7ec19b22c 100644 --- a/classes/db/DBMysql.class.php +++ b/classes/db/DBMysql.class.php @@ -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 을 받아서 테이블을 생성 **/ diff --git a/classes/db/DBMysql_innodb.class.php b/classes/db/DBMysql_innodb.class.php index 46e64600f..0c6dc539e 100644 --- a/classes/db/DBMysql_innodb.class.php +++ b/classes/db/DBMysql_innodb.class.php @@ -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 을 받아서 테이블을 생성 **/ diff --git a/classes/db/DBSqlite2.class.php b/classes/db/DBSqlite2.class.php index 63564a4ea..da1a72737 100644 --- a/classes/db/DBSqlite2.class.php +++ b/classes/db/DBSqlite2.class.php @@ -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 을 받아서 테이블을 생성 **/ diff --git a/classes/db/DBSqlite3_pdo.class.php b/classes/db/DBSqlite3_pdo.class.php index db286a078..e831a13d2 100644 --- a/classes/db/DBSqlite3_pdo.class.php +++ b/classes/db/DBSqlite3_pdo.class.php @@ -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 을 받아서 테이블을 생성 **/ diff --git a/modules/addon/addon.class.php b/modules/addon/addon.class.php index 77ebffb57..b43b64514 100644 --- a/modules/addon/addon.class.php +++ b/modules/addon/addon.class.php @@ -39,8 +39,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/admin/admin.class.php b/modules/admin/admin.class.php index 04ba20eed..1c96da370 100644 --- a/modules/admin/admin.class.php +++ b/modules/admin/admin.class.php @@ -30,8 +30,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/blog/blog.class.php b/modules/blog/blog.class.php index a3a3bf902..520b1e740 100644 --- a/modules/blog/blog.class.php +++ b/modules/blog/blog.class.php @@ -38,8 +38,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/board/board.class.php b/modules/board/board.class.php index 668858298..60a919e37 100644 --- a/modules/board/board.class.php +++ b/modules/board/board.class.php @@ -61,8 +61,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/comment/comment.class.php b/modules/comment/comment.class.php index bac47ca5e..7662f06f9 100644 --- a/modules/comment/comment.class.php +++ b/modules/comment/comment.class.php @@ -21,8 +21,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/counter/counter.class.php b/modules/counter/counter.class.php index eb9e4f366..1785162fe 100644 --- a/modules/counter/counter.class.php +++ b/modules/counter/counter.class.php @@ -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; } /** diff --git a/modules/document/document.class.php b/modules/document/document.class.php index 6e015efdc..40f99b4cd 100644 --- a/modules/document/document.class.php +++ b/modules/document/document.class.php @@ -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'); } } diff --git a/modules/document/schemas/documents.xml b/modules/document/schemas/documents.xml index 6133a2ad6..1a3a8d5d5 100644 --- a/modules/document/schemas/documents.xml +++ b/modules/document/schemas/documents.xml @@ -31,4 +31,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/editor/editor.class.php b/modules/editor/editor.class.php index d41eb38d5..8289183f5 100644 --- a/modules/editor/editor.class.php +++ b/modules/editor/editor.class.php @@ -38,8 +38,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/file/file.class.php b/modules/file/file.class.php index b3da1387e..135bb4c1a 100644 --- a/modules/file/file.class.php +++ b/modules/file/file.class.php @@ -35,8 +35,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/guestbook/guestbook.class.php b/modules/guestbook/guestbook.class.php index 0221c0227..2e0f47e7f 100644 --- a/modules/guestbook/guestbook.class.php +++ b/modules/guestbook/guestbook.class.php @@ -43,8 +43,8 @@ * @brief 설치가 이상이 없는지 체크하는 method * 설치시 필수 체크 부분이 있다면 검토하는 코드를 추가할 수 있다. **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/importer/importer.class.php b/modules/importer/importer.class.php index 1390d3619..9f3b83dbe 100644 --- a/modules/importer/importer.class.php +++ b/modules/importer/importer.class.php @@ -21,8 +21,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/install/conf/module.xml b/modules/install/conf/module.xml index 79af23682..e1cff33fa 100644 --- a/modules/install/conf/module.xml +++ b/modules/install/conf/module.xml @@ -9,6 +9,7 @@ + diff --git a/modules/install/install.admin.controller.php b/modules/install/install.admin.controller.php index 2889da987..61a5a482d 100644 --- a/modules/install/install.admin.controller.php +++ b/modules/install/install.admin.controller.php @@ -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변경 **/ diff --git a/modules/install/install.class.php b/modules/install/install.class.php index 68b636667..8695ccd86 100644 --- a/modules/install/install.class.php +++ b/modules/install/install.class.php @@ -17,8 +17,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/krzip/krzip.class.php b/modules/krzip/krzip.class.php index 503961d2d..1a2eb1a23 100644 --- a/modules/krzip/krzip.class.php +++ b/modules/krzip/krzip.class.php @@ -25,8 +25,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/layout/layout.class.php b/modules/layout/layout.class.php index eaf0b87e5..614fbead3 100644 --- a/modules/layout/layout.class.php +++ b/modules/layout/layout.class.php @@ -29,8 +29,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/member/member.class.php b/modules/member/member.class.php index 97c6656b6..e7a06df76 100644 --- a/modules/member/member.class.php +++ b/modules/member/member.class.php @@ -112,8 +112,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/menu/menu.class.php b/modules/menu/menu.class.php index 0c9ac5238..d862e8913 100644 --- a/modules/menu/menu.class.php +++ b/modules/menu/menu.class.php @@ -26,8 +26,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/message/message.class.php b/modules/message/message.class.php index 303eb5978..07be57488 100644 --- a/modules/message/message.class.php +++ b/modules/message/message.class.php @@ -22,8 +22,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/module/module.class.php b/modules/module/module.class.php index 1043fba7f..3db20dcf5 100644 --- a/modules/module/module.class.php +++ b/modules/module/module.class.php @@ -27,8 +27,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/module/module.model.php b/modules/module/module.model.php index a50918aa6..162784ca2 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -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; } diff --git a/modules/module/tpl/js/module_admin.js b/modules/module/tpl/js/module_admin.js index 083161857..dfdda8d42 100644 --- a/modules/module/tpl/js/module_admin.js +++ b/modules/module/tpl/js/module_admin.js @@ -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); +} diff --git a/modules/module/tpl/module_list.html b/modules/module/tpl/module_list.html index c91677329..62ce73a6e 100644 --- a/modules/module/tpl/module_list.html +++ b/modules/module/tpl/module_list.html @@ -40,9 +40,11 @@ {$lang->cmd_view} - {$lang->cmd_update} - + {$lang->cmd_update} + {$lang->cmd_install} + +   diff --git a/modules/page/page.class.php b/modules/page/page.class.php index 600ae4488..9fb9eb081 100644 --- a/modules/page/page.class.php +++ b/modules/page/page.class.php @@ -29,8 +29,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/poll/poll.class.php b/modules/poll/poll.class.php index b94e2b627..a3fa8b801 100644 --- a/modules/poll/poll.class.php +++ b/modules/poll/poll.class.php @@ -28,8 +28,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/rss/rss.class.php b/modules/rss/rss.class.php index 97653b4d7..165bea8ef 100644 --- a/modules/rss/rss.class.php +++ b/modules/rss/rss.class.php @@ -21,8 +21,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/spamfilter/spamfilter.class.php b/modules/spamfilter/spamfilter.class.php index ad2bcefe7..e3d68f5d0 100644 --- a/modules/spamfilter/spamfilter.class.php +++ b/modules/spamfilter/spamfilter.class.php @@ -23,8 +23,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/tag/tag.class.php b/modules/tag/tag.class.php index 68461405a..b8076b416 100644 --- a/modules/tag/tag.class.php +++ b/modules/tag/tag.class.php @@ -17,8 +17,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/trackback/trackback.class.php b/modules/trackback/trackback.class.php index a839812b5..a7baf71aa 100644 --- a/modules/trackback/trackback.class.php +++ b/modules/trackback/trackback.class.php @@ -22,8 +22,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/ttimporter/conf/info.xml b/modules/ttimporter/conf/info.xml index 91482f428..3171e624a 100644 --- a/modules/ttimporter/conf/info.xml +++ b/modules/ttimporter/conf/info.xml @@ -25,7 +25,7 @@ 添付ファイルは、元のアドレスからダウンロードします。 - 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. diff --git a/modules/ttimporter/ttimporter.class.php b/modules/ttimporter/ttimporter.class.php index 0c7ff98f6..1d099d7dc 100644 --- a/modules/ttimporter/ttimporter.class.php +++ b/modules/ttimporter/ttimporter.class.php @@ -21,8 +21,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /** diff --git a/modules/widget/widget.class.php b/modules/widget/widget.class.php index 9adc797c5..fcee1f982 100644 --- a/modules/widget/widget.class.php +++ b/modules/widget/widget.class.php @@ -27,8 +27,8 @@ /** * @brief 설치가 이상이 없는지 체크하는 method **/ - function moduleIsInstalled() { - return new Object(); + function checkUpdate() { + return false; } /**