* Finish task #43169.

This commit is contained in:
tianshujie
2021-10-14 09:24:16 +08:00
parent e5132dcc3e
commit f5e1ceb880
9 changed files with 84 additions and 48 deletions
+1
View File
@@ -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';
+6 -15
View File
@@ -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)
+40 -3
View File
@@ -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();
+2
View File
@@ -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';
+2
View File
@@ -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 = '分组';
+14 -1
View File
@@ -86,7 +86,20 @@
<?php endif;?>
</td>
</tr>
<tr>
<tr id='executionBox' style='display:none'>
<th class='text-right'><?php echo $lang->group->executionList;?></th>
<td>
<?php if($executions):?>
<div class='input-group'>
<?php echo html::select("actions[sprints][]", $executions, isset($group->acl['sprints']) ? join(',', $group->acl['sprints']) : '', "class='form-control chosen' drop_direction='down' multiple")?>
<span class='input-group-addon strong'><?php echo $lang->group->noticeVisit?></span>
</div>
<?php else:?>
<?php echo $lang->group->noneExecution;?>
<?php endif;?>
</td>
</tr>
<tr>
<th class='text-right text-top'><?php echo $lang->group->dynamic?></th>
<td class='pl-0px pt-0px'>
<table class='table table-form'>
+11 -26
View File
@@ -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;
}
+3 -1
View File
@@ -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();
}
+5 -2
View File
@@ -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();
}