1<?php
2/*
3** Zabbix
4** Copyright (C) 2001-2021 Zabbix SIA
5**
6** This program is free software; you can redistribute it and/or modify
7** it under the terms of the GNU General Public License as published by
8** the Free Software Foundation; either version 2 of the License, or
9** (at your option) any later version.
10**
11** This program is distributed in the hope that it will be useful,
12** but WITHOUT ANY WARRANTY; without even the implied warranty of
13** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14** GNU General Public License for more details.
15**
16** You should have received a copy of the GNU General Public License
17** along with this program; if not, write to the Free Software
18** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19**/
20
21$widget = (new CWidget())
22	->setTitle(_('User groups'))
23	->setControls((new CForm('get'))
24		->cleanItems()
25		->addItem((new CList())->addItem(new CSubmit('form', _('Create user group'))))
26	);
27
28// create form
29$userGroupsForm = (new CForm())->setName('userGroupsForm');
30
31// create user group table
32$userGroupTable = (new CTableInfo())
33	->setHeader([
34		(new CColHeader(
35			(new CCheckBox('all_groups'))->onClick("checkAll('".$userGroupsForm->getName()."','all_groups','group_groupid');")
36		))->addClass(ZBX_STYLE_CELL_WIDTH),
37		make_sorting_header(_('Name'), 'name', $data['sort'], $data['sortorder'], 'usergrps.php'),
38		'#',
39		_('Members'),
40		_('Frontend access'),
41		_('Debug mode'),
42		_('Status')
43	]);
44
45foreach ($this->data['usergroups'] as $usrgrp) {
46	$userGroupId = $usrgrp['usrgrpid'];
47
48	$debugMode = ($usrgrp['debug_mode'] == GROUP_DEBUG_MODE_ENABLED)
49		? (new CLink(_('Enabled'), 'usergrps.php?action=usergroup.massdisabledebug&usrgrpid='.$userGroupId))
50			->addClass(ZBX_STYLE_LINK_ACTION)
51			->addClass(ZBX_STYLE_ORANGE)
52			->addSID()
53		: (new CLink(_('Disabled'), 'usergrps.php?action=usergroup.massenabledebug&usrgrpid='.$userGroupId))
54			->addClass(ZBX_STYLE_LINK_ACTION)
55			->addClass(ZBX_STYLE_GREEN)
56			->addSID();
57
58	// gui access
59	$guiAccess = user_auth_type2str($usrgrp['gui_access']);
60	$guiAccessStyle = ZBX_STYLE_LINK_ACTION.' '.ZBX_STYLE_GREEN;
61	if ($usrgrp['gui_access'] == GROUP_GUI_ACCESS_INTERNAL) {
62		$guiAccessStyle = ZBX_STYLE_LINK_ACTION.' '.ZBX_STYLE_ORANGE;
63	}
64	if ($usrgrp['gui_access'] == GROUP_GUI_ACCESS_DISABLED) {
65		$guiAccessStyle = ZBX_STYLE_LINK_ACTION.' '.ZBX_STYLE_RED;
66	}
67
68	if (granted2update_group($userGroupId)) {
69		$nextGuiAuth = ($usrgrp['gui_access'] + 1 > GROUP_GUI_ACCESS_DISABLED)
70			? GROUP_GUI_ACCESS_SYSTEM
71			: $usrgrp['gui_access'] + 1;
72
73		$guiAccess = (new CLink(
74			$guiAccess,
75			'usergrps.php?action=usergroup.set_gui_access&set_gui_access='.$nextGuiAuth.'&usrgrpid='.$userGroupId
76		))
77			->addClass($guiAccessStyle)
78			->addSID();
79
80		$usersStatus = ($usrgrp['users_status'] == GROUP_STATUS_ENABLED)
81			? (new CLink(_('Enabled'), 'usergrps.php?action=usergroup.massdisable&usrgrpid='.$userGroupId))
82				->addClass(ZBX_STYLE_LINK_ACTION)
83				->addClass(ZBX_STYLE_GREEN)
84				->addSID()
85			: (new CLink(_('Disabled'), 'usergrps.php?action=usergroup.massenable&usrgrpid='.$userGroupId))
86				->addClass(ZBX_STYLE_LINK_ACTION)
87				->addClass(ZBX_STYLE_RED)
88				->addSID();
89	}
90	else {
91		$guiAccess = (new CSpan($guiAccess))->addClass($guiAccessStyle);
92		$usersStatus = ($usrgrp['users_status'] == GROUP_STATUS_ENABLED)
93			? (new CSpan(_('Enabled')))->addClass(ZBX_STYLE_GREEN)
94			: (new CSpan(_('Disabled')))->addClass(ZBX_STYLE_RED);
95	}
96
97	if (isset($usrgrp['users'])) {
98		$userGroupUsers = $usrgrp['users'];
99		order_result($userGroupUsers, 'alias');
100
101		$users = [];
102		$i = 0;
103
104		foreach ($userGroupUsers as $user) {
105			$i++;
106
107			if ($i > $this->data['config']['max_in_table']) {
108				$users[] = ' &hellip;';
109
110				break;
111			}
112
113			if ($users) {
114				$users[] = ', ';
115			}
116
117			$users[] = (new CLink(getUserFullname($user), 'users.php?form=update&userid='.$user['userid']))
118					->addClass(ZBX_STYLE_LINK_ALT)
119					->addClass($user['gui_access'] == GROUP_GUI_ACCESS_DISABLED || $user['users_status'] == GROUP_STATUS_DISABLED
120						? ZBX_STYLE_RED
121						: ZBX_STYLE_GREEN);
122		}
123	}
124
125	$name = new CLink($usrgrp['name'], 'usergrps.php?form=update&usrgrpid='.$userGroupId);
126
127	$userGroupTable->addRow([
128		new CCheckBox('group_groupid['.$userGroupId.']', $userGroupId),
129		(new CCol($name))->addClass(ZBX_STYLE_NOWRAP),
130		[new CLink(_('Users'), 'users.php?filter_usrgrpid='.$userGroupId), CViewHelper::showNum(count($usrgrp['users']))],
131		$users,
132		$guiAccess,
133		$debugMode,
134		$usersStatus
135	]);
136}
137
138// append table to form
139$userGroupsForm->addItem([
140	$userGroupTable,
141	$this->data['paging'],
142	new CActionButtonList('action', 'group_groupid', [
143		'usergroup.massenable' => ['name' => _('Enable'), 'confirm' => _('Enable selected groups?')],
144		'usergroup.massdisable' => ['name' => _('Disable'), 'confirm' => _('Disable selected groups?')],
145		'usergroup.massenabledebug' => ['name' => _('Enable debug mode'),
146			'confirm' => _('Enable debug mode in selected groups?')
147		],
148		'usergroup.massdisabledebug' => ['name' => _('Disable debug mode'),
149			'confirm' => _('Disable debug mode in selected groups?')
150		],
151		'usergroup.massdelete' => ['name' => _('Delete'), 'confirm' => _('Delete selected groups?')]
152	])
153]);
154
155// append form to widget
156$widget->addItem($userGroupsForm);
157
158return $widget;
159