Esempio n. 1
0
 /**
  * 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;
Esempio n. 3
0
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'));
?>
);
Esempio n. 7
0
    $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();
Esempio n. 8
0
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;
}
Esempio n. 9
0
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;
}
Esempio n. 10
0
 /**
  * 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];
 }