You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
4.8 KiB

1 year ago
<?php declare(strict_types = 0);
/*
** Zabbix
** Copyright (C) 2001-2023 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** 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 General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
/**
* @var CView $this
* @var array $data
*/
$url = (new CUrl('zabbix.php'))
->setArgument('action', ($data['tokenid'] == 0) ? 'token.create' : 'token.update')
->getUrl();
$token_form = (new CForm('post', $url))
->addItem((new CVar(CCsrfTokenHelper::CSRF_TOKEN_NAME, CCsrfTokenHelper::get('token')))->removeId())
->setId('token_form')
->setName('token')
->addVar('admin_mode', $data['admin_mode'])
->addVar('tokenid', $data['tokenid']);
// Enable form submitting on Enter.
$token_form->addItem((new CSubmitButton())->addClass(ZBX_STYLE_FORM_SUBMIT_HIDDEN));
if ($data['admin_mode'] === '0') {
$token_form->addVar('userid', CWebUser::$data['userid']);
}
$token_from_grid = (new CFormGrid())->addItem([
(new CLabel(_('Name'), 'name'))->setAsteriskMark(),
new CFormField(
(new CTextBox('name', $data['name'], false, DB::getFieldLength('token', 'name')))
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
->setAttribute('autofocus', 'autofocus')
->setAriaRequired()
)
]);
if ($data['admin_mode'] === '1') {
$token_from_grid->addItem([
(new CLabel(_('User'), 'userid_ms'))->setAsteriskMark(),
new CFormField(
(new CMultiSelect([
'disabled' => ($data['tokenid'] != 0),
'multiple' => false,
'name' => 'userid',
'object_name' => 'users',
'data' => $data['ms_user'],
'placeholder' => '',
'popup' => [
'parameters' => [
'srctbl' => 'users',
'srcfld1' => 'userid',
'srcfld2' => 'fullname',
'dstfrm' => $token_form->getName(),
'dstfld1' => 'userid'
]
]
]))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
)
]);
}
$token_from_grid->addItem([
new CLabel(_('Description'), 'description'),
new CFormField(
(new CTextArea('description', $data['description']))
->addClass(ZBX_STYLE_MONOSPACE_FONT)
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
->setMaxLength(DB::getFieldLength('token', 'description'))
->setAriaRequired()
)
])
->addItem([
new CLabel(_('Set expiration date and time'), 'expires_state'),
new CFormField(
(new CCheckBox('expires_state', '1'))
->setChecked($data['expires_state'])
->setUncheckedValue('0')
)
])
->addItem([
(new CLabel(_('Expires at'), 'expires_at'))->setAsteriskMark(),
new CFormField(
(new CDateSelector('expires_at', $data['expires_at']))
->setDateFormat(DATE_TIME_FORMAT_SECONDS)
->setPlaceholder(_('YYYY-MM-DD hh:mm:ss'))
->setAriaRequired()
->setId('expires-at-row')
)
])
->addItem([
new CLabel(_('Enabled'), 'status'),
new CFormField(
(new CCheckBox('status', ZBX_AUTH_TOKEN_ENABLED))->setChecked($data['status'] == ZBX_AUTH_TOKEN_ENABLED)
)
]);
$token_form->addItem($token_from_grid);
$data['form_name'] = 'token_form';
if ($data['tokenid'] != 0) {
$buttons = [
[
'title' => _('Update'),
'class' => '',
'keepOpen' => true,
'isSubmit' => true,
'action' => 'token_edit_popup.submit();'
],
[
'title' => _('Regenerate'),
'confirmation' => _('Regenerate selected API token? Previously generated token will become invalid.'),
'class' => 'btn-alt',
'keepOpen' => true,
'isSubmit' => false,
'action' => 'token_edit_popup.regenerate();'
],
[
'title' => _('Delete'),
'confirmation' => _('Delete selected API token?'),
'class' => 'btn-alt',
'keepOpen' => true,
'isSubmit' => false,
'action' => 'token_edit_popup.delete('.json_encode($data['tokenid']).');'
]
];
}
else {
$buttons = [
[
'title' => _('Add'),
'class' => '',
'keepOpen' => true,
'isSubmit' => true,
'action' => 'token_edit_popup.submit();'
]
];
}
$output = [
'header' =>($data['tokenid'] == 0) ? _('New API token') : ('API token'),
'doc_url' => CDocHelper::getUrl(CDocHelper::POPUP_TOKEN_EDIT),
'body' => $token_form->toString(),
'script_inline' => getPagePostJs().
$this->readJsFile('popup.token.edit.js.php').
'token_edit_popup.init();',
'buttons' => $buttons
];
if ($data['user']['debug_mode'] == GROUP_DEBUG_MODE_ENABLED) {
CProfiler::getInstance()->stop();
$output['debug'] = CProfiler::getInstance()->make()->toString();
}
echo json_encode($output);