diff --git a/module/program/control.php b/module/program/control.php index 55f8ee7bed..b19e6939ac 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -107,7 +107,7 @@ class program extends control $this->view->pager = $pager; $this->view->programType = $programType; $this->view->PMList = $PMList; - $this->view->progressList = $this->program->getProgressList(); + $this->view->progressList = $this->program->getProgressList(array_keys($programs)); $this->view->hasProject = $hasProject; $this->display(); diff --git a/module/program/model.php b/module/program/model.php index 8c159de6c7..63846c4f28 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -632,51 +632,48 @@ class programModel extends model /** * Get program and project progress list. * + * @param array $programIdList * @access public * @return array */ - public function getProgressList() + public function getProgressList($programIdList = array()) { + $programPairs = $this->getPairs(); + $projectStats = $this->getProjectStats(0, 'all', 0, 'id_desc', null, 0, 0, true); + + $existProgramIdList = array_intersect($programIdList, array_keys($programPairs)); + $existProjectIdList = array_intersect($programIdList, array_keys($projectStats)); + $totalProgress = array(); $projectCount = array(); $userPRJCount = array(); $progressList = array(); - $programPairs = $this->getPairs(); - $projectStats = $this->getProjectStats(0, 'all', 0, 'id_desc', null, 0, 0, true); - /* Add program progress. */ - foreach(array_keys($programPairs) as $programID) + foreach($existProgramIdList as $programID) { $totalProgress[$programID] = 0; $projectCount[$programID] = 0; $userPRJCount[$programID] = 0; $progressList[$programID] = 0; - foreach($projectStats as $project) + foreach($existProjectIdList as $projectID) { - if(strpos($project->path, ',' . $programID . ',') === false) continue; + if(strpos($projectStats[$projectID]->path, ",{$programID},") === false) continue; /* The number of projects under this program that the user can view. */ - if(strpos(',' . $this->app->user->view->projects . ',', ',' . $project->id . ',') !== false) $userPRJCount[$programID] ++; + if(strpos(",{$this->app->user->view->projects},", ",{$projectID},") !== false) $userPRJCount[$programID] ++; - $totalProgress[$programID] += $project->progress; + $totalProgress[$programID] += $projectStats[$projectID]->progress; $projectCount[$programID] ++; } if(empty($projectCount[$programID])) continue; - /* Program progress can't see when this user don't have all projects priv. */ - if(!$this->app->user->admin and $userPRJCount[$programID] != $projectCount[$programID]) - { - unset($progressList[$programID]); - continue; - } - $progressList[$programID] = round($totalProgress[$programID] / $projectCount[$programID]); } /* Add project progress. */ - foreach($projectStats as $project) $progressList[$project->id] = $project->progress; + foreach($existProjectIdList as $projectID) $progressList[$projectID] = $projectStats[$projectID]->progress; return $progressList; }