* Finish task #7234.

This commit is contained in:
sgm0422
2020-06-10 14:10:09 +08:00
parent b25f67c5ba
commit 4fbd9f6fd2
11 changed files with 235 additions and 8 deletions
+4
View File
@@ -6,3 +6,7 @@ ADD `budget` varchar(30) NOT NULL DEFAULT '0' AFTER `program`,
ADD `budgetUnit` char(30) NOT NULL DEFAULT 'yuan' AFTER `budget`,
ADD `realStarted` date NOT NULL AFTER `end`,
ADD `realFinished` date NOT NULL AFTER `realStarted`;
INSERT INTO `zt_group` (`name`, `role`, `desc`, `acl`, `developer`) VALUES ('项目管理员', 'prgadmin', '项目管理员可以维护项目的权限', NULL, '1');
ALTER TABLE `zt_usergroup` ADD `program` text NOT NULL;
+13
View File
@@ -232,6 +232,19 @@ class deptModel extends model
return html::a(helper::createLink('group', 'managemember', "groupID=$groupID&deptID={$dept->id}"), $dept->name, '_self', "id='dept{$dept->id}'");
}
/**
* Create the group manage program admin link.
*
* @param int $dept
* @param int $groupID
* @access public
* @return string
*/
public function createManagePgmAdminLink($dept, $groupID)
{
return html::a(helper::createLink('group', 'managePgmAdmin', "groupID=$groupID&deptID={$dept->id}"), $dept->name, '_self', "id='dept{$dept->id}'");
}
/**
* Get sons of a department.
*
+36
View File
@@ -260,6 +260,42 @@ class group extends control
$this->display();
}
/**
* Manage members of a group.
*
* @param int $groupID
* @param int $deptID
* @access public
* @return void
*/
public function managePgmAdmin($groupID, $deptID = 0)
{
if(!empty($_POST))
{
$this->group->updatePgmAdmin($groupID);
die(js::locate(inlink('managePgmAdmin', "group=$groupID"), 'parent'));
}
$group = $this->group->getById($groupID);
$groupUsers = $this->group->getUserPairs($groupID);
$userPrograms = $this->group->getUserPrograms($groupID);
$allUsers = array('' => '') + $groupUsers + $this->loadModel('dept')->getDeptUserPairs($deptID);
$title = $this->lang->company->common . $this->lang->colon . $group->name . $this->lang->colon . $this->lang->group->manageMember;
$position[] = $group->name;
$position[] = $this->lang->group->manageMember;
$this->view->title = $title;
$this->view->position = $position;
$this->view->allUsers = $allUsers;
$this->view->group = $group;
$this->view->programs = $this->dao->select('id, name')->from(TABLE_PROJECT)->where('program')->eq(0)->andWhere('deleted')->eq(0)->fetchPairs();
$this->view->deptTree = $this->loadModel('dept')->getTreeMenu($rooteDeptID = 0, array('deptModel', 'createManagePgmAdminLink'), $groupID);
$this->view->groupUsers = $groupUsers;
$this->view->userPrograms = $userPrograms;
$this->display();
}
/**
* Delete a group.
*
+1
View File
@@ -0,0 +1 @@
#sidebar .cell{margin-top: 40px}
+27
View File
@@ -0,0 +1,27 @@
function addItem(obj)
{
var $currentRow = $(obj).closest('tr');
var $newRow = $currentRow.clone().addClass('highlight');
$currentRow.after($newRow);
$newRow.find('th').text('');
$newRow.find('div[id^=members], div[id^=program]').remove();
$newRow.find('select[name^="members"], select[name^="program"]').val('').chosen();
setTimeout(function()
{
$newRow.removeClass('highlight');
}, 1600);
}
function deleteItem(obj)
{
var $currentLine= $(obj).closest('tr');
$currentLine.remove();
}
function resetProgramName(obj)
{
var programSelect = $(obj).closest('tr').find('select[name^="program"]');
var newName = 'program[' + $(obj).val() + '][]';
programSelect.attr('name', newName);
}
+2
View File
@@ -21,9 +21,11 @@ $lang->group->managePrivByGroup = 'Manage Privileges by Group';
$lang->group->managePrivByModule = 'Manage Privileges by Module';
$lang->group->byModuleTips = '<span class="tips">(Press Shift/Ctrl to Multi-select)</span>';
$lang->group->manageMember = 'Manage Members';
$lang->group->managePgmAdmin = 'Manage Program Admins';
$lang->group->confirmDelete = 'Do you want to delete this user group?';
$lang->group->successSaved = 'Saved.';
$lang->group->errorNotSaved = 'Failed. Please select actions and groups.';
$lang->group->program = 'Manage Programs';
$lang->group->viewList = 'Access Sight';
$lang->group->productList = 'Access Product';
$lang->group->projectList = 'Access Project';
+10 -8
View File
@@ -891,14 +891,15 @@ $lang->dept->methodOrder[25] = 'delete';
/* Group. */
$lang->resource->group = new stdclass();
$lang->resource->group->browse = 'browse';
$lang->resource->group->create = 'create';
$lang->resource->group->edit = 'edit';
$lang->resource->group->copy = 'copy';
$lang->resource->group->delete = 'delete';
$lang->resource->group->manageView = 'manageView';
$lang->resource->group->managePriv = 'managePriv';
$lang->resource->group->manageMember = 'manageMember';
$lang->resource->group->browse = 'browse';
$lang->resource->group->create = 'create';
$lang->resource->group->edit = 'edit';
$lang->resource->group->copy = 'copy';
$lang->resource->group->delete = 'delete';
$lang->resource->group->manageView = 'manageView';
$lang->resource->group->managePriv = 'managePriv';
$lang->resource->group->manageMember = 'manageMember';
$lang->resource->group->managePgmAdmin = 'managePgmAdmin';
$lang->group->methodOrder[5] = 'browse';
$lang->group->methodOrder[10] = 'create';
@@ -907,6 +908,7 @@ $lang->group->methodOrder[20] = 'copy';
$lang->group->methodOrder[25] = 'delete';
$lang->group->methodOrder[30] = 'managePriv';
$lang->group->methodOrder[35] = 'manageMember';
$lang->group->methodOrder[40] = 'managePgmAdmin';
/* User. */
$lang->resource->user = new stdclass();
+2
View File
@@ -21,9 +21,11 @@ $lang->group->managePrivByGroup = '权限维护';
$lang->group->managePrivByModule = '按模块分配权限';
$lang->group->byModuleTips = '<span class="tips">(可以按住Shift或者Ctrl键进行多选)</span>';
$lang->group->manageMember = '成员维护';
$lang->group->managePgmAdmin = '维护项目管理员';
$lang->group->confirmDelete = '您确定删除该用户分组吗?';
$lang->group->successSaved = '成功保存';
$lang->group->errorNotSaved = '没有保存,请确认选择了权限数据。';
$lang->group->program = '可管理项目';
$lang->group->viewList = '可访问视图';
$lang->group->productList = '可访问' . $lang->productCommon;
$lang->group->projectList = '可访问' . $lang->projectCommon;
+46
View File
@@ -178,6 +178,24 @@ class groupModel extends model
->fetchPairs();
}
/**
* Get user programs of a group.
*
* @param int $groupID
* @access public
* @return array
*/
public function getUserPrograms($groupID)
{
return $this->dao->select('t1.account, t1.program')
->from(TABLE_USERGROUP)->alias('t1')
->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account')
->where('`group`')->eq((int)$groupID)
->andWhere('t2.deleted')->eq(0)
->orderBy('account')
->fetchPairs();
}
/**
* Delete a group.
*
@@ -354,6 +372,34 @@ class groupModel extends model
foreach($changedUsers as $account) $this->user->computeUserView($account, true);
}
}
/**
* Update program admins.
*
* @param int $groupID
* @access public
* @return void
*/
public function updatePgmAdmin($groupID)
{
$this->dao->delete()->from(TABLE_USERGROUP)->where('`group`')->eq($groupID)->exec();
$members = $this->post->members ? $this->post->members : array();
$programs = $this->post->program ? $this->post->program : array();
foreach($members as $id => $account)
{
if(!$account) continue;
$data = new stdclass();
$data->group = $groupID;
$data->account = $account;
$data->program = implode($programs[$account], ',');
$this->dao->replace(TABLE_USERGROUP)->data($data)->exec();
}
if(!dao::isError()) return true;
return false;
}
/**
* Sort resource.
+10
View File
@@ -42,6 +42,7 @@
<td title='<?php echo $group->desc?>'><?php echo $group->desc;?></td>
<td title='<?php echo $users;?>'><?php echo $users;?></td>
<td class='c-actions'>
<?php if($group->role != 'prgadmin'):?>
<?php $lang->group->managepriv = $lang->group->managePrivByGroup;?>
<?php common::printIcon('group', 'manageView', "groupID=$group->id", $group, 'list', 'eye');?>
<?php common::printIcon('group', 'managepriv', "type=byGroup&param=$group->id", $group, 'list', 'lock');?>
@@ -60,6 +61,15 @@
echo "<button class='btn disabled'><i class='icon icon-trash disabled' title='{$lang->group->delete}'></i></button>";
}
?>
<?php else:?>
<?php common::printIcon('group', 'manageView', "groupID=$group->id", $group, 'list', 'eye', '', 'disabled');?>
<?php common::printIcon('group', 'managepriv', "type=byGroup&param=$group->id", $group, 'list', 'lock');?>
<?php $lang->group->managemember = $lang->group->manageMember;?>
<?php common::printIcon('group', 'managePgmAdmin', "groupID=$group->id", $group, 'list', 'persons');?>
<?php common::printIcon('group', 'edit', "groupID=$group->id", $group, 'list', '', '', 'disabled');?>
<?php common::printIcon('group', 'copy', "groupID=$group->id", $group, 'list', '', '', 'disabled');?>
<?php echo "<button class='btn disabled'><i class='icon icon-trash disabled' title='{$lang->group->delete}'></i></button>";?>
<?php endif;?>
</td>
</tr>
<?php endforeach;?>
+84
View File
@@ -0,0 +1,84 @@
<?php
/**
* The manage member view of group module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package group
* @version $Id: managemember.html.php 4627 2013-04-10 05:42:20Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<div id='mainContent' class='main-row fade in'>
<div class="side-col" id="sidebar">
<div id="sidebarHeader">
<div class="title">
<span class='label label-id'><?php echo $group->id;?></span>
<?php echo $group->name;?>
</div>
</div>
<div class='cell'>
<div class='panel panel-sm'>
<div class='panel-heading nobr'><strong><?php echo $lang->dept->common;?></strong></div>
<?php echo $deptTree;?>
</div>
</div>
</div>
<div class="main-col">
<form class='main-table table-members' method='post' target='hiddenwin'>
<table class='table table-form'>
<?php if($userPrograms):?>
<?php $i = 0;?>
<?php foreach($userPrograms as $account => $program):?>
<tr>
<th class='w-100px'><?php echo $i == 0 ? $lang->group->inside : '';?></th>
<td id='group' class='pv-10px'>
<div class='group-item'><?php echo html::select('members[]', $allUsers, $account, "class='form-control chosen' onchange=resetProgramName(this)");?></div>
</td>
<td class='pv-10px' colspan='2'>
<div class='input-group'>
<span class='input-group-addon'> <?php echo $lang->group->program;?></span>
<?php echo html::select("program[$account][]", $programs, $program, "class='form-control chosen' multiple");?>
</div>
</td>
<td class='pv-10px'>
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(this)"><i class="icon icon-plus"></i></button>
<button type="button" class="btn btn-link btn-icon btn-delete" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
</td>
</tr>
<?php $i ++;?>
<?php endforeach;?>
<?php else:?>
<tr>
<th class='w-100px' rowspan='1'><?php echo $lang->group->inside;?></th>
<td id='group' class='pv-10px'>
<div class='group-item'><?php echo html::select('members[]', $allUsers, '', "class='form-control chosen' onchange=resetProgramName(this)");?></div>
</td>
<td class='pv-10px' colspan='2'>
<div class='input-group'>
<span class='input-group-addon'> <?php echo $lang->group->program;?></span>
<?php echo html::select('program[0][]', $programs, '', "class='form-control chosen' multiple");?>
</div>
</td>
<td class='pv-10px'>
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(this)"><i class="icon icon-plus"></i></button>
<button type="button" class="btn btn-link btn-icon btn-delete" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
</td>
</tr>
<?php endif;?>
<tr>
<td class='text-center form-actions' colspan='5'>
<?php
echo html::submitButton('', '', "btn btn-primary");
echo html::linkButton($lang->goback, $this->createLink('group', 'browse'));
echo html::hidden('foo'); // Just a var, to make sure $_POST is not empty.
?>
</td>
</tr>
</table>
</form>
</div>
</div>
<?php include '../../common/view/footer.html.php';?>