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
22require_once dirname(__FILE__).'/js/common.filter.trigger.js.php';
23
24$filter = $this->data['filter'];
25$config = $this->data['config'];
26
27$filterForm = (new CFilter((new CUrl('overview.php'))->setArgument('type', 0)))
28	->setProfile($data['profileIdx'])
29	->setActiveTab($data['active_tab'])
30	->addVar('groupid', $filter['groupId'])
31	->addVar('hostid', $filter['hostId']);
32
33$severityNames = [];
34for ($severity = TRIGGER_SEVERITY_NOT_CLASSIFIED; $severity < TRIGGER_SEVERITY_COUNT; $severity++) {
35	$severityNames[] = getSeverityName($severity, $config);
36}
37
38$column1 = (new CFormList())
39	->addRow(_('Show'),
40		(new CRadioButtonList('show_triggers', (int) $filter['showTriggers']))
41			->addValue(_('Recent problems'), TRIGGERS_OPTION_RECENT_PROBLEM)
42			->addValue(_('Problems'), TRIGGERS_OPTION_IN_PROBLEM)
43			->addValue(_('Any'), TRIGGERS_OPTION_ALL)
44			->setModern(true)
45	)
46	->addRow(_('Minimum severity'),
47		new CComboBox('show_severity', $filter['showSeverity'], null, $severityNames)
48	);
49
50$statusChangeDays = (new CNumericBox('status_change_days', $filter['statusChangeDays'], 3, false, false, false))
51	->setWidth(ZBX_TEXTAREA_NUMERIC_STANDARD_WIDTH);
52if (!$filter['statusChange']) {
53	$statusChangeDays->setAttribute('disabled', 'disabled');
54}
55
56$column1
57	->addRow(_('Age less than'), [
58		(new CCheckBox('status_change'))
59			->setChecked($filter['statusChange'] == 1)
60			->onClick('javascript: this.checked ? $("status_change_days").enable() : $("status_change_days").disable()'),
61		(new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN),
62		$statusChangeDays,
63		(new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN),
64		_('days')
65	])
66	->addRow(_('Name'),
67		(new CTextBox('txt_select', $filter['txtSelect']))->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH)
68	)
69	->addRow(_('Application'), [
70		(new CTextBox('application', $filter['application']))->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH),
71		(new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN),
72		(new CButton('application_name', _('Select')))
73			->addClass(ZBX_STYLE_BTN_GREY)
74			->onClick('return PopUp("popup.generic",'.
75				CJs::encodeJson([
76					'srctbl' => 'applications',
77					'srcfld1' => 'name',
78					'dstfrm' => 'zbx_filter',
79					'dstfld1' => 'application',
80					'real_hosts' => '1',
81					'with_applications' => '1'
82				]).', null, this);'
83			)
84	]);
85
86// inventory filter
87$inventoryFilters = $filter['inventory'];
88if (!$inventoryFilters) {
89	$inventoryFilters = [
90		['field' => '', 'value' => '']
91	];
92}
93$inventoryFields = [];
94foreach (getHostInventories() as $inventory) {
95	$inventoryFields[$inventory['db_field']] = $inventory['title'];
96}
97
98$inventoryFilterTable = new CTable();
99$inventoryFilterTable->setId('inventory-filter');
100$i = 0;
101foreach ($inventoryFilters as $field) {
102	$inventoryFilterTable->addRow([
103		new CComboBox('inventory['.$i.'][field]', $field['field'], null, $inventoryFields),
104		(new CTextBox('inventory['.$i.'][value]', $field['value']))->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH),
105		(new CCol(
106			(new CButton('inventory['.$i.'][remove]', _('Remove')))
107				->addClass(ZBX_STYLE_BTN_LINK)
108				->addClass('element-table-remove')
109		))->addClass(ZBX_STYLE_NOWRAP)
110	], 'form_row');
111
112	$i++;
113}
114$inventoryFilterTable->addRow(
115	(new CCol(
116		(new CButton('inventory_add', _('Add')))
117			->addClass(ZBX_STYLE_BTN_LINK)
118			->addClass('element-table-add')
119	))->setColSpan(2)
120);
121
122$column2 = (new CFormList())
123	->addRow(_('Host inventory'), $inventoryFilterTable)
124	->addRow(_('Show unacknowledged only'),
125		(new CCheckBox('ack_status'))
126			->setChecked($filter['ackStatus'] == 1)
127			->setUncheckedValue(0)
128	)
129	->addRow(_('Show suppressed problems'),
130		(new CCheckBox('show_suppressed'))->setChecked($filter['show_suppressed'] == ZBX_PROBLEM_SUPPRESSED_TRUE)
131	);
132
133$filterForm->addFilterTab(_('Filter'), [$column1, $column2]);
134
135return $filterForm;
136