From 7ab268bb9c39cdc093a456343a2beb1df89238df Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Wed, 29 Nov 2023 16:22:34 +0800 Subject: [PATCH] * Merge 18.9 testtask module. --- module/testtask/config/form.php | 2 ++ module/testtask/config/table.php | 5 +++++ module/testtask/control.php | 32 +++++++++++++++++++++++++++++- module/testtask/js/common.ui.js | 11 ++++++++++ module/testtask/lang/de.php | 3 +++ module/testtask/lang/en.php | 3 +++ module/testtask/lang/fr.php | 3 +++ module/testtask/lang/zh-cn.php | 3 +++ module/testtask/model.php | 2 +- module/testtask/tao.php | 3 ++- module/testtask/ui/create.html.php | 13 ++++++++++++ module/testtask/ui/edit.html.php | 16 ++++++++++++++- module/testtask/zen.php | 14 +++++++++++-- 13 files changed, 104 insertions(+), 6 deletions(-) diff --git a/module/testtask/config/form.php b/module/testtask/config/form.php index a9c6b2512a..7fcf4039da 100644 --- a/module/testtask/config/form.php +++ b/module/testtask/config/form.php @@ -22,6 +22,7 @@ $config->testtask->form->create['desc'] = array('required' => false, 'typ $config->testtask->form->create['mailto'] = array('required' => false, 'type' => 'array', 'default' => array(''), 'filter' => 'join'); $config->testtask->form->create['createdBy'] = array('required' => false, 'type' => 'string', 'default' => $account); $config->testtask->form->create['createdDate'] = array('required' => false, 'type' => 'date', 'default' => $now); +$config->testtask->form->create['members'] = array('required' => false, 'type' => 'array', 'default' => array(''), 'filter' => 'join'); $config->testtask->form->edit = array(); $config->testtask->form->edit['product'] = array('required' => true, 'type' => 'int', 'default' => ''); @@ -38,6 +39,7 @@ $config->testtask->form->edit['pri'] = array('required' => false, 'type' $config->testtask->form->edit['desc'] = array('required' => false, 'type' => 'string', 'default' => '', 'control' => 'editor'); $config->testtask->form->edit['mailto'] = array('required' => false, 'type' => 'array', 'default' => array(), 'filter' => 'join'); $config->testtask->form->edit['deleteFiles'] = array('required' => false, 'type' => 'array', 'default' => array(), 'filter' => 'join'); +$config->testtask->form->edit['members'] = array('required' => false, 'type' => 'array', 'default' => array(''), 'filter' => 'join'); $config->testtask->form->start = array(); $config->testtask->form->start['status'] = array('required' => true, 'type' => 'string', 'default' => 'doing'); diff --git a/module/testtask/config/table.php b/module/testtask/config/table.php index 3254d9971e..aa3ccc6f66 100644 --- a/module/testtask/config/table.php +++ b/module/testtask/config/table.php @@ -35,6 +35,11 @@ $config->testtask->dtable->fieldList['owner']['title'] = $lang->testtask->owne $config->testtask->dtable->fieldList['owner']['type'] = 'user'; $config->testtask->dtable->fieldList['owner']['group'] = 'user'; +$config->testtask->dtable->fieldList['members']['name'] = 'members'; +$config->testtask->dtable->fieldList['members']['title'] = $lang->testtask->members; +$config->testtask->dtable->fieldList['members']['type'] = 'text'; +$config->testtask->dtable->fieldList['members']['group'] = 'user'; + $config->testtask->dtable->fieldList['begin']['name'] = 'begin'; $config->testtask->dtable->fieldList['begin']['title'] = $lang->testtask->begin; $config->testtask->dtable->fieldList['begin']['type'] = 'date'; diff --git a/module/testtask/control.php b/module/testtask/control.php index 1d25777646..7be17af454 100644 --- a/module/testtask/control.php +++ b/module/testtask/control.php @@ -107,10 +107,19 @@ class testtask extends control /* Query the testtasks from the database. */ $testtasks = $this->testtask->getProductTasks($productID, $branch, $type, $beginTime, $endTime, $sort, $pager); + /* Process testtask members. */ + $users = $this->loadModel('user')->getPairs('noclosed|noletter'); + foreach($testtasks as $testtask) + { + $members = array(); + foreach(explode(',', $testtask->members) as $member) $members[] = zget($users, $member); + $testtask->members = implode(',', array_unique($members)); + } + $this->testtaskZen->prepareSummaryForBrowse($testtasks); $this->view->title = $product->name . $this->lang->colon . $this->lang->testtask->common; - $this->view->users = $this->loadModel('user')->getPairs('noclosed|noletter'); + $this->view->users = $users; $this->view->tasks = $testtasks; $this->view->product = $product; $this->view->branch = $branch; @@ -199,6 +208,14 @@ class testtask extends control $formData->project = $execution->project; } + if($formData->build && empty($formData->execution)) + { + $build = $this->loadModel('build')->getById($this->post->build); + $formData->project = $build->project; + } + + $formData->members = trim($formData->members, ','); + /* 创建测试单。*/ /* Create a testtask. */ $testtaskID = $this->testtask->create($formData); @@ -1131,4 +1148,17 @@ class testtask extends control $result = $this->dao->select('*')->from(TABLE_TESTRESULT)->where('id')->eq($resultID)->fetch(); return $this->send(array('result' => 'success', 'data' => $result)); } + + /** + * AJAX: Get executionID by buildID. + * + * @param int $buildID + * @access public + * @return int + */ + public function ajaxGetExecutionByBuild(int $buildID) + { + $execution = $this->loadModel('execution')->getByBuild($buildID); + return print($execution ? $execution->id : 0); + } } diff --git a/module/testtask/js/common.ui.js b/module/testtask/js/common.ui.js index a06a3cc792..2e2bf5d2b4 100644 --- a/module/testtask/js/common.ui.js +++ b/module/testtask/js/common.ui.js @@ -194,3 +194,14 @@ function toggleCheckChildItem(event) var $resultSteps = $target.closest('.resultSteps'); $resultSteps.find('.check-all input[type=checkbox]').prop('checked', $resultSteps.find('.check-item input[type=checkbox]').length == $resultSteps.find('.check-item input[type=checkbox]:checked').length); } + +function setExecutionByBuild() +{ + const buildID = $('[name=build]').val(); + link = $.createLink('testtask', 'ajaxGetExecutionByBuild', 'buildID=' + buildID); + $.get(link, function(data) + { + + $('[name="execution"]').zui('picker').$.setValue(data); + }); +} diff --git a/module/testtask/lang/de.php b/module/testtask/lang/de.php index b9cef4804d..5c35102879 100644 --- a/module/testtask/lang/de.php +++ b/module/testtask/lang/de.php @@ -56,6 +56,7 @@ $lang->testtask->run = 'Test Run ID'; $lang->testtask->job = 'Job'; $lang->testtask->compile = 'Compile'; $lang->testtask->duration = 'Duration'; +$lang->testtask->myInvolved = 'Involved'; $lang->testtask->viewAction = "View Request"; $lang->testtask->casesAction = 'Browse Cases List'; @@ -74,6 +75,7 @@ $lang->testtask->execution = $lang->execution->common; $lang->testtask->type = 'Typ'; $lang->testtask->build = 'Build'; $lang->testtask->owner = 'Besitzer'; +$lang->testtask->members = 'Participant'; $lang->testtask->executor = 'Executor'; $lang->testtask->execTime = 'Exec Time'; $lang->testtask->pri = 'Priorität'; @@ -200,6 +202,7 @@ $lang->testtask->report->charts['testTaskPerModule'] = 'Modulbericht'; $lang->testtask->report->charts['testTaskPerRunner'] = 'Ausgeführt von Bericht'; $lang->testtask->featureBar['browse']['totalStatus'] = $lang->testtask->totalStatus; +$lang->testtask->featureBar['browse']['myinvolved'] = $lang->testtask->myInvolved; $lang->testtask->featureBar['browse']['wait'] = $lang->testtask->wait; $lang->testtask->featureBar['browse']['doing'] = $lang->testtask->testing; $lang->testtask->featureBar['browse']['blocked'] = $lang->testtask->blocked; diff --git a/module/testtask/lang/en.php b/module/testtask/lang/en.php index e1c2e64ed9..1a7f32c71a 100644 --- a/module/testtask/lang/en.php +++ b/module/testtask/lang/en.php @@ -56,6 +56,7 @@ $lang->testtask->run = 'Test Run ID'; $lang->testtask->job = 'Job'; $lang->testtask->compile = 'Compile'; $lang->testtask->duration = 'Duration'; +$lang->testtask->myInvolved = 'Involved'; $lang->testtask->viewAction = "View Request"; $lang->testtask->casesAction = 'Browse Cases List'; @@ -74,6 +75,7 @@ $lang->testtask->execution = $lang->execution->common; $lang->testtask->type = 'Type'; $lang->testtask->build = 'Build'; $lang->testtask->owner = 'Owner'; +$lang->testtask->members = 'Participant'; $lang->testtask->executor = 'Executor'; $lang->testtask->execTime = 'Exec Time'; $lang->testtask->pri = 'Priority'; @@ -200,6 +202,7 @@ $lang->testtask->report->charts['testTaskPerModule'] = 'Test Case Module'; $lang->testtask->report->charts['testTaskPerRunner'] = 'Test Case RunBy'; $lang->testtask->featureBar['browse']['totalStatus'] = $lang->testtask->totalStatus; +$lang->testtask->featureBar['browse']['myinvolved'] = $lang->testtask->myInvolved; $lang->testtask->featureBar['browse']['wait'] = $lang->testtask->wait; $lang->testtask->featureBar['browse']['doing'] = $lang->testtask->testing; $lang->testtask->featureBar['browse']['blocked'] = $lang->testtask->blocked; diff --git a/module/testtask/lang/fr.php b/module/testtask/lang/fr.php index e3f4e7dba7..8268ab76cb 100644 --- a/module/testtask/lang/fr.php +++ b/module/testtask/lang/fr.php @@ -56,6 +56,7 @@ $lang->testtask->run = 'Test Run ID'; $lang->testtask->job = 'Job'; $lang->testtask->compile = 'Compile'; $lang->testtask->duration = 'Duration'; +$lang->testtask->myInvolved = 'Involved'; $lang->testtask->viewAction = "View Request"; $lang->testtask->casesAction = 'Browse Cases List'; @@ -74,6 +75,7 @@ $lang->testtask->execution = $lang->execution->common; $lang->testtask->type = 'Type'; $lang->testtask->build = 'Build'; $lang->testtask->owner = 'Owner'; +$lang->testtask->members = 'Participant'; $lang->testtask->executor = 'Executeur'; $lang->testtask->execTime = 'Durée Exec'; $lang->testtask->pri = 'Priorité'; @@ -200,6 +202,7 @@ $lang->testtask->report->charts['testTaskPerModule'] = 'Module CasTests'; $lang->testtask->report->charts['testTaskPerRunner'] = 'CasTests joués par'; $lang->testtask->featureBar['browse']['totalStatus'] = $lang->testtask->totalStatus; +$lang->testtask->featureBar['browse']['myinvolved'] = $lang->testtask->myInvolved; $lang->testtask->featureBar['browse']['wait'] = $lang->testtask->wait; $lang->testtask->featureBar['browse']['doing'] = $lang->testtask->testing; $lang->testtask->featureBar['browse']['blocked'] = $lang->testtask->blocked; diff --git a/module/testtask/lang/zh-cn.php b/module/testtask/lang/zh-cn.php index 568d289d52..f95b09dbcf 100644 --- a/module/testtask/lang/zh-cn.php +++ b/module/testtask/lang/zh-cn.php @@ -56,6 +56,7 @@ $lang->testtask->run = '执行编号'; $lang->testtask->job = '构建任务'; $lang->testtask->compile = '构建'; $lang->testtask->duration = '持续时间'; +$lang->testtask->myInvolved = '由我参与'; $lang->testtask->viewAction = "测试单概况"; $lang->testtask->casesAction = '浏览用例列表'; @@ -74,6 +75,7 @@ $lang->testtask->execution = '所属' . $lang->execution->common; $lang->testtask->type = '测试类型'; $lang->testtask->build = '提测版本'; $lang->testtask->owner = '负责人'; +$lang->testtask->members = '参与人'; $lang->testtask->executor = '执行人'; $lang->testtask->execTime = '执行时间'; $lang->testtask->pri = '优先级'; @@ -200,6 +202,7 @@ $lang->testtask->report->charts['testTaskPerModule'] = '按用例模块统计 $lang->testtask->report->charts['testTaskPerRunner'] = '按用例执行人统计'; $lang->testtask->featureBar['browse']['totalStatus'] = $lang->testtask->totalStatus; +$lang->testtask->featureBar['browse']['myinvolved'] = $lang->testtask->myInvolved; $lang->testtask->featureBar['browse']['wait'] = $lang->testtask->wait; $lang->testtask->featureBar['browse']['doing'] = $lang->testtask->testing; $lang->testtask->featureBar['browse']['blocked'] = $lang->testtask->blocked; diff --git a/module/testtask/model.php b/module/testtask/model.php index cb6d58f14a..bb2df54812 100755 --- a/module/testtask/model.php +++ b/module/testtask/model.php @@ -1633,7 +1633,7 @@ class testtaskModel extends model public function getToAndCcList(object $testtask): false|array { /* Set toList and ccList. */ - $toList = zget($testtask, 'owner', ''); + $toList = zget($testtask, 'owner', '') . ',' . zget($testtask, 'members', '') . ','; $ccList = str_replace(' ', '', trim(zget($testtask, 'mailto', ''), ',')); if(empty($toList)) diff --git a/module/testtask/tao.php b/module/testtask/tao.php index 475e478b80..8d2939a5e2 100644 --- a/module/testtask/tao.php +++ b/module/testtask/tao.php @@ -33,13 +33,14 @@ class testtaskTao extends testtaskModel ->beginIF(!$this->app->user->admin)->andWhere('t1.execution')->in("0,{$this->app->user->view->sprints}")->fi() ->beginIF($scope == 'local')->andWhere('t1.product')->eq($productID)->fi() ->beginIF($scope == 'all')->andWhere('t1.product')->in($this->app->user->view->products)->fi() + ->beginIF(strtolower($scope[1]) == 'myinvolved')->andWhere("FIND_IN_SET('{$this->app->user->account}', t1.members)")->fi() ->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi() ->beginIF(strtolower($status) == 'totalstatus')->andWhere('t1.status')->in('blocked,doing,wait,done')->fi() ->beginIF(strtolower($status) == 'review') // 工作流开启审批的时候才会使用,才会新增字段。 ->andWhere("FIND_IN_SET('{$this->app->user->account}', t1.reviewers)") ->andWhere('t1.reviewStatus')->eq('doing') ->fi() - ->beginIF(!in_array(strtolower($status), array('totalstatus', 'review'), true) && $status)->andWhere('t1.status')->eq($status)->fi() + ->beginIF(!in_array(strtolower($status), array('totalstatus', 'review', 'myinvolved'), true) && $status)->andWhere('t1.status')->eq($status)->fi() ->beginIF($unit != 'unit') ->beginIF($begin)->andWhere('t1.begin')->ge($begin)->fi() ->beginIF($end)->andWhere('t1.end')->le($end)->fi() diff --git a/module/testtask/ui/create.html.php b/module/testtask/ui/create.html.php index 05bdaab4a1..5644446735 100644 --- a/module/testtask/ui/create.html.php +++ b/module/testtask/ui/create.html.php @@ -55,6 +55,7 @@ formPanel picker ( setID('build'), + on::change('setExecutionByBuild'), set::name('build'), set::items($builds), set::required(true), @@ -102,6 +103,18 @@ formPanel set::control('picker'), set::items($users) ), + formgroup + ( + set::width('1/2'), + set::label($lang->testtask->members), + picker + ( + setid('members'), + set::name('members[]'), + set::items($users), + set::multiple(true) + ) + ), formGroup ( set::width('1/2'), diff --git a/module/testtask/ui/edit.html.php b/module/testtask/ui/edit.html.php index 3a6ba1aecc..7d07a1967f 100644 --- a/module/testtask/ui/edit.html.php +++ b/module/testtask/ui/edit.html.php @@ -38,7 +38,8 @@ formPanel set::name('build'), set::value($task->build), set::control('picker'), - set::items($builds) + set::items($builds), + on::change('setExecutionByBuild') ), formGroup ( @@ -59,6 +60,19 @@ formPanel set::control('picker'), set::items($users) ), + formgroup + ( + set::width('1/2'), + set::label($lang->testtask->members), + picker + ( + setid('members'), + set::name('members[]'), + set::items($users), + set::value($task->members), + set::multiple(true) + ) + ), formGroup ( set::width('1/2'), diff --git a/module/testtask/zen.php b/module/testtask/zen.php index 6728dff799..b93216e2cd 100644 --- a/module/testtask/zen.php +++ b/module/testtask/zen.php @@ -135,8 +135,18 @@ class testtaskZen extends testtask ->get(); /* Fix bug #35419. */ - $execution = $this->loadModel('execution')->getByID($task->execution); - $task->project = $execution->project; + $execution = $this->loadModel('execution')->getByID($task->execution); + if(!$execution) + { + $build = $this->loadModel('build')->getById($task->build); + $task->project = $build->project; + } + else + { + $task->project = $execution->project; + } + + $task->members = trim($task->members, ','); $task = $this->loadModel('file')->processImgURL($task, $this->config->testtask->editor->edit['id'], $this->post->uid); return $task;