From a6b49e9e68989da15231fbbce44697de212ad8e5 Mon Sep 17 00:00:00 2001 From: zenggang Date: Fri, 26 May 2023 06:13:07 +0000 Subject: [PATCH] * Bug batchResolve ajaxLoadExecutionTeamMembers method --- module/bug/control.php | 5 +- module/bug/model.php | 31 ++---- module/bug/test/bug.class.php | 4 +- module/bug/test/model/batchresolve.php | 97 +++++++++++++++---- .../bug/test/model/getproductmemberpairs.php | 49 +++++++--- .../model/yaml/{activate => }/execution.yaml | 0 module/bug/zen.php | 8 +- module/user/model.php | 6 +- 8 files changed, 130 insertions(+), 70 deletions(-) rename module/bug/test/model/yaml/{activate => }/execution.yaml (100%) diff --git a/module/bug/control.php b/module/bug/control.php index 2716bcc545..713069d0ab 100755 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -947,11 +947,13 @@ class bug extends control { if(!$this->post->bugIDList) return print(js::locate($this->session->bugList, 'parent')); + /* Prepare resolve data. */ $bugIdList = array_unique($this->post->bugIDList); $oldBugs = $this->bug->getByIdList($bugIdList); $bugIdList = $this->bugZen->batchResolveIdFilter($bugIdList, $oldBugs); list($modules, $productQD) = $this->bugZen->getBatchResolveVars($oldBugs); + /* Batch resolve bugs. */ $changes = $this->bug->batchResolve($bugIdList, $resolution, $resolvedBuild, $oldBugs, $modules, $productQD); if(dao::isError()) return print(js::error(dao::getError())); @@ -1128,6 +1130,7 @@ class bug extends control } /** + * ajax方式获取产品关联执行的团队成员列表。 * AJAX: get team members of the latest executions of a product as assignedTo list. * * @param int $productID @@ -1135,7 +1138,7 @@ class bug extends control * @access public * @return string */ - public function ajaxLoadExecutionTeamMembers($productID, $selectedUser = '') + public function ajaxLoadExecutionTeamMembers(int $productID, string $selectedUser = '') { $productMembers = $this->bug->getProductMemberPairs($productID); diff --git a/module/bug/model.php b/module/bug/model.php index 954982a37d..30d3cf0a04 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -870,7 +870,7 @@ class bugModel extends model $this->bugTao->updateByID((int)$bugID, $bug); - $this->executeHooks($bugID); + $this->executeHooks((int)$bugID); if($oldBug->execution) $this->loadModel('kanban')->updateLane($oldBug->execution, 'bug'); $changes[$bugID] = common::createChanges($oldBug, $bug); @@ -1504,38 +1504,21 @@ class bugModel extends model } /** + * 获取产品成员键对。 * get Product member pairs. * * @param int $productID - * @param int $branchID + * @param string $branchID * @access public - * @return void + * @return array */ - public function getProductMemberPairs($productID, $branchID = '') + public function getProductMemberPairs(int $productID, string $branchID = ''): array { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getTeamMembersPairs(); - $projects = $this->loadModel('product')->getProjectPairsByProduct($productID, (string)$branchID); + $projects = $this->loadModel('product')->getProjectPairsByProduct($productID, $branchID); - $users = $this->dao->select("t2.id, t2.account, t2.realname")->from(TABLE_TEAM)->alias('t1') - ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') - ->where('t1.root')->in(array_keys($projects)) - ->andWhere('t1.type')->eq('project') - ->andWhere('t2.deleted')->eq(0) - ->fi() - ->fetchAll('account'); - - if(!$users) return array('' => ''); - - foreach($users as $account => $user) - { - $firstLetter = ucfirst(substr($user->account, 0, 1)) . ':'; - if(!empty($this->config->isINT)) $firstLetter = ''; - $users[$account] = $firstLetter . ($user->realname ? $user->realname : $user->account); - } - - $users = $this->loadModel('user')->processAccountSort($users); - return array('' => '') + $users; + return $this->loadModel('user')->getTeamMemberPairs(array_keys($projects)); } /** diff --git a/module/bug/test/bug.class.php b/module/bug/test/bug.class.php index ca7a471af2..5d601ef0a8 100644 --- a/module/bug/test/bug.class.php +++ b/module/bug/test/bug.class.php @@ -1148,7 +1148,9 @@ class bugTest */ public function batchResolveTest($bugIDList, $resolution, $bugID) { - $object = $this->objectModel->batchResolve($bugIDList, $resolution, 'trunk'); + $oldBugs = $this->objectModel->getByIdList($bugIDList); + + $object = $this->objectModel->batchResolve($bugIDList, $resolution, 'trunk', $oldBugs, array(), 'user3'); if(dao::isError()) { diff --git a/module/bug/test/model/batchresolve.php b/module/bug/test/model/batchresolve.php index 167637a7dd..753fc7d410 100755 --- a/module/bug/test/model/batchresolve.php +++ b/module/bug/test/model/batchresolve.php @@ -2,26 +2,85 @@ batchResolve(); +timeout=0 cid=1 -pid=1 -解决bug1 2 3,解决方式为bydesign >> resolution,,bydesign;status,active,resolved -解决bug4 5 6,解决方式为duplicate >> resolution,,duplicate;status,active,resolved -解决bug7 8 9,解决方式为external >> resolution,,external;status,active,resolved -解决bug10 11 12,解决方式为fixed >> resolution,,fixed;status,active,resolved -解决bug13 14 15,解决方式为notrepro >> resolution,,notrepro;status,active,resolved -解决bug16 17 18,解决方式为postponed >> resolution,,postponed;status,active,resolved -解决bug19 20 21,解决方式为willnotfix >> resolution,,willnotfix;status,active,resolved -解决bug22 23 24,解决方式为tostory >> resolution,,tostory;status,active,resolved -解决bug状态为resolve的bug >> 0 +- 解决bug1 2 3,解决方式为bydesign + - 第0条的field属性 @resolution + - 第0条的old属性 @~~ + - 第0条的new;3:field属性 @bydesign;status + - 第0条的old属性 @active + - 第0条的new属性 @resolved + +- 解决bug4 5 6,解决方式为duplicate + - 第0条的field属性 @resolution + - 第0条的old属性 @~~ + - 第0条的new;3:field属性 @duplicate;status + - 第0条的old属性 @active + - 第0条的new属性 @resolved + +- 解决bug7 8 9,解决方式为external + - 第0条的field属性 @resolution + - 第0条的old属性 @~~ + - 第0条的new;3:field属性 @external;status + - 第0条的old属性 @active + - 第0条的new属性 @resolved + +- 解决bug10 11 12,解决方式为fixed + - 第0条的field属性 @resolution + - 第0条的old属性 @~~ + - 第0条的new;4:field属性 @fixed;status + - 第0条的old属性 @active + - 第0条的new属性 @resolved + +- 解决bug13 14 15,解决方式为notrepro + - 第0条的field属性 @resolution + - 第0条的old属性 @~~ + - 第0条的new;3:field属性 @notrepro;status + - 第0条的old属性 @active + - 第0条的new属性 @resolved + +- 解决bug16 17 18,解决方式为postponed + - 第0条的field属性 @resolution + - 第0条的old属性 @~~ + - 第0条的new;3:field属性 @postponed;status + - 第0条的old属性 @active + - 第0条的new属性 @resolved + +- 解决bug19 20 21,解决方式为willnotfix + - 第0条的field属性 @resolution + - 第0条的old属性 @~~ + - 第0条的new;3:field属性 @willnotfix;status + - 第0条的old属性 @active + - 第0条的new属性 @resolved + +- 解决bug22 23 24,解决方式为tostory + - 第0条的field属性 @resolution + - 第0条的old属性 @~~ + - 第0条的new;3:field属性 @tostory;status + - 第0条的old属性 @active + - 第0条的new属性 @resolved + +- 解决bug状态为resolve的bug + - 第0条的field属性 @0 + - 第0条的old属性 @0 + - 第0条的new;3:field属性 @0 + - 第0条的old属性 @0 + - 第0条的new属性 @0 */ +$bug = zdTable('bug'); +$bug->execution->range('11-50'); +$bug->gen(50); + +zdTable('project')->config('execution')->gen(50); + $bugIDList1 = array('1', '2', '3'); $bugIDList2 = array('4', '5', '6'); $bugIDList3 = array('7', '8', '9'); @@ -34,12 +93,12 @@ $bugIDList8 = array('22', '23', '24'); $resolutionList = array('bydesign', 'duplicate', 'external', 'fixed', 'notrepro', 'postponed', 'willnotfix', 'tostory'); $bug = new bugTest(); -r($bug->batchResolveTest($bugIDList1, $resolutionList[0], $bugIDList1[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,,bydesign;status,active,resolved'); // 解决bug1 2 3,解决方式为bydesign -r($bug->batchResolveTest($bugIDList2, $resolutionList[1], $bugIDList2[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,,duplicate;status,active,resolved'); // 解决bug4 5 6,解决方式为duplicate -r($bug->batchResolveTest($bugIDList3, $resolutionList[2], $bugIDList3[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,,external;status,active,resolved'); // 解决bug7 8 9,解决方式为external -r($bug->batchResolveTest($bugIDList4, $resolutionList[3], $bugIDList4[0])) && p('0:field,old,new;4:field,old,new') && e('resolution,,fixed;status,active,resolved'); // 解决bug10 11 12,解决方式为fixed -r($bug->batchResolveTest($bugIDList5, $resolutionList[4], $bugIDList5[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,,notrepro;status,active,resolved'); // 解决bug13 14 15,解决方式为notrepro -r($bug->batchResolveTest($bugIDList6, $resolutionList[5], $bugIDList6[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,,postponed;status,active,resolved'); // 解决bug16 17 18,解决方式为postponed -r($bug->batchResolveTest($bugIDList7, $resolutionList[6], $bugIDList7[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,,willnotfix;status,active,resolved'); // 解决bug19 20 21,解决方式为willnotfix -r($bug->batchResolveTest($bugIDList8, $resolutionList[7], $bugIDList8[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,,tostory;status,active,resolved'); // 解决bug22 23 24,解决方式为tostory +r($bug->batchResolveTest($bugIDList1, $resolutionList[0], $bugIDList1[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,~~,bydesign;status,active,resolved'); // 解决bug1 2 3,解决方式为bydesign +r($bug->batchResolveTest($bugIDList2, $resolutionList[1], $bugIDList2[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,~~,duplicate;status,active,resolved'); // 解决bug4 5 6,解决方式为duplicate +r($bug->batchResolveTest($bugIDList3, $resolutionList[2], $bugIDList3[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,~~,external;status,active,resolved'); // 解决bug7 8 9,解决方式为external +r($bug->batchResolveTest($bugIDList4, $resolutionList[3], $bugIDList4[0])) && p('0:field,old,new;4:field,old,new') && e('resolution,~~,fixed;status,active,resolved'); // 解决bug10 11 12,解决方式为fixed +r($bug->batchResolveTest($bugIDList5, $resolutionList[4], $bugIDList5[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,~~,notrepro;status,active,resolved'); // 解决bug13 14 15,解决方式为notrepro +r($bug->batchResolveTest($bugIDList6, $resolutionList[5], $bugIDList6[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,~~,postponed;status,active,resolved'); // 解决bug16 17 18,解决方式为postponed +r($bug->batchResolveTest($bugIDList7, $resolutionList[6], $bugIDList7[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,~~,willnotfix;status,active,resolved'); // 解决bug19 20 21,解决方式为willnotfix +r($bug->batchResolveTest($bugIDList8, $resolutionList[7], $bugIDList8[0])) && p('0:field,old,new;3:field,old,new') && e('resolution,~~,tostory;status,active,resolved'); // 解决bug22 23 24,解决方式为tostory r($bug->batchResolveTest($bugIDList8, $resolutionList[7], $bugIDList8[0])) && p('0:field,old,new;3:field,old,new') && e('0'); // 解决bug状态为resolve的bug diff --git a/module/bug/test/model/getproductmemberpairs.php b/module/bug/test/model/getproductmemberpairs.php index 5d37bdb559..21fa7a207c 100755 --- a/module/bug/test/model/getproductmemberpairs.php +++ b/module/bug/test/model/getproductmemberpairs.php @@ -1,31 +1,48 @@ #!/usr/bin/env php getProductMemberPairs(); +timeout=0 cid=1 -pid=1 -测试获取productID为1的bug的团队成员 >> A:admin,P:产品经理92,P:产品经理2,U:测试12 -测试获取productID为2的bug的团队成员 >> P:产品经理93,U:测试3,P:研发主管3,U:测试13 -测试获取productID为3的bug的团队成员 >> P:产品经理94,U:测试4,P:研发主管4,U:测试14 -测试获取productID为4的bug的团队成员 >> P:产品经理95,U:测试5,P:研发主管5,U:测试15 -测试获取productID为5的bug的团队成员 >> P:产品经理96,U:测试6,P:研发主管6,U:测试16 -测试获取productID为6的bug的团队成员 >> P:产品经理97,U:测试7,P:研发主管7,U:测试17 -测试获取不存在的product的bug的团队成员 >> 0 +- 测试获取productID为1的bug的团队成员 @A:admin,U:用户32 + +- 测试获取productID为2的bug的团队成员 @U:用户23 + +- 测试获取productID为3的bug的团队成员 @U:用户14,U:用户44 + +- 测试获取productID为4的bug的团队成员 @U:用户5,U:用户35 + +- 测试获取productID为5的bug的团队成员 @U:用户26 + +- 测试获取productID为6的bug的团队成员 @U:用户17,U:用户47 + +- 测试获取不存在的product的bug的团队成员 @0 */ +zdTable('user')->gen(100); +zdTable('product')->gen(10); +zdTable('project')->gen(50); + +$projectProduct = zdTable('projectproduct'); +$projectProduct->product->range('1-10'); +$projectProduct->gen(50); + +zdTable('team')->gen(100); + $productIDList = array('1', '2', '3', '4','5', '6', '1000001'); $bug=new bugTest(); -r($bug->getProductMemberPairsTest($productIDList[0])) && p() && e('A:admin,P:产品经理92,P:产品经理2,U:测试12'); // 测试获取productID为1的bug的团队成员 -r($bug->getProductMemberPairsTest($productIDList[1])) && p() && e('P:产品经理93,U:测试3,P:研发主管3,U:测试13'); // 测试获取productID为2的bug的团队成员 -r($bug->getProductMemberPairsTest($productIDList[2])) && p() && e('P:产品经理94,U:测试4,P:研发主管4,U:测试14'); // 测试获取productID为3的bug的团队成员 -r($bug->getProductMemberPairsTest($productIDList[3])) && p() && e('P:产品经理95,U:测试5,P:研发主管5,U:测试15'); // 测试获取productID为4的bug的团队成员 -r($bug->getProductMemberPairsTest($productIDList[4])) && p() && e('P:产品经理96,U:测试6,P:研发主管6,U:测试16'); // 测试获取productID为5的bug的团队成员 -r($bug->getProductMemberPairsTest($productIDList[5])) && p() && e('P:产品经理97,U:测试7,P:研发主管7,U:测试17'); // 测试获取productID为6的bug的团队成员 -r($bug->getProductMemberPairsTest($productIDList[6])) && p() && e('0'); // 测试获取不存在的product的bug的团队成员 \ No newline at end of file +r($bug->getProductMemberPairsTest($productIDList[0])) && p() && e('A:admin,U:用户32'); // 测试获取productID为1的bug的团队成员 +r($bug->getProductMemberPairsTest($productIDList[1])) && p() && e('U:用户23'); // 测试获取productID为2的bug的团队成员 +r($bug->getProductMemberPairsTest($productIDList[2])) && p() && e('U:用户14,U:用户44'); // 测试获取productID为3的bug的团队成员 +r($bug->getProductMemberPairsTest($productIDList[3])) && p() && e('U:用户5,U:用户35'); // 测试获取productID为4的bug的团队成员 +r($bug->getProductMemberPairsTest($productIDList[4])) && p() && e('U:用户26'); // 测试获取productID为5的bug的团队成员 +r($bug->getProductMemberPairsTest($productIDList[5])) && p() && e('U:用户17,U:用户47'); // 测试获取productID为6的bug的团队成员 +r($bug->getProductMemberPairsTest($productIDList[6])) && p() && e('0'); // 测试获取不存在的product的bug的团队成员 \ No newline at end of file diff --git a/module/bug/test/model/yaml/activate/execution.yaml b/module/bug/test/model/yaml/execution.yaml similarity index 100% rename from module/bug/test/model/yaml/activate/execution.yaml rename to module/bug/test/model/yaml/execution.yaml diff --git a/module/bug/zen.php b/module/bug/zen.php index 779cb1e80d..201119e671 100644 --- a/module/bug/zen.php +++ b/module/bug/zen.php @@ -2181,11 +2181,7 @@ class bugZen extends bug foreach($bugIdList as $i => $bugID) { $oldBug = $oldBugs[$bugID]; - if($oldBug->resolution == 'fixed' || $oldBug->status != 'active') - { - unset($bugIdList[$i]); - continue; - } + if($oldBug->resolution == 'fixed' || $oldBug->status != 'active') unset($bugIdList[$i]); } return $bugIdList; } @@ -2202,7 +2198,7 @@ class bugZen extends bug { $bug = reset($oldBugs); $productID = $bug->product; - $product = $this->dao->findById($productID)->from(TABLE_PRODUCT)->fetch(); + $product = $this->loadModel('product')->getByID($productID); $stmt = $this->dao->query($this->loadModel('tree')->buildMenuQuery($productID, 'bug')); $modules = array(); while($module = $stmt->fetch()) $modules[$module->id] = $module; diff --git a/module/user/model.php b/module/user/model.php index d40e2f7666..abd9033946 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -2768,21 +2768,21 @@ class userModel extends model /** * Get team members in object. * - * @param int $objectID + * @param string $objectIds * @param string $type project|execution * @param string $params * @param string $usersToAppended * @access public * @return array */ - public function getTeamMemberPairs($objectID, $type = 'project', $params = '', $usersToAppended = '') + public function getTeamMemberPairs($objectIds, $type = 'project', $params = '', $usersToAppended = '') { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getTeamMembersPairs(); $keyField = strpos($params, 'useid') !== false ? 'id' : 'account'; $users = $this->dao->select("t2.id, t2.account, t2.realname")->from(TABLE_TEAM)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') - ->where('t1.root')->eq((int)$objectID) + ->where('t1.root')->in($objectIds) ->andWhere('t1.type')->eq($type) ->beginIF($params == 'nodeleted' or empty($this->config->user->showDeleted)) ->andWhere('t2.deleted')->eq(0)