Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
@@ -10,7 +10,7 @@ $(function()
|
||||
$btnToolbar.append("<a href=\"javascript:saveDatatableConfig('mode', 'datatable', true);\" class='btn btn-link <?php echo $mode == 'datatable' ? 'btn-active-line' : '';?>'><?php echo $lang->datatable->datatable?></a>");
|
||||
$btnToolbar.append("<a id='tableCustomBtn' class='btn btn-link' href='<?php echo $this->createLink('datatable', 'ajaxCustom', 'id=' . $this->moduleName . '&method=' . $this->methodName)?>' data-toggle='modal' data-type='ajax'><i class='icon icon-cog'></i></a>");
|
||||
<?php if(!empty($setShowModule)):?>
|
||||
$('#sidebar .cell .text-center').append("<a href='javascript:;' data-toggle='showModuleModal' class='text-secondary small'><?php echo $lang->datatable->showModule?></a><hr class='space-sm' />");
|
||||
$('#sidebar .cell .text-center:last').append("<a href='javascript:;' data-toggle='showModuleModal' class='text-secondary small'><?php echo $lang->datatable->showModule?></a><hr class='space-sm' />");
|
||||
<?php endif;?>
|
||||
$('#tableCustomBtn').modalTrigger();
|
||||
$("a[data-toggle='showModuleModal']").click(function(){$('#showModuleModal').modal('show')});
|
||||
|
||||
@@ -2,3 +2,5 @@
|
||||
.alert {width: 100%; display: table;}
|
||||
code{padding-left:0px;}
|
||||
.alert.with-icon .icon-ok-sign, .alert.with-icon .icon-info-sign{padding-top:18px;vertical-align:top;}
|
||||
.detail-actions{margin-top:10px;}
|
||||
.detail-actions .pull-right{margin-top:-10px;}
|
||||
|
||||
@@ -106,8 +106,8 @@ $lang->extension->errorPackageFileExists = '<strong>%s</strong> has existe
|
||||
$lang->extension->errorDownloadFailed = 'Download failed. Please try it again. If still not OK, try to download it manually and upload it to install.';
|
||||
$lang->extension->errorMd5Checking = 'Incomplete File. Please download it again. If still not OK, try to download it manually and upload it to install.';
|
||||
$lang->extension->errorExtracted = 'Unzip <strong> %s </strong> failed. It could be an invailid zip file. Error: <br />%s';
|
||||
$lang->extension->errorCheckIncompatible = 'It is incompatible with this versiosn of ZenTao. %sed it and you might not be able to use it. <h3>Choose <a href="%s">Force %s</a> or <a href="#" onclick=parent.location.href="%s"> Cancel</a></h3>';
|
||||
$lang->extension->errorFileConflicted = '<br />%s <h3> is conflicted with others. Choose <a href="%s">Override</a> or <a href="#" onclick=parent.location.href="%s">Cancel</a></h3>';
|
||||
$lang->extension->errorCheckIncompatible = 'It is incompatible with this versiosn of ZenTao. %sed it and you might not be able to use it. <h5>Choose <a href="%s" class="btn btn-sm">Force %s</a> or <a href="#" onclick=parent.location.href="%s" class="btn btn-sm"> Cancel</a></h5>';
|
||||
$lang->extension->errorFileConflicted = '<br />%s <h5> is conflicted with others. Choose <a href="%s" class="btn btn-sm">Override</a> or <a href="#" onclick=parent.location.href="%s" class="btn btn-sm">Cancel</a></h5>';
|
||||
$lang->extension->errorPackageNotFound = '<strong>%s </strong> is not found. Downloading might be failed. Please download it again.';
|
||||
$lang->extension->errorTargetPathNotWritable = '<strong>%s </strong> is not writable.';
|
||||
$lang->extension->errorTargetPathNotExists = '<strong>%s </strong> is not found.';
|
||||
|
||||
@@ -106,8 +106,8 @@ $lang->extension->errorPackageFileExists = '下载路径已经有一个名
|
||||
$lang->extension->errorDownloadFailed = '下载失败,请重新下载。如果多次重试还不行,请尝试手工下载,然后通过上传功能上传。';
|
||||
$lang->extension->errorMd5Checking = '下载文件不完整,请重新下载。如果多次重试还不行,请尝试手工下载,然后通过上传功能上传。';
|
||||
$lang->extension->errorExtracted = '包文件<strong> %s </strong>解压缩失败,可能不是一个有效的zip文件。错误信息如下:<br />%s';
|
||||
$lang->extension->errorCheckIncompatible = '该插件与禅道版本不兼容,%s后可能无法使用。<h3>您可以选择 <a href="%s">强制%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->errorCheckIncompatible = '该插件与禅道版本不兼容,%s后可能无法使用。<h5>您可以选择 <a href="%s" class="btn btn-sm">强制%s</a> 或者 <a href="#" onclick=parent.location.href="%s" class="btn btn-sm">取消</a></h5>';
|
||||
$lang->extension->errorFileConflicted = '有以下文件冲突:<br />%s <h5>您可以选择 <a href="%s" class="btn btn-sm">覆盖</a> 或者 <a href="#" onclick=parent.location.href="%s" class="btn btn-sm">取消</a></h5>';
|
||||
$lang->extension->errorPackageNotFound = '包文件 <strong>%s </strong>没有找到,可能是因为自动下载失败。您可以尝试再次下载。';
|
||||
$lang->extension->errorTargetPathNotWritable = '目标路径 <strong>%s </strong>不可写。';
|
||||
$lang->extension->errorTargetPathNotExists = '目标路径 <strong>%s </strong>不存在。';
|
||||
|
||||
@@ -11,23 +11,27 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
</h2>
|
||||
</div>
|
||||
<?php if(isset($error) and $error):?>
|
||||
<div class='text-center'>
|
||||
<div class='text-danger'><?php $error;?></div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='text-center with-padding'>
|
||||
<div class='content'>
|
||||
<h3 class='text-success'><?php echo $title;?></h3>
|
||||
<hr>
|
||||
<p class='text-center'><?php echo html::commonButton($lang->extension->viewInstalled, 'onclick=parent.location.href="' . inlink('browse', 'type=installed') . '"');?></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(isset($error) and $error):?>
|
||||
<div class='text-center'>
|
||||
<div class='text-danger'><?php $error;?></div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='text-center with-padding'>
|
||||
<div class='content'>
|
||||
<h3 class='text-success'><?php echo $title;?></h3>
|
||||
<hr>
|
||||
<p class='text-center'><?php echo html::commonButton($lang->extension->viewInstalled, 'onclick=parent.location.href="' . inlink('browse', 'type=installed') . '"');?></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -11,53 +11,57 @@
|
||||
*/
|
||||
?>
|
||||
<?php include 'header.html.php';?>
|
||||
<div class='cards pd-0'>
|
||||
<?php foreach($extensions as $extension):?>
|
||||
<div class='col-xs-12'><div class='card'>
|
||||
<div class='card-heading'><strong><?php echo $extension->name;?></strong></div>
|
||||
<div class='card-content text-muted'><?php echo $extension->desc;?></div>
|
||||
<div class='card-actions'>
|
||||
<div class='pull-right'>
|
||||
<div class='btn-group'>
|
||||
<?php
|
||||
$structureCode = html::a(inlink('structure', "extension=$extension->code"), $lang->extension->structure, '', "class='btn iframe'");
|
||||
$deactivateCode = html::a(inlink('deactivate', "extension=$extension->code"), $lang->extension->deactivate, '', "class='btn iframe'");
|
||||
$activateCode = html::a(inlink('activate', "extension=$extension->code"), $lang->extension->activate, '', "class='btn iframe'");
|
||||
$uninstallCode = html::a(inlink('uninstall', "extension=$extension->code"), $lang->extension->uninstall, '', "class='btn iframe'");
|
||||
$installCode = html::a(inlink('install', "extension=$extension->code"), $lang->extension->install, '', "class='btn iframe'");
|
||||
$eraseCode = html::a(inlink('erase', "extension=$extension->code"), $lang->extension->erase, '', "class='btn iframe'");
|
||||
|
||||
if(isset($extension->viewLink))
|
||||
{
|
||||
echo html::a($extension->viewLink, $lang->extension->view, '', "class='btn extension'");
|
||||
}
|
||||
if($extension->status == 'installed')
|
||||
{
|
||||
echo $structureCode;
|
||||
}
|
||||
if($extension->status == 'installed' and !empty($extension->upgradeLink))
|
||||
{
|
||||
echo html::a($extension->upgradeLink, $lang->extension->upgrade, '', "class='btn iframe'");
|
||||
}
|
||||
|
||||
if($extension->type != 'patch')
|
||||
{
|
||||
if($extension->status == 'installed') echo $deactivateCode . $uninstallCode;
|
||||
if($extension->status == 'deactivated') echo $activateCode . $uninstallCode;
|
||||
if($extension->status == 'available') echo $installCode . $eraseCode;
|
||||
}
|
||||
echo html::a($extension->site, $lang->extension->site, '_blank', 'class=btn');
|
||||
?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='cards pd-0'>
|
||||
<?php foreach($extensions as $extension):?>
|
||||
<div class='cell'>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><strong><?php echo $extension->name;?></strong></div>
|
||||
<div class='detail-content'><?php echo $extension->desc;?></div>
|
||||
<div class='detail-actions'>
|
||||
<div class='pull-right'>
|
||||
<div class='btn-group'>
|
||||
<?php
|
||||
$structureCode = html::a(inlink('structure', "extension=$extension->code"), $lang->extension->structure, '', "class='btn iframe'");
|
||||
$deactivateCode = html::a(inlink('deactivate', "extension=$extension->code"), $lang->extension->deactivate, '', "class='btn iframe'");
|
||||
$activateCode = html::a(inlink('activate', "extension=$extension->code"), $lang->extension->activate, '', "class='btn iframe'");
|
||||
$uninstallCode = html::a(inlink('uninstall', "extension=$extension->code"), $lang->extension->uninstall, '', "class='btn iframe'");
|
||||
$installCode = html::a(inlink('install', "extension=$extension->code"), $lang->extension->install, '', "class='btn iframe'");
|
||||
$eraseCode = html::a(inlink('erase', "extension=$extension->code"), $lang->extension->erase, '', "class='btn iframe'");
|
||||
|
||||
if(isset($extension->viewLink))
|
||||
{
|
||||
echo html::a($extension->viewLink, $lang->extension->view, '', "class='btn extension'");
|
||||
}
|
||||
if($extension->status == 'installed')
|
||||
{
|
||||
echo $structureCode;
|
||||
}
|
||||
if($extension->status == 'installed' and !empty($extension->upgradeLink))
|
||||
{
|
||||
echo html::a($extension->upgradeLink, $lang->extension->upgrade, '', "class='btn iframe'");
|
||||
}
|
||||
|
||||
if($extension->type != 'patch')
|
||||
{
|
||||
if($extension->status == 'installed') echo $deactivateCode . $uninstallCode;
|
||||
if($extension->status == 'deactivated') echo $activateCode . $uninstallCode;
|
||||
if($extension->status == 'available') echo $installCode . $eraseCode;
|
||||
}
|
||||
echo html::a($extension->site, $lang->extension->site, '_blank', 'class=btn');
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
echo "{$lang->extension->version}: <i>{$extension->version}</i> ";
|
||||
echo "{$lang->extension->author}: <i>{$extension->author}</i> ";
|
||||
$expireDate = $this->extension->getExpireDate($extension);
|
||||
if(!empty($expireDate)) echo "{$lang->extension->expireDate}: <i>{$expireDate}</i>";
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
echo "{$lang->extension->version}: <i>{$extension->version}</i> ";
|
||||
echo "{$lang->extension->author}: <i>{$extension->author}</i> ";
|
||||
$expireDate = $this->extension->getExpireDate($extension);
|
||||
if(!empty($expireDate)) echo "{$lang->extension->expireDate}: <i>{$expireDate}</i>";
|
||||
?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div></div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -11,22 +11,24 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
</h2>
|
||||
</div>
|
||||
<?php if(isset($error) and $error):?>
|
||||
<div class='alert alert-success with-icon'>
|
||||
<i class='icon-ok-sign'></i>
|
||||
<div class='content'>
|
||||
<h3><?php echo $lang->extension->needSorce;?></h3>
|
||||
<p><?php echo $error;?></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(isset($error) and $error):?>
|
||||
<div class='alert alert-success with-icon'>
|
||||
<i class='icon-ok-sign'></i>
|
||||
<div class='content'>
|
||||
<h3><?php echo $lang->extension->needSorce;?></h3>
|
||||
<p><?php echo $error;?></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -11,21 +11,25 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class='with-padding'>
|
||||
<h3 class='mgb-20 text-center'><?php echo $title;?></h3>
|
||||
<?php if($removeCommands):?>
|
||||
<div class='container mw-500px'>
|
||||
<p><strong><?php echo $lang->extension->unremovedFiles;?></strong></p>
|
||||
<code><?php echo join($removeCommands, '<br />');?></code>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
</h2>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<hr>
|
||||
<p><?php echo html::commonButton($lang->extension->viewDeactivated, 'onclick=parent.location.href="' . inlink('browse', 'type=deactivated') . '"');?></p>
|
||||
<div class='with-padding'>
|
||||
<h3 class='mgb-20 text-center'><?php echo $title;?></h3>
|
||||
<?php if($removeCommands):?>
|
||||
<div class='container mw-500px'>
|
||||
<p><strong><?php echo $lang->extension->unremovedFiles;?></strong></p>
|
||||
<code><?php echo join($removeCommands, '<br />');?></code>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<hr>
|
||||
<p><?php echo html::commonButton($lang->extension->viewDeactivated, 'onclick=parent.location.href="' . inlink('browse', 'type=deactivated') . '"');?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -11,22 +11,26 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
<small class='text-danger'><?php echo $lang->extension->erase;?> <?php echo html::icon('trash');?></small>
|
||||
</div>
|
||||
</div>
|
||||
<div class='alert alert-success with-icon'>
|
||||
<i class='icon-ok-sign'></i>
|
||||
<div class='content'>
|
||||
<h3><?php echo $title;?></h3>
|
||||
<?php if($removeCommands):?>
|
||||
<p><strong><?php echo $lang->extension->unremovedFiles;?></strong></p>
|
||||
<p><?php echo join($removeCommands, '<br />');?></p>
|
||||
<?php endif;?>
|
||||
<p class='text-center'><?php echo html::commonButton($lang->extension->viewAvailable, 'onclick=parent.location.href="' . inlink('browse', 'type=available') . '"');?></p>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
<small class='text-danger'><?php echo $lang->extension->erase;?> <?php echo html::icon('trash');?></small>
|
||||
</h2>
|
||||
</div>
|
||||
<div class='alert alert-success with-icon'>
|
||||
<i class='icon-ok-sign'></i>
|
||||
<div class='content'>
|
||||
<h3><?php echo $title;?></h3>
|
||||
<?php if($removeCommands):?>
|
||||
<p><strong><?php echo $lang->extension->unremovedFiles;?></strong></p>
|
||||
<p><?php echo join($removeCommands, '<br />');?></p>
|
||||
<?php endif;?>
|
||||
<p class='text-center'><?php echo html::commonButton($lang->extension->viewAvailable, 'onclick=parent.location.href="' . inlink('browse', 'type=available') . '"');?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
@@ -11,55 +11,59 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span class='prefix'><?php echo html::icon('cog');?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
<small>
|
||||
<?php
|
||||
if(isset($license) and $upgrade == 'yes') printf($lang->extension->upgradeVersion, $this->post->installedVersion, $this->post->upgradeVersion);
|
||||
?>
|
||||
</small>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='prefix'><?php echo html::icon('cog');?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
<small>
|
||||
<?php
|
||||
if(isset($license) and $upgrade == 'yes') printf($lang->extension->upgradeVersion, $this->post->installedVersion, $this->post->upgradeVersion);
|
||||
?>
|
||||
</small>
|
||||
</h2>
|
||||
</div>
|
||||
<?php if($error):?>
|
||||
<div class='text-left'>
|
||||
<div class='container mw-500px'>
|
||||
<h5 class='text-danger'><?php printf($lang->extension->installFailed, $installType);?></h5>
|
||||
<p class='text-danger'><?php echo $error;?></p>
|
||||
</div>
|
||||
<hr>
|
||||
<?php echo html::commonButton($lang->extension->refreshPage, 'onclick=location.href=location.href');?>
|
||||
</div>
|
||||
<?php elseif(isset($license)):?>
|
||||
<div class='text-left'>
|
||||
<div class='content text-center'>
|
||||
<h5><?php echo $lang->extension->license;?></h5>
|
||||
<p><?php echo html::textarea('license', $license, "class='form-control' rows='15'");?></p>
|
||||
<?php echo html::a($agreeLink, $lang->extension->agreeLicense, '', "class='btn btn-primary'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='text-left'>
|
||||
<h5 class='text-center mgb-20'><?php echo sprintf($lang->extension->installFinished, $installType);?></h5>
|
||||
<div class='text-center'>
|
||||
<?php echo html::commonButton($lang->extension->viewInstalled, 'onclick=parent.location.href="' . inlink('browse') . '" class="btn btn-success"');?>
|
||||
</div>
|
||||
<hr>
|
||||
<div class='alert'>
|
||||
<?php
|
||||
echo "<h5 class='success'>{$lang->extension->successDownloadedPackage}</h5>";
|
||||
echo "<h5 class='success'>{$lang->extension->successCopiedFiles}</h5>";
|
||||
echo '<ul>';
|
||||
foreach($files as $fileName => $md5)
|
||||
{
|
||||
echo "<li>$fileName</li>";
|
||||
}
|
||||
echo '</ul>';
|
||||
echo "<h5 class='success'>{$lang->extension->successInstallDB}</h5>";
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($error):?>
|
||||
<div class='panel panel-body text-left'>
|
||||
<div class='container mw-500px'>
|
||||
<h5 class='text-danger'><?php sprintf($lang->extension->installFailed, $installType);?></h5>
|
||||
<p class='text-danger'><?php echo $error;?></p>
|
||||
</div>
|
||||
<hr>
|
||||
<?php echo html::commonButton($lang->extension->refreshPage, 'onclick=location.href=location.href');?>
|
||||
</div>
|
||||
<?php elseif(isset($license)):?>
|
||||
<div class='panel panel-body '>
|
||||
<div class='content text-center'>
|
||||
<h5><?php echo $lang->extension->license;?></h5>
|
||||
<p><?php echo html::textarea('license', $license, "class='form-control' rows='15'");?></p>
|
||||
<?php echo html::a($agreeLink, $lang->extension->agreeLicense, '', "class='btn btn-primary'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='panel panel-body'>
|
||||
<h5 class='text-center mgb-20'><?php echo sprintf($lang->extension->installFinished, $installType);?></h5>
|
||||
<div class='text-center'>
|
||||
<?php echo html::commonButton($lang->extension->viewInstalled, 'onclick=parent.location.href="' . inlink('browse') . '" class="btn btn-success"');?>
|
||||
</div>
|
||||
<hr>
|
||||
<div class='alert'>
|
||||
<?php
|
||||
echo "<h5 class='success'>{$lang->extension->successDownloadedPackage}</h5>";
|
||||
echo "<h5 class='success'>{$lang->extension->successCopiedFiles}</h5>";
|
||||
echo '<ul>';
|
||||
foreach($files as $fileName => $md5)
|
||||
{
|
||||
echo "<li>$fileName</li>";
|
||||
}
|
||||
echo '</ul>';
|
||||
echo "<h5 class='success'>{$lang->extension->successInstallDB}</h5>";
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -11,136 +11,140 @@
|
||||
*/
|
||||
?>
|
||||
<?php include 'header.html.php';?>
|
||||
<div class='side'>
|
||||
<form class='side-search mgb-20' method='post' action='<?php echo inlink('obtain', 'type=bySearch');?>'>
|
||||
<div class="input-group">
|
||||
<?php echo html::input('key', $this->post->key, "class='form-control' placeholder='{$lang->extension->bySearch}' autocomplete='off'");?>
|
||||
<span class="input-group-btn">
|
||||
<?php echo html::submitButton('<i class="icon-search"></i>', '', 'btn'); ?>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
<div class='list-group'>
|
||||
<?php
|
||||
echo html::a(inlink('obtain', 'type=byUpdatedTime'), $lang->extension->byUpdatedTime, '', "class='list-group-item' id='byupdatedtime'");
|
||||
echo html::a(inlink('obtain', 'type=byAddedTime'), $lang->extension->byAddedTime, '', "class='list-group-item' id='byaddedtime'");
|
||||
echo html::a(inlink('obtain', 'type=byDownloads'), $lang->extension->byDownloads, '', "class='list-group-item' id='bydownloads'");
|
||||
?>
|
||||
</div>
|
||||
<div class='panel panel-sm'>
|
||||
<div class='panel-heading'><?php echo $lang->extension->byCategory;?></div>
|
||||
<div class='panel-body'>
|
||||
<?php $moduleTree ? print($moduleTree) : print($lang->extension->errorGetModules);?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='main'>
|
||||
<?php if($extensions):?>
|
||||
<div class='cards pd-0 mg-0'>
|
||||
<?php foreach($extensions as $extension):?>
|
||||
<?php
|
||||
$currentRelease = $extension->currentRelease;
|
||||
$latestRelease = isset($extension->latestRelease) ? $extension->latestRelease : '';
|
||||
?>
|
||||
<div class='card'>
|
||||
<div class='card-heading'>
|
||||
<small class='pull-right text-important'>
|
||||
<?php
|
||||
if($latestRelease and $latestRelease->releaseVersion != $currentRelease->releaseVersion)
|
||||
{
|
||||
printf($lang->extension->latest, $latestRelease->viewLink, $latestRelease->releaseVersion, $latestRelease->zentaoCompatible);
|
||||
}?>
|
||||
</small>
|
||||
<h5 class='mg-0'>
|
||||
<?php echo $extension->name . "($currentRelease->releaseVersion)";?>
|
||||
<small class='label <?php echo $extension->offcial ? 'label-info' : 'label-warning';?>'><?php echo $lang->extension->obtainOfficial[$extension->offcial];?></small>
|
||||
</h5>
|
||||
</div>
|
||||
<div class='card-content text-muted'>
|
||||
<?php echo $extension->abstract;?>
|
||||
</div>
|
||||
<div class='card-actions'>
|
||||
<div style='margin-bottom: 10px'>
|
||||
<?php
|
||||
echo "{$lang->extension->author}: {$extension->author} ";
|
||||
echo "{$lang->extension->downloads}: {$extension->downloads} ";
|
||||
echo "{$lang->extension->compatible}: {$lang->extension->compatibleList[$currentRelease->compatible]} ";
|
||||
|
||||
echo " {$lang->extension->depends}: ";
|
||||
if(!empty($currentRelease->depends))
|
||||
{
|
||||
foreach(json_decode($currentRelease->depends, true) as $code => $limit)
|
||||
{
|
||||
echo $code;
|
||||
if($limit != 'all')
|
||||
{
|
||||
echo '(';
|
||||
if(!empty($limit['min'])) echo '>= v' . $limit['min'];
|
||||
if(!empty($limit['max'])) echo '<= v' . $limit['min'];
|
||||
echo ')';
|
||||
}
|
||||
echo ' ';
|
||||
}
|
||||
}
|
||||
?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col' id='sidebar'>
|
||||
<div class='cell'>
|
||||
<form class='side-search mgb-20' method='post' action='<?php echo inlink('obtain', 'type=bySearch');?>'>
|
||||
<div class="input-group">
|
||||
<?php echo html::input('key', $this->post->key, "class='form-control' placeholder='{$lang->extension->bySearch}' autocomplete='off'");?>
|
||||
<span class="input-group-btn">
|
||||
<?php echo html::submitButton('<i class="icon-search"></i>', '', 'btn'); ?>
|
||||
</span>
|
||||
</div>
|
||||
<?php
|
||||
echo "{$lang->extension->grade}: ", html::printStars($extension->stars);
|
||||
?>
|
||||
<div class='pull-right' style='margin-top: -15px'>
|
||||
<div class='btn-group'>
|
||||
</form>
|
||||
<div class='list-group'>
|
||||
<?php
|
||||
$installLink = inlink('install', "extension=$extension->code&downLink=" . helper::safe64Encode($currentRelease->downLink) . "&md5={$currentRelease->md5}&type=$extension->type&overridePackage=no&ignoreCompitable=yes");
|
||||
echo html::a($extension->viewLink, $lang->extension->view, '', 'class="btn extension"');
|
||||
if($currentRelease->public)
|
||||
{
|
||||
if($extension->type != 'computer' and $extension->type != 'mobile')
|
||||
echo html::a(inlink('obtain', 'type=byUpdatedTime'), $lang->extension->byUpdatedTime, '', "class='list-group-item' id='byupdatedtime'");
|
||||
echo html::a(inlink('obtain', 'type=byAddedTime'), $lang->extension->byAddedTime, '', "class='list-group-item' id='byaddedtime'");
|
||||
echo html::a(inlink('obtain', 'type=byDownloads'), $lang->extension->byDownloads, '', "class='list-group-item' id='bydownloads'");
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='panel panel-sm'>
|
||||
<div class='panel-heading'><?php echo $lang->extension->byCategory;?></div>
|
||||
<div class='panel-body'>
|
||||
<?php $moduleTree ? print($moduleTree) : print($lang->extension->errorGetModules);?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='main-col main-content'>
|
||||
<div class='cell'>
|
||||
<?php if($extensions):?>
|
||||
<div class='cards pd-0 mg-0'>
|
||||
<?php foreach($extensions as $extension):?>
|
||||
<?php
|
||||
$currentRelease = $extension->currentRelease;
|
||||
$latestRelease = isset($extension->latestRelease) ? $extension->latestRelease : '';
|
||||
?>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'>
|
||||
<small class='pull-right text-important'>
|
||||
<?php
|
||||
if($latestRelease and $latestRelease->releaseVersion != $currentRelease->releaseVersion)
|
||||
{
|
||||
if(isset($installeds[$extension->code]))
|
||||
printf($lang->extension->latest, $latestRelease->viewLink, $latestRelease->releaseVersion, $latestRelease->zentaoCompatible);
|
||||
}?>
|
||||
</small>
|
||||
<h5 class='mg-0'>
|
||||
<?php echo $extension->name . "($currentRelease->releaseVersion)";?>
|
||||
<small class='label <?php echo $extension->offcial ? 'label-info' : 'label-warning';?>'><?php echo $lang->extension->obtainOfficial[$extension->offcial];?></small>
|
||||
</h5>
|
||||
</div>
|
||||
<div class='detail-content'><?php echo $extension->abstract;?></div>
|
||||
<div class='detail-actions'>
|
||||
<div style='margin-bottom: 10px'>
|
||||
<?php
|
||||
echo "{$lang->extension->author}: {$extension->author} ";
|
||||
echo "{$lang->extension->downloads}: {$extension->downloads} ";
|
||||
echo "{$lang->extension->compatible}: {$lang->extension->compatibleList[$currentRelease->compatible]} ";
|
||||
|
||||
echo " {$lang->extension->depends}: ";
|
||||
if(!empty($currentRelease->depends))
|
||||
{
|
||||
foreach(json_decode($currentRelease->depends, true) as $code => $limit)
|
||||
{
|
||||
if($installeds[$extension->code]->version != $extension->latestRelease->releaseVersion and $this->extension->checkVersion($extension->latestRelease->zentaoCompatible))
|
||||
echo $code;
|
||||
if($limit != 'all')
|
||||
{
|
||||
$upgradeLink = inlink('upgrade', "extension=$extension->code&downLink=" . helper::safe64Encode($currentRelease->downLink) . "&md5=$currentRelease->md5&type=$extension->type");
|
||||
echo html::a($upgradeLink, $lang->extension->upgrade, '', 'class="iframe btn"');
|
||||
echo '(';
|
||||
if(!empty($limit['min'])) echo '>= v' . $limit['min'];
|
||||
if(!empty($limit['max'])) echo '<= v' . $limit['min'];
|
||||
echo ')';
|
||||
}
|
||||
echo ' ';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
echo "{$lang->extension->grade}: ", html::printStars($extension->stars);
|
||||
?>
|
||||
<div class='pull-right'>
|
||||
<div class='btn-group'>
|
||||
<?php
|
||||
$installLink = inlink('install', "extension=$extension->code&downLink=" . helper::safe64Encode($currentRelease->downLink) . "&md5={$currentRelease->md5}&type=$extension->type&overridePackage=no&ignoreCompitable=yes");
|
||||
echo html::a($extension->viewLink, $lang->extension->view, '', 'class="btn extension"');
|
||||
if($currentRelease->public)
|
||||
{
|
||||
if($extension->type != 'computer' and $extension->type != 'mobile')
|
||||
{
|
||||
if(isset($installeds[$extension->code]))
|
||||
{
|
||||
if($installeds[$extension->code]->version != $extension->latestRelease->releaseVersion and $this->extension->checkVersion($extension->latestRelease->zentaoCompatible))
|
||||
{
|
||||
$upgradeLink = inlink('upgrade', "extension=$extension->code&downLink=" . helper::safe64Encode($currentRelease->downLink) . "&md5=$currentRelease->md5&type=$extension->type");
|
||||
echo html::a($upgradeLink, $lang->extension->upgrade, '', 'class="iframe btn"');
|
||||
}
|
||||
else
|
||||
{
|
||||
echo html::commonButton("<i class='icon-ok'></i> " . $lang->extension->installed, "disabled='disabled'", 'text-success');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo html::commonButton("<i class='icon-ok'></i> " . $lang->extension->installed, "disabled='disabled'", 'text-success');
|
||||
$label = $currentRelease->compatible ? $lang->extension->installAuto : $lang->extension->installForce;
|
||||
echo html::a($installLink, $label, '', 'class="iframe btn"');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$label = $currentRelease->compatible ? $lang->extension->installAuto : $lang->extension->installForce;
|
||||
echo html::a($installLink, $label, '', 'class="iframe btn"');
|
||||
}
|
||||
}
|
||||
}
|
||||
echo html::a($currentRelease->downLink, $lang->extension->downloadAB, '', 'class="manual btn"');
|
||||
echo html::a($extension->site, $lang->extension->site, '_blank', 'class=btn');
|
||||
?>
|
||||
echo html::a($currentRelease->downLink, $lang->extension->downloadAB, '', 'class="manual btn"');
|
||||
echo html::a($extension->site, $lang->extension->site, '_blank', 'class=btn');
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php if($pager):?>
|
||||
<div class='clearfix'>
|
||||
<?php $pager->show()?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else:?>
|
||||
<div class='alert alert-danger'>
|
||||
<i class='icon icon-remove-sign'></i>
|
||||
<div class='content'>
|
||||
<h4><?php echo $lang->extension->errorOccurs;?></h4>
|
||||
<div><?php echo $lang->extension->errorGetExtensions;?></div>
|
||||
<?php if($pager):?>
|
||||
<div class='table-footer clearfix'>
|
||||
<?php $pager->show('right', 'pagerjs')?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else:?>
|
||||
<div class='alert alert-danger'>
|
||||
<i class='icon icon-remove-sign'></i>
|
||||
<div class='content'>
|
||||
<h4><?php echo $lang->extension->errorOccurs;?></h4>
|
||||
<div><?php echo $lang->extension->errorGetExtensions;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<script>
|
||||
$('#<?php echo $type;?>').addClass('active')
|
||||
$('#<?php echo $type;?>').addClass('selected')
|
||||
$('#module<?php echo $moduleID;?>').addClass('active')
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -11,17 +11,21 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $extension->name . '[' . $extension->code . '] ' .$lang->extension->structure . ':';?></strong>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $extension->name . '[' . $extension->code . '] ' .$lang->extension->structure . ':';?></strong>
|
||||
</h2>
|
||||
</div>
|
||||
<div class='with-padding'>
|
||||
<pre><?php
|
||||
$appRoot = $this->app->getAppRoot();
|
||||
$files = json_decode($extension->files);
|
||||
foreach($files as $file => $md5) echo $appRoot . $file . "\n";
|
||||
?></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='main with-padding'>
|
||||
<pre><?php
|
||||
$appRoot = $this->app->getAppRoot();
|
||||
$files = json_decode($extension->files);
|
||||
foreach($files as $file => $md5) echo $appRoot . $file . "\n";
|
||||
?></pre>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
|
||||
@@ -11,50 +11,54 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
<small class='text-danger'><?php echo html::icon('cog');?> <?php echo $lang->extension->uninstall;?></small>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
<small class='text-danger'><?php echo html::icon('cog');?> <?php echo $lang->extension->uninstall;?></small>
|
||||
</h2>
|
||||
</div>
|
||||
<?php if(isset($confirm) and $confirm == 'no'):?>
|
||||
<div class='alert alert-pure with-icon'>
|
||||
<i class='icon-info-sign'></i>
|
||||
<div class='content'>
|
||||
<?php
|
||||
echo "<p class='waring'>{$lang->extension->confirmUninstall}";
|
||||
echo html::a(inlink('uninstall', "extension=$code&confirm=yes"), $lang->extension->uninstall, '', "class='btn'");
|
||||
echo "</p>";
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php elseif(!empty($error)):?>
|
||||
<div class='alert alert-pure with-icon'>
|
||||
<i class='icon-info-sign'></i>
|
||||
<div class='content'>
|
||||
<?php
|
||||
echo "<h3 class='error'>" . $lang->extension->uninstallFailed . "</h3>";
|
||||
echo "<p>$error</p>";
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='alert alert-pure with-icon'>
|
||||
<i class='icon-ok-sign'></i>
|
||||
<div class='content'>
|
||||
<?php
|
||||
echo "<h3>{$title}</h3>";
|
||||
if(!empty($backupFile)) echo "<p>" . sprintf($lang->extension->backDBFile, $backupFile) . '</p>';
|
||||
if($removeCommands)
|
||||
{
|
||||
echo "<p class='strong'>{$lang->extension->unremovedFiles}</p>";
|
||||
echo join($removeCommands, '<br />');
|
||||
}
|
||||
echo "<p class='text-center'>" . html::commonButton($lang->extension->viewAvailable, 'onclick=parent.location.href="' . inlink('browse', 'type=available') . '"') . '</p>';
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(isset($confirm) and $confirm == 'no'):?>
|
||||
<div class='alert alert-pure with-icon'>
|
||||
<i class='icon-info-sign'></i>
|
||||
<div class='content'>
|
||||
<?php
|
||||
echo "<p class='waring'>{$lang->extension->confirmUninstall}";
|
||||
echo html::a(inlink('uninstall', "extension=$code&confirm=yes"), $lang->extension->uninstall, '', "class='btn'");
|
||||
echo "</p>";
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php elseif(!empty($error)):?>
|
||||
<div class='alert alert-pure with-icon'>
|
||||
<i class='icon-info-sign'></i>
|
||||
<div class='content'>
|
||||
<?php
|
||||
echo "<h3 class='error'>" . $lang->extension->uninstallFailed . "</h3>";
|
||||
echo "<p>$error</p>";
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='alert alert-pure with-icon'>
|
||||
<i class='icon-ok-sign'></i>
|
||||
<div class='content'>
|
||||
<?php
|
||||
echo "<h3>{$title}</h3>";
|
||||
if(!empty($backupFile)) echo "<p>" . sprintf($lang->extension->backDBFile, $backupFile) . '</p>';
|
||||
if($removeCommands)
|
||||
{
|
||||
echo "<p class='strong'>{$lang->extension->unremovedFiles}</p>";
|
||||
echo join($removeCommands, '<br />');
|
||||
}
|
||||
echo "<p class='text-center'>" . html::commonButton($lang->extension->viewAvailable, 'onclick=parent.location.href="' . inlink('browse', 'type=available') . '"') . '</p>';
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -11,26 +11,27 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span class='prefix'><?php echo html::icon('upload');?></span>
|
||||
<strong><?php echo $lang->extension->upload;?></strong>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->extension->upload;?></h2>
|
||||
</div>
|
||||
<?php if(!empty($error)):?>
|
||||
<div class='text-left'>
|
||||
<div class='container mw-500px'>
|
||||
<p class='text-danger'><?php echo $error;?></p>
|
||||
</div>
|
||||
<hr class='small'>
|
||||
<?php echo html::commonButton($lang->extension->refreshPage, 'onclick=location.href=location.href');?>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form method='post' target='hiddenwin' enctype='multipart/form-data' style='padding: 20px 20%'>
|
||||
<div class='input-group'>
|
||||
<input type='file' name='file' class='form-control' />
|
||||
<span class='input-group-btn'><?php echo html::submitButton($lang->extension->install);?></span>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(!empty($error)):?>
|
||||
<div class='panel panel-body text-left'>
|
||||
<div class='container mw-500px'>
|
||||
<p class='text-danger'><?php echo $error;?></p>
|
||||
</div>
|
||||
<hr>
|
||||
<?php echo html::commonButton($lang->extension->refreshPage, 'onclick=location.href=location.href');?>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form method='post' target='hiddenwin' enctype='multipart/form-data' style='padding: 5% 20%'>
|
||||
<div class='input-group'>
|
||||
<input type='file' name='file' class='form-control' />
|
||||
<span class='input-group-btn'><?php echo html::submitButton($lang->extension->install);?></span>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
|
||||
@@ -11,21 +11,25 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='prefix' title='EXTENSION'><?php echo html::icon($lang->icons['extension']);?></span>
|
||||
<strong><?php echo $title;?></strong>
|
||||
</h2>
|
||||
</div>
|
||||
<?php if($error):?>
|
||||
<div class='alert alert-danger with-icon'>
|
||||
<i class='icon-info-sign'></i>
|
||||
<div class='content'>
|
||||
<h3><?php echo $lang->extension->waringInstall;?></h3>
|
||||
<p><?php echo $error;?></p>
|
||||
<p class='text-center'><?php echo html::commonButton($lang->extension->refreshPage, 'onclick=location.href=location.href');?></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($error):?>
|
||||
<div class='alert alert-danger with-icon'>
|
||||
<i class='icon-info-sign'></i>
|
||||
<div class='content'>
|
||||
<h3><?php echo $lang->extension->waringInstall;?></h3>
|
||||
<p><?php echo $error;?></p>
|
||||
<p class='text-center'><?php echo html::commonButton($lang->extension->refreshPage, 'onclick=location.href=location.href');?></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -455,7 +455,7 @@ class product extends control
|
||||
$this->view->position[] = $this->lang->product->roadmap;
|
||||
$this->view->product = $product;
|
||||
$this->view->roadmaps = $this->product->getRoadmap($productID, $branch);
|
||||
$this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($productID);
|
||||
$this->view->branches = $product->type == 'normal' ? array(0 => '') : $this->loadModel('branch')->getPairs($productID);
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
.roadmap {width:180px; margin:10px auto 10px auto; padding:15px 10px; font-weight:bold}
|
||||
.roadmap a{color:#ccc;}
|
||||
.roadmap p{margin:2px}
|
||||
.release {background:#006400; color:#ccc}
|
||||
.plan {background:#ffcc00;}
|
||||
.plan a{color:#006400}
|
||||
.branch-nav {margin: -10px 0 25px;}
|
||||
.release-paths {position: relative;}
|
||||
.release-path {margin-left: 160px; position: relative; overflow: visible;}
|
||||
.release-head {position: absolute; left: -150px; bottom: 105px; width: 120px; border: 2px solid #EEEEEE; border-radius: 4px; font-size: 20px; padding: 5px 10px; text-align: center;}
|
||||
.release-head .subtitle {font-size: 12px; color: #7B8599;}
|
||||
.release-line {margin: 0; padding-bottom: 40px;}
|
||||
.release-line > li > a:before {border-color: #00da88;}
|
||||
.release-link-line {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+YAAADiCAMAAAD0xy2eAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABOUExURUdwTOXl5eXl5ebm5ufn5+rq6u7u7unp6eXl5f///+Xl5eXl5efn5+Xl5eXl5eXl5ebm5uXl5eXl5ebm5ubm5ubm5uXl5ebm5uXl5eXl5Uh6G7kAAAAZdFJOUwDuuVQtFQwg1gXH+Dpzoq1CmIV7aEuOX+MTWsN0AAAGrUlEQVQYGe3ACbaYOHRF0SuQkETfw5v/RPNdLpMZZKWez5buVQBcu8zmJACO1WOwcAqAZ7kx66MAeNa+ZncnAI51t1kvAK7F/hEAAAAAAACA/xP93gmAZ6tZOKsAODb2ZuUSAM/aYtZEAXCsTsFs7gTAse4eigD4lqMAAAAAAMD/D09/CYBrvVl/CYBjdXrN+lUAHOumYNavAuBYNwWzTQA866ZwCYBvnQAAAAD8V7RHEgDParHhzgLg2NqYDXMUAMfiPJg1qwA4lu/BbBMAz7rjvQTAtyoAAOBG1wmAb1O4swB4NptZcwmAY3EbzN4pCYBfaSpmwywAnl2NNQLgW44CAABuZAHwLQ1lSgLg2BjMhuUSAL9q25jZu2cB8CsfxcweAfBsnYcsAL51AgAAboxL2wmAZ5vZMF9VANxKZ29mYRsFwK98FDN7swA4Fvc3VAHwLQsAALgxlSMKgGeNmZU9CoBb9dqCmb33KABu1XV7zSwJgGfjPQsAALixHlEAXJvN3u3qBMCtdXvNbGjOLABuxaO3H1EAHEvPUgQAANwYlycLgGe7mZX76gTAq3wuwcyGZsoC4FUd997MLgHwLLVbJwB/j7UTANeyDf2+dgLgVuwHMxv6fa0C4FR37b39WATAse66+0kA/h45CYBvjZX5yQLg1xLsR1imsQqATzVOy2s/kgA4lp+tEYC/R9rOsRMAx1r7UebjygLgU57mMtgvswC4VeNzN++hT0oC4FDVZ7ehLPe55ioAPu3BfhseAXCqi+2xNa9d+rTnFTsB8KLqH7Xq09iPoTTzngXApXNrSrBfRn1i7ATAlS5e5570KWbD2y/b8XQC4NJSgv2W9RljrgLgR5fH9tznqk8ws1D6ZTs6AXCp6d/B/lH1Oc52jakKgBcpj+156FPtt1B6AXCp27elKcHMgj5d6Zdtn55rzALgRcpRn2x/vPrUMaYqAP9hVZ8a1/Y87rnpG32y/Qhv38y7ALiU+xIG+6Xok5r5Ps52jbkTABe6PF5Pq89ofxR9upg7AXAiXc+0b0tT3kaf0cyGtzTLdgqAS2N5B/tHo09ctn162jGmKgAedDmu7Xnp09ofjT5dTFUAnEjtedzz0pd30+cxs/D2zXy3AuBSW4L9tumzzvdxtmvMnQC40OXxes5Vn8n+2PTpkgC4EZ9p35amvMOuz2QWSr/M9zQKgEtTsH/t+qzH2a4xVQFwoaY4Xs+0r/rs9lsopwC4tO7b0pcwmJ367KVftn16rjEJgBddTvrM9sejT46pCoATKY7tedxz06/6zGYWSr9sexQAl+4S7LdLn3Z6rpirAHiR4tieR9ansX+E0o8C4NJzz015BzMb9bmX7TjbMXcC4EaXx06fYv8aogC4NLbnvi19CZb06Usz38dzjVkA/Kj6X8H+SPpUAfAjxfWZ9rnp36pPCKWZ7+m5ogC4VAf7o+rTCYAjKa7PdM9Nr0+1UJr5ntoxC4BLebB/BQFwKsX1me6lb/RJ89HGKgB+jfZLae5zFACX0nk3xX5pBMCvGttjnvRJWQB8myw0e5sFwK0p2C+h2aMAOJXbvQlm1gqAZ/k6sgD8PfpmXzsB8KuzX8rWZgFwKrV3P9iPIgB+1fFoQi8AziV9qgA4d4bljALg2GY/3vnJAuBVfubXfryrAPgVzyVYFgDfogD8Per8JAHwbDWzfh+rAHiVpmYws7CcWQC8qtddzOwWAM/yuawCAABu9HPbCYBj2cyG5swC4FacevtR9lEA3ErPEswWAfCsrncrAADgxraPAuBZN5i921oFwK31fs0szG0nAG7FvZhZLwCe5ak/BAAA3FizAPj2WjmyAPjVzcHMyhEFwK16zcHMyiQAftVrCzYLgGt1jQIAAG7MRxYAz7KZ9VMWALfqNQcz66ckAG7VdhnM7BYAx2q7DKcA+NZ1AgAAXtSyjQLg2WVm7x4FwK94v2ZWpiwAfo1bMLNJAByr1zyMAuBbJwAA4EYsUxYAzw4za55OANyq1zKYDctVBcCt7mnMLIwC4Fg+ytAJgG9ZAADAjWuPAuBaY9afSQD8GrdgNixXFQC3atuYWbirAPiVpmJFAHyLqwAAgBtjEgDX6jssVxUAv9IymIU7CoBfaSpm1p9JAPwat2A2C4BntW1WAQAAAPiPyGVKAuDZYTYslwD4VdvGzN49C4Bf6Shm1kQBcGydhyEJgGvdJQAA4EZOAuDbMiyrAHi2mNl7ZAHwKx2vmTVXFQC/1mUw6wXAszSVQwCcqwIAAG4cSQBcW4ckAK7lU/8D/a9fSZZlwxkAAAAASUVORK5CYII=); height: 218px; position: absolute; left: 10px; right: 100px; top: 97px; background-size: 100% 100%; background-repeat: no-repeat;}
|
||||
|
||||
@@ -5,7 +5,7 @@ $(function()
|
||||
|
||||
if($('#storyList thead th.w-title').width() < 150) $('#storyList thead th.w-title').width(150);
|
||||
|
||||
$(document).on('click', "#storyList tbody tr", function(){showCheckedSummary();});
|
||||
$(document).on('click', "#storyList tbody tr, .table-footer .check-all, #storyList thead .check-all", function(){showCheckedSummary();});
|
||||
$(document).on('change', "#storyList :checkbox", function(){showCheckedSummary();});
|
||||
$(document).on('click', "#datatable-storyList table tr", function(){showCheckedSummary();});
|
||||
})
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
$(function()
|
||||
{
|
||||
// 修复连接曲线位置
|
||||
var fixReleasePathLine = function()
|
||||
{
|
||||
$('.release-paths.active').each(function()
|
||||
{
|
||||
var $lines = $(this).find('.release-line');
|
||||
var linesCount = $lines.length;
|
||||
if (linesCount < 2) return;
|
||||
$lines.each(function(idx)
|
||||
{
|
||||
if (idx >= (linesCount - 1)) return;
|
||||
var $prev = $(this);
|
||||
var $next = $lines.eq(idx + 1);
|
||||
var $line = $prev.next('.release-link-line');
|
||||
if(!$line.length)
|
||||
{
|
||||
$line = $('<div class="release-link-line" />').insertAfter($prev);
|
||||
}
|
||||
$line.css(
|
||||
{
|
||||
top: $prev.position().top + 97,
|
||||
right: $next.find('li:last-child').width() - 4
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
fixReleasePathLine();
|
||||
$(window).on('resize shown.zui.tab', fixReleasePathLine);
|
||||
});
|
||||
@@ -116,7 +116,7 @@ $lang->product->aclList['custom'] = 'Custom (Team members and Whitelist members
|
||||
|
||||
$lang->product->storySummary = " <strong>%s</strong> Story(ies), <strong>%s</strong> hour(s) estimated, case coverage is <strong>%s</strong> on this page.";
|
||||
$lang->product->checkedSummary = " <strong>%total%</strong> Checked, <strong>%estimate%</strong> hour(s) estimated, case coverage is <strong>%rate%</strong>.";
|
||||
$lang->product->noModule = 'You have no modules<br/>Manage now';
|
||||
$lang->product->noModule = '<div>You have no modules</div><div>Manage now</div>';
|
||||
$lang->product->noProduct = 'No product. You could ';
|
||||
$lang->product->noStory = 'No story. You could ';
|
||||
$lang->product->noMatched = '"%s" cannot be found.' . $lang->productCommon;
|
||||
|
||||
@@ -116,7 +116,7 @@ $lang->product->aclList['custom'] = '自定义白名单(团队成员和白名
|
||||
|
||||
$lang->product->storySummary = "本页共 <strong>%s</strong> 个需求,预计 <strong>%s</strong> 个工时,用例覆盖率<strong>%s</strong>。";
|
||||
$lang->product->checkedSummary = "选中 <strong>%total%</strong> 个需求,预计 <strong>%estimate%</strong> 个工时,用例覆盖率<strong>%rate%</strong>。";
|
||||
$lang->product->noModule = '您现在还没有模块信息<br/>请维护产品模块';
|
||||
$lang->product->noModule = '<div>您现在还没有模块信息</div><div>请维护产品模块</div>';
|
||||
$lang->product->noProduct = '暂时没有产品,您现在可以';
|
||||
$lang->product->noStory = '暂时没有需求,您现在可以';
|
||||
$lang->product->noMatched = '找不到包含"%s"的' . $lang->productCommon;
|
||||
|
||||
@@ -590,17 +590,16 @@ class productModel extends model
|
||||
$plans = $this->loadModel('productplan')->getList($productID, $branch);
|
||||
$releases = $this->loadModel('release')->getList($productID, $branch);
|
||||
$roadmap = array();
|
||||
if(is_array($releases)) $releases = array_reverse($releases);
|
||||
if(is_array($plans)) $plans = array_reverse($plans);
|
||||
foreach($releases as $release)
|
||||
{
|
||||
$year = substr($release->date, 0, 4);
|
||||
$roadmap[$year][$release->branch][] = $release;
|
||||
}
|
||||
|
||||
foreach($plans as $plan)
|
||||
{
|
||||
if($plan->end != '0000-00-00' and strtotime($plan->end) - time() <= 0) continue;
|
||||
$year = substr($plan->end, 0, 4);
|
||||
$year = $plan->end == '2030-01-01' ? $this->lang->productplan->future : substr($plan->end, 0, 4);
|
||||
$roadmap[$year][$plan->branch][] = $plan;
|
||||
}
|
||||
|
||||
@@ -609,7 +608,12 @@ class productModel extends model
|
||||
/* Get last 5 roadmap. */
|
||||
$lastKeys = array_slice(array_keys($roadmap), -5);
|
||||
$lastRoadmap = array();
|
||||
foreach($lastKeys as $key) $lastRoadmap[$key] = $roadmap[$key];
|
||||
$lastRoadmap['total'] = 0;
|
||||
foreach($lastKeys as $key)
|
||||
{
|
||||
$lastRoadmap[$key] = $roadmap[$key];
|
||||
$lastRoadmap['total'] += (count($roadmap[$key], 1) - count($roadmap[$key]));
|
||||
}
|
||||
|
||||
return $lastRoadmap;
|
||||
}
|
||||
@@ -894,7 +898,7 @@ class productModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
$cases = $this->dao->select('DISTINCT story')->from(TABLE_CASE)->where('story')->in($storyIdList)->fetchAll();
|
||||
$cases = $this->dao->select('DISTINCT story')->from(TABLE_CASE)->where('story')->in($storyIdList)->andWhere('deleted')->eq(0)->fetchAll();
|
||||
$rate = count($stories) == 0 ? 0 : round(count($cases) / count($stories), 2);
|
||||
|
||||
return sprintf($this->lang->product->storySummary, count($stories), $totalEstimate, $rate * 100 . "%");
|
||||
|
||||
@@ -83,14 +83,23 @@
|
||||
<div id="mainContent" class="main-row">
|
||||
<div class="side-col" id="sidebar">
|
||||
<div class="cell">
|
||||
<?php if(!$moduleTree):?>
|
||||
<hr class="space">
|
||||
<div class="text-center text-muted">
|
||||
<?php echo $lang->product->noModule;?>
|
||||
</div>
|
||||
<hr class="space">
|
||||
<?php endif;?>
|
||||
|
||||
<?php echo $moduleTree;?>
|
||||
<div class="text-center">
|
||||
<?php if(!$moduleTree) echo "<div class='noModule'><strong>{$lang->product->noModule}</strong></div>";?>
|
||||
<?php common::printLink('tree', 'browse', "rootID=$productID&view=story", $lang->tree->manage, '', "class='btn btn-info btn-wide'");?>
|
||||
<hr class="space-sm" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-col">
|
||||
<div class="cell" id="queryBox"></div>
|
||||
<form class="main-table table-story" data-ride="table" method="post" id='productStoryForm'>
|
||||
@@ -305,8 +314,8 @@
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php elseif(common::hasPriv('story', 'create')):?>
|
||||
<div class='noStory'>
|
||||
<span class='text-muted'><?php echo $lang->product->noStory;?></span> <strong><?php echo html::a($this->createLink('story', 'create', "productID={$productID}&branch={$branch}&moduleID={$moduleID}"), $lang->story->create);?></strong>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->product->noStory;?></span> <?php echo html::a($this->createLink('story', 'create', "productID={$productID}&branch={$branch}&moduleID={$moduleID}"), "<i class='icon icon-plus'></i> " . $lang->story->create, '', "class='btn btn-info'");?></strong></p>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
|
||||
@@ -11,48 +11,59 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div>
|
||||
<div id='titlebar'><div class='heading'><i class='icon-code-fork'></i> <?php echo $lang->product->roadmap;?></div></div>
|
||||
<div id='roadmapBox' style='overflow-x:auto'>
|
||||
<table class='table table-grid active-disabled'>
|
||||
<?php
|
||||
$years = array_keys($roadmaps);
|
||||
echo '<tr class="text-center">';
|
||||
foreach($years as $year)
|
||||
{
|
||||
$colspans = count($roadmaps[$year]);
|
||||
$year = $year == '0000' ? $lang->future : $year . $lang->year;
|
||||
echo "<th" . (empty($branches) ? '' : " colspan='$colspans'") . " style='border-right:1px solid #ddd'><h4>$year</h4></th>";
|
||||
}
|
||||
echo '</tr>';
|
||||
echo '<tr class="text-center text-top">';
|
||||
foreach($years as $year)
|
||||
{
|
||||
foreach($roadmaps[$year] as $branch => $roadmapData)
|
||||
{
|
||||
echo "<td>";
|
||||
if(!empty($branches)) echo "<div class='roadmap branch'>{$branches[$branch]}</div>";
|
||||
foreach($roadmapData as $key => $roadmap)
|
||||
{
|
||||
if(isset($roadmap->build))
|
||||
{
|
||||
echo "<div class='roadmap release'>";
|
||||
echo "<h5>" . html::a($this->createLink('release', 'view', "releaseID=$roadmap->id"), $roadmap->name, '_blank') . '</h5>' . $roadmap->date;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<div class='roadmap plan'>";
|
||||
echo "<h5>" . html::a($this->createLink('productplan', 'view', "planID=$roadmap->id"), $roadmap->title, '_blank') . '</h5>' . $roadmap->begin . ' ~ ' . $roadmap->end;
|
||||
}
|
||||
echo "</div>";
|
||||
if(isset($roadmaps[$year][$branch][$key + 1])) echo "<h5>{$lang->downArrow}</h5>";
|
||||
}
|
||||
echo '</td>';
|
||||
}
|
||||
}
|
||||
echo '</tr>';
|
||||
?>
|
||||
</table>
|
||||
<div class='main-content' id='mainContent'>
|
||||
<h2><?php echo $lang->product->iteration;?> <span class="label label-badge label-light"><?php echo sprintf($lang->product->iterationInfo, $roadmaps['total']);?></span></h2>
|
||||
<?php if($product->type != 'normal'):?>
|
||||
<div class="text-center branch-nav">
|
||||
<ul class="nav nav-secondary inline-block">
|
||||
<li class="nav-heading"><?php echo zget($lang->product->branchName, $product->type);?></li>
|
||||
<?php foreach($branches as $branchKey => $branchName):?>
|
||||
<li <?php if($branchKey == 0) echo "class='active'";?>><a data-target="#tabContent<?php echo $branchKey;?>" data-toggle="tab"><?php echo $branchName;?></a></li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="tab-content">
|
||||
<?php foreach($branches as $branchKey => $branchName):?>
|
||||
<div class="tab-pane fade release-paths <?php if($branchKey == 0) echo 'active in';?>" id="tabContent<?php echo $branchKey;?>">
|
||||
<?php foreach($roadmaps as $year => $yearRoadmaps):?>
|
||||
<?php if(!isset($yearRoadmaps[$branchKey])) continue;?>
|
||||
<?php $roadmapData = zget($yearRoadmaps, $branchKey, array());?>
|
||||
<div class="release-path">
|
||||
<div class="release-head">
|
||||
<div class="title text-primary"><?php echo $year . (is_numeric($year) ? $lang->year : '');?></div>
|
||||
<div class="subtitle"><?php echo sprintf($lang->product->iterationInfo, count($roadmapData));?></div>
|
||||
</div>
|
||||
<?php $i = 0;?>
|
||||
<?php foreach($roadmapData as $roadmap):?>
|
||||
<?php $totalData = count($roadmapData);?>
|
||||
<?php $rows = ceil($totalData / 8);?>
|
||||
<?php $maxPerRow = ceil($totalData / $rows);?>
|
||||
<?php if($i == 0 || $i % $maxPerRow == 0):?>
|
||||
<ul class="release-line">
|
||||
<?php endif;?>
|
||||
<?php $i++;?>
|
||||
<li <?php if(isset($roadmap->build) && date('Y-m-d') < $roadmap->date) echo "class='active'";?>>
|
||||
<?php $viewLink = isset($roadmap->build) ? $this->createLink('release', 'view', "releaseID=$roadmap->id") : $this->createLink('productplan', 'view', "planID=$roadmap->id");?>
|
||||
<a href="<?php echo $viewLink;?>">
|
||||
<?php if(!empty($roadmap->marker)):?>
|
||||
<i class="icon icon-flag text-primary"></i>
|
||||
<?php endif;?>
|
||||
<div class="block">
|
||||
<span class="title"><?php echo isset($roadmap->build) ? $roadmap->name : $roadmap->title;?></span>
|
||||
<span class="date"><?php echo isset($roadmap->build) ? $roadmap->date : ($roadmap->end == '2030-01-01' ? $lang->productplan->future : $roadmap->begin . '~' . $roadmap->end);?></span>
|
||||
<span class="info"><?php echo $roadmap->desc;?></span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<?php if($i % $maxPerRow == 0):?>
|
||||
</ul>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -19,7 +19,7 @@ $(function()
|
||||
$('#module' + moduleID).addClass('active');
|
||||
$('#product' + productID).addClass('active');
|
||||
$('#branch' + branchID).addClass('active');
|
||||
$(document).on('click', "#storyList tbody tr", function(){showCheckedSummary();});
|
||||
$(document).on('click', "#storyList tbody tr, .table-footer .check-all, #storyList thead .check-all", function(){showCheckedSummary();});
|
||||
$(document).on('change', "#storyList :checkbox", function(){showCheckedSummary();});
|
||||
|
||||
$("a[data-toggle='linkStoryByPlan']").click(function(){$('#linkStoryByPlan').modal('show')})
|
||||
@@ -36,12 +36,8 @@ $(function()
|
||||
|
||||
function showCheckedSummary()
|
||||
{
|
||||
var $summary = $('tfoot .table-actions .text:last');
|
||||
if(!$summary.hasClass('readed'))
|
||||
{
|
||||
taskSummary = $summary.html();
|
||||
$summary.addClass('readed');
|
||||
}
|
||||
console.log('test');
|
||||
var $summary = $('#main #mainContent form.main-table .table-header .table-statistic');
|
||||
|
||||
var checkedTotal = 0;
|
||||
var checkedEstimate = 0;
|
||||
@@ -63,10 +59,6 @@ function showCheckedSummary()
|
||||
summary = checkedSummary.replace('%total%', checkedTotal)
|
||||
.replace('%estimate%', checkedEstimate)
|
||||
.replace('%rate%', rate)
|
||||
$('tfoot .table-actions .text:last').html(summary);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('tfoot .table-actions .text:last').html(taskSummary);
|
||||
$summary.html(summary);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,20 +11,24 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/tablesorter.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading' style='margin-bottom: 15px'>
|
||||
<span class='prefix'><?php echo html::icon($lang->icons['story']);?></span>
|
||||
<strong><small><?php echo html::icon($lang->icons['link']);?></small> <?php echo $lang->project->linkStory;?></strong>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<span class='btn btn-link btn-active-text'><span class='text'><?php echo $lang->project->linkStory;?></span></span>
|
||||
</div>
|
||||
<div class='actions'><?php echo html::a($this->server->http_referer, '<i class="icon-goback icon-level-up icon-large icon-rotate-270"></i> ' . $lang->goback, '', "class='btn'")?></div>
|
||||
<div id='querybox' class='show'></div>
|
||||
<div class='btn-toolbar pull-right'><?php echo html::a($this->server->http_referer, '<i class="icon-goback icon-level-up icon-large icon-rotate-270"></i> ' . $lang->goback, '', "class='btn btn-link'")?></div>
|
||||
</div>
|
||||
<form method='post' class='form-condensed' id='linkStoryForm'>
|
||||
<table class='table tablesorter table-fixed table-selectable' id='linkStoryList'>
|
||||
<div id="mainContent" class="main-content">
|
||||
<div id='queryBox' class='show'></div>
|
||||
<form class='main-table table-story' method='post' data-ride='table' id='linkStoryForm'>
|
||||
<table class='table table-fixed' id='linkStoryList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-id'>
|
||||
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
|
||||
<label></label>
|
||||
</div>
|
||||
<?php echo $lang->idAB;?>
|
||||
</th>
|
||||
<th class='w-pri'><?php echo $lang->priAB;?></th>
|
||||
<th class='w-150px'><?php echo $lang->story->product;?></th>
|
||||
<th class='w-150px'><?php echo $lang->story->module;?></th>
|
||||
@@ -43,13 +47,16 @@
|
||||
<?php foreach($allStories as $story):?>
|
||||
<?php if(isset($prjStories[$story->id])) continue;?>
|
||||
<?php $storyLink = $this->createLink('story', 'view', "storyID=$story->id");?>
|
||||
<tr class='text-center'>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='stories[]' value='<?php echo $story->id;?>'/>
|
||||
<?php echo html::hidden("products[$story->id]", $story->product);?>
|
||||
<?php echo html::a($storyLink, sprintf('%03d', $story->id));?>
|
||||
<tr>
|
||||
<td class='c-id'>
|
||||
<div class="checkbox-primary">
|
||||
<input type='checkbox' name='stories[]' value='<?php echo $story->id;?>'/>
|
||||
<label></label>
|
||||
<?php echo html::hidden("products[$story->id]", $story->product);?>
|
||||
<?php printf('%03d', $story->id);?>
|
||||
</div>
|
||||
</td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->story->priList, $story->pri, $story->pri)?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
|
||||
<td><span class='label-pri <?php echo 'label-pri-' . $story->pri;?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
|
||||
<td class='text-left' title='<?php echo $products[$story->product]->name?>'><?php echo html::a($this->createLink('product', 'browse', "productID=$story->product&branch=$story->branch"), $products[$story->product]->name, '_blank');?></td>
|
||||
<td class='text-left' title='<?php echo zget($modules, $story->module, '')?>'><?php echo zget($modules, $story->module, '')?></td>
|
||||
<td class='text-left nobr' title="<?php echo $story->title?>"><?php echo html::a($storyLink, $story->title);?></td>
|
||||
@@ -64,33 +71,23 @@
|
||||
<?php $storyCount ++;?>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='<?php echo $productType == 'normal' ? '8' :'9';?>' class='text-left'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php
|
||||
if($storyCount)
|
||||
{
|
||||
echo html::selectButton() . html::submitButton();
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<div class='text'>" . $lang->project->whyNoStories . '</div>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
<div class='table-footer'>
|
||||
<?php if($storyCount):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class='table-actions btn-toolbar'>
|
||||
<?php echo html::submitButton();?>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='text'><?php echo $lang->project->whyNoStories;?></div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script type='text/javascript'>
|
||||
$(function()
|
||||
{
|
||||
ajaxGetSearchForm()
|
||||
setTimeout(function(){fixedTheadOfList('#linkStoryList')}, 500);
|
||||
setTimeout(function(){fixedTfootAction('#linkStoryForm')}, 500);
|
||||
});
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -133,11 +133,12 @@
|
||||
<label></label>
|
||||
<?php endif;?>
|
||||
<?php printf('%03d', $story->id);?>
|
||||
</div>
|
||||
</td>
|
||||
<?php if($canOrder):?>
|
||||
<td class='sort-handler'><i class='icon-move'></i></td>
|
||||
<?php endif;?>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->story->priList, $story->pri, $story->pri)?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
|
||||
<td><span class='label-pri <?php echo 'label-pri-' . $story->pri?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
|
||||
<td class='text-left' title="<?php echo $story->title?>">
|
||||
<?php if(isset($branchGroups[$story->product][$story->branch])) echo "<span class='label label-info label-badge'>" . $branchGroups[$story->product][$story->branch] . '</span>';?>
|
||||
<?php echo html::a($storyLink,$story->title, null, "style='color: $story->color'");?>
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('confirmUnlinkStory', $lang->project->confirmUnlinkStory)?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div id="sidebarHeader">
|
||||
<div class="title" title='<?php echo $project->name?>'><?php echo $project->name;?></div>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php if(common::hasPriv('project', 'story')) echo html::a($this->createLink('project', 'story', "project=$project->id"), "<span class='text'>{$lang->project->story}</span>", '', "class='btn btn-link'");?>
|
||||
<?php if(common::hasPriv('project', 'storykanban')) echo html::a($this->createLink('project', 'storykanban', "project=$project->id"), "<span class='text'>{$lang->project->kanban}</span>", '', "class='btn btn-link btn-active-text'");?>
|
||||
|
||||
@@ -4,3 +4,5 @@
|
||||
.green {color:green}
|
||||
input[type=checkbox].ml-10px{margin-left:7px;}
|
||||
.pdl-8px{padding-left:8px;}
|
||||
|
||||
.checkbox-primary{display:inline-block;}
|
||||
|
||||
@@ -34,6 +34,7 @@ $lang->release->product = $lang->productCommon;
|
||||
$lang->release->branch = 'Platform/Branch';
|
||||
$lang->release->build = 'Build';
|
||||
$lang->release->name = 'Name';
|
||||
$lang->release->marker = 'Marker';
|
||||
$lang->release->date = 'Date';
|
||||
$lang->release->desc = 'Description';
|
||||
$lang->release->status = 'Status';
|
||||
|
||||
@@ -34,6 +34,7 @@ $lang->release->product = $lang->productCommon;
|
||||
$lang->release->branch = '平台/分支';
|
||||
$lang->release->build = '版本';
|
||||
$lang->release->name = '发布名称';
|
||||
$lang->release->marker = '里程碑';
|
||||
$lang->release->date = '发布日期';
|
||||
$lang->release->desc = '描述';
|
||||
$lang->release->status = '状态';
|
||||
|
||||
@@ -23,8 +23,14 @@
|
||||
<tr>
|
||||
<th><?php echo $lang->release->name;?></th>
|
||||
<td><?php echo html::input('name', '', "class='form-control' autocomplete='off' required");?></td>
|
||||
<td class='muted'><?php if($lastRelease) echo '(' . $lang->release->last . ': ' . $lastRelease->name . ')';?></td>
|
||||
</tr>
|
||||
<td class='muted'>
|
||||
<div class='checkbox-primary'>
|
||||
<input id='marker' name='marker' value='1' type='checkbox' />
|
||||
<label for='marker'><?php echo $lang->release->marker;?></label>
|
||||
</div>
|
||||
<?php if($lastRelease) echo '(' . $lang->release->last . ': ' . $lastRelease->name . ')';?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->build;?></th>
|
||||
<td><?php echo html::select('build', $builds, '', "class='form-control chosen'");?></td><td></td>
|
||||
|
||||
@@ -26,7 +26,14 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->name;?></th>
|
||||
<td><?php echo html::input('name', $release->name, "class='form-control' autocomplete='off' required");?></td><td></td>
|
||||
<td><?php echo html::input('name', $release->name, "class='form-control' autocomplete='off' required");?></td>
|
||||
<td>
|
||||
<?php $checked = !empty($release->marker) ? "checked='checked'" : '';?>
|
||||
<div class='checkbox-primary'>
|
||||
<input id='marker' name='marker' value='1' type='checkbox' <?php echo $checked;?> />
|
||||
<label for='marker'><?php echo $lang->release->marker;?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->build;?></th>
|
||||
|
||||
@@ -134,7 +134,12 @@
|
||||
<th><?php echo $lang->story->reviewedBy;?></th>
|
||||
<td><?php echo html::select('assignedTo', $users, empty($needReview) ? $product->PO : '', "class='form-control chosen'");?></td>
|
||||
<?php if(!$this->story->checkForceReview()):?>
|
||||
<td><?php echo html::checkbox('needNotReview', $lang->story->needNotReview, '', "id='needNotReview' class='no-margin' {$needReview}");?></td>
|
||||
<td>
|
||||
<div class='checkbox-primary'>
|
||||
<input id='needNotReview' name='needNotReview' value='1' type='checkbox' class='no-margin' <?php echo $needReview;?>/>
|
||||
<label for='marker'><?php echo $lang->story->needNotReview;?></label>
|
||||
</div>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
Reference in New Issue
Block a user