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
22$this->includeJSfile('app/views/administration.mediatype.edit.js.php');
23
24$widget = (new CWidget())->setTitle(_('Media types'));
25
26// create form
27$mediaTypeForm = (new CForm())
28	->setId('media_type_form')
29	->addVar('form', 1)
30	->addVar('mediatypeid', $data['mediatypeid'])
31	->addVar('exec_params_count', $data['exec_params_count']);
32
33// create form list
34$nameTextBox = (new CTextBox('description', $data['description'], false, 100))
35	->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
36	->setAttribute('autofocus', 'autofocus');
37$mediaTypeFormList = (new CFormList())
38	->addRow(_('Name'), $nameTextBox);
39
40// append type to form list
41$cmbType = new CComboBox('type', $data['type'], null, [
42	MEDIA_TYPE_EMAIL => _('Email'),
43	MEDIA_TYPE_EXEC => _('Script'),
44	MEDIA_TYPE_SMS => _('SMS'),
45	MEDIA_TYPE_JABBER => _('Jabber')
46]);
47$cmbType->addItemsInGroup(_('Commercial'), [MEDIA_TYPE_EZ_TEXTING => _('Ez Texting')]);
48$cmbTypeRow = [$cmbType];
49$ez_texting_link = (new CLink('https://app.eztexting.com', 'https://app.eztexting.com/'))
50	->setId('eztext_link')
51	->setTarget('_blank');
52$cmbTypeRow[] = $ez_texting_link;
53
54$mediaTypeFormList
55	->addRow(_('Type'), $cmbTypeRow)
56	->addRow(_('SMTP server'),
57		(new CTextBox('smtp_server', $data['smtp_server']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
58	)
59	->addRow(_('SMTP server port'),
60		(new CNumericBox('smtp_port', $data['smtp_port'], 5, false, false, false))->setWidth(ZBX_TEXTAREA_TINY_WIDTH)
61	)
62	->addRow(_('SMTP helo'), (new CTextBox('smtp_helo', $data['smtp_helo']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH))
63	->addRow(_('SMTP email'), (new CTextBox('smtp_email', $data['smtp_email']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH))
64	->addRow(_('Connection security'),
65		(new CRadioButtonList('smtp_security', (int) $data['smtp_security']))
66			->addValue(_('None'), SMTP_CONNECTION_SECURITY_NONE)
67			->addValue(_('STARTTLS'), SMTP_CONNECTION_SECURITY_STARTTLS)
68			->addValue(_('SSL/TLS'), SMTP_CONNECTION_SECURITY_SSL_TLS)
69			->setModern(true)
70	)
71	->addRow(_('SSL verify peer'), (new CCheckBox('smtp_verify_peer'))->setChecked($data['smtp_verify_peer']))
72	->addRow(_('SSL verify host'), (new CCheckBox('smtp_verify_host'))->setChecked($data['smtp_verify_host']))
73	->addRow(_('Authentication'),
74		(new CRadioButtonList('smtp_authentication', (int) $data['smtp_authentication']))
75			->addValue(_('None'), SMTP_AUTHENTICATION_NONE)
76			->addValue(_('Username and password'), SMTP_AUTHENTICATION_NORMAL)
77			->setModern(true)
78	)
79	->addRow(_('Username'), (new CTextBox('smtp_username', $data['smtp_username']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH))
80	->addRow(_('Script name'), (new CTextBox('exec_path', $data['exec_path']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH));
81
82$exec_params_table = (new CTable())
83	->setId('exec_params_table')
84	->setHeader([_('Parameter'), _('Action')])
85	->setAttribute('style', 'width: 100%;');
86
87if ($data['exec_params_count'] != 0) {
88	foreach ($data['exec_params'] as $i => $exec_param) {
89		$exec_params_table->addRow([
90			(new CTextBox('exec_params['.$i.'][exec_param]', $exec_param['exec_param'], false, 255))
91				->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH),
92			(new CButton('exec_params['.$i.'][remove]', _('Remove')))
93				->addClass(ZBX_STYLE_BTN_LINK)
94				->addClass('element-table-remove')
95			],
96			'form_row'
97		);
98	}
99}
100
101$exec_params_table->addRow([(new CButton('exec_param_add', _('Add')))
102	->addClass(ZBX_STYLE_BTN_LINK)
103	->addClass('element-table-add')]);
104
105$mediaTypeFormList->addRow(_('Script parameters'),
106	(new CDiv($exec_params_table))
107		->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)
108		->setAttribute('style', 'min-width: '.ZBX_TEXTAREA_STANDARD_WIDTH.'px;'),
109	'row_exec_params'
110);
111
112$mediaTypeFormList->addRow(_('GSM modem'),
113	(new CTextBox('gsm_modem', $data['gsm_modem']))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
114);
115
116// create password field
117if ($data['passwd'] !== '' && !$data['change_passwd']) {
118	// Disabling 'passwd' field prevents stored passwords autofill by browser.
119	$passwdField = [
120		(new CButton('chPass_btn', _('Change password'))),
121		(new CPassBox('passwd', ''))
122			->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)
123			->addStyle('display: none;')
124			->setAttribute('disabled', 'disabled')
125	];
126}
127else {
128	$passwdField = (new CPassBox('passwd', $data['passwd']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH);
129}
130
131// append password field to form list
132$mediaTypeFormList
133	->addRow(_('Jabber identifier'),
134		(new CTextBox('jabber_username', $data['jabber_username']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)
135	)
136	->addRow(_('Username'),
137		(new CTextBox('eztext_username', $data['eztext_username']))->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)
138	)
139	->addRow(_('Password'), $passwdField)
140	->addRow(_('Message text limit'), new CComboBox('eztext_limit', $data['eztext_limit'], null, [
141		EZ_TEXTING_LIMIT_USA => _('USA (160 characters)'),
142		EZ_TEXTING_LIMIT_CANADA => _('Canada (136 characters)')
143	]))
144	->addRow(_('Enabled'),
145		(new CCheckBox('status', MEDIA_TYPE_STATUS_ACTIVE))->setChecked(MEDIA_TYPE_STATUS_ACTIVE == $data['status'])
146	);
147
148// append form list to tab
149$mediaTypeTab = (new CTabView())->addTab('mediaTypeTab', _('Media type'), $mediaTypeFormList);
150
151// append buttons to form
152$cancelButton = (new CRedirectButton(_('Cancel'), 'zabbix.php?action=mediatype.list'))->setId('cancel');
153
154if ($data['mediatypeid'] == 0) {
155	$addButton = (new CSubmitButton(_('Add'), 'action', 'mediatype.create'))->setId('add');
156
157	$mediaTypeTab->setFooter(makeFormFooter(
158		$addButton,
159		[$cancelButton]
160	));
161}
162else {
163	$updateButton = (new CSubmitButton(_('Update'), 'action', 'mediatype.update'))->setId('update');
164	$cloneButton = (new CSimpleButton(_('Clone')))->setId('clone');
165	$deleteButton = (new CRedirectButton(_('Delete'),
166		'zabbix.php?action=mediatype.delete&sid='.$data['sid'].'&mediatypeids[]='.$data['mediatypeid'],
167		_('Delete media type?')
168	))
169		->setId('delete');
170
171	$mediaTypeTab->setFooter(makeFormFooter(
172		$updateButton,
173		[
174			$cloneButton,
175			$deleteButton,
176			$cancelButton
177		]
178	));
179}
180
181// append tab to form
182$mediaTypeForm->addItem($mediaTypeTab);
183
184// append form to widget
185$widget->addItem($mediaTypeForm)->show();
186