<?php /* ** Copyright (C) 2001-2025 Zabbix SIA ** ** This program is free software: you can redistribute it and/or modify it under the terms of ** the GNU Affero General Public License as published by the Free Software Foundation, version 3. ** ** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU Affero General Public License for more details. ** ** You should have received a copy of the GNU Affero General Public License along with this program. ** If not, see <https://www.gnu.org/licenses/>. **/ /** * @var CView $this * @var array $data */ $this->includeJsFile('usergroup.edit.js.php'); $html_page = (new CHtmlPage()) ->setTitle(_('User groups')) ->setDocUrl(CDocHelper::getUrl(CDocHelper::USERS_USERGROUP_EDIT)); $csrf_token = CCsrfTokenHelper::get('usergroup'); $form = (new CForm()) ->addItem((new CVar('form_refresh', $data['form_refresh'] + 1))->removeId()) ->addItem((new CVar(CSRF_TOKEN_NAME, $csrf_token))->removeId()) ->setId('user-group-form') ->setName('user_group_form') ->setAttribute('aria-labelledby', CHtmlPage::PAGE_TITLE_ID); if ($data['usrgrpid'] != 0) { $form->addVar('usrgrpid', $data['usrgrpid']); } $form_grid = (new CFormGrid()) ->addItem([ (new CLabel(_('Group name'), 'name'))->setAsteriskMark(), new CFormField( (new CTextBox('name', $data['name'])) ->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH) ->setAriaRequired() ->setAttribute('autofocus', 'autofocus') ->setAttribute('maxlength', DB::getFieldLength('usrgrp', 'name')) ) ]) ->addItem([ new CLabel(_('Users'), 'userids__ms'), new CFormField( (new CMultiSelect([ 'name' => 'userids[]', 'object_name' => 'users', 'data' => $data['users_ms'], 'popup' => [ 'parameters' => [ 'srctbl' => 'users', 'srcfld1' => 'userid', 'srcfld2' => 'fullname', 'dstfrm' => $form->getName(), 'dstfld1' => 'userids_', 'disableids' => array_column($data['users_ms'], 'id'), 'exclude_provisioned' => 1 ] ] ]))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH) ) ]); // If MFA is enabled, default option for new user groups should be 0 - 'Default' , otherwise -1 - 'Disabled' . if ($data['usrgrpid']) { if ($data['group_mfa_status'] == GROUP_MFA_ENABLED) { $mfa_index = $data['mfaid'] ?: 0; } else { $mfa_index = -1; } } else { $mfa_index = $data['mfa_config_status'] == MFA_ENABLED ? 0 : -1; } if ($data['can_update_group']) { $select_gui_access = (new CSelect('gui_access')) ->setValue($data['gui_access']) ->setFocusableElementId('gui-access') ->addOptions(CSelect::createOptionsFromArray([ GROUP_GUI_ACCESS_SYSTEM => user_auth_type2str(GROUP_GUI_ACCESS_SYSTEM), GROUP_GUI_ACCESS_INTERNAL => user_auth_type2str(GROUP_GUI_ACCESS_INTERNAL), GROUP_GUI_ACCESS_LDAP => user_auth_type2str(GROUP_GUI_ACCESS_LDAP), GROUP_GUI_ACCESS_DISABLED => user_auth_type2str(GROUP_GUI_ACCESS_DISABLED) ])); $userdirectory = (new CSelect('userdirectoryid')) ->setValue($data['userdirectoryid']) ->setFocusableElementId('userdirectoryid') ->addOption((new CSelectOption(0, _('Default')))->addClass(ZBX_STYLE_DEFAULT_OPTION)) ->addOptions(CSelect::createOptionsFromArray($data['userdirectories'])) ->setAdaptiveWidth(ZBX_TEXTAREA_STANDARD_WIDTH); $ldap_warning = (makeWarningIcon(_('LDAP authentication is disabled system-wide.')))->setId('ldap-warning'); $mfa_warning = (makeWarningIcon(_('Multi-factor authentication is disabled system-wide.')))->setId('mfa-warning'); $mfa = (new CSelect('mfaid')) ->setValue($mfa_index) ->setFocusableElementId('mfaid') ->addOptions(CSelect::createOptionsFromArray($data['mfas'])) ->setAdaptiveWidth(ZBX_TEXTAREA_STANDARD_WIDTH); if ($data['mfa_config_status'] == MFA_ENABLED && !$data['usrgrpid']) { $mfa ->addOption((new CSelectOption(-1, _('Disabled')))) ->addOption((new CSelectOption(0, _('Default')))->addClass(ZBX_STYLE_DEFAULT_OPTION)); } else { $mfa ->addOption((new CSelectOption(-1, _('Disabled')))->addClass(ZBX_STYLE_DEFAULT_OPTION)) ->addOption((new CSelectOption(0, _('Default')))); } $form_grid ->addItem([ (new CLabel(_('Frontend access'), $select_gui_access->getFocusableElementId())), new CFormField($select_gui_access) ]) ->addItem([ (new CLabel([_('LDAP Server'), $ldap_warning], $userdirectory->getFocusableElementId())), new CFormField($userdirectory) ]) ->addItem([ (new CLabel([_('Multi-factor authentication'), $mfa_warning], $mfa->getFocusableElementId())), new CFormField($mfa) ]) ->addItem([ new CLabel(_('Enabled'), 'users_status'), new CFormField( (new CCheckBox('users_status', GROUP_STATUS_ENABLED)) ->setUncheckedValue(GROUP_STATUS_DISABLED) ->setChecked($data['users_status'] == GROUP_STATUS_ENABLED) ) ]); } else { if (array_key_exists($data['mfaid'], $data['mfas'])) { $mfa_name = $data['mfas'][$data['mfaid']]; } else { $mfa_name = $mfa_index == -1 ? 'Disabled' : 'Default'; } $form_grid ->addItem([ new CLabel(_('Frontend access')), new CFormField( (new CSpan(user_auth_type2str($data['gui_access']))) ->addClass('text-field') ->addClass(ZBX_STYLE_GREEN) ) ]) ->addItem([ new CLabel(_('Multi-factor authentication')), new CFormField( (new CSpan($mfa_name)) ->addClass('text-field') ->addClass(ZBX_STYLE_GREEN) ) ]) ->addItem([ new CLabel(_('Enabled')), new CFormField( (new CSpan(_('Enabled'))) ->addClass('text-field') ->addClass(ZBX_STYLE_GREEN) ) ]); } $form_grid ->addItem([ new CLabel(_('Debug mode'), 'debug_mode'), new CFormField( (new CCheckBox('debug_mode')) ->setUncheckedValue(GROUP_DEBUG_MODE_DISABLED) ->setChecked($data['debug_mode'] == GROUP_DEBUG_MODE_ENABLED) ) ]); $template_permissions_form_grid = (new CFormGrid()) ->addItem(new CLabel(_('Permissions'))) ->addItem( new CFormField( (new CDiv( (new CTable()) ->setId('templategroup-right-table') ->setAttribute('style', 'width: 100%;') ->setHeader([_('Template groups'), _('Permissions'), _('Action')]) ->addRow((new CRow())->addClass('js-templategroup-right-row-placeholder')) ->addItem( (new CTag('tfoot', true)) ->addItem( new CCol((new CButtonLink(_('Add')))->addClass('js-add-templategroup-right-row') ) ) ) )) ->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR) ->setAttribute('style', 'min-width: '.ZBX_TEXTAREA_BIG_WIDTH.'px;') ) ); $templategroup_right_row_template = (new CTemplateTag('templategroup-right-row-template'))->addItem( (new CRow([ (new CMultiSelect([ 'name' => 'ms_templategroup_right[groupids][#{rowid}][]', 'object_name' => 'templateGroup', 'popup' => [ 'parameters' => [ 'srctbl' => 'template_groups', 'srcfld1' => 'groupid', 'dstfrm' => $form->getName(), 'dstfld1' => 'ms_templategroup_right_groupids_#{rowid}_' ] ], 'add_post_js' => false ]))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH), (new CCol( (new CRadioButtonList('templategroup_right[permission][#{rowid}]', PERM_DENY)) ->addValue(_('Read-write'), PERM_READ_WRITE) ->addValue(_('Read'), PERM_READ) ->addValue(_('Deny'), PERM_DENY) ->setModern(true) ))->setAttribute('style', 'vertical-align: top'), (new CCol( (new CButtonLink(_('Remove')))->addClass('js-remove-table-row') ))->setAttribute('style', 'vertical-align: top') ])) ->addClass('form_row') ); $template_permissions_form_grid->addItem($templategroup_right_row_template); $host_permissions_form_grid = (new CFormGrid()) ->addItem(new CLabel(_('Permissions'))) ->addItem( new CFormField( (new CDiv( (new CTable()) ->setId('hostgroup-right-table') ->setAttribute('style', 'width: 100%;') ->setHeader([_('Host groups'), _('Permissions'), _('Action')]) ->addRow((new CRow())->addClass('js-hostgroup-right-row-placeholder')) ->addItem( (new CTag('tfoot', true)) ->addItem(new CCol((new CButtonLink(_('Add')))->addClass('js-add-hostgroup-right-row'))) ) )) ->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR) ->setAttribute('style', 'min-width: '.ZBX_TEXTAREA_BIG_WIDTH.'px;') ) ); $host_permissions_row_template = (new CTemplateTag('hostgroup-right-row-template'))->addItem( (new CRow([ (new CMultiSelect([ 'name' => 'ms_hostgroup_right[groupids][#{rowid}][]', 'object_name' => 'hostGroup', 'popup' => [ 'parameters' => [ 'srctbl' => 'host_groups', 'srcfld1' => 'groupid', 'dstfrm' => $form->getName(), 'dstfld1' => 'ms_hostgroup_right_groupids_#{rowid}_' ] ], 'add_post_js' => false ]))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH), (new CCol( (new CRadioButtonList('hostgroup_right[permission][#{rowid}]', PERM_DENY)) ->addValue(_('Read-write'), PERM_READ_WRITE) ->addValue(_('Read'), PERM_READ) ->addValue(_('Deny'), PERM_DENY) ->setModern(true) ))->setAttribute('style', 'vertical-align: top'), (new CCol( (new CButtonLink(_('Remove')))->addClass('js-remove-table-row') ))->setAttribute('style', 'vertical-align: top') ])) ->addClass('form_row') ); $host_permissions_form_grid->addItem($host_permissions_row_template); $tag_filter_form_grid = (new CFormGrid()) ->addItem([ new CLabel(_('Permissions')), new CFormField( (new CDiv( new CPartial('usergroup.tagfilters', [ 'tag_filters' => $data['tag_filters'], 'tag_filters_badges' => $data['tag_filters_badges'] ]) )) ->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR) ->setAttribute('style', 'min-width: '.ZBX_TEXTAREA_BIG_WIDTH.'px;') ->setId('js-tag-filter-form-field') ) ]); $tabs = (new CTabView()) ->addTab('user_group_tab', _('User group'), $form_grid) ->addTab('template_permissions_tab', _('Template permissions'), $template_permissions_form_grid, TAB_INDICATOR_TEMPLATE_PERMISSIONS ) ->addTab('host_permissions_tab', _('Host permissions'), $host_permissions_form_grid, TAB_INDICATOR_HOST_PERMISSIONS ) ->addTab('tag_filter_tab', _('Problem tag filter'), $tag_filter_form_grid, TAB_INDICATOR_TAG_FILTER); if ($data['form_refresh'] == 0) { $tabs->setSelected(0); } $cancel_button = (new CRedirectButton(_('Cancel'), (new CUrl('zabbix.php')) ->setArgument('action', 'usergroup.list') ->setArgument('page', CPagerHelper::loadPage('usergroup.list', null)) ))->setId('cancel'); if ($data['usrgrpid'] != 0) { $tabs->setFooter(makeFormFooter( (new CSubmitButton(_('Update'), 'action', 'usergroup.update'))->setId('update'), [ (new CRedirectButton(_('Delete'), (new CUrl('zabbix.php')) ->setArgument('action', 'usergroup.delete') ->setArgument('usrgrpids', [$data['usrgrpid']]) ->setArgument(CSRF_TOKEN_NAME, $csrf_token), _('Delete selected group?') ))->setId('delete'), $cancel_button ] )); } else { $tabs->setFooter(makeFormFooter( (new CSubmitButton(_('Add'), 'action', 'usergroup.create'))->setId('add'), [ $cancel_button ] )); } $form ->addItem($tabs) ->addItem( (new CScriptTag('view.init('.json_encode([ 'templategroup_rights' => $data['templategroup_rights'], 'hostgroup_rights' => $data['hostgroup_rights'], 'tag_filters' => $data['tag_filters'], 'can_update_group' => $data['can_update_group'], 'ldap_status' => array_key_exists('ldap_status', $data) ? $data['ldap_status'] : 0, 'mfa_status' => $data['mfa_config_status'] ]).');'))->setOnDocumentReady() ); $html_page ->addItem($form) ->show();