* adjust the uninstall, activate, deactivate feature.
+ add the site link.
This commit is contained in:
@@ -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,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}
|
||||
|
||||
@@ -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> <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->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> <a href="#" onclick=parent.location.href="%s">取消</a></h3>';
|
||||
$lang->extension->errorFileChanged = '有以下安装文件做过改动:<br />%s<h3>是否继续,<a href="%s">确定继续</a> <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>不存在。';
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>";
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user