This commit is contained in:
Yagami
2020-08-26 09:23:26 +08:00
22 changed files with 404 additions and 76 deletions
+4 -1
View File
@@ -1621,7 +1621,10 @@ class block extends control
$products = $this->loadModel('product')->getPairs();
ksort($products);
$this->view->roadmaps = $this->product->getRoadmap(key($products), 0, 6);
$productID = key($products);
$this->view->roadmaps = $this->product->getRoadmap($productID, 0, 6);
$this->view->productID = $productID;
$this->view->products = $products;
}
/**
+65 -17
View File
@@ -1,24 +1,72 @@
<?php if(empty($programs)): ?>
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
<?php else:?>
<div class='panel-body has-table scrollbar-hover'>
<table>
<thead>
<tr>
<th class='w-200px'></th>
<th><?php echo $lang->program->teamCount;?></th>
<th><?php echo $lang->task->consumed;?></th>
</tr>
</thead>
<tbody>
<?php
$maxTeamCount = 0;
$maxConsumed = 0;
?>
<div class='panel-body'>
<div class='table-row'>
<div class='table-col chart-titles'>
<?php foreach($programs as $program):?>
<tr>
<td title='<?php echo $program->name?>'><?php echo $program->name;?></td>
<td><?php echo $program->teamCount;?></td>
<td><?php echo $program->consumed;?></td>
</tr>
<?php
$maxTeamCount = max($program->teamCount, $maxTeamCount);
$maxConsumed = max($program->consumed, $maxConsumed);
?>
<div class='chart-title text-ellipsis'><strong><?php echo $program->name;?></strong></div>
<?php endforeach;?>
</tbody>
</table>
</div>
<div class='table-col chart-rows'>
<div class='row'>
<div class='col col-6 program-team'>
<div class='chart-col-title strong'><?php echo $lang->program->teamCount;?></div>
<?php foreach($programs as $program):?>
<div class='chart-col-item'>
<div class='progress'>
<div class='progress-bar' style='width: <?php echo $maxTeamCount ? (100 * $program->teamCount / $maxTeamCount) : 0; ?>%'>
<div class='progress-text'><?php echo $program->teamCount;?></div>
</div>
</div>
</div>
<?php endforeach;?>
</div>
<div class='col col-6 program-consumed'>
<div class='chart-col-title strong'><?php echo $lang->task->consumed;?></div>
<?php foreach($programs as $program):?>
<div class='chart-col-item'>
<div class='progress'>
<div class='progress-bar' style='width: <?php echo $maxConsumed ? (100 * $program->consumed / $maxConsumed) : 0; ?>%'>
<div class='progress-text'><?php echo $program->consumed;?></div>
</div>
</div>
</div>
<?php endforeach;?>
</div>
</div>
</div>
</div>
<style>
.block-programteam .panel-body {margin-top: -10px;}
.chart-titles {width: 110px; padding-right: 10px; padding-top: 30px; position: relative; z-index: 1;}
.chart-rows {position: relative; z-index: 0;}
.chart-title {width: 100px; line-height: 20px; padding: 5px 0; height: 30px;}
.chart-title > strong {background: #fff;}
.chart-col-title {line-height: 20px; margin-bottom: 10px; padding: 0 10px;}
.program-team, .program-consumed {padding: 0;}
.program-team {border-right: 1px solid #e5e8ec;}
.program-team > .chart-col-title {text-align: right;}
.chart-col-item {height: 30px; padding: 5px 0; position: relative;}
.chart-col-text {width: 50px; position: absolute; top: 5px; line-height: 20px; left: 0;}
.program-team .chart-col-item {padding-left: 50px; position: relative;}
.program-team .chart-col-item:before {position: absolute; content: ' '; z-index: 0; left: -100px; top: 14px; right: 0; border-top: 1px dotted #e5e8ec;}
.program-consumed .chart-col-item {padding-right: 50px;}
.chart-col-item .progress {background: none; border-radius: 0; overflow: visible; margin: 6px 0 0 0; position: relative; z-index: 1;}
.chart-col-item .progress > .progress-bar {border-radius: 0; position: relative; min-width: 1px;}
.program-team .chart-col-item .progress > .progress-bar {float: right; background-color: #39cfff;}
.chart-col-item .progress .progress-text {position: absolute; top: -6px; color: #333; width: 50px; line-height: 20px; white-space: nowrap; overflow: visible;}
.program-team .progress .progress-text {text-align: right; left: -50px; padding-right: 5px;}
.program-consumed .progress .progress-text {text-align: left; right: -50px; padding-left: 5px;}
</style>
</div>
<?php endif;?>
+1 -1
View File
@@ -11,7 +11,7 @@
*/
?>
<?php if(empty($projectStats)): ?>
<div class='empty-tip'><?php common::printLink('project', 'create', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary'")?></div>
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
<?php else:?>
<div class="panel-body has-table scrollbar-hover">
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-projects tablesorter'>
+67 -41
View File
@@ -13,48 +13,74 @@
<?php if(empty($totalData)): ?>
<div class='empty-tip'><?php common::printLink('project', 'create', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary'")?></div>
<?php else:?>
<div class="panel-body has-table scrollbar-hover">
<table class='table table-borderless table-hover'>
<thead>
<tr class=''>
<th colspan="3" class='c-name text-left'><?php echo '总投入';?></th>
<th class="c-name"><?php echo $lang->block->totalStory;?></th>
<th class="c-name"><?php echo $lang->block->totalBug;?></th>
</tr>
</thead>
<tbody class="text-center">
<tr>
<td class="c-name"><i class="icon icon-user"></i><?php echo '总人数';?></td>
<td class="c-name"><i class="icon icon-time"></i><?php echo '已消耗工时';?></td>
<td class="c-name"><i class="icon icon-yen"></i><?php echo '已花费';?></td>
<td class="c-name"><?php echo $totalData[$programID]->allStories;?></td>
<td class="c-name"><?php echo $totalData[$programID]->allBugs;?></td>
</tr>
<tr>
<td class="c-data"><?php echo $totalData[$programID]->teamCount;?></td>
<td class="c-data"><?php echo $totalData[$programID]->consumed;?></td>
<td class="c-data"><?php echo '无数据'?></td>
<td class="c-data">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $totalData[$programID]->doneStories;?>" aria-valuemin="0" aria-valuemax="<?php echo $totalData[$programID]->allStories;?>" style="width: <?php echo (($totalData[$programID]->doneStories/$totalData[$programID]->allStories)*100).'%'; ?>">
</div>
<style>
#toal-investment{padding-bottom: 5px;}
.over-title{font-size: 14px; color: #838a9d;}
.extra-title{font-size: 12px; color: #a1a7b7;}
.progress{margin-bottom: 8px;}
.total-div{padding: 0px 25px;}
.extra-div{position: relative; padding: 0px 5px 5px; display: table-cell;text-align: center;}
.extra-div > small {display: block; color: #A6AAB8;}
.extra-div > span {display: block; color: #3c4353; font-weight: bold;}
</style>
<div class="panel-body conatiner-fluid">
<div class="table-row">
<div class="col-6 tile">
<div class="text-left" id="toal-investment"><strong>总投入</strong></div>
<div class="table-row">
<div class="col-4 tile">
<div class="over-title"><i class="icon-program-group icon-group"></i> 我的任务</div>
<div class="tile-amount"><a href="/my-task-assignedTo.html">96</a>
</div>
</td>
<td class="c-data">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $totalData[$programID]->doneBugs;?>" aria-valuemin="0" aria-valuemax="<?php echo $totalData[$programID]->allBugs;?>" style="width: <?php echo (($totalData[$programID]->doneBugs/$totalData[$progaramID]->allBugs)*100).'%'; ?>">
</div>
</div>
<div class="col-4 tile">
<div class="over-title"><i class="icon icon-time"></i> 已消耗工时</div>
<div class="tile-amount"><a href="/my-task-assignedTo.html">96</a>
</div>
</td>
</tr>
<tr>
<td></td>
<td class="c-data"><?php echo '总预计'.' '.$totalData[$programID]->estimate;?></td>
<td class="c-data"><?php echo '无数据';?></td>
<td class="c-data"><?php echo "已完成".'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'."剩余".'<br/>'.$totalData[$programID]->doneStories.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$totalData[$programID]->leftStories;?></td>
<td class="c-data"><?php echo "已完成".'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'."剩余".'<br/>'.$totalData[$programID]->doneBugs.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$totalData[$programID]->leftBugs;?></td>
</tr>
</tbody>
</table>
<div class="tile-info">
<span class="extra-title">总预计 10</span>
</div>
</div>
<div class="col-4 tile">
<div class="over-title"><i class="icon icon-circle"></i> 已花费</div>
<div class="tile-amount"><a href="/my-task-assignedTo.html">¥200,00</a>
</div>
<div class="tile-info">
<span class="extra-title">预算 ¥1000,00</span>
</div>
</div>
</div>
</div>
<div class="col-3 total-div">
<div><strong>总需求</strong></div>
<div class="tile-amount"><a href="/my-task-assignedTo.html">80</a></div>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"></div>
</div>
<div class="extra-div">
<small>已完成</small>
<span>0</span>
</div>
<div class="extra-div">
<small>剩余</small>
<span>0</span>
</div>
</div>
<div class="col-3 total-div">
<div><strong>总Bug</strong></div>
<div class="tile-amount"><a href="/my-task-assignedTo.html">80</a></div>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"></div>
</div>
<div class="extra-div">
<small>已完成</small>
<span>0</span>
</div>
<div class="extra-div">
<small>剩余</small>
<span>0</span>
</div>
</div>
</div>
</div>
<?php endif;?>
+9 -1
View File
@@ -13,8 +13,16 @@
<style>
.release-line>li:nth-child(even)>a{height:92px;}
.release-line>li:nth-child(odd){padding-top: 87px;}
#dashboard .panel-move-handler{right:78px}
#productList{width:28%; position: absolute; top: 6px; left: 96px;}
#createPlan{position: absolute; top: 3px; right:0px;}
#createPlan a{padding: 0 5px;line-height: 24px;margin: 3px;color: #3C4353;}
</style>
<div class="panel-body">
<div class="panel-move-handler">
<div id="productList"><?php echo html::select('productID', $products, '', 'class="form-control chosen"');?></div>
<div id="createPlan"><?php echo html::a($this->createLink('productplan', 'create', 'productID=' . $productID), '<i class="icon icon-sm icon-plus"></i>'. $lang->productplan->create, '', 'class="btn btn-mini" id="createPlan"');?></div>
</div>
<div class="panel-body conatiner-fluid">
<div class="release-path">
<ul class="release-line">
<?php foreach($roadmaps as $year => $mapBranches):?>
+28
View File
@@ -0,0 +1,28 @@
<?php
$lang->budget->create = 'Create Budget';
$lang->budget->edit = 'Edit Budget';
$lang->budget->total = 'Total Budget';
$lang->budget->summary = 'Summary';
$lang->budget->browse = 'Browse Dudget';
$lang->budget->list = 'Budget List';
$lang->budget->view = 'Budget Detail';
$lang->budget->delete = 'Delete';
$lang->budget->batchCreate = 'Batch Create';
$lang->budget->common = 'Cost Estimate';
$lang->budget->id = 'ID';
$lang->budget->stage = 'Stage';
$lang->budget->subject = 'Subject';
$lang->budget->name = 'Name of fee';
$lang->budget->amount = 'Estimated amount';
$lang->budget->desc = 'Explain';
$lang->budget->yuan = 'yuan';
$lang->budget->dollar = 'Dollars';
$lang->budget->createdBy = 'CreatedBy';
$lang->budget->createdDate = 'CreatedDate';
$lang->budget->lastEditedBy = 'LastEditBy';
$lang->budget->lastEditedDate = 'LastEditedDate';
$lang->budget->basicInfo = 'BasicInfo';
$lang->budget->noData = 'No Data';
$lang->budget->summaryReport = 'SummaryReport';
$lang->budget->confirmDelete = 'Are you sure you want to delete it?';
+2
View File
@@ -199,3 +199,5 @@ $lang->custom->conceptOptions->story['1'] = 'Story';
$lang->custom->conceptOptions->hourPoint = array();
$lang->custom->conceptOptions->hourPoint['0'] = 'Hour';
$lang->custom->conceptOptions->hourPoint['1'] = 'Story Point';
$lang->custom->conceptOptions->hourPoint['2'] = 'Function Ponit';
$lang->custom->conceptOptions->hourPoint['3'] = 'Code Line';
+3 -3
View File
@@ -68,7 +68,7 @@ class design extends control
* @access public
* @return void
*/
public function create($productID = 0, $prevModule = '', $prevID = 0)
public function create($productID = 0)
{
$productID = $this->loadModel('product')->saveState($productID, $this->product->getPairs('nocode'));
$this->design->setProductMenu($productID);
@@ -231,9 +231,9 @@ class design extends control
$repos = $this->loadModel('repo')->getRepoPairs();
$repoID = $repoID ? $repoID : key($repos);
$repo = $this->loadModel('repo')->getRepoByID($repoID);
$repo = $repoID ? $this->loadModel('repo')->getRepoByID($repoID) : '';
$revisions = $this->repo->getCommits($repo, '', 'HEAD', '', $pager, $begin, $end);
$revisions = $repo ? $this->repo->getCommits($repo, '', 'HEAD', '', $pager, $begin, $end) : '';
if($_POST)
{
+12
View File
@@ -1,4 +1,14 @@
<?php
/**
* The design module English file of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package design
* @version $Id: en.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
$lang->design->common = 'Design';
$lang->design->browse = 'List';
$lang->design->commit = 'Link Commit';
@@ -26,6 +36,7 @@ $lang->design->desc = 'Description';
$lang->design->product = 'Linked Product';
$lang->design->basicInfo = 'Basic Information';
$lang->design->commitDate = 'Committed Date';
$lang->design->commitBy = 'Commit By';
$lang->design->affectedStory = "{$lang->storyCommon}";
$lang->design->affectedTasks = 'Task';
$lang->design->submit = 'Submit Review';
@@ -46,6 +57,7 @@ $lang->design->typeList['ADS'] = 'API';
$lang->design->range = 'Impact';
$lang->design->errorSelection = 'No record selected!';
$lang->design->noDesign = 'No record.';
$lang->design->noCommit = 'No record commited.';
$lang->design->rangeList = array();
$lang->design->rangeList['all'] = 'All';
+11
View File
@@ -1,4 +1,14 @@
<?php
/**
* The design module zh-cn file of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package design
* @version $Id: zh-cn.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
$lang->design->common = '设计';
$lang->design->browse = '浏览列表';
$lang->design->commit = '关联提交';
@@ -46,6 +56,7 @@ $lang->design->typeList['ADS'] = '接口设计';
$lang->design->range = '影响范围';
$lang->design->errorSelection = '还没有选中记录!';
$lang->design->noDesign = '暂时没有记录';
$lang->design->noCommit = '暂时没有提交记录';
$lang->design->rangeList = array();
$lang->design->rangeList['all'] = '全部记录';
+1 -1
View File
@@ -27,7 +27,7 @@
</div>
<div class='btn-toolbar pull-right'>
<?php common::printLink('design', 'batchCreate', "productID=$productID", "<i class='icon icon-plus'></i>" . $lang->design->batchCreate, '', "class='btn btn-primary'");?>
<?php if(common::hasPriv('design', 'create')) echo html::a($this->createLink('design', 'create', "productID=$productID&designID=0"), "<i class='icon icon-plus'></i> {$lang->design->create}", '', "class='btn btn-primary'");?>
<?php common::printLink('design', 'create', "productID=$productID", "<i class='icon icon-plus'></i>" . $lang->design->create, '', "class='btn btn-primary'");?>
</div>
</div>
<div class="cell<?php if($type == 'bySearch') echo ' show';?>" id="queryBox" data-module='design'></div>
+6
View File
@@ -19,6 +19,11 @@
<small><?php echo $lang->arrow . $lang->design->commit;?></small>
</h2>
</div>
<?php if(empty($repoID)):?>
<div class="table-empty-tip">
<p><span class="text-muted"><?php echo $lang->design->noCommit;?></span></p>
</div>
<?php else:?>
<div class='searchBox'>
<table class="table">
<tr>
@@ -76,6 +81,7 @@
<?php $pager->show('right', 'pagerjs');?>
</div>
</form>
<?php endif;?>
</div>
<?php js::set('designID', $designID);?>
<?php include '../../common/view/footer.lite.html.php';?>
+2 -2
View File
@@ -35,12 +35,12 @@
</tr>
<tr>
<th><?php echo $lang->design->type;?></th>
<td><?php echo html::select('type', $lang->design->typeList, '', "class='form-control chosen'");?></td>
<td class="required"><?php echo html::select('type', $lang->design->typeList, '', "class='form-control chosen'");?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->design->name;?></th>
<td><?php echo html::input('name', '', "class='form-control'");?></td>
<td class="required"><?php echo html::input('name', '', "class='form-control'");?></td>
<td></td>
</tr>
<tr>
+7
View File
@@ -6,14 +6,21 @@ $lang->holiday->create = 'Create';
$lang->holiday->edit = 'Edit';
$lang->holiday->delete = 'Delete';
$lang->holiday->createAction = 'Create Holiday';
$lang->holiday->editAction = 'Edit Holiday';
$lang->holiday->deleteAction = 'Delete Holiday';
$lang->holiday->id = 'ID';
$lang->holiday->name = 'Name';
$lang->holiday->desc = 'Description';
$lang->holiday->type = 'Type';
$lang->holiday->begin = 'Begin';
$lang->holiday->end = 'End';
$lang->holiday->all = 'All';
$lang->holiday->holiday = 'Holiday';
$lang->holiday->typeList['holiday'] = 'Holiday';
$lang->holiday->typeList['working'] = 'Working Day';
$lang->holiday->emptyTip = 'No Holiday';
+100
View File
@@ -0,0 +1,100 @@
<?php
$lang->milestone->index = 'Milestone Home';
$lang->milestone->title = 'Milestone Report';
$lang->milestone->common = 'Project Milestone Report';
$lang->milestone->name = 'Milestone Name';
$lang->milestone->stage = 'Milestone Stage';
$lang->milestone->save = 'Save';
$lang->milestone->startedWeeks = 'Started Weeks';
$lang->milestone->finishedWeeks = 'Finished Weeks';
$lang->milestone->offset = 'Milestone Deviation';
$lang->milestone->processCommon = 'Project Current Status';
$lang->milestone->process = 'Project Schedule';
$lang->milestone->projectCost = 'Project Cost';
$lang->milestone->toNow = 'So far';
$lang->milestone->targetRange = 'Target Range';
$lang->milestone->ge = 'ge';
$lang->milestone->le = 'le';
$lang->milestone->analysis = 'Analysis';
$lang->milestone->PV = 'The work to be done(PV)';
$lang->milestone->EV = 'Actual work done(EV)';
$lang->milestone->AC = 'Actual cost(AC)';
$lang->milestone->SPI = 'Project schedule performance(SPI)';
$lang->milestone->CPI = 'Project cost performance(CPI)';
$lang->milestone->SV = 'Rate of progress deviation(SV%)';
$lang->milestone->CV = 'Cost deviation rate(CV%)';
$lang->milestone->workHours = 'Workload (man-hour)';
$lang->milestone->allStage = 'Project Stage';
$lang->milestone->devHours = 'Development Workload';
$lang->milestone->toHours = 'Rework Workload';
$lang->milestone->qaHours = 'Test Workload';
$lang->milestone->rowSummary = 'Workload Subtotal';
$lang->milestone->rowPercent = 'Percentage Distribution(%)';
$lang->milestone->colPercent = 'Percentage of workload(%)';
$lang->milestone->colSummary = 'Total';
$lang->milestone->qatoDev = 'Test Development ratio';
$lang->milestone->projectRisk = '5.Project Risks (top five highest priority risks)';
$lang->milestone->riskCountermove = 'Risk Countermove';
$lang->milestone->riskDescriptio = 'Risk Description';
$lang->milestone->riskPossibility = 'Risk Possibility';
$lang->milestone->riskSeriousness = 'Risk Seriousness';
$lang->milestone->riskFactor = 'Risk Factor';
$lang->milestone->riskMeasures = 'Risk Measures';
$lang->milestone->riskAccumulate = 'Risk Accumulate';
$lang->milestone->otherIssue = 'Other Issue';
$lang->milestone->issueSolutions = 'Issue Solutions';
$lang->milestone->issueDescription = 'Issue Description';
$lang->milestone->needHelp = 'Help';
$lang->milestone->issuePropose = 'Issue Propose';
$lang->milestone->demandStatus = '4.Customer Demand Analysis';
$lang->milestone->storyUnit = 'Unit:Item';
$lang->milestone->engineeringStage = 'Engineering Stage';
$lang->milestone->rateChange = 'Rate of change in demand';
$lang->milestone->originalStory = 'Quantity of original demand';
$lang->milestone->modifyNumber = 'Total post-change requirements';
$lang->milestone->changeStory = 'Number of changed requirements';
$lang->milestone->paogressForecast = 'Project Forecast';
$lang->milestone->duration = 'Construction period(day)';
$lang->milestone->cost = 'Cost(hours)';
$lang->milestone->forecastResults = 'Forecast Results';
$lang->milestone->plannedValue = 'Planned Value';
$lang->milestone->predictedValue = 'Predicted Value';
$lang->milestone->predictedValueDesc = 'Rentenformel (Germany):If the project progress performance(SPI)=0,So the predicted value=0,Otherwise,Predicted value=Planned value divided by Project schedule performance(SPI)';
$lang->milestone->periodDeviation = 'Period Deviation';
$lang->milestone->costDeviation = 'Cost Deviation';
$lang->milestone->nextStage = 'Next Stage';
$lang->milestone->overallProject = 'Overall Project';
$lang->milestone->corrective = 'Corrective Measure';
$lang->milestone->timeOverrun = 'The total construction time will exceed:%s day.';
$lang->milestone->costOverrun = 'The total cost will exceed:%s unit';
$lang->milestone->saveOtherProblem = 'Save Other Problem';
$lang->milestone->chart = new stdclass();
$lang->milestone->chart->title = 'Trend Chart of project progress to date';
$lang->milestone->chart->time = 'No';
$lang->milestone->chart->week = 'week';
$lang->milestone->chart->month = 'month';
$lang->milestone->chart->workhour = 'Development Workload Analysis Chart';
$lang->milestone->otherproblem = '6.Other Problem';
$lang->milestone->problemandsuggest = 'Problem and Suggest';
$lang->milestone->suggest = 'Suggest';
$lang->milestone->needhelp = 'Does it require high-level support?';
$lang->milestone->prodescr = 'Problem Description';
$lang->milestone->quality = new stdclass();
$lang->milestone->quality->total = 'Total';
$lang->milestone->quality->identify = 'Defect identification phase';
$lang->milestone->quality->injection = 'Defect injection phase';
$lang->milestone->quality->scale = 'Scale';
$lang->milestone->quality->identifyRate = 'Defect recognition rate';
$lang->milestone->quality->injectionRate = 'Defect injection rate';
$lang->milestone->options = 'Options';
+10 -1
View File
@@ -24,6 +24,15 @@
#cards .program-detail .progress {height: 4px;}
#cards .program-detail .progress-text-left .progress-text {width: 50px; left: -50px;}
#cards .pager {margin: 0; float: right;}
#cards .pager .btn{border: none}
#cards .pager .btn {border: none}
#cards .program-stages-container {margin: 0 -16px -16px -16px; padding: 0 4px; height: 46px; overflow-x: auto; position: relative;}
#cards .program-stages:after {content: ' '; width: 30px; display: block; right: -16px; top: 16px; bottom: -6px; z-index: 1; background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%); position: absolute;}
#cards .program-stages-row {position: relative; height: 30px; z-index: 0;}
#cards .program-stage-item {white-space: nowrap; position: absolute; top: 0; min-width: 48px; padding-top: 13px; color: #838A9D;}
#cards .program-stage-item > div {white-space: nowrap; overflow: visible; text-align: center; text-overflow: ellipsis;}
#cards .program-stage-item:before {content: ' '; display: block; width: 8px; height: 8px; border-radius: 50%; background: #D1D1D1; position: absolute; left: 50%; margin-left: -4px; top: 0; z-index: 1;}
#cards .program-stage-item + .program-stage-item:after {content: ' '; display: block; left: -50%; right: 50%; height: 2px; background-color: #D1D1D1; top: 3px; position: absolute; z-index: 0;}
#cards .program-stage-item.is-going {color: #333;}
#cards .program-stage-item.is-going::before {background-color: #0C64EB;}
.w-240px{width:240px;}
+17 -2
View File
@@ -7,7 +7,7 @@ $(function()
window.location.reload();
});
// Auto resize cards size
/* Auto resize cards size */
var minCardWidth = 280;
var $cards = $('#cards');
var resizeCards = function()
@@ -23,7 +23,22 @@ $(function()
resizeCards();
$(window).on('resize', resizeCards);
// Make cards clickable
/* Auto resize stages */
$cards.find('.program-stages-container').each(function()
{
var $container = $(this);
var $row = $container.children();
var totalWidth = 0;
$row.children().each(function()
{
var $item = $(this);
$item.css('left', totalWidth);
totalWidth += $item.width();
});
$row.css('minWidth', totalWidth);
});
/* Make cards clickable */
$cards.on('click', '.panel', function(e)
{
if(!$(e.target).closest('.panel-actions').length)
+20
View File
@@ -35,7 +35,26 @@
<?php if($program->template === 'cmmi'): ?>
<div class='program-detail program-stages'>
<p class='text-muted'><?php echo $lang->program->ongoingStage; ?></p>
<?php
$programProjects = array();
foreach($program->projects as $project)
{
if(!$project->parent) $programProjects[] = $project;
}
?>
<?php if(empty($programProjects)): ?>
<div class='label label-outline'><?php echo zget($lang->project->statusList, $program->status);?></div>
<?php else: ?>
<div class='program-stages-container scrollbar-hover'>
<div class='program-stages-row'>
<?php foreach ($programProjects as $project): ?>
<div class='program-stage-item is-<?php echo $project->status;?><?php if($project->status !== 'wait') echo ' is-going'; ?>'>
<div><?php echo $project->name; ?></div>
</div>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
</div>
<?php else: ?>
<?php $project = $program->projects ? current($program->projects) : '';?>
@@ -58,6 +77,7 @@
</div>
</div>
</div>
<?php endforeach;?>
<div class='col-xs-12' id='cardsFooter'>
<?php $pager->show('right', 'pagerjs');?>
+10 -6
View File
@@ -343,15 +343,17 @@ class repoModel extends model
/**
* Get commits.
*
* @param object $repo
* @param string $entry
* @param string $revision
* @param string $type
* @param object $pager
* @param object $repo
* @param string $entry
* @param string $revision
* @param string $type
* @param object $pager
* @param string $begin
* @param string $end
* @access public
* @return array
*/
public function getCommits($repo, $entry, $revision = 'HEAD', $type = 'dir', $pager = null)
public function getCommits($repo, $entry, $revision = 'HEAD', $type = 'dir', $pager = null, $begin = 0, $end = 0)
{
$entry = ltrim($entry, '/');
$entry = $repo->prefix . (empty($entry) ? '' : '/' . $entry);
@@ -395,6 +397,8 @@ class repoModel extends model
->andWhere('left(t1.comment, 12)')->ne('Merge branch')
->beginIF($this->cookie->repoBranch)->andWhere('t2.branch')->eq($this->cookie->repoBranch)->fi()
->beginIF($entry != '/' and !empty($entry))->andWhere('t1.id')->in($historyIdList)->fi()
->beginIF($begin)->andWhere('t1.time')->ge($begin)->fi()
->beginIF($end)->andWhere('t1.time')->le($end)->fi()
->orderBy('time desc');
if($entry == '/' or empty($entry))$comments->page($pager, 't1.id');
$comments = $comments->fetchAll('revision');
+6
View File
@@ -0,0 +1,6 @@
<?php
$lang->subject->common = 'Subject';
$lang->subject->manage = 'Manage Subject';
$lang->subject->manageChild = 'Manage Child Subject';
$lang->subject->name = 'Subject Name';
$lang->subject->browse = 'Browse Subject';
+2
View File
@@ -11,6 +11,8 @@
*/
$lang->user->common = 'User';
$lang->user->id = 'ID';
$lang->user->inside = 'Inside Members';
$lang->user->outside = 'Outside Members';
$lang->user->company = 'Company';
$lang->user->dept = 'Department';
$lang->user->account = 'Account';
+21
View File
@@ -0,0 +1,21 @@
<?php
$lang->workestimation->common = 'Workload estimation';
$lang->workestimation->budget = 'Estimate';
$lang->workestimation->index = 'Overview';
$lang->workestimation->scale = 'Scale';
$lang->workestimation->productivity = 'Productivity';
$lang->workestimation->duration = 'Estimated total man-hour';
$lang->workestimation->unitLaborCost = 'Unit Labour cost';
$lang->workestimation->totalLaborCost = 'Estimate labor costs';
$lang->workestimation->dayHour = 'Daily working hours';
$lang->workestimation->hour = 'Man-hour';
$lang->workestimation->consumed = 'Man-hours consumed';
$lang->workestimation->programScaleTip = "Actual scale of current project:<strong>%s{$lang->hourCommon}</strong> <a href='###' id='useScale' class='btn btn-xs'>use</span>";
$lang->workestimation->placeholder = new stdclass();
$lang->workestimation->placeholder->scale = '';
$lang->workestimation->placeholder->productivity = '';
$lang->workestimation->placeholder->duration = '';
$lang->workestimation->placeholder->unitLaborCost = '';
$lang->workestimation->placeholder->totalLaborCost = '';