Exemplo n.º 1
0
function validate_expression($expression)
{
    global $ZBX_TR_EXPR_ALLOWED_MACROS, $ZBX_TR_EXPR_REPLACE_TO, $ZBX_TR_EXPR_ALLOWED_FUNCTIONS;
    if (empty($expression)) {
        error('Expression can\'t be empty');
    }
    $expr = $expression;
    $h_status = array();
    /* Replace all {server:key.function(param)} and {MACRO} with '$ZBX_TR_EXPR_REPLACE_TO' */
    while (ereg(ZBX_EREG_EXPRESSION_TOKEN_FORMAT, $expr, $arr)) {
        if ($arr[ZBX_EXPRESSION_MACRO_ID] && !isset($ZBX_TR_EXPR_ALLOWED_MACROS[$arr[ZBX_EXPRESSION_MACRO_ID]])) {
            error('Unknown macro [' . $arr[ZBX_EXPRESSION_MACRO_ID] . ']');
            return false;
        } else {
            if (!$arr[ZBX_EXPRESSION_MACRO_ID]) {
                $host =& $arr[ZBX_EXPRESSION_SIMPLE_EXPRESSION_ID + ZBX_SIMPLE_EXPRESSION_HOST_ID];
                $key =& $arr[ZBX_EXPRESSION_SIMPLE_EXPRESSION_ID + ZBX_SIMPLE_EXPRESSION_KEY_ID];
                $function =& $arr[ZBX_EXPRESSION_SIMPLE_EXPRESSION_ID + ZBX_SIMPLE_EXPRESSION_FUNCTION_NAME_ID];
                $parameter =& $arr[ZBX_EXPRESSION_SIMPLE_EXPRESSION_ID + ZBX_SIMPLE_EXPRESSION_FUNCTION_PARAM_ID];
                /* Check host */
                $sql = 'SELECT COUNT(*) as cnt,min(status) as status,min(hostid) as hostid ' . ' FROM hosts h ' . ' WHERE h.host=' . zbx_dbstr($host) . ' AND ' . DBin_node('h.hostid', get_current_nodeid(false)) . ' AND status IN (' . HOST_STATUS_MONITORED . ',' . HOST_STATUS_NOT_MONITORED . ',' . HOST_STATUS_TEMPLATE . ') ';
                $row = DBfetch(DBselect($sql));
                if ($row['cnt'] == 0) {
                    error('No such host (' . $host . ')');
                    return false;
                } else {
                    if ($row['cnt'] != 1) {
                        error('Too many hosts (' . $host . ')');
                        return false;
                    }
                }
                $h_status[$row['status']][$row['hostid']] = $row['cnt'];
                /* Check key */
                $sql = 'SELECT i.itemid,i.value_type ' . ' FROM hosts h,items i ' . ' WHERE h.host=' . zbx_dbstr($host) . ' AND i.key_=' . zbx_dbstr($key) . ' AND h.hostid=i.hostid ' . ' AND ' . DBin_node('h.hostid', get_current_nodeid(false));
                if (!($item = DBfetch(DBselect($sql)))) {
                    error('No such monitored parameter (' . $key . ') for host (' . $host . ')');
                    return false;
                }
                /* Check function */
                if (!isset($ZBX_TR_EXPR_ALLOWED_FUNCTIONS[$function])) {
                    error('Unknown function [' . $function . ']');
                    return false;
                }
                $fnc_valid =& $ZBX_TR_EXPR_ALLOWED_FUNCTIONS[$function];
                if (is_array($fnc_valid['item_types']) && !uint_in_array($item['value_type'], $fnc_valid['item_types'])) {
                    $allowed_types = array();
                    foreach ($fnc_valid['item_types'] as $type) {
                        $allowed_types[] = item_value_type2str($type);
                    }
                    info('Function (' . $function . ') available only for items with value types [' . implode(',', $allowed_types) . ']');
                    error('Incorrect value type [' . item_value_type2str($item['value_type']) . '] for function (' . $function . ') of key (' . $host . ':' . $key . ')');
                    return false;
                }
                if (!is_null($fnc_valid['args'])) {
                    $parameter = zbx_get_params($parameter);
                    if (!is_array($fnc_valid['args'])) {
                        $fnc_valid['args'] = array($fnc_valid['args']);
                    }
                    foreach ($fnc_valid['args'] as $pid => $params) {
                        if (!isset($parameter[$pid])) {
                            if (!isset($params['mandat'])) {
                                continue;
                            } else {
                                error('Missed mandatory parameter for function (' . $function . ')');
                                return false;
                            }
                        }
                        if ('sec' == $params['type'] && validate_float($parameter[$pid]) != 0) {
                            error('[' . $parameter[$pid] . '] is not a float for function (' . $function . ')');
                            return false;
                        }
                        if ('sec_num' == $params['type'] && validate_ticks($parameter[$pid]) != 0) {
                            error('[' . $parameter[$pid] . '] is not a float or counter for function (' . $function . ')');
                            return false;
                        }
                    }
                }
            }
        }
        $expr = $arr[ZBX_EXPRESSION_LEFT_ID] . $ZBX_TR_EXPR_REPLACE_TO . $arr[ZBX_EXPRESSION_RIGHT_ID];
    }
    if (isset($h_status[HOST_STATUS_TEMPLATE]) && (count($h_status) > 1 || count($h_status[HOST_STATUS_TEMPLATE]) > 1)) {
        error("Incorrect trigger expression. You can't use template hosts" . " in mixed expressions.");
        return false;
    }
    /* Replace all calculations and numbers with '$ZBX_TR_EXPR_REPLACE_TO' */
    $expt_number = '(' . $ZBX_TR_EXPR_REPLACE_TO . '|' . ZBX_EREG_NUMBER . ')';
    $expt_term = '((\\(' . $expt_number . '\\))|(' . $expt_number . '))';
    $expr_format = '((' . $expt_term . ZBX_EREG_SPACES . ZBX_EREG_SIGN . ZBX_EREG_SPACES . $expt_term . ')|(\\(' . $expt_term . '\\)))';
    $expr_full_format = '((\\(' . $expr_format . '\\))|(' . $expr_format . '))';
    while ($res = ereg($expr_full_format . '([[:print:]]*)$', $expr, $arr)) {
        $expr = substr($expr, 0, strpos($expr, $arr[1])) . $ZBX_TR_EXPR_REPLACE_TO . $arr[58];
    }
    if ($ZBX_TR_EXPR_REPLACE_TO != $expr) {
        error('Incorrect trigger expression. [' . str_replace($ZBX_TR_EXPR_REPLACE_TO, ' ... ', $expr) . ']');
        return false;
    }
    return true;
}
Exemplo n.º 2
0
function insert_item_form()
{
    global $USER_DETAILS;
    $frmItem = new CFormTable(S_ITEM, 'items.php', 'post');
    $frmItem->SetHelp('web.items.item.php');
    $frmItem->addVar('config', get_request('config', 0));
    if ($_REQUEST['groupid'] > 0) {
        $frmItem->addVar('groupid', $_REQUEST['groupid']);
    }
    $frmItem->addVar('hostid', $_REQUEST['hostid']);
    $frmItem->addVar('applications_visible', 1);
    $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', 'DSN=<database source name>\\n' . 'user=<user name>\\n' . 'password=<password>\\n' . 'sql=<query>');
    $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', '');
    $formula = get_request('formula', '1');
    $logtimefmt = get_request('logtimefmt', '');
    $add_groupid = get_request('add_groupid', get_request('groupid', 0));
    $limited = null;
    if ('' == $key && $type == ITEM_TYPE_DB_MONITOR) {
        $key = 'db.odbc.select[<unique short description>]';
    }
    if (is_null($host)) {
        $host_info = get_host_by_hostid($_REQUEST['hostid']);
        $host = $host_info['host'];
    }
    if (isset($_REQUEST['itemid'])) {
        $frmItem->addVar('itemid', $_REQUEST['itemid']);
        $item_data = DBfetch(DBselect('SELECT i.*, h.host, h.hostid ' . ' FROM items i,hosts h ' . ' WHERE i.itemid=' . $_REQUEST['itemid'] . ' AND h.hostid=i.hostid'));
        $limited = $item_data['templateid'] == 0 && $item_data['type'] != ITEM_TYPE_HTTPTEST ? null : 'yes';
    }
    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'];
        $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(array_merge($applications, get_applications_by_itemid($_REQUEST['itemid'])));
        }
    }
    $delay_flex_el = array();
    if ($type != ITEM_TYPE_TRAPPER && $type != ITEM_TYPE_HTTPTEST) {
        $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[]', 'no', null, $i), $val['delay'], ' sec at ', $val['period']), BR());
            $frmItem->addVar('delay_flex[' . $i . '][delay]', $val['delay']);
            $frmItem->addVar('delay_flex[' . $i . '][period]', $val['period']);
            $i++;
            if ($i >= 7) {
                break;
            }
            /* limit count of  intervals
             * 7 intervals by 30 symbols = 210 characters
             * db storage field is 256
             */
        }
    }
    if (count($delay_flex_el) == 0) {
        array_push($delay_flex_el, S_NO_FLEXIBLE_INTERVALS);
    } else {
        array_push($delay_flex_el, new CButton('del_delay_flex', 'delete selected'));
    }
    if (count($applications) == 0) {
        array_push($applications, 0);
    }
    if (isset($_REQUEST['itemid'])) {
        $frmItem->SetTitle(S_ITEM . " '{$host}:" . $item_data["description"] . "'");
    } else {
        $frmItem->SetTitle(S_ITEM . " '{$host}:{$description}'");
    }
    $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, 'submit()');
        foreach (array(ITEM_TYPE_ZABBIX, ITEM_TYPE_ZABBIX_ACTIVE, ITEM_TYPE_SIMPLE, ITEM_TYPE_SNMPV1, ITEM_TYPE_SNMPV2C, ITEM_TYPE_SNMPV3, ITEM_TYPE_TRAPPER, ITEM_TYPE_INTERNAL, ITEM_TYPE_AGGREGATE, ITEM_TYPE_EXTERNAL, ITEM_TYPE_DB_MONITOR, ITEM_TYPE_IPMI) as $it) {
            $cmbType->addItem($it, item_type2str($it));
        }
        $frmItem->addRow(S_TYPE, $cmbType);
    }
    if ($type == ITEM_TYPE_SNMPV1 || $type == ITEM_TYPE_SNMPV2C) {
        $frmItem->addVar('snmpv3_securityname', $snmpv3_securityname);
        $frmItem->addVar('snmpv3_securitylevel', $snmpv3_securitylevel);
        $frmItem->addVar('snmpv3_authpassphrase', $snmpv3_authpassphrase);
        $frmItem->addVar('snmpv3_privpassphrase', $snmpv3_privpassphrase);
        $frmItem->addRow(S_SNMP_COMMUNITY, new CTextBox('snmp_community', $snmp_community, 16, $limited));
        $frmItem->addRow(S_SNMP_OID, new CTextBox('snmp_oid', $snmp_oid, 40, $limited));
        $frmItem->addRow(S_SNMP_PORT, new CNumericBox('snmp_port', $snmp_port, 5, $limited));
    } else {
        if ($type == ITEM_TYPE_SNMPV3) {
            $frmItem->addVar('snmp_community', $snmp_community);
            $frmItem->addRow(S_SNMP_OID, new CTextBox('snmp_oid', $snmp_oid, 40, $limited));
            $frmItem->addRow(S_SNMPV3_SECURITY_NAME, new CTextBox('snmpv3_securityname', $snmpv3_securityname, 64, $limited));
            if (isset($limited)) {
                $frmItem->addVar('snmpv3_securitylevel', $snmpv3_securitylevel);
                switch ($snmpv3_securitylevel) {
                    case ITEM_SNMPV3_SECURITYLEVEL_NOAUTHNOPRIV:
                        $snmpv3_securitylevel = 'NoAuthPriv';
                        break;
                    case ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV:
                        $snmpv3_securitylevel = 'AuthNoPriv';
                        break;
                    case ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV:
                        $snmpv3_securitylevel = 'AuthPriv';
                        break;
                }
                $frmItem->addRow(S_SNMPV3_SECURITY_LEVEL, new CTextBox('snmpv3_securitylevel_desc', $snmpv3_securitylevel, $limited));
            } else {
                $cmbSecLevel = new CComboBox('snmpv3_securitylevel', $snmpv3_securitylevel);
                $cmbSecLevel->addItem(ITEM_SNMPV3_SECURITYLEVEL_NOAUTHNOPRIV, 'NoAuthPriv');
                $cmbSecLevel->addItem(ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV, 'AuthNoPriv');
                $cmbSecLevel->addItem(ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV, 'AuthPriv');
                $frmItem->addRow(S_SNMPV3_SECURITY_LEVEL, $cmbSecLevel);
            }
            $frmItem->addRow(S_SNMPV3_AUTH_PASSPHRASE, new CTextBox('snmpv3_authpassphrase', $snmpv3_authpassphrase, 64, $limited));
            $frmItem->addRow(S_SNMPV3_PRIV_PASSPHRASE, new CTextBox('snmpv3_privpassphrase', $snmpv3_privpassphrase, 64, $limited));
            $frmItem->addRow(S_SNMP_PORT, new CNumericBox('snmp_port', $snmp_port, 5, $limited));
        } else {
            $frmItem->addVar('snmp_community', $snmp_community);
            $frmItem->addVar('snmp_oid', $snmp_oid);
            $frmItem->addVar('snmp_port', $snmp_port);
            $frmItem->addVar('snmpv3_securityname', $snmpv3_securityname);
            $frmItem->addVar('snmpv3_securitylevel', $snmpv3_securitylevel);
            $frmItem->addVar('snmpv3_authpassphrase', $snmpv3_authpassphrase);
            $frmItem->addVar('snmpv3_privpassphrase', $snmpv3_privpassphrase);
        }
    }
    if ($type == ITEM_TYPE_IPMI) {
        $frmItem->addRow(S_IPMI_SENSOR, new CTextBox('ipmi_sensor', $ipmi_sensor, 64, $limited));
    } else {
        $frmItem->addVar('ipmi_sensor', $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));
    if (ITEM_TYPE_DB_MONITOR == $type) {
        $frmItem->addRow(S_PARAMS, new CTextArea('params', $params, 60, 4));
    } else {
        $frmItem->addVar('params', $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, 'submit()');
        $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 ($value_type == ITEM_VALUE_TYPE_UINT64) {
        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, 'submit()');
            $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));
        }
        $frmItem->addRow(S_DATA_TYPE, $cmbDataType);
    } else {
        $frmItem->addVar('data_type', $data_type);
    }
    if ($value_type == ITEM_VALUE_TYPE_FLOAT || $value_type == ITEM_VALUE_TYPE_UINT64) {
        $frmItem->addRow(S_UNITS, new CTextBox('units', $units, 40, $limited));
        if (isset($limited)) {
            $frmItem->addVar('multiplier', $multiplier);
            $cmbMultipler = new CTextBox('multiplier_name', $multiplier ? S_CUSTOM_MULTIPLIER : S_DO_NOT_USE, 20, 'yes');
        } else {
            $cmbMultipler = new CComboBox('multiplier', $multiplier, 'submit()');
            $cmbMultipler->addItem(0, S_DO_NOT_USE);
            $cmbMultipler->addItem(1, S_CUSTOM_MULTIPLIER);
        }
        $frmItem->addRow(S_USE_MULTIPLIER, $cmbMultipler);
    } else {
        $frmItem->addVar('units', $units);
        $frmItem->addVar('multiplier', $multiplier);
    }
    if (!is_numeric($formula)) {
        $formula = 1;
    }
    if ($multiplier == 1) {
        $frmItem->addRow(S_CUSTOM_MULTIPLIER, new CTextBox('formula', $formula, 40, $limited));
    } else {
        $frmItem->addVar('formula', $formula);
    }
    if ($type != ITEM_TYPE_TRAPPER && $type != ITEM_TYPE_HTTPTEST) {
        $frmItem->addRow(S_UPDATE_INTERVAL_IN_SEC, new CNumericBox('delay', $delay, 5));
        $frmItem->addRow(S_FLEXIBLE_INTERVALS, $delay_flex_el);
        $frmItem->addRow(S_NEW_FLEXIBLE_INTERVAL, 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)), 'new');
    } else {
        $frmItem->addVar('delay', $delay);
        $frmItem->addVar('delay_flex', null);
    }
    $frmItem->addRow(S_KEEP_HISTORY_IN_DAYS, array(new CNumericBox('history', $history, 8), !isset($_REQUEST['itemid']) ? null : new CButtonQMessage('del_history', S_CLEAN_HISTORY, S_HISTORY_CLEANING_CAN_TAKE_A_LONG_TIME_CONTINUE_Q)));
    if (uint_in_array($value_type, array(ITEM_VALUE_TYPE_FLOAT, ITEM_VALUE_TYPE_UINT64))) {
        $frmItem->addRow(S_KEEP_TRENDS_IN_DAYS, new CNumericBox('trends', $trends, 8));
    } else {
        $frmItem->addVar('trends', 0);
    }
    $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);
    if ($value_type == ITEM_VALUE_TYPE_LOG) {
        $frmItem->addRow(S_LOG_TIME_FORMAT, new CTextBox('logtimefmt', $logtimefmt, 16, $limited));
    } else {
        $frmItem->addVar('logtimefmt', $logtimefmt);
    }
    if ($value_type == ITEM_VALUE_TYPE_FLOAT || $value_type == ITEM_VALUE_TYPE_UINT64) {
        $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);
        $frmItem->addRow(S_STORE_VALUE, $cmbDelta);
    } else {
        $frmItem->addVar('delta', 0);
    }
    if ($value_type == ITEM_VALUE_TYPE_UINT64 || $value_type == ITEM_VALUE_TYPE_STR) {
        if (isset($limited) && $type != ITEM_TYPE_HTTPTEST) {
            $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']) . $db_valuemap['name']);
            }
        }
        $link = new CLink('throw map', 'config.php?config=6', 'action');
        $link->addOption('target', '_blank');
        $frmItem->addRow(array(S_SHOW_VALUE . SPACE, $link), $cmbMap);
    } else {
        $frmItem->addVar('valuemapid', 0);
    }
    if ($type == ITEM_TYPE_TRAPPER) {
        $frmItem->addRow(S_ALLOWED_HOSTS, new CTextBox('trapper_hosts', $trapper_hosts, 40, $limited));
    } else {
        $frmItem->addVar('trapper_hosts', $trapper_hosts);
    }
    if ($type == ITEM_TYPE_HTTPTEST) {
        $app_names = get_applications_by_itemid($_REQUEST['itemid'], 'name');
        $frmItem->addRow(S_APPLICATIONS, new CTextBox('application_name', isset($app_names[0]) ? $app_names[0] : '', 20, $limited));
        $frmItem->addVar('applications', $applications, 6);
    } else {
        $new_app = new CTextBox('new_application', $new_application, 40);
        $frmItem->addRow(S_NEW_APPLICATION, $new_app);
        $cmbApps = new CListBox('applications[]', $applications, 6);
        $cmbApps->addItem(0, '-' . S_NONE . '-');
        $db_applications = DBselect('SELECT DISTINCT applicationid,name ' . ' FROM applications ' . ' WHERE hostid=' . $_REQUEST['hostid'] . ' ORDER BY name');
        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('Delete selected item?', url_param('form') . url_param('groupid') . url_param('hostid') . url_param('config') . url_param('itemid')));
        }
    }
    array_push($frmRow, SPACE, new CButtonCancel(url_param('groupid') . url_param('hostid') . url_param('config')));
    $frmItem->addSpanRow($frmRow, 'form_row_last');
    $cmbGroups = new CComboBox('add_groupid', $add_groupid);
    $available_groups = get_accessible_groups_by_user($USER_DETAILS, PERM_READ_ONLY);
    $groups = DBselect('SELECT DISTINCT groupid,name ' . ' FROM groups ' . ' WHERE ' . DBcondition('groupid', $available_groups) . ' ORDER BY name');
    while ($group = DBfetch($groups)) {
        $cmbGroups->addItem($group['groupid'], get_node_name_by_elid($group['groupid']) . $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($cmbAction);
    $frmItem->addItemToBottomRow(SPACE);
    $frmItem->addItemToBottomRow(new CButton('register', 'do'));
    $frmItem->Show();
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
0
         $sql .= ' AND h.hostid=' . $hostid;
     }
     $sql .= ' ORDER BY h.host, i.description, i.key_, i.itemid';
     $result = DBselect($sql);
     while ($row = DBfetch($result)) {
         $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : '';
         $row['description'] = item_description($row);
         $description = new CLink($row['description'], '#', 'action');
         $row['description'] = $row['node_name'] . $row['host'] . ':' . $row['description'];
         if (isset($_REQUEST['reference']) && $_REQUEST['reference'] == 'dashboard') {
             $action = get_window_opener($dstfrm, $dstfld1, $srctbl) . get_window_opener($dstfrm, $dstfld2, $row[$srcfld2]) . "window.opener.setTimeout('add2favorites();', 1000);";
         } else {
             $action = get_window_opener($dstfrm, $dstfld1, $row[$srcfld1]) . get_window_opener($dstfrm, $dstfld2, $row[$srcfld2]);
         }
         $description->SetAction($action . ' close_window(); return false;');
         $table->addRow(array($hostid > 0 ? null : $row['host'], $description, item_type2str($row['type']), item_value_type2str($row['value_type']), new CSpan(item_status2str($row['status']), item_status2style($row['status']))));
     }
     $table->Show();
 } else {
     if ('slides' == $srctbl) {
         require_once 'include/screens.inc.php';
         $table = new CTableInfo(S_NO_NODES_DEFINED);
         $table->SetHeader(S_NAME);
         $result = DBselect('select slideshowid,name from slideshows where ' . DBin_node('slideshowid', $nodeid) . ' ORDER BY name');
         while ($row = DBfetch($result)) {
             if (!slideshow_accessible($row['slideshowid'], PERM_READ_ONLY)) {
                 continue;
             }
             $name = new CLink($row['name'], '#', 'action');
             if (isset($_REQUEST['reference']) && $_REQUEST['reference'] == 'dashboard') {
                 $action = get_window_opener($dstfrm, $dstfld1, $srcfld2) . get_window_opener($dstfrm, $dstfld2, $row[$srcfld2]) . "window.opener.setTimeout('add2favorites();', 1000);";
Exemplo n.º 5
0
function showExpressionErrors($expression, $errors)
{
    if (!is_array($errors)) {
        return false;
    }
    $totalBreak = false;
    foreach ($errors as $errData) {
        $checkExprFrom = S_CHECK_EXPRESSION_PART_STARTING_FROM_PART1 . SPACE . zbx_substr($expression, $errData['errStart']) . SPACE . S_CHECK_EXPRESSION_PART_STARTING_FROM_PART2;
        switch ($errData['errorCode']) {
            case 1:
                error(S_EXPRESSION_UNEXPECTED_END_OF_ELEMENT_ERROR . ':' . SPACE . $checkExprFrom);
                $totalBreak = true;
                break;
            case 2:
                error(S_EXPRESSION_NOT_ALLOWED_SYMBOLS_OR_SEQUENCE_ERROR . ':' . SPACE . $checkExprFrom);
                break;
            case 3:
                error(S_EXPRESSION_UNNECESSARY_SYMBOLS_DETECTED_ERROR . ':' . SPACE . $checkExprFrom);
                break;
            case 4:
                error(S_EXPRESSION_NOT_ALLOWED_SYMBOLS_BEFORE_ERROR . ':' . SPACE . $checkExprFrom);
                break;
            case 5:
                error(S_EXPRESSION_NOT_ALLOWED_SYMBOLS_AFTER_ERROR . ':' . SPACE . $checkExprFrom);
                break;
            case 6:
                error(S_EXPRESSION_NOT_ALLOWED_VALUE_IN_ELEMENT_ERROR . ':' . SPACE . $checkExprFrom);
                break;
            case 7:
                error(S_EXPRESSION_NOT_ALLOWED_SYMBOLS_OR_SEQUENCE_ERROR . ':' . SPACE . $checkExprFrom);
                break;
            case 8:
                error(S_EXPRESSION_HOST_DOES_NOT_EXISTS_ERROR . SPACE . $checkExprFrom);
                break;
            case 9:
                error(S_EXPRESSION_HOST_KEY_DOES_NOT_ERROR . SPACE . $checkExprFrom);
                break;
            case 10:
                info(S_FUNCTION . SPACE . '(' . $errData['function'] . ')' . SPACE . S_AVAILABLE_ONLY_FOR_ITEMS_WITH_VALUE_TYPES_SMALL . SPACE . '[' . implode(',', $errData['validTypes']) . ']');
                error(S_INCORRECT_VALUE_TYPE . SPACE . '[' . item_value_type2str($errData['value_type']) . ']' . SPACE . S_FOR_FUNCTION_SMALL . SPACE . '(' . $errData['function'] . ').' . SPACE . $checkExprFrom);
                break;
            case 11:
                error(S_MISSING_MANDATORY_PARAMETER_FOR_FUNCTION . SPACE . '(' . $errData['function'] . ').' . SPACE . $checkExprFrom);
                break;
            case 12:
                error('[' . $errData['errValue'] . ']' . SPACE . S_NOT_FLOAT_OR_MACRO_FOR_FUNCTION_SMALL . SPACE . '(' . $errData['function'] . ').' . SPACE . $checkExprFrom);
                break;
            case 13:
                error('[' . $errData['errValue'] . ']' . SPACE . S_NOT_FLOAT_OR_MACRO_OR_COUNTER_FOR_FUNCTION_SMALL . SPACE . '(' . $errData['function'] . ').' . SPACE . $checkExprFrom);
                break;
            case 14:
                error(S_EXPRESSION_FUNCTION_DOES_NOT_ACCEPTS_PARAMS_ERROR_PART1 . SPACE . $errData['function'] . SPACE . S_EXPRESSION_FUNCTION_DOES_NOT_ACCEPTS_PARAMS_ERROR_PART2 . SPACE . $checkExprFrom);
                break;
            case 15:
                error(S_INCORRECT_TRIGGER_EXPRESSION . '.' . SPACE . S_YOU_CAN_NOT_USE_TEMPLATE_HOSTS_MIXED_EXPR . SPACE . $checkExprFrom);
                break;
            case 16:
                error(S_INCORRECT_TRIGGER_EXPRESSION . '.' . SPACE . S_TRIGGER_EXPRESSION_HOST_DOES_NOT_EXISTS_ERROR . SPACE . $checkExprFrom);
                break;
        }
        if ($totalBreak) {
            break;
        }
    }
}