* merge from 15.0.beta3.

This commit is contained in:
wangyidong
2021-06-06 09:05:34 +08:00
parent 968c88329a
commit b6676572f0
29 changed files with 1288 additions and 56 deletions
File diff suppressed because it is too large Load Diff
-3
View File
@@ -30,9 +30,6 @@ $config->action->objectNameFields['stakeholder'] = 'user';
$config->action->objectNameFields['budget'] = 'name';
$config->action->objectNameFields['job'] = 'name';
$config->action->objectNameFields['team'] = 'name';
$config->action->objectNameFields['opportunity'] = 'name';
$config->action->objectNameFields['trainplan'] = 'name';
$config->action->objectNameFields['gapanalysis'] = 'account';
$config->action->commonImgSize = 870;
-6
View File
@@ -99,9 +99,6 @@ $lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['job'] = 'Job';
$lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
@@ -487,9 +484,6 @@ $lang->action->label->risk = 'Risk|risk|view|riskID=%s';
$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
$lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
-6
View File
@@ -103,9 +103,6 @@ $lang->action->objectTypes['entry'] = 'Entry';
$lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* Used to describe operation history. */
$lang->action->desc = new stdclass();
@@ -490,9 +487,6 @@ $lang->action->label->risk = 'Risk|risk|view|riskID=%s';
$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
$lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
-6
View File
@@ -99,9 +99,6 @@ $lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['job'] = 'Job';
$lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
@@ -499,9 +496,6 @@ $lang->action->label->risk = 'Risk|risk|view|riskID=%s';
$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
$lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
-6
View File
@@ -99,9 +99,6 @@ $lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['job'] = 'Job';
$lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* Used to describe operation history. */
$lang->action->desc = new stdclass();
@@ -487,9 +484,6 @@ $lang->action->label->risk = 'Risk|risk|view|riskID%s';
$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
$lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
-6
View File
@@ -103,9 +103,6 @@ $lang->action->objectTypes['entry'] = '应用';
$lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['team'] = '团队';
$lang->action->objectTypes['whitelist'] = '白名单';
$lang->action->objectTypes['opportunity'] = '机会';
$lang->action->objectTypes['trainplan'] = '培训计划';
$lang->action->objectTypes['gapanalysis'] = '能力差距分析';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
@@ -490,9 +487,6 @@ $lang->action->label->risk = '风险|risk|view|riskID=%s';
$lang->action->label->issue = '问题|issue|view|issueID=%s';
$lang->action->label->design = '设计|design|view|designID=%s';
$lang->action->label->stakeholder = '干系人|stakeholder|view|userID=%s';
$lang->action->label->opportunity = '机会|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = '培训计划|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = '能力差距分析|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
+13
View File
@@ -410,6 +410,19 @@ class custom extends control
$this->display();
}
/**
* Set story concept.
*
* @param int $key
* @access public
* @return void
*/
public function setDefaultConcept($key = 0)
{
$this->loadModel('setting')->setItem('system.custom.URSR', $key);
die(js::reload('parent'));
}
/**
* Delete story concept.
*
+1
View File
@@ -38,6 +38,7 @@ $lang->custom->waterfallCommon = "Waterfall";
$lang->custom->buildin = "Buildin";
$lang->custom->editStoryConcept = "Edit Story Concept";
$lang->custom->setStoryConcept = "Set Story Concept";
$lang->custom->setDefaultConcept = "Set Default Concept";
$lang->custom->browseStoryConcept = "List of story concepts";
$lang->custom->deleteStoryConcept = "Delete story Concept";
$lang->custom->URConcept = "UR Concept";
+1
View File
@@ -38,6 +38,7 @@ $lang->custom->waterfallCommon = "Waterfall";
$lang->custom->buildin = "Buildin";
$lang->custom->editStoryConcept = "Edit Story Concept";
$lang->custom->setStoryConcept = "Set Story Concept";
$lang->custom->setDefaultConcept = "Set Default Concept";
$lang->custom->browseStoryConcept = "List of story concepts";
$lang->custom->deleteStoryConcept = "Delete story Concept";
$lang->custom->URConcept = "UR Concept";
+1
View File
@@ -38,6 +38,7 @@ $lang->custom->waterfallCommon = "Waterfall";
$lang->custom->buildin = "Buildin";
$lang->custom->editStoryConcept = "Edit Story Concept";
$lang->custom->setStoryConcept = "Set Story Concept";
$lang->custom->setDefaultConcept = "Set Default Concept";
$lang->custom->browseStoryConcept = "List of story concepts";
$lang->custom->deleteStoryConcept = "Delete story Concept";
$lang->custom->URConcept = "UR Concept";
+1
View File
@@ -38,6 +38,7 @@ $lang->custom->waterfallCommon = "Waterfall";
$lang->custom->buildin = "Buildin";
$lang->custom->editStoryConcept = "Edit Story Concept";
$lang->custom->setStoryConcept = "Set Story Concept";
$lang->custom->setDefaultConcept = "Set Default Concept";
$lang->custom->browseStoryConcept = "List of story concepts";
$lang->custom->deleteStoryConcept = "Delete story Concept";
$lang->custom->URConcept = "UR Concept";
+1
View File
@@ -38,6 +38,7 @@ $lang->custom->waterfallCommon = "瀑布";
$lang->custom->buildin = "系统内置";
$lang->custom->editStoryConcept = "编辑需求概念";
$lang->custom->setStoryConcept = "设置需求概念";
$lang->custom->setDefaultConcept = "设置默认概念";
$lang->custom->browseStoryConcept = "需求概念列表";
$lang->custom->deleteStoryConcept = "删除需求概念";
$lang->custom->URConcept = "用需概念";
+1
View File
@@ -96,6 +96,7 @@ $lang->custom->project->defaultCurrency = '預設貨幣';
$lang->custom->project->fields['unitList'] = '預算單位';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = '類型';
$lang->custom->story->fields['priList'] = '優先順序';
$lang->custom->story->fields['sourceList'] = '來源';
$lang->custom->story->fields['reasonList'] = '關閉原因';
@@ -23,6 +23,9 @@
<table class='table table-form'>
<thead>
<tr>
<?php if(common::hasPriv('custom', 'setDefaultConcept')):?>
<th class='w-60px text-center'><?php echo $lang->custom->default;?> </th>
<?php endif;?>
<?php if($this->config->URAndSR):?>
<th class='text-left'><?php echo $lang->custom->URConcept;?> </th>
<?php endif;?>
@@ -33,6 +36,9 @@
<tbody>
<?php foreach($URSRList as $key => $URSR):?>
<tr>
<?php if(common::hasPriv('custom', 'setDefaultConcept')):?>
<td class='text-center'><input type="radio" name='default' value='<?php echo $key;?>' <?php if($key == $config->custom->URSR) echo 'checked';?>></td>
<?php endif;?>
<?php if($this->config->URAndSR):?>
<td class='text-left'><?php echo $URSR['URName'];?></td>
<?php endif;?>
@@ -48,4 +54,11 @@
</table>
</div>
</div>
<script>
$("input[name='default']").change(function()
{
var checked = $(this).val();
hiddenwin.location.href = createLink('custom', 'setDefaultConcept', 'key=' + checked);
})
</script>
<?php include '../../common/view/footer.html.php';?>
+1
View File
@@ -90,6 +90,7 @@ $lang->execution->oneProduct = "Only one stage can be linked {$lang->produc
$lang->execution->noLinkProduct = "Stage not linked {$lang->productCommon}";
$lang->execution->recent = 'Recent visits: ';
$lang->execution->copyNoExecution = 'There are no ' . $lang->executionCommon . 'available to copy.';
$lang->execution->noTeam = 'No team members at the moment';
$lang->execution->start = 'Start';
$lang->execution->activate = 'Aktivieren';
+1
View File
@@ -90,6 +90,7 @@ $lang->execution->oneProduct = "Only one stage can be linked {$lang->produc
$lang->execution->noLinkProduct = "Stage not linked {$lang->productCommon}";
$lang->execution->recent = 'Recent visits: ';
$lang->execution->copyNoExecution = 'There are no ' . $lang->executionCommon . 'available to copy.';
$lang->execution->noTeam = 'No team members at the moment';
$lang->execution->start = 'Start';
$lang->execution->activate = 'Activate';
+1
View File
@@ -90,6 +90,7 @@ $lang->execution->oneProduct = "Only one stage can be linked {$lang->produc
$lang->execution->noLinkProduct = "Stage not linked {$lang->productCommon}";
$lang->execution->recent = 'Recent visits: ';
$lang->execution->copyNoExecution = 'There are no ' . $lang->executionCommon . 'available to copy.';
$lang->execution->noTeam = 'No team members at the moment';
$lang->execution->start = 'Démarrer';
$lang->execution->activate = 'Activer';
+1
View File
@@ -90,6 +90,7 @@ $lang->execution->oneProduct = "Only one stage can be linked {$lang->produc
$lang->execution->noLinkProduct = "Stage not linked {$lang->productCommon}";
$lang->execution->recent = 'Recent visits: ';
$lang->execution->copyNoExecution = 'There are no ' . $lang->executionCommon . 'available to copy.';
$lang->execution->noTeam = 'No team members at the moment';
$lang->execution->start = 'Bắt đầu';
$lang->execution->activate = 'Kích hoạt';
+1
View File
@@ -90,6 +90,7 @@ $lang->execution->oneProduct = "阶段只能关联一个{$lang->productComm
$lang->execution->noLinkProduct = "阶段没有关联{$lang->productCommon}";
$lang->execution->recent = '近期访问:';
$lang->execution->copyNoExecution = '没有可用的' . $lang->executionCommon . '来复制';
$lang->execution->noTeam = '暂时没有团队成员';
$lang->execution->start = "开始";
$lang->execution->activate = "激活";
+1
View File
@@ -90,6 +90,7 @@ $lang->execution->oneProduct = "階段只能關聯一個{$lang->productComm
$lang->execution->noLinkProduct = "階段沒有關聯{$lang->productCommon}";
$lang->execution->recent = '近期訪問:';
$lang->execution->copyNoExecution = '沒有可用的' . $lang->executionCommon . '來複制';
$lang->execution->noTeam = '暫時沒有團隊成員';
$lang->execution->start = "開始";
$lang->execution->activate = "激活";
+8 -7
View File
@@ -297,16 +297,17 @@ class executionModel extends model
if(dao::isError()) return false;
/* Determine whether to add a sprint or a stage according to the model of the execution. */
$project = $this->loadModel('project')->getByID($_POST['project']);
$type = zget($this->config->execution->modelList, $project->model, 'sprint');
$this->config->execution->create->requiredFields .= ',project';
}
/* If the execution model is a stage, determine whether the product is linked. */
if($type == 'stage' and empty($this->post->products[0]))
{
dao::$errors['message'][] = $this->lang->execution->noLinkProduct;
return false;
}
/* If the execution model is a stage, determine whether the product is linked. */
if($type == 'stage' and empty($this->post->products[0]))
{
dao::$errors['message'][] = $this->lang->execution->noLinkProduct;
return false;
$this->config->execution->create->requiredFields .= ',project';
}
/* Get the data from the post. */
@@ -8,13 +8,15 @@ function addItem(obj)
$newRow.find('div[id^=members], div[id^=program]').remove();
$newRow.find('select[name^="members"], select[name^="program"]').val('').chosen();
setTimeout(function()
{
{
$newRow.removeClass('highlight');
}, 1600);
}
function deleteItem(obj)
{
if($("table tr").size() < 3) return false;
var $currentLine= $(obj).closest('tr');
$currentLine.remove();
}
+3 -1
View File
@@ -1094,7 +1094,8 @@ $lang->custom->methodOrder[45] = 'timezone';
$lang->custom->methodOrder[50] = 'setStoryConcept';
$lang->custom->methodOrder[55] = 'editStoryConcept';
$lang->custom->methodOrder[60] = 'browseStoryConcept';
$lang->custom->methodOrder[65] = 'deleteStoryConcept';
$lang->custom->methodOrder[65] = 'setDefaultConcept';
$lang->custom->methodOrder[70] = 'deleteStoryConcept';
$lang->resource->datatable = new stdclass();
$lang->resource->datatable->setGlobal = 'setGlobal';
@@ -1805,6 +1806,7 @@ $lang->changelog['15.0.rc1'][] = 'user-execution';
$lang->changelog['15.0.rc1'][] = 'custom-setStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-editStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-browseStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-setDefaultConcept';
$lang->changelog['15.0.rc1'][] = 'custom-deleteStoryConcept';
$lang->changelog['15.0.rc1'][] = 'search-index';
$lang->changelog['15.0.rc1'][] = 'search-buildIndex';
+1 -1
View File
@@ -134,7 +134,7 @@ class svnModel extends model
return false;
}
$version = $lastInDB->commit;
$version = (int)$lastInDB->commit + 1;
$logs = $this->repo->getUnsyncCommits($repo);
/* Update code commit history. */
+8 -9
View File
@@ -511,11 +511,10 @@ class testreport extends control
if($this->app->getViewType() == 'mhtml') $recPerPage = 10;
$pager = pager::init($recTotal, $recPerPage, $pageID);
$tasks = $report->tasks ? $this->testtask->getByList($report->tasks) : array();;
$builds = $report->builds ? $this->build->getByList($report->builds) : array();
$cases = $this->testreport->getTaskCases($tasks, $report->begin, $report->end, $report->cases, $pager);
$caseIdList = $this->testreport->getCaseIdList($reportID);
$bugInfo = $this->testreport->getBugInfo($tasks, $report->product, $report->begin, $report->end, $builds);
$tasks = $report->tasks ? $this->testtask->getByList($report->tasks) : array();;
$builds = $report->builds ? $this->build->getByList($report->builds) : array();
$cases = $this->testreport->getTaskCases($tasks, $report->begin, $report->end);
$bugInfo = $this->testreport->getBugInfo($tasks, $report->product, $report->begin, $report->end, $builds);
if($report->objectType == 'testtask')
{
@@ -537,15 +536,15 @@ class testreport extends control
$this->view->stories = $stories;
$this->view->bugs = $report->bugs ? $this->bug->getByList($report->bugs) : array();
$this->view->builds = $builds;
$this->view->cases = $cases;
$this->view->cases = $this->testreport->getTaskCases($tasks, $report->begin, $report->end, $report->cases, $pager);
$this->view->users = $this->user->getPairs('noletter|noclosed|nodeleted');
$this->view->actions = $this->loadModel('action')->getList('testreport', $reportID);
$this->view->storySummary = $this->product->summary($stories);
$this->view->caseSummary = $this->testreport->getResultSummary($tasks, $caseIdList, $report->begin, $report->end);
$this->view->caseSummary = $this->testreport->getResultSummary($tasks, $cases, $report->begin, $report->end);
$perCaseResult = $this->testreport->getPerCaseResult4Report($tasks, $caseIdList, $report->begin, $report->end);
$perCaseRunner = $this->testreport->getPerCaseRunner4Report($tasks, $caseIdList, $report->begin, $report->end);
$perCaseResult = $this->testreport->getPerCaseResult4Report($tasks, $report->cases, $report->begin, $report->end);
$perCaseRunner = $this->testreport->getPerCaseRunner4Report($tasks, $report->cases, $report->begin, $report->end);
$this->view->datas['testTaskPerRunResult'] = $this->loadModel('report')->computePercent($perCaseResult);
$this->view->datas['testTaskPerRunner'] = $this->report->computePercent($perCaseRunner);
+2 -2
View File
@@ -438,7 +438,7 @@ class testreportModel extends model
->on('t1.run= t2.id')
->where('t2.task')->in(array_keys($tasks))
->andwhere('t1.date = t2.lastRunDate')
->andWhere('t1.`case`')->in(array_keys($cases))
->andWhere('t1.`case`')->in($cases)
->andWhere('t1.date')->ge($begin)
->andWhere('t1.date')->le($end . " 23:59:59")
->groupBy('name')
@@ -470,7 +470,7 @@ class testreportModel extends model
->on('t1.run= t2.id')
->where('t2.task')->in(array_keys($tasks))
->andwhere('t1.date = t2.lastRunDate')
->andWhere('t1.`case`')->in(array_keys($cases))
->andWhere('t1.`case`')->in($cases)
->andWhere('t1.date')->ge($begin)
->andWhere('t1.date')->le($end . " 23:59:59")
->groupBy('name')
+1 -1
View File
@@ -39,7 +39,7 @@ class todoModel extends model
->remove(implode(',', $this->config->todo->moduleList) . ',uid')
->get();
if(!isset($todo->pri) and in_array($this->post->type, $this->config->todo->moduleList) and $this->post->type !== 'review')
if(!isset($todo->pri) and in_array($this->post->type, $this->config->todo->moduleList) and $this->post->type !== 'review' and $this->post->type !== 'feedback')
{
$todo->pri = $this->dao->select('pri')->from($this->config->objectTables[$this->post->type])->where('id')->eq($this->post->idvalue)->fetch('pri');
+1 -1
View File
@@ -4984,7 +4984,7 @@ class upgradeModel extends model
*/
public function updateProductVersion()
{
$this->dao->update(TABLE_PRODUCT)->set('createdVersion')->eq($this->config->version)->where('createdVersion')->eq('')->exec();
$this->dao->update(TABLE_PRODUCT)->set('createdVersion')->eq($this->config->version)->where('createdVersion')->eq('')->andWhere('createdDate')->gt('2020-01-01')->exec();
return true;
}
}