/** * Update map. * * @param array $maps multidimensional array with Hosts data * @param string $maps['sysmapid'] * @param string $maps['name'] * @param array $maps['width'] * @param int $maps['height'] * @param string $maps['backgroundid'] * @param array $maps['label_type'] * @param int $maps['label_location'] * @param int $maps['grid_size'] size of one grid cell. 100 refers to 100x100 and so on. * @param int $maps['grid_show'] does grid need to be shown. Constants: SYSMAP_GRID_SHOW_ON / SYSMAP_GRID_SHOW_OFF * @param int $maps['grid_align'] do elements need to be aligned to the grid. Constants: SYSMAP_GRID_ALIGN_ON / SYSMAP_GRID_ALIGN_OFF * * @return array */ public function update(array $maps) { $maps = zbx_toArray($maps); $sysmapIds = zbx_objectValues($maps, 'sysmapid'); $dbMaps = $this->checkInput($maps, __FUNCTION__); $updateMaps = array(); $urlIdsToDelete = $urlsToUpdate = $urlsToAdd = array(); $selementsToDelete = $selementsToUpdate = $selementsToAdd = array(); $linksToDelete = $linksToUpdate = $linksToAdd = array(); foreach ($maps as $map) { $updateMaps[] = array('values' => $map, 'where' => array('sysmapid' => $map['sysmapid'])); $dbMap = $dbMaps[$map['sysmapid']]; // urls if (isset($map['urls'])) { $urlDiff = zbx_array_diff($map['urls'], $dbMap['urls'], 'name'); foreach ($urlDiff['both'] as $updateUrl) { $urlsToUpdate[] = array('values' => $updateUrl, 'where' => array('name' => $updateUrl['name'], 'sysmapid' => $map['sysmapid'])); } foreach ($urlDiff['first'] as $newUrl) { $newUrl['sysmapid'] = $map['sysmapid']; $urlsToAdd[] = $newUrl; } $urlIdsToDelete = array_merge($urlIdsToDelete, zbx_objectValues($urlDiff['second'], 'sysmapurlid')); } // elements if (isset($map['selements'])) { $selementDiff = zbx_array_diff($map['selements'], $dbMap['selements'], 'selementid'); // we need sysmapid for add operations foreach ($selementDiff['first'] as $newSelement) { $newSelement['sysmapid'] = $map['sysmapid']; $selementsToAdd[] = $newSelement; } $selementsToUpdate = array_merge($selementsToUpdate, $selementDiff['both']); $selementsToDelete = array_merge($selementsToDelete, $selementDiff['second']); } // links if (isset($map['links'])) { $linkDiff = zbx_array_diff($map['links'], $dbMap['links'], 'linkid'); // we need sysmapId for add operations foreach ($linkDiff['first'] as $newLink) { $newLink['sysmapid'] = $map['sysmapid']; $linksToAdd[] = $newLink; } $linksToUpdate = array_merge($linksToUpdate, $linkDiff['both']); $linksToDelete = array_merge($linksToDelete, $linkDiff['second']); } } DB::update('sysmaps', $updateMaps); // urls DB::insert('sysmap_url', $urlsToAdd); DB::update('sysmap_url', $urlsToUpdate); if ($urlIdsToDelete) { DB::delete('sysmap_url', array('sysmapurlid' => $urlIdsToDelete)); } // selements $newSelementIds = array('selementids' => array()); if ($selementsToAdd) { $newSelementIds = $this->createSelements($selementsToAdd); } if ($selementsToUpdate) { $this->updateSelements($selementsToUpdate); } if ($selementsToDelete) { $this->deleteSelements($selementsToDelete); } // links if ($linksToAdd || $linksToUpdate) { $selementsNames = array(); foreach ($newSelementIds['selementids'] as $key => $selementId) { $selementsNames[$selementsToAdd[$key]['selementid']] = $selementId; } foreach ($selementsToUpdate as $selement) { $selementsNames[$selement['selementid']] = $selement['selementid']; } foreach ($linksToAdd as $key => $link) { if (isset($selementsNames[$link['selementid1']])) { $linksToAdd[$key]['selementid1'] = $selementsNames[$link['selementid1']]; } if (isset($selementsNames[$link['selementid2']])) { $linksToAdd[$key]['selementid2'] = $selementsNames[$link['selementid2']]; } } foreach ($linksToUpdate as $key => $link) { if (isset($selementsNames[$link['selementid1']])) { $linksToUpdate[$key]['selementid1'] = $selementsNames[$link['selementid1']]; } if (isset($selementsNames[$link['selementid2']])) { $linksToUpdate[$key]['selementid2'] = $selementsNames[$link['selementid2']]; } } unset($selementsNames); } $newLinkIds = $updateLinkIds = array('linkids' => array()); if ($linksToAdd) { $newLinkIds = $this->createLinks($linksToAdd); } if ($linksToUpdate) { $updateLinkIds = $this->updateLinks($linksToUpdate); } if ($linksToDelete) { $this->deleteLinks($linksToDelete); } // link triggers $linkTriggersToDelete = $linkTriggersToUpdate = $linkTriggersToAdd = array(); foreach ($newLinkIds['linkids'] as $key => $linkId) { if (!isset($linksToAdd[$key]['linktriggers'])) { continue; } foreach ($linksToAdd[$key]['linktriggers'] as $linkTrigger) { $linkTrigger['linkid'] = $linkId; $linkTriggersToAdd[] = $linkTrigger; } } $dbLinks = array(); $linkTriggerResource = DBselect('SELECT slt.* FROM sysmaps_link_triggers slt WHERE ' . dbConditionInt('slt.linkid', $updateLinkIds['linkids'])); while ($dbLinkTrigger = DBfetch($linkTriggerResource)) { zbx_subarray_push($dbLinks, $dbLinkTrigger['linkid'], $dbLinkTrigger); } foreach ($updateLinkIds['linkids'] as $key => $linkId) { if (!isset($linksToUpdate[$key]['linktriggers'])) { continue; } $dbLinkTriggers = isset($dbLinks[$linkId]) ? $dbLinks[$linkId] : array(); $dbLinkTriggersDiff = zbx_array_diff($linksToUpdate[$key]['linktriggers'], $dbLinkTriggers, 'linktriggerid'); foreach ($dbLinkTriggersDiff['first'] as $newLinkTrigger) { $newLinkTrigger['linkid'] = $linkId; $linkTriggersToAdd[] = $newLinkTrigger; } $linkTriggersToUpdate = array_merge($linkTriggersToUpdate, $dbLinkTriggersDiff['both']); $linkTriggersToDelete = array_merge($linkTriggersToDelete, $dbLinkTriggersDiff['second']); } if ($linkTriggersToDelete) { $this->deleteLinkTriggers($linkTriggersToDelete); } if ($linkTriggersToAdd) { $this->createLinkTriggers($linkTriggersToAdd); } if ($linkTriggersToUpdate) { $this->updateLinkTriggers($linkTriggersToUpdate); } return array('sysmapids' => $sysmapIds); }
zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_privprotocol'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'snmpv3_privpassphrase'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_privpassphrase'); $this->data['authTypeVisibility'] = array(); zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'publickey'); zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'row_publickey'); zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'privatekey'); zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'row_privatekey'); $this->data['dataTypeVisibility'] = array(); if (!$this->data['is_discovery_rule']) { zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_DECIMAL, 'units'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_DECIMAL, 'row_units'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_OCTAL, 'units'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_OCTAL, 'row_units'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_HEXADECIMAL, 'units'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_HEXADECIMAL, 'row_units'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_DECIMAL, 'multiplier'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_DECIMAL, 'row_multiplier'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_OCTAL, 'multiplier'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_OCTAL, 'row_multiplier'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_HEXADECIMAL, 'multiplier'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_HEXADECIMAL, 'row_multiplier'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_DECIMAL, 'delta'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_DECIMAL, 'row_delta'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_OCTAL, 'delta'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_OCTAL, 'row_delta'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_HEXADECIMAL, 'delta'); zbx_subarray_push($this->data['dataTypeVisibility'], ITEM_DATA_TYPE_HEXADECIMAL, 'row_delta'); } require_once dirname(__FILE__) . '/js/configuration.item.edit.js.php'; return $itemWidget;
function getItemFilterForm(&$items) { $filter_groupId = $_REQUEST['filter_groupid']; $filter_hostId = $_REQUEST['filter_hostid']; $filter_application = $_REQUEST['filter_application']; $filter_name = $_REQUEST['filter_name']; $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_port = $_REQUEST['filter_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_state = $_REQUEST['filter_state']; $filter_templated_items = $_REQUEST['filter_templated_items']; $filter_with_triggers = $_REQUEST['filter_with_triggers']; $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_state = $_REQUEST['subfilter_state']; $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('get'); $form->setAttribute('name', 'zbx_filter'); $form->setAttribute('id', 'zbx_filter'); $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_state', $subfilter_state); $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); // type select $fTypeVisibility = array(); $cmbType = new CComboBox('filter_type', $filter_type); $cmbType->setAttribute('id', 'filter_type'); $cmbType->addItem(-1, _('all')); foreach (array('filter_delay_label', 'filter_delay') as $vItem) { zbx_subarray_push($fTypeVisibility, -1, $vItem); } $itemTypes = item_type2str(); unset($itemTypes[ITEM_TYPE_HTTPTEST]); // httptest items are only for internal zabbix logic $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_port_label', 'filter_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_port_label', 'filter_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) . ');'); // type of information select $fVTypeVisibility = array(); $cmbValType = new CComboBox('filter_value_type', $filter_value_type); $cmbValType->addItem(-1, _('all')); $cmbValType->addItem(ITEM_VALUE_TYPE_UINT64, _('Numeric (unsigned)')); $cmbValType->addItem(ITEM_VALUE_TYPE_FLOAT, _('Numeric (float)')); $cmbValType->addItem(ITEM_VALUE_TYPE_STR, _('Character')); $cmbValType->addItem(ITEM_VALUE_TYPE_LOG, _('Log')); $cmbValType->addItem(ITEM_VALUE_TYPE_TEXT, _('Text')); foreach (array('filter_data_type_label', 'filter_data_type') as $vItem) { zbx_subarray_push($fVTypeVisibility, ITEM_VALUE_TYPE_UINT64, $vItem); } zbx_add_post_js("var filterValueTypeSwitcher = new CViewSwitcher('filter_value_type', 'change', " . zbx_jsvalue($fVTypeVisibility, true) . ');'); // status select $cmbStatus = new CComboBox('filter_status', $filter_status); $cmbStatus->addItem(-1, _('all')); foreach (array(ITEM_STATUS_ACTIVE, ITEM_STATUS_DISABLED) as $status) { $cmbStatus->addItem($status, item_status2str($status)); } // state select $cmbState = new CComboBox('filter_state', $filter_state); $cmbState->addItem(-1, _('all')); foreach (array(ITEM_STATE_NORMAL, ITEM_STATE_NOTSUPPORTED) as $state) { $cmbState->addItem($state, itemState($state)); } // update interval $updateIntervalLabel = new CSpan(array(bold(_('Update interval')), SPACE . _('(in sec)') . NAME_DELIMITER)); $updateIntervalLabel->setAttribute('id', 'filter_delay_label'); $updateIntervalInput = new CNumericBox('filter_delay', $filter_delay, 5, false, true); $updateIntervalInput->setEnabled('no'); // data type $dataTypeLabel = new CSpan(bold(_('Data type') . NAME_DELIMITER)); $dataTypeLabel->setAttribute('id', 'filter_data_type_label'); $dataTypeInput = new CComboBox('filter_data_type', $filter_data_type); $dataTypeInput->addItem(-1, _('all')); $dataTypeInput->addItems(item_data_type2str()); $dataTypeInput->setEnabled('no'); // filter table $table = new CTable('', 'filter'); $table->setCellPadding(0); $table->setCellSpacing(0); // SNMP community $snmpCommunityLabel = new CSpan(array(bold(_('SNMP community')), SPACE . _('like') . NAME_DELIMITER)); $snmpCommunityLabel->setAttribute('id', 'filter_snmp_community_label'); $snmpCommunityField = new CTextBox('filter_snmp_community', $filter_snmp_community, ZBX_TEXTBOX_FILTER_SIZE); $snmpCommunityField->setEnabled('no'); // SNMPv3 security name $snmpSecurityLabel = new CSpan(array(bold(_('Security name')), SPACE . _('like') . NAME_DELIMITER)); $snmpSecurityLabel->setAttribute('id', 'filter_snmpv3_securityname_label'); $snmpSecurityField = new CTextBox('filter_snmpv3_securityname', $filter_snmpv3_securityname, ZBX_TEXTBOX_FILTER_SIZE); $snmpSecurityField->setEnabled('no'); // SNMP OID $snmpOidLabel = new CSpan(array(bold(_('SNMP OID')), SPACE . _('like') . NAME_DELIMITER)); $snmpOidLabel->setAttribute('id', 'filter_snmp_oid_label'); $snmpOidField = new CTextBox('filter_snmp_oid', $filter_snmp_oid, ZBX_TEXTBOX_FILTER_SIZE); $snmpOidField->setEnabled('no'); // port $portLabel = new CSpan(array(bold(_('Port')), SPACE . _('like') . NAME_DELIMITER)); $portLabel->setAttribute('id', 'filter_port_label'); $portField = new CNumericBox('filter_port', $filter_port, 5, false, true); $portField->setEnabled('no'); // row 1 $groupFilter = null; if (!empty($filter_groupId)) { $getHostInfo = API::HostGroup()->get(array('groupids' => $filter_groupId, 'output' => array('name'))); $getHostInfo = reset($getHostInfo); if (!empty($getHostInfo)) { $groupFilter[] = array('id' => $getHostInfo['groupid'], 'name' => $getHostInfo['name']); } } $table->addRow(array(new CCol(bold(_('Host group') . NAME_DELIMITER), 'label col1'), new CCol(array(new CMultiSelect(array('name' => 'filter_groupid', 'selectedLimit' => 1, 'objectName' => 'hostGroup', 'objectOptions' => array('editable' => true), 'data' => $groupFilter, 'popup' => array('parameters' => 'srctbl=host_groups&dstfrm=' . $form->getName() . '&dstfld1=filter_groupid' . '&srcfld1=groupid&writeonly=1', 'width' => 450, 'height' => 450, 'buttonClass' => 'input filter-multiselect-select-button')))), 'col1'), new CCol(bold(_('Type') . NAME_DELIMITER), 'label col2'), new CCol($cmbType, 'col2'), new CCol(bold(_('Type of information') . NAME_DELIMITER), 'label col3'), new CCol($cmbValType, 'col3'), new CCol(bold(_('State') . NAME_DELIMITER), 'label'), new CCol($cmbState, 'col4')), 'item-list-row'); // row 2 $hostFilterData = null; if (!empty($filter_hostId)) { $getHostInfo = API::Host()->get(array('hostids' => $filter_hostId, 'templated_hosts' => true, 'output' => array('name'))); $getHostInfo = reset($getHostInfo); if (!empty($getHostInfo)) { $hostFilterData[] = array('id' => $getHostInfo['hostid'], 'name' => $getHostInfo['name']); } } $table->addRow(array(new CCol(bold(_('Host') . NAME_DELIMITER), 'label'), new CCol(array(new CMultiSelect(array('name' => 'filter_hostid', 'selectedLimit' => 1, 'objectName' => 'hosts', 'objectOptions' => array('editable' => true, 'templated_hosts' => true), 'data' => $hostFilterData, 'popup' => array('parameters' => 'srctbl=host_templates&dstfrm=' . $form->getName() . '&dstfld1=filter_hostid' . '&srcfld1=hostid&writeonly=1', 'width' => 450, 'height' => 450, 'buttonClass' => 'input filter-multiselect-select-button')))), 'col1'), new CCol($updateIntervalLabel, 'label'), new CCol($updateIntervalInput), new CCol($dataTypeLabel, 'label'), new CCol($dataTypeInput), new CCol(bold(_('Status') . NAME_DELIMITER), 'label col4'), new CCol($cmbStatus, 'col4')), 'item-list-row'); // row 3 $table->addRow(array(new CCol(bold(_('Application') . NAME_DELIMITER), 'label'), new CCol(array(new CTextBox('filter_application', $filter_application, ZBX_TEXTBOX_FILTER_SIZE), new CButton('btn_app', _('Select'), 'return PopUp("popup.php?srctbl=applications&srcfld1=name' . '&dstfrm=' . $form->getName() . '&dstfld1=filter_application' . '&with_applications=1' . '" + (jQuery("input[name=\'filter_hostid\']").length > 0 ? "&hostid="+jQuery("input[name=\'filter_hostid\']").val() : "")' . ', 550, 450, "application");', 'filter-select-button')), 'col1'), new CCol(array($snmpCommunityLabel, $snmpSecurityLabel), 'label'), new CCol(array($snmpCommunityField, $snmpSecurityField)), new CCol(array(bold(_('History')), SPACE . _('(in days)') . NAME_DELIMITER), 'label'), new CCol(new CNumericBox('filter_history', $filter_history, 8, false, true)), new CCol(bold(_('Triggers') . NAME_DELIMITER), 'label'), new CCol(new CComboBox('filter_with_triggers', $filter_with_triggers, null, array(-1 => _('all'), 1 => _('With triggers'), 0 => _('Without triggers'))))), 'item-list-row'); // row 4 $table->addRow(array(new CCol(array(bold(_('Name')), SPACE . _('like') . NAME_DELIMITER), 'label'), new CCol(new CTextBox('filter_name', $filter_name, ZBX_TEXTBOX_FILTER_SIZE), 'col1'), new CCol($snmpOidLabel, 'label'), new CCol($snmpOidField), new CCol(array(bold(_('Trends')), SPACE . _('(in days)') . NAME_DELIMITER), 'label'), new CCol(new CNumericBox('filter_trends', $filter_trends, 8, false, true)), new CCol(bold(_('Template') . NAME_DELIMITER), 'label'), new CCol(new CComboBox('filter_templated_items', $filter_templated_items, null, array(-1 => _('all'), 1 => _('Templated items'), 0 => _('Not Templated items'))))), 'item-list-row'); // row 5 $table->addRow(array(new CCol(array(bold(_('Key')), SPACE . _('like') . NAME_DELIMITER), 'label'), new CCol(new CTextBox('filter_key', $filter_key, ZBX_TEXTBOX_FILTER_SIZE), 'col1'), new CCol($portLabel, 'label'), new CCol($portField), new CCol(null, 'label'), new CCol(), new CCol(null, 'label'), new CCol()), 'item-list-row'); $filter = new CSubmit('filter_set', _('Filter'), 'chkbxRange.clearSelectedOnFilterChange();'); $filter->useJQueryStyle('main'); $reset = new CSubmit('filter_rst', _('Reset'), 'chkbxRange.clearSelectedOnFilterChange();'); $reset->useJQueryStyle(); $div_buttons = new CDiv(array($filter, SPACE, $reset)); $div_buttons->setAttribute('style', 'padding: 4px 0px;'); $footer = new CCol($div_buttons, 'controls', 8); $table->addRow($footer); $form->addItem($table); // subfilters $table_subfilter = new CTable(null, 'filter sub-filter'); // array contains subfilters and number of items in each $item_params = array('hosts' => array(), 'applications' => array(), 'types' => array(), 'value_types' => array(), 'status' => array(), 'state' => 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 $item) { // hosts if (zbx_empty($filter_hostId)) { $host = reset($item['hosts']); if (!isset($item_params['hosts'][$host['hostid']])) { $item_params['hosts'][$host['hostid']] = array('name' => $host['name'], '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 if (!empty($item['applications'])) { foreach ($item['applications'] as $application) { if (!isset($item_params['applications'][$application['name']])) { $item_params['applications'][$application['name']] = array('name' => $application['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' => itemValueTypeString($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']++; } } // state if ($filter_state == -1) { if (!isset($item_params['state'][$item['state']])) { $item_params['state'][$item['state']] = array('name' => itemState($item['state']), 'count' => 0); } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_state') { continue; } $show_item &= $value; } if ($show_item) { $item_params['state'][$item['state']]['count']++; } } // template if ($filter_templated_items == -1) { if ($item['templateid'] == 0 && !isset($item_params['templated_items'][0])) { $item_params['templated_items'][0] = array('name' => _('Not Templated items'), 'count' => 0); } elseif ($item['templateid'] > 0 && !isset($item_params['templated_items'][1])) { $item_params['templated_items'][1] = array('name' => _('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' => _('Without triggers'), 'count' => 0); } elseif (count($item['triggers']) > 0 && !isset($item_params['with_triggers'][1])) { $item_params['with_triggers'][1] = array('name' => _('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_hostId) && count($item_params['hosts']) > 1) { $hosts_output = prepareSubfilterOutput($item_params['hosts'], $subfilter_hosts, 'subfilter_hosts'); $table_subfilter->addRow(array(_('Hosts'), $hosts_output)); } if (!empty($item_params['applications']) && count($item_params['applications']) > 1) { $application_output = prepareSubfilterOutput($item_params['applications'], $subfilter_apps, 'subfilter_apps'); $table_subfilter->addRow(array(_('Applications'), $application_output)); } if ($filter_type == -1 && count($item_params['types']) > 1) { $type_output = prepareSubfilterOutput($item_params['types'], $subfilter_types, 'subfilter_types'); $table_subfilter->addRow(array(_('Types'), $type_output)); } if ($filter_value_type == -1 && count($item_params['value_types']) > 1) { $value_types_output = prepareSubfilterOutput($item_params['value_types'], $subfilter_value_types, 'subfilter_value_types'); $table_subfilter->addRow(array(_('Type of information'), $value_types_output)); } if ($filter_status == -1 && count($item_params['status']) > 1) { $status_output = prepareSubfilterOutput($item_params['status'], $subfilter_status, 'subfilter_status'); $table_subfilter->addRow(array(_('Status'), $status_output)); } if ($filter_state == -1 && count($item_params['state']) > 1) { $state_output = prepareSubfilterOutput($item_params['state'], $subfilter_state, 'subfilter_state'); $table_subfilter->addRow(array(_('State'), $state_output)); } if ($filter_templated_items == -1 && count($item_params['templated_items']) > 1) { $templated_items_output = prepareSubfilterOutput($item_params['templated_items'], $subfilter_templated_items, 'subfilter_templated_items'); $table_subfilter->addRow(array(_('Template'), $templated_items_output)); } if ($filter_with_triggers == -1 && count($item_params['with_triggers']) > 1) { $with_triggers_output = prepareSubfilterOutput($item_params['with_triggers'], $subfilter_with_triggers, 'subfilter_with_triggers'); $table_subfilter->addRow(array(_('With triggers'), $with_triggers_output)); } if (zbx_empty($filter_history) && count($item_params['history']) > 1) { $history_output = prepareSubfilterOutput($item_params['history'], $subfilter_history, 'subfilter_history'); $table_subfilter->addRow(array(_('History'), $history_output)); } if (zbx_empty($filter_trends) && count($item_params['trends']) > 1) { $trends_output = prepareSubfilterOutput($item_params['trends'], $subfilter_trends, 'subfilter_trends'); $table_subfilter->addRow(array(_('Trends'), $trends_output)); } if (zbx_empty($filter_delay) && $filter_type != ITEM_TYPE_TRAPPER && count($item_params['interval']) > 1) { $interval_output = prepareSubfilterOutput($item_params['interval'], $subfilter_interval, 'subfilter_interval'); $table_subfilter->addRow(array(_('Interval'), $interval_output)); } $form->addItem(new CDiv(_('Subfilter [affects only filtered data!]'), 'thin_header')); $form->addItem($table_subfilter); return $form; }
$soundList->addItem($file, $filename); } $resolved = array(new CCheckBox('messages[triggers.recovery]', $this->data['messages']['triggers.recovery'], null, 1), _('Recovery'), SPACE, $soundList, new CButton('start', _('Play'), "javascript: testUserSound('messages_sounds.recovery');", 'formlist'), new CButton('stop', _('Stop'), 'javascript: AudioControl.stop();', 'formlist')); $triggersTable = new CTable('', 'invisible'); $triggersTable->addRow($resolved); $msgVisibility = array('1' => array('messages[timeout]', 'messages[sounds.repeat]', 'messages[sounds.recovery]', 'messages[triggers.recovery]', 'timeout_row', 'repeat_row', 'triggers_row')); // trigger sounds $severities = array(TRIGGER_SEVERITY_NOT_CLASSIFIED, TRIGGER_SEVERITY_INFORMATION, TRIGGER_SEVERITY_WARNING, TRIGGER_SEVERITY_AVERAGE, TRIGGER_SEVERITY_HIGH, TRIGGER_SEVERITY_DISASTER); foreach ($severities as $severity) { $soundList = new CComboBox('messages[sounds.' . $severity . ']', $this->data['messages']['sounds.' . $severity]); foreach ($zbxSounds as $filename => $file) { $soundList->addItem($file, $filename); } $triggersTable->addRow(array(new CCheckBox('messages[triggers.severities][' . $severity . ']', isset($this->data['messages']['triggers.severities'][$severity]), null, 1), getSeverityCaption($severity), SPACE, $soundList, new CButton('start', _('Play'), "javascript: testUserSound('messages_sounds." . $severity . "');", 'formlist'), new CButton('stop', _('Stop'), 'javascript: AudioControl.stop();', 'formlist'))); zbx_subarray_push($msgVisibility, 1, 'messages[triggers.severities][' . $severity . ']'); zbx_subarray_push($msgVisibility, 1, 'messages[sounds.' . $severity . ']'); } $userMessagingFormList->addRow(_('Trigger severity'), $triggersTable, false, 'triggers_row'); zbx_add_post_js("\n\t\tjQuery('#messages_enabled').bind('click', function() {\n\t\t\tif (this.checked\n\t\t\t\t\t&& !jQuery(\"input[id='messages_triggers.recovery']\").is(':checked')\n\t\t\t\t\t&& !jQuery(\"input[id='messages_triggers.severities_0']\").is(':checked')\n\t\t\t\t\t&& !jQuery(\"input[id='messages_triggers.severities_1']\").is(':checked')\n\t\t\t\t\t&& !jQuery(\"input[id='messages_triggers.severities_2']\").is(':checked')\n\t\t\t\t\t&& !jQuery(\"input[id='messages_triggers.severities_3']\").is(':checked')\n\t\t\t\t\t&& !jQuery(\"input[id='messages_triggers.severities_4']\").is(':checked')\n\t\t\t\t\t&& !jQuery(\"input[id='messages_triggers.severities_5']\").is(':checked')) {\n\t\t\t\tjQuery(\"input[id='messages_triggers.recovery']\").attr('checked', true);\n\t\t\t\tjQuery(\"input[id='messages_triggers.severities_0']\").attr('checked', true);\n\t\t\t\tjQuery(\"input[id='messages_triggers.severities_1']\").attr('checked', true);\n\t\t\t\tjQuery(\"input[id='messages_triggers.severities_2']\").attr('checked', true);\n\t\t\t\tjQuery(\"input[id='messages_triggers.severities_3']\").attr('checked', true);\n\t\t\t\tjQuery(\"input[id='messages_triggers.severities_4']\").attr('checked', true);\n\t\t\t\tjQuery(\"input[id='messages_triggers.severities_5']\").attr('checked', true);\n\t\t\t}\n\n\t\t\t// enable/disable childs fields\n\t\t\tif (this.checked) {\n\t\t\t\tjQuery('#messagingTab input, #messagingTab select').removeAttr('disabled');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tjQuery('#messagingTab input, #messagingTab select').attr('disabled', 'disabled');\n\t\t\t\tjQuery('#messages_enabled').removeAttr('disabled');\n\t\t\t}\n\t\t});\n\n\t\t// initial state: enable/disable childs fields\n\t\tif (jQuery('#messages_enabled').is(':checked')) {\n\t\t\tjQuery('#messagingTab input, #messagingTab select').removeAttr('disabled');\n\t\t}\n\t\telse {\n\t\t\tjQuery('#messagingTab input, #messagingTab select').attr('disabled', 'disabled');\n\t\t\tjQuery('#messages_enabled').removeAttr('disabled');\n\t\t}"); } // append form lists to tab $userTab = new CTabView(); if (!$this->data['form_refresh']) { $userTab->setSelected(0); } $userTab->addTab('userTab', _('User'), $userFormList); if (isset($userMediaFormList)) { $userTab->addTab('mediaTab', _('Media'), $userMediaFormList); } if (!$this->data['is_profile']) { /*
} if (!$this->data['templated']) { $stepsTable->addRow((new CCol((new CButton('add_step', _('Add')))->addClass(ZBX_STYLE_BTN_LINK)))->setColSpan(8)); } $httpStepFormList->addRow(_('Steps'), (new CDiv($stepsTable))->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)); // append tabs to form $httpTab = (new CTabView())->addTab('scenarioTab', _('Scenario'), $httpFormList)->addTab('stepTab', _('Steps'), $httpStepFormList)->addTab('authenticationTab', _('Authentication'), $httpAuthenticationFormList); if (!$this->data['form_refresh']) { $httpTab->setSelected(0); } // append buttons to form if (!empty($this->data['httptestid'])) { $buttons = [new CSubmit('clone', _('Clone'))]; if ($this->data['templated'] == 0) { $buttons[] = new CButtonDelete(_('Delete web scenario?'), url_param('form') . url_param('httptestid') . url_param('hostid')); } if ($this->data['host']['status'] == HOST_STATUS_MONITORED || $this->data['host']['status'] == HOST_STATUS_NOT_MONITORED) { $buttons[] = new CButtonQMessage('del_history', _('Clear history and trends'), _('History clearing can take a long time. Continue?')); } $buttons[] = new CButtonCancel(); $httpTab->setFooter(makeFormFooter(new CSubmit('update', _('Update')), $buttons)); } else { $httpTab->setFooter(makeFormFooter(new CSubmit('add', _('Add')), [new CButtonCancel()])); } $httpForm->addItem($httpTab); $widget->addItem($httpForm); $this->data['agentVisibility'] = []; zbx_subarray_push($this->data['agentVisibility'], ZBX_AGENT_OTHER, 'agent_other'); zbx_subarray_push($this->data['agentVisibility'], ZBX_AGENT_OTHER, 'row_agent_other'); require_once dirname(__FILE__) . '/js/configuration.httpconf.edit.js.php'; return $widget;
zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV, 'row_snmpv3_authprotocol'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV, 'snmpv3_authpassphrase'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV, 'row_snmpv3_authpassphrase'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'snmpv3_authprotocol'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_authprotocol'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'snmpv3_authpassphrase'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_authpassphrase'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'snmpv3_privprotocol'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_privprotocol'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'snmpv3_privpassphrase'); zbx_subarray_push($this->data['securityLevelVisibility'], ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_privpassphrase'); $this->data['authTypeVisibility'] = []; zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'publickey'); zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'row_publickey'); zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'privatekey'); zbx_subarray_push($this->data['authTypeVisibility'], ITEM_AUTHTYPE_PUBLICKEY, 'row_privatekey'); ?> <script type="text/javascript"> function setAuthTypeLabel() { if (jQuery('#authtype').val() == <?php echo CJs::encodeJson(ITEM_AUTHTYPE_PUBLICKEY); ?> && jQuery('#type').val() == <?php echo CJs::encodeJson(ITEM_TYPE_SSH); ?> ) { jQuery('#row_password label').html(<?php echo CJs::encodeJson(_('Key passphrase')); ?> );
$form->addRow(S_STATUS, $cmbStatus); $form->addItemToBottomRow(new CButton("save", S_SAVE)); if (isset($_REQUEST["druleid"])) { $form->addItemToBottomRow(SPACE); $form->addItemToBottomRow(new CButton("clone", S_CLONE)); $form->addItemToBottomRow(SPACE); $form->addItemToBottomRow(new CButtonDelete(S_DELETE_RULE_Q, url_param("form") . url_param("druleid"))); } $form->addItemToBottomRow(SPACE); $form->addItemToBottomRow(new CButtonCancel()); $dscry_wdgt->addItem($form); // adding javascript, so that auth fields would be hidden if they are not used in specific auth type $securityLevelVisibility = array(); zbx_subarray_push($securityLevelVisibility, ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV, 'row_snmpv3_authpassphrase'); zbx_subarray_push($securityLevelVisibility, ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_authpassphrase'); zbx_subarray_push($securityLevelVisibility, ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_privpassphrase'); zbx_add_post_js("var securityLevelSwitcher = new CViewSwitcher('new_check_snmpv3_securitylevel', 'change', " . zbx_jsvalue($securityLevelVisibility, true) . ");"); } else { $numrows = new CDiv(); $numrows->setAttribute('name', 'numrows'); $dscry_wdgt->addHeader(S_DISCOVERY_BIG); $dscry_wdgt->addHeader($numrows); /* table */ $form = new CForm(); $form->setName('frmdrules'); $tblDiscovery = new CTableInfo(S_NO_DISCOVERY_RULES_DEFINED); $tblDiscovery->setHeader(array(new CCheckBox('all_drules', null, "checkAll('" . $form->GetName() . "','all_drules','g_druleid');"), make_sorting_header(S_NAME, 'd.name'), make_sorting_header(S_IP_RANGE, 'd.iprange'), make_sorting_header(S_DELAY, 'd.delay'), S_CHECKS, S_STATUS)); $sql = 'SELECT d.* ' . ' FROM drules d' . ' WHERE ' . DBin_node('druleid') . order_by('d.name,d.iprange,d.delay', 'd.druleid'); $db_rules = DBselect($sql); // Discovery rules will be gathered here, so we can feed this array to pagination function $rules_arr = array();
function getItemFilterForm(&$items) { $filter_groupId = $_REQUEST['filter_groupid']; $filter_hostId = $_REQUEST['filter_hostid']; $filter_application = $_REQUEST['filter_application']; $filter_name = $_REQUEST['filter_name']; $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_port = $_REQUEST['filter_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_state = $_REQUEST['filter_state']; $filter_templated_items = $_REQUEST['filter_templated_items']; $filter_with_triggers = $_REQUEST['filter_with_triggers']; $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_state = $_REQUEST['subfilter_state']; $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 CFilter('web.items.filter.state'))->addVar('subfilter_hosts', $subfilter_hosts)->addVar('subfilter_apps', $subfilter_apps)->addVar('subfilter_types', $subfilter_types)->addVar('subfilter_value_types', $subfilter_value_types)->addVar('subfilter_status', $subfilter_status)->addVar('subfilter_state', $subfilter_state)->addVar('subfilter_templated_items', $subfilter_templated_items)->addVar('subfilter_with_triggers', $subfilter_with_triggers)->addVar('subfilter_history', $subfilter_history)->addVar('subfilter_trends', $subfilter_trends)->addVar('subfilter_interval', $subfilter_interval); $filterColumn1 = new CFormList(); $filterColumn2 = new CFormList(); $filterColumn3 = new CFormList(); $filterColumn4 = new CFormList(); // type select $fTypeVisibility = []; $cmbType = new CComboBox('filter_type', $filter_type, null, [-1 => _('all')]); zbx_subarray_push($fTypeVisibility, -1, 'filter_delay_row'); $item_types = item_type2str(); unset($item_types[ITEM_TYPE_HTTPTEST]); // httptest items are only for internal zabbix logic $cmbType->addItems($item_types); foreach ($item_types as $type => $name) { if ($type != ITEM_TYPE_TRAPPER && $type != ITEM_TYPE_SNMPTRAP) { zbx_subarray_push($fTypeVisibility, $type, 'filter_delay_row'); } switch ($type) { case ITEM_TYPE_SNMPV1: case ITEM_TYPE_SNMPV2C: zbx_subarray_push($fTypeVisibility, $type, 'filter_snmp_community_row'); zbx_subarray_push($fTypeVisibility, $type, 'filter_snmp_oid_row'); zbx_subarray_push($fTypeVisibility, $type, 'filter_port_row'); break; case ITEM_TYPE_SNMPV3: zbx_subarray_push($fTypeVisibility, $type, 'filter_snmpv3_securityname_row'); zbx_subarray_push($fTypeVisibility, $type, 'filter_snmp_oid_row'); zbx_subarray_push($fTypeVisibility, $type, 'filter_port_row'); break; } } zbx_add_post_js("var filterTypeSwitcher = new CViewSwitcher('filter_type', 'change', " . zbx_jsvalue($fTypeVisibility, true) . ');'); // type of information select $fVTypeVisibility = []; zbx_subarray_push($fVTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'filter_data_type_row'); zbx_add_post_js("var filterValueTypeSwitcher = new CViewSwitcher('filter_value_type', 'change', " . zbx_jsvalue($fVTypeVisibility, true) . ');'); // row 1 $groupFilter = null; if (!empty($filter_groupId)) { $getHostInfo = API::HostGroup()->get(['groupids' => $filter_groupId, 'output' => ['name']]); $getHostInfo = reset($getHostInfo); if (!empty($getHostInfo)) { $groupFilter[] = ['id' => $getHostInfo['groupid'], 'name' => $getHostInfo['name']]; } } $filterColumn1->addRow(_('Host group'), (new CMultiSelect(['name' => 'filter_groupid', 'selectedLimit' => 1, 'objectName' => 'hostGroup', 'objectOptions' => ['editable' => true], 'data' => $groupFilter, 'popup' => ['parameters' => 'srctbl=host_groups&dstfrm=' . $form->getName() . '&dstfld1=filter_groupid' . '&srcfld1=groupid&writeonly=1']]))->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH)); $filterColumn2->addRow(_('Type'), $cmbType); $filterColumn3->addRow(_('Type of information'), new CComboBox('filter_value_type', $filter_value_type, null, [-1 => _('all'), ITEM_VALUE_TYPE_UINT64 => _('Numeric (unsigned)'), ITEM_VALUE_TYPE_FLOAT => _('Numeric (float)'), ITEM_VALUE_TYPE_STR => _('Character'), ITEM_VALUE_TYPE_LOG => _('Log'), ITEM_VALUE_TYPE_TEXT => _('Text')])); $filterColumn4->addRow(_('State'), new CComboBox('filter_state', $filter_state, null, [-1 => _('all'), ITEM_STATE_NORMAL => itemState(ITEM_STATE_NORMAL), ITEM_STATE_NOTSUPPORTED => itemState(ITEM_STATE_NOTSUPPORTED)])); // row 2 $hostFilterData = null; if (!empty($filter_hostId)) { $getHostInfo = API::Host()->get(['hostids' => $filter_hostId, 'templated_hosts' => true, 'output' => ['name']]); $getHostInfo = reset($getHostInfo); if (!empty($getHostInfo)) { $hostFilterData[] = ['id' => $getHostInfo['hostid'], 'name' => $getHostInfo['name']]; } } $filterColumn1->addRow(_('Host'), (new CMultiSelect(['name' => 'filter_hostid', 'selectedLimit' => 1, 'objectName' => 'hosts', 'objectOptions' => ['editable' => true, 'templated_hosts' => true], 'data' => $hostFilterData, 'popup' => ['parameters' => 'srctbl=host_templates&dstfrm=' . $form->getName() . '&dstfld1=filter_hostid' . '&srcfld1=hostid&writeonly=1']]))->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH)); $filterColumn2->addRow(_('Update interval (in sec)'), (new CNumericBox('filter_delay', $filter_delay, 5, false, true))->setWidth(ZBX_TEXTAREA_NUMERIC_STANDARD_WIDTH), 'filter_delay_row'); $filterColumn3->addRow(_('Data type'), (new CComboBox('filter_data_type', $filter_data_type))->addItem(-1, _('all'))->addItems(item_data_type2str()), 'filter_data_type_row'); $filterColumn4->addRow(_('Status'), new CComboBox('filter_status', $filter_status, null, [-1 => _('all'), ITEM_STATUS_ACTIVE => item_status2str(ITEM_STATUS_ACTIVE), ITEM_STATUS_DISABLED => item_status2str(ITEM_STATUS_DISABLED)])); // row 3 $filterColumn1->addRow(_('Application'), [(new CTextBox('filter_application', $filter_application))->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH), (new CDiv())->addClass(ZBX_STYLE_FORM_INPUT_MARGIN), (new CButton(null, _('Select')))->addClass(ZBX_STYLE_BTN_GREY)->onClick('return PopUp("popup.php?srctbl=applications&srcfld1=name' . '&dstfrm=' . $form->getName() . '&dstfld1=filter_application' . '&with_applications=1' . '" + (jQuery("input[name=\'filter_hostid\']").length > 0 ? "&hostid="+jQuery("input[name=\'filter_hostid\']").val() : "")' . ', 0, 0, "application");')]); $filterColumn2->addRow(_('SNMP community'), (new CTextBox('filter_snmp_community', $filter_snmp_community))->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH), 'filter_snmp_community_row'); $filterColumn2->addRow(_('Security name'), (new CTextBox('filter_snmpv3_securityname', $filter_snmpv3_securityname))->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH), 'filter_snmpv3_securityname_row'); $filterColumn3->addRow(_('History (in days)'), (new CNumericBox('filter_history', $filter_history, 8, false, true))->setWidth(ZBX_TEXTAREA_NUMERIC_STANDARD_WIDTH)); $filterColumn4->addRow(_('Triggers'), new CComboBox('filter_with_triggers', $filter_with_triggers, null, [-1 => _('all'), 1 => _('With triggers'), 0 => _('Without triggers')])); // row 4 $filterColumn1->addRow(_('Name like'), (new CTextBox('filter_name', $filter_name))->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH)); $filterColumn2->addRow(_('SNMP OID'), (new CTextBox('filter_snmp_oid', $filter_snmp_oid))->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH), 'filter_snmp_oid_row'); $filterColumn3->addRow(_('Trends (in days)'), (new CNumericBox('filter_trends', $filter_trends, 8, false, true))->setWidth(ZBX_TEXTAREA_NUMERIC_STANDARD_WIDTH)); $filterColumn4->addRow(_('Template'), new CComboBox('filter_templated_items', $filter_templated_items, null, [-1 => _('all'), 1 => _('Templated items'), 0 => _('Not Templated items')])); // row 5 $filterColumn1->addRow(_('Key like'), (new CTextBox('filter_key', $filter_key))->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH)); $filterColumn2->addRow(_('Port'), (new CNumericBox('filter_port', $filter_port, 5, false, true))->setWidth(ZBX_TEXTAREA_NUMERIC_STANDARD_WIDTH), 'filter_port_row'); $form->addColumn($filterColumn1); $form->addColumn($filterColumn2); $form->addColumn($filterColumn3); $form->addColumn($filterColumn4); // subfilters $table_subfilter = (new CTableInfo())->addRow([new CTag('h4', true, [_('Subfilter'), SPACE, (new CSpan(_('affects only filtered data')))->addClass(ZBX_STYLE_GREY)])]); // array contains subfilters and number of items in each $item_params = ['hosts' => [], 'applications' => [], 'types' => [], 'value_types' => [], 'status' => [], 'state' => [], 'templated_items' => [], 'with_triggers' => [], 'history' => [], 'trends' => [], 'interval' => []]; // generate array with values for subfilters of selected items foreach ($items as $item) { // hosts if (zbx_empty($filter_hostId)) { $host = reset($item['hosts']); if (!isset($item_params['hosts'][$host['hostid']])) { $item_params['hosts'][$host['hostid']] = ['name' => $host['name'], '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 if (!empty($item['applications'])) { foreach ($item['applications'] as $application) { if (!isset($item_params['applications'][$application['name']])) { $item_params['applications'][$application['name']] = ['name' => $application['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']] = ['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']] = ['name' => itemValueTypeString($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']] = ['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']++; } } // state if ($filter_state == -1) { if (!isset($item_params['state'][$item['state']])) { $item_params['state'][$item['state']] = ['name' => itemState($item['state']), 'count' => 0]; } $show_item = true; foreach ($item['subfilters'] as $name => $value) { if ($name == 'subfilter_state') { continue; } $show_item &= $value; } if ($show_item) { $item_params['state'][$item['state']]['count']++; } } // template if ($filter_templated_items == -1) { if ($item['templateid'] == 0 && !isset($item_params['templated_items'][0])) { $item_params['templated_items'][0] = ['name' => _('Not Templated items'), 'count' => 0]; } elseif ($item['templateid'] > 0 && !isset($item_params['templated_items'][1])) { $item_params['templated_items'][1] = ['name' => _('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] = ['name' => _('Without triggers'), 'count' => 0]; } elseif (count($item['triggers']) > 0 && !isset($item_params['with_triggers'][1])) { $item_params['with_triggers'][1] = ['name' => _('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['trends'] !== '') { $item_params['trends'][$item['trends']] = ['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['trends'] !== '') { $item_params['trends'][$item['trends']]['count']++; } } // history if (zbx_empty($filter_history)) { if (!isset($item_params['history'][$item['history']])) { $item_params['history'][$item['history']] = ['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['delay'] !== '') { $item_params['interval'][$item['delay']] = ['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['delay'] !== '') { $item_params['interval'][$item['delay']]['count']++; } } } // output if (zbx_empty($filter_hostId) && count($item_params['hosts']) > 1) { $hosts_output = prepareSubfilterOutput(_('Hosts'), $item_params['hosts'], $subfilter_hosts, 'subfilter_hosts'); $table_subfilter->addRow($hosts_output); } if (!empty($item_params['applications']) && count($item_params['applications']) > 1) { $application_output = prepareSubfilterOutput(_('Applications'), $item_params['applications'], $subfilter_apps, 'subfilter_apps'); $table_subfilter->addRow([$application_output]); } if ($filter_type == -1 && count($item_params['types']) > 1) { $type_output = prepareSubfilterOutput(_('Types'), $item_params['types'], $subfilter_types, 'subfilter_types'); $table_subfilter->addRow([$type_output]); } if ($filter_value_type == -1 && count($item_params['value_types']) > 1) { $value_types_output = prepareSubfilterOutput(_('Type of information'), $item_params['value_types'], $subfilter_value_types, 'subfilter_value_types'); $table_subfilter->addRow([$value_types_output]); } if ($filter_status == -1 && count($item_params['status']) > 1) { $status_output = prepareSubfilterOutput(_('Status'), $item_params['status'], $subfilter_status, 'subfilter_status'); $table_subfilter->addRow([$status_output]); } if ($filter_state == -1 && count($item_params['state']) > 1) { $state_output = prepareSubfilterOutput(_('State'), $item_params['state'], $subfilter_state, 'subfilter_state'); $table_subfilter->addRow([$state_output]); } if ($filter_templated_items == -1 && count($item_params['templated_items']) > 1) { $templated_items_output = prepareSubfilterOutput(_('Template'), $item_params['templated_items'], $subfilter_templated_items, 'subfilter_templated_items'); $table_subfilter->addRow([$templated_items_output]); } if ($filter_with_triggers == -1 && count($item_params['with_triggers']) > 1) { $with_triggers_output = prepareSubfilterOutput(_('With triggers'), $item_params['with_triggers'], $subfilter_with_triggers, 'subfilter_with_triggers'); $table_subfilter->addRow([$with_triggers_output]); } if (zbx_empty($filter_history) && count($item_params['history']) > 1) { $history_output = prepareSubfilterOutput(_('History'), $item_params['history'], $subfilter_history, 'subfilter_history'); $table_subfilter->addRow([$history_output]); } if (zbx_empty($filter_trends) && count($item_params['trends']) > 1) { $trends_output = prepareSubfilterOutput(_('Trends'), $item_params['trends'], $subfilter_trends, 'subfilter_trends'); $table_subfilter->addRow([$trends_output]); } if (zbx_empty($filter_delay) && $filter_type != ITEM_TYPE_TRAPPER && count($item_params['interval']) > 1) { $interval_output = prepareSubfilterOutput(_('Interval'), $item_params['interval'], $subfilter_interval, 'subfilter_interval'); $table_subfilter->addRow([$interval_output]); } $form->setFooter($table_subfilter); return $form; }
function insert_item_form() { global $USER_DETAILS; $frmItem = new CFormTable(S_ITEM, 'items.php', 'post'); $frmItem->setAttribute('style', 'visibility: hidden;'); $frmItem->setHelp('web.items.item.php'); $hostid = get_request('form_hostid', 0); $description = get_request('description', ''); $key = get_request('key', ''); $host = get_request('host', null); $delay = get_request('delay', 30); $history = get_request('history', 90); $status = get_request('status', 0); $type = get_request('type', 0); $snmp_community = get_request('snmp_community', 'public'); $snmp_oid = get_request('snmp_oid', 'interfaces.ifTable.ifEntry.ifInOctets.1'); $snmp_port = get_request('snmp_port', 161); $value_type = get_request('value_type', ITEM_VALUE_TYPE_UINT64); $data_type = get_request('data_type', ITEM_DATA_TYPE_DECIMAL); $trapper_hosts = get_request('trapper_hosts', ''); $units = get_request('units', ''); $valuemapid = get_request('valuemapid', 0); $params = get_request('params', ''); $multiplier = get_request('multiplier', 0); $delta = get_request('delta', 0); $trends = get_request('trends', 365); $new_application = get_request('new_application', ''); $applications = get_request('applications', array()); $delay_flex = get_request('delay_flex', array()); $snmpv3_securityname = get_request('snmpv3_securityname', ''); $snmpv3_securitylevel = get_request('snmpv3_securitylevel', 0); $snmpv3_authpassphrase = get_request('snmpv3_authpassphrase', ''); $snmpv3_privpassphrase = get_request('snmpv3_privpassphrase', ''); $ipmi_sensor = get_request('ipmi_sensor', ''); $authtype = get_request('authtype', 0); $username = get_request('username', ''); $password = get_request('password', ''); $publickey = get_request('publickey', ''); $privatekey = get_request('privatekey', ''); $formula = get_request('formula', '1'); $logtimefmt = get_request('logtimefmt', ''); $add_groupid = get_request('add_groupid', get_request('groupid', 0)); $limited = null; $types = item_type2str(); // http items only for internal processes unset($types[ITEM_TYPE_HTTPTEST]); if (isset($_REQUEST['itemid'])) { $frmItem->addVar('itemid', $_REQUEST['itemid']); $options = array('itemids' => $_REQUEST['itemid'], 'output' => API_OUTPUT_EXTEND); $item_data = CItem::get($options); $item_data = reset($item_data); $hostid = $hostid > 0 ? $hostid : $item_data['hostid']; $limited = $item_data['templateid'] == 0 && $item_data['type'] != ITEM_TYPE_HTTPTEST ? null : 'yes'; $item_data['snmp_port'] = $item_data['snmp_port'] == '0' ? 161 : $item_data['snmp_port']; } if (is_null($host)) { if ($hostid > 0) { $options = array('hostids' => $hostid, 'output' => API_OUTPUT_EXTEND, 'templated_hosts' => 1); $host_info = CHost::get($options); $host_info = reset($host_info); $host = $host_info['host']; } else { $host = S_NOT_SELECTED_SMALL; } } if (isset($_REQUEST['itemid']) && !isset($_REQUEST['form_refresh']) || isset($limited)) { $description = $item_data['description']; $key = $item_data['key_']; // $host = $item_data['host']; $type = $item_data['type']; $snmp_community = $item_data['snmp_community']; $snmp_oid = $item_data['snmp_oid']; $snmp_port = $item_data['snmp_port']; $value_type = $item_data['value_type']; $data_type = $item_data['data_type']; $trapper_hosts = $item_data['trapper_hosts']; $units = $item_data['units']; $valuemapid = $item_data['valuemapid']; $multiplier = $item_data['multiplier']; $hostid = $item_data['hostid']; $params = $item_data['params']; $snmpv3_securityname = $item_data['snmpv3_securityname']; $snmpv3_securitylevel = $item_data['snmpv3_securitylevel']; $snmpv3_authpassphrase = $item_data['snmpv3_authpassphrase']; $snmpv3_privpassphrase = $item_data['snmpv3_privpassphrase']; $ipmi_sensor = $item_data['ipmi_sensor']; $authtype = $item_data['authtype']; $username = $item_data['username']; $password = $item_data['password']; $publickey = $item_data['publickey']; $privatekey = $item_data['privatekey']; $formula = $item_data['formula']; $logtimefmt = $item_data['logtimefmt']; $new_application = get_request('new_application', ''); if (!isset($limited) || !isset($_REQUEST['form_refresh'])) { $delay = $item_data['delay']; $history = $item_data['history']; $status = $item_data['status']; $delta = $item_data['delta']; $trends = $item_data['trends']; $db_delay_flex = $item_data['delay_flex']; if (isset($db_delay_flex)) { $arr_of_dellays = explode(';', $db_delay_flex); foreach ($arr_of_dellays as $one_db_delay) { $arr_of_delay = explode('/', $one_db_delay); if (!isset($arr_of_delay[0]) || !isset($arr_of_delay[1])) { continue; } array_push($delay_flex, array('delay' => $arr_of_delay[0], 'period' => $arr_of_delay[1])); } } $applications = array_unique(zbx_array_merge($applications, get_applications_by_itemid($_REQUEST['itemid']))); } } $securityLevelVisibility = array(); $valueTypeVisibility = array(); $authTypeVisibility = array(); $typeVisibility = array(); $delay_flex_el = array(); //if($type != ITEM_TYPE_TRAPPER){ $i = 0; foreach ($delay_flex as $val) { if (!isset($val['delay']) && !isset($val['period'])) { continue; } array_push($delay_flex_el, array(new CCheckBox('rem_delay_flex[' . $i . ']', 'no', null, $i), $val['delay'], SPACE . S_SEC_AT . SPACE, $val['period']), BR()); $frmItem->addVar('delay_flex[' . $i . '][delay]', $val['delay']); $frmItem->addVar('delay_flex[' . $i . '][period]', $val['period']); foreach ($types as $it => $caption) { if ($it == ITEM_TYPE_TRAPPER || $it == ITEM_TYPE_ZABBIX_ACTIVE) { continue; } zbx_subarray_push($typeVisibility, $it, 'delay_flex[' . $i . '][delay]'); zbx_subarray_push($typeVisibility, $it, 'delay_flex[' . $i . '][period]'); zbx_subarray_push($typeVisibility, $it, 'rem_delay_flex[' . $i . ']'); } $i++; if ($i >= 7) { break; } /* limit count of intervals * 7 intervals by 30 symbols = 210 characters * db storage field is 256 */ } //} array_push($delay_flex_el, count($delay_flex_el) == 0 ? S_NO_FLEXIBLE_INTERVALS : new CButton('del_delay_flex', S_DELETE_SELECTED)); if (count($applications) == 0) { array_push($applications, 0); } if (isset($_REQUEST['itemid'])) { $caption = array(); $itemid = $_REQUEST['itemid']; do { $sql = 'SELECT i.itemid, i.templateid, h.host' . ' FROM items i, hosts h' . ' WHERE i.itemid=' . $itemid . ' AND h.hostid=i.hostid'; $itemFromDb = DBfetch(DBselect($sql)); if ($itemFromDb) { if ($_REQUEST['itemid'] == $itemid) { $caption[] = SPACE; $caption[] = $itemFromDb['host']; } else { $caption[] = ' : '; $caption[] = new CLink($itemFromDb['host'], 'items.php?form=update&itemid=' . $itemFromDb['itemid'], 'highlight underline'); } $itemid = $itemFromDb['templateid']; } else { break; } } while ($itemid != 0); $caption[] = S_ITEM . ' "'; $caption = array_reverse($caption); $caption[] = ': '; $caption[] = $item_data['description']; $caption[] = '"'; $frmItem->setTitle($caption); } else { $frmItem->setTitle(S_ITEM . " {$host} : {$description}"); } $frmItem->addVar('form_hostid', $hostid); $frmItem->addRow(S_HOST, array(new CTextBox('host', $host, 32, true), new CButton('btn_host', S_SELECT, "return PopUp('popup.php?dstfrm=" . $frmItem->getName() . "&dstfld1=host&dstfld2=form_hostid&srctbl=hosts_and_templates&srcfld1=host&srcfld2=hostid',450,450);", 'H'))); $frmItem->addRow(S_DESCRIPTION, new CTextBox('description', $description, 40, $limited)); if (isset($limited)) { $frmItem->addRow(S_TYPE, new CTextBox('typename', item_type2str($type), 40, 'yes')); $frmItem->addVar('type', $type); } else { $cmbType = new CComboBox('type', $type); $cmbType->addItems($types); $frmItem->addRow(S_TYPE, $cmbType); } $row = new CRow(array(new CCol(S_SNMP_OID, 'form_row_l'), new CCol(new CTextBox('snmp_oid', $snmp_oid, 40, $limited), 'form_row_r'))); $row->setAttribute('id', 'row_snmp_oid'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV1, 'snmp_oid'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV2C, 'snmp_oid'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV3, 'snmp_oid'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV1, 'row_snmp_oid'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV2C, 'row_snmp_oid'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV3, 'row_snmp_oid'); $row = new CRow(array(new CCol(S_SNMP_COMMUNITY, 'form_row_l'), new CCol(new CTextBox('snmp_community', $snmp_community, 16), 'form_row_r'))); $row->setAttribute('id', 'row_snmp_community'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV1, 'snmp_community'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV2C, 'snmp_community'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV1, 'row_snmp_community'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV2C, 'row_snmp_community'); $row = new CRow(array(new CCol(S_SNMPV3_SECURITY_NAME, 'form_row_l'), new CCol(new CTextBox('snmpv3_securityname', $snmpv3_securityname, 64), 'form_row_r'))); $row->setAttribute('id', 'row_snmpv3_securityname'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV3, 'snmpv3_securityname'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV3, 'row_snmpv3_securityname'); $cmbSecLevel = new CComboBox('snmpv3_securitylevel', $snmpv3_securitylevel); $cmbSecLevel->addItem(ITEM_SNMPV3_SECURITYLEVEL_NOAUTHNOPRIV, 'noAuthNoPriv'); $cmbSecLevel->addItem(ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV, 'authNoPriv'); $cmbSecLevel->addItem(ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'authPriv'); $row = new CRow(array(new CCol(S_SNMPV3_SECURITY_LEVEL, 'form_row_l'), new CCol($cmbSecLevel, 'form_row_r'))); $row->setAttribute('id', 'row_snmpv3_securitylevel'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV3, 'snmpv3_securitylevel'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV3, 'row_snmpv3_securitylevel'); $row = new CRow(array(new CCol(S_SNMPV3_AUTH_PASSPHRASE, 'form_row_l'), new CCol(new CTextBox('snmpv3_authpassphrase', $snmpv3_authpassphrase, 64), 'form_row_r'))); $row->setAttribute('id', 'row_snmpv3_authpassphrase'); $frmItem->addRow($row); zbx_subarray_push($securityLevelVisibility, ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV, 'snmpv3_authpassphrase'); zbx_subarray_push($securityLevelVisibility, ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV, 'row_snmpv3_authpassphrase'); $row = new CRow(array(new CCol(S_SNMPV3_PRIV_PASSPHRASE, 'form_row_l'), new CCol(new CTextBox('snmpv3_privpassphrase', $snmpv3_privpassphrase, 64), 'form_row_r'))); $row->setAttribute('id', 'row_snmpv3_privpassphrase'); $frmItem->addRow($row); zbx_subarray_push($securityLevelVisibility, ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'snmpv3_privpassphrase'); zbx_subarray_push($securityLevelVisibility, ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_privpassphrase'); zbx_subarray_push($securityLevelVisibility, ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'snmpv3_authpassphrase'); zbx_subarray_push($securityLevelVisibility, ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'row_snmpv3_authpassphrase'); $row = new CRow(array(new CCol(S_SNMP_PORT, 'form_row_l'), new CCol(new CNumericBox('snmp_port', $snmp_port, 5), 'form_row_r'))); $row->setAttribute('id', 'row_snmp_port'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV1, 'snmp_port'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV2C, 'snmp_port'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV3, 'snmp_port'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV1, 'row_snmp_port'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV2C, 'row_snmp_port'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SNMPV3, 'row_snmp_port'); $row = new CRow(array(new CCol(S_IPMI_SENSOR, 'form_row_l'), new CCol(new CTextBox('ipmi_sensor', $ipmi_sensor, 64, $limited), 'form_row_r'))); $row->setAttribute('id', 'row_ipmi_sensor'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_IPMI, 'ipmi_sensor'); zbx_subarray_push($typeVisibility, ITEM_TYPE_IPMI, 'row_ipmi_sensor'); if (isset($limited)) { $btnSelect = null; } else { $btnSelect = new CButton('btn1', S_SELECT, "return PopUp('popup.php?dstfrm=" . $frmItem->getName() . "&dstfld1=key&srctbl=help_items&srcfld1=key_&itemtype=" . $type . "');", 'T'); } $frmItem->addRow(S_KEY, array(new CTextBox('key', $key, 40, $limited), $btnSelect)); foreach ($types as $it => $ilabel) { switch ($it) { case ITEM_TYPE_DB_MONITOR: zbx_subarray_push($typeVisibility, $it, array('id' => 'key', 'defaultValue' => 'db.odbc.select[<unique short description>]')); zbx_subarray_push($typeVisibility, $it, array('id' => 'params_dbmonitor', 'defaultValue' => "DSN=<database source name>\nuser=<user name>\npassword=<password>\nsql=<query>")); break; case ITEM_TYPE_SSH: zbx_subarray_push($typeVisibility, $it, array('id' => 'key', 'defaultValue' => 'ssh.run[<unique short description>,<ip>,<port>,<encoding>]')); break; case ITEM_TYPE_TELNET: zbx_subarray_push($typeVisibility, $it, array('id' => 'key', 'defaultValue' => 'telnet.run[<unique short description>,<ip>,<port>,<encoding>]')); break; default: zbx_subarray_push($typeVisibility, $it, array('id' => 'key', 'defaultValue' => '')); } } /* ITEM_TYPE_DB_MONITOR $key = 'db.odbc.select[<unique short description>]'; $params = "DSN=<database source name>\nuser=<user name>\npassword=<password>\nsql=<query>"; ITEM_TYPE_SSH $key = 'ssh.run[<unique short description>,<ip>,<port>,<encoding>]'; $params = ''; ITEM_TYPE_TELNET $key = 'telnet.run[<unique short description>,<ip>,<port>,<encoding>]'; $params = ''; ITEM_TYPE_CALCULATED $key = ''; $params = ''; //*/ $cmbAuthType = new CComboBox('authtype', $authtype); $cmbAuthType->addItem(ITEM_AUTHTYPE_PASSWORD, S_PASSWORD); $cmbAuthType->addItem(ITEM_AUTHTYPE_PUBLICKEY, S_PUBLIC_KEY); $row = new CRow(array(new CCol(S_AUTHENTICATION_METHOD, 'form_row_l'), new CCol($cmbAuthType, 'form_row_r'))); $row->setAttribute('id', 'row_authtype'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_SSH, 'authtype'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SSH, 'row_authtype'); $row = new CRow(array(new CCol(S_USER_NAME, 'form_row_l'), new CCol(new CTextBox('username', $username, 16), 'form_row_r'))); $row->setAttribute('id', 'row_username'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_SSH, 'username'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SSH, 'row_username'); zbx_subarray_push($typeVisibility, ITEM_TYPE_TELNET, 'username'); zbx_subarray_push($typeVisibility, ITEM_TYPE_TELNET, 'row_username'); $row = new CRow(array(new CCol(S_PUBLIC_KEY_FILE, 'form_row_l'), new CCol(new CTextBox('publickey', $publickey, 16), 'form_row_r'))); $row->setAttribute('id', 'row_publickey'); $frmItem->addRow($row); zbx_subarray_push($authTypeVisibility, ITEM_AUTHTYPE_PUBLICKEY, 'publickey'); zbx_subarray_push($authTypeVisibility, ITEM_AUTHTYPE_PUBLICKEY, 'row_publickey'); $row = new CRow(array(new CCol(S_PRIVATE_KEY_FILE, 'form_row_l'), new CCol(new CTextBox('privatekey', $privatekey, 16), 'form_row_r'))); $row->setAttribute('id', 'row_privatekey'); $frmItem->addRow($row); zbx_subarray_push($authTypeVisibility, ITEM_AUTHTYPE_PUBLICKEY, 'privatekey'); zbx_subarray_push($authTypeVisibility, ITEM_AUTHTYPE_PUBLICKEY, 'row_privatekey'); $row = new CRow(array(new CCol(S_PASSWORD, 'form_row_l'), new CCol(new CTextBox('password', $password, 16), 'form_row_r'))); $row->setAttribute('id', 'row_password'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_SSH, 'password'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SSH, 'row_password'); zbx_subarray_push($typeVisibility, ITEM_TYPE_TELNET, 'password'); zbx_subarray_push($typeVisibility, ITEM_TYPE_TELNET, 'row_password'); $spanEC = new CSpan(S_EXECUTED_SCRIPT); $spanEC->setAttribute('id', 'label_executed_script'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SSH, 'label_executed_script'); zbx_subarray_push($typeVisibility, ITEM_TYPE_TELNET, 'label_executed_script'); $spanP = new CSpan(S_PARAMS); $spanP->setAttribute('id', 'label_params'); zbx_subarray_push($typeVisibility, ITEM_TYPE_DB_MONITOR, 'label_params'); $spanF = new CSpan(S_FORMULA); $spanF->setAttribute('id', 'label_formula'); zbx_subarray_push($typeVisibility, ITEM_TYPE_CALCULATED, 'label_formula'); $params_script = new CTextArea('params', $params, 60, 4); $params_script->setAttribute('id', 'params_script'); $params_dbmonitor = new CTextArea('params', $params, 60, 4); $params_dbmonitor->setAttribute('id', 'params_dbmonitor'); $params_calculted = new CTextArea('params', $params, 60, 4); $params_calculted->setAttribute('id', 'params_calculted'); $row = new CRow(array(new CCol(array($spanEC, $spanP, $spanF), 'form_row_l'), new CCol(array($params_script, $params_dbmonitor, $params_calculted), 'form_row_r'))); $row->setAttribute('id', 'row_params'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_SSH, 'params_script'); zbx_subarray_push($typeVisibility, ITEM_TYPE_SSH, 'row_params'); zbx_subarray_push($typeVisibility, ITEM_TYPE_TELNET, 'params_script'); zbx_subarray_push($typeVisibility, ITEM_TYPE_TELNET, 'row_params'); zbx_subarray_push($typeVisibility, ITEM_TYPE_DB_MONITOR, 'params_dbmonitor'); zbx_subarray_push($typeVisibility, ITEM_TYPE_DB_MONITOR, 'row_params'); zbx_subarray_push($typeVisibility, ITEM_TYPE_CALCULATED, 'params_calculted'); zbx_subarray_push($typeVisibility, ITEM_TYPE_CALCULATED, 'row_params'); /* ITEM_TYPE_DB_MONITOR $key = 'db.odbc.select[<unique short description>]'; $params = "DSN=<database source name>\nuser=<user name>\npassword=<password>\nsql=<query>"; ITEM_TYPE_SSH $key = 'ssh.run[<unique short description>,<ip>,<port>,<encoding>]'; $params = ''; ITEM_TYPE_TELNET $key = 'telnet.run[<unique short description>,<ip>,<port>,<encoding>]'; $params = ''; ITEM_TYPE_CALCULATED $key = ''; $params = ''; //*/ if (isset($limited)) { $frmItem->addVar('value_type', $value_type); $cmbValType = new CTextBox('value_type_name', item_value_type2str($value_type), 40, 'yes'); } else { $cmbValType = new CComboBox('value_type', $value_type); $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); } $frmItem->addRow(S_TYPE_OF_INFORMATION, $cmbValType); if (isset($limited)) { $frmItem->addVar('data_type', $data_type); $cmbDataType = new CTextBox('data_type_name', item_data_type2str($data_type), 20, 'yes'); } else { $cmbDataType = new CComboBox('data_type', $data_type); $cmbDataType->addItem(ITEM_DATA_TYPE_DECIMAL, item_data_type2str(ITEM_DATA_TYPE_DECIMAL)); $cmbDataType->addItem(ITEM_DATA_TYPE_OCTAL, item_data_type2str(ITEM_DATA_TYPE_OCTAL)); $cmbDataType->addItem(ITEM_DATA_TYPE_HEXADECIMAL, item_data_type2str(ITEM_DATA_TYPE_HEXADECIMAL)); } $row = new CRow(array(new CCol(S_DATA_TYPE, 'form_row_l'), new CCol($cmbDataType, 'form_row_r'))); $row->setAttribute('id', 'row_data_type'); $frmItem->addRow($row); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'data_type'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'row_data_type'); $row = new CRow(array(new CCol(S_UNITS, 'form_row_l'), new CCol(new CTextBox('units', $units, 40, $limited), 'form_row_r'))); $row->setAttribute('id', 'row_units'); $frmItem->addRow($row); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'units'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'row_units'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'units'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'row_units'); $mltpbox = array(); if (isset($limited)) { $frmItem->addVar('multiplier', $multiplier); $mcb = new CCheckBox('multiplier', $multiplier == 1 ? 'yes' : 'no'); $mcb->setAttribute('disabled', 'disabled'); $mltpbox[] = $mcb; if ($multiplier) { $mltpbox[] = SPACE; $ctb = new CTextBox('formula', $formula, 10, 1); $ctb->setAttribute('style', 'text-align: right;'); $mltpbox[] = $ctb; } else { $frmItem->addVar('formula', $formula); } } else { $mltpbox[] = new CCheckBox('multiplier', $multiplier == 1 ? 'yes' : 'no', 'var editbx = document.getElementById(\'formula\'); if(editbx) editbx.disabled = !this.checked;', 1); $mltpbox[] = SPACE; $ctb = new CTextBox('formula', $formula, 10); $ctb->setAttribute('style', 'text-align: right;'); $mltpbox[] = $ctb; } $row = new CRow(array(new CCol(S_USE_CUSTOM_MULTIPLIER, 'form_row_l'), new CCol($mltpbox, 'form_row_r'))); $row->setAttribute('id', 'row_multiplier'); $frmItem->addRow($row); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'multiplier'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'row_multiplier'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'multiplier'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'row_multiplier'); $row = new CRow(array(new CCol(S_UPDATE_INTERVAL_IN_SEC, 'form_row_l'), new CCol(new CNumericBox('delay', $delay, 5), 'form_row_r'))); $row->setAttribute('id', 'row_delay'); $frmItem->addRow($row); foreach ($types as $it => $ilabel) { if ($it == ITEM_TYPE_TRAPPER) { continue; } zbx_subarray_push($typeVisibility, $it, 'delay'); zbx_subarray_push($typeVisibility, $it, 'row_delay'); } $row = new CRow(array(new CCol(S_FLEXIBLE_INTERVALS, 'form_row_l'), new CCol($delay_flex_el, 'form_row_r'))); $row->setAttribute('id', 'row_flex_intervals'); $frmItem->addRow($row); $row = new CRow(array(new CCol(S_NEW_FLEXIBLE_INTERVAL, 'form_row_l'), new CCol(array(S_DELAY, SPACE, new CNumericBox('new_delay_flex[delay]', '50', 5), S_PERIOD, SPACE, new CTextBox('new_delay_flex[period]', '1-7,00:00-23:59', 27), BR(), new CButton('add_delay_flex', S_ADD)), 'form_row_r')), 'new'); $row->setAttribute('id', 'row_new_delay_flex'); $frmItem->addRow($row); foreach ($types as $it => $ilabel) { if ($it == ITEM_TYPE_TRAPPER || $it == ITEM_TYPE_ZABBIX_ACTIVE) { continue; } zbx_subarray_push($typeVisibility, $it, 'row_flex_intervals'); zbx_subarray_push($typeVisibility, $it, 'row_new_delay_flex'); zbx_subarray_push($typeVisibility, $it, 'new_delay_flex[delay]'); zbx_subarray_push($typeVisibility, $it, 'new_delay_flex[period]'); zbx_subarray_push($typeVisibility, $it, 'add_delay_flex'); } $frmItem->addRow(S_KEEP_HISTORY_IN_DAYS, array(new CNumericBox('history', $history, 8), !isset($_REQUEST['itemid']) ? null : new CButtonQMessage('del_history', S_CLEAR_HISTORY, S_HISTORY_CLEARING_CAN_TAKE_A_LONG_TIME_CONTINUE_Q))); $row = new CRow(array(new CCol(S_KEEP_TRENDS_IN_DAYS, 'form_row_l'), new CCol(new CNumericBox('trends', $trends, 8), 'form_row_r'))); $row->setAttribute('id', 'row_trends'); $frmItem->addRow($row); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'trends'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'row_trends'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'trends'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'row_trends'); $cmbStatus = new CComboBox('status', $status); foreach (array(ITEM_STATUS_ACTIVE, ITEM_STATUS_DISABLED, ITEM_STATUS_NOTSUPPORTED) as $st) { $cmbStatus->addItem($st, item_status2str($st)); } $frmItem->addRow(S_STATUS, $cmbStatus); $row = new CRow(array(new CCol(S_LOG_TIME_FORMAT, 'form_row_l'), new CCol(new CTextBox('logtimefmt', $logtimefmt, 16, $limited), 'form_row_r'))); $row->setAttribute('id', 'row_logtimefmt'); $frmItem->addRow($row); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_LOG, 'logtimefmt'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_LOG, 'row_logtimefmt'); $cmbDelta = new CComboBox('delta', $delta); $cmbDelta->addItem(0, S_AS_IS); $cmbDelta->addItem(1, S_DELTA_SPEED_PER_SECOND); $cmbDelta->addItem(2, S_DELTA_SIMPLE_CHANGE); $row = new CRow(array(new CCol(S_STORE_VALUE, 'form_row_l'), new CCol($cmbDelta, 'form_row_r'))); $row->setAttribute('id', 'row_delta'); $frmItem->addRow($row); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'delta'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'row_delta'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'delta'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'row_delta'); if (isset($limited)) { $frmItem->addVar('valuemapid', $valuemapid); $map_name = S_AS_IS; if ($map_data = DBfetch(DBselect('SELECT name FROM valuemaps WHERE valuemapid=' . $valuemapid))) { $map_name = $map_data['name']; } $cmbMap = new CTextBox('valuemap_name', $map_name, 20, 'yes'); } else { $cmbMap = new CComboBox('valuemapid', $valuemapid); $cmbMap->addItem(0, S_AS_IS); $db_valuemaps = DBselect('SELECT * FROM valuemaps WHERE ' . DBin_node('valuemapid')); while ($db_valuemap = DBfetch($db_valuemaps)) { $cmbMap->addItem($db_valuemap['valuemapid'], get_node_name_by_elid($db_valuemap['valuemapid'], null, ': ') . $db_valuemap['name']); } } $link = new CLink(S_SHOW_VALUE_MAPPINGS, 'config.php?config=6'); $link->setAttribute('target', '_blank'); $row = new CRow(array(new CCol(S_SHOW_VALUE), new CCol(array($cmbMap, SPACE, $link)))); $row->setAttribute('id', 'row_valuemap'); $frmItem->addRow($row); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'valuemapid'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'row_valuemap'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_FLOAT, 'valuemap_name'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'valuemapid'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'row_valuemap'); zbx_subarray_push($valueTypeVisibility, ITEM_VALUE_TYPE_UINT64, 'valuemap_name'); $row = new CRow(array(new CCol(S_ALLOWED_HOSTS, 'form_row_l'), new CCol(new CTextBox('trapper_hosts', $trapper_hosts, 40), 'form_row_r'))); $row->setAttribute('id', 'row_trapper_hosts'); $frmItem->addRow($row); zbx_subarray_push($typeVisibility, ITEM_TYPE_TRAPPER, 'trapper_hosts'); zbx_subarray_push($typeVisibility, ITEM_TYPE_TRAPPER, 'row_trapper_hosts'); $new_app = new CTextBox('new_application', $new_application, 40); $frmItem->addRow(S_NEW_APPLICATION, $new_app, 'new'); $cmbApps = new CListBox('applications[]', $applications, 6); $cmbApps->addItem(0, '-' . S_NONE . '-'); $sql = 'SELECT DISTINCT applicationid,name ' . ' FROM applications ' . ' WHERE hostid=' . $hostid . ' ORDER BY name'; $db_applications = DBselect($sql); while ($db_app = DBfetch($db_applications)) { $cmbApps->addItem($db_app['applicationid'], $db_app['name']); } $frmItem->addRow(S_APPLICATIONS, $cmbApps); $frmRow = array(new CButton('save', S_SAVE)); if (isset($_REQUEST['itemid'])) { array_push($frmRow, SPACE, new CButton('clone', S_CLONE)); if (!isset($limited)) { array_push($frmRow, SPACE, new CButtonDelete(S_DELETE_SELECTED_ITEM_Q, url_param('form') . url_param('groupid') . url_param('itemid'))); } } array_push($frmRow, SPACE, new CButtonCancel(url_param('groupid'))); $frmItem->addSpanRow($frmRow, 'form_row_last'); // GROUP OPERATIONS $cmbGroups = new CComboBox('add_groupid', $add_groupid); $groups = CHostGroup::get(array('editable' => 1, 'output' => API_OUTPUT_EXTEND)); order_result($groups, 'name'); foreach ($groups as $group) { $cmbGroups->addItem($group['groupid'], get_node_name_by_elid($group['groupid'], null, ': ') . $group['name']); } $frmItem->addRow(S_GROUP, $cmbGroups); $cmbAction = new CComboBox('action'); $cmbAction->addItem('add to group', S_ADD_TO_GROUP); if (isset($_REQUEST['itemid'])) { $cmbAction->addItem('update in group', S_UPDATE_IN_GROUP); $cmbAction->addItem('delete FROM group', S_DELETE_FROM_GROUP); } $frmItem->addItemToBottomRow(array($cmbAction, SPACE, new CButton('register', S_DO))); $json = new CJSON(); zbx_add_post_js("var valueTypeSwitcher = new CViewSwitcher('value_type', 'change', " . zbx_jsvalue($valueTypeVisibility, true) . ");"); zbx_add_post_js("var authTypeSwitcher = new CViewSwitcher('authtype', 'change', " . zbx_jsvalue($authTypeVisibility, true) . ");"); zbx_add_post_js("var typeSwitcher = new CViewSwitcher('type', 'change', " . zbx_jsvalue($typeVisibility, true) . (isset($_REQUEST['itemid']) ? ', true' : '') . ');'); zbx_add_post_js("var securityLevelSwitcher = new CViewSwitcher('snmpv3_securitylevel', 'change', " . zbx_jsvalue($securityLevelVisibility, true) . ");"); zbx_add_post_js("var multpStat = document.getElementById('multiplier'); if(multpStat && multpStat.onclick) multpStat.onclick();"); zbx_add_post_js("var mnFrmTbl = document.getElementById('web.items.item.php'); if(mnFrmTbl) mnFrmTbl.style.visibility = 'visible';"); return $frmItem; }
/** * Update map. * * @param array $maps multidimensional array with Hosts data * @param string $maps['sysmapid'] * @param string $maps['name'] * @param array $maps['width'] * @param int $maps['height'] * @param string $maps['backgroundid'] * @param array $maps['label_type'] * @param int $maps['label_location'] * @param int $maps['grid_size'] size of one grid cell. 100 refers to 100x100 and so on. * @param int $maps['grid_show'] does grid need to be shown. Constants: SYSMAP_GRID_SHOW_ON / SYSMAP_GRID_SHOW_OFF * @param int $maps['grid_align'] do elements need to be aligned to the grid. Constants: SYSMAP_GRID_ALIGN_ON / SYSMAP_GRID_ALIGN_OFF * * @return array */ public function update(array $maps) { $maps = zbx_toArray($maps); $sysmapids = zbx_objectValues($maps, 'sysmapid'); $db_maps = $this->get(['output' => API_OUTPUT_EXTEND, 'sysmapids' => zbx_objectValues($maps, 'sysmapid'), 'selectLinks' => API_OUTPUT_EXTEND, 'selectSelements' => API_OUTPUT_EXTEND, 'selectUrls' => ['sysmapid', 'sysmapurlid', 'name', 'url'], 'selectUsers' => ['sysmapuserid', 'sysmapid', 'userid', 'permission'], 'selectUserGroups' => ['sysmapusrgrpid', 'sysmapid', 'usrgrpid', 'permission'], 'editable' => true, 'preservekeys' => true]); $this->validateUpdate($maps, $db_maps); $update_maps = []; $url_ids_to_delete = []; $urls_to_update = []; $urls_to_add = []; $selements_to_delete = []; $selements_to_update = []; $selements_to_add = []; $links_to_delete = []; $links_to_update = []; $links_to_add = []; $shared_userids_to_delete = []; $shared_users_to_update = []; $shared_users_to_add = []; $shared_user_groupids_to_delete = []; $shared_user_groups_to_update = []; $shared_user_groups_to_add = []; foreach ($maps as $map) { $update_maps[] = ['values' => $map, 'where' => ['sysmapid' => $map['sysmapid']]]; $db_map = $db_maps[$map['sysmapid']]; // Map user shares. if (array_key_exists('users', $map)) { $user_shares_diff = zbx_array_diff($map['users'], $db_map['users'], 'userid'); foreach ($user_shares_diff['both'] as $update_user_share) { $shared_users_to_update[] = ['values' => $update_user_share, 'where' => ['userid' => $update_user_share['userid'], 'sysmapid' => $map['sysmapid']]]; } foreach ($user_shares_diff['first'] as $new_shared_user) { $new_shared_user['sysmapid'] = $map['sysmapid']; $shared_users_to_add[] = $new_shared_user; } $shared_userids_to_delete = array_merge($shared_userids_to_delete, zbx_objectValues($user_shares_diff['second'], 'sysmapuserid')); } // Map user group shares. if (array_key_exists('userGroups', $map)) { $user_group_shares_diff = zbx_array_diff($map['userGroups'], $db_map['userGroups'], 'usrgrpid'); foreach ($user_group_shares_diff['both'] as $update_user_share) { $shared_user_groups_to_update[] = ['values' => $update_user_share, 'where' => ['usrgrpid' => $update_user_share['usrgrpid'], 'sysmapid' => $map['sysmapid']]]; } foreach ($user_group_shares_diff['first'] as $new_shared_user_group) { $new_shared_user_group['sysmapid'] = $map['sysmapid']; $shared_user_groups_to_add[] = $new_shared_user_group; } $shared_user_groupids_to_delete = array_merge($shared_user_groupids_to_delete, zbx_objectValues($user_group_shares_diff['second'], 'sysmapusrgrpid')); } // Urls. if (array_key_exists('urls', $map)) { $url_diff = zbx_array_diff($map['urls'], $db_map['urls'], 'name'); foreach ($url_diff['both'] as $updateUrl) { $urls_to_update[] = ['values' => $updateUrl, 'where' => ['name' => $updateUrl['name'], 'sysmapid' => $map['sysmapid']]]; } foreach ($url_diff['first'] as $new_url) { $new_url['sysmapid'] = $map['sysmapid']; $urls_to_add[] = $new_url; } $url_ids_to_delete = array_merge($url_ids_to_delete, zbx_objectValues($url_diff['second'], 'sysmapurlid')); } // Map elements. if (array_key_exists('selements', $map)) { $selement_diff = zbx_array_diff($map['selements'], $db_map['selements'], 'selementid'); // We need sysmapid for add operations. foreach ($selement_diff['first'] as $new_selement) { $new_selement['sysmapid'] = $map['sysmapid']; $selements_to_add[] = $new_selement; } $selements_to_update = array_merge($selements_to_update, $selement_diff['both']); $selements_to_delete = array_merge($selements_to_delete, $selement_diff['second']); } // Links. if (array_key_exists('links', $map)) { $link_diff = zbx_array_diff($map['links'], $db_map['links'], 'linkid'); // We need sysmapId for add operations. foreach ($link_diff['first'] as $newLink) { $newLink['sysmapid'] = $map['sysmapid']; $links_to_add[] = $newLink; } $links_to_update = array_merge($links_to_update, $link_diff['both']); $links_to_delete = array_merge($links_to_delete, $link_diff['second']); } } DB::update('sysmaps', $update_maps); // User shares. DB::insert('sysmap_user', $shared_users_to_add); DB::update('sysmap_user', $shared_users_to_update); if ($shared_userids_to_delete) { DB::delete('sysmap_user', ['sysmapuserid' => $shared_userids_to_delete]); } // User group shares. DB::insert('sysmap_usrgrp', $shared_user_groups_to_add); DB::update('sysmap_usrgrp', $shared_user_groups_to_update); if ($shared_user_groupids_to_delete) { DB::delete('sysmap_usrgrp', ['sysmapusrgrpid' => $shared_user_groupids_to_delete]); } // Urls. DB::insert('sysmap_url', $urls_to_add); DB::update('sysmap_url', $urls_to_update); if ($url_ids_to_delete) { DB::delete('sysmap_url', ['sysmapurlid' => $url_ids_to_delete]); } // Selements. $new_selementids = ['selementids' => []]; if ($selements_to_add) { $new_selementids = $this->createSelements($selements_to_add); } if ($selements_to_update) { $this->updateSelements($selements_to_update); } if ($selements_to_delete) { $this->deleteSelements($selements_to_delete); } // Links. if ($links_to_add || $links_to_update) { $selements_names = []; foreach ($new_selementids['selementids'] as $key => $selementId) { $selements_names[$selements_to_add[$key]['selementid']] = $selementId; } foreach ($selements_to_update as $selement) { $selements_names[$selement['selementid']] = $selement['selementid']; } foreach ($links_to_add as $key => $link) { if (array_key_exists($link['selementid1'], $selements_names)) { $links_to_add[$key]['selementid1'] = $selements_names[$link['selementid1']]; } if (array_key_exists($link['selementid2'], $selements_names)) { $links_to_add[$key]['selementid2'] = $selements_names[$link['selementid2']]; } } foreach ($links_to_update as $key => $link) { if (array_key_exists($link['selementid1'], $selements_names)) { $links_to_update[$key]['selementid1'] = $selements_names[$link['selementid1']]; } if (array_key_exists($link['selementid2'], $selements_names)) { $links_to_update[$key]['selementid2'] = $selements_names[$link['selementid2']]; } } unset($selements_names); } $new_linkids = ['linkids' => []]; $update_linkids = ['linkids' => []]; if ($links_to_add) { $new_linkids = $this->createLinks($links_to_add); } if ($links_to_update) { $update_linkids = $this->updateLinks($links_to_update); } if ($links_to_delete) { $this->deleteLinks($links_to_delete); } // Link triggers. $link_triggers_to_delete = []; $link_triggers_to_update = []; $link_triggers_to_add = []; foreach ($new_linkids['linkids'] as $key => $linkid) { if (!array_key_exists('linktriggers', $links_to_add[$key])) { continue; } foreach ($links_to_add[$key]['linktriggers'] as $link_trigger) { $link_trigger['linkid'] = $linkid; $link_triggers_to_add[] = $link_trigger; } } $db_links = []; $link_trigger_resource = DBselect('SELECT slt.* FROM sysmaps_link_triggers slt WHERE ' . dbConditionInt('slt.linkid', $update_linkids['linkids'])); while ($db_link_trigger = DBfetch($link_trigger_resource)) { zbx_subarray_push($db_links, $db_link_trigger['linkid'], $db_link_trigger); } foreach ($update_linkids['linkids'] as $key => $linkid) { if (!array_key_exists('linktriggers', $links_to_update[$key])) { continue; } $db_link_triggers = array_key_exists($linkid, $db_links) ? $db_links[$linkid] : []; $db_link_triggers_diff = zbx_array_diff($links_to_update[$key]['linktriggers'], $db_link_triggers, 'linktriggerid'); foreach ($db_link_triggers_diff['first'] as $new_link_trigger) { $new_link_trigger['linkid'] = $linkid; $link_triggers_to_add[] = $new_link_trigger; } $link_triggers_to_update = array_merge($link_triggers_to_update, $db_link_triggers_diff['both']); $link_triggers_to_delete = array_merge($link_triggers_to_delete, $db_link_triggers_diff['second']); } if ($link_triggers_to_delete) { $this->deleteLinkTriggers($link_triggers_to_delete); } if ($link_triggers_to_add) { $this->createLinkTriggers($link_triggers_to_add); } if ($link_triggers_to_update) { $this->updateLinkTriggers($link_triggers_to_update); } return ['sysmapids' => $sysmapids]; }