diff --git a/module/group/config.php b/module/group/config.php index 6b75d3807b..2a7a9fba9a 100644 --- a/module/group/config.php +++ b/module/group/config.php @@ -9,3 +9,4 @@ $config->group->acl = new stdclass(); $config->group->acl->objectTypes['programs'] = 'program'; $config->group->acl->objectTypes['projects'] = 'project'; $config->group->acl->objectTypes['products'] = 'product'; +$config->group->acl->objectTypes['sprints'] = 'sprint'; diff --git a/module/group/control.php b/module/group/control.php index f303b89e2e..c36a5aea6f 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -138,22 +138,13 @@ class group extends control /* Get the group data by id. */ $group = $this->group->getByID($groupID); + $this->view->title = $this->lang->company->common . $this->lang->colon . $group->name . $this->lang->colon . $this->lang->group->manageView; - $projects = $this->dao->select('*')->from(TABLE_PROJECT) - ->where('deleted')->eq('0') - ->beginIF($this->config->systemMode == 'classic')->andWhere('type')->in('sprint,stage')->fi() - ->beginIF($this->config->systemMode == 'new')->andWhere('type')->eq('project')->fi() - ->orderBy('order_desc') - ->fetchPairs('id', 'name'); - - $this->view->title = $this->lang->company->common . $this->lang->colon . $group->name . $this->lang->colon . $this->lang->group->manageView; - $this->view->position[] = $group->name; - $this->view->position[] = $this->lang->group->manageView; - - $this->view->group = $group; - $this->view->programs = $this->dao->select('*')->from(TABLE_PROGRAM)->where('deleted')->eq('0')->andWhere('type')->eq('program')->orderBy('order_desc')->fetchPairs('id', 'name'); - $this->view->projects = $projects; - $this->view->products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('deleted')->eq('0')->orderBy('order_desc')->fetchPairs('id', 'name'); + $this->view->group = $group; + $this->view->programs = $this->loadModel('program')->getPairs(true, 'order_desc'); + $this->view->projects = $this->loadModel('project')->getPairsByProgram(0, 'all', true, 'order_desc'); + $this->view->executions = $this->loadModel('execution')->getPairs(0, 'all', 'all'); + $this->view->products = $this->loadModel('product')->getPairs(); $navGroup = array(); foreach($this->lang->navGroup as $moduleName => $groupName) diff --git a/module/group/js/manageview.js b/module/group/js/manageview.js index 144ecd81b2..9cf345372d 100644 --- a/module/group/js/manageview.js +++ b/module/group/js/manageview.js @@ -1,18 +1,54 @@ +/** + * Toggle program. + * + * @access public + * @return void + */ function toggleProgram() { $('#programBox').toggle($('#program').prop("checked")); } +/** + * Toggle product. + * + * @access public + * @return void + */ function toggleProduct() { $('#productBox').toggle($('#product').prop("checked")); } +/** + * Toggle project. + * + * @access public + * @return void + */ function toggleProject() { $('#projectBox').toggle($('#project').prop("checked")); } +/** + * Toggle execution. + * + * @access public + * @return void + */ +function toggleExecution() +{ + $('#executionBox').toggle($('#execution').prop("checked")); +} + +/** + * Select all. + * + * @param obj $obj + * @access public + * @return void + */ function selectAll(obj) { $(obj).closest('tr').find(':checkbox').prop('checked', $(obj).prop('checked')); @@ -35,9 +71,10 @@ $(function() $('.group-item input:checkbox[name^="allchecker"]').prop('checked', allChecked); var id = $(this).attr('id'); - if(id == 'program') toggleProgram(); - if(id == 'product') toggleProduct(); - if(id == 'project') toggleProject(); + if(id == 'program') toggleProgram(); + if(id == 'product') toggleProduct(); + if(id == 'project') toggleProject(); + if(id == 'execution') toggleExecution(); if($('#' + id + 'ActionBox').length == 1) $('#' + id + 'ActionBox').toggle($(this).prop("checked")); }) $('.group-item :checkbox[name^="actions"]').change(); diff --git a/module/group/lang/en.php b/module/group/lang/en.php index fa19545744..65ead073b0 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -30,10 +30,12 @@ $lang->group->manageProject = 'Manage Project'; $lang->group->programList = 'Access Program'; $lang->group->productList = 'Access Product'; $lang->group->projectList = 'Access Project'; +$lang->group->executionList = "Access {$lang->execution->common}"; $lang->group->dynamic = 'Access Dynamics'; $lang->group->noticeVisit = 'Blank means no access limit.'; $lang->group->noneProgram = "No Program"; $lang->group->noneProduct = "No {$lang->productCommon}"; +$lang->group->noneExecution = "No {$lang->execution->common}"; $lang->group->project = 'Project'; $lang->group->group = 'Group'; diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index d4ff79136a..9c5070e8e6 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -30,10 +30,12 @@ $lang->group->manageProject = '可管理项目'; $lang->group->programList = '可访问项目集'; $lang->group->productList = '可访问' . $lang->productCommon; $lang->group->projectList = '可访问项目'; +$lang->group->executionList = "可访问{$lang->execution->common}"; $lang->group->dynamic = '可查看动态'; $lang->group->noticeVisit = '空代表没有访问限制'; $lang->group->noneProgram = "暂时没有项目集"; $lang->group->noneProduct = "暂时没有{$lang->productCommon}"; +$lang->group->noneExecution = "暂时没有{$lang->execution->common}"; $lang->group->project = '项目'; $lang->group->group = '分组'; diff --git a/module/group/view/manageview.html.php b/module/group/view/manageview.html.php index 459ccecf97..77b2cb578f 100644 --- a/module/group/view/manageview.html.php +++ b/module/group/view/manageview.html.php @@ -86,7 +86,20 @@ - + + group->executionList;?> + + +
+ acl['sprints']) ? join(',', $group->acl['sprints']) : '', "class='form-control chosen' drop_direction='down' multiple")?> + group->noticeVisit?> +
+ + group->noneExecution;?> + + + + group->dynamic?> diff --git a/module/product/model.php b/module/product/model.php index 23439e571a..c0d0c0b5e1 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -265,37 +265,22 @@ class productModel extends model * * @param string $mode * @param string $programID - * @param string $orderBy program_asc * @return array */ - public function getPairs($mode = '', $programID = 0, $orderBy = '') + public function getPairs($mode = '', $programID = 0) { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProductPairs(); - if($orderBy == 'program_asc') - { - $products = $this->dao->select('t1.id as id, t1.name as name, t1.*, IF(INSTR(" closed", t1.status) < 2, 0, 1) AS isClosed')->from(TABLE_PRODUCT)->alias('t1') - ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') - ->where('t1.deleted')->eq(0) - ->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi() - ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi() - ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi() - ->orderBy('t2.order_asc, t1.line_desc, t1.order_desc') - ->fetchPairs('id', 'name'); - } - else - { - $orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed'; - $products = $this->dao->select('*, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed') - ->from(TABLE_PRODUCT) - ->where(1) - ->beginIF(strpos($mode, 'all') === false)->andWhere('deleted')->eq(0)->fi() - ->beginIF($programID)->andWhere('program')->eq($programID)->fi() - ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi() - ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->products)->fi() - ->orderBy($orderBy) - ->fetchPairs('id', 'name'); - } + $orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed'; + $products = $this->dao->select('*, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed') + ->from(TABLE_PRODUCT) + ->where(1) + ->beginIF(strpos($mode, 'all') === false)->andWhere('deleted')->eq(0)->fi() + ->beginIF($programID)->andWhere('program')->eq($programID)->fi() + ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi() + ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->products)->fi() + ->orderBy($orderBy) + ->fetchPairs('id', 'name'); return $products; } diff --git a/module/program/model.php b/module/program/model.php index 6864d68258..ed1ba3289c 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -45,15 +45,17 @@ class programModel extends model * Get program pairs. * * @param bool $isQueryAll + * @param string $orderBy * @access public * @return array */ - public function getPairs($isQueryAll = false) + public function getPairs($isQueryAll = false, $orderBy = 'id_desc') { return $this->dao->select('id, name')->from(TABLE_PROGRAM) ->where('type')->eq('program') ->andWhere('deleted')->eq(0) ->beginIF(!$this->app->user->admin and !$isQueryAll)->andWhere('id')->in($this->app->user->view->programs)->fi() + ->orderBy($orderBy) ->fetchPairs(); } diff --git a/module/project/model.php b/module/project/model.php index 185d5d3169..71a7e24ae8 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -471,10 +471,12 @@ class projectModel extends model * * @param int $programID * @param status $status all|wait|doing|suspended|closed|noclosed + * @param bool $isQueryAll + * @param string $orderBy * @access public * @return object */ - public function getPairsByProgram($programID = 0, $status = 'all') + public function getPairsByProgram($programID = 0, $status = 'all', $isQueryAll = false, $orderBy = 'id_desc') { return $this->dao->select('id, name')->from(TABLE_PROJECT) ->where('type')->eq('project') @@ -482,7 +484,8 @@ class projectModel extends model ->beginIF($programID)->andWhere('parent')->eq($programID)->fi() ->beginIF($status != 'all' && $status != 'noclosed')->andWhere('status')->eq($status)->fi() ->beginIF($status == 'noclosed')->andWhere('status')->ne('closed')->fi() - ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi() + ->beginIF(!$this->app->user->admin and !$isQueryAll)->andWhere('id')->in($this->app->user->view->projects)->fi() + ->orderBy($orderBy) ->fetchPairs(); }