From 1007c2eab6b72692e7af862bb3fc81d82b2caa87 Mon Sep 17 00:00:00 2001 From: sunguangming Date: Tue, 19 Dec 2023 15:11:00 +0800 Subject: [PATCH] * kanban: refactor getLanes4Group(). --- module/kanban/model.php | 35 ++------ module/kanban/tao.php | 44 ++++++++++ module/kanban/test/model/getlanes4group.php | 92 +++++++++++---------- 3 files changed, 99 insertions(+), 72 deletions(-) diff --git a/module/kanban/model.php b/module/kanban/model.php index 332bc7a0f7..9220e60137 100755 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -1632,7 +1632,8 @@ class kanbanModel extends model } /** - * Build lane data for group kanban. + * 构建分组视图的看板泳道。 + * Build lanes for group kanban. * * @access public * @param int $executionID @@ -1643,11 +1644,10 @@ class kanbanModel extends model * * @return array */ - public function getLanes4Group($executionID, $browseType, $groupBy, $cardList, $orderBy = 'id_asc') + public function getLanes4Group(int $executionID, string $browseType, string $groupBy, array $cardList, string $orderBy = 'id_asc'): array { $lanes = array(); $groupByList = array(); - $objectPairs = array(); foreach($cardList as $item) { if(!isset($groupByList[$item->$groupBy])) $groupByList[$item->$groupBy] = $item->$groupBy; @@ -1661,33 +1661,8 @@ class kanbanModel extends model } } - if(in_array($groupBy, array('module', 'story', 'assignedTo'))) - { - if($groupBy == 'module') - { - $objectPairs += $this->dao->select('id,name')->from(TABLE_MODULE)->where('type')->in('story,task,bug')->andWhere('deleted')->eq('0')->andWhere('id')->in($groupByList)->fetchPairs(); - } - elseif($groupBy == 'story') - { - $objectPairs += $this->dao->select('id,title')->from(TABLE_STORY)->where('deleted')->eq(0)->andWhere('id')->in($groupByList)->orderBy($orderBy)->fetchPairs(); - $objects = $this->dao->select('*')->from(TABLE_STORY)->where('deleted')->eq(0)->andWhere('id')->in($groupByList)->orderBy($orderBy)->fetchAll('id'); - } - else - { - $objectPairs += $this->dao->select('account,realname')->from(TABLE_USER)->where('account')->in($groupByList)->fetchPairs(); - if(isset($groupByList['closed'])) $objectPairs['closed'] = 'Closed'; - } - } - else - { - unset($this->lang->$browseType->{$groupBy . 'List'}[0]); - unset($this->lang->$browseType->{$groupBy . 'List'}['']); - $objectPairs += $this->lang->$browseType->{$groupBy . 'List'}; - } - - if(in_array($groupBy, array('module', 'story', 'pri', 'severity'))) $objectPairs[0] = $this->lang->$browseType->$groupBy . ': ' . $this->lang->kanban->noGroup; - if(in_array($groupBy, array('assignedTo', 'source'))) $objectPairs[] = $this->lang->$browseType->$groupBy . ': ' . $this->lang->kanban->noGroup; - if($browseType == 'bug' and $groupBy == 'type') $objectPairs[0] = $this->lang->$browseType->$groupBy . ': ' . $this->lang->kanban->noGroup; + $objectPairs = $this->getObjectPairs($groupBy, $groupByList, $browseType, $orderBy); + if($groupBy == 'story') $objects = $this->dao->select('*')->from(TABLE_STORY)->where('deleted')->eq(0)->andWhere('id')->in($groupByList)->orderBy($orderBy)->fetchAll('id'); $laneColor = 0; $order = 1; diff --git a/module/kanban/tao.php b/module/kanban/tao.php index 834bffd9ae..da9d1700dc 100644 --- a/module/kanban/tao.php +++ b/module/kanban/tao.php @@ -754,4 +754,48 @@ class kanbanTao extends kanbanModel return array($cardCount, $cardList); } + + /** + * 获取看板分组视图的对象键值对。 + * Get object pairs for group view. + * + * @param string $groupBy + * @param array $groupByList + * @param string $browseType + * @param string $orderBy + * @access public + * @return array + */ + protected function getObjectPairs(string $groupBy, array $groupByList, string $browseType, string $orderBy): array + { + $objectPairs = array(); + if(in_array($groupBy, array('module', 'story', 'assignedTo'))) + { + if($groupBy == 'module') + { + $objectPairs += $this->dao->select('id,name')->from(TABLE_MODULE)->where('type')->in('story,task,bug')->andWhere('deleted')->eq('0')->andWhere('id')->in($groupByList)->fetchPairs(); + } + elseif($groupBy == 'story') + { + $objectPairs += $this->dao->select('id,title')->from(TABLE_STORY)->where('deleted')->eq(0)->andWhere('id')->in($groupByList)->orderBy($orderBy)->fetchPairs(); + } + else + { + $objectPairs += $this->dao->select('account,realname')->from(TABLE_USER)->where('account')->in($groupByList)->fetchPairs(); + if(isset($groupByList['closed'])) $objectPairs['closed'] = 'Closed'; + } + } + else + { + unset($this->lang->$browseType->{$groupBy . 'List'}[0]); + unset($this->lang->$browseType->{$groupBy . 'List'}['']); + $objectPairs += $this->lang->$browseType->{$groupBy . 'List'}; + } + + if(in_array($groupBy, array('module', 'story', 'pri', 'severity'))) $objectPairs[0] = $this->lang->$browseType->$groupBy . ': ' . $this->lang->kanban->noGroup; + if(in_array($groupBy, array('assignedTo', 'source'))) $objectPairs[] = $this->lang->$browseType->$groupBy . ': ' . $this->lang->kanban->noGroup; + if($browseType == 'bug' and $groupBy == 'type') $objectPairs[0] = $this->lang->$browseType->$groupBy . ': ' . $this->lang->kanban->noGroup; + + return $objectPairs; + } } diff --git a/module/kanban/test/model/getlanes4group.php b/module/kanban/test/model/getlanes4group.php index aa8ecd7c45..05f7e16f58 100755 --- a/module/kanban/test/model/getlanes4group.php +++ b/module/kanban/test/model/getlanes4group.php @@ -4,57 +4,65 @@ include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/kanban.class.php'; su('admin'); +zdTable('project')->config('kanbanexecution')->gen(5); +zdTable('kanbanregion')->config('rdkanbanregion')->gen(5); +zdTable('kanbangroup')->config('rdkanbangroup')->gen(20); +zdTable('kanbancolumn')->gen(20); +zdTable('kanbanlane')->config('rdkanbanlane')->gen(10); +zdTable('kanbancell')->config('rdkanbancell')->gen(20); +zdTable('task')->config('rdkanbantask')->gen(20); + /** title=测试 kanbanModel->getLanes4Group(); +timeout=0 cid=1 -pid=1 -获取执行101 story pri的泳道 >> ,优先级: 无,2,4 -获取执行101 story category的泳道 >> ,类型: 无,功能 -获取执行101 story module的泳道 >> ,所属模块: 无,产品模块2,产品模块4 -获取执行101 story source的泳道 >> ,来源: 无,用户,市场 -获取执行102 task pri的泳道 >> ,优先级: 无,1,2,4 -获取执行102 task module的泳道 >> ,所属模块: 无,模块4,模块10,模块13,模块16 -获取执行102 task assignedTo的泳道 >> ,指派给: 无 -获取执行102 task story的泳道 >> ,相关研发需求: 无,用户需求5 -获取执行101 bug pri的泳道 >> ,优先级: 无,1,3,4 -获取执行101 bug module的泳道 >> ,所属模块: 无,产品模块11,产品模块12,产品模块13 -获取执行101 bug assignedTo的泳道 >> ,指派给: 无,admin,测试1 -获取执行101 bug severity的泳道 >> ,严重程度: 无,1,3,4 -获取执行101 story pri的泳道 >> ,优先级: 无,2,4 -获取执行101 story category的泳道 >> ,类型: 无,功能 -获取执行101 story module的泳道 >> ,所属模块: 无,产品模块14,产品模块16 -获取执行101 story source的泳道 >> ,来源: 无,用户,其他 -获取执行102 task pri的泳道 >> ,优先级: 无,1,2,3 -获取执行102 task module的泳道 >> ,所属模块: 无,模块13,模块37,模块40,模块43 -获取执行102 task assignedTo的泳道 >> ,指派给: 无 -获取执行102 task story的泳道 >> ,相关研发需求: 无,用户需求17 +- 获取执行1 story pri的泳道 @,优先级: 无 +- 获取执行1 story category的泳道 @,功能 +- 获取执行1 story module的泳道 @,所属模块: 无 +- 获取执行1 story source的泳道 @,来源: 无 +- 获取执行2 task pri的泳道 @,1,2,3,4,优先级: 无 +- 获取执行2 task module的泳道 @,所属模块: 无 +- 获取执行2 task assignedTo的泳道 @,指派给: 无 +- 获取执行2 task story的泳道 @,相关软件需求: 无 +- 获取执行1 bug pri的泳道 @,优先级: 无 +- 获取执行1 bug module的泳道 @,所属模块: 无 +- 获取执行1 bug assignedTo的泳道 @,指派给: 无 +- 获取执行1 bug severity的泳道 @,严重程度: 无 +- 获取执行1 story pri的泳道 @,优先级: 无 +- 获取执行1 story category的泳道 @,功能 +- 获取执行1 story module的泳道 @,所属模块: 无 +- 获取执行1 story source的泳道 @,来源: 无 +- 获取执行2 task pri的泳道 @,1,2,3,4,优先级: 无 +- 获取执行2 task module的泳道 @,所属模块: 无 +- 获取执行2 task assignedTo的泳道 @,指派给: 无 +- 获取执行2 task story的泳道 @,相关软件需求: 无 */ -$executionIDList = array('101', '102', '103', '104', '105'); +$executionIDList = array('1', '2', '3', '4', '5'); $browseTypeList = array('story', 'task', 'bug'); $groupByList = array('pri', 'category', 'module', 'source', 'assignedTo', 'story', 'severity'); $kanban = new kanbanTest(); -r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[0])) && p() && e(',优先级: 无,2,4'); // 获取执行101 story pri的泳道 -r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[1])) && p() && e(',类型: 无,功能'); // 获取执行101 story category的泳道 -r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[2])) && p() && e(',所属模块: 无,产品模块2,产品模块4'); // 获取执行101 story module的泳道 -r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[3])) && p() && e(',来源: 无,用户,市场'); // 获取执行101 story source的泳道 -r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[0])) && p() && e(',优先级: 无,1,2,4'); // 获取执行102 task pri的泳道 -r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[2])) && p() && e(',所属模块: 无,模块4,模块10,模块13,模块16'); // 获取执行102 task module的泳道 -r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[4])) && p() && e(',指派给: 无'); // 获取执行102 task assignedTo的泳道 -r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[5])) && p() && e(',相关研发需求: 无,用户需求5'); // 获取执行102 task story的泳道 -r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[0])) && p() && e(',优先级: 无,1,3,4'); // 获取执行101 bug pri的泳道 -r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[2])) && p() && e(',所属模块: 无,产品模块11,产品模块12,产品模块13'); // 获取执行101 bug module的泳道 -r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[4])) && p() && e(',指派给: 无,admin,测试1'); // 获取执行101 bug assignedTo的泳道 -r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[6])) && p() && e(',严重程度: 无,1,3,4'); // 获取执行101 bug severity的泳道 -r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[0])) && p() && e(',优先级: 无,2,4'); // 获取执行101 story pri的泳道 -r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[1])) && p() && e(',类型: 无,功能'); // 获取执行101 story category的泳道 -r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[2])) && p() && e(',所属模块: 无,产品模块14,产品模块16'); // 获取执行101 story module的泳道 -r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[3])) && p() && e(',来源: 无,用户,其他'); // 获取执行101 story source的泳道 -r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[0])) && p() && e(',优先级: 无,1,2,3'); // 获取执行102 task pri的泳道 -r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[2])) && p() && e(',所属模块: 无,模块13,模块37,模块40,模块43'); // 获取执行102 task module的泳道 -r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[4])) && p() && e(',指派给: 无'); // 获取执行102 task assignedTo的泳道 -r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[5])) && p() && e(',相关研发需求: 无,用户需求17'); // 获取执行102 task story的泳道 +r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[0])) && p('', '|') && e(',优先级: 无'); // 获取执行1 story pri的泳道 +r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[1])) && p('', '|') && e(',功能'); // 获取执行1 story category的泳道 +r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[2])) && p('', '|') && e(',所属模块: 无'); // 获取执行1 story module的泳道 +r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[3])) && p('', '|') && e(',来源: 无'); // 获取执行1 story source的泳道 +r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[0])) && p('', '|') && e(',1,2,3,4,优先级: 无'); // 获取执行2 task pri的泳道 +r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[2])) && p('', '|') && e(',所属模块: 无'); // 获取执行2 task module的泳道 +r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[4])) && p('', '|') && e(',指派给: 无'); // 获取执行2 task assignedTo的泳道 +r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[5])) && p('', '|') && e(',相关软件需求: 无'); // 获取执行2 task story的泳道 +r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[0])) && p('', '|') && e(',优先级: 无'); // 获取执行1 bug pri的泳道 +r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[2])) && p('', '|') && e(',所属模块: 无'); // 获取执行1 bug module的泳道 +r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[4])) && p('', '|') && e(',指派给: 无'); // 获取执行1 bug assignedTo的泳道 +r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[6])) && p('', '|') && e(',严重程度: 无'); // 获取执行1 bug severity的泳道 +r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[0])) && p('', '|') && e(',优先级: 无'); // 获取执行1 story pri的泳道 +r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[1])) && p('', '|') && e(',功能'); // 获取执行1 story category的泳道 +r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[2])) && p('', '|') && e(',所属模块: 无'); // 获取执行1 story module的泳道 +r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[3])) && p('', '|') && e(',来源: 无'); // 获取执行1 story source的泳道 +r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[0])) && p('', '|') && e(',1,2,3,4,优先级: 无'); // 获取执行2 task pri的泳道 +r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[2])) && p('', '|') && e(',所属模块: 无'); // 获取执行2 task module的泳道 +r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[4])) && p('', '|') && e(',指派给: 无'); // 获取执行2 task assignedTo的泳道 +r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[5])) && p('', '|') && e(',相关软件需求: 无'); // 获取执行2 task story的泳道 \ No newline at end of file