diff --git a/module/doc/css/common.css b/module/doc/css/common.css index 710f7335fd..8742acf155 100644 --- a/module/doc/css/common.css +++ b/module/doc/css/common.css @@ -81,3 +81,9 @@ td.c-name a:visited {color: #082999;} #pageNav .dropdown-menu {max-height: 350px; overflow-y: auto;} #createDropdown ul.dropdown-menu {width: 100%;} +#project, #product, #custom, #book {min-height: 160px;} +#title .menu-title {font-size: 15px; font-weight: 600; position: relative; padding: 2px 0 2px 15px;list-style: none;} +#title .dropdown-menu-book {left: -67px; top: 38px;} +#title .dropdown-menu-doc {left: -80px; top: 38px;} +.menu-actions {position: absolute; top: 0; right: 0; padding: 7px 8px;} +.menu-actions i {font-size: 15px; color: #8c8c8c;} diff --git a/module/doc/css/objectlibs.css b/module/doc/css/objectlibs.css index 7356867713..5baf3771d9 100644 --- a/module/doc/css/objectlibs.css +++ b/module/doc/css/objectlibs.css @@ -18,15 +18,9 @@ #sidebar {width: 275px;} #sidebar>.cell {width: 100%;} #sidebar>.sidebar-toggle {left: 3px; right: auto;} -#project, #product, #custom, #book {min-height: 160px;} -#title .menu-title {font-size: 15px; font-weight: 600; position: relative; padding: 2px 0 2px 15px;list-style: none;} -#title .dropdown-menu-book {left: -67px; top: 38px;} -#title .dropdown-menu-doc {left: -80px; top: 38px;} .hide-sidebar #sidebar>.cell {left: -270px;} .hide-sidebar #sidebar>.sidebar-toggle>.icon:before {content: "\e314";} .detail.empty {line-height: 200px;} .main-col+.side-col {padding-left: 16px;} .main-col iframe {min-height: 380px;} -.menu-actions {position: absolute; top: 0; right: 0; padding: 7px 8px;} -.menu-actions i {font-size: 15px; color: #8c8c8c;} .article-content .keywords {margin-bottom: 15px;} diff --git a/module/program/control.php b/module/program/control.php index 3d69cd47b1..9daaaf03d7 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -52,16 +52,17 @@ class program extends control } $PMList = $this->loadModel('user')->getListByAccounts($accounts, 'account'); - $this->view->title = $this->lang->program->browse; - $this->view->position[] = $this->lang->program->browse; + $this->view->title = $this->lang->program->browse; + $this->view->position[] = $this->lang->program->browse; - $this->view->programs = $programs; - $this->view->status = $status; - $this->view->orderBy = $orderBy; - $this->view->users = $this->user->getPairs('noletter'); - $this->view->usersAvatar = $this->user->getAvatarPairs(); - $this->view->programType = $programType; - $this->view->PMList = $PMList; + $this->view->programs = $programs; + $this->view->status = $status; + $this->view->orderBy = $orderBy; + $this->view->users = $this->user->getPairs('noletter'); + $this->view->usersAvatar = $this->user->getAvatarPairs(); + $this->view->programType = $programType; + $this->view->PMList = $PMList; + $this->view->progressList = $this->program->getProgressList(); $this->display(); } diff --git a/module/program/model.php b/module/program/model.php index 76dd4fc8d8..0a49e902c3 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -153,10 +153,11 @@ class programModel extends model * @param object $pager * @param int $programTitle * @param int $involved + * @param bool $queryAll * @access public * @return object */ - public function getProjectList($programID = 0, $browseType = 'all', $queryID = 0, $orderBy = 'id_desc', $pager = null, $programTitle = 0, $involved = 0) + public function getProjectList($programID = 0, $browseType = 'all', $queryID = 0, $orderBy = 'id_desc', $pager = null, $programTitle = 0, $involved = 0, $queryAll = false) { $path = ''; if($programID) @@ -170,8 +171,8 @@ class programModel extends model ->beginIF($this->config->systemMode == 'new')->andWhere('type')->eq('project')->fi() ->beginIF($browseType != 'all')->andWhere('status')->eq($browseType)->fi() ->beginIF($path)->andWhere('path')->like($path . '%')->fi() - ->beginIF(!$this->app->user->admin and $this->config->systemMode == 'new')->andWhere('id')->in($this->app->user->view->projects)->fi() - ->beginIF(!$this->app->user->admin and $this->config->systemMode == 'classic')->andWhere('id')->in($this->app->user->view->sprints)->fi() + ->beginIF(!$queryAll and !$this->app->user->admin and $this->config->systemMode == 'new')->andWhere('id')->in($this->app->user->view->projects)->fi() + ->beginIF(!$queryAll and !$this->app->user->admin and $this->config->systemMode == 'classic')->andWhere('id')->in($this->app->user->view->sprints)->fi() ->beginIF($this->cookie->involved or $involved) ->andWhere('openedBy', true)->eq($this->app->user->account) ->orWhere('PM')->eq($this->app->user->account) @@ -236,6 +237,43 @@ class programModel extends model ->fetchAll(); } + /** + * Get program and project progress list. + * + * @access public + * @return array + */ + public function getProgressList() + { + $TotalProgress = array(); + $projectCount = 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) + { + $TotalProgress[$programID] = 0; + $projectCount[$programID] = 0; + + foreach($projectStats as $project) + { + if(strpos($project->path, ',' . $programID . ',') === false) continue; + $TotalProgress[$programID] += $project->hours->progress; + $projectCount[$programID]++; + } + + if(empty($projectCount[$programID])) continue; + $progressList[$programID] = $TotalProgress[$programID] / $projectCount[$programID]; + } + + /* Add project progress. */ + foreach($projectStats as $project) $progressList[$project->id] = $project->hours->progress; + + return $progressList; + } + /** * Create a program. * @@ -823,13 +861,14 @@ class programModel extends model * @param object $pager * @param string $programTitle * @param int $involved + * @param bool $queryAll * @access public * @return array */ - public function getProjectStats($programID = 0, $browseType = 'undone', $queryID = 0, $orderBy = 'id_desc', $pager = null, $programTitle = 0, $involved = 0) + public function getProjectStats($programID = 0, $browseType = 'undone', $queryID = 0, $orderBy = 'id_desc', $pager = null, $programTitle = 0, $involved = 0, $queryAll = false) { /* Init vars. */ - $projects = $this->getProjectList($programID, $browseType, $queryID, $orderBy, $pager, $programTitle, $involved); + $projects = $this->getProjectList($programID, $browseType, $queryID, $orderBy, $pager, $programTitle, $involved, $queryAll); if(empty($projects)) return array(); $projectKeys = array_keys($projects); diff --git a/module/program/view/browsebylist.html.php b/module/program/view/browsebylist.html.php index 8d4e6f34dd..b310fae7e0 100644 --- a/module/program/view/browsebylist.html.php +++ b/module/program/view/browsebylist.html.php @@ -75,8 +75,8 @@