diff --git a/module/extension/control.php b/module/extension/control.php index 2708e94614..b24a1024ef 100644 --- a/module/extension/control.php +++ b/module/extension/control.php @@ -116,6 +116,8 @@ class extension extends control */ public function install($extension, $downLink = '', $md5 = '', $type = '', $overridePackage = 'no', $ignoreCompatible = 'no', $overrideFile = 'no', $agreeLicense = 'no', $upgrade = 'no') { + set_time_limit(0); + $this->view->error = ''; $installTitle = $upgrade == 'no' ? $this->lang->extension->install : $this->lang->extension->upgrade; $installType = $upgrade == 'no' ? $this->lang->extension->installExt : $this->lang->extension->upgradeExt; @@ -341,9 +343,11 @@ class extension extends control */ public function uninstall($extension, $confirm = 'no') { + /* Determine whether need to back up. */ $dbFile = $this->extension->getDBFile($extension, 'uninstall'); if($confirm == 'no' and file_exists($dbFile)) { + $this->view->title = $this->lang->extension->waring; $this->view->confirm = 'no'; $this->view->code = $extension; die($this->display()); @@ -358,7 +362,7 @@ class extension extends control if($preUninstallHook = $this->extension->getHookFile($extension, 'preuninstall')) include $preUninstallHook; - if(file_exists($dbFile)) $this->view->backDBName = $this->extension->backupDB($extension); + if(file_exists($dbFile)) $this->view->backupFile = $this->extension->backupDB($extension); $this->extension->executeDB($extension, 'uninstall'); $this->extension->updateExtension($extension, array('status' => 'available')); diff --git a/module/extension/lang/en.php b/module/extension/lang/en.php index 6dd61e913d..b874a7243d 100644 --- a/module/extension/lang/en.php +++ b/module/extension/lang/en.php @@ -65,6 +65,7 @@ $lang->extension->byCategory = 'By Category'; $lang->extension->installFailed = '%s failed, the reason is:'; $lang->extension->uninstallFailed = 'Uninstall failed, the reason is:'; $lang->extension->confirmUninstall = 'Uninstall will delete or modify database, whether to uninstall?'; +$lang->extension->noticeBackupDB = 'Before uninstalling, we recommend backing up the database.'; $lang->extension->installFinished = 'Good, the extension has been %s successfully.'; $lang->extension->refreshPage = 'Refresh'; $lang->extension->uninstallFinished = 'Extension has been successfully uninstalled.'; @@ -85,6 +86,8 @@ $lang->extension->upgradeExt = 'Upgrade'; $lang->extension->installExt = 'Install'; $lang->extension->upgradeVersion = '(Upgrade from %s to %s)'; +$lang->extension->waring = 'Waring'; + $lang->extension->errorOccurs = 'Error:'; $lang->extension->errorGetModules = "Get extensions' categories data from the www.zentao.net failed. "; $lang->extension->errorGetExtensions = 'Get extensions from www.zentao.net failed. You can visit www.zentao.net to find your extensions, download it manually and then upload to zentaopms to install it.'; diff --git a/module/extension/lang/zh-cn.php b/module/extension/lang/zh-cn.php index 1990b969cf..e8597d95af 100644 --- a/module/extension/lang/zh-cn.php +++ b/module/extension/lang/zh-cn.php @@ -65,6 +65,7 @@ $lang->extension->byCategory = '分类浏览'; $lang->extension->installFailed = '%s失败,错误原因如下:'; $lang->extension->uninstallFailed = '卸载失败,错误原因如下:'; $lang->extension->confirmUninstall = '卸载插件会删除或修改相关的数据库,是否继续卸载?'; +$lang->extension->noticeBackupDB = '卸载前,建议备份数据库。'; $lang->extension->installFinished = '恭喜您,插件顺利的%s成功!'; $lang->extension->refreshPage = '刷新页面'; $lang->extension->uninstallFinished = '插件已经成功卸载'; @@ -85,6 +86,8 @@ $lang->extension->upgradeExt = '升级'; $lang->extension->installExt = '安装'; $lang->extension->upgradeVersion = '(从%s升级到%s)'; +$lang->extension->waring = '警告'; + $lang->extension->errorOccurs = '错误:'; $lang->extension->errorGetModules = '从www.zentao.net获得插件分类失败。可能是因为网络方面的原因,请检查后重新刷新页面。'; $lang->extension->errorGetExtensions = '从www.zentao.net获得插件失败。可能是因为网络方面的原因,您可以到www.zentao.net手工下载插件,然后上传安装。'; diff --git a/module/extension/model.php b/module/extension/model.php index 1940cdcb88..8f7fc6f0e2 100644 --- a/module/extension/model.php +++ b/module/extension/model.php @@ -747,21 +747,23 @@ class extensionModel extends model $sqls = file_get_contents($this->getDBFile($extension, 'uninstall')); $sqls = explode(';', $sqls); + /* Get tables for backup. */ $backupTables = array(); foreach($sqls as $sql) { $sql = trim($sql); - if(preg_match('/^DROP TABLE `?([^` ]*)`?|^ALTER TABLE `?([^` ]*)`? .*DROP .+/i', $sql, $out)) + if(preg_match('/TABLE +`?([^` ]*)`?/i', $sql, $out)) { - if(!empty($out[1])) $backupTables[] = $out[1]; - if(!empty($out[2])) $backupTables[] = $out[2]; + if(!empty($out[1])) $backupTables[$out[1]] = $out[1]; } } + /* Back up database. */ if($backupTables) { - $backDBName = $this->app->getTmpRoot() . $extension . date('Ymd') . '.sql'; - if($zdb->backupDB($backDBName, $backupTables) == 0) return $backDBName; + $backupFile = $this->app->getTmpRoot() . $extension . '.' . date('Ymd') . '.sql'; + $result = $zdb->dump($backupFile, $backupTables); + if($result->result) return $backupFile; return false; } return false; diff --git a/module/extension/view/uninstall.html.php b/module/extension/view/uninstall.html.php index aed4b1ef8d..9eae02d219 100644 --- a/module/extension/view/uninstall.html.php +++ b/module/extension/view/uninstall.html.php @@ -18,8 +18,9 @@ {$lang->extension->confirmUninstall}"; - echo html::a(inlink('uninstall', "extension=$code&confirm=yes"), $lang->extension->uninstall); + echo html::a(inlink('uninstall', "extension=$code&confirm=yes"), $lang->extension->uninstall, '', "class='btn'"); echo "

"; + echo "

{$lang->extension->noticeBackupDB}

" ?> {$title}"; - if(!empty($backDBName)) echo '

' . sprintf($lang->extension->backDBFile, $backDBName) . '

'; + if(!empty($backupFile)) echo '

' . sprintf($lang->extension->backDBFile, $backupFile) . '

'; if($removeCommands) { echo "

{$lang->extension->unremovedFiles}

";