function get_item_filter_form(&$items) { $filter_group = $_REQUEST['filter_group']; $filter_host = $_REQUEST['filter_host']; $filter_application = $_REQUEST['filter_application']; $filter_description = $_REQUEST['filter_description']; $filter_type = $_REQUEST['filter_type']; $filter_key = $_REQUEST['filter_key']; $filter_snmp_community = $_REQUEST['filter_snmp_community']; $filter_snmpv3_securityname = $_REQUEST['filter_snmpv3_securityname']; $filter_snmp_oid = $_REQUEST['filter_snmp_oid']; $filter_snmp_port = $_REQUEST['filter_snmp_port']; $filter_value_type = $_REQUEST['filter_value_type']; $filter_data_type = $_REQUEST['filter_data_type']; $filter_delay = $_REQUEST['filter_delay']; $filter_history = $_REQUEST['filter_history']; $filter_trends = $_REQUEST['filter_trends']; $filter_status = $_REQUEST['filter_status']; $filter_templated_items = $_REQUEST['filter_templated_items']; $filter_with_triggers = $_REQUEST['filter_with_triggers']; // subfilter $subfilter_hosts = $_REQUEST['subfilter_hosts']; $subfilter_apps = $_REQUEST['subfilter_apps']; $subfilter_types = $_REQUEST['subfilter_types']; $subfilter_value_types = $_REQUEST['subfilter_value_types']; $subfilter_status = $_REQUEST['subfilter_status']; $subfilter_templated_items = $_REQUEST['subfilter_templated_items']; $subfilter_with_triggers = $_REQUEST['subfilter_with_triggers']; $subfilter_history = $_REQUEST['subfilter_history']; $subfilter_trends = $_REQUEST['subfilter_trends']; $subfilter_interval = $_REQUEST['subfilter_interval']; $form = new CForm(); $form->setAttribute('name', 'zbx_filter'); $form->setAttribute('id', 'zbx_filter'); $form->setMethod('get'); $form->addVar('filter_hostid', get_request('filter_hostid', get_request('hostid'))); $form->addVar('subfilter_hosts', $subfilter_hosts); $form->addVar('subfilter_apps', $subfilter_apps); $form->addVar('subfilter_types', $subfilter_types); $form->addVar('subfilter_value_types', $subfilter_value_types); $form->addVar('subfilter_status', $subfilter_status); $form->addVar('subfilter_templated_items', $subfilter_templated_items); $form->addVar('subfilter_with_triggers', $subfilter_with_triggers); $form->addVar('subfilter_history', $subfilter_history); $form->addVar('subfilter_trends', $subfilter_trends); $form->addVar('subfilter_interval', $subfilter_interval); // FORM FOR FILTER DISPLAY { $table = new CTable('', 'itemfilter'); $table->setCellPadding(0); $table->setCellSpacing(0); // 1st col $col_table1 = new CTable(); $col_table1->setClass('filter'); $col_table1->addRow(array(bold(S_HOST_GROUP . ': '), array(new CTextBox('filter_group', $filter_group, 20), new CButton('btn_group', S_SELECT, 'return PopUp("popup.php?dstfrm=' . $form->getName() . '&dstfld1=filter_group&srctbl=host_group&srcfld1=name",450,450);', 'G')))); $col_table1->addRow(array(bold(S_HOST . ': '), array(new CTextBox('filter_host', $filter_host, 20), new CButton('btn_host', S_SELECT, 'return PopUp("popup.php?dstfrm=' . $form->getName() . '&dstfld1=filter_host&srctbl=hosts_and_templates&srcfld1=host",450,450);', 'H')))); $col_table1->addRow(array(bold(S_APPLICATION . ': '), array(new CTextBox('filter_application', $filter_application, 20), new CButton('btn_app', S_SELECT, 'return PopUp("popup.php?dstfrm=' . $form->getName() . '&dstfld1=filter_application&srctbl=applications&srcfld1=name",400,300,"application");', 'A')))); $col_table1->addRow(array(array(bold(S_DESCRIPTION), SPACE . S_LIKE_SMALL . ': '), new CTextBox("filter_description", $filter_description, 30))); $col_table1->addRow(array(array(bold(S_KEY), SPACE . S_LIKE_SMALL . ': '), new CTextBox("filter_key", $filter_key, 30))); // 2nd col $col_table2 = new CTable(); $col_table2->setClass('filter'); $fTypeVisibility = array(); //first row $cmbType = new CComboBox("filter_type", $filter_type); //"javascript: create_var('zbx_filter', 'filter_set', '1', true); "); $cmbType->setAttribute('id', 'filter_type'); $cmbType->addItem(-1, S_ALL_SMALL); foreach (array('filter_delay_label', 'filter_delay') as $vItem) { zbx_subarray_push($fTypeVisibility, -1, $vItem); } $itemTypes = item_type2str(); // httptest items are only for internal zabbix logic unset($itemTypes[ITEM_TYPE_HTTPTEST]); $cmbType->addItems($itemTypes); foreach ($itemTypes as $typeNum => $typeLabel) { if ($typeNum != ITEM_TYPE_TRAPPER) { zbx_subarray_push($fTypeVisibility, $typeNum, 'filter_delay_label'); zbx_subarray_push($fTypeVisibility, $typeNum, 'filter_delay'); } switch ($typeNum) { case ITEM_TYPE_SNMPV1: case ITEM_TYPE_SNMPV2C: $snmp_types = array('filter_snmp_community_label', 'filter_snmp_community', 'filter_snmp_oid_label', 'filter_snmp_oid', 'filter_snmp_port_label', 'filter_snmp_port'); foreach ($snmp_types as $vItem) { zbx_subarray_push($fTypeVisibility, $typeNum, $vItem); } break; case ITEM_TYPE_SNMPV3: foreach (array('filter_snmpv3_securityname_label', 'filter_snmpv3_securityname', 'filter_snmp_oid_label', 'filter_snmp_oid', 'filter_snmp_port_label', 'filter_snmp_port') as $vItem) { zbx_subarray_push($fTypeVisibility, $typeNum, $vItem); } break; } } zbx_add_post_js("var filterTypeSwitcher = new CViewSwitcher('filter_type', 'change', " . zbx_jsvalue($fTypeVisibility, true) . ");"); $col21 = new CCol(bold(S_TYPE . ': ')); $col21->setAttribute('style', 'width: 170px'); $col_table2->addRow(array($col21, $cmbType)); //second row $label221 = new CSpan(bold(S_UPDATE_INTERVAL_IN_SEC . ': ')); $label221->setAttribute('id', 'filter_delay_label'); $field221 = new CNumericBox('filter_delay', $filter_delay, 5, null, true); $field221->setEnabled('no'); $col_table2->addRow(array(array($label221, SPACE), array($field221, SPACE))); //third row $label231 = new CSpan(array(bold(S_SNMP_COMMUNITY), SPACE . S_LIKE_SMALL . ': ')); $label231->setAttribute('id', 'filter_snmp_community_label'); $field231 = new CTextBox('filter_snmp_community', $filter_snmp_community, 40); $field231->setEnabled('no'); $label232 = new CSpan(array(bold(S_SNMPV3_SECURITY_NAME), SPACE . S_LIKE_SMALL . ': ')); $label232->setAttribute('id', 'filter_snmpv3_securityname_label'); $field232 = new CTextBox('filter_snmpv3_securityname', $filter_snmpv3_securityname, 40); $field232->setEnabled('no'); $col_table2->addRow(array(array($label231, $label232, SPACE), array($field231, $field232, SPACE))); //fourth row $label241 = new CSpan(array(bold(S_SNMP_OID), SPACE . S_LIKE_SMALL . ': ')); $label241->setAttribute('id', 'filter_snmp_oid_label'); $field241 = new CTextBox('filter_snmp_oid', $filter_snmp_oid, 40); $field241->setEnabled('no'); $col_table2->addRow(array(array($label241, SPACE), array($field241, SPACE))); //fifth row $label251 = new CSpan(array(bold(S_SNMP_PORT), SPACE . S_LIKE_SMALL . ': ')); $label251->setAttribute('id', 'filter_snmp_port_label'); $field251 = new CNumericBox('filter_snmp_port', $filter_snmp_port, 5, null, true); $field251->setEnabled('no'); $col_table2->addRow(array(array($label251, SPACE), array($field251, SPACE))); // 3rd col $col_table3 = new CTable(); $col_table3->setClass('filter'); $fVTypeVisibility = array(); $cmbValType = new CComboBox('filter_value_type', $filter_value_type); //, "javascript: create_var('zbx_filter', 'filter_set', '1', true);"); $cmbValType->addItem(-1, S_ALL_SMALL); $cmbValType->addItem(ITEM_VALUE_TYPE_UINT64, S_NUMERIC_UNSIGNED); $cmbValType->addItem(ITEM_VALUE_TYPE_FLOAT, S_NUMERIC_FLOAT); $cmbValType->addItem(ITEM_VALUE_TYPE_STR, S_CHARACTER); $cmbValType->addItem(ITEM_VALUE_TYPE_LOG, S_LOG); $cmbValType->addItem(ITEM_VALUE_TYPE_TEXT, S_TEXT); foreach (array('filter_data_type_label', 'filter_data_type') as $vItem) { zbx_subarray_push($fVTypeVisibility, ITEM_VALUE_TYPE_UINT64, $vItem); } $col_table3->addRow(array(bold(S_TYPE_OF_INFORMATION . ': '), $cmbValType)); zbx_add_post_js("var filterValueTypeSwitcher = new CViewSwitcher('filter_value_type', 'change', " . zbx_jsvalue($fVTypeVisibility, true) . ");"); //second row $label321 = new CSpan(bold(S_DATA_TYPE . ': ')); $label321->setAttribute('id', 'filter_data_type_label'); $field321 = new CComboBox('filter_data_type', $filter_data_type); //, 'submit()'); $field321->addItem(-1, S_ALL_SMALL); $field321->addItem(ITEM_DATA_TYPE_DECIMAL, item_data_type2str(ITEM_DATA_TYPE_DECIMAL)); $field321->addItem(ITEM_DATA_TYPE_OCTAL, item_data_type2str(ITEM_DATA_TYPE_OCTAL)); $field321->addItem(ITEM_DATA_TYPE_HEXADECIMAL, item_data_type2str(ITEM_DATA_TYPE_HEXADECIMAL)); $field321->setEnabled('no'); $col_table3->addRow(array(array($label321, SPACE), array($field321, SPACE))); $col_table3->addRow(array(bold(S_KEEP_HISTORY_IN_DAYS . ': '), new CNumericBox('filter_history', $filter_history, 8, null, true))); $col_table3->addRow(array(bold(S_KEEP_TRENDS_IN_DAYS . ': '), new CNumericBox('filter_trends', $filter_trends, 8, null, true))); // 4th col $col_table4 = new CTable(); $col_table4->setClass('filter'); $cmbStatus = new CComboBox('filter_status', $filter_status); $cmbStatus->addItem(-1, S_ALL_SMALL); foreach (array(ITEM_STATUS_ACTIVE, ITEM_STATUS_DISABLED, ITEM_STATUS_NOTSUPPORTED) as $st) { $cmbStatus->addItem($st, item_status2str($st)); } $cmbBelongs = new CComboBox('filter_templated_items', $filter_templated_items); $cmbBelongs->addItem(-1, S_ALL_SMALL); $cmbBelongs->addItem(1, S_TEMPLATED_ITEMS); $cmbBelongs->addItem(0, S_NOT_TEMPLATED_ITEMS); $cmbWithTriggers = new CComboBox('filter_with_triggers', $filter_with_triggers); $cmbWithTriggers->addItem(-1, S_ALL_SMALL); $cmbWithTriggers->addItem(1, S_WITH_TRIGGERS); $cmbWithTriggers->addItem(0, S_WITHOUT_TRIGGERS); $col_table4->addRow(array(bold(S_STATUS . ': '), $cmbStatus)); $col_table4->addRow(array(bold(S_TRIGGERS . ': '), $cmbWithTriggers)); $col_table4->addRow(array(bold(S_TEMPLATE . ': '), $cmbBelongs)); //adding all cols tables to main table $col1 = new CCol($col_table1, 'top'); $col1->setAttribute('style', 'width: 280px'); $col2 = new CCol($col_table2, 'top'); $col2->setAttribute('style', 'width: 410px'); $col3 = new CCol($col_table3, 'top'); $col3->setAttribute('style', 'width: 160px'); $col4 = new CCol($col_table4, 'top'); $table->addRow(array($col1, $col2, $col3, $col4)); $reset = new CSpan(S_RESET, 'biglink'); $reset->onClick("javascript: clearAllForm('zbx_filter');"); $filter = new CSpan(S_FILTER, 'biglink'); $filter->onClick("javascript: create_var('zbx_filter', 'filter_set', '1', true);"); $div_buttons = new CDiv(array($filter, SPACE, SPACE, SPACE, $reset)); $div_buttons->setAttribute('style', 'padding: 4px 0;'); $footer = new CCol($div_buttons, 'center'); $footer->setColSpan(4); $table->addRow($footer); $form->addItem($table); // } FORM FOR FILTER DISPLAY // SUBFILTERS { $h = new CDiv(S_SUBFILTER . SPACE . '[' . S_AFFECTS_ONLY_FILTERED_DATA_SMALL . ']'); $h->setClass('thin_header'); $form->addItem($h); $table_subfilter = new Ctable(); $table_subfilter->setClass('filter'); // array contains subfilters and number of items in each $item_params = array('hosts' => array(), 'applications' => array(), 'types' => array(), 'value_types' => array(), 'status' => array(), 'templated_items' => array(), 'with_triggers' => array(), 'history' => array(), 'trends' => array(), 'interval' => array()); // generate array with values for subfilters of selected items foreach ($items as $num => $item) { if (zbx_empty($filter_host)) { // hosts $host = reset($item['hosts']); if (!isset($item_params['hosts'][$host['hostid']])) { $item_params['hosts'][$host['hostid']] = array('name' => $host['host'], 'count' => 0); } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_hosts') { continue; } $show_item &= $value; } if ($show_item) { $host = reset($item['hosts']); $item_params['hosts'][$host['hostid']]['count']++; } } // applications foreach ($item['applications'] as $appid => $app) { if (!isset($item_params['applications'][$app['name']])) { $item_params['applications'][$app['name']] = array('name' => $app['name'], 'count' => 0); } } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_apps') { continue; } $show_item &= $value; } $sel_app = false; if ($show_item) { // if any of item applications are selected foreach ($item['applications'] as $app) { if (str_in_array($app['name'], $subfilter_apps)) { $sel_app = true; break; } } foreach ($item['applications'] as $app) { if (str_in_array($app['name'], $subfilter_apps) || !$sel_app) { $item_params['applications'][$app['name']]['count']++; } } } // types if ($filter_type == -1) { if (!isset($item_params['types'][$item['type']])) { $item_params['types'][$item['type']] = array('name' => item_type2str($item['type']), 'count' => 0); } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_types') { continue; } $show_item &= $value; } if ($show_item) { $item_params['types'][$item['type']]['count']++; } } // value types if ($filter_value_type == -1) { if (!isset($item_params['value_types'][$item['value_type']])) { $item_params['value_types'][$item['value_type']] = array('name' => item_value_type2str($item['value_type']), 'count' => 0); } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_value_types') { continue; } $show_item &= $value; } if ($show_item) { $item_params['value_types'][$item['value_type']]['count']++; } } // status if ($filter_status == -1) { if (!isset($item_params['status'][$item['status']])) { $item_params['status'][$item['status']] = array('name' => item_status2str($item['status']), 'count' => 0); } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_status') { continue; } $show_item &= $value; } if ($show_item) { $item_params['status'][$item['status']]['count']++; } } // template if ($filter_templated_items == -1) { if ($item['templateid'] == 0 && !isset($item_params['templated_items'][0])) { $item_params['templated_items'][0] = array('name' => S_NOT_TEMPLATED_ITEMS, 'count' => 0); } else { if ($item['templateid'] > 0 && !isset($item_params['templated_items'][1])) { $item_params['templated_items'][1] = array('name' => S_TEMPLATED_ITEMS, 'count' => 0); } } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_templated_items') { continue; } $show_item &= $value; } if ($show_item) { if ($item['templateid'] == 0) { $item_params['templated_items'][0]['count']++; } else { $item_params['templated_items'][1]['count']++; } } } // with triggers if ($filter_with_triggers == -1) { if (count($item['triggers']) == 0 && !isset($item_params['with_triggers'][0])) { $item_params['with_triggers'][0] = array('name' => S_WITHOUT_TRIGGERS, 'count' => 0); } else { if (count($item['triggers']) > 0 && !isset($item_params['with_triggers'][1])) { $item_params['with_triggers'][1] = array('name' => S_WITH_TRIGGERS, 'count' => 0); } } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_with_triggers') { continue; } $show_item &= $value; } if ($show_item) { if (count($item['triggers']) == 0) { $item_params['with_triggers'][0]['count']++; } else { $item_params['with_triggers'][1]['count']++; } } } // trends if (zbx_empty($filter_trends)) { if (!isset($item_params['trends'][$item['trends']])) { $item_params['trends'][$item['trends']] = array('name' => $item['trends'], 'count' => 0); } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_trends') { continue; } $show_item &= $value; } if ($show_item) { $item_params['trends'][$item['trends']]['count']++; } } // history if (zbx_empty($filter_history)) { if (!isset($item_params['history'][$item['history']])) { $item_params['history'][$item['history']] = array('name' => $item['history'], 'count' => 0); } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_history') { continue; } $show_item &= $value; } if ($show_item) { $item_params['history'][$item['history']]['count']++; } } // interval if (zbx_empty($filter_delay) && $filter_type != ITEM_TYPE_TRAPPER) { if (!isset($item_params['interval'][$item['delay']])) { $item_params['interval'][$item['delay']] = array('name' => $item['delay'], 'count' => 0); } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_interval') { continue; } $show_item &= $value; } if ($show_item) { $item_params['interval'][$item['delay']]['count']++; } } } // output if (zbx_empty($filter_host) && count($item_params['hosts']) > 1) { $hosts_output = prepare_subfilter_output($item_params['hosts'], $subfilter_hosts, 'subfilter_hosts'); $table_subfilter->addRow(array(S_HOSTS, $hosts_output)); } if (!empty($item_params['applications']) && count($item_params['applications']) > 1) { $application_output = prepare_subfilter_output($item_params['applications'], $subfilter_apps, 'subfilter_apps'); $table_subfilter->addRow(array(S_APPLICATIONS, $application_output)); } if ($filter_type == -1 && count($item_params['types']) > 1) { $type_output = prepare_subfilter_output($item_params['types'], $subfilter_types, 'subfilter_types'); $table_subfilter->addRow(array(S_TYPES, $type_output)); } if ($filter_value_type == -1 && count($item_params['value_types']) > 1) { $value_types_output = prepare_subfilter_output($item_params['value_types'], $subfilter_value_types, 'subfilter_value_types'); $table_subfilter->addRow(array(S_TYPE_OF_INFORMATION, $value_types_output)); } if ($filter_status == -1 && count($item_params['status']) > 1) { $status_output = prepare_subfilter_output($item_params['status'], $subfilter_status, 'subfilter_status'); $table_subfilter->addRow(array(S_STATUS, $status_output)); } if ($filter_templated_items == -1 && count($item_params['templated_items']) > 1) { $templated_items_output = prepare_subfilter_output($item_params['templated_items'], $subfilter_templated_items, 'subfilter_templated_items'); $table_subfilter->addRow(array(S_TEMPLATE, $templated_items_output)); } if ($filter_with_triggers == -1 && count($item_params['with_triggers']) > 1) { $with_triggers_output = prepare_subfilter_output($item_params['with_triggers'], $subfilter_with_triggers, 'subfilter_with_triggers'); $table_subfilter->addRow(array(S_WITH_TRIGGERS, $with_triggers_output)); } if (zbx_empty($filter_history) && count($item_params['history']) > 1) { $history_output = prepare_subfilter_output($item_params['history'], $subfilter_history, 'subfilter_history'); $table_subfilter->addRow(array(S_HISTORY, $history_output)); } if (zbx_empty($filter_trends) && count($item_params['trends']) > 1) { $trends_output = prepare_subfilter_output($item_params['trends'], $subfilter_trends, 'subfilter_trends'); $table_subfilter->addRow(array(S_TRENDS, $trends_output)); } if (zbx_empty($filter_delay) && $filter_type != ITEM_TYPE_TRAPPER && count($item_params['interval']) > 1) { $interval_output = prepare_subfilter_output($item_params['interval'], $subfilter_interval, 'subfilter_interval'); $table_subfilter->addRow(array(S_INTERVAL, $interval_output)); } //} SUBFILTERS $form->addItem($table_subfilter); return $form; }