From e4d006aeeeac570dd9ccb83beba94bf6655c3757 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Tue, 29 Aug 2023 16:46:11 +0800 Subject: [PATCH] * Refactor getExecutionKanban method. --- module/kanban/model.php | 201 +++++++++++++++++++++++++--------------- 1 file changed, 124 insertions(+), 77 deletions(-) diff --git a/module/kanban/model.php b/module/kanban/model.php index 0ded7145b7..99345fcbda 100755 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -1451,16 +1451,18 @@ class kanbanModel extends model } /** + * 获取执行看板的数据。 * Get Kanban by execution id. * * @param int $executionID - * @param string $browseType all|story|bug|task - * @param string $groupBy + * @param string $browseType all|story|bug|task + * @param string $groupBy default|pri|category|module|source|assignedTo|type|story|severity * @param string $searchValue + * @param string $orderBy * @access public * @return array */ - public function getExecutionKanban($executionID, $browseType = 'all', $groupBy = 'default', $searchValue = '', $orderBy = 'id_asc') + public function getExecutionKanban(int $executionID, string $browseType = 'all', string $groupBy = 'default', string $searchValue = '', string $orderBy = 'id_asc') { if($groupBy != 'default') return $this->getKanban4Group($executionID, $browseType, $groupBy, $searchValue, $orderBy); @@ -1494,82 +1496,12 @@ class kanbanModel extends model /* Build kanban group data. */ $kanbanGroup = array(); - foreach($lanes as $laneID => $lane) + foreach($lanes as $lane) { - $laneData = array(); - $columnData = array(); + list($laneData, $columnData) = $this->buildExecutionGroup($lane, $columns, $bjectGroup, $searchValue, $storyCardMenu, $bugCardMenu, $taskCardMenu); - $laneData['id'] = $laneID; - $laneData['laneID'] = $laneID; - $laneData['name'] = $lane->name; - $laneData['color'] = $lane->color; - $laneData['order'] = $lane->order; - $laneData['defaultCardType'] = $lane->type; - - foreach($columns[$laneID] as $columnID => $column) - { - $columnData[$column->id]['id'] = $columnID; - $columnData[$column->id]['type'] = $column->type; - $columnData[$column->id]['name'] = $column->name; - $columnData[$column->id]['color'] = $column->color; - $columnData[$column->id]['limit'] = $column->limit; - $columnData[$column->id]['laneType'] = $lane->type; - $columnData[$column->id]['asParent'] = $column->parent == -1 ? true : false; - $columnData[$column->id]['parent'] = $column->parent; - - if($column->parent > 0) - { - if($column->type == 'developing' or $column->type == 'developed') $columnData[$column->id]['parentType'] = 'develop'; - if($column->type == 'testing' or $column->type == 'tested') $columnData[$column->id]['parentType'] = 'test'; - if($column->type == 'fixing' or $column->type == 'fixed') $columnData[$column->id]['parentType'] = 'resolving'; - } - - $cardOrder = 1; - $cardIdList = array_filter(explode(',', $column->cards)); - foreach($cardIdList as $cardID) - { - $cardData = array(); - $objects = zget($objectGroup, $lane->type, array()); - $object = zget($objects, $cardID, array()); - - if(empty($object)) continue; - - $cardData['id'] = $object->id; - $cardData['order'] = $cardOrder; - $cardData['pri'] = $object->pri ? $object->pri : ''; - $cardData['estimate'] = $lane->type == 'bug' ? '' : $object->estimate; - $cardData['assignedTo'] = $object->assignedTo; - $cardData['deadline'] = $lane->type == 'story' ? '' : $object->deadline; - $cardData['severity'] = $lane->type == 'bug' ? $object->severity : ''; - - if($lane->type == 'task') - { - if($searchValue != '' and strpos($object->name, $searchValue) === false) continue; - $cardData['name'] = $object->name; - $cardData['status'] = $object->status; - $cardData['left'] = $object->left; - $cardData['estStarted'] = $object->estStarted; - $cardData['mode'] = $object->mode; - if($object->mode == 'multi') $cardData['teamMembers'] = $object->teamMembers; - } - else - { - if($searchValue != '' and strpos($object->title, $searchValue) === false) continue; - $cardData['title'] = $object->title; - } - - if($lane->type == 'story') $cardData['menus'] = $storyCardMenu[$object->id]; - if($lane->type == 'bug') $cardData['menus'] = $bugCardMenu[$object->id]; - if($lane->type == 'task') $cardData['menus'] = $taskCardMenu[$object->id]; - - $laneData['cards'][$column->type][] = $cardData; - $cardOrder ++; - } - if($searchValue == '' and !isset($laneData['cards'][$column->type])) $laneData['cards'][$column->type] = array(); - } - - if($searchValue != '' and empty($laneData['cards'])) continue; - $kanbanGroup[$lane->type]['id'] = $laneID; + if($searchValue != '' && empty($laneData['cards'])) continue; + $kanbanGroup[$lane->type]['id'] = $lane->id; $kanbanGroup[$lane->type]['columns'] = array_values($columnData); $kanbanGroup[$lane->type]['lanes'][] = $laneData; $kanbanGroup[$lane->type]['defaultCardType'] = $lane->type; @@ -1578,6 +1510,121 @@ class kanbanModel extends model return $kanbanGroup; } + /** + * 构建迭代看板的泳道组数据。 + * Build the laneGroup data for the execution Kanban. + * + * @param object $lane + * @param array $columns + * @param array $bjectGroup + * @param string $searchValue + * @param array $storyCardMenu + * @param array $bugCardMenu + * @param array $taskCardMenu + * @access public + * @return array + */ + public function buildExecutionGroup(object $lane, array $columns, array $bjectGroup, string $searchValue = '', array $storyCardMenu = array(), array $bugCardMenu = array(), array $taskCardMenu = array()): array + { + $laneData = array(); + $columnData = array(); + + $laneData['id'] = $lane->id; + $laneData['laneID'] = $lane->id; + $laneData['name'] = $lane->name; + $laneData['color'] = $lane->color; + $laneData['order'] = $lane->order; + $laneData['defaultCardType'] = $lane->type; + + foreach($columns[$lane->id] as $columnID => $column) + { + $columnData[$column->id]['id'] = $columnID; + $columnData[$column->id]['type'] = $column->type; + $columnData[$column->id]['name'] = $column->name; + $columnData[$column->id]['color'] = $column->color; + $columnData[$column->id]['limit'] = $column->limit; + $columnData[$column->id]['laneType'] = $lane->type; + $columnData[$column->id]['asParent'] = $column->parent == -1 ? true : false; + $columnData[$column->id]['parent'] = $column->parent; + + if($column->parent > 0) + { + if($column->type == 'developing' || $column->type == 'developed') $columnData[$column->id]['parentType'] = 'develop'; + if($column->type == 'testing' || $column->type == 'tested') $columnData[$column->id]['parentType'] = 'test'; + if($column->type == 'fixing' || $column->type == 'fixed') $columnData[$column->id]['parentType'] = 'resolving'; + } + + $cardIdList = array_filter(explode(',', $column->cards)); + $laneData = $this->buildExecutionCards($lane, $laneData, $column->type, $cardIdList, $objectGroup, $searchValue, $storyCardMenu, $bugCardMenu, $taskCardMenu); + } + + return array($laneData, $columnData); + } + + /** + * 构建迭代看板的卡片数据。 + * Build the card data for the execution Kanban. + * + * @param object $lane + * @param array $laneData + * @param string $columnType + * @param array $cardIdList + * @param array $objectGroup + * @param string $searchValue + * @param array $storyCardMenu + * @param array $bugCardMenu + * @param array $taskCardMenu + * @access public + * @return array + */ + public function buildExecutionCards(object $lane, array $laneData, string $columnType, array $cardIdList, array $objectGroup, string $searchValue = '', array $storyCardMenu = array(), array $bugCardMenu = array(), array $taskCardMenu = array()): array + { + $cardOrder = 1; + foreach($cardIdList as $cardID) + { + $cardData = array(); + $objects = zget($objectGroup, $lane->type, array()); + $object = zget($objects, $cardID, array()); + + if(empty($object)) continue; + + $cardData['id'] = $object->id; + $cardData['order'] = $cardOrder; + $cardData['pri'] = $object->pri ? $object->pri : ''; + $cardData['estimate'] = $lane->type == 'bug' ? '' : $object->estimate; + $cardData['assignedTo'] = $object->assignedTo; + $cardData['deadline'] = $lane->type == 'story' ? '' : $object->deadline; + $cardData['severity'] = $lane->type == 'bug' ? $object->severity : ''; + + if($lane->type == 'task') + { + if($searchValue != '' && strpos($object->name, $searchValue) === false) continue; + $cardData['name'] = $object->name; + $cardData['status'] = $object->status; + $cardData['left'] = $object->left; + $cardData['estStarted'] = $object->estStarted; + $cardData['mode'] = $object->mode; + if($object->mode == 'multi') $cardData['teamMembers'] = $object->teamMembers; + } + else + { + if($searchValue != '' and strpos($object->title, $searchValue) === false) continue; + $cardData['title'] = $object->title; + } + + if($lane->type == 'story') $cardData['menus'] = $storyCardMenu[$object->id]; + if($lane->type == 'bug') $cardData['menus'] = $bugCardMenu[$object->id]; + if($lane->type == 'task') $cardData['menus'] = $taskCardMenu[$object->id]; + + $laneData['cards'][$columnType][] = $cardData; + $cardOrder ++; + } + + if($searchValue == '' && !isset($laneData['cards'][$columnType])) $laneData['cards'][$columnType] = array(); + + return $laneData; + } + /** * Get kanban for group view. *