This commit is contained in:
daitingting
2018-06-25 09:58:21 +08:00
136 changed files with 904 additions and 723 deletions
+2
View File
@@ -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';
+1 -1
View File
@@ -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) --------------------//
+1 -1
View File
@@ -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';
+1 -1
View File
@@ -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 = '关联日志';
+1 -1
View File
@@ -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 = '關聯日誌';
+11
View File
@@ -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');
+3 -3
View File
@@ -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)}
+7 -2
View File
@@ -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)
+21 -1
View File
@@ -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>
+9 -6
View File
@@ -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>
+3 -3
View File
@@ -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]'));
}
});
}
+1
View File
@@ -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');
+1
View File
@@ -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,
+1 -1
View File
@@ -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>';
/* 页面标签。*/
+1 -1
View File
@@ -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>';
/* 页面标签。*/
+1 -1
View File
@@ -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>';
/* 頁面標籤。*/
+40 -34
View File
@@ -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>
+7 -5
View File
@@ -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');
+1 -1
View File
@@ -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.';
+1 -1
View File
@@ -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';
+1 -1
View File
@@ -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';
+2 -2
View File
@@ -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>
+1 -1
View File
@@ -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>
+1
View File
@@ -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:→]';
+11 -12
View File
@@ -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. */
+1
View File
@@ -86,6 +86,7 @@ $lang->customMenu = '自定义导航';
$lang->customField = '自定义表单项';
$lang->lineNumber = '行号';
$lang->tutorialConfirm = '检测到你尚未退出新手教程模式,是否现在退出?';
$lang->youCould = '您现在可以 ';
$lang->preShortcutKey = '[快捷键:←]';
$lang->nextShortcutKey = '[快捷键:→]';
+1
View File
@@ -86,6 +86,7 @@ $lang->customMenu = '自定義導航';
$lang->customField = '自定義表單項';
$lang->lineNumber = '行號';
$lang->tutorialConfirm = '檢測到你尚未退出新手教程模式,是否現在退出?';
$lang->youCould = '您現在可以 ';
$lang->preShortcutKey = '[快捷鍵:←]';
$lang->nextShortcutKey = '[快捷鍵:→]';
+2 -2
View File
@@ -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";
-160
View File
@@ -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>
+8 -6
View File
@@ -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>
+27 -45
View File
@@ -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');
}
}
});
-1
View File
@@ -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'):?>
-6
View File
@@ -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]-->
+8 -8
View File
@@ -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';
+8 -8
View File
@@ -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 = '平台';
+1 -1
View File
@@ -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.';
+1 -1
View File
@@ -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 = '您还没有创建任何文档。';
+1 -1
View File
@@ -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 = '您還沒有創建任何文檔。';
+5 -1
View File
@@ -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'):?>
+1
View File
@@ -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
View File
@@ -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
View File
@@ -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 = '帳號信息';
-2
View File
@@ -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')
+7 -3
View File
@@ -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';?>
+5 -5
View File
@@ -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>
+12
View File
@@ -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';?>
+7 -3
View File
@@ -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';?>
+6 -2
View File
@@ -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';?>
+6 -2
View File
@@ -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';?>
+5 -1
View File
@@ -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>
+12 -2
View File
@@ -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')?>
+1 -2
View File
@@ -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;
+1 -2
View File
@@ -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;
+1 -2
View File
@@ -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;
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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>
+47 -35
View File
@@ -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&param=$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;
+12
View File
@@ -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';?>
+5 -5
View File
@@ -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>
-8
View File
@@ -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';?>
+12
View File
@@ -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';?>
+23
View File
@@ -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>
+1
View File
@@ -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;
+1
View File
@@ -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;
+1
View File
@@ -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;
+12 -2
View File
@@ -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';?>
-1
View File
@@ -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;}
+4 -2
View File
@@ -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;}
+2 -1
View File
@@ -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;}
+3
View File
@@ -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;}
+1 -1
View File
@@ -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();
+9
View File
@@ -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});
+1 -1
View File
@@ -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');
};
+2 -1
View File
@@ -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]?";
+2 -1
View File
@@ -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]吗?";
+2 -1
View File
@@ -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]嗎?";
+3 -3
View File
@@ -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>";
}
}
+13 -3
View File
@@ -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
View File
@@ -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';?>
+1 -1
View File
@@ -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;?>
+6 -6
View File
@@ -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
+14
View File
@@ -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';?>
+23
View File
@@ -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';?>
+12 -6
View File
@@ -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>
+12
View File
@@ -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';?>
+57 -39
View File
@@ -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++;
+14 -2
View File
@@ -21,16 +21,27 @@
if(commonModel::isTutorialMode())
{
$wizardParams = helper::safe64Encode("projectID=$project->id");
echo html::a($this->createLink('tutorial', 'wizard', "module=project&method=managemembers&params=$wizardParams"), $lang->project->manageMembers, '', "class='btn btn-primary manage-team-btn'");
echo html::a($this->createLink('tutorial', 'wizard', "module=project&method=manageMembers&params=$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 -2
View File
@@ -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';?>
+22 -8
View File
@@ -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';?>
+4 -4
View File
@@ -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;?>
-8
View File
@@ -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';?>
+1
View File
@@ -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';
+1
View File
@@ -27,6 +27,7 @@ $lang->release->confirmDelete = "您确认删除该发布吗?";
$lang->release->confirmUnlinkStory = "您确认移除该需求吗?";
$lang->release->confirmUnlinkBug = "您确认移除该Bug吗?";
$lang->release->existBuild = '『版本』已经有『%s』这条记录了。您可以更改『发布名称』或者选择一个『版本』。';
$lang->release->noRelease = '暂时没有发布。';
$lang->release->basicInfo = '基本信息';
+1
View File
@@ -27,6 +27,7 @@ $lang->release->confirmDelete = "您確認刪除該發佈嗎?";
$lang->release->confirmUnlinkStory = "您確認移除該需求嗎?";
$lang->release->confirmUnlinkBug = "您確認移除該Bug嗎?";
$lang->release->existBuild = '『版本』已經有『%s』這條記錄了。您可以更改『發佈名稱』或者選擇一個『版本』。';
$lang->release->noRelease = '暫時沒有發佈。';
$lang->release->basicInfo = '基本信息';
+12
View File
@@ -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';?>
+1
View File
@@ -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';
+1
View File
@@ -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 = '该需求所属范围';
+1
View File
@@ -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 = '該需求所屬範圍';
+6 -2
View File
@@ -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';?>
+1 -1
View File
@@ -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