diff --git a/module/execution/control.php b/module/execution/control.php index 93fea85251..d3ab10685b 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -2634,6 +2634,7 @@ class execution extends control } /** + * 执行看板。 * Execution kanban. * * @access public @@ -2643,71 +2644,13 @@ class execution extends control { $projects = $this->loadModel('project')->getPairsByProgram(0, 'noclosed'); $executions = $this->execution->getStatData(0, 'all', 0, 0, false, 'withchild', 'id_desc'); - foreach($executions as $execution) { $execution->name = htmlspecialchars_decode($execution->name); $execution->team = htmlspecialchars_decode($execution->team); } - $teams = $this->dao->select('root,account')->from(TABLE_TEAM) - ->where('root')->in($this->app->user->view->sprints) - ->andWhere('type')->eq('execution') - ->fetchGroup('root', 'account'); - - $projectCount = 0; - $statusCount = array(); - $myExecutions = array(); - $kanbanGroup = array(); - foreach(array_keys($projects) as $projectID) - { - foreach(array_keys($this->lang->execution->statusList) as $status) - { - if(!isset($statusCount[$status])) $statusCount[$status] = 0; - - foreach($executions as $execution) - { - if($execution->status == $status) - { - if(isset($teams[$execution->id][$this->app->user->account])) $myExecutions[$status][$execution->id] = $execution; - if($execution->project == $projectID) $kanbanGroup[$projectID][$status][$execution->id] = $execution; - } - } - - $statusCount[$status] += isset($kanbanGroup[$projectID][$status]) ? count($kanbanGroup[$projectID][$status]) : 0; - - /* Max 2 closed executions. */ - if($status == 'closed') - { - if(isset($myExecutions[$status]) and count($myExecutions[$status]) > 2) - { - foreach($myExecutions[$status] as $executionID => $execution) - { - unset($myExecutions[$status][$executionID]); - $myExecutions[$status][$execution->closedDate] = $execution; - } - - krsort($myExecutions[$status]); - $myExecutions[$status] = array_slice($myExecutions[$status], 0, 2, true); - } - - if(isset($kanbanGroup[$projectID][$status]) and count($kanbanGroup[$projectID][$status]) > 2) - { - foreach($kanbanGroup[$projectID][$status] as $executionID => $execution) - { - unset($kanbanGroup[$projectID][$status][$executionID]); - $kanbanGroup[$projectID][$status][$execution->closedDate] = $execution; - } - - krsort($kanbanGroup[$projectID][$status]); - $kanbanGroup[$projectID][$status] = array_slice($kanbanGroup[$projectID][$status], 0, 2); - } - } - } - - if(empty($kanbanGroup[$projectID])) continue; - $projectCount++; - } + list($projectCount, $statusCount, $myExecutions, $kanbanGroup) = $this->executionZen->buildExecutionKanbanData(array_keys($projects), $executions); $this->view->title = $this->lang->execution->executionKanban; $this->view->kanbanGroup = empty($myExecutions) ? $kanbanGroup : array($myExecutions) + $kanbanGroup; diff --git a/module/execution/model.php b/module/execution/model.php index 83861fb1bc..6c4e32a922 100755 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -3506,20 +3506,21 @@ class executionModel extends model } /** - * Get members by execution id list. + * 获取给定执行的团队成员信息。 + * Get team members information for the execution id list. * - * @param array $executionIdList + * @param array $executionIdList * @access public - * @return void + * @return array */ - public function getMembersByIdList($executionIdList) + public function getMembersByIdList(array $executionIdList): array { return $this->dao->select("t1.root, t1.account, t2.realname")->from(TABLE_TEAM)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') ->where('t1.root')->in($executionIdList) ->andWhere('t1.type')->eq('execution') ->andWhere('t2.deleted')->eq('0') - ->fetchGroup('root'); + ->fetchGroup('root', 'account'); } /** diff --git a/module/execution/zen.php b/module/execution/zen.php index 760fcfac9c..5b88af20ef 100644 --- a/module/execution/zen.php +++ b/module/execution/zen.php @@ -232,6 +232,53 @@ class executionZen extends execution if($browseType == 'bymodule' && $this->session->taskBrowseType == 'bysearch') $this->session->set('taskBrowseType', 'unclosed'); } + /** + * 构建执行看板的数据。 + * Build the data to execution Kanban. + * + * @param array $projectIdList + * @param array $executions + * @access protected + * @return void + */ + protected function buildExecutionKanbanData(array $projectIdList, array $executions) + { + $projectCount = 0; + $statusCount = array(); + $myExecutions = array(); + $kanbanGroup = array(); + $teams = $this->execution->getMembersByIdList(explode(',', $this->app->user->view->sprints)); + foreach($projectIdList as $projectID) + { + foreach(array_keys($this->lang->execution->statusList) as $status) + { + if(!isset($statusCount[$status])) $statusCount[$status] = 0; + + foreach($executions as $execution) + { + if($execution->status == $status) + { + if(isset($teams[$execution->id][$this->app->user->account])) $myExecutions[$status][$execution->id] = $execution; + if($execution->project == $projectID) $kanbanGroup[$projectID][$status][$execution->id] = $execution; + } + } + + $statusCount[$status] += isset($kanbanGroup[$projectID][$status]) ? count($kanbanGroup[$projectID][$status]) : 0; + + /* Max 2 closed executions. */ + if($status == 'closed') + { + list($myExecutions, $kanbanGroup) = $this->processExecutionKanbanData($myExecutions, $kanbanGroup, $projectID, $status); + } + } + + if(empty($kanbanGroup[$projectID])) continue; + $projectCount ++; + } + + return array($projectCount, $statusCount, $myExecutions, $kanbanGroup); + } + /** * 获取打印看板的数据。 * Get printed kanban data. @@ -275,6 +322,45 @@ class executionZen extends execution return array($dataList, $users); } + /** + * 处理执行看板数据。 + * Process execution kanban data. + * + * @param array $myExecutions + * @param array $kanbanGroup + * @param int $projectID + * @param string $status + * @access protected + * @return array + */ + protected function processExecutionKanbanData(array $myExecutions, array $kanbanGroup, int $projectID, string $status): array + { + if(isset($myExecutions[$status]) and count($myExecutions[$status]) > 2) + { + foreach($myExecutions[$status] as $executionID => $execution) + { + unset($myExecutions[$status][$executionID]); + $myExecutions[$status][$execution->closedDate] = $execution; + } + + krsort($myExecutions[$status]); + $myExecutions[$status] = array_slice($myExecutions[$status], 0, 2, true); + } + + if(isset($kanbanGroup[$projectID][$status]) and count($kanbanGroup[$projectID][$status]) > 2) + { + foreach($kanbanGroup[$projectID][$status] as $executionID => $execution) + { + unset($kanbanGroup[$projectID][$status][$executionID]); + $kanbanGroup[$projectID][$status][$execution->closedDate] = $execution; + } + + krsort($kanbanGroup[$projectID][$status]); + $kanbanGroup[$projectID][$status] = array_slice($kanbanGroup[$projectID][$status], 0, 2); + } + return array($myExecutions, $kanbanGroup); + } + /** * 处理打印的看板数据。 * Process printed Kanban data.