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/**
23 * @var CView $this
24 */
25
26$this->includeJsFile('administration.iconmap.edit.js.php');
27
28$widget = (new CWidget())
29	->setTitle(_('Icon mapping'))
30	->setTitleSubmenu(getAdministrationGeneralSubmenu());
31
32$form_list = new CFormList();
33
34$name = (new CTextBox('iconmap[name]', $data['iconmap']['name']))
35	->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
36	->setAttribute('maxlength', 64)
37	->setAriaRequired()
38	->setAttribute('autofocus', 'autofocus');
39
40$form_list->addRow((new CLabel(_('Name'), 'iconmap[name]'))->setAsteriskMark(), $name);
41
42$form = (new CForm())
43	->setId('iconmap')
44	->setAction((new CUrl('zabbix.php'))
45		->setArgument('action', ($data['iconmapid'] != 0) ? 'iconmap.update' : 'iconmap.create')
46		->getUrl()
47	)
48	->setAttribute('aria-labeledby', ZBX_STYLE_PAGE_TITLE)
49	->addVar('form', 1);
50
51if ($data['iconmapid'] != 0) {
52	$form->addVar('iconmapid', $data['iconmapid']);
53}
54
55$table = (new CTable())
56	->setAttribute('style', 'width: 100%;')
57	->setId('iconMapTable')
58	->setHeader(['', '', _('Inventory field'), _('Expression'), _('Icon'), '', _('Action')]);
59
60$i = 0;
61foreach ($data['iconmap']['mappings'] as $mapping) {
62	$table->addRow(
63		(new CRow([
64			(new CCol(
65				(new CDiv())->addClass(ZBX_STYLE_DRAG_ICON)
66			))->addClass(ZBX_STYLE_TD_DRAG_ICON),
67			(new CSpan(($i + 1).':'))->addClass('rowNum'),
68			(new CSelect('iconmap[mappings]['.$i.'][inventory_link]'))
69				->setValue($mapping['inventory_link'])
70				->addOptions(CSelect::createOptionsFromArray($data['inventory_list'])),
71			(new CTextBox('iconmap[mappings]['.$i.'][expression]', $mapping['expression']))
72				->setWidth(ZBX_TEXTAREA_SMALL_WIDTH)
73				->setAriaRequired()
74				->setAttribute('maxlength', 64),
75			(new CSelect('iconmap[mappings]['.$i.'][iconid]'))
76				->setValue($mapping['iconid'])
77				->addOptions(CSelect::createOptionsFromArray($data['icon_list']))
78				->addClass('js-mapping-icon'),
79			(new CCol(
80				(new CImg('imgstore.php?iconid='.$mapping['iconid'].'&width='.ZBX_ICON_PREVIEW_WIDTH.
81					'&height='.ZBX_ICON_PREVIEW_HEIGHT, _('Preview'), null, null
82				))
83					->addClass('preview')
84					->addClass(ZBX_STYLE_CURSOR_POINTER)
85					->setAttribute('data-image-full', 'imgstore.php?iconid='.$mapping['iconid'])
86			))->setAttribute('style', 'vertical-align: middle;'),
87			(new CCol(
88				(new CButton('remove', _('Remove')))
89					->addClass(ZBX_STYLE_BTN_LINK)
90					->addClass('remove_mapping')
91					->removeId()
92			))->addClass(ZBX_STYLE_NOWRAP)
93		]))
94			->addClass('sortable')
95			->setId('iconmapidRow_'.$i)
96	);
97
98	$i++;
99}
100
101$table
102	->addRow((new CRow([
103		(new CCol(
104			(new CButton('addMapping', _('Add')))->addClass(ZBX_STYLE_BTN_LINK)
105		))->setColSpan(7)
106	]))->setId('iconMapListFooter'))
107	->addRow([
108		(new CCol(_('Default')))->setColSpan(4),
109		(new CSelect('iconmap[default_iconid]'))
110			->setValue($data['iconmap']['default_iconid'])
111			->addOptions(CSelect::createOptionsFromArray($data['icon_list']))
112			->addClass('js-mapping-icon'),
113		(new CCol(
114			(new CImg('imgstore.php?iconid='.$data['iconmap']['default_iconid'].
115				'&width='.ZBX_ICON_PREVIEW_WIDTH.'&height='.ZBX_ICON_PREVIEW_HEIGHT, _('Preview'), null, null
116			))
117				->addClass(ZBX_STYLE_CURSOR_POINTER)
118				->addClass('preview')
119				->setAttribute('data-image-full', 'imgstore.php?iconid='.$data['iconmap']['default_iconid'])
120		))->setAttribute('style', 'vertical-align: middle;')
121	]);
122
123$form_list->addRow(
124	(new CLabel(_('Mappings'), 'iconmap_list'))->setAsteriskMark(),
125	(new CDiv($table))
126		->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)
127		->setAttribute('style', 'min-width: '.ZBX_TEXTAREA_BIG_WIDTH.'px;')
128		->setId('iconmap_list')
129);
130
131$tab = new CTabView();
132$tab->addTab('iconmap_edit', _('Icon map'), $form_list);
133
134if ($data['iconmapid'] != 0) {
135	$tab->setFooter(makeFormFooter(
136		new CSubmit('update', _('Update')),
137		[
138			(new CSimpleButton(_('Clone')))->setId('clone'),
139			(new CRedirectButton(_('Delete'), (new CUrl('zabbix.php'))
140					->setArgument('action', 'iconmap.delete')
141					->setArgument('iconmapid', $data['iconmapid'])
142					->setArgumentSID(),
143				_('Delete icon map?')
144			))->setId('delete'),
145			(new CRedirectButton(_('Cancel'), (new CUrl('zabbix.php'))
146				->setArgument('action', 'iconmap.list')
147			))->setId('cancel')
148		]
149	));
150}
151else {
152	$tab->setFooter(makeFormFooter(
153		new CSubmit('add', _('Add')),
154		[
155			(new CRedirectButton(_('Cancel'), (new CUrl('zabbix.php'))
156				->setArgument('action', 'iconmap.list')
157			))->setId('cancel')
158		]
159	));
160}
161
162$form->addItem($tab);
163
164$widget->addItem($form)->show();
165