1<?php declare(strict_types=1);
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
22/**
23 * @var CView $this
24 */
25
26$this->addJsFile('class.calendar.js');
27
28$this->includeJsFile('administration.user.token.edit.js.php');
29
30$widget = (new CWidget())
31	->setTitle(_('API tokens'))
32	->setTitleSubmenu(getUserSettingsSubmenu());
33
34$token_form = (new CForm())
35	->setId('token_form')
36	->setName('token')
37	->setAttribute('aria-labeledby', ZBX_STYLE_PAGE_TITLE)
38	->addVar('userid', CWebUser::$data['userid'])
39	->addVar('action_src', 'user.token.edit')
40	->addVar('action_dst', ($data['tokenid'] == 0) ? 'user.token.view' : 'user.token.list')
41	->addVar('action', ($data['tokenid'] == 0) ? 'token.create' : 'token.update')
42	->addVar('tokenid', $data['tokenid']);
43
44$token_from_list = (new CFormList())
45	->addRow((new CLabel(_('Name'), 'name'))->setAsteriskMark(),
46		(new CTextBox('name', $data['name'], false, DB::getFieldLength('token', 'name')))
47			->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
48			->setAttribute('autofocus', 'autofocus')
49			->setAriaRequired()
50	)
51	->addRow(new CLabel(_('Description'), 'description'),
52		(new CTextArea('description', $data['description']))
53			->addClass(ZBX_STYLE_MONOSPACE_FONT)
54			->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
55			->setMaxLength(DB::getFieldLength('token', 'description'))
56			->setAriaRequired()
57	)
58	->addRow(_('Set expiration date and time'),
59		(new CCheckBox('expires_state', '1'))
60			->setChecked($data['expires_state'])
61			->setUncheckedValue('0')
62	)
63	->addRow((new CLabel(_('Expires at')))->setAsteriskMark(),
64		(new CDateSelector('expires_at', $data['expires_at']))
65			->setDateFormat(DATE_TIME_FORMAT_SECONDS)
66			->setPlaceholder(_('YYYY-MM-DD hh:mm:ss'))
67			->setAriaRequired(),
68		'expires-at-row'
69	)
70	->addRow(_('Enabled'),
71		(new CCheckBox('status', ZBX_AUTH_TOKEN_ENABLED))
72			->setChecked($data['status'] == ZBX_AUTH_TOKEN_ENABLED)
73			->setUncheckedValue(ZBX_AUTH_TOKEN_DISABLED)
74	);
75
76
77$token_view = (new CTabView())->addTab('token', '', $token_from_list);
78$cancel_button = (new CRedirectButton(_('Cancel'), (new CUrl('zabbix.php'))
79	->setArgument('action', 'user.token.list')
80	->setArgument('page', CPagerHelper::loadPage('user.token.list', null))
81))->setId('cancel');
82
83if ($data['tokenid'] == 0) {
84	$add_button = (new CSubmitButton(_('Add')))->setId('add');
85	$token_view->setFooter(makeFormFooter($add_button, [$cancel_button]));
86}
87else {
88	$update_button = (new CSubmitButton(_('Update')))->setId('update');
89	$regenerate_button = (new CSimpleButton(_('Regenerate')))
90		->setAttribute('data-confirmation', _('Regenerate selected API token? Previously generated token will become invalid.'))
91		->setId('regenerate');
92	$delete_button = (new CRedirectButton(_('Delete'), (new CUrl('zabbix.php'))
93			->setArgumentSID()
94			->setArgument('action', 'token.delete')
95			->setArgument('action_src', 'user.token.list')
96			->setArgument('tokenids', (array) $data['tokenid']),
97		_('Delete selected API token?')
98	))->setId('delete');
99
100	$token_view->setFooter(makeFormFooter(
101		$update_button,
102		[
103			$regenerate_button,
104			$delete_button,
105			$cancel_button
106		]
107	));
108}
109
110$token_form->addItem($token_view);
111$widget
112	->addItem($token_form)
113	->show();
114