* adjust the uninstall, activate, deactivate feature.

+ add the site link.
This commit is contained in:
wangchunsheng
2011-04-28 15:46:00 +00:00
parent a32f0571aa
commit 37dca8ae9c
10 changed files with 105 additions and 130 deletions
+61 -84
View File
@@ -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();
}
+1 -1
View File
@@ -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}
+3 -5
View File
@@ -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 = '该插件下载需要积分。您要下载后进行上传安装<h3><a href="%s">下载</a>&nbsp;&nbsp;<a href="#" onclick=parent.location.href="%s">取消</a></h3>';
$lang->extension->errorCheckIncompatible = '该插件与禅道版本不兼容,安装后可能无法使用。。<h3>是否继续,<a href="%s">强制安装</a>&nbsp;&nbsp;<a href="#" onclick=parent.location.href="%s">取消</a></h3>';
$lang->extension->errorDownloadPathNotFound = '插件下载存储路径<strong>%s</strong>不存在。<br />linux下面请执行命令:<strong>mkdir -p %s</strong>来修正。';
$lang->extension->errorDownloadPathNotWritable = '插件下载存储路径<strong>%s</strong>不可写。<br />linux下面请执行命令:<strong>sudo chmod 777 %s</strong>来修正。';
$lang->extension->errorPackageFileExists = '下载路径已经有一个名为的<strong>%s</strong>附件。<h3>重新安装,<a href="%s">请点击此链接</a></h3>';
$lang->extension->errorDownloadFailed = '下载失败,请重新下载。如果多次重试还不行,请尝试手工下载,然后通过上传功能上传。';
$lang->extension->errorMd5Checking = '下载文件不完整,请重新下载。如果多次重试还不行,请尝试手工下载,然后通过上传功能上传。';
$lang->extension->errorExtracted = '包文件<strong> %s </strong>解压缩失败,可能不是一个有效的zip文件。错误信息如下:<br />%s';
$lang->extension->errorFileConflicted = '有以下安装文件冲突:<br />%s <h3>是否继续安装,<a href="%s">覆盖安装</a>&nbsp;&nbsp;<a href="#" onclick=parent.location.href="%s">取消</a></h3>';
$lang->extension->errorFileChanged = '有以下安装文件做过改动:<br />%s<h3>是否继续,<a href="%s">确定继续</a>&nbsp;&nbsp;<a href="#" onclick=parent.location.href="%s">取消</a></h3>';
$lang->extension->errorCheckIncompatible = '该插件与禅道版本不兼容,安装后可能无法使用。。<h3>您可以选择 <a href="%s">强制安装</a> 或者 <a href="#" onclick=parent.location.href="%s">取消安装</a></h3>';
$lang->extension->errorFileConflicted = '有以下安装文件冲突:<br />%s <h3>您可以选择 <a href="%s">覆盖安装</a> 或者 <a href="#" onclick=parent.location.href="%s">取消安装</a></h3>';
$lang->extension->errorPackageNotFound = '包文件 <strong>%s </strong>没有找到,可能是因为自动下载失败。您可以尝试再次下载。';
$lang->extension->errorTargetPathNotWritable = '目标路径 <strong>%s </strong>不可写。';
$lang->extension->errorTargetPathNotExists = '目标路径 <strong>%s </strong>不存在。';
+15 -4
View File
@@ -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);
}
+2 -2
View File
@@ -16,9 +16,9 @@
<tr>
<td valign='middle'>
<?php
if(isset($return) and $return->return == 'fail')
if(isset($error) and $error)
{
echo $return->error;
echo $error;
}
else
{
+4 -1
View File
@@ -15,6 +15,7 @@
<thead>
<tr class='colhead'>
<th class='w-150px'><?php echo $lang->extension->name;?></th>
<th class='w-50px'><?php echo $lang->extension->code;?></th>
<th class='w-50px'><?php echo $lang->extension->version;?></th>
<th><?php echo $lang->extension->desc;?></th>
<th class='w-100px'><?php echo $lang->extension->author;?></th>
@@ -25,6 +26,7 @@
<?php foreach($extensions as $extension):?>
<tr >
<td><?php echo $extension->name;?></td>
<td><?php echo $extension->code;?></td>
<td class='a-center'><?php echo $extension->version;?></td>
<td><?php echo $extension->desc;?></td>
<td><?php echo $extension->author;?></td>
@@ -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');
?>
</td>
</tr>
+5 -12
View File
@@ -16,20 +16,13 @@
<tr>
<td valign='middle'>
<?php
if($return->return == 'fail')
echo "<h3 class='a-center success'>{$header->title}</h3>";
if($removeCommands)
{
echo $return->removeCommands;
}
else
{
echo "<h3 class='a-center success'>{$header->title}</h3>";
if($return->removeCommands)
{
echo "<p class='strong'>{$lang->extension->unremovedFiles}</p>";
echo join($return->removeCommands, '<br />');
}
echo "<p class='a-center'>" . html::commonButton($lang->extension->viewDeactivated, 'onclick=parent.location.href="' . inlink('browse', 'type=deactivated') . '"') . '</p>';
echo "<p class='strong'>{$lang->extension->unremovedFiles}</p>";
echo join($removeCommands, '<br />');
}
echo "<p class='a-center'>" . html::commonButton($lang->extension->viewDeactivated, 'onclick=parent.location.href="' . inlink('browse', 'type=deactivated') . '"') . '</p>';
?>
</td>
</tr>
+2 -2
View File
@@ -26,9 +26,9 @@
if($downloadedPackage) echo "<h3 class='success'>{$lang->extension->successDownloadedPackage}</h3>";
echo "<h3 class='success'>{$lang->extension->successCopiedFiles}</h3>";
echo '<ul>';
foreach($files as $file)
foreach($files as $fileName => $md5)
{
echo "<li>$file</li>";
echo "<li>$fileName</li>";
}
echo '</ul>';
echo "<h3 class='success'>{$lang->extension->successInstallDB}</h3>";
+7 -7
View File
@@ -50,7 +50,7 @@
<th class='w-id'><?php echo $lang->extension->downloads;?></th>
<th><?php echo $lang->extension->public;?></th>
<th><?php echo $lang->extension->compatible;?></th>
<th class='w-100px'><?php echo $lang->actions;?></th>
<th class='w-150px'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
@@ -67,21 +67,21 @@
<td><?php echo $lang->extension->compatibleList[$extension->compatible];?></td>
<td class='a-right'>
<?php
$autoInstall = inlink('install', "extension=$extension->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');
?>
</td>
</tr>
<?php endforeach;?>
</tbody>
<tfoot>
<tr><td class='a-right' colspan='7'><?php if($pager) $pager->show();?></td></tr>
<tr><td class='a-right' colspan='10'><?php if($pager) $pager->show();?></td></tr>
</tfoot>
</table>
</td>
+5 -12
View File
@@ -16,20 +16,13 @@
<tr>
<td valign='middle'>
<?php
if($return->return == 'fail')
echo "<h3 class='a-center success'>{$header->title}</h3>";
if($removeCommands)
{
echo $return->removeCommands;
}
else
{
echo "<h3 class='a-center success'>{$header->title}</h3>";
if($return->removeCommands)
{
echo "<p class='strong'>{$lang->extension->unremovedFiles}</p>";
echo join($return->removeCommands, '<br />');
}
echo "<p class='a-center'>" . html::commonButton($lang->extension->viewAvailable, 'onclick=parent.location.href="' . inlink('browse', 'type=available') . '"') . '</p>';
echo "<p class='strong'>{$lang->extension->unremovedFiles}</p>";
echo join($removeCommands, '<br />');
}
echo "<p class='a-center'>" . html::commonButton($lang->extension->viewAvailable, 'onclick=parent.location.href="' . inlink('browse', 'type=available') . '"') . '</p>';
?>
</td>
</tr>