Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
UPDATE `zt_block` SET `grid` = 8 WHERE `block` IN ('statistic', 'flowchart', 'welcome');
|
||||
UPDATE `zt_block` SET `grid` = 4 WHERE `block` = 'overview';
|
||||
@@ -950,7 +950,7 @@ class baseDAO
|
||||
public function getRow($data)
|
||||
{
|
||||
if(!is_object($data)) return $data;
|
||||
return json_decode(json_encode($data));
|
||||
return clone $data;
|
||||
}
|
||||
|
||||
//-------------------- 魔术方法(Magic methods) --------------------//
|
||||
|
||||
@@ -34,7 +34,7 @@ $lang->action->original = 'Original Format';
|
||||
$lang->action->confirmHideAll = 'Do you want to hide all the records?';
|
||||
$lang->action->needEdit = '%s that you want to restore exists. Please edit it.';
|
||||
$lang->action->historyEdit = 'The history editor cannot be empty.';
|
||||
$lang->action->noDynamic = 'No dynamic.';
|
||||
$lang->action->noDynamic = 'No dynamics. ';
|
||||
|
||||
$lang->action->history = new stdclass();
|
||||
$lang->action->history->action = 'Link';
|
||||
|
||||
@@ -34,7 +34,7 @@ $lang->action->original = '原始格式';
|
||||
$lang->action->confirmHideAll = '您确定要全部隐藏这些记录吗?';
|
||||
$lang->action->needEdit = '要还原%s的名称或代号已经存在,请编辑更改。';
|
||||
$lang->action->historyEdit = '历史记录编辑不能为空。';
|
||||
$lang->action->noDynamic = '暂无动态';
|
||||
$lang->action->noDynamic = '暂时没有动态。';
|
||||
|
||||
$lang->action->history = new stdclass();
|
||||
$lang->action->history->action = '关联日志';
|
||||
|
||||
@@ -34,7 +34,7 @@ $lang->action->original = '原始格式';
|
||||
$lang->action->confirmHideAll = '您確定要全部隱藏這些記錄嗎?';
|
||||
$lang->action->needEdit = '要還原%s的名稱或代號已經存在,請編輯更改。';
|
||||
$lang->action->historyEdit = '歷史記錄編輯不能為空。';
|
||||
$lang->action->noDynamic = '暫無動態';
|
||||
$lang->action->noDynamic = '暫時沒有動態。';
|
||||
|
||||
$lang->action->history = new stdclass();
|
||||
$lang->action->history->action = '關聯日誌';
|
||||
|
||||
@@ -13,5 +13,16 @@ $config->block = new stdclass();
|
||||
$config->block->editor = new stdclass();
|
||||
$config->block->editor->set = array('id' => 'html', 'tools' => 'simple');
|
||||
|
||||
$config->block->longBlock = array();
|
||||
$config->block->longBlock['']['flowchart'] = 'flowchart';
|
||||
$config->block->longBlock['']['welcome'] = 'welcome';
|
||||
$config->block->longBlock['product']['statistic'] = 'statistic';
|
||||
$config->block->longBlock['project']['statistic'] = 'statistic';
|
||||
$config->block->longBlock['qa']['statistic'] = 'statistic';
|
||||
|
||||
$config->block->shortBlock = array();
|
||||
$config->block->shortBlock['product']['overview'] = 'overview';
|
||||
$config->block->shortBlock['project']['overview'] = 'overview';
|
||||
|
||||
$config->statistic = new stdclass();
|
||||
$config->statistic->storyStages = array('wait', 'planned', 'developing', 'testing', 'released');
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#dashboard .panel-actions.nav .icon-more {font-size: 14px;}
|
||||
#dashboard .panel-body {max-height: 400px; overflow: auto;}
|
||||
#dashboard .panel-move-handler {position: absolute; top: 0; left: 0; right: 50px; height: 40px; z-index: 10; cursor: move;}
|
||||
#dashboard .panel-heading {cursor: move;}
|
||||
#dashboard .panel-heading {cursor: move; padding-right: 75px;}
|
||||
#dashboard .panel.table-scrolled .table-header-fixed {border-bottom: 1px solid #ddd; box-shadow: 0 1px 1px rgba(0,0,0,.05), 0 2px 4px 0 rgba(0,0,0,0.025);}
|
||||
@media (min-width: 992px)
|
||||
{
|
||||
@@ -14,9 +14,9 @@
|
||||
#dashboard > .row > .col-main {padding-right: 10px }
|
||||
#dashboard > .row > .col-side {padding-left: 10px }
|
||||
}
|
||||
#dashboard.sortable-sorting .panel {box-shadow: 0 1px 1px rgba(0,0,0,.075), 0 2px 6px 0 rgba(0,0,0,.075); height: 46px;}
|
||||
#dashboard.sortable-sorting .panel {margin-bottom: 10px; box-shadow: 0 1px 1px rgba(0,0,0,.075), 0 2px 6px 0 rgba(0,0,0,.075); height: 46px;}
|
||||
#dashboard.sortable-sorting .panel > * {display: none;}
|
||||
#dashboard.sortable-sorting .panel:before {display: block; content: attr(data-name); padding: 12px 20px; font-weight: bold; font-size: 14px; color: #3c4353; opacity: 1!important; text-align: left; visibility: visible;}
|
||||
#dashboard.sortable-sorting .panel.dragging {visibility: visible; background: transparent; background: rgba(0,0,0,.075); box-shadow: inset 0 2px 6px rgba(0,0,0,.075);}
|
||||
#dashboard.sortable-sorting .panel.dragging:before {color: #bbb;}
|
||||
#dashboard.sortable-sorting .panel.drag-shadow {box-shadow: 0 1px 3px rgba(0,0,0,.175), 0 3px 8px 0 rgba(0,0,0,.175)}
|
||||
#dashboard.sortable-sorting .panel.drag-shadow {box-shadow: 0 1px 3px rgba(0,0,0,.175), 0 3px 8px 0 rgba(0,0,0,.175)}
|
||||
|
||||
@@ -61,6 +61,7 @@ function refreshBlock($panel, afterRefresh)
|
||||
{
|
||||
var $data = $(data);
|
||||
if($data.hasClass('panel')) $panel.empty().append($data.children());
|
||||
else if($panel.find('#assigntomeBlock').length) $panel.find('#assigntomeBlock').empty().append($data.children());
|
||||
else $panel.find('.panel-body').replaceWith($data);
|
||||
if($.isFunction(afterRefresh))
|
||||
{
|
||||
@@ -107,7 +108,6 @@ function initTableHeader($wrapper)
|
||||
|
||||
$panel.toggleClass('with-fixed-header', isFixed);
|
||||
var $header = $panel.children('.table-header-fixed').toggle(isFixed);
|
||||
if ($wrapper) console.log('initTableHeader', isFixed, {$wrapper, $table, $header});
|
||||
if(!isFixed)
|
||||
{
|
||||
$table.find('thead').css('visibility', 'visible');
|
||||
@@ -121,7 +121,7 @@ function initTableHeader($wrapper)
|
||||
};
|
||||
if(!$header.length)
|
||||
{
|
||||
$header = $('<div class="table-header-fixed" style="position: absolute; left: 0; top: 0; right: 0; padding: 10px 10px 0; background: #fff;"><table class="table table-fixed no-margin"></table></div>').css('right', $panel.width() - tableWidth - 20);
|
||||
$header = $('<div class="table-header-fixed" style="position: absolute; left: 0; top: 0; right: 0; padding: 10px 10px 0; background: #fff;"><table class="table table-fixed no-margin"></table></div>').css('right', 0);
|
||||
$oldTableHead.find('th').each(function(idx)
|
||||
{
|
||||
$(this).attr('data-idx', idx);
|
||||
@@ -207,8 +207,13 @@ $(function()
|
||||
selector: '.panel',
|
||||
trigger: '.panel-heading,.panel-move-handler',
|
||||
containerSelector: '.col-main,.col-side',
|
||||
start: function()
|
||||
{
|
||||
$('body').css('overflow', 'hidden');
|
||||
},
|
||||
finish: function(e)
|
||||
{
|
||||
$('body').css('overflow', 'auto');
|
||||
var newOrders = [];
|
||||
var isSideCol = e.element.parent().is('.col-side');
|
||||
e.list.each(function(index, data)
|
||||
|
||||
@@ -17,6 +17,26 @@
|
||||
<div class='form-group'>
|
||||
<label for='grid' class='col-sm-3'><?php echo $lang->block->grid;?></label>
|
||||
<div class='col-sm-7'>
|
||||
<?php echo html::select('grid', $lang->block->gridOptions, $block ? $block->grid : 8, "class='form-control chosen'")?>
|
||||
<?php
|
||||
$grid = 8;
|
||||
$gridOptions = $lang->block->gridOptions;
|
||||
if($block)
|
||||
{
|
||||
$type = $block->block;
|
||||
$source = $block->source;
|
||||
$grid = $block->grid;
|
||||
}
|
||||
if(isset($config->block->longBlock[$source][$type]))
|
||||
{
|
||||
$grid = 8;
|
||||
unset($gridOptions[4]);
|
||||
}
|
||||
elseif(isset($config->block->shortBlock[$source][$type]))
|
||||
{
|
||||
$grid = 4;
|
||||
unset($gridOptions[8]);
|
||||
}
|
||||
echo html::select('grid', $gridOptions, $grid, "class='form-control'");
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<?php $index = 1;?>
|
||||
<?php foreach($products as $product):?>
|
||||
<div class="tab-pane fade <?php if($index == 1) echo 'active';?> in" id="tabContent<?php echo $product->id;?>">
|
||||
<div class="statistic-menu input-group col-sm space">
|
||||
<div class="statistic-menu input-group space w-400px">
|
||||
<?php if($product->builds):?>
|
||||
<select id='build' name='build' class="form-control chosen">
|
||||
<?php foreach($product->builds as $build):?>
|
||||
@@ -50,8 +50,9 @@
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php $buildIndex = 1;?>
|
||||
<?php foreach($product->builds as $build):?>
|
||||
<div class="table-row" id='bugBox<?php echo $build->id;?>'>
|
||||
<div class="table-row <?php if($buildIndex != 1) echo 'hidden';?>" id='bugBox<?php echo $build->id;?>'>
|
||||
<div class="col-5 text-middle text-center">
|
||||
<div class="progress-pie inline-block space progress-pie-100" data-value="<?php echo $build->assignedRate;?>" data-doughnut-size="80">
|
||||
<canvas width="100" height="100" style="width: 100px; height: 100px;"></canvas>
|
||||
@@ -115,6 +116,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php $buildIndex++;?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php $index++;?>
|
||||
@@ -134,11 +136,12 @@
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('#build').change(function()
|
||||
$('[name^=build]').change(function()
|
||||
{
|
||||
$(this).parents('.tab-pane').find('.table-row').addClass('hidden');
|
||||
$('#bugBox' + $(this).val()) .removeClass('hidden');
|
||||
var $tab = $('#bugBox' + $(this).val());
|
||||
$tab.removeClass('hidden');
|
||||
$tab.find('.progress-pie').progressPie();
|
||||
$(this).parents('.tab-pane').find('.table-row').not($tab).addClass('hidden');
|
||||
});
|
||||
$('#build').change();
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.block-todoes .panel-body {position: relative; padding-top: 42px; overflow: visible; padding-bottom: 0;}
|
||||
.block-todoes .panel-body {position: relative; padding-top: 42px; overflow: visible !important; padding-bottom: 0;}
|
||||
.block-todoes .todoes-input {position: absolute; top: 0; right: 0; left: 0; padding: 0 20px 20px 20px;}
|
||||
.block-todoes .todoes-input .form-control::-webkit-input-placeholder {font-size: 12px; line-height: 20px;color: #a4a8b6;}
|
||||
.block-todoes .todoes-input .form-control::-moz-placeholder {font-size: 12px; line-height: 20px; color: #a4a8b6;}
|
||||
@@ -38,7 +38,7 @@
|
||||
<div class="todoes-input">
|
||||
<div class="todo-form-trigger"><input type="text" placeholder="<?php echo $lang->todo->lblClickCreate?>" class="form-control"></div>
|
||||
<form class="form-horizontal todoes-form layer" method='post' target='hiddenwin' action='<?php echo $this->createLink('todo', 'create', 'date=today&account=&from=block');?>'>
|
||||
<h3><?php echo $lang->todo->create . $lang->todo->common;?></h3>
|
||||
<h3><?php echo $lang->todo->create;?></h3>
|
||||
<div class="form-group">
|
||||
<label for="todoName" class="col-sm-2"><?php echo $lang->todo->name?></label>
|
||||
<div class="col-sm-9 required"><input type="text" class="form-control" name="name"></div>
|
||||
@@ -178,7 +178,7 @@
|
||||
success: function(todo)
|
||||
{
|
||||
$todoes.removeClass('show-form');
|
||||
refreshBlock($todoes.parent());
|
||||
refreshBlock($todoes.parents('div.panel[id^=block]'));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ class branchModel extends model
|
||||
{
|
||||
if(empty($productID)) $productID = $this->session->product;
|
||||
$product = $this->loadModel('product')->getById($productID);
|
||||
if(empty($product) or !isset($this->lang->product->branchName[$product->type])) return false;
|
||||
return $this->lang->branch->all . $this->lang->product->branchName[$product->type];
|
||||
}
|
||||
return $this->dao->select('*')->from(TABLE_BRANCH)->where('id')->eq($branchID)->fetch('name');
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
.dropdown-menu > .menu-search .input-group {width:100%;}
|
||||
.dropdown-menu > .menu-search .input-group-addon {position: absolute; right: 10px; top: 0; z-index: 10; background: none; border: none; color: #666}
|
||||
.dropdown-menu > .menu-search .form-control {border: none!important; box-shadow: none!important; border-top: 1px solid #ddd!important;}
|
||||
.dropdown-menu > li > a {text-align: left;}
|
||||
.dropdown-list {display: block; padding: 0; max-height: 270px; overflow-y: auto;}
|
||||
.dropdown-list > li > a {display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 1.53846154; color: #141414; white-space: nowrap;}
|
||||
.dropdown-list > li > a:hover,
|
||||
|
||||
@@ -131,7 +131,7 @@ $lang->bug->resolvedByMeAB = 'Resolved By Me';
|
||||
$lang->bug->ditto = 'Ditto';
|
||||
$lang->bug->dittoNotice = 'This bug is not linked to the same product as the last one!';
|
||||
$lang->bug->noAssigned = 'Assign';
|
||||
$lang->bug->noBug = 'No bugs. You could ';
|
||||
$lang->bug->noBug = 'No bugs. ';
|
||||
$lang->bug->noModule = '<div>You have no modules</div><div>Manage now</div>';
|
||||
|
||||
/* 页面标签。*/
|
||||
|
||||
@@ -131,7 +131,7 @@ $lang->bug->resolvedByMeAB = '由我解决';
|
||||
$lang->bug->ditto = '同上';
|
||||
$lang->bug->dittoNotice = '该bug与上一bug不属于同一产品!';
|
||||
$lang->bug->noAssigned = '未指派';
|
||||
$lang->bug->noBug = '暂时没有Bug,您现在可以';
|
||||
$lang->bug->noBug = '暂时没有Bug。';
|
||||
$lang->bug->noModule = '<div>您现在还没有模块信息</div><div>请维护测试模块</div>';
|
||||
|
||||
/* 页面标签。*/
|
||||
|
||||
@@ -131,7 +131,7 @@ $lang->bug->resolvedByMeAB = '由我解決';
|
||||
$lang->bug->ditto = '同上';
|
||||
$lang->bug->dittoNotice = '該bug與上一bug不屬於同一產品!';
|
||||
$lang->bug->noAssigned = '未指派';
|
||||
$lang->bug->noBug = '暫時沒有Bug,您現在可以';
|
||||
$lang->bug->noBug = '暫時沒有Bug。';
|
||||
$lang->bug->noModule = '<div>您現在還沒有模組信息</div><div>請維護測試模組</div>';
|
||||
|
||||
/* 頁面標籤。*/
|
||||
|
||||
@@ -161,6 +161,17 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
</div>
|
||||
<div class="main-col">
|
||||
<div class="cell<?php if($browseType == 'bysearch') echo ' show';?>" id="queryBox"></div>
|
||||
<?php if(empty($bugs)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->bug->noBug;?></span>
|
||||
<?php if(common::hasPriv('bug', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('bug', 'create', "productID=$productID&branch=$branch&extra=moduleID=$moduleID"), "<i class='icon icon-plus'></i> " . $lang->bug->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class='main-table table-bug' data-ride='table' method='post' id='bugForm'>
|
||||
<div class="table-header fixed-right">
|
||||
<nav class="btn-toolbar pull-right"></nav>
|
||||
@@ -175,32 +186,31 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
$widths = $this->datatable->setFixedFieldWidth($setting);
|
||||
$columns = 0;
|
||||
?>
|
||||
<div class="table-responsive">
|
||||
<table class='table has-sort-head' id='bugList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php
|
||||
foreach($setting as $key => $value)
|
||||
{
|
||||
if($value->show)
|
||||
{
|
||||
$this->datatable->printHead($value, $orderBy, $vars);
|
||||
$columns ++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<tr data-id='<?php echo $bug->id?>'>
|
||||
<?php foreach($setting as $key => $value) $this->bug->printCell($value, $bug, $users, $builds, $branches, $modulePairs, $projects, $plans, $stories, $tasks, $useDatatable ? 'datatable' : 'table');?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php if(!empty($bugs)):?>
|
||||
<?php if(!$useDatatable) echo '<div class="table-responsive">';?>
|
||||
<table class='table has-sort-head<?php if($useDatatable) echo ' datatable';?>' id='bugList' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php
|
||||
foreach($setting as $key => $value)
|
||||
{
|
||||
if($value->show)
|
||||
{
|
||||
$this->datatable->printHead($value, $orderBy, $vars);
|
||||
$columns ++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<tr data-id='<?php echo $bug->id?>'>
|
||||
<?php foreach($setting as $key => $value) $this->bug->printCell($value, $bug, $users, $builds, $branches, $modulePairs, $projects, $plans, $stories, $tasks, $useDatatable ? 'datatable' : 'table');?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if(!$useDatatable) echo '</div>';?>
|
||||
<div class='table-footer'>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
@@ -272,7 +282,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
<?php $withSearch = count($branches) > 8;?>
|
||||
<?php if($withSearch):?>
|
||||
<div class="dropdown-menu search-list" data-ride="searchList">
|
||||
<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
@@ -298,7 +308,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
<?php $withSearch = count($modules) > 8;?>
|
||||
<?php if($withSearch):?>
|
||||
<div class="dropdown-menu search-list" data-ride="searchList">
|
||||
<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
@@ -324,7 +334,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
<?php $withSearch = count($memberPairs) > 10;?>
|
||||
<?php if($withSearch):?>
|
||||
<div class="dropdown-menu search-list" data-ride="searchList">
|
||||
<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
@@ -350,12 +360,8 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
<div class="table-statistic"><?php echo $summary;?></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php elseif(common::hasPriv('bug', 'create')):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->bug->noBug;?></span> <?php common::printLink('bug', 'create', "productID={$productID}", "<i class='icon icon-plus'></i> " . $lang->bug->create, '', "class='btn btn-info'");?></p>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
<th><?php echo $lang->bug->resolution;?></th>
|
||||
<td>
|
||||
<?php
|
||||
echo $lang->bug->resolutionList[$bug->resolution];
|
||||
echo isset($lang->bug->resolutionList[$bug->resolution]) ? $lang->bug->resolutionList[$bug->resolution] : $bug->resolution;
|
||||
if(isset($bug->duplicateBugTitle)) echo " #$bug->duplicateBug:" . html::a($this->createLink('bug', 'view', "bugID=$bug->duplicateBug", '', true), $bug->duplicateBugTitle, '', "class='iframe' data-width='80%'");
|
||||
?>
|
||||
</td>
|
||||
@@ -216,6 +216,7 @@
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
<?php if($config->global->flow != 'onlyTest'):?>
|
||||
<div class="cell">
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->bug->legendPrjStoryTask;?></summary>
|
||||
@@ -249,6 +250,7 @@
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="cell">
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->bug->legendMisc;?></summary>
|
||||
@@ -279,8 +281,8 @@
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->toCase;?></th>
|
||||
<td>
|
||||
<?php
|
||||
foreach($bug->toCases as $caseID => $case)
|
||||
<?php
|
||||
foreach($bug->toCases as $caseID => $case)
|
||||
{
|
||||
echo '<p style="margin-bottom:0;">' . html::a($this->createLink('testcase', 'view', "caseID=$caseID", '', true), $case, '', "class='iframe' data-width='80%'") . '</p>';
|
||||
}
|
||||
@@ -327,10 +329,10 @@ $convertParams = "productID=$productID&branch=$bug->branch&moduleID=0&from=bug&b
|
||||
common::printIcon('bug', 'resolve', $params, $bug, 'button', 'checked', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('bug', 'close', $params, $bug, 'button', '', '', 'text-danger iframe showinonlybody', true);
|
||||
common::printIcon('bug', 'activate', $params, $bug, 'button', '', '', 'text-success iframe showinonlybody', true);
|
||||
|
||||
|
||||
if($config->global->flow != 'onlyTest') common::printIcon('bug', 'toStory', "product=$bug->product&branch=$bug->branch&module=0&story=0&project=0&bugID=$bug->id", $bug, 'button', $lang->icons['story']);
|
||||
common::printIcon('bug', 'createCase', $convertParams, $bug, 'button', 'sitemap');
|
||||
|
||||
|
||||
echo "<div class='divider'></div>";
|
||||
common::printIcon('bug', 'edit', $params, $bug);
|
||||
common::printIcon('bug', 'create', $copyParams, $bug, 'button', 'copy');
|
||||
|
||||
@@ -46,7 +46,7 @@ $lang->build->stories = 'Finished Story';
|
||||
$lang->build->bugs = 'Resolved Bug';
|
||||
$lang->build->generatedBugs = 'Left Bug';
|
||||
$lang->build->noProduct = " <span style='color:red'>This {$lang->projectCommon} has not linked to {$lang->productCommon}, so Build cannot be created. Please first <a href='%s'> link {$lang->productCommon}</a></span>";
|
||||
$lang->build->noData = 'No data';
|
||||
$lang->build->noBuild = 'No builds. ';
|
||||
|
||||
$lang->build->finishStories = ' %s Story(ies) have been finished.';
|
||||
$lang->build->resolvedBugs = ' %s Bug(s) have been resolved.';
|
||||
|
||||
@@ -46,7 +46,7 @@ $lang->build->stories = '完成的需求';
|
||||
$lang->build->bugs = '解决的Bug';
|
||||
$lang->build->generatedBugs = '产生的Bug';
|
||||
$lang->build->noProduct = " <span style='color:red'>该{$lang->projectCommon}没有关联{$lang->productCommon},无法创建版本,请先<a href='%s'>关联{$lang->productCommon}</a></span>";
|
||||
$lang->build->noData = '暂无';
|
||||
$lang->build->noBuild = '暂时没有版本。';
|
||||
|
||||
$lang->build->finishStories = ' 本次共完成 %s 个需求';
|
||||
$lang->build->resolvedBugs = ' 本次共解决 %s 个Bug';
|
||||
|
||||
@@ -46,7 +46,7 @@ $lang->build->stories = '完成的需求';
|
||||
$lang->build->bugs = '解決的Bug';
|
||||
$lang->build->generatedBugs = '產生的Bug';
|
||||
$lang->build->noProduct = " <span style='color:red'>該{$lang->projectCommon}沒有關聯{$lang->productCommon},無法創建版本,請先<a href='%s'>關聯{$lang->productCommon}</a></span>";
|
||||
$lang->build->noData = '暫無';
|
||||
$lang->build->noBuild = '暫時沒有版本。';
|
||||
|
||||
$lang->build->finishStories = ' 本次共完成 %s 個需求';
|
||||
$lang->build->resolvedBugs = ' 本次共解決 %s 個Bug';
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->product;?></th>
|
||||
<?php if($products):?>
|
||||
<?php if(!empty($products)):?>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('product', $products, $product->id, "onchange='loadBranches(this.value);' class='form-control chosen' required");?>
|
||||
@@ -75,7 +75,7 @@
|
||||
<tr>
|
||||
<td colspan="3" class="text-center form-actions">
|
||||
<?php echo html::submitButton('', '', 'btn btn-wide btn-primary');?>
|
||||
<?php echo "<a href='/project-build-$projectID.html' class='btn btn-back btn btn-wide'>$lang->backhome</a>";?>
|
||||
<?php echo html::backButton('', '', 'btn btn-wide');?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -321,7 +321,7 @@ tbody tr td:first-child input{display:none;}
|
||||
<?php if($build->desc):?>
|
||||
<?php echo $build->desc;?>
|
||||
<?php else:?>
|
||||
<?php echo $lang->build->noData;?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -86,6 +86,7 @@ $lang->customMenu = 'Custom Menu';
|
||||
$lang->customField = 'Custom Field';
|
||||
$lang->lineNumber = 'Line No.';
|
||||
$lang->tutorialConfirm = 'You are using tutorial. Do you want to exit right now?';
|
||||
$lang->youCould = 'You could ';
|
||||
|
||||
$lang->preShortcutKey = '[Shortcut:←]';
|
||||
$lang->nextShortcutKey = '[Shortcut:→]';
|
||||
|
||||
@@ -14,18 +14,17 @@ $lang->index->menuOrder[5] = 'product';
|
||||
$lang->index->menuOrder[10] = 'project';
|
||||
|
||||
/* my menu order. */
|
||||
$lang->my->menuOrder[5] = 'account';
|
||||
$lang->my->menuOrder[10] = 'index';
|
||||
$lang->my->menuOrder[15] = 'calendar';
|
||||
$lang->my->menuOrder[20] = 'task';
|
||||
$lang->my->menuOrder[25] = 'bug';
|
||||
$lang->my->menuOrder[30] = 'testtask';
|
||||
$lang->my->menuOrder[35] = 'story';
|
||||
$lang->my->menuOrder[40] = 'myProject';
|
||||
$lang->my->menuOrder[45] = 'dynamic';
|
||||
$lang->my->menuOrder[50] = 'profile';
|
||||
$lang->my->menuOrder[55] = 'changePassword';
|
||||
$lang->my->menuOrder[60] = 'score';
|
||||
$lang->my->menuOrder[5] = 'index';
|
||||
$lang->my->menuOrder[10] = 'calendar';
|
||||
$lang->my->menuOrder[15] = 'task';
|
||||
$lang->my->menuOrder[20] = 'bug';
|
||||
$lang->my->menuOrder[25] = 'testtask';
|
||||
$lang->my->menuOrder[30] = 'story';
|
||||
$lang->my->menuOrder[35] = 'myProject';
|
||||
$lang->my->menuOrder[40] = 'dynamic';
|
||||
$lang->my->menuOrder[45] = 'profile';
|
||||
$lang->my->menuOrder[50] = 'changePassword';
|
||||
$lang->my->menuOrder[55] = 'score';
|
||||
$lang->todo->menuOrder = $lang->my->menuOrder;
|
||||
|
||||
/* product menu order. */
|
||||
|
||||
@@ -86,6 +86,7 @@ $lang->customMenu = '自定义导航';
|
||||
$lang->customField = '自定义表单项';
|
||||
$lang->lineNumber = '行号';
|
||||
$lang->tutorialConfirm = '检测到你尚未退出新手教程模式,是否现在退出?';
|
||||
$lang->youCould = '您现在可以 ';
|
||||
|
||||
$lang->preShortcutKey = '[快捷键:←]';
|
||||
$lang->nextShortcutKey = '[快捷键:→]';
|
||||
|
||||
@@ -86,6 +86,7 @@ $lang->customMenu = '自定義導航';
|
||||
$lang->customField = '自定義表單項';
|
||||
$lang->lineNumber = '行號';
|
||||
$lang->tutorialConfirm = '檢測到你尚未退出新手教程模式,是否現在退出?';
|
||||
$lang->youCould = '您現在可以 ';
|
||||
|
||||
$lang->preShortcutKey = '[快捷鍵:←]';
|
||||
$lang->nextShortcutKey = '[快捷鍵:→]';
|
||||
|
||||
@@ -301,12 +301,12 @@ class commonModel extends model
|
||||
*/
|
||||
public static function printAboutBar()
|
||||
{
|
||||
global $app, $lang;
|
||||
global $app, $config, $lang;
|
||||
echo "<ul id='extraNav' class='nav nav-default'>";
|
||||
echo "<li class='dropdown'>";
|
||||
echo "<a data-toggle='dropdown'>" . $lang->help . " <span class='caret'></span></a>";
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
if(!commonModel::isTutorialMode() and $app->user->account != 'guest') echo '<li>' . html::a(helper::createLink('tutorial', 'start'), $lang->tutorial, '', "class='iframe' data-class-name='modal-inverse' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . "</li>";
|
||||
if($config->global->flow == 'full' && !commonModel::isTutorialMode() and $app->user->account != 'guest') echo '<li>' . html::a(helper::createLink('tutorial', 'start'), $lang->tutorial, '', "class='iframe' data-class-name='modal-inverse' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . "</li>";
|
||||
echo '<li>' . html::a($lang->manualUrl, $lang->manual, '_blank', "class='open-help-tab'") . '</li>';
|
||||
echo '<li>' . html::a(helper::createLink('misc', 'changeLog'), $lang->changeLog, '', "class='iframe' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . '</li>';
|
||||
echo "</ul></li>\n";
|
||||
|
||||
@@ -1,161 +1 @@
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<style>
|
||||
.table-chart tr > td.chart-color {padding-left: 0!important; text-align: center; padding-right: 0!important; color: #f1f1f1}
|
||||
.chart-wrapper {padding: 10px; background-color: #f1f1f1; border: 1px solid #e5e5e5}
|
||||
.table-wrapper > .table-bordered > thead > tr:first-child th {border-top: 1px solid #ddd}
|
||||
</style>
|
||||
<!--[if lte IE 8]>
|
||||
<?php
|
||||
js::import($jsRoot . 'chartjs/excanvas.min.js');
|
||||
?>
|
||||
<![endif]-->
|
||||
<?php
|
||||
if($config->debug)
|
||||
{
|
||||
js::import($jsRoot . 'chartjs/chart.min.js');
|
||||
}
|
||||
?>
|
||||
<script>
|
||||
(function()
|
||||
{
|
||||
var colorIndex = 0;
|
||||
function nextAccentColor(idx)
|
||||
{
|
||||
if(typeof idx === 'undefined') idx = colorIndex++;
|
||||
return new $.zui.Color({h: idx * 67 % 360, s: 0.5, l: 0.55});
|
||||
}
|
||||
|
||||
jQuery.fn.tableChart = function()
|
||||
{
|
||||
$(this).each(function()
|
||||
{
|
||||
var $table = $(this);
|
||||
var options = $table.data();
|
||||
var chartType = options.chart || 'pie';
|
||||
var $canvas = $(options.target);
|
||||
if(!$canvas.length) return;
|
||||
var chart = null;
|
||||
|
||||
if(chartType === 'pie')
|
||||
{
|
||||
options = $.extend({scaleShowLabels: true, scaleLabel: '<%=label%>: <%=value%>'}, options);
|
||||
var data = [];
|
||||
var $rows = $table.find('tbody > tr').each(function(idx)
|
||||
{
|
||||
var $row = $(this);
|
||||
var color = nextAccentColor().toCssStr();
|
||||
|
||||
$row.attr('data-id', idx).find('.chart-color-dot').css('color', color);
|
||||
data.push({label: $row.find('.chart-label').text(), value: parseInt($row.find('.chart-value').text()), color: color, id: idx});
|
||||
});
|
||||
|
||||
if(data.length > 1) options.scaleLabelPlacement = 'outside';
|
||||
else if(data.length === 1)
|
||||
{
|
||||
options.scaleLabelPlacement = 'inside';
|
||||
data.push({label: '', value: data[0].value/2000, color: '#fff', showLabel: false})
|
||||
}
|
||||
|
||||
chart = $canvas.pieChart(data, options);
|
||||
$canvas.on('mousemove', function(e)
|
||||
{
|
||||
var activePoints = chart.getSegmentsAtEvent(e);
|
||||
$rows.removeClass('active');
|
||||
if(activePoints.length)
|
||||
{
|
||||
$rows.filter('[data-id="' + activePoints[0].id + '"]').addClass('active');
|
||||
}
|
||||
});
|
||||
}
|
||||
else if(chartType === 'bar')
|
||||
{
|
||||
var labels = [], dataset = {label: $table.find('thead .chart-label').text(), color: nextAccentColor().toCssStr(), data: []};
|
||||
|
||||
var $rows = $table.find('tbody > tr').each(function(idx)
|
||||
{
|
||||
var $row = $(this);
|
||||
labels.push($row.find('.chart-label').text());
|
||||
dataset.data.push(parseInt($row.find('.chart-value').text()));
|
||||
});
|
||||
var data = {labels: labels, datasets: [dataset]};
|
||||
if(labels.length) options.barValueSpacing = 5;
|
||||
|
||||
chart = $canvas.barChart(data, options);
|
||||
}
|
||||
else if(chartType === 'line')
|
||||
{
|
||||
var labels = [], dataset = {label: $table.find('thead .chart-label').text(), color: nextAccentColor().toCssStr(), data: []};
|
||||
|
||||
var $rows = $table.find('tbody > tr').each(function(idx)
|
||||
{
|
||||
var $row = $(this);
|
||||
labels.push($row.find('.chart-label').text());
|
||||
dataset.data.push(parseInt($row.find('.chart-value').text()));
|
||||
});
|
||||
var data = {labels: labels, datasets: [dataset]};
|
||||
if(labels.length) options.barValueSpacing = 5;
|
||||
|
||||
chart = $canvas.lineChart(data, options);
|
||||
}
|
||||
|
||||
if(chart !== null) $table.data('zui.chart', chart);
|
||||
});
|
||||
};
|
||||
|
||||
jQuery.fn.progressPie = function(setting)
|
||||
{
|
||||
$(this).each(function()
|
||||
{
|
||||
var $this = $(this);
|
||||
var $canvas = $this.is('canvas') ? $this : $this.find('canvas');
|
||||
var options = $.extend(
|
||||
{
|
||||
value: 0,
|
||||
color: '#4CAF50',
|
||||
backColor: '#ddd',
|
||||
doughnut: true,
|
||||
doughnutSize: 85,
|
||||
width: 20,
|
||||
height: 20,
|
||||
showTip: false,
|
||||
name: '',
|
||||
tipTemplate: "<%=value%>%",
|
||||
animation: false
|
||||
}, setting, $this.data());
|
||||
var hasCanvas = $canvas.length;
|
||||
|
||||
if(!hasCanvas) $canvas = $('<canvas>').appendTo($this);
|
||||
if($canvas.attr('width') !== undefined) options.width = $canvas.attr('width');
|
||||
else $canvas.attr('width', options.width);
|
||||
if($canvas.attr('height') !== undefined) options.height = $canvas.attr('height');
|
||||
else $canvas.attr('height', options.height);
|
||||
if(!hasCanvas && $.zui.browser.ie == 8) G_vmlCanvasManager.initElement($canvas[0]);
|
||||
|
||||
options.value = Math.max(0, Math.min(100, options.value));
|
||||
|
||||
var data =
|
||||
[
|
||||
{value: options.value, label: options.name, color: options.color},
|
||||
{value: 100 - options.value, label: '', color: options.backColor}
|
||||
];
|
||||
var chartOptions = $.extend(
|
||||
{
|
||||
segmentShowStroke: false,
|
||||
animation: options.animation,
|
||||
showTooltips: options.showTip,
|
||||
tooltipTemplate: options.tipTemplate,
|
||||
percentageInnerCutout: options.doughnutSize,
|
||||
}, options.chartOptions);
|
||||
|
||||
$canvas[options.doughnut ? 'doughnutChart' : 'pieChart'](data, chartOptions);
|
||||
});
|
||||
};
|
||||
|
||||
$(function()
|
||||
{
|
||||
$('.table-chart').tableChart();
|
||||
var $pies = $('.progress-pie');
|
||||
setTimeout(function(){$pies.progressPie();}, $pies.length > 100 ? 1000 : 200);
|
||||
});
|
||||
}());
|
||||
</script>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
<?php $datatableId = $this->moduleName . ucfirst($this->methodName);?>
|
||||
<style>
|
||||
#setShowModule {margin-left: 30px;}
|
||||
#tableCustomBtn {padding: 6px 3px 6px 0;}
|
||||
#tableCustomBtn > .icon-cog {position: relative; left: 3px;}
|
||||
</style>
|
||||
<script>
|
||||
$(function()
|
||||
@@ -14,10 +16,11 @@ $(function()
|
||||
if($btnToolbar.length > 0)
|
||||
{
|
||||
<?php $mode = isset($config->datatable->$datatableId->mode) ? $config->datatable->$datatableId->mode : 'table';?>
|
||||
// $btnToolbar.append("<a href=\"javascript:saveDatatableConfig('mode', 'table', true);\" class='btn btn-link <?php echo $mode == 'table' ? 'btn-active-line' : '';?>'><?php echo $lang->datatable->table?></a>");
|
||||
// $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' title='<?php echo $lang->datatable->custom?>' 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>");
|
||||
$('#tableCustomBtn').modalTrigger();
|
||||
var $dropdown = $('<div class="dropdown"><button id="tableCustomBtn" type="button" class="btn btn-link" data-toggle="dropdown"><i class="icon-cog"></i><span class="caret"></span></button></div>');
|
||||
var $dropmenu = $('<ul class="dropdown-menu pull-right"></ul>');
|
||||
$dropmenu.append("<li><a href='<?php echo $this->createLink('datatable', 'ajaxCustom', 'id=' . $this->moduleName . '&method=' . $this->methodName)?>' data-toggle='modal' data-type='ajax'><?php echo $lang->datatable->custom?></a></li>");
|
||||
$dropmenu.append("<li><a href='javascript:saveDatatableConfig(\"mode\", \"<?php echo $mode == 'table' ? 'datatable' : 'table';?>\", true);' id='switchToDatatable'><?php echo $mode == 'table' ? $lang->datatable->switchToDatatable : $lang->datatable->switchToTable;?></a></li>");
|
||||
$dropdown.append($dropmenu).appendTo($btnToolbar);
|
||||
}
|
||||
|
||||
$('#setShowModule').click(function()
|
||||
@@ -25,7 +28,7 @@ $(function()
|
||||
saveDatatableConfig('showModule', $('#showModuleModal input[name="showModule"]:checked').val(), true)
|
||||
});
|
||||
|
||||
function saveDatatableConfig(name, value, reload, global)
|
||||
window.saveDatatableConfig = function(name, value, reload, global)
|
||||
{
|
||||
if('<?php echo $this->app->user->account?>' == 'guest') return;
|
||||
datatableId = '<?php echo $datatableId?>';
|
||||
@@ -41,7 +44,6 @@ $(function()
|
||||
});
|
||||
$.get(createLink('score', 'ajax', "method=switchToDataTable"));
|
||||
};
|
||||
window.saveDatatableConfig = saveDatatableConfig;
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,18 +1,29 @@
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<?php js::import($jsRoot . 'datatable/min.js'); ?>
|
||||
<?php css::import($jsRoot . 'datatable/min.css'); ?>
|
||||
<?php if(!empty($lang->datatable)):?>
|
||||
<style>
|
||||
.table-datatable tbody > tr td,
|
||||
.table-datatable thead > tr th {height: 35px; line-height: 20px;}
|
||||
.table-datatable tbody > tr td .btn-icon > i {line-height: 19px;}
|
||||
.hide-side .table-datatable thead > tr > th.check-btn i {visibility: hidden;}
|
||||
.hide-side .side-handle {line-height: 33px}
|
||||
.table-datatable .checkbox-row {display: none}
|
||||
.outer .datatable {border: 1px solid #ddd;}
|
||||
.outer .datatable .table, .outer .datatable .table tfoot td {border: none; box-shadow: none}
|
||||
.datatable .table>tbody>tr.active>td.col-hover, .datatable .table>tbody>tr.active.hover>td {background-color: #f3eed8 !important;}
|
||||
.datatable-span.flexarea .scroll-slide {bottom: -30px}
|
||||
|
||||
.panel > .datatable, .panel-body > .datatable {margin-bottom: 0;}
|
||||
.datatable {margin-bottom: 0;}
|
||||
.datatable .table>tbody>tr>td, .datatable .table>thead>tr>th {line-height: 30px; padding-top: 4px; padding-bottom: 4px; height: 40px; vertical-align: middle;}
|
||||
.datatable .table>tbody>tr.hover {box-shadow: none!important;}
|
||||
.datatable .flexarea .table-children,
|
||||
.datatable .fixed-left .table-children {border-right: none;}
|
||||
.datatable .flexarea .table-children,
|
||||
.datatable .fixed-right .table-children {border-left: none;}
|
||||
.datatable tr.hover td.c-actions .more {display: block; background-color: #ebf2f9}
|
||||
.datatable .flexarea tbody > tr.checked,
|
||||
.datatable .fixed-left tbody > tr.checked {border-top-right-radius: 0; border-bottom-right-radius: 0;}
|
||||
.datatable .flexarea tbody > tr.checked,
|
||||
.datatable .fixed-right tbody > tr.checked {border-top-left-radius: 0; border-bottom-left-radius: 0;}
|
||||
.datatable .flexarea tbody>tr.checked>td:first-child:before,
|
||||
.datatable .fixed-right tbody>tr.checked>td:first-child:before {display: none}
|
||||
.datatable>.scroll-wrapper {z-index: 10;}
|
||||
.datatable.with-footer-fixed > .scroll-wrapper > .scroll-slide {bottom: 2px}
|
||||
.datatable .flexarea thead>tr>th:first-child,
|
||||
.datatable .flexarea tbody>tr>td:first-child,
|
||||
.datatable .fixed-right thead>tr>th:first-child,
|
||||
.datatable .fixed-right tbody>tr>td {padding-left: 5px!important;}
|
||||
</style>
|
||||
<script>
|
||||
<?php $datatableId = $this->moduleName . ucfirst($this->methodName);?>
|
||||
@@ -51,44 +62,15 @@ $(document).ready(function()
|
||||
tableClass : 'tablesorter',
|
||||
storage : false,
|
||||
fixCellHeight : false,
|
||||
selectable :
|
||||
{
|
||||
clickBehavior: 'multi',
|
||||
start: function(e)
|
||||
{
|
||||
var $target = $(e.target);
|
||||
if ($target.closest('.task-toggle').length) return false;
|
||||
var $checkRow = $target.closest('.check-row, .check-btn');
|
||||
if($checkRow.length) return true;
|
||||
},
|
||||
startDrag: function(e)
|
||||
{
|
||||
var $target = $(e.target);
|
||||
if(!this.multiKey && !$target.closest('td[data-index="0"]').length) return false;
|
||||
}
|
||||
},
|
||||
selectable : false,
|
||||
fixedHeader: true,
|
||||
ready: function()
|
||||
{
|
||||
if(!this.$table) return;
|
||||
var customMenu = this.$table.data('customMenu');
|
||||
|
||||
var $dropdown = $("<div class='datatable-menu-wrapper'><div class='dropdown datatable-menu'><button type='button' class='btn btn-link' data-toggle='dropdown'><i class='icon-cogs'></i> <span class='caret'></span></button></div></div>");
|
||||
var $dropmenu = $("<ul class='dropdown-menu pull-right'></ul>");
|
||||
if(customMenu) $dropmenu.append("<li><a id='customBtn' href='<?php echo $this->createLink('datatable', 'ajaxCustom', 'id=' . $this->moduleName . '&method=' . $this->methodName)?>' data-toggle='modal' data-type='ajax'><?php echo $lang->datatable->custom?></a></li>");
|
||||
$dropmenu.append("<li><a href='javascript:;' id='switchToTable'><?php echo $lang->datatable->switchToTable?></a></li>");
|
||||
$dropdown.children('.dropdown').append($dropmenu);
|
||||
this.$datatable.before($dropdown);
|
||||
this.$datatable.find('[data-toggle="modal"], a.iframe').modalTrigger();
|
||||
if($.fn.progressPie) this.$datatable.find('.progress-pie').progressPie();
|
||||
$('a[data-toggle="showModuleModal"]').click(function(){$('#showModuleModal').modal('show')});
|
||||
|
||||
$('#customBtn').modalTrigger();
|
||||
|
||||
$('#switchToTable').click(function()
|
||||
$datatable.addClass('datatable-origin');
|
||||
if ($datatable.hasClass('has-sort-head'))
|
||||
{
|
||||
saveDatatableConfig('mode', 'table', true);
|
||||
});
|
||||
this.$datatable.find('.table').addClass('has-sort-head');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
<script>$.initSidebar()</script>
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
|
||||
<div id='divider'></div>
|
||||
<iframe frameborder='0' name='hiddenwin' id='hiddenwin' scrolling='no' class='debugwin hidden'></iframe>
|
||||
|
||||
<?php if($onlybody != 'yes'):?>
|
||||
|
||||
@@ -51,12 +51,6 @@ $onlybody = zget($_GET, 'onlybody', 'no');
|
||||
|
||||
echo html::favicon($webRoot . 'favicon.ico');
|
||||
?>
|
||||
<!--[if lt IE 9]>
|
||||
<?php
|
||||
js::import($jsRoot . 'html5shiv/min.js');
|
||||
js::import($jsRoot . 'respond/min.js');
|
||||
?>
|
||||
<![endif]-->
|
||||
<!--[if lt IE 10]>
|
||||
<?php js::import($jsRoot . 'jquery/placeholder/min.js'); ?>
|
||||
<![endif]-->
|
||||
|
||||
@@ -6,14 +6,14 @@ $lang->datatable->show = 'Show';
|
||||
$lang->datatable->hide = 'Hide';
|
||||
$lang->datatable->reset = 'Reset';
|
||||
|
||||
$lang->datatable->custom = 'Custom Columns';
|
||||
$lang->datatable->customTip = 'Check Columns to Display,Drag Column name to Sort';
|
||||
$lang->datatable->table = 'Switch to Common Table';
|
||||
$lang->datatable->datatable = 'Switch to Advanced Table';
|
||||
$lang->datatable->required = 'Required';
|
||||
$lang->datatable->confirmReset = 'Do you want to restore the default settings?';
|
||||
$lang->datatable->setGlobal = 'Global';
|
||||
$lang->datatable->resetGlobal = 'Reset Global Default';
|
||||
$lang->datatable->custom = 'Custom Columns';
|
||||
$lang->datatable->customTip = 'Check Columns to Display,Drag Column name to Sort';
|
||||
$lang->datatable->switchToTable = 'Switch to Common Table';
|
||||
$lang->datatable->switchToDatatable = 'Switch to Advanced Table';
|
||||
$lang->datatable->required = 'Required';
|
||||
$lang->datatable->confirmReset = 'Do you want to restore the default settings?';
|
||||
$lang->datatable->setGlobal = 'Global';
|
||||
$lang->datatable->resetGlobal = 'Reset Global Default';
|
||||
|
||||
$lang->datatable->branch = 'Branch';
|
||||
$lang->datatable->platform = 'Platform';
|
||||
|
||||
@@ -6,14 +6,14 @@ $lang->datatable->show = '显示';
|
||||
$lang->datatable->hide = '隐藏';
|
||||
$lang->datatable->reset = '恢复默认';
|
||||
|
||||
$lang->datatable->custom = '自定义列';
|
||||
$lang->datatable->customTip = '勾选需要显示的列,拖动列名进行排序。';
|
||||
$lang->datatable->table = '简单表格';
|
||||
$lang->datatable->datatable = '高级表格';
|
||||
$lang->datatable->required = '必选';
|
||||
$lang->datatable->confirmReset = '是否恢复默认设置?';
|
||||
$lang->datatable->setGlobal = '全局';
|
||||
$lang->datatable->resetGlobal = '全局恢复默认';
|
||||
$lang->datatable->custom = '自定义列';
|
||||
$lang->datatable->customTip = '勾选需要显示的列,拖动列名进行排序。';
|
||||
$lang->datatable->switchToTable = '切换到简单表格';
|
||||
$lang->datatable->switchToDatatable = '切换到高级表格';
|
||||
$lang->datatable->required = '必选';
|
||||
$lang->datatable->confirmReset = '是否恢复默认设置?';
|
||||
$lang->datatable->setGlobal = '全局';
|
||||
$lang->datatable->resetGlobal = '全局恢复默认';
|
||||
|
||||
$lang->datatable->branch = '分支';
|
||||
$lang->datatable->platform = '平台';
|
||||
|
||||
@@ -142,7 +142,7 @@ $lang->doc->errorEmptyProject = "No {$lang->projectCommon}. It cannot be create
|
||||
$lang->doc->errorMainSysLib = "This library cannot be deleted.";
|
||||
$lang->doc->accessDenied = "Access denied!";
|
||||
$lang->doc->versionNotFount = 'It does not exist in this build.';
|
||||
$lang->doc->noDoc = 'It does not exist. You could ';
|
||||
$lang->doc->noDoc = 'No docs. ';
|
||||
$lang->doc->noSearchedDoc = 'Nothing searched.';
|
||||
$lang->doc->noEditedDoc = 'You have not edited any doc.';
|
||||
$lang->doc->noOpenedDoc = 'You have not created any doc.';
|
||||
|
||||
@@ -142,7 +142,7 @@ $lang->doc->errorEmptyProject = "没有{$lang->projectCommon},无法创建文
|
||||
$lang->doc->errorMainSysLib = "该系统文档库不能删除!";
|
||||
$lang->doc->accessDenied = "您没有权限访问!";
|
||||
$lang->doc->versionNotFount = '该版本文档不存在';
|
||||
$lang->doc->noDoc = '文档不存在,您现在可以';
|
||||
$lang->doc->noDoc = '暂时没有文档。';
|
||||
$lang->doc->noSearchedDoc = '没有搜索到任何文档。';
|
||||
$lang->doc->noEditedDoc = '您还没有编辑任何文档。';
|
||||
$lang->doc->noOpenedDoc = '您还没有创建任何文档。';
|
||||
|
||||
@@ -142,7 +142,7 @@ $lang->doc->errorEmptyProject = "沒有{$lang->projectCommon},無法創建文
|
||||
$lang->doc->errorMainSysLib = "該系統文檔庫不能刪除!";
|
||||
$lang->doc->accessDenied = "您沒有權限訪問!";
|
||||
$lang->doc->versionNotFount = '該版本文檔不存在';
|
||||
$lang->doc->noDoc = '文檔不存在,您現在可以';
|
||||
$lang->doc->noDoc = '暫時沒有文檔。';
|
||||
$lang->doc->noSearchedDoc = '沒有搜索到任何文檔。';
|
||||
$lang->doc->noEditedDoc = '您還沒有編輯任何文檔。';
|
||||
$lang->doc->noOpenedDoc = '您還沒有創建任何文檔。';
|
||||
|
||||
@@ -49,7 +49,11 @@ var browseType = '<?php echo $browseType;?>';
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<?php if($libID):?>
|
||||
<span class="text-muted"><?php echo $lang->doc->noDoc;?></span> <?php common::printLink('doc', 'create', "libID={$libID}", "<i class='icon icon-plus'></i> " . $lang->doc->create, '', "class='btn btn-info'");?>
|
||||
<span class="text-muted"><?php echo $lang->doc->noDoc;?></span>
|
||||
<?php if(common::hasPriv('doc', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('doc', 'create', "libID={$libID}"), "<i class='icon icon-plus'></i> " . $lang->doc->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
<?php elseif($browseType == 'fastsearch'):?>
|
||||
<span class="text-muted"><?php echo $lang->doc->noSearchedDoc;?></span>
|
||||
<?php elseif($browseType == 'byediteddate'):?>
|
||||
|
||||
@@ -22,6 +22,7 @@ $lang->my->shareContacts = 'Share the list';
|
||||
$lang->my->limited = 'Restricted operation (editing only content related to itself)';
|
||||
$lang->my->score = 'My Score';
|
||||
$lang->my->scoreRule = 'Score Rule';
|
||||
$lang->my->noTodo = 'No todos. ';
|
||||
|
||||
$lang->my->taskMenu = new stdclass();
|
||||
$lang->my->taskMenu->assignedToMe = 'AssignedToMe';
|
||||
|
||||
+53
-52
@@ -1,52 +1,53 @@
|
||||
<?php
|
||||
$lang->my->common = '我的地盘';
|
||||
|
||||
/* 方法列表。*/
|
||||
$lang->my->index = '首页';
|
||||
$lang->my->todo = '我的待办';
|
||||
$lang->my->calendar = '日程';
|
||||
$lang->my->task = '我的任务';
|
||||
$lang->my->bug = '我的Bug';
|
||||
$lang->my->testTask = '我的版本';
|
||||
$lang->my->testCase = '我的用例';
|
||||
$lang->my->story = '我的需求';
|
||||
$lang->my->myProject = "我的{$lang->projectCommon}";
|
||||
$lang->my->profile = '我的档案';
|
||||
$lang->my->dynamic = '我的动态';
|
||||
$lang->my->editProfile = '修改档案';
|
||||
$lang->my->changePassword = '修改密码';
|
||||
$lang->my->unbind = '解除然之绑定';
|
||||
$lang->my->manageContacts = '维护联系人';
|
||||
$lang->my->deleteContacts = '删除联系人';
|
||||
$lang->my->shareContacts = '共享联系人列表';
|
||||
$lang->my->limited = '受限操作(只能编辑与自己相关的内容)';
|
||||
$lang->my->score = '我的积分';
|
||||
$lang->my->scoreRule = '积分规则';
|
||||
|
||||
$lang->my->taskMenu = new stdclass();
|
||||
$lang->my->taskMenu->assignedToMe = '指派给我';
|
||||
$lang->my->taskMenu->openedByMe = '由我创建';
|
||||
$lang->my->taskMenu->finishedByMe = '由我完成';
|
||||
$lang->my->taskMenu->closedByMe = '由我关闭';
|
||||
$lang->my->taskMenu->canceledByMe = '由我取消';
|
||||
|
||||
$lang->my->storyMenu = new stdclass();
|
||||
$lang->my->storyMenu->assignedToMe = '指派给我';
|
||||
$lang->my->storyMenu->openedByMe = '由我创建';
|
||||
$lang->my->storyMenu->reviewedByMe = '由我评审';
|
||||
$lang->my->storyMenu->closedByMe = '由我关闭';
|
||||
|
||||
$lang->my->home = new stdclass();
|
||||
$lang->my->home->latest = '最新动态';
|
||||
$lang->my->home->action = "%s, %s <em>%s</em> %s <a href='%s'>%s</a>。";
|
||||
$lang->my->home->projects = $lang->projectCommon;
|
||||
$lang->my->home->products = $lang->productCommon;
|
||||
$lang->my->home->createProject = "创建一个{$lang->projectCommon}";
|
||||
$lang->my->home->createProduct = "创建一个{$lang->productCommon}";
|
||||
$lang->my->home->help = "<a href='http://www.zentao.net/help-read-79236.html' target='_blank'>帮助文档</a>";
|
||||
$lang->my->home->noProductsTip = "这里还没有{$lang->productCommon}。";
|
||||
|
||||
$lang->my->form = new stdclass();
|
||||
$lang->my->form->lblBasic = '基本信息';
|
||||
$lang->my->form->lblContact = '联系信息';
|
||||
$lang->my->form->lblAccount = '帐号信息';
|
||||
<?php
|
||||
$lang->my->common = '我的地盘';
|
||||
|
||||
/* 方法列表。*/
|
||||
$lang->my->index = '首页';
|
||||
$lang->my->todo = '我的待办';
|
||||
$lang->my->calendar = '日程';
|
||||
$lang->my->task = '我的任务';
|
||||
$lang->my->bug = '我的Bug';
|
||||
$lang->my->testTask = '我的版本';
|
||||
$lang->my->testCase = '我的用例';
|
||||
$lang->my->story = '我的需求';
|
||||
$lang->my->myProject = "我的{$lang->projectCommon}";
|
||||
$lang->my->profile = '我的档案';
|
||||
$lang->my->dynamic = '我的动态';
|
||||
$lang->my->editProfile = '修改档案';
|
||||
$lang->my->changePassword = '修改密码';
|
||||
$lang->my->unbind = '解除然之绑定';
|
||||
$lang->my->manageContacts = '维护联系人';
|
||||
$lang->my->deleteContacts = '删除联系人';
|
||||
$lang->my->shareContacts = '共享联系人列表';
|
||||
$lang->my->limited = '受限操作(只能编辑与自己相关的内容)';
|
||||
$lang->my->score = '我的积分';
|
||||
$lang->my->scoreRule = '积分规则';
|
||||
$lang->my->noTodo = '暂时没有待办。';
|
||||
|
||||
$lang->my->taskMenu = new stdclass();
|
||||
$lang->my->taskMenu->assignedToMe = '指派给我';
|
||||
$lang->my->taskMenu->openedByMe = '由我创建';
|
||||
$lang->my->taskMenu->finishedByMe = '由我完成';
|
||||
$lang->my->taskMenu->closedByMe = '由我关闭';
|
||||
$lang->my->taskMenu->canceledByMe = '由我取消';
|
||||
|
||||
$lang->my->storyMenu = new stdclass();
|
||||
$lang->my->storyMenu->assignedToMe = '指派给我';
|
||||
$lang->my->storyMenu->openedByMe = '由我创建';
|
||||
$lang->my->storyMenu->reviewedByMe = '由我评审';
|
||||
$lang->my->storyMenu->closedByMe = '由我关闭';
|
||||
|
||||
$lang->my->home = new stdclass();
|
||||
$lang->my->home->latest = '最新动态';
|
||||
$lang->my->home->action = "%s, %s <em>%s</em> %s <a href='%s'>%s</a>。";
|
||||
$lang->my->home->projects = $lang->projectCommon;
|
||||
$lang->my->home->products = $lang->productCommon;
|
||||
$lang->my->home->createProject = "创建一个{$lang->projectCommon}";
|
||||
$lang->my->home->createProduct = "创建一个{$lang->productCommon}";
|
||||
$lang->my->home->help = "<a href='http://www.zentao.net/help-read-79236.html' target='_blank'>帮助文档</a>";
|
||||
$lang->my->home->noProductsTip = "这里还没有{$lang->productCommon}。";
|
||||
|
||||
$lang->my->form = new stdclass();
|
||||
$lang->my->form->lblBasic = '基本信息';
|
||||
$lang->my->form->lblContact = '联系信息';
|
||||
$lang->my->form->lblAccount = '帐号信息';
|
||||
|
||||
+53
-52
@@ -1,52 +1,53 @@
|
||||
<?php
|
||||
$lang->my->common = '我的地盤';
|
||||
|
||||
/* 方法列表。*/
|
||||
$lang->my->index = '首頁';
|
||||
$lang->my->todo = '我的待辦';
|
||||
$lang->my->calendar = '日程';
|
||||
$lang->my->task = '我的任務';
|
||||
$lang->my->bug = '我的Bug';
|
||||
$lang->my->testTask = '我的版本';
|
||||
$lang->my->testCase = '我的用例';
|
||||
$lang->my->story = '我的需求';
|
||||
$lang->my->myProject = "我的{$lang->projectCommon}";
|
||||
$lang->my->profile = '我的檔案';
|
||||
$lang->my->dynamic = '我的動態';
|
||||
$lang->my->editProfile = '修改檔案';
|
||||
$lang->my->changePassword = '修改密碼';
|
||||
$lang->my->unbind = '解除然之綁定';
|
||||
$lang->my->manageContacts = '維護聯繫人';
|
||||
$lang->my->deleteContacts = '刪除聯繫人';
|
||||
$lang->my->shareContacts = '共享聯繫人列表';
|
||||
$lang->my->limited = '受限操作(只能編輯與自己相關的內容)';
|
||||
$lang->my->score = '我的積分';
|
||||
$lang->my->scoreRule = '積分規則';
|
||||
|
||||
$lang->my->taskMenu = new stdclass();
|
||||
$lang->my->taskMenu->assignedToMe = '指派給我';
|
||||
$lang->my->taskMenu->openedByMe = '由我創建';
|
||||
$lang->my->taskMenu->finishedByMe = '由我完成';
|
||||
$lang->my->taskMenu->closedByMe = '由我關閉';
|
||||
$lang->my->taskMenu->canceledByMe = '由我取消';
|
||||
|
||||
$lang->my->storyMenu = new stdclass();
|
||||
$lang->my->storyMenu->assignedToMe = '指派給我';
|
||||
$lang->my->storyMenu->openedByMe = '由我創建';
|
||||
$lang->my->storyMenu->reviewedByMe = '由我評審';
|
||||
$lang->my->storyMenu->closedByMe = '由我關閉';
|
||||
|
||||
$lang->my->home = new stdclass();
|
||||
$lang->my->home->latest = '最新動態';
|
||||
$lang->my->home->action = "%s, %s <em>%s</em> %s <a href='%s'>%s</a>。";
|
||||
$lang->my->home->projects = $lang->projectCommon;
|
||||
$lang->my->home->products = $lang->productCommon;
|
||||
$lang->my->home->createProject = "創建一個{$lang->projectCommon}";
|
||||
$lang->my->home->createProduct = "創建一個{$lang->productCommon}";
|
||||
$lang->my->home->help = "<a href='http://www.zentao.net/help-read-79236.html' target='_blank'>幫助文檔</a>";
|
||||
$lang->my->home->noProductsTip = "這裡還沒有{$lang->productCommon}。";
|
||||
|
||||
$lang->my->form = new stdclass();
|
||||
$lang->my->form->lblBasic = '基本信息';
|
||||
$lang->my->form->lblContact = '聯繫信息';
|
||||
$lang->my->form->lblAccount = '帳號信息';
|
||||
<?php
|
||||
$lang->my->common = '我的地盤';
|
||||
|
||||
/* 方法列表。*/
|
||||
$lang->my->index = '首頁';
|
||||
$lang->my->todo = '我的待辦';
|
||||
$lang->my->calendar = '日程';
|
||||
$lang->my->task = '我的任務';
|
||||
$lang->my->bug = '我的Bug';
|
||||
$lang->my->testTask = '我的版本';
|
||||
$lang->my->testCase = '我的用例';
|
||||
$lang->my->story = '我的需求';
|
||||
$lang->my->myProject = "我的{$lang->projectCommon}";
|
||||
$lang->my->profile = '我的檔案';
|
||||
$lang->my->dynamic = '我的動態';
|
||||
$lang->my->editProfile = '修改檔案';
|
||||
$lang->my->changePassword = '修改密碼';
|
||||
$lang->my->unbind = '解除然之綁定';
|
||||
$lang->my->manageContacts = '維護聯繫人';
|
||||
$lang->my->deleteContacts = '刪除聯繫人';
|
||||
$lang->my->shareContacts = '共享聯繫人列表';
|
||||
$lang->my->limited = '受限操作(只能編輯與自己相關的內容)';
|
||||
$lang->my->score = '我的積分';
|
||||
$lang->my->scoreRule = '積分規則';
|
||||
$lang->my->noTodo = '暫時沒有待辦。';
|
||||
|
||||
$lang->my->taskMenu = new stdclass();
|
||||
$lang->my->taskMenu->assignedToMe = '指派給我';
|
||||
$lang->my->taskMenu->openedByMe = '由我創建';
|
||||
$lang->my->taskMenu->finishedByMe = '由我完成';
|
||||
$lang->my->taskMenu->closedByMe = '由我關閉';
|
||||
$lang->my->taskMenu->canceledByMe = '由我取消';
|
||||
|
||||
$lang->my->storyMenu = new stdclass();
|
||||
$lang->my->storyMenu->assignedToMe = '指派給我';
|
||||
$lang->my->storyMenu->openedByMe = '由我創建';
|
||||
$lang->my->storyMenu->reviewedByMe = '由我評審';
|
||||
$lang->my->storyMenu->closedByMe = '由我關閉';
|
||||
|
||||
$lang->my->home = new stdclass();
|
||||
$lang->my->home->latest = '最新動態';
|
||||
$lang->my->home->action = "%s, %s <em>%s</em> %s <a href='%s'>%s</a>。";
|
||||
$lang->my->home->projects = $lang->projectCommon;
|
||||
$lang->my->home->products = $lang->productCommon;
|
||||
$lang->my->home->createProject = "創建一個{$lang->projectCommon}";
|
||||
$lang->my->home->createProduct = "創建一個{$lang->productCommon}";
|
||||
$lang->my->home->help = "<a href='http://www.zentao.net/help-read-79236.html' target='_blank'>幫助文檔</a>";
|
||||
$lang->my->home->noProductsTip = "這裡還沒有{$lang->productCommon}。";
|
||||
|
||||
$lang->my->form = new stdclass();
|
||||
$lang->my->form->lblBasic = '基本信息';
|
||||
$lang->my->form->lblContact = '聯繫信息';
|
||||
$lang->my->form->lblAccount = '帳號信息';
|
||||
|
||||
@@ -21,8 +21,6 @@ class myModel extends model
|
||||
*/
|
||||
public function setMenu()
|
||||
{
|
||||
if(isset($this->lang->my->menu->account['link'])) $this->lang->my->menu->account['link'] = sprintf($this->lang->my->menu->account['link'], $this->app->user->realname);
|
||||
|
||||
/* Adjust the menu order according to the user role. */
|
||||
$role = $this->app->user->role;
|
||||
if($role == 'qa')
|
||||
|
||||
@@ -23,6 +23,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(empty($bugs)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->bug->noBug;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class="main-table table-bug" data-ride="table" method="post" action='<?php echo $this->createLink('bug', 'batchEdit', "productID=0");?>'>
|
||||
<?php $canBatchEdit = common::hasPriv('bug', 'batchEdit');?>
|
||||
<table class="table has-sort-head table-fixed". id='bugList'>
|
||||
@@ -89,7 +94,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($bugs):?>
|
||||
<div class="table-footer">
|
||||
<?php if($canBatchEdit):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
@@ -126,7 +130,7 @@
|
||||
echo "<div class='dropdown-menu search-list' data-ride='searchList'>";
|
||||
if($withSearch)
|
||||
{
|
||||
echo '<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">';
|
||||
echo '<div class="input-control search-box has-icon-left has-icon-right search-example">';
|
||||
echo '<input id="userSearchBox" type="search" class="form-control search-input" autocomplete="off" />';
|
||||
echo '<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>';
|
||||
echo '<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>';
|
||||
@@ -146,8 +150,8 @@
|
||||
</div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php js::set('listName', 'bugList')?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -29,7 +29,11 @@
|
||||
</div>
|
||||
<div id="mainContent" class="main-content">
|
||||
<div id="dynamics">
|
||||
<?php if(!empty($dateGroups)):?>
|
||||
<?php if(empty($dateGroups)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->action->noDynamic;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<?php $firstAction = '';?>
|
||||
<?php foreach($dateGroups as $date => $actions):?>
|
||||
<?php $isToday = date(DT_DATE4) == $date;?>
|
||||
@@ -60,10 +64,6 @@
|
||||
</ul>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php else:?>
|
||||
<div class="text-center text-muted">
|
||||
<?php echo $lang->action->noDynamic;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -20,6 +20,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class='main-table'>
|
||||
<?php if(empty($projects)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->project->noProject;?></span>
|
||||
<?php if(common::hasPriv('project', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('project', 'create'), "<i class='icon icon-plus'></i> " . $lang->my->home->createProject, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<table class="table has-sort-head table-fixed" id='projectList'>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -55,5 +66,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -23,6 +23,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(!$stories):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->story->noStory;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form id='myStoryForm' class="main-table table-story" data-ride="table" method="post">
|
||||
<table class="table has-sort-head table-fixed">
|
||||
<?php $vars = "type=$type&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
|
||||
@@ -86,7 +91,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($stories):?>
|
||||
<div class="table-footer">
|
||||
<?php if($canBatchEdit or $canBatchClose):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
@@ -147,7 +151,7 @@
|
||||
echo "<div class='dropdown-menu search-list' data-ride='searchList'>";
|
||||
if($withSearch)
|
||||
{
|
||||
echo '<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">';
|
||||
echo '<div class="input-control search-box has-icon-left has-icon-right search-example">';
|
||||
echo '<input id="userSearchBox" type="search" class="form-control search-input" autocomplete="off" />';
|
||||
echo '<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>';
|
||||
echo '<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>';
|
||||
@@ -174,7 +178,7 @@
|
||||
</div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -24,6 +24,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(empty($tasks)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->task->noTask;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form id='myTaskForm' class="main-table table-task" data-ride="table" method="post">
|
||||
<?php $canBatchEdit = common::hasPriv('task', 'batchEdit');?>
|
||||
<?php $canBatchClose = (common::hasPriv('task', 'batchClose') and $type != 'closedBy');?>
|
||||
@@ -117,7 +122,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($tasks):?>
|
||||
<div class="table-footer">
|
||||
<?php if($canBatchEdit or $canBatchClose):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
@@ -139,8 +143,8 @@
|
||||
</div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php js::set('listName', 'tasktable')?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -27,6 +27,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(empty($cases)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->testcase->noCase;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form id='myCaseForm' class="main-table table-case" data-ride="table" method="post">
|
||||
<table class="table has-sort-head" id='caseList'>
|
||||
<?php
|
||||
@@ -93,7 +98,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($cases):?>
|
||||
<div class="table-footer">
|
||||
<?php if($canBatchEdit or $canBatchRun):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
@@ -114,8 +118,8 @@
|
||||
</div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php js::set('listName', 'caseList')?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -24,6 +24,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class='main-table'>
|
||||
<?php if(empty($tasks)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->testtask->noTesttask;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<table class="table has-sort-head table-fixed" id='taskList'>
|
||||
<?php $vars = "type=$type&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
|
||||
<thead>
|
||||
@@ -66,7 +71,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($tasks):?>
|
||||
<div class="table-footer"><?php $pager->show('right', 'pagerjs');?></div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
|
||||
@@ -41,6 +41,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(empty($todos)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->my->noTodo;?></span>
|
||||
<?php if(common::hasPriv('todo', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('todo', 'create'), "<i class='icon icon-plus'></i> " . $lang->todo->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class="main-table table-todo" data-ride="table" method="post">
|
||||
<table class="table has-sort-head" id='todoList'>
|
||||
<?php $vars = "type=$type&account=$account&status=$status&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
|
||||
@@ -103,7 +114,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($todos):?>
|
||||
<div class="table-footer">
|
||||
<?php if($type != 'cycle'):?>
|
||||
<?php if(common::hasPriv('todo', 'batchEdit') or (common::hasPriv('todo', 'import2Today') and $importFuture)):?>
|
||||
@@ -135,8 +145,8 @@
|
||||
<?php endif;?>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../todo/view/assignto.html.php';?>
|
||||
<?php js::set('listName', 'todoList')?>
|
||||
|
||||
@@ -119,8 +119,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 = '<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->noProduct = 'No product. ';
|
||||
$lang->product->noMatched = '"%s" cannot be found.' . $lang->productCommon;
|
||||
|
||||
$lang->product->featureBar['browse']['allstory'] = $lang->product->allStory;
|
||||
|
||||
@@ -119,8 +119,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 = '<div>您现在还没有模块信息</div><div>请维护产品模块</div>';
|
||||
$lang->product->noProduct = '暂时没有产品,您现在可以';
|
||||
$lang->product->noStory = '暂时没有需求,您现在可以';
|
||||
$lang->product->noProduct = '暂时没有产品。';
|
||||
$lang->product->noMatched = '找不到包含"%s"的' . $lang->productCommon;
|
||||
|
||||
$lang->product->featureBar['browse']['allstory'] = $lang->product->allStory;
|
||||
|
||||
@@ -119,8 +119,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 = '<div>您現在還沒有模組信息</div><div>請維護產品模組</div>';
|
||||
$lang->product->noProduct = '暫時沒有產品,您現在可以';
|
||||
$lang->product->noStory = '暫時沒有需求,您現在可以';
|
||||
$lang->product->noProduct = '暫時沒有產品。';
|
||||
$lang->product->noMatched = '找不到包含"%s"的' . $lang->productCommon;
|
||||
|
||||
$lang->product->featureBar['browse']['allstory'] = $lang->product->allStory;
|
||||
|
||||
@@ -129,7 +129,7 @@ class productModel extends model
|
||||
|
||||
$dropMenuLink = helper::createLink('product', 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra");
|
||||
$output = "<div class='btn-group angle-btn'><div class='btn-group'><button data-toggle='dropdown' type='button' class='btn btn-limit' id='currentItem' title='{$currentProduct->name}'>{$currentProduct->name} <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div>";
|
||||
if($isMobile) $output = "<a id='currentItem' href=\"javascript:showSearchMenu('product', '$productID', '$currentModule', '$currentMethod', '$extra')\">{$currentProduct->name} <span class='icon-caret-down'></span></a><div id='currentItemDropMenu' class='hidden affix enter-from-bottom layer'></div>";
|
||||
|
||||
@@ -144,7 +144,7 @@ class productModel extends model
|
||||
{
|
||||
$dropMenuLink = helper::createLink('branch', 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra");
|
||||
$output .= "<div class='btn-group'><button id='currentBranch' data-toggle='dropdown' type='button' class='btn btn-limit'>{$branchName} <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div>";
|
||||
}
|
||||
else
|
||||
@@ -161,7 +161,7 @@ class productModel extends model
|
||||
{
|
||||
$dropMenuLink = helper::createLink('tree', 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra");
|
||||
$output .= "<div class='btn-group'><button id='currentModule' data-toggle='dropdown' type='button' class='btn btn-limit'>{$moduleName} <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div>";
|
||||
}
|
||||
else
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-60px'><?php echo $lang->idAB;?></th>
|
||||
<th class='required'><?php echo $lang->product->name;?></th>
|
||||
<th class='w-200px required'><?php echo $lang->product->name;?></th>
|
||||
<th class='w-150px required'><?php echo $lang->product->code;?></th>
|
||||
<th class='w-150px<?php echo zget($visibleFields, 'line', ' hidden') . zget($requiredFields, 'line', '', ' required');?>'><?php echo $lang->product->line;?></th>
|
||||
<th class='w-150px<?php echo zget($visibleFields, 'PO', ' hidden') . zget($requiredFields, 'PO', '', ' required');?>'><?php echo $lang->product->PO;?></th>
|
||||
|
||||
@@ -138,6 +138,17 @@
|
||||
</div>
|
||||
<div class="main-col">
|
||||
<div class="cell<?php if($browseType == 'bysearch') echo ' show';?>" id="queryBox"></div>
|
||||
<?php if(empty($stories)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->story->noStory;?></span>
|
||||
<?php if(common::hasPriv('story', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></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'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class="main-table table-story skip-iframe-modal" method="post" id='productStoryForm'>
|
||||
<div class="table-header fixed-right">
|
||||
<nav class="btn-toolbar pull-right"></nav>
|
||||
@@ -148,36 +159,36 @@
|
||||
$vars = "productID=$productID&branch=$branch&browseType=$browseType¶m=$param&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";
|
||||
|
||||
if($useDatatable) include '../../common/view/datatable.html.php';
|
||||
|
||||
$setting = $this->datatable->getSetting('product');
|
||||
$widths = $this->datatable->setFixedFieldWidth($setting);
|
||||
$columns = 0;
|
||||
?>
|
||||
<div class="table-responsive">
|
||||
<table class="table has-sort-head" id='storyList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php
|
||||
foreach($setting as $key => $value)
|
||||
{
|
||||
if($value->show)
|
||||
{
|
||||
$this->datatable->printHead($value, $orderBy, $vars);
|
||||
$columns ++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($stories as $story):?>
|
||||
<tr data-id='<?php echo $story->id?>' data-estimate='<?php echo $story->estimate?>' data-cases='<?php echo zget($storyCases, $story->id, 0);?>'>
|
||||
<?php foreach($setting as $key => $value) $this->story->printCell($value, $story, $users, $branches, $storyStages, $modulePairs, $storyTasks, $storyBugs, $storyCases, $useDatatable ? 'datatable' : 'table');?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php if($stories):?>
|
||||
<?php if(!$useDatatable) echo '<div class="table-responsive">';?>
|
||||
<table class='table has-sort-head<?php if($useDatatable) echo ' datatable';?>' id='storyList' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php
|
||||
foreach($setting as $key => $value)
|
||||
{
|
||||
if($value->show)
|
||||
{
|
||||
$this->datatable->printHead($value, $orderBy, $vars);
|
||||
$columns ++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($stories as $story):?>
|
||||
<tr data-id='<?php echo $story->id?>' data-estimate='<?php echo $story->estimate?>' data-cases='<?php echo zget($storyCases, $story->id, 0);?>'>
|
||||
<?php foreach($setting as $key => $value) $this->story->printCell($value, $story, $users, $branches, $storyStages, $modulePairs, $storyTasks, $storyBugs, $storyCases, $useDatatable ? 'datatable' : 'table');?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if(!$useDatatable) echo '</div>';?>
|
||||
<div class="table-footer">
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
@@ -281,7 +292,7 @@
|
||||
<div class="dropdown-menu search-list" data-ride="searchList">
|
||||
<?php $withSearch = count($modules) > 8;?>
|
||||
<?php if($withSearch):?>
|
||||
<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
@@ -309,7 +320,7 @@
|
||||
$withSearch = count($plans) > 8;
|
||||
?>
|
||||
<?php if($withSearch):?>
|
||||
<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
@@ -338,7 +349,7 @@
|
||||
echo html::select('assignedTo', $users, '', 'class="hidden"');
|
||||
if($withSearch):
|
||||
?>
|
||||
<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
@@ -359,12 +370,8 @@
|
||||
<div class="table-statistic"><?php echo $summary;?></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php elseif(common::hasPriv('story', 'create')):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->product->noStory;?></span> <?php common::printLink('story', 'create', "productID={$productID}&branch={$branch}&moduleID={$moduleID}", "<i class='icon icon-plus'></i> " . $lang->story->create, '', "class='btn btn-info'");?></p>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
@@ -379,7 +386,8 @@ $(function()
|
||||
{
|
||||
statisticCreator: function(table)
|
||||
{
|
||||
var $checkedRows = table.$.find('tbody>tr.checked');
|
||||
var $checkedRows = table.getTable().find(table.isDataTable ? '.datatable-row-left.checked' : 'tbody>tr.checked');
|
||||
var $originTable = table.isDataTable ? table.$.find('.datatable-origin') : null;
|
||||
var checkedTotal = $checkedRows.length;
|
||||
if(!checkedTotal) return;
|
||||
|
||||
@@ -388,6 +396,10 @@ $(function()
|
||||
$checkedRows.each(function()
|
||||
{
|
||||
var $row = $(this);
|
||||
if ($originTable)
|
||||
{
|
||||
$row = $originTable.find('tbody>tr[data-id="' + $row.data('id') + '"]');
|
||||
}
|
||||
var data = $row.data();
|
||||
checkedEstimate += data.estimate;
|
||||
checkedCase += data.cases;
|
||||
|
||||
@@ -21,6 +21,17 @@
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div id='mainContent' class='main-table'>
|
||||
<?php if(empty($builds)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->build->noBuild;?></span>
|
||||
<?php if(common::hasPriv('build', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('build', 'create', "productID=$product->id"), "<i class='icon icon-plus'></i> " . $lang->build->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<table class='table' id='buildList'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
@@ -57,5 +68,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -32,7 +32,11 @@
|
||||
</div>
|
||||
<div id="mainContent" class="main-content">
|
||||
<div id="dynamics">
|
||||
<?php if(!empty($dateGroups)):?>
|
||||
<?php if(empty($dateGroups)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->action->noDynamic;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<?php $firstAction = '';?>
|
||||
<?php foreach($dateGroups as $date => $actions):?>
|
||||
<?php $isToday = date(DT_DATE4) == $date;?>
|
||||
@@ -63,10 +67,6 @@
|
||||
</ul>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php else:?>
|
||||
<div class="text-center text-muted">
|
||||
<?php echo $lang->action->noDynamic;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -18,12 +18,4 @@
|
||||
<?php else:?>
|
||||
<?php echo $this->fetch('block', 'dashboard', 'module=product');?>
|
||||
<?php endif;?>
|
||||
<script>
|
||||
<?php if(isset($config->product->homepage) && $config->product->homepage != 'index'):?>
|
||||
$(function()
|
||||
{
|
||||
$('#modulemenu .nav li.right:last').after("<li class='right'><a style='font-size:12px' href='javascript:setHomepage(\"product\", \"index\")'><i class='icon icon-cog'></i> <?php echo $lang->homepage?></a></li>")
|
||||
});
|
||||
<?php endif;?>
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -16,6 +16,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(empty($projectStats)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->project->noProject;?></span>
|
||||
<?php if(common::hasPriv('project', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('project', 'create'), "<i class='icon icon-plus'></i> " . $lang->project->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class='main-table table-project'>
|
||||
<table class="table table-fixed">
|
||||
<thead>
|
||||
@@ -69,5 +80,6 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -26,6 +26,28 @@
|
||||
<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
|
||||
$hasRoadmaps = false;
|
||||
foreach($roadmaps as $year => $yearRoadmaps)
|
||||
{
|
||||
if(isset($yearRoadmaps[$branchKey]))
|
||||
{
|
||||
$hasRoadmaps = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php if(!$hasRoadmaps):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->release->noRelease;?></span>
|
||||
<?php if(common::hasPriv('release', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('release', 'create', "productID=$product->id&branch=$branchKey"), "<i class='icon icon-plus'></i> " . $lang->release->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<?php foreach($roadmaps as $year => $yearRoadmaps):?>
|
||||
<?php if(!isset($yearRoadmaps[$branchKey])) continue;?>
|
||||
<?php $groupRoadmaps = zget($yearRoadmaps, $branchKey, array());?>
|
||||
@@ -55,6 +77,7 @@
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
|
||||
@@ -37,6 +37,7 @@ $lang->productplan->unlinkedBugs = 'Unlinked';
|
||||
$lang->productplan->confirmDelete = "Do you want to delete this Plan?";
|
||||
$lang->productplan->confirmUnlinkStory = "Do you want to unlink this Story?";
|
||||
$lang->productplan->confirmUnlinkBug = "Do you want to unlink this Bug?";
|
||||
$lang->productplan->noPlan = 'No plans. ';
|
||||
|
||||
$lang->productplan->id = 'ID';
|
||||
$lang->productplan->product = $lang->productCommon;
|
||||
|
||||
@@ -37,6 +37,7 @@ $lang->productplan->unlinkedBugs = '未关联Bug';
|
||||
$lang->productplan->confirmDelete = "您确认删除该计划吗?";
|
||||
$lang->productplan->confirmUnlinkStory = "您确认移除该需求吗?";
|
||||
$lang->productplan->confirmUnlinkBug = "您确认移除该Bug吗?";
|
||||
$lang->productplan->noPlan = '暂时没有计划。';
|
||||
|
||||
$lang->productplan->id = '编号';
|
||||
$lang->productplan->product = $lang->productCommon;
|
||||
|
||||
@@ -37,6 +37,7 @@ $lang->productplan->unlinkedBugs = '未關聯Bug';
|
||||
$lang->productplan->confirmDelete = "您確認刪除該計劃嗎?";
|
||||
$lang->productplan->confirmUnlinkStory = "您確認移除該需求嗎?";
|
||||
$lang->productplan->confirmUnlinkBug = "您確認移除該Bug嗎?";
|
||||
$lang->productplan->noPlan = '暫時沒有計劃。';
|
||||
|
||||
$lang->productplan->id = '編號';
|
||||
$lang->productplan->product = $lang->productCommon;
|
||||
|
||||
@@ -28,6 +28,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(empty($plans)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->productplan->noPlan;?></span>
|
||||
<?php if(common::hasPriv('productplan', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('productplan', 'create', "productID=$product->id&branch=$branch"), "<i class='icon icon-plus'></i> " . $lang->productplan->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class='main-table table-productplan' data-ride='table' method='post' id='productplanForm' action='<?php echo inlink('batchEdit', "productID=$product->id&branch=$branch")?>'>
|
||||
<table class='table has-sort-head' id="productplanList">
|
||||
<thead>
|
||||
@@ -96,7 +107,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($plans):?>
|
||||
<div class="table-footer">
|
||||
<?php if(common::hasPriv('productplan', 'batchEdit')):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
@@ -106,7 +116,7 @@
|
||||
<?php endif;?>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
.table-children {border-left: 2px solid #cbd0db; border-right: 2px solid #cbd0db;}
|
||||
.table-children.table-child-top {border-top: 2px solid #cbd0db;}
|
||||
.table-children.table-child-bottom {border-bottom: 2px solid #cbd0db;}
|
||||
.table td {overflow:hidden;}
|
||||
.table td.has-child > .task-toggle {color: #838a9d; position: relative; top: -1px;}
|
||||
.table td.has-child > .task-toggle:hover {color: #006af1; cursor: pointer;}
|
||||
.table td.has-child > .task-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s;}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
.boards {display: table; table-layout: fixed; width: auto; }
|
||||
.boards .board:not(:last-child) {border-right: 1px solid #ddd;}
|
||||
.board {display: table-cell; width: 16.666666667%; padding: 10px; border: 1px solid transparent; transition: background-color .2s, opacity .2s; vertical-align: top;}
|
||||
.board-item {border: 1px solid #EBEBEB; padding: 5px 10px; cursor: move; border-radius: 2px; background-color: #fff; transition: border .2s, opacity .2s; overflow: hidden;}
|
||||
.board-item.disabled {cursor: not-allowed;}
|
||||
.board-item:hover {border-color: #ccc;}
|
||||
.board-item > .title {line-height: 20px; max-height: 40px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;}
|
||||
.board-item > .title {line-height: 20px; max-height: 40px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; word-break: break-all;}
|
||||
.board-item > .info {line-height: 22px; margin-top: 6px;}
|
||||
.board-item + .board-item {margin-top: 10px;}
|
||||
.board-item .task-left {float: right; font-size: 12px; color: #a6aab8;}
|
||||
@@ -36,4 +37,5 @@
|
||||
#kanban th.c-board {color: #3c4353; font-weight: bold;}
|
||||
#kanban .fix-table-copy-wrapper {overflow: visible!important;}
|
||||
#kanban .fix-table-copy-wrapper th.c-board {color: #eee;}
|
||||
#kanban .fix-table-copy-wrapper th.c-board .btn-link {color: #fff;}
|
||||
#kanban .fix-table-copy-wrapper th.c-board .btn-link {color: #fff;}
|
||||
#kanban .group-title {word-break: break-all; line-height: 16px; padding: 3px 0; display: block;}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
.boards {display: table; table-layout: fixed; width: auto; }
|
||||
.boards .board:not(:last-child) {border-right: 1px solid #ddd;}
|
||||
.board {display: table-cell; width: 16.666666667%; padding: 10px; border: 1px solid transparent; transition: background-color .2s, opacity .2s; vertical-align: top;}
|
||||
.board-item {border: 1px solid #EBEBEB; padding: 5px 10px; cursor: move; border-radius: 2px; background-color: #fff; transition: border .2s, opacity .2s; overflow: hidden;}
|
||||
.board-item.disabled {cursor: not-allowed;}
|
||||
.board-item:hover {border-color: #ccc;}
|
||||
.board-item > .title {line-height: 20px; max-height: 40px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;}
|
||||
.board-item > .title {line-height: 20px; max-height: 40px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; word-break: break-all;}
|
||||
.board-item > .info {line-height: 22px; margin-top: 6px;}
|
||||
.board-item + .board-item {margin-top: 10px;}
|
||||
.board-item .task-left {float: right; font-size: 12px; color: #a6aab8;}
|
||||
|
||||
@@ -6,3 +6,6 @@
|
||||
#burnLegend > div {position: relative; padding-left: 30px;}
|
||||
#burnLegend > div:before {content: ' '; display: block; position: absolute; width: 20px; left: 0; top: 8px; height: 2px; background: #EEEEEE;}
|
||||
#burnLegend > div.line-real:before {background: #006AF1;}
|
||||
|
||||
.panel-heading {padding-right: 55px;}
|
||||
|
||||
|
||||
@@ -233,7 +233,7 @@ $(function()
|
||||
var $toggle = $(this);
|
||||
var id = $(this).data('id');
|
||||
var isCollapsed = $toggle.toggleClass('collapsed').hasClass('collapsed');
|
||||
$toggle.closest('tbody').find('tr.parent-' + id).toggle(!isCollapsed);
|
||||
$toggle.closest('[data-ride="table"]').find('tr.parent-' + id).toggle(!isCollapsed);
|
||||
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
$(function()
|
||||
{
|
||||
$('.c-boards').each(function()
|
||||
{
|
||||
var $boardsWrapper = $(this).find('.boards-wrapper');
|
||||
if($boardsWrapper.height() < $(this).height())
|
||||
{
|
||||
$boardsWrapper.find('.boards').css('height', $(this).height());
|
||||
}
|
||||
});
|
||||
|
||||
var boardID = '';
|
||||
var onlybody = config.requestType == 'GET' ? "&onlybody=yes" : "?onlybody=yes";
|
||||
$.cookie('selfClose', 0, {expires:config.cookieLife, path:config.webRoot});
|
||||
|
||||
@@ -32,9 +32,9 @@ $(function()
|
||||
}
|
||||
else if (level === 'story')
|
||||
{
|
||||
$('[data-type=story]').addClass('btn-active-text');
|
||||
taskTree.collapse();
|
||||
taskTree.show($taskTree.find('li.item-story').parent().parent(), true);
|
||||
$('[data-type=story]').addClass('btn-active-text');
|
||||
}
|
||||
$('#main').toggleClass('tree-show-root', level === 'root');
|
||||
};
|
||||
|
||||
@@ -220,7 +220,8 @@ $lang->project->copyFromProject = "Copy from {$lang->projectCommon} <strong>%s</
|
||||
$lang->project->cancelCopy = 'Cancel Copy';
|
||||
$lang->project->byPeriod = 'By Time';
|
||||
$lang->project->byUser = 'By User';
|
||||
$lang->project->noProject = 'No project. You could ';
|
||||
$lang->project->noProject = 'No projects. ';
|
||||
$lang->project->noMembers = 'No members. ';
|
||||
|
||||
/* 交互提示。*/
|
||||
$lang->project->confirmDelete = "Do you want to delete {$lang->projectCommon}[%s]?";
|
||||
|
||||
@@ -220,7 +220,8 @@ $lang->project->copyFromProject = "复制自{$lang->projectCommon} <strong>%s</s
|
||||
$lang->project->cancelCopy = '取消复制';
|
||||
$lang->project->byPeriod = '按时间段';
|
||||
$lang->project->byUser = '按用户';
|
||||
$lang->project->noProject = '暂时没有项目,您现在可以';
|
||||
$lang->project->noProject = '暂时没有项目。';
|
||||
$lang->project->noMembers = '暂时没有团队成员。';
|
||||
|
||||
/* 交互提示。*/
|
||||
$lang->project->confirmDelete = "您确定删除{$lang->projectCommon}[%s]吗?";
|
||||
|
||||
@@ -220,7 +220,8 @@ $lang->project->copyFromProject = "複製自{$lang->projectCommon} <strong>%s</s
|
||||
$lang->project->cancelCopy = '取消複製';
|
||||
$lang->project->byPeriod = '按時間段';
|
||||
$lang->project->byUser = '按用戶';
|
||||
$lang->project->noProject = '暫時沒有項目,您現在可以';
|
||||
$lang->project->noProject = '暫時沒有項目。';
|
||||
$lang->project->noMembers = '暫時沒有團隊成員。';
|
||||
|
||||
/* 交互提示。*/
|
||||
$lang->project->confirmDelete = "您確定刪除{$lang->projectCommon}[%s]嗎?";
|
||||
|
||||
@@ -204,11 +204,11 @@ class projectModel extends model
|
||||
|
||||
$dropMenuLink = helper::createLink('project', 'ajaxGetDropMenu', "objectID=$projectID&module=$currentModule&method=$currentMethod&extra=$extra");
|
||||
$output = "<div class='btn-group angle-btn'><div class='btn-group'><button data-toggle='dropdown' type='button' class='btn btn-limit' id='currentItem' title='{$currentProject->name}'>{$currentProject->name} <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div></div>";
|
||||
if($isMobile) $output = "<a id='currentItem' href=\"javascript:showSearchMenu('project', '$projectID', '$currentModule', '$currentMethod', '$extra')\">{$currentProject->name} <span class='icon-caret-down'></span></a><div id='currentItemDropMenu' class='hidden affix enter-from-bottom layer'></div>";
|
||||
|
||||
if($buildID)
|
||||
if($buildID and !$isMobile)
|
||||
{
|
||||
setCookie('lastBuild', $buildID, $this->config->cookieLife, $this->config->webRoot);
|
||||
$currentBuild = $this->loadModel('build')->getById($buildID);
|
||||
@@ -217,7 +217,7 @@ class projectModel extends model
|
||||
{
|
||||
$dropMenuLink = helper::createLink('build', 'ajaxGetProjectBuilds', "projectID=$projectID&productID=&varName=dropdownList");
|
||||
$output .= "<div class='btn-group angle-btn'><div class='btn-group'><button data-toggle='dropdown' type='button' class='btn btn-limit' id='currentItem'>{$currentBuild->name} <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div></div>";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,17 @@
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<div class="cell" id="queryBox"></div>
|
||||
<?php if(empty($bugs)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->bug->noBug;?></span>
|
||||
<?php if(common::hasPriv('bug', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('bug', 'create', "productID=$productID&branch=$branchID&extra=projectID=$project->id"), "<i class='icon icon-plus'></i> " . $lang->bug->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class='main-table' method='post' id='projectBugForm' data-ride="table">
|
||||
<table class='table has-sort-head' id='bugList'>
|
||||
<?php $canBatchAssignTo = common::hasPriv('bug', 'batchAssignTo');?>
|
||||
@@ -90,7 +101,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($bugs):?>
|
||||
<div class='table-footer'>
|
||||
<?php if($canBatchAssignTo):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
@@ -103,7 +113,7 @@
|
||||
echo "<div class='dropdown-menu search-list' data-ride='searchList'>";
|
||||
if($withSearch)
|
||||
{
|
||||
echo '<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">';
|
||||
echo '<div class="input-control search-box has-icon-left has-icon-right search-example">';
|
||||
echo '<input id="userSearchBox" type="search" class="form-control search-input" autocomplete="off" />';
|
||||
echo '<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>';
|
||||
echo '<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>';
|
||||
@@ -123,8 +133,8 @@
|
||||
<?php endif;?>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php js::set('replaceID', 'bugList');?>
|
||||
<?php js::set('browseType', $type);?>
|
||||
|
||||
@@ -14,10 +14,12 @@
|
||||
<?php js::set('confirmDelete', $lang->build->confirmDelete)?>
|
||||
<div id="mainMenu" class="clearfix table-row">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php if(!empty($projectBuilds)):?>
|
||||
<div class="pull-left table-group-btns">
|
||||
<button type="button" class="btn btn-link group-collapse-all"><?php echo $lang->project->treeLevel['root'];?> <i class="icon-fold-all"> </i></button>
|
||||
<button type="button" class="btn btn-link group-expand-all"><?php echo $lang->project->treeLevel['all'];?> <i class="icon-unfold-all"> </i></button>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<span class='btn btn-link btn-active-text'>
|
||||
<span class='text'><?php echo $lang->project->build;?></span>
|
||||
<span class='label label-light label-badge'><?php echo $buildsTotal;?></span>
|
||||
@@ -28,6 +30,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(empty($projectBuilds)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->build->noBuild;?></span>
|
||||
<?php if(common::hasPriv('build', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('build', 'create', "project=$project->id"), "<i class='icon icon-plus'></i> " . $lang->build->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='main-table' data-ride="table" data-checkable="false" data-group="true">
|
||||
<table class="table table-grouped text-center" id='buildList'>
|
||||
<thead>
|
||||
@@ -99,5 +112,6 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
echo $lang->project->howToUpdateBurn;
|
||||
?>
|
||||
<?php if($interval):?>
|
||||
<div class='input-control w-100px'>
|
||||
<div class='input-control w-120px'>
|
||||
<?php echo html::select('interval', $dayList, $interval, "class='form-control chosen'");?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -32,8 +32,12 @@
|
||||
</div>
|
||||
|
||||
<div id="mainContent" class="main-content">
|
||||
<?php if(empty($dateGroups)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->action->noDynamic;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div id="dynamics">
|
||||
<?php if(!empty($dateGroups)):?>
|
||||
<?php $firstAction = '';?>
|
||||
<?php foreach($dateGroups as $date => $actions):?>
|
||||
<?php $isToday = date(DT_DATE4) == $date;?>
|
||||
@@ -64,12 +68,8 @@
|
||||
</ul>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php else:?>
|
||||
<div class="text-center text-muted">
|
||||
<?php echo $lang->action->noDynamic;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php if(!empty($firstAction)):?>
|
||||
<?php
|
||||
|
||||
@@ -13,10 +13,12 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id="mainMenu" class="clearfix table-row">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php if(!empty($tasks)):?>
|
||||
<div class="pull-left table-group-btns">
|
||||
<button type="button" class="btn btn-link group-collapse-all"><?php echo $lang->project->treeLevel['root'];?> <i class="icon-fold-all"></i></button>
|
||||
<button type="button" class="btn btn-link group-expand-all"><?php echo $lang->project->treeLevel['all'];?> <i class="icon-unfold-all"></i></button>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php if(isset($lang->project->groupFilter[$groupBy])):?>
|
||||
<?php foreach($lang->project->groupFilter[$groupBy] as $filterKey => $name):?>
|
||||
<?php
|
||||
@@ -71,6 +73,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id='tasksTable' class='main-table' data-ride='table' data-checkable='false' data-group='true' data-hot='true'>
|
||||
<?php if(empty($tasks)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->task->noTask;?></span>
|
||||
<?php if(common::hasPriv('task', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')), "<i class='icon icon-plus'></i> " . $lang->task->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<table class="table table-grouped text-center">
|
||||
<thead>
|
||||
<tr class="<?php if($allCount) echo 'divider';?>">
|
||||
@@ -198,5 +211,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -52,6 +52,28 @@ if($allCols) $taskCols = array('wait', 'doing', 'pause', 'done', 'cancel', 'clos
|
||||
$account = $this->app->user->account;
|
||||
?>
|
||||
<div id="kanban" class="main-table" data-ride="table" data-checkable="false" data-group="true">
|
||||
<?php
|
||||
$hasTask = false;
|
||||
foreach($kanbanGroup as $group)
|
||||
{
|
||||
if(count(get_object_vars($group)) > 0)
|
||||
{
|
||||
$hasTask = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php if(!$hasTask):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->task->noTask;?></span>
|
||||
<?php if(common::hasPriv('task', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')), "<i class='icon icon-plus'></i> " . $lang->task->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<table class="table table-grouped text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -151,6 +173,7 @@ $account = $this->app->user->account;
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php echo js::set('projectID', $projectID);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -78,6 +78,17 @@
|
||||
</div>
|
||||
<div class="main-col">
|
||||
<div class="cell" id="queryBox"></div>
|
||||
<?php if(empty($stories)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->story->noStory;?></span>
|
||||
<?php if(common::hasPriv('project', 'linkStory')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('project', 'linkStory', "project=$project->id"), "<i class='icon icon-link'></i> " . $lang->project->linkStory, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class='main-table table-story skip-iframe-modal' method='post' id='projectStoryForm'>
|
||||
<div class="table-header fixed-right">
|
||||
<nav class="btn-toolbar pull-right"></nav>
|
||||
@@ -197,11 +208,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if(!$stories):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->product->noStory;?></span> <?php common::printLink('project', 'linkStory', "project=$project->id", "<i class='icon icon-link'></i> " . $lang->project->linkStory, '', "class='btn btn-info'");?></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='table-footer'>
|
||||
<?php if($canBatchEdit or $canBatchClose):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
@@ -245,8 +251,8 @@
|
||||
<div class="table-statistic"><?php echo $summary;?></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -44,6 +44,17 @@ $cols = array('projected', 'developing', 'developed', 'testing', 'tested', 'v
|
||||
$account = $this->app->user->account;
|
||||
?>
|
||||
<div id="kanban" class="main-table" data-ride="table" data-checkable="false" data-group="true">
|
||||
<?php if(empty($stories)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->story->noStory;?></span>
|
||||
<?php if(common::hasPriv('project', 'linkStory')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('project', 'linkStory', "project=$project->id"), "<i class='icon icon-link'></i> " . $lang->project->linkStory, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<table class="table table-grouped text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -82,6 +93,7 @@ $account = $this->app->user->account;
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php js::set('projectID', $projectID);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -165,6 +165,17 @@ js::set('browseType', $browseType);
|
||||
</div>
|
||||
<div class="main-col">
|
||||
<div class="cell<?php if($browseType == 'bysearch') echo ' show';?>" id="queryBox"></div>
|
||||
<?php if(empty($tasks)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->task->noTask;?></span>
|
||||
<?php if(common::hasPriv('task', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')), "<i class='icon icon-plus'></i> " . $lang->task->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class="main-table table-task skip-iframe-modal" method="post" id='projectTaskForm'>
|
||||
<div class="table-header fixed-right">
|
||||
<nav class="btn-toolbar pull-right"></nav>
|
||||
@@ -174,6 +185,8 @@ js::set('browseType', $browseType);
|
||||
$useDatatable = (isset($config->datatable->$datatableId->mode) and $config->datatable->$datatableId->mode == 'datatable');
|
||||
$vars = "projectID=$project->id&status=$status&parma=$param&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage";
|
||||
|
||||
if($useDatatable) include '../../common/view/datatable.html.php';
|
||||
|
||||
$customFields = $this->datatable->getSetting('project');
|
||||
if($project->type == 'ops')
|
||||
{
|
||||
@@ -185,41 +198,41 @@ js::set('browseType', $browseType);
|
||||
$widths = $this->datatable->setFixedFieldWidth($customFields);
|
||||
$columns = 0;
|
||||
?>
|
||||
<div class="table-responsive">
|
||||
<table class='table has-sort-head' id='taskList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php
|
||||
foreach($customFields as $field)
|
||||
{
|
||||
if($field->show)
|
||||
{
|
||||
$this->datatable->printHead($field, $orderBy, $vars);
|
||||
$columns++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($tasks as $task):?>
|
||||
<tr data-id='<?php echo $task->id;?>' data-status='<?php echo $task->status?>' data-estimate='<?php echo $task->estimate?>' data-consumed='<?php echo $task->consumed?>' data-left='<?php echo $task->left?>'>
|
||||
<?php foreach($customFields as $field) $this->task->printCell($field, $task, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table');?>
|
||||
</tr>
|
||||
<?php if(!empty($task->children)):?>
|
||||
<?php foreach($task->children as $key => $child):?>
|
||||
<?php $class = $key == 0 ? ' table-child-top' : '';?>
|
||||
<?php $class .= ($key + 1 == count($task->children)) ? ' table-child-bottom' : '';?>
|
||||
<tr class='table-children<?php echo $class;?> parent-<?php echo $task->id;?>' data-id='<?php echo $child->id?>' data-status='<?php echo $child->status?>' data-estimate='<?php echo $child->estimate?>' data-consumed='<?php echo $child->consumed?>' data-left='<?php echo $child->left?>'>
|
||||
<?php foreach($customFields as $field) $this->task->printCell($field, $child, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table', true);?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php if($tasks):?>
|
||||
<?php if(!$useDatatable) echo '<div class="table-responsive">';?>
|
||||
<table class='table has-sort-head<?php if($useDatatable) echo ' datatable';?>' id='taskList' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php
|
||||
foreach($customFields as $field)
|
||||
{
|
||||
if($field->show)
|
||||
{
|
||||
$this->datatable->printHead($field, $orderBy, $vars);
|
||||
$columns++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($tasks as $task):?>
|
||||
<tr data-id='<?php echo $task->id;?>' data-status='<?php echo $task->status?>' data-estimate='<?php echo $task->estimate?>' data-consumed='<?php echo $task->consumed?>' data-left='<?php echo $task->left?>'>
|
||||
<?php foreach($customFields as $field) $this->task->printCell($field, $task, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table');?>
|
||||
</tr>
|
||||
<?php if(!empty($task->children)):?>
|
||||
<?php foreach($task->children as $key => $child):?>
|
||||
<?php $class = $key == 0 ? ' table-child-top' : '';?>
|
||||
<?php $class .= ($key + 1 == count($task->children)) ? ' table-child-bottom' : '';?>
|
||||
<tr class='table-children<?php echo $class;?> parent-<?php echo $task->id;?>' data-id='<?php echo $child->id?>' data-status='<?php echo $child->status?>' data-estimate='<?php echo $child->estimate?>' data-consumed='<?php echo $child->consumed?>' data-left='<?php echo $child->left?>'>
|
||||
<?php foreach($customFields as $field) $this->task->printCell($field, $child, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table', true);?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if(!$useDatatable) echo '</div>';?>
|
||||
|
||||
<div class="table-footer">
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
@@ -255,7 +268,7 @@ js::set('browseType', $browseType);
|
||||
<div class="dropdown-menu search-list" data-ride="searchList">
|
||||
<?php $withSearch = count($modules) > 10;?>
|
||||
<?php if($withSearch):?>
|
||||
<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
@@ -284,7 +297,7 @@ js::set('browseType', $browseType);
|
||||
echo html::select('assignedTo', $memberPairs, '', 'class="hidden"');
|
||||
if($withSearch):
|
||||
?>
|
||||
<div class="input-control search-box search-box-circle has-icon-left has-icon-right search-example">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
@@ -306,8 +319,8 @@ js::set('browseType', $browseType);
|
||||
<div class="table-statistic"><?php echo $summary;?></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('replaceID', 'taskList')?>
|
||||
@@ -320,7 +333,8 @@ $(function()
|
||||
{
|
||||
statisticCreator: function(table)
|
||||
{
|
||||
var $checkedRows = table.$.find('tbody>tr.checked');
|
||||
var $checkedRows = table.getTable().find(table.isDataTable ? '.datatable-row-left.checked' : 'tbody>tr.checked');
|
||||
var $originTable = table.isDataTable ? table.$.find('.datatable-origin') : null;
|
||||
var checkedTotal = $checkedRows.length;
|
||||
if(!checkedTotal) return;
|
||||
|
||||
@@ -332,6 +346,10 @@ $(function()
|
||||
$checkedRows.each(function()
|
||||
{
|
||||
var $row = $(this);
|
||||
if ($originTable)
|
||||
{
|
||||
$row = $originTable.find('tbody>tr[data-id="' + $row.data('id') + '"]');
|
||||
}
|
||||
var data = $row.data();
|
||||
var status = data.status;
|
||||
if(status === 'wait') checkedWait++;
|
||||
|
||||
@@ -21,16 +21,27 @@
|
||||
if(commonModel::isTutorialMode())
|
||||
{
|
||||
$wizardParams = helper::safe64Encode("projectID=$project->id");
|
||||
echo html::a($this->createLink('tutorial', 'wizard', "module=project&method=managemembers¶ms=$wizardParams"), $lang->project->manageMembers, '', "class='btn btn-primary manage-team-btn'");
|
||||
echo html::a($this->createLink('tutorial', 'wizard', "module=project&method=manageMembers¶ms=$wizardParams"), "<i class='icon icon-persons'></i> " . $lang->project->manageMembers, '', "class='btn btn-primary manage-team-btn'");
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!empty($app->user->admin) or empty($app->user->rights['rights']['my']['limited'])) common::printLink('project', 'managemembers', "projectID=$project->id", $lang->project->manageMembers, '', "class='btn btn-primary manage-team-btn'");
|
||||
if(!empty($app->user->admin) or empty($app->user->rights['rights']['my']['limited'])) common::printLink('project', 'manageMembers', "projectID=$project->id", "<i class='icon icon-persons'></i> " . $lang->project->manageMembers, '', "class='btn btn-primary manage-team-btn'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent'>
|
||||
<?php if(empty($teamMembers)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->project->noMembers;?></span>
|
||||
<?php if((!empty($app->user->admin) or empty($app->user->rights['rights']['my']['limited'])) && common::hasPriv('project', 'manageMembers')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('project', 'manageMembers', "projectID=$project->id"), "<i class='icon icon-persons'></i> " . $lang->project->manageMembers, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class='main-table'>
|
||||
<table class='table' id='memberList'>
|
||||
<thead>
|
||||
@@ -79,5 +90,6 @@
|
||||
<div class='table-statistic'><?php echo $lang->team->totalHours . ':' . "<strong>$totalHours{$lang->project->workHour}</strong>";?></div>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -14,10 +14,12 @@
|
||||
<?php js::set('confirmDelete', $lang->testtask->confirmDelete)?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php if(!empty($tasks)):?>
|
||||
<div class="pull-left table-group-btns">
|
||||
<button type="button" class="btn btn-link group-collapse-all"><?php echo $lang->testtask->collapseAll;?> <i class="icon-fold-all muted"></i></button>
|
||||
<button type="button" class="btn btn-link group-expand-all"><?php echo $lang->testtask->expandAll;?> <i class="icon-unfold-all muted"></i></button>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php $total = 0;?>
|
||||
<?php foreach($tasks as $productTasks) $total += count($productTasks);?>
|
||||
<a href='' class='btn btn-link btn-active-text'>
|
||||
@@ -31,6 +33,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(empty($tasks)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->testtask->noTesttask;?></span>
|
||||
<?php if(common::hasPriv('testtask', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('testtask', 'create', "product=0&project=$projectID"), "<i class='icon icon-plus'></i> " . $lang->testtask->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class="main-table table-testtask" data-ride="table" data-group="true" method="post" target='hiddenwin' id='testtaskForm'>
|
||||
<table class="table table-grouped has-sort-head" id='taskList'>
|
||||
<thead>
|
||||
@@ -116,7 +129,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($tasks):?>
|
||||
<div class="table-footer">
|
||||
<?php if($canTestReport):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
@@ -130,7 +142,7 @@
|
||||
<?php endif;?>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -14,14 +14,16 @@
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php foreach ($lang->project->treeLevel as $name => $btnLevel):?>
|
||||
<?php
|
||||
$icon = '';
|
||||
if($name == 'root') $icon = ' <i class="icon-fold-all"></i>';
|
||||
if($name == 'all') $icon = ' <i class="icon-unfold-all"></i>';
|
||||
?>
|
||||
<a href='' class='btn btn-link btn-tree-view' data-type='<?php echo $name ?>'><span class='text'><?php echo $btnLevel . $icon;?></span></button>
|
||||
<?php endforeach; ?>
|
||||
<?php
|
||||
foreach($lang->project->treeLevel as $name => $btnLevel)
|
||||
{
|
||||
if(empty($tree) && ($name == 'root' or $name == 'all')) continue;
|
||||
$icon = '';
|
||||
if($name == 'root') $icon = ' <i class="icon-fold-all"></i>';
|
||||
if($name == 'all') $icon = ' <i class="icon-unfold-all"></i>';
|
||||
echo html::a('javascript:;', "<span class='text'>$btnLevel$icon</span>", '', "class='btn btn-link btn-tree-view' data-type='{$name}'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php
|
||||
@@ -57,6 +59,17 @@
|
||||
</div>
|
||||
|
||||
<div id="mainContent" class="main-row hide-side">
|
||||
<?php if(empty($tree)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->task->noTask;?></span>
|
||||
<?php if(common::hasPriv('task', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')), "<i class='icon icon-plus'></i> " . $lang->task->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="main-col">
|
||||
<div class="cell">
|
||||
<ul class="tree" id="taskTree">
|
||||
@@ -69,5 +82,6 @@
|
||||
<div id="itemContent" class="load-indicator loading"></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<div class="detail" open>
|
||||
<div class="detail-title"><?php echo $lang->task->legendDesc;?></div>
|
||||
<div class="detail-content article-content">
|
||||
<?php echo !empty($task->desc) ? $task->desc : "<div class='text-center text-muted'>" . $lang->task->noData . '</div>';?>
|
||||
<?php echo !empty($task->desc) ? $task->desc : "<div class='text-center text-muted'>" . $lang->noData . '</div>';?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($project->type != 'ops'):?>
|
||||
@@ -48,21 +48,21 @@
|
||||
<div class="detail" open>
|
||||
<div class="detail-title"><?php echo $lang->bug->steps;?></div>
|
||||
<div class="detail-content article-content">
|
||||
<?php echo !empty($task->bugSteps) ? $task->bugSteps : "<div class='text-center text-muted'>" . $lang->task->noData . '</div>';?>
|
||||
<?php echo !empty($task->bugSteps) ? $task->bugSteps : "<div class='text-center text-muted'>" . $lang->noData . '</div>';?>
|
||||
</div>
|
||||
</div>
|
||||
<?php elseif($task->story):?>
|
||||
<div class="detail" open>
|
||||
<div class='detail-title'><?php echo $lang->task->storySpec;?></div>
|
||||
<div class='detail-content article-content'>
|
||||
<?php echo (!empty($task->storySpec) || !empty($task->storyFiles)) ? $task->storySpec : "<div class='text-center text-muted'>" . $lang->task->noData . '</div>';?>
|
||||
<?php echo (!empty($task->storySpec) || !empty($task->storyFiles)) ? $task->storySpec : "<div class='text-center text-muted'>" . $lang->noData . '</div>';?>
|
||||
</div>
|
||||
<?php echo $this->fetch('file', 'printFiles', array('files' => $task->storyFiles, 'fieldset' => 'false'));?>
|
||||
</div>
|
||||
<div class='detail' open>
|
||||
<div class='detail-title'><?php echo $lang->task->storyVerify;?></div>
|
||||
<div class='detail-content article-content'>
|
||||
<?php echo !empty($task->storyVerify) ? $task->storyVerify : "<div class='text-center text-muted'>" . $lang->task->noData . '</div>';?>
|
||||
<?php echo !empty($task->storyVerify) ? $task->storyVerify : "<div class='text-center text-muted'>" . $lang->noData . '</div>';?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -12,12 +12,4 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php echo $this->fetch('block', 'dashboard', 'module=qa');?>
|
||||
<script>
|
||||
<?php if($config->qa->homepage != 'index'):?>
|
||||
$(function()
|
||||
{
|
||||
$('#modulemenu .nav li:last').after("<li class='right'><a style='font-size:12px' href='javascript:setHomepage(\"qa\", \"index\")'><i class='icon icon-cog'></i> <?php echo $lang->homepage?></a></li>")
|
||||
});
|
||||
<?php endif;?>
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -27,6 +27,7 @@ $lang->release->confirmDelete = "Do you want to delete this Release?";
|
||||
$lang->release->confirmUnlinkStory = "Do you want to remove this Story?";
|
||||
$lang->release->confirmUnlinkBug = "Do you want to remove this Bug?";
|
||||
$lang->release->existBuild = '『Build』『%s』existed. You could change『name』or choose a『build』.';
|
||||
$lang->release->noRelease = 'No releases. ';
|
||||
|
||||
$lang->release->basicInfo = 'Basic Info';
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ $lang->release->confirmDelete = "您确认删除该发布吗?";
|
||||
$lang->release->confirmUnlinkStory = "您确认移除该需求吗?";
|
||||
$lang->release->confirmUnlinkBug = "您确认移除该Bug吗?";
|
||||
$lang->release->existBuild = '『版本』已经有『%s』这条记录了。您可以更改『发布名称』或者选择一个『版本』。';
|
||||
$lang->release->noRelease = '暂时没有发布。';
|
||||
|
||||
$lang->release->basicInfo = '基本信息';
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ $lang->release->confirmDelete = "您確認刪除該發佈嗎?";
|
||||
$lang->release->confirmUnlinkStory = "您確認移除該需求嗎?";
|
||||
$lang->release->confirmUnlinkBug = "您確認移除該Bug嗎?";
|
||||
$lang->release->existBuild = '『版本』已經有『%s』這條記錄了。您可以更改『發佈名稱』或者選擇一個『版本』。';
|
||||
$lang->release->noRelease = '暫時沒有發佈。';
|
||||
|
||||
$lang->release->basicInfo = '基本信息';
|
||||
|
||||
|
||||
@@ -24,6 +24,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class='main-table'>
|
||||
<?php if(empty($releases)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->release->noRelease;?></span>
|
||||
<?php if(common::hasPriv('release', 'create')):?>
|
||||
<span class="text-muted"><?php echo $lang->youCould;?></span>
|
||||
<?php echo html::a($this->createLink('release', 'create', "productID=$product->id&branch=$branch"), "<i class='icon icon-plus'></i> " . $lang->release->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<table class="table" id='releaseList'>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -75,5 +86,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -194,6 +194,7 @@ $lang->story->confirmDelete = "Do you want to delete this Story?";
|
||||
$lang->story->errorEmptyChildStory = '『Subdivide Story』canot be blank.';
|
||||
$lang->story->mustChooseResult = 'Select a result.';
|
||||
$lang->story->mustChoosePreVersion = 'Select a Version to revert to.';
|
||||
$lang->story->noStory = 'No stories. ';
|
||||
|
||||
$lang->story->form = new stdclass();
|
||||
$lang->story->form->area = 'Story Scope';
|
||||
|
||||
@@ -194,6 +194,7 @@ $lang->story->confirmDelete = "您确认删除该需求吗?";
|
||||
$lang->story->errorEmptyChildStory = '『细分需求』不能为空。';
|
||||
$lang->story->mustChooseResult = '必须选择评审结果';
|
||||
$lang->story->mustChoosePreVersion = '必须选择回溯的版本';
|
||||
$lang->story->noStory = '暂时没有需求。';
|
||||
|
||||
$lang->story->form = new stdclass();
|
||||
$lang->story->form->area = '该需求所属范围';
|
||||
|
||||
@@ -194,6 +194,7 @@ $lang->story->confirmDelete = "您確認刪除該需求嗎?";
|
||||
$lang->story->errorEmptyChildStory = '『細分需求』不能為空。';
|
||||
$lang->story->mustChooseResult = '必須選擇評審結果';
|
||||
$lang->story->mustChoosePreVersion = '必須選擇回溯的版本';
|
||||
$lang->story->noStory = '暫時沒有需求。';
|
||||
|
||||
$lang->story->form = new stdclass();
|
||||
$lang->story->form->area = '該需求所屬範圍';
|
||||
|
||||
@@ -13,6 +13,11 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../testcase/view/caseheader.html.php';?>
|
||||
<div id='mainContent' class='main-control'>
|
||||
<?php if(empty($stories)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->story->noStory;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form method='post' id='productStoryForm' class='main-table table-story' data-ride='table'>
|
||||
<table class='table has-sort-head table-fixed' id='storyList'>
|
||||
<thead>
|
||||
@@ -73,7 +78,6 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($stories):?>
|
||||
<div class='table-footer'>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
@@ -136,7 +140,7 @@
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -171,8 +171,8 @@ $lang->task->confirmTransfer = '"Left Hour" is 0,Do you want to transfer
|
||||
$lang->task->noticeLinkStory = "No story has been linked. You can %s for this project, then %s.";
|
||||
$lang->task->noticeSaveRecord = 'Your Hour is not saved. Please save it first.';
|
||||
$lang->task->commentActions = '%s. %s, commented by <strong>%s</strong>.';
|
||||
$lang->task->noData = 'No Data.';
|
||||
$lang->task->deniedNotice = 'Only the %s can %s the task.';
|
||||
$lang->task->noTask = 'No tasks. ';
|
||||
|
||||
$lang->task->error = new stdclass();
|
||||
$lang->task->error->consumedNumber = '"Consumed" must be numbers.';
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user