Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3

This commit is contained in:
wangyidong
2021-05-13 15:06:56 +08:00
39 changed files with 300 additions and 49 deletions
+1
View File
@@ -1,3 +1,4 @@
ALTER TABLE `zt_project` CHANGE `lifetime` `lifetime` char(30) NOT NULL DEFAULT '';
ALTER TABLE `zt_story` ADD `category` varchar(30) NOT NULL DEFAULT 'feature' AFTER `type`;
ALTER TABLE `zt_testtask` ADD `type` varchar(255) NOT NULL DEFAULT '' AFTER `build`;
ALTER TABLE `zt_testtask` ADD `testreport` mediumint(8) unsigned NOT NULL AFTER `status`;
+1
View File
@@ -1060,6 +1060,7 @@ CREATE TABLE IF NOT EXISTS `zt_testtask` (
`desc` text NOT NULL,
`report` text NOT NULL,
`status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait',
`testreport` mediumint(8) unsigned NOT NULL,
`auto` varchar(10) NOT NULL DEFAULT 'no',
`subStatus` varchar(30) NOT NULL default '',
`deleted` enum('0','1') NOT NULL default '0',
+3 -3
View File
@@ -373,10 +373,10 @@ class build extends control
}
if($varName == 'testTaskBuild')
{
$builds = $this->build->getExecutionBuildPairs($executionID, $productID, $branch, 'noempty,notrunk');
$builds = array('' => '') + $this->build->getExecutionBuildPairs($executionID, $productID, $branch, 'noempty,notrunk');
if($isJsonView) die(json_encode($builds));
if(empty($builds))
if(empty(array_filter($builds)))
{
$projectID = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($executionID)->fetch('project');
@@ -385,7 +385,7 @@ class build extends control
$html .= html::a("javascript:loadExecutionBuilds($executionID)", $this->lang->refresh);
die($html);
}
die(html::select('build', $builds, $build, "class='form-control'"));
die(html::select('build', $builds, $build, "class='form-control' onchange='loadTestReports(this.value)'"));
}
if($varName == 'dropdownList')
{
+1 -1
View File
@@ -1,6 +1,6 @@
<?php
$config->custom = new stdClass();
$config->custom->canAdd['story'] = 'reasonList,sourceList,priList';
$config->custom->canAdd['story'] = 'reasonList,sourceList,priList,categoryList';
$config->custom->canAdd['task'] = 'priList,typeList,reasonList';
$config->custom->canAdd['bug'] = 'priList,severityList,osList,browserList,typeList,resolutionList';
$config->custom->canAdd['testcase'] = 'priList,typeList,stageList,resultList,statusList';
+1
View File
@@ -96,6 +96,7 @@ $lang->custom->project->defaultCurrency = 'Default Currency';
$lang->custom->project->fields['unitList'] = 'Unit List';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = 'Category';
$lang->custom->story->fields['priList'] = 'Priority';
$lang->custom->story->fields['sourceList'] = 'Source';
$lang->custom->story->fields['reasonList'] = 'Close Reason';
+1
View File
@@ -96,6 +96,7 @@ $lang->custom->project->defaultCurrency = 'Default Currency';
$lang->custom->project->fields['unitList'] = 'Unit List';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = 'Category';
$lang->custom->story->fields['priList'] = 'Priority';
$lang->custom->story->fields['sourceList'] = 'Source';
$lang->custom->story->fields['reasonList'] = 'Close Reason';
+1
View File
@@ -96,6 +96,7 @@ $lang->custom->project->defaultCurrency = 'Default Currency';
$lang->custom->project->fields['unitList'] = 'Unit List';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = 'Category';
$lang->custom->story->fields['priList'] = 'Priorité';
$lang->custom->story->fields['sourceList'] = 'Source';
$lang->custom->story->fields['reasonList'] = 'Raison Fermeture';
+1
View File
@@ -96,6 +96,7 @@ $lang->custom->project->defaultCurrency = 'Default Currency';
$lang->custom->project->fields['unitList'] = 'Unit List';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = 'Category';
$lang->custom->story->fields['priList'] = 'Ưu tiên';
$lang->custom->story->fields['sourceList'] = 'Nguồn';
$lang->custom->story->fields['reasonList'] = 'Lý do đóng';
+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'] = '关闭原因';
+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'] = '關閉原因';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = 'Rechte kopieren';
$lang->group->copyOptions['copyUser'] = 'Benutzer kopieren';
$lang->group->versions[''] = 'Verlauf';
$lang->group->versions['15_0_rc1'] = 'ZenTao15.0.rc1';
$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copy Privileges';
$lang->group->copyOptions['copyUser'] = 'Copy Users';
$lang->group->versions[''] = 'History';
$lang->group->versions['15_0_rc1'] = 'ZenTao15.0.rc1';
$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copier Privilèges';
$lang->group->copyOptions['copyUser'] = 'Copier Utilisateurs';
$lang->group->versions[''] = 'History';
$lang->group->versions['15_0_rc1'] = 'ZenTao15.0.rc1';
$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
+94
View File
@@ -1746,3 +1746,97 @@ $lang->changelog['12.3'][] = 'ci-commitResult';
$lang->changelog['12.5'][] = 'story-batchToTask';
$lang->changelog['12.5'][] = 'custom-product';
$lang->changelog['12.5'][] = 'custom-project';
$lang->changelog['15.0.rc1'][] = 'program-browse';
$lang->changelog['15.0.rc1'][] = 'program-view';
$lang->changelog['15.0.rc1'][] = 'program-product';
$lang->changelog['15.0.rc1'][] = 'program-create';
$lang->changelog['15.0.rc1'][] = 'program-edit';
$lang->changelog['15.0.rc1'][] = 'program-start';
$lang->changelog['15.0.rc1'][] = 'program-suspend';
$lang->changelog['15.0.rc1'][] = 'program-activate';
$lang->changelog['15.0.rc1'][] = 'program-close';
$lang->changelog['15.0.rc1'][] = 'program-delete';
$lang->changelog['15.0.rc1'][] = 'program-project';
$lang->changelog['15.0.rc1'][] = 'program-stakeholder';
$lang->changelog['15.0.rc1'][] = 'program-createStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-unlinkStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-batchUnlinkStakeholders';
$lang->changelog['15.0.rc1'][] = 'program-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'program-export';
$lang->changelog['15.0.rc1'][] = 'project-execution';
$lang->changelog['15.0.rc1'][] = 'project-group';
$lang->changelog['15.0.rc1'][] = 'project-createGroup';
$lang->changelog['15.0.rc1'][] = 'project-manageView';
$lang->changelog['15.0.rc1'][] = 'project-managePriv';
$lang->changelog['15.0.rc1'][] = 'project-manageGroupMember';
$lang->changelog['15.0.rc1'][] = 'project-copyGroup';
$lang->changelog['15.0.rc1'][] = 'project-editGroup';
$lang->changelog['15.0.rc1'][] = 'project-whitelist';
$lang->changelog['15.0.rc1'][] = 'project-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-qa';
$lang->changelog['15.0.rc1'][] = 'project-createGuide';
$lang->changelog['15.0.rc1'][] = 'project-moduleOpen';
$lang->changelog['15.0.rc1'][] = 'personnel-accessible';
$lang->changelog['15.0.rc1'][] = 'personnel-invest';
$lang->changelog['15.0.rc1'][] = 'personnel-whitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'my-workAction';
$lang->changelog['15.0.rc1'][] = 'my-contributeAction';
$lang->changelog['15.0.rc1'][] = 'my-testtask';
$lang->changelog['15.0.rc1'][] = 'my-execution';
$lang->changelog['15.0.rc1'][] = 'my-doc';
$lang->changelog['15.0.rc1'][] = 'my-calendarAction';
$lang->changelog['15.0.rc1'][] = 'story-trackAB';
$lang->changelog['15.0.rc1'][] = 'story-processStoryChange';
$lang->changelog['15.0.rc1'][] = 'projectstory-story';
$lang->changelog['15.0.rc1'][] = 'projectstory-trackAction';
$lang->changelog['15.0.rc1'][] = 'projectstory-view';
$lang->changelog['15.0.rc1'][] = 'projectstory-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-importplanstories';
$lang->changelog['15.0.rc1'][] = 'execution-whitelist';
$lang->changelog['15.0.rc1'][] = 'execution-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'execution-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'automation-browse';
$lang->changelog['15.0.rc1'][] = 'group-manageProjectAdmin';
$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';
$lang->changelog['15.0.rc1'][] = 'projectbuild-browse';
$lang->changelog['15.0.rc1'][] = 'projectrelease-browseAction';
$lang->changelog['15.0.rc1'][] = 'projectrelease-create';
$lang->changelog['15.0.rc1'][] = 'projectrelease-edit';
$lang->changelog['15.0.rc1'][] = 'projectrelease-delete';
$lang->changelog['15.0.rc1'][] = 'projectrelease-view';
$lang->changelog['15.0.rc1'][] = 'projectrelease-export';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-changeStatus';
$lang->changelog['15.0.rc1'][] = 'stakeholder-browse';
$lang->changelog['15.0.rc1'][] = 'stakeholder-create';
$lang->changelog['15.0.rc1'][] = 'stakeholder-batchCreate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-edit';
$lang->changelog['15.0.rc1'][] = 'stakeholder-delete';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-issue';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewIssueAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-communicate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expectation';
$lang->changelog['15.0.rc1'][] = 'stakeholder-deleteExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-createExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-editExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-userIssue';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copy Privileges';
$lang->group->copyOptions['copyUser'] = 'Copy người dùng';
$lang->group->versions[''] = 'Lịch sử';
$lang->group->versions['15_0_rc1'] = 'ZenTao15.0.rc1';
$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = '复制权限';
$lang->group->copyOptions['copyUser'] = '复制用户';
$lang->group->versions[''] = '修改历史';
$lang->group->versions['15_0_rc1'] = '禅道15.0.rc1';
$lang->group->versions['12_5'] = '禅道12.5';
$lang->group->versions['12_3'] = '禅道12.3';
$lang->group->versions['11_6_2'] = '禅道11.6.2';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = '複製權限';
$lang->group->copyOptions['copyUser'] = '複製用戶';
$lang->group->versions[''] = '修改歷史';
$lang->group->versions['15_0'] = '禪道15.0';
$lang->group->versions['12_5'] = '禪道12.5';
$lang->group->versions['12_3'] = '禪道12.3';
$lang->group->versions['11_6_2'] = '禪道11.6.2';
+52 -8
View File
@@ -41,20 +41,64 @@ class personnelModel extends model
/* Determine who can be accessed based on access control. */
$program = $this->loadModel('program')->getByID($programID);
$personnelList = array();
if($program->acl != 'open')
$personnelList = $this->dao->select('t2.id,t2.dept,t2.account,t2.role,t2.realname,t2.gender')->from(TABLE_USERVIEW)->alias('t1')
->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account')
->where('t2.deleted')->eq(0)
->beginIF($program->acl != 'open')->andWhere("CONCAT(',', t1.programs, ',')")->like("%,$programID,%")
->beginIF($deptID > 0)->andWhere('t2.dept')->eq($deptID)->fi()
->beginIF($browseType == 'bysearch')->andWhere($accessibleQuery)->fi()
->page($pager)
->fetchAll('id');
if($program->acl == 'open')
{
$personnelList = $this->dao->select('t2.id,t2.dept,t2.account,t2.role,t2.realname,t2.gender')->from(TABLE_USERVIEW)->alias('t1')
->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account')
->where("CONCAT(',', t1.programs, ',')")->like("%,$programID,%")
->beginIF($deptID > 0)->andWhere('t2.dept')->eq($deptID)->fi()
->beginIF($browseType == 'bysearch')->andWhere($accessibleQuery)->fi()
->page($pager)
->fetchAll();
foreach($personnelList as $personnel)
{
if(!$this->canViewProgram($programID, $personnel->account)) unset($personnelList[$personnel->id]);
}
}
return $personnelList;
}
/**
* Check if you have permission to view the program.
*
* @param int $programID
* @param string $account
* @access public
* @return void
*/
public function canViewProgram($programID, $account)
{
if(strpos($this->app->company->admins, ",{$account},") !== false) return true;
static $groupAcl = array();
if(empty($groupAcl)) $groupAcl = $this->dao->select('id,acl')->from(TABLE_GROUP)->fetchPairs();
static $userGroups = array();
if(empty($userGroups)) $userGroups = $this->dao->select('*')->from(TABLE_USERGROUP)->fetchGroup('account', 'group');
$programRight = false;
if(isset($userGroups[$account]))
{
foreach($userGroups[$account] as $groupID => $userGroup)
{
$group = json_decode($groupAcl[$groupID]);
if(!isset($group->programs))
{
$programRight = true;
continue;
}
elseif(in_array($programID, $group->programs))
{
$programRight = true;
continue;
}
}
}
return $programRight;
}
/**
* Get invest person list.
*
-12
View File
@@ -12,7 +12,6 @@
<?php include '../../common/view/header.html.php';
js::set('deptID', $deptID);
?>
<?php if($acl != 'open'): ?>
<div id="mainMenu" class="clearfix">
<div id="sidebarHeader">
<div class="title">
@@ -24,19 +23,15 @@ js::set('deptID', $deptID);
<a id="bysearchTab" class="btn btn-link querybox-toggle"><i class="icon icon-search muted"></i><?php echo $lang->personnel->search;?></a>
</div>
</div>
<?php endif;?>
<div id="mainContent" class="main-row fade">
<?php if($acl != 'open'): ?>
<div id="sidebar" class="side-col">
<div class="sidebar-toggle"><i class="icon icon-angle-left"></i></div>
<div class="cell">
<?php echo $deptTree;?>
</div>
</div>
<?php endif;?>
<div class="main-col">
<div id="queryBox" class="cell <?php if($browseType == 'bysearch') echo ' show';?>" data-module="accessible"></div>
<?php if(!empty($personnelList)):?>
<form class="main-table table-personnel" action="" data-ride="table">
<table id="accessibleList" class="table has-sort-head">
<thead>
@@ -67,12 +62,5 @@ js::set('deptID', $deptID);
</div>
</form>
</div>
<?php else:?>
<div class="table-empty-tip">
<p>
<span class="text-muted"><?php echo $acl == 'open' ? $lang->personnel->openedPGMTip : $lang->noData;?></span>
</p>
</div>
<?php endif;?>
</div>
<?php include '../../common/view/footer.html.php';?>
+9 -1
View File
@@ -95,7 +95,7 @@ $lang->story->source = 'Von';
$lang->story->sourceNote = 'Hinweis';
$lang->story->fromBug = 'Von Bug';
$lang->story->title = 'Titel';
$lang->story->type = 'Type';
$lang->story->category = 'Category';
$lang->story->color = 'Color';
$lang->story->toBug = 'ToBug';
$lang->story->spec = 'Beschreibung';
@@ -387,3 +387,11 @@ $lang->story->convertToTask->fieldList['spec'] = "Description";
$lang->story->convertToTask->fieldList['pri'] = 'Priority';
$lang->story->convertToTask->fieldList['mailto'] = 'Mailto';
$lang->story->convertToTask->fieldList['assignedTo'] = 'AssignTo';
$lang->story->categoryList['feature'] = 'Feature';
$lang->story->categoryList['interface'] = 'Interface';
$lang->story->categoryList['performance'] = 'Performance';
$lang->story->categoryList['safe'] = 'Safe';
$lang->story->categoryList['experience'] = 'Experience';
$lang->story->categoryList['improve'] = 'Improve';
$lang->story->categoryList['other'] = 'Other';
+9 -1
View File
@@ -96,7 +96,7 @@ $lang->story->source = 'From';
$lang->story->sourceNote = 'Note';
$lang->story->fromBug = 'From Bug';
$lang->story->title = 'Title';
$lang->story->type = 'Type';
$lang->story->category = 'Category';
$lang->story->color = 'Color';
$lang->story->toBug = 'ToBug';
$lang->story->spec = 'Description';
@@ -388,3 +388,11 @@ $lang->story->convertToTask->fieldList['spec'] = "Description";
$lang->story->convertToTask->fieldList['pri'] = 'Priority';
$lang->story->convertToTask->fieldList['mailto'] = 'Mailto';
$lang->story->convertToTask->fieldList['assignedTo'] = 'AssignTo';
$lang->story->categoryList['feature'] = 'Feature';
$lang->story->categoryList['interface'] = 'Interface';
$lang->story->categoryList['performance'] = 'Performance';
$lang->story->categoryList['safe'] = 'Safe';
$lang->story->categoryList['experience'] = 'Experience';
$lang->story->categoryList['improve'] = 'Improve';
$lang->story->categoryList['other'] = 'Other';
+9 -1
View File
@@ -95,7 +95,7 @@ $lang->story->source = 'De';
$lang->story->sourceNote = 'Note';
$lang->story->fromBug = 'Depuis Bug';
$lang->story->title = 'Titre';
$lang->story->type = 'Type';
$lang->story->category = 'Category';
$lang->story->color = 'Couleur';
$lang->story->toBug = 'Vers Bug';
$lang->story->spec = 'Description';
@@ -387,3 +387,11 @@ $lang->story->convertToTask->fieldList['spec'] = "Description";
$lang->story->convertToTask->fieldList['pri'] = 'Priority';
$lang->story->convertToTask->fieldList['mailto'] = 'Mailto';
$lang->story->convertToTask->fieldList['assignedTo'] = 'AssignTo';
$lang->story->categoryList['feature'] = 'Feature';
$lang->story->categoryList['interface'] = 'Interface';
$lang->story->categoryList['performance'] = 'Performance';
$lang->story->categoryList['safe'] = 'Safe';
$lang->story->categoryList['experience'] = 'Experience';
$lang->story->categoryList['improve'] = 'Improve';
$lang->story->categoryList['other'] = 'Other';
+9 -1
View File
@@ -95,7 +95,7 @@ $lang->story->source = 'Từ';
$lang->story->sourceNote = 'Ghi chú';
$lang->story->fromBug = 'Từ Bug';
$lang->story->title = 'Tiêu đề';
$lang->story->type = 'Loại';
$lang->story->category = 'Category';
$lang->story->color = 'Màu';
$lang->story->toBug = 'Tới Bug';
$lang->story->spec = 'Mô tả';
@@ -387,3 +387,11 @@ $lang->story->convertToTask->fieldList['spec'] = "Description";
$lang->story->convertToTask->fieldList['pri'] = 'Priority';
$lang->story->convertToTask->fieldList['mailto'] = 'Mailto';
$lang->story->convertToTask->fieldList['assignedTo'] = 'AssignTo';
$lang->story->categoryList['feature'] = 'Feature';
$lang->story->categoryList['interface'] = 'Interface';
$lang->story->categoryList['performance'] = 'Performance';
$lang->story->categoryList['safe'] = 'Safe';
$lang->story->categoryList['experience'] = 'Experience';
$lang->story->categoryList['improve'] = 'Improve';
$lang->story->categoryList['other'] = 'Other';
+9 -1
View File
@@ -96,7 +96,7 @@ $lang->story->source = "来源";
$lang->story->sourceNote = '来源备注';
$lang->story->fromBug = '来源Bug';
$lang->story->title = "{$lang->SRCommon}名称";
$lang->story->type = "类型";
$lang->story->category = "类型";
$lang->story->color = '标题颜色';
$lang->story->toBug = '转Bug';
$lang->story->spec = "描述";
@@ -388,3 +388,11 @@ $lang->story->convertToTask->fieldList['spec'] = "{$lang->SRCommon}描述"
$lang->story->convertToTask->fieldList['pri'] = '优先级';
$lang->story->convertToTask->fieldList['mailto'] = '抄送给';
$lang->story->convertToTask->fieldList['assignedTo'] = '指派给';
$lang->story->categoryList['feature'] = '功能';
$lang->story->categoryList['interface'] = '接口';
$lang->story->categoryList['performance'] = '性能';
$lang->story->categoryList['safe'] = '安全';
$lang->story->categoryList['experience'] = '体验';
$lang->story->categoryList['improve'] = '改进';
$lang->story->categoryList['other'] = '其他';
+9 -1
View File
@@ -96,7 +96,7 @@ $lang->story->source = "來源";
$lang->story->sourceNote = '來源備註';
$lang->story->fromBug = '來源Bug';
$lang->story->title = "{$lang->SRCommon}名稱";
$lang->story->type = "類型";
$lang->story->category = "類型";
$lang->story->color = '標題顏色';
$lang->story->toBug = '轉Bug';
$lang->story->spec = "描述";
@@ -388,3 +388,11 @@ $lang->story->convertToTask->fieldList['spec'] = "{$lang->SRCommon}描述"
$lang->story->convertToTask->fieldList['pri'] = '優先順序';
$lang->story->convertToTask->fieldList['mailto'] = '抄送給';
$lang->story->convertToTask->fieldList['assignedTo'] = '指派給';
$lang->story->categoryList['feature'] = '功能';
$lang->story->categoryList['interface'] = '介面';
$lang->story->categoryList['performance'] = '效能';
$lang->story->categoryList['safe'] = '安全';
$lang->story->categoryList['experience'] = '體驗';
$lang->story->categoryList['improve'] = '改進';
$lang->story->categoryList['other'] = '其他';
+6
View File
@@ -155,6 +155,12 @@
</div>
</div>
<?php if(strpos(",$showFields,", ',pri,') !== false): // begin print pri selector?>
<div class='table-col w-150px'>
<div class="input-group">
<span class="input-group-addon fix-border br-0"><?php echo $lang->story->category;?></span>
<?php echo html::select('category', $lang->story->categoryList, 'feature', "class='form-control chosen'");?>
</div>
</div>
<div class='table-col w-120px'>
<div class="input-group">
<span class="input-group-addon fix-border br-0"><?php echo $lang->story->pri;?></span>
+31 -11
View File
@@ -244,6 +244,8 @@ class testtask extends control
$executions = empty($productID) ? array() : $this->loadModel('product')->getExecutionPairsByProduct($productID, 0, 'id_desc', $projectID);
$builds = empty($productID) ? array() : $this->loadModel('build')->getProductBuildPairs($productID, 0, 'notrunk', true);
$testreports = empty($build) ? array() : $this->dao->select('id,title')->from(TABLE_TESTREPORT)->where('builds')->like('%' . $build . '%')->fetchPairs('id','title');
/* Set menu. */
$productID = $this->product->saveState($productID, $this->products);
@@ -258,6 +260,7 @@ class testtask extends control
$this->view->executions = $executions;
$this->view->builds = $builds;
$this->view->build = $build;
$this->view->testreports = $testreports;
$this->view->users = $this->loadModel('user')->getPairs('noclosed|qdfirst|nodeleted');
$this->display();
@@ -317,13 +320,14 @@ class testtask extends control
$this->view->position[] = $this->lang->testtask->common;
$this->view->position[] = $this->lang->testtask->view;
$this->view->productID = $productID;
$this->view->task = $task;
$this->view->users = $this->loadModel('user')->getPairs('noclosed|noletter');
$this->view->actions = $this->loadModel('action')->getList('testtask', $taskID);
$this->view->build = $build;
$this->view->stories = $stories;
$this->view->bugs = $bugs;
$this->view->productID = $productID;
$this->view->task = $task;
$this->view->users = $this->loadModel('user')->getPairs('noclosed|noletter');
$this->view->actions = $this->loadModel('action')->getList('testtask', $taskID);
$this->view->build = $build;
$this->view->testreportTitle = $this->dao->select('title')->from(TABLE_TESTREPORT)->where('id')->eq($task->testreport)->fetch('title');
$this->view->stories = $stories;
$this->view->bugs = $bugs;
$this->display();
}
@@ -742,14 +746,16 @@ class testtask extends control
$this->view->position[] = $this->lang->testtask->edit;
/* Create testtask from testtask of test.*/
$productID = $productID ? $productID : key($this->products);
$projectID = $this->lang->navGroup->testtask == 'qa' ? 0 : $this->session->project;
$executions = empty($productID) ? array() : $this->product->getExecutionPairsByProduct($productID, 0, 'id_desc', $projectID);
$builds = empty($productID) ? array() : $this->loadModel('build')->getProductBuildPairs($productID, 0, 'notrunk', true);
$productID = $productID ? $productID : key($this->products);
$projectID = $this->lang->navGroup->testtask == 'qa' ? 0 : $this->session->project;
$executions = empty($productID) ? array() : $this->product->getExecutionPairsByProduct($productID, 0, 'id_desc', $projectID);
$builds = empty($productID) ? array() : $this->loadModel('build')->getProductBuildPairs($productID, 0, 'notrunk', true);
$testreports = $this->dao->select('id,title')->from(TABLE_TESTREPORT)->where('builds')->like('%' . $task->build . '%')->fetchPairs('id','title');
$this->view->task = $task;
$this->view->executions = $executions;
$this->view->builds = $builds;
$this->view->testreports = $testreports;
$this->view->users = $this->loadModel('user')->getPairs('nodeleted', $task->owner);
$this->view->contactLists = $this->user->getContactLists($this->app->user->account, 'withnote');
@@ -1413,4 +1419,18 @@ class testtask extends control
$pairs = $this->testtask->getPairs($productID, $executionID);
die(html::select('testtask', $pairs, '', "class='form-control chosen'"));
}
/**
* Ajax get test report.
*
* @param int $buildID
* @access public
* @return void
*/
public function ajaxGetTestReports($buildID)
{
/* Testreport list. */
$pairs = $this->dao->select('id,title')->from(TABLE_TESTREPORT)->where('builds')->like('%' . $buildID . '%')->fetchPairs('id','title');
die(html::select('testreport', $pairs, '', "class='form-control chosen'"));
}
}
+19
View File
@@ -94,6 +94,25 @@ function loadExecutionBuilds(executionID)
});
}
/**
* Load test report.
*
* @param int buildID
* @access public
* @return void
*/
function loadTestReports(buildID)
{
link = createLink('testtask', 'ajaxGetTestReports', 'buildID=' + buildID);
$.get(link, function(data)
{
if(!data) data = '<select id="testreport" name="testreport" class="form-control"></select>';
$('#testreport').replaceWith(data);
$('#testreport_chosen').remove();
$("#testreport").chosen();
});
}
/**
* when begin date input change and end date input is null
* change end date input to begin's after day
+2 -2
View File
@@ -7,8 +7,8 @@
function loadProductRelated()
{
loadExecutions($('#product').val());
data = '<select id="build" name="build" class="form-control"></select>';
$('#build').replaceWith(data);
buildData = '<select id="build" name="build" class="form-control" onchange="loadTestReports(this.value)"></select>';
$('#build').replaceWith(buildData);
$('#build_chosen').remove();
$("#build").chosen();
$('#build').trigger("chosen:updated");
+1
View File
@@ -72,6 +72,7 @@ $lang->testtask->desc = 'Beschreibung';
$lang->testtask->mailto = 'Mail an';
$lang->testtask->status = 'Status';
$lang->testtask->subStatus = 'Sub Status';
$lang->testtask->testreport = 'Test Report';
$lang->testtask->assignedTo = 'Zugeordnet';
$lang->testtask->linkVersion = 'Version';
$lang->testtask->lastRunAccount = 'Ausgeführt von';
+1
View File
@@ -75,6 +75,7 @@ $lang->testtask->desc = 'Description';
$lang->testtask->mailto = 'Mailto';
$lang->testtask->status = 'Status';
$lang->testtask->subStatus = 'Sub Status';
$lang->testtask->testreport = 'Test Report';
$lang->testtask->assignedTo = 'Assigned';
$lang->testtask->linkVersion = 'Build';
$lang->testtask->lastRunAccount = 'RunBy';
+1
View File
@@ -72,6 +72,7 @@ $lang->testtask->desc = 'Description';
$lang->testtask->mailto = 'Mailto';
$lang->testtask->status = 'Statut';
$lang->testtask->subStatus = 'Sous-statut';
$lang->testtask->testreport = 'Test Report';
$lang->testtask->assignedTo = 'Affecté';
$lang->testtask->linkVersion = 'Build';
$lang->testtask->lastRunAccount = 'Jouée par';
+1
View File
@@ -72,6 +72,7 @@ $lang->testtask->desc = 'Mô tả';
$lang->testtask->mailto = 'Mail tới';
$lang->testtask->status = 'Tình trạng';
$lang->testtask->subStatus = 'Tình trạng con';
$lang->testtask->testreport = 'Test Report';
$lang->testtask->assignedTo = 'Đã giao';
$lang->testtask->linkVersion = 'Bản dựng';
$lang->testtask->lastRunAccount = 'Chạy bởi';
+1
View File
@@ -75,6 +75,7 @@ $lang->testtask->desc = '描述';
$lang->testtask->mailto = '抄送给';
$lang->testtask->status = '当前状态';
$lang->testtask->subStatus = '子状态';
$lang->testtask->testreport = '相关测试报告';
$lang->testtask->assignedTo = '指派给';
$lang->testtask->linkVersion = '版本';
$lang->testtask->lastRunAccount = '执行人';
+1
View File
@@ -75,6 +75,7 @@ $lang->testtask->desc = '描述';
$lang->testtask->mailto = '抄送給';
$lang->testtask->status = '當前狀態';
$lang->testtask->subStatus = '子狀態';
$lang->testtask->testreport = '相關測試報告';
$lang->testtask->assignedTo = '指派給';
$lang->testtask->linkVersion = '版本';
$lang->testtask->lastRunAccount = '執行人';
+6 -2
View File
@@ -24,7 +24,7 @@
<table class='table table-form'>
<?php if(isset($executionID)):?>
<tr>
<th class='w-80px'><?php echo $lang->testtask->product;?></th>
<th class='w-100px'><?php echo $lang->testtask->product;?></th>
<td class='w-p35-f'><?php echo html::select('product', $products, $productID, "class='form-control chosen' onchange='loadProductRelated()'");?></td><td></td>
</tr>
<?php else:?>
@@ -41,7 +41,7 @@
<th class='w-80px'><?php echo $lang->testtask->build;?></th>
<td class='w-p35-f'>
<div class='input-group' id='buildBox'>
<?php echo html::select('build', empty($builds) ? '' : $builds, $build, "class='form-control chosen'");?>
<?php echo html::select('build', empty($builds) ? '' : $builds, $build, "class='form-control chosen' onchange='loadTestReports(this.value)'");?>
<?php if(isset($executionID) and $executionID and empty($builds)):?>
<span class='input-group-addon'><?php echo html::a(helper::createLink('build', 'create', "executionID=$executionID&productID=$productID&projectID=$projectID", '', true), $lang->build->create, '', "data-toggle='modal' data-type='iframe' data-width='95%'")?> </span>
</div>
@@ -78,6 +78,10 @@
<th><?php echo $lang->testtask->status;?></th>
<td><?php echo html::select('status', $lang->testtask->statusList, '', "class='form-control chosen'");?></td>
</tr>
<tr>
<th><?php echo $lang->testtask->testreport;?></th>
<td><?php echo html::select('testreport', $testreports, '', "class='form-control chosen'");?></td>
</tr>
<tr>
<th><?php echo $lang->testtask->name;?></th>
<td colspan='2'><?php echo html::input('name', '', "class='form-control'");?></td>
+6 -2
View File
@@ -25,7 +25,7 @@
<form method='post' class="main-form form-ajax" enctype="multipart/form-data" id='dataform'>
<table class='table table-form'>
<tr>
<th class='w-80px'><?php echo $lang->testtask->execution;?></th>
<th class='w-100px'><?php echo $lang->testtask->execution;?></th>
<td class='w-p35-f'>
<?php
echo html::select('execution', $executions, $task->execution, "class='form-control chosen' onchange='loadExecutionRelated(this.value)'");
@@ -35,7 +35,7 @@
<td></td>
</tr>
<tr>
<th class='w-80px'><?php echo $lang->testtask->build;?></th>
<th><?php echo $lang->testtask->build;?></th>
<td class='w-p35-f'><span id='buildBox'><?php echo html::select('build', $builds, $task->build, "class='form-control chosen'");?></span></td>
<td></td>
</tr>
@@ -67,6 +67,10 @@
<th><?php echo $lang->testtask->status;?></th>
<td><?php echo html::select('status', $lang->testtask->statusList, $task->status, "class='form-control chosen'");?></td>
</tr>
<tr>
<th><?php echo $lang->testtask->testreport;?></th>
<td><?php echo html::select('testreport', $testreports, $task->testreport, "class='form-control chosen'");?></td>
</tr>
<tr>
<th><?php echo $lang->testtask->name;?></th>
<td colspan='2'><?php echo html::input('name', $task->name, "class='form-control'");?></td>
+5 -1
View File
@@ -80,7 +80,7 @@
<table class="table table-data table-fixed">
<?php $isOnlybody = helper::inOnlyBodyMode(); ?>
<tr>
<th class='w-60px'><?php echo $lang->testtask->execution;?></th>
<th class='w-90px'><?php echo $lang->testtask->execution;?></th>
<td><?php echo $isOnlybody ? $task->executionName : html::a($this->createLink('execution', 'story', "executionID=$task->execution"), $task->executionName, '', "title='{$task->executionName}'");?></td>
</tr>
<tr>
@@ -128,6 +128,10 @@
<th><?php echo $lang->testtask->status;?></th>
<td class='task-<?php echo $task->status?>'><?php echo $this->processStatus('testtask', $task);?></td>
</tr>
<tr>
<th><?php echo $lang->testtask->testreport;?></th>
<td class="c-name" title="<?php echo $testreportTitle;?>"><?php echo empty($task->testreport) ? '' : html::a($this->createLink('testreport', 'view', "reportID=$task->testreport"), $testreportTitle);?></td>
</tr>
</table>
</div>
</div>
+1 -1
View File
@@ -303,7 +303,7 @@ class userModel extends model
$this->loadModel('mail');
if($this->config->mail->mta == 'sendcloud' and !empty($user->email)) $this->mail->syncSendCloud('sync', $user->email, $user->realname);
return $usereID;
return $userID;
}
}