* kanban: refactor getLanes4Group().

This commit is contained in:
sunguangming
2023-12-19 15:11:09 +08:00
parent 3bc20f8019
commit 1007c2eab6
3 changed files with 99 additions and 72 deletions
+5 -30
View File
@@ -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;
+44
View File
@@ -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;
}
}
+50 -42
View File
@@ -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的泳道