From 4fbd9f6fd2a31d186d511a00cc0451c0c66577b4 Mon Sep 17 00:00:00 2001 From: sgm0422 <976204163@qq.com> Date: Wed, 10 Jun 2020 14:10:09 +0800 Subject: [PATCH] * Finish task #7234. --- db/update15.0.sql | 4 ++ module/dept/model.php | 13 ++++ module/group/control.php | 36 ++++++++++ module/group/css/managepgmadmin.css | 1 + module/group/js/managepgmadmin.js | 27 ++++++++ module/group/lang/en.php | 2 + module/group/lang/resource.php | 18 ++--- module/group/lang/zh-cn.php | 2 + module/group/model.php | 46 +++++++++++++ module/group/view/browse.html.php | 10 +++ module/group/view/managepgmadmin.html.php | 84 +++++++++++++++++++++++ 11 files changed, 235 insertions(+), 8 deletions(-) create mode 100644 module/group/css/managepgmadmin.css create mode 100644 module/group/js/managepgmadmin.js create mode 100644 module/group/view/managepgmadmin.html.php diff --git a/db/update15.0.sql b/db/update15.0.sql index 7b29557b65..c747a0adc9 100644 --- a/db/update15.0.sql +++ b/db/update15.0.sql @@ -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; diff --git a/module/dept/model.php b/module/dept/model.php index badce32d02..cef94a35e8 100644 --- a/module/dept/model.php +++ b/module/dept/model.php @@ -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. * diff --git a/module/group/control.php b/module/group/control.php index 06078463d4..2a94f5ecb5 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -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. * diff --git a/module/group/css/managepgmadmin.css b/module/group/css/managepgmadmin.css new file mode 100644 index 0000000000..b8f8b4bfe4 --- /dev/null +++ b/module/group/css/managepgmadmin.css @@ -0,0 +1 @@ +#sidebar .cell{margin-top: 40px} diff --git a/module/group/js/managepgmadmin.js b/module/group/js/managepgmadmin.js new file mode 100644 index 0000000000..69c5236580 --- /dev/null +++ b/module/group/js/managepgmadmin.js @@ -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); +} diff --git a/module/group/lang/en.php b/module/group/lang/en.php index fbd50428d1..7c8d1739df 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -21,9 +21,11 @@ $lang->group->managePrivByGroup = 'Manage Privileges by Group'; $lang->group->managePrivByModule = 'Manage Privileges by Module'; $lang->group->byModuleTips = '(Press Shift/Ctrl to Multi-select)'; $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'; diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 24cd5ad36a..46a4ecbbdb 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -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(); diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index ad104330ea..0a7a562401 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -21,9 +21,11 @@ $lang->group->managePrivByGroup = '权限维护'; $lang->group->managePrivByModule = '按模块分配权限'; $lang->group->byModuleTips = '(可以按住Shift或者Ctrl键进行多选)'; $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; diff --git a/module/group/model.php b/module/group/model.php index c195cbe969..0a88f538dc 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -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. diff --git a/module/group/view/browse.html.php b/module/group/view/browse.html.php index dd849d059a..d85bca8146 100644 --- a/module/group/view/browse.html.php +++ b/module/group/view/browse.html.php @@ -42,6 +42,7 @@ desc;?> + role != 'prgadmin'):?> group->managepriv = $lang->group->managePrivByGroup;?> id", $group, 'list', 'eye');?> id", $group, 'list', 'lock');?> @@ -60,6 +61,15 @@ echo ""; } ?> + + id", $group, 'list', 'eye', '', 'disabled');?> + id", $group, 'list', 'lock');?> + group->managemember = $lang->group->manageMember;?> + id", $group, 'list', 'persons');?> + id", $group, 'list', '', '', 'disabled');?> + id", $group, 'list', '', '', 'disabled');?> + ";?> + diff --git a/module/group/view/managepgmadmin.html.php b/module/group/view/managepgmadmin.html.php new file mode 100644 index 0000000000..2832c12d39 --- /dev/null +++ b/module/group/view/managepgmadmin.html.php @@ -0,0 +1,84 @@ + + * @package group + * @version $Id: managemember.html.php 4627 2013-04-10 05:42:20Z chencongzhi520@gmail.com $ + * @link http://www.zentao.net + */ +?> + +
+ +
+
+ + + + $program):?> + + + + + + + + + + + + + + + + + + + +
group->inside : '';?> +
+
+
+ group->program;?> + +
+
+ + +
group->inside;?> +
+
+
+ group->program;?> + +
+
+ + +
+ goback, $this->createLink('group', 'browse')); + echo html::hidden('foo'); // Just a var, to make sure $_POST is not empty. + ?> +
+
+
+
+