From 37dca8ae9c88e8c8edf1efec72d2a2768fc47601 Mon Sep 17 00:00:00 2001 From: wangchunsheng Date: Thu, 28 Apr 2011 15:46:00 +0000 Subject: [PATCH] * adjust the uninstall, activate, deactivate feature. + add the site link. --- module/extension/control.php | 145 +++++++++------------- module/extension/css/common.css | 2 +- module/extension/lang/zh-cn.php | 8 +- module/extension/model.php | 19 ++- module/extension/view/activate.html.php | 4 +- module/extension/view/browse.html.php | 5 +- module/extension/view/deactivate.html.php | 17 +-- module/extension/view/install.html.php | 4 +- module/extension/view/obtain.html.php | 14 +-- module/extension/view/uninstall.html.php | 17 +-- 10 files changed, 105 insertions(+), 130 deletions(-) diff --git a/module/extension/control.php b/module/extension/control.php index 3acf433d63..6441c3b1a5 100644 --- a/module/extension/control.php +++ b/module/extension/control.php @@ -136,65 +136,65 @@ class extension extends control /* Extract the package. */ $return = $this->extension->extractPackage($extension); - if($return->result != 'ok') + if($return->result != 'ok') { $this->view->error = sprintf($this->lang->extension->errorExtracted, $packageFile, $return->error); die($this->display()); } - /* Check version comptiable. */ - $zentaoVersion = $this->extension->getZentaoVersion($extension); - if(!$this->extension->checkVersion($zentaoVersion) and $ignoreCompitable == 'no') - { - $ignoreLink = inlink('install', "extension=$extension&downLink=$downLink&md5=$md5&overridePackage=$overridePackage&ignoreCompitable=yes"); - $returnLink = inlink('obtain'); - $this->view->error = sprintf($this->lang->extension->errorCheckIncompatible, $ignoreLink, $returnLink); - die($this->display()); - } + /* Check version comptiable. */ + $zentaoVersion = $this->extension->getZentaoVersion($extension); + if(!$this->extension->checkVersion($zentaoVersion) and $ignoreCompitable == 'no') + { + $ignoreLink = inlink('install', "extension=$extension&downLink=$downLink&md5=$md5&overridePackage=$overridePackage&ignoreCompitable=yes"); + $returnLink = inlink('obtain'); + $this->view->error = sprintf($this->lang->extension->errorCheckIncompatible, $ignoreLink, $returnLink); + die($this->display()); + } - /* Check files in the package conflicts with exists files or not. */ - if($overrideFile == 'no') - { - $return = $this->extension->checkFile($extension); - if($return->result != 'ok') - { - $overrideLink = inlink('install', "extension=$extension&downLink=$downLink&md5=$md5&overridePackage=$overridePackage&ignoreCompitable=$ignoreCompitable&overrideFile=yes"); - $returnLink = inlink('obtain'); - $this->view->error = sprintf($this->lang->extension->errorFileConflicted, $return->error, $overrideLink, $returnLink); - die($this->display()); - } - } + /* Check files in the package conflicts with exists files or not. */ + if($overrideFile == 'no') + { + $return = $this->extension->checkFile($extension); + if($return->result != 'ok') + { + $overrideLink = inlink('install', "extension=$extension&downLink=$downLink&md5=$md5&overridePackage=$overridePackage&ignoreCompitable=$ignoreCompitable&overrideFile=yes"); + $returnLink = inlink('obtain'); + $this->view->error = sprintf($this->lang->extension->errorFileConflicted, $return->error, $overrideLink, $returnLink); + die($this->display()); + } + } - /* Save to database. */ - $this->extension->saveExtension($extension); + /* Save to database. */ + $this->extension->saveExtension($extension); - /* Copy files to target directory. */ - $this->view->files = $this->extension->copyPackageFiles($extension); + /* Copy files to target directory. */ + $this->view->files = $this->extension->copyPackageFiles($extension); - /* Judge need execute db install or not. */ - $data->status = 'installed'; - $data->dirs = $this->session->dirs2Created; - $data->files = $this->view->files; - $data->installedTime = helper::now(); + /* Judge need execute db install or not. */ + $data->status = 'installed'; + $data->dirs = $this->session->dirs2Created; + $data->files = $this->view->files; + $data->installedTime = helper::now(); - if($this->extension->needExecuteDB($extension, 'install')) - { - $return = $this->extension->executeDB($extension, 'install'); - if($return->result != 'ok') - { - $this->view->error = sprintf($this->lang->extension->errorInstallDB, $return->error); - die($this->display()); - } - $this->extension->updateExtension($extension, $data); - } - else - { - $this->extension->updateExtension($extension, $data); - } + if($this->extension->needExecuteDB($extension, 'install')) + { + $return = $this->extension->executeDB($extension, 'install'); + if($return->result != 'ok') + { + $this->view->error = sprintf($this->lang->extension->errorInstallDB, $return->error); + die($this->display()); + } + $this->extension->updateExtension($extension, $data); + } + else + { + $this->extension->updateExtension($extension, $data); + } - $this->view->downloadedPackage = !empty($downLink); + $this->view->downloadedPackage = !empty($downLink); - $this->display(); + $this->display(); } /** @@ -204,24 +204,11 @@ class extension extends control * @access public * @return void */ - public function uninstall($extension,$isCheck = true) + public function uninstall($extension) { - $return->return = 'ok'; - $checkReturn = $this->extension->checkFile($extension, 'change', $isCheck); - if($checkReturn->result != 'ok') - { - $continueLink = inlink('uninstall', "extension=$extension&isCheck=" . false); - $resetLink = inlink('browse'); - $return->removeCommands = sprintf($this->lang->extension->errorChangeFile, $checkReturn->error, $continueLink, $resetLink); - $return->return = 'fail'; - $this->view->return = $return; - die($this->display()); - } - $this->extension->executeDB($extension, 'uninstall'); $this->extension->updateExtension($extension, array('status' => 'available')); - $return->removeCommands = $this->extension->removePackage($extension); - $this->view->return = $return; + $this->view->removeCommands = $this->extension->removePackage($extension); $this->view->header->title = $this->lang->extension->uninstallFinished; $this->display(); } @@ -233,16 +220,18 @@ class extension extends control * @access public * @return void */ - public function activate($extension, $isCheck = true) + public function activate($extension, $ignore = 'no') { - $return = $this->extension->checkFile($extension, 'repeat', $isCheck); - if($return->result != 'ok') + if($ignore == 'no') { - $continueLink = inlink('activate', "extension=$extension&isCheck=" . false); - $resetLink = inlink('browse', 'type=deactivated'); - $return->error = sprintf($this->lang->extension->errorRepeatFile, $return->error, $continueLink, $resetLink); - $this->view->return = $return; - die($this->display()); + $return = $this->extension->checkFile($extension); + if($return->result != 'ok') + { + $ignoreLink = inlink('activate', "extension=$extension&ignore=yes"); + $resetLink = inlink('browse', 'type=deactivated'); + $this->view->error = sprintf($this->lang->extension->errorFileConflicted, $return->error, $ignoreLink, $resetLink); + die($this->display()); + } } $this->extension->copyPackageFiles($extension); @@ -258,22 +247,10 @@ class extension extends control * @access public * @return void */ - public function deactivate($extension, $ignore = 'no') + public function deactivate($extension) { - $return->return = 'ok'; - $checkReturn = $this->extension->checkFile($extension); - if($checkReturn->result != 'ok' and $ignore == 'no') - { - $continueLink = inlink('deactivate', "extension=$extension&ignore=yes"); - $resetLink = inlink('browse'); - $return->removeCommands = sprintf($this->lang->extension->errorFileChanged, $checkReturn->error, $continueLink, $resetLink); - $return->return = 'fail'; - $this->view->return = $return; - die($this->display()); - } $this->extension->updateExtension($extension, array('status' => 'deactivated')); - $return->removeCommands = $this->extension->removePackage($extension); - $this->view->return = $return; + $this->view->removeCommands = $this->extension->removePackage($extension); $this->view->header->title = $this->lang->extension->deactivateFinished; $this->display(); } diff --git a/module/extension/css/common.css b/module/extension/css/common.css index b943032b22..142a3649c9 100644 --- a/module/extension/css/common.css +++ b/module/extension/css/common.css @@ -1,4 +1,4 @@ .active a {color:blue; font-weight:bold;} -.button-c {padding:2px 4px; border:1px solid gray; background:#efefef; color:black; text-decoration:none} +.button-c {padding:1px 3px; border:1px solid gray; background:#e4e4ef; color:black; text-decoration:none} .error {color:red; font-size:14px} .success {color:green; font-size:14px} diff --git a/module/extension/lang/zh-cn.php b/module/extension/lang/zh-cn.php index e8859dbbd6..7d8619cd0c 100644 --- a/module/extension/lang/zh-cn.php +++ b/module/extension/lang/zh-cn.php @@ -35,7 +35,7 @@ $lang->extension->version = '版本'; $lang->extension->author = '作者'; $lang->extension->license = '授权'; $lang->extension->desc = '描述'; -$lang->extension->site = '官方网站'; +$lang->extension->site = '官网'; $lang->extension->addedTime = '添加时间'; $lang->extension->updatedTime = '更新时间'; $lang->extension->downloads = '下载量'; @@ -73,16 +73,14 @@ $lang->extension->viewInstalled = '查看已安装插件'; $lang->extension->viewAvailable = '查看可安装插件'; $lang->extension->viewDeactivated = '查看已禁用插件'; -$lang->extension->errorCheckScore = '该插件下载需要积分。您要下载后进行上传安装

下载  取消

'; -$lang->extension->errorCheckIncompatible = '该插件与禅道版本不兼容,安装后可能无法使用。。

是否继续,强制安装  取消

'; $lang->extension->errorDownloadPathNotFound = '插件下载存储路径%s不存在。
linux下面请执行命令:mkdir -p %s来修正。'; $lang->extension->errorDownloadPathNotWritable = '插件下载存储路径%s不可写。
linux下面请执行命令:sudo chmod 777 %s来修正。'; $lang->extension->errorPackageFileExists = '下载路径已经有一个名为的%s附件。

重新安装,请点击此链接

'; $lang->extension->errorDownloadFailed = '下载失败,请重新下载。如果多次重试还不行,请尝试手工下载,然后通过上传功能上传。'; $lang->extension->errorMd5Checking = '下载文件不完整,请重新下载。如果多次重试还不行,请尝试手工下载,然后通过上传功能上传。'; $lang->extension->errorExtracted = '包文件 %s 解压缩失败,可能不是一个有效的zip文件。错误信息如下:
%s'; -$lang->extension->errorFileConflicted = '有以下安装文件冲突:
%s

是否继续安装,覆盖安装  取消

'; -$lang->extension->errorFileChanged = '有以下安装文件做过改动:
%s

是否继续,确定继续  取消

'; +$lang->extension->errorCheckIncompatible = '该插件与禅道版本不兼容,安装后可能无法使用。。

您可以选择 强制安装 或者 取消安装

'; +$lang->extension->errorFileConflicted = '有以下安装文件冲突:
%s

您可以选择 覆盖安装 或者 取消安装

'; $lang->extension->errorPackageNotFound = '包文件 %s 没有找到,可能是因为自动下载失败。您可以尝试再次下载。'; $lang->extension->errorTargetPathNotWritable = '目标路径 %s 不可写。'; $lang->extension->errorTargetPathNotExists = '目标路径 %s 不存在。'; diff --git a/module/extension/model.php b/module/extension/model.php index 810fcdc1bb..ebae7558e1 100644 --- a/module/extension/model.php +++ b/module/extension/model.php @@ -448,6 +448,11 @@ class extensionModel extends model if($path == 'db' or $path == 'doc' or $path == '..' or $path == '.') continue; $copiedFiles = $this->copyDir($extensionDir . $path, $appRoot . $path); } + foreach($copiedFiles as $key => $copiedFile) + { + $copiedFiles[$copiedFile] = md5_file($copiedFile); + unset($copiedFiles[$key]); + } return $copiedFiles; } @@ -476,12 +481,16 @@ class extensionModel extends model if($files) { - foreach($files as $file) + foreach($files as $file => $savedMd5) { $file = $appRoot . $file; if(!file_exists($file)) continue; - if(!@unlink($file)) + if(md5_file($file) != $savedMd5) + { + $removeCommands[] = PHP_OS == 'Linux' ? "rm -fr $file #changed" : "del $file :changed"; + } + elseif(!@unlink($file)) { $removeCommands[] = PHP_OS == 'Linux' ? "rm -fr $file" : "del $file"; } @@ -611,9 +620,11 @@ class extensionModel extends model if(isset($data->files)) { - foreach($data->files as $key => $file) + foreach($data->files as $fullFilePath => $md5) { - $data->files[$key] = str_replace($appRoot, '', $file); + $relativeFilePath = str_replace($appRoot, '', $fullFilePath); + $data->files[$relativeFilePath] = $md5; + unset($data->files[$fullFilePath]); } $data->files = json_encode($data->files); } diff --git a/module/extension/view/activate.html.php b/module/extension/view/activate.html.php index c86f4a0655..d93fac17f9 100644 --- a/module/extension/view/activate.html.php +++ b/module/extension/view/activate.html.php @@ -16,9 +16,9 @@ return == 'fail') + if(isset($error) and $error) { - echo $return->error; + echo $error; } else { diff --git a/module/extension/view/browse.html.php b/module/extension/view/browse.html.php index f2c0d5789c..febd4d0309 100644 --- a/module/extension/view/browse.html.php +++ b/module/extension/view/browse.html.php @@ -15,6 +15,7 @@ extension->name;?> + extension->code;?> extension->version;?> extension->desc;?> extension->author;?> @@ -25,6 +26,7 @@ name;?> + code;?> version;?> desc;?> author;?> @@ -38,7 +40,8 @@ if($extension->status == 'installed') echo $deactivateCode . $uninstallCode; if($extension->status == 'deactivated') echo $activateCode . $uninstallCode; - if($extension->status == 'available') echo $installCode . $eraseCode; + if($extension->status == 'available') echo $installCode . $eraseCode; + echo html::a($extension->site, $lang->extension->site, '_blank', 'class=button-c'); ?> diff --git a/module/extension/view/deactivate.html.php b/module/extension/view/deactivate.html.php index 28e1157c84..6301e2907a 100644 --- a/module/extension/view/deactivate.html.php +++ b/module/extension/view/deactivate.html.php @@ -16,20 +16,13 @@ return == 'fail') + echo "

{$header->title}

"; + if($removeCommands) { - echo $return->removeCommands; - } - else - { - echo "

{$header->title}

"; - if($return->removeCommands) - { - echo "

{$lang->extension->unremovedFiles}

"; - echo join($return->removeCommands, '
'); - } - echo "

" . html::commonButton($lang->extension->viewDeactivated, 'onclick=parent.location.href="' . inlink('browse', 'type=deactivated') . '"') . '

'; + echo "

{$lang->extension->unremovedFiles}

"; + echo join($removeCommands, '
'); } + echo "

" . html::commonButton($lang->extension->viewDeactivated, 'onclick=parent.location.href="' . inlink('browse', 'type=deactivated') . '"') . '

'; ?> diff --git a/module/extension/view/install.html.php b/module/extension/view/install.html.php index b9021f98ea..e0fb7620bb 100644 --- a/module/extension/view/install.html.php +++ b/module/extension/view/install.html.php @@ -26,9 +26,9 @@ if($downloadedPackage) echo "

{$lang->extension->successDownloadedPackage}

"; echo "

{$lang->extension->successCopiedFiles}

"; echo ''; echo "

{$lang->extension->successInstallDB}

"; diff --git a/module/extension/view/obtain.html.php b/module/extension/view/obtain.html.php index 79781fbf63..c0ac94f72c 100644 --- a/module/extension/view/obtain.html.php +++ b/module/extension/view/obtain.html.php @@ -50,7 +50,7 @@ extension->downloads;?> extension->public;?> extension->compatible;?> - actions;?> + actions;?> @@ -67,21 +67,21 @@ extension->compatibleList[$extension->compatible];?> code&downLink=" . helper::safe64Encode($extension->downLink) . "&md5=$extension->md5"); - $forceInstall = inlink('install', "extension=$extension->code&downLink=" . helper::safe64Encode($extension->downLink) . "&md5=$extension->md5&overridePackage=no&ignoreCompitable=yes"); + $installLink = inlink('install', "extension=$extension->code&downLink=" . helper::safe64Encode($extension->downLink) . "&md5=$extension->md5&overridePackage=no&ignoreCompitable=yes"); if($extension->public) { - if($extension->compatible) echo html::a($autoInstall, $lang->extension->installAuto, '', 'class="iframe"'); - if(!$extension->compatible) echo html::a($forceInstall, $lang->extension->installForce, '', 'class="iframe"'); + $label = $extension->compatible ? $lang->extension->installAuto : $lang->extension->installForce; + echo html::a($installLink, $label, '', 'class="iframe button-c"'); } - echo html::a($extension->downLink, $lang->extension->downloadAB); + echo html::a($extension->downLink, $lang->extension->downloadAB, '', 'class=button-c'); + echo html::a($extension->site, $lang->extension->site, '_blank', 'class=button-c'); ?> - show();?> + show();?> diff --git a/module/extension/view/uninstall.html.php b/module/extension/view/uninstall.html.php index 22c23bafff..ccef05c3e4 100644 --- a/module/extension/view/uninstall.html.php +++ b/module/extension/view/uninstall.html.php @@ -16,20 +16,13 @@ return == 'fail') + echo "

{$header->title}

"; + if($removeCommands) { - echo $return->removeCommands; - } - else - { - echo "

{$header->title}

"; - if($return->removeCommands) - { - echo "

{$lang->extension->unremovedFiles}

"; - echo join($return->removeCommands, '
'); - } - echo "

" . html::commonButton($lang->extension->viewAvailable, 'onclick=parent.location.href="' . inlink('browse', 'type=available') . '"') . '

'; + echo "

{$lang->extension->unremovedFiles}

"; + echo join($removeCommands, '
'); } + echo "

" . html::commonButton($lang->extension->viewAvailable, 'onclick=parent.location.href="' . inlink('browse', 'type=available') . '"') . '

'; ?>