From e00c2163bc3d2272d6925f5945a1ee9d85448557 Mon Sep 17 00:00:00 2001 From: wangchunsheng Date: Mon, 25 Jan 2010 06:18:03 +0000 Subject: [PATCH] + add upgrade module. --- module/upgrade/control.php | 59 ++++++++++++ module/upgrade/lang/zh-cn.php | 33 +++++++ module/upgrade/model.php | 103 +++++++++++++++++++++ module/upgrade/view/execute.html.php | 44 +++++++++ module/upgrade/view/selectversion.html.php | 39 ++++++++ 5 files changed, 278 insertions(+) create mode 100644 module/upgrade/control.php create mode 100644 module/upgrade/lang/zh-cn.php create mode 100644 module/upgrade/model.php create mode 100644 module/upgrade/view/execute.html.php create mode 100644 module/upgrade/view/selectversion.html.php diff --git a/module/upgrade/control.php b/module/upgrade/control.php new file mode 100644 index 0000000000..cb0255a735 --- /dev/null +++ b/module/upgrade/control.php @@ -0,0 +1,59 @@ +. + * + * @copyright Copyright: 2009 Chunsheng Wang + * @author Chunsheng Wang + * @package upgrade + * @version $Id$ + * @link http://www.zentao.cn + */ +class upgrade extends control +{ + /* 升级程序首页。*/ + public function index() + { + $this->locate(inlink('selectVersion')); + } + + /* 选择系统。*/ + public function selectVersion() + { + $this->view->header->title = $this->lang->upgrade->common . $this->lang->colon . $this->lang->upgrade->selectVersion; + $this->view->position[] = $this->lang->upgrade->common; + $this->display(); + } + + /* 执行转换。*/ + public function execute() + { + $this->upgrade->execute($this->post->fromVersion); + + $this->view->header->title = $this->lang->upgrade->result; + $this->view->position[] = $this->lang->upgrade->common; + + if(!$this->upgrade->isError()) + { + $this->view->result = 'success'; + } + else + { + $this->view->result = 'fail'; + $this->view->errors = $this->upgrade->getError(); + } + $this->display(); + } +} diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php new file mode 100644 index 0000000000..4f483b8592 --- /dev/null +++ b/module/upgrade/lang/zh-cn.php @@ -0,0 +1,33 @@ +. + * + * @copyright Copyright: 2009 Chunsheng Wang + * @author Chunsheng Wang + * @package upgrade + * @version $Id$ + * @link http://www.zentao.cn + */ +$lang->upgrade->common = '升级'; +$lang->upgrade->result = '升级结果'; +$lang->upgrade->fail = '升级失败'; +$lang->upgrade->success = '升级成功'; +$lang->upgrade->tohome = '返回首页'; + +$lang->upgrade->selectVersion = '选择版本'; +$lang->upgrade->fromVersion = '升级版本'; + +$lang->upgrade->fromVersions['0_3'] = '0.3 BETA'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php new file mode 100644 index 0000000000..85847bea7f --- /dev/null +++ b/module/upgrade/model.php @@ -0,0 +1,103 @@ +. + * + * @copyright Copyright: 2009 Chunsheng Wang + * @author Chunsheng Wang + * @package upgrade + * @version $Id$ + * @link http://www.zentao.cn + */ +?> +upgradeFrom0_3To0_4(); + } + } + + /* 从0.3版本升级到0.4版本。*/ + private function upgradeFrom0_3To0_4() + { + $upgradeFile = $this->app->getAppRoot() . 'db' . $this->app->getPathFix() . 'update0.3.sql'; + $this->execSQL($upgradeFile); + if(!$this->isError()) + { + $result = $this->dao->update(TABLE_CONFIG) + ->set('value')->eq('0.4 beta') + ->where('owner')->eq('system') + ->andWhere('section')->eq('global') + ->andWhere('`key`')->eq('version') + ->limit(1) + ->query(); + if($result->rowCount() == 0) + { + $version->owner = 'system'; + $version->section = 'global'; + $version->key = 'version'; + $version->value = '0.4 beta'; + $this->dao->insert(TABLE_CONFIG)->data($version)->exec(); + } + } + } + + /* 执行SQL。*/ + private function execSQL($sqlFile) + { + $mysqlVersion = $this->loadModel('install')->getMysqlVersion(); + $sqls = explode(';', file_get_contents($sqlFile)); + foreach($sqls as $sql) + { + $sql = trim($sql); + if(empty($sql)) continue; + + if(strpos($sql, 'CREATE') !== false and $mysqlVersion <= 4.1) + { + $sql = str_replace('DEFAULT CHARSET=utf8', '', $sql); + } + $sql = str_replace('zt_', $this->config->db->prefix, $sql); + try + { + $this->dbh->exec($sql); + } + catch (PDOException $e) + { + self::$errors[] = $e->getMessage() . "

The sql is: $sql

"; + } + } + } + + /* 判断是否有误。*/ + public function isError() + { + return !empty(self::$errors); + } + + /* 获得升级过程中的错误。*/ + public function getError() + { + $errors = self::$errors; + self::$errors = array(); + return $errors; + } +} diff --git a/module/upgrade/view/execute.html.php b/module/upgrade/view/execute.html.php new file mode 100644 index 0000000000..751e24539b --- /dev/null +++ b/module/upgrade/view/execute.html.php @@ -0,0 +1,44 @@ +. + * + * @copyright Copyright: 2009 Chunsheng Wang + * @author Chunsheng Wang + * @package upgrade + * @version $Id$ + */ +?> + +
+ + + + + +
upgrade->$result;?>
+ upgrade->tohome, $this->createLink('index')); + } + ?> +
+
+ diff --git a/module/upgrade/view/selectversion.html.php b/module/upgrade/view/selectversion.html.php new file mode 100644 index 0000000000..0edaa82d3c --- /dev/null +++ b/module/upgrade/view/selectversion.html.php @@ -0,0 +1,39 @@ +. + * + * @copyright Copyright: 2009 Chunsheng Wang + * @author Chunsheng Wang + * @package upgrade + * @version $Id$ + */ +?> + +
+
'> + + + + + + + + + +
upgrade->selectVersion;?>
upgrade->fromVersion;?>upgrade->fromVersions, '', 'class=select-3');?>
upgrade->common);?>
+
+
+