diff --git a/module/program/control.php b/module/program/control.php index 54e34c9fa2..3ef0331eb9 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -26,13 +26,16 @@ class program extends control * @access public * @return void */ - public function browse($status = 'all', $orderBy = 'order_asc') + public function browse($status = 'all', $orderBy = 'order_asc', $recTotal = 0, $recPerPage = 10, $pageID = 1) { if(common::hasPriv('program', 'create')) $this->lang->pageActions = html::a($this->createLink('program', 'create'), " " . $this->lang->program->create, '', "class='btn btn-primary create-program-btn'"); $this->session->set('programList', $this->app->getURI(true), 'program'); $this->session->set('projectList', $this->app->getURI(true), 'program'); + $this->app->loadClass('pager', $static = true); + $pager = new pager($recTotal, $recPerPage, $pageID); + $programType = $this->cookie->programType ? $this->cookie->programType : 'bylist'; if($programType === 'bygrid') @@ -41,7 +44,10 @@ class program extends control } else { - $programs = $this->program->getList($status, $orderBy, null, true); + $topPrograms = $this->program->getList($status, $orderBy, $pager, 'topProgram'); + $programIDs = array(); + foreach($topPrograms as $programID => $program) $programIDs[] = $programID; + $programs = $this->program->getList($status, $orderBy, null, 'byTopIDs', $programIDs); } /* Get PM id list. */ @@ -58,6 +64,7 @@ class program extends control $this->view->programs = $programs; $this->view->status = $status; $this->view->orderBy = $orderBy; + $this->view->pager = $pager; $this->view->users = $this->user->getPairs('noletter'); $this->view->userIdPairs = $this->user->getPairs('noletter|showid'); $this->view->usersAvatar = $this->user->getAvatarPairs(''); diff --git a/module/program/js/browse.js b/module/program/js/browse.js index e84d284444..b042c063d3 100644 --- a/module/program/js/browse.js +++ b/module/program/js/browse.js @@ -43,6 +43,10 @@ $(function() $('#programForm').removeClass('has-row-checked'); } }); + + var myPager = $('.pager').data('zui.pager'); + myPager.lang.pageSize = pageSize; + myPager.set(); }); function showEditCheckbox(show) diff --git a/module/program/lang/en.php b/module/program/lang/en.php index 31568de285..62bf6dce4f 100644 --- a/module/program/lang/en.php +++ b/module/program/lang/en.php @@ -71,6 +71,7 @@ $lang->program->moreProgram = 'More program'; $lang->program->stakeholderType = 'Stakeholder type'; $lang->program->parentBudget = 'Parent program surplus budget:'; $lang->program->isStakeholderKey = 'Key stakeholder'; +$lang->program->pageSize = '{recPerPage} Top Programs per page'; $lang->program->stakeholderTypeList['inside'] = 'Inside'; $lang->program->stakeholderTypeList['outside'] = 'Outside'; diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php index c38753ce88..6afc1ca4b4 100644 --- a/module/program/lang/zh-cn.php +++ b/module/program/lang/zh-cn.php @@ -71,6 +71,7 @@ $lang->program->moreProgram = '更多项目集'; $lang->program->stakeholderType = '干系人类型'; $lang->program->parentBudget = '所属项目集剩余预算:'; $lang->program->isStakeholderKey = '关键干系人'; +$lang->program->pageSize = '每页 {recPerPage} 项顶级项目集'; $lang->program->stakeholderTypeList['inside'] = '内部'; $lang->program->stakeholderTypeList['outside'] = '外部'; diff --git a/module/program/model.php b/module/program/model.php index f5bd3cdb18..892a34a19d 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -133,8 +133,15 @@ class programModel extends model * @access public * @return array */ - public function getList($status = 'all', $orderBy = 'id_asc', $pager = NULL) + public function getList($status = 'all', $orderBy = 'id_asc', $pager = NULL, $filter = '', $filterParams = '') { + $filterSql = ''; + if($filter === 'byTopIDs') + { + foreach($filterParams as $topID) $filterSql .= "path like ',{$topID},%' or "; + if($filterSql) $filterSql = '(' . substr($filterSql, 0, -3) . ')'; // Remove last or. + } + return $this->dao->select('*')->from(TABLE_PROGRAM) ->where('deleted')->eq(0) ->andWhere('vision')->eq($this->config->vision) @@ -146,6 +153,8 @@ class programModel extends model ->markRight(2) ->beginIF($status != 'all')->andWhere('status')->eq($status)->fi() ->beginIF(!$this->cookie->showClosed)->andWhere('status')->ne('closed')->fi() + ->beginIF($filter === 'topProgram')->andWhere('parent')->eq(0)->fi() + ->beginIF(!empty($filterSql))->andWhere($filterSql)->fi() ->orderBy($orderBy) ->page($pager) ->fetchAll('id'); @@ -240,15 +249,15 @@ class programModel extends model foreach($products as $product) { $product->plans = zget($plans, $product->id, array()); - + /* Convert predefined HTML entities to characters. */ !empty($product->plans) && array_map(function($planVal) { return $planVal->title = htmlspecialchars_decode($planVal->title, ENT_QUOTES); - }, + }, $product->plans); $product->name = htmlspecialchars_decode($product->name, ENT_QUOTES); - + $product->releases = zget($releases, $product->id, array()); $projects = zget($projectGroup, $product->id, array()); foreach($projects as $project) diff --git a/module/program/view/browse.html.php b/module/program/view/browse.html.php index 6b13491250..e26b262b62 100644 --- a/module/program/view/browse.html.php +++ b/module/program/view/browse.html.php @@ -15,6 +15,7 @@ edit);?> selectAll);?> +program->pageSize);?> diff --git a/module/program/view/browsebylist.html.php b/module/program/view/browsebylist.html.php index 3271346cda..5e6a78f15e 100644 --- a/module/program/view/browsebylist.html.php +++ b/module/program/view/browsebylist.html.php @@ -138,6 +138,7 @@ +