} if ($page['type'] == PAGE_TYPE_JS || $page['type'] == PAGE_TYPE_HTML_BLOCK) { require_once dirname(__FILE__) . '/include/page_footer.php'; exit; } /* * Actions */ if (isset($_REQUEST['add_delay_flex']) && isset($_REQUEST['new_delay_flex'])) { $timePeriodValidator = new CTimePeriodValidator(array('allowMultiple' => false)); $_REQUEST['delay_flex'] = get_request('delay_flex', array()); if ($timePeriodValidator->validate($_REQUEST['new_delay_flex']['period'])) { array_push($_REQUEST['delay_flex'], $_REQUEST['new_delay_flex']); unset($_REQUEST['new_delay_flex']); } else { error($timePeriodValidator->getError()); show_messages(false, null, _('Invalid time period')); } } elseif (isset($_REQUEST['delete']) && isset($_REQUEST['itemid'])) { $result = API::DiscoveryRule()->delete($_REQUEST['itemid']); show_messages($result, _('Discovery rule deleted'), _('Cannot delete discovery rule')); unset($_REQUEST['itemid'], $_REQUEST['form']); clearCookies($result, $_REQUEST['hostid']); } elseif (isset($_REQUEST['clone']) && isset($_REQUEST['itemid'])) { unset($_REQUEST['itemid']); $_REQUEST['form'] = 'clone'; } elseif (isset($_REQUEST['save'])) { $delay_flex = get_request('delay_flex', array()); $db_delay_flex = ''; foreach ($delay_flex as $val) { $db_delay_flex .= $val['delay'] . '/' . $val['period'] . ';';
/** * Returns true if the given $value is valid, or set's an error and returns false otherwise. * * * @param $condition * * @return bool */ public function validate($condition) { // build validators $timePeriodValidator = new CTimePeriodValidator(); $discoveryCheckTypeValidator = new CLimitedSetValidator(array('values' => array_keys(discovery_check_type2str()))); $discoveryObjectStatusValidator = new CLimitedSetValidator(array('values' => array_keys(discovery_object_status2str()))); $triggerSeverityValidator = new CLimitedSetValidator(array('values' => array(TRIGGER_SEVERITY_NOT_CLASSIFIED, TRIGGER_SEVERITY_INFORMATION, TRIGGER_SEVERITY_WARNING, TRIGGER_SEVERITY_AVERAGE, TRIGGER_SEVERITY_HIGH, TRIGGER_SEVERITY_DISASTER))); $discoveryObjectValidator = new CLimitedSetValidator(array('values' => array_keys(discovery_object2str()))); $triggerValueValidator = new CLimitedSetValidator(array('values' => array_keys(trigger_value2str()))); $eventTypeValidator = new CLimitedSetValidator(array('values' => array_keys(eventType()))); $conditionValue = $condition['value']; // validate condition values depending on condition type switch ($condition['conditiontype']) { case CONDITION_TYPE_HOST_GROUP: if (!$conditionValue) { $this->setError(_('Empty action condition.')); } break; case CONDITION_TYPE_TEMPLATE: if (!$conditionValue) { $this->setError(_('Empty action condition.')); } break; case CONDITION_TYPE_TRIGGER: if (!$conditionValue) { $this->setError(_('Empty action condition.')); } break; case CONDITION_TYPE_HOST: if (!$conditionValue) { $this->setError(_('Empty action condition.')); } break; case CONDITION_TYPE_DRULE: if (!$conditionValue) { $this->setError(_('Empty action condition.')); } break; case CONDITION_TYPE_DCHECK: if (!$conditionValue) { $this->setError(_('Empty action condition.')); } break; case CONDITION_TYPE_PROXY: if (!$conditionValue) { $this->setError(_('Empty action condition.')); } break; case CONDITION_TYPE_DOBJECT: if (zbx_empty($conditionValue)) { $this->setError(_('Empty action condition.')); } elseif (!$discoveryObjectValidator->validate($conditionValue)) { $this->setError(_('Incorrect action condition discovery object.')); } break; case CONDITION_TYPE_TIME_PERIOD: if (!$timePeriodValidator->validate($conditionValue)) { $this->setError($timePeriodValidator->getError()); } break; case CONDITION_TYPE_DHOST_IP: $ipRangeValidator = new CIPRangeValidator(); if (zbx_empty($conditionValue)) { $this->setError(_('Empty action condition.')); } elseif (!$ipRangeValidator->validate($conditionValue)) { $this->setError($ipRangeValidator->getError()); } break; case CONDITION_TYPE_DSERVICE_TYPE: if (zbx_empty($conditionValue)) { $this->setError(_('Empty action condition.')); } elseif (!$discoveryCheckTypeValidator->validate($conditionValue)) { $this->setError(_('Incorrect action condition discovery check.')); } break; case CONDITION_TYPE_DSERVICE_PORT: if (zbx_empty($conditionValue)) { $this->setError(_('Empty action condition.')); } elseif (!validate_port_list($conditionValue)) { $this->setError(_s('Incorrect action condition port "%1$s".', $conditionValue)); } break; case CONDITION_TYPE_DSTATUS: if (zbx_empty($conditionValue)) { $this->setError(_('Empty action condition.')); } elseif (!$discoveryObjectStatusValidator->validate($conditionValue)) { $this->setError(_('Incorrect action condition discovery status.')); } break; case CONDITION_TYPE_MAINTENANCE: if (!zbx_empty($conditionValue)) { $this->setError(_('Maintenance action condition value must be empty.')); } break; case CONDITION_TYPE_TRIGGER_SEVERITY: if (zbx_empty($conditionValue)) { $this->setError(_('Empty action condition.')); } elseif (!$triggerSeverityValidator->validate($conditionValue)) { $this->setError(_('Incorrect action condition trigger severity.')); } break; case CONDITION_TYPE_TRIGGER_VALUE: if (zbx_empty($conditionValue)) { $this->setError(_('Empty action condition.')); } elseif (!$triggerValueValidator->validate($conditionValue)) { $this->setError(_('Incorrect action condition trigger value.')); } break; case CONDITION_TYPE_EVENT_TYPE: if (zbx_empty($conditionValue)) { $this->setError(_('Empty action condition.')); } elseif (!$eventTypeValidator->validate($conditionValue)) { $this->setError(_('Incorrect action condition event type.')); } break; case CONDITION_TYPE_TRIGGER_NAME: case CONDITION_TYPE_DUPTIME: case CONDITION_TYPE_DVALUE: case CONDITION_TYPE_APPLICATION: case CONDITION_TYPE_HOST_NAME: case CONDITION_TYPE_HOST_METADATA: if (zbx_empty($conditionValue)) { $this->setError(_('Empty action condition.')); } break; default: $this->setError(_('Incorrect action condition type.')); } // If no error is not set, return true. return !(bool) $this->getError(); }
/** * Validate flexible intervals. * Flexible intervals is string with format: * 'delay/day1-day2,time1-time2;interval2;interval3;...' (day2 is optional) * Examples: * 600/5-7,00:00-09:00;600/1-2,00:00-09:00 * 600/5,0:0-9:0;600/1-2,0:0-9:0 * * @param array $item * * @return bool */ protected function checkDelayFlex(array $item) { if (array_key_exists('delay_flex', $item)) { $delayFlex = $item['delay_flex']; if (!is_string($delayFlex)) { self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect flexible interval in item "%1$s". Flexible interval must be a string.', $item['name'])); } if ($delayFlex === '') { return true; } $validator = new CTimePeriodValidator(); $intervals = explode(';', rtrim($delayFlex, ';')); foreach ($intervals as $interval) { if (!preg_match('#^\\d+/(.+)$#', $interval, $matches)) { self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect flexible interval "%1$s".', $interval)); } if (!$validator->validate($matches[1])) { self::exception(ZBX_API_ERROR_PARAMETERS, $validator->getError()); } } } }
// VAR TYPE OPTIONAL FLAGS VALIDATION EXCEPTION $fields = array('dstfrm' => array(T_ZBX_STR, O_MAND, P_SYS, NOT_EMPTY, NULL), 'media' => array(T_ZBX_INT, O_OPT, P_SYS, NULL, NULL), 'mediatypeid' => array(T_ZBX_INT, O_OPT, P_SYS, DB_ID, 'isset({add})'), 'sendto' => array(T_ZBX_STR, O_OPT, NULL, NOT_EMPTY, 'isset({add})'), 'period' => array(T_ZBX_STR, O_OPT, NULL, NOT_EMPTY, 'isset({add})'), 'active' => array(T_ZBX_STR, O_OPT, NULL, NOT_EMPTY, 'isset({add})'), 'severity' => array(T_ZBX_INT, O_OPT, NULL, NOT_EMPTY, NULL), 'add' => array(T_ZBX_STR, O_OPT, P_SYS | P_ACT, NULL, NULL), 'form' => array(T_ZBX_STR, O_OPT, P_SYS, NULL, NULL), 'form_refresh' => array(T_ZBX_STR, O_OPT, NULL, NULL, NULL)); check_fields($fields); insert_js_function('add_media'); if (isset($_REQUEST['add'])) { $validator = new CTimePeriodValidator(); if ($validator->validate($_REQUEST['period'])) { $severity = 0; $_REQUEST['severity'] = get_request('severity', array()); foreach ($_REQUEST['severity'] as $id) { $severity |= 1 << $id; } echo '<script type="text/javascript"> add_media("' . $_REQUEST['dstfrm'] . '",' . $_REQUEST['media'] . ',' . zbx_jsvalue($_REQUEST['mediatypeid']) . ',' . CJs::encodeJson($_REQUEST['sendto']) . ',"' . $_REQUEST['period'] . '",' . $_REQUEST['active'] . ',' . $severity . ');' . '</script>'; } else { error($validator->getError()); } } if (isset($_REQUEST['media']) && !isset($_REQUEST['form_refresh'])) { $rq_severity = get_request('severity', 63); $severity = array(); for ($i = 0; $i < TRIGGER_SEVERITY_COUNT; $i++) { if ($rq_severity & 1 << $i) { $severity[$i] = $i; } } } else { $severity = get_request('severity', array(0, 1, 2, 3, 4, 5)); } $media = get_request('media', -1); $sendto = get_request('sendto', '');
/** * Validate conditions. * * @static * * @param array $conditions * @param int $conditions['conditiontype'] * @param array $conditions['value'] * * @return bool */ public static function validateConditions($conditions, $update = false) { $conditions = zbx_toArray($conditions); $hostGroupIdsAll = array(); $templateIdsAll = array(); $triggerIdsAll = array(); $hostIdsAll = array(); $discoveryRuleIdsAll = array(); $proxyIdsAll = array(); $proxyidsAll = array(); // build validators $timePeriodValidator = new CTimePeriodValidator(); $discoveryCheckTypeValidator = new CSetValidator(array('values' => array_keys(discovery_check_type2str()))); $discoveryObjectStatusValidator = new CSetValidator(array('values' => array_keys(discovery_object_status2str()))); $triggerSeverityValidator = new CSetValidator(array('values' => array_keys(getSeverityCaption()))); $discoveryObjectValidator = new CSetValidator(array('values' => array_keys(discovery_object2str()))); $triggerValueValidator = new CSetValidator(array('values' => array_keys(trigger_value2str()))); $eventTypeValidator = new CSetValidator(array('values' => array_keys(eventType()))); foreach ($conditions as $condition) { // on create operator is mandatory and needs validation, but on update it must be validated only if it's set if (!$update || $update && isset($condition['operator'])) { $operatorValidator = new CSetValidator(array('values' => get_operators_by_conditiontype($condition['conditiontype']))); if (!$operatorValidator->validate($condition['operator'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition operator.')); } } if (!$update || $update && isset($condition['value'])) { // validate condition values depending on condition type switch ($condition['conditiontype']) { case CONDITION_TYPE_HOST_GROUP: if (!$condition['value']) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } $hostGroupIdsAll[$condition['value']] = $condition['value']; break; case CONDITION_TYPE_TEMPLATE: if (!$condition['value']) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } $templateIdsAll[$condition['value']] = $condition['value']; break; case CONDITION_TYPE_TRIGGER: if (!$condition['value']) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } $triggerIdsAll[$condition['value']] = $condition['value']; break; case CONDITION_TYPE_HOST: if (!$condition['value']) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } $hostIdsAll[$condition['value']] = $condition['value']; break; case CONDITION_TYPE_DRULE: if (!$condition['value']) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } $discoveryRuleIdsAll[$condition['value']] = $condition['value']; break; case CONDITION_TYPE_DCHECK: if (!$condition['value']) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } $proxyIdsAll[$condition['value']] = $condition['value']; break; case CONDITION_TYPE_PROXY: if (!$condition['value']) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } $proxyidsAll[$condition['value']] = $condition['value']; break; case CONDITION_TYPE_DOBJECT: if (zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } elseif (!$discoveryObjectValidator->validate($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery object.')); } break; case CONDITION_TYPE_TIME_PERIOD: if (!$timePeriodValidator->validate($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, $timePeriodValidator->getError()); } break; case CONDITION_TYPE_DHOST_IP: if (zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } else { if (!validate_ip_range($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect action condition ip "%1$s".', $condition['value'])); } } break; case CONDITION_TYPE_DSERVICE_TYPE: if (zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } elseif (!$discoveryCheckTypeValidator->validate($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery check.')); } break; case CONDITION_TYPE_DSERVICE_PORT: if (zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } elseif (!validate_port_list($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect action condition port "%1$s".', $condition['value'])); } break; case CONDITION_TYPE_DSTATUS: if (zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } elseif (!$discoveryObjectStatusValidator->validate($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery status.')); } break; case CONDITION_TYPE_MAINTENANCE: if (!zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Maintenance action condition value must be empty.')); } break; case CONDITION_TYPE_TRIGGER_SEVERITY: if (zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } elseif (!$triggerSeverityValidator->validate($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition trigger severity.')); } break; case CONDITION_TYPE_TRIGGER_VALUE: if (zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } elseif (!$triggerValueValidator->validate($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition trigger value.')); } break; case CONDITION_TYPE_EVENT_TYPE: if (zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } elseif (!$eventTypeValidator->validate($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition event type.')); } break; case CONDITION_TYPE_TRIGGER_NAME: case CONDITION_TYPE_NODE: case CONDITION_TYPE_DUPTIME: case CONDITION_TYPE_DVALUE: case CONDITION_TYPE_APPLICATION: case CONDITION_TYPE_HOST_NAME: case CONDITION_TYPE_HOST_METADATA: if (zbx_empty($condition['value'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.')); } break; default: self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition type.')); break; } } } if (!API::HostGroup()->isWritable($hostGroupIdsAll)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition host group. Host group does not exist or you have no access to it.')); } if (!API::Host()->isWritable($hostIdsAll)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition host. Host does not exist or you have no access to it.')); } if (!API::Template()->isWritable($templateIdsAll)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition template. Template does not exist or you have no access to it.')); } if (!API::Trigger()->isWritable($triggerIdsAll)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition trigger. Trigger does not exist or you have no access to it.')); } if (!API::DRule()->isWritable($discoveryRuleIdsAll)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery rule. Discovery rule does not exist or you have no access to it.')); } if (!API::DCheck()->isWritable($proxyIdsAll)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery check. Discovery check does not exist or you have no access to it.')); } if (!API::Proxy()->isWritable($proxyidsAll)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition proxy. Proxy does not exist or you have no access to it.')); } return true; }
/** * Validate update user media. * * @throws APIException if the input is invalid * * @param array $data['users'] * @param string $data['users']['userid'] * @param array $data['medias'] * @param string $data['medias']['mediatypeid'] * @param string $data['medias']['address'] * @param int $data['medias']['severity'] * @param int $data['medias']['active'] * @param string $data['medias']['period'] */ protected function validateUpdateMedia(array $data) { if (self::$userData['type'] < USER_TYPE_ZABBIX_ADMIN) { self::exception(ZBX_API_ERROR_PERMISSIONS, _('Only Zabbix Admins can change user media.')); } if (!isset($data['users']) || !isset($data['medias'])) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Invalid method parameters.')); } $users = zbx_toArray($data['users']); $media = zbx_toArray($data['medias']); // validate user permissions if (!$this->isWritable(zbx_objectValues($users, 'userid'))) { self::exception(ZBX_API_ERROR_PARAMETERS, _('No permissions to referred object or it does not exist!')); } // validate media permissions $mediaIds = array(); foreach ($media as $mediaItem) { if (isset($mediaItem['mediaid'])) { $mediaIds[$mediaItem['mediaid']] = $mediaItem['mediaid']; } } if ($mediaIds) { $dbUserMediaCount = API::UserMedia()->get(array('countOutput' => true, 'mediaids' => $mediaIds, 'editable' => true)); if ($dbUserMediaCount != count($mediaIds)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('No permissions to referred object or it does not exist!')); } } // validate media parameters $mediaDBfields = array('period' => null, 'mediatypeid' => null, 'sendto' => null, 'active' => null, 'severity' => null); $timePeriodValidator = new CTimePeriodValidator(); foreach ($media as $mediaItem) { if (!check_db_fields($mediaDBfields, $mediaItem)) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Invalid method parameters.')); } if (!$timePeriodValidator->validate($mediaItem['period'])) { self::exception(ZBX_API_ERROR_PARAMETERS, $timePeriodValidator->getError()); } } }
/** * Update Medias for User * * @param array $mediaData * @param array $mediaData['users'] * @param array $mediaData['users']['userid'] * @param array $mediaData['medias'] * @param string $mediaData['medias']['mediatypeid'] * @param string $mediaData['medias']['sendto'] * @param int $mediaData['medias']['severity'] * @param int $mediaData['medias']['active'] * @param string $mediaData['medias']['period'] * @return boolean */ public function updateMedia($mediaData) { $newMedias = zbx_toArray($mediaData['medias']); $users = zbx_toArray($mediaData['users']); if (self::$userData['type'] < USER_TYPE_ZABBIX_ADMIN) { self::exception(ZBX_API_ERROR_PERMISSIONS, _('Only Zabbix Admins can change user media.')); } $updMedias = array(); $delMedias = array(); $userids = zbx_objectValues($users, 'userid'); $result = DBselect('SELECT m.mediaid' . ' FROM media m' . ' WHERE ' . dbConditionInt('userid', $userids)); while ($media = DBfetch($result)) { $delMedias[$media['mediaid']] = $media; } foreach ($newMedias as $mnum => $media) { if (!isset($media['mediaid'])) { continue; } if (isset($delMedias[$media['mediaid']])) { $updMedias[$media['mediaid']] = $newMedias[$mnum]; } unset($newMedias[$mnum]); unset($delMedias[$media['mediaid']]); } // delete if (!empty($delMedias)) { $mediaids = zbx_objectValues($delMedias, 'mediaid'); $result = $this->deleteMedia($mediaids); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Cannot delete user media.')); } } // update $timePeriodValidator = new CTimePeriodValidator(); foreach ($updMedias as $media) { if (!$timePeriodValidator->validate($media['period'])) { self::exception(ZBX_API_ERROR_PARAMETERS, $timePeriodValidator->getError()); } $result = DBexecute('UPDATE media' . ' SET mediatypeid=' . zbx_dbstr($media['mediatypeid']) . ',' . ' sendto=' . zbx_dbstr($media['sendto']) . ',' . ' active=' . zbx_dbstr($media['active']) . ',' . ' severity=' . zbx_dbstr($media['severity']) . ',' . ' period=' . zbx_dbstr($media['period']) . ' WHERE mediaid=' . zbx_dbstr($media['mediaid'])); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Cannot update user media.')); } } // create if (!empty($newMedias)) { $result = $this->addMedia(array('users' => $users, 'medias' => $newMedias)); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, _('Cannot insert user media.')); } } return array('userids' => $userids); }
function check_type(&$field, $flags, &$var, $type, $caption = null) { if ($caption === null) { $caption = $field; } if (is_array($var)) { $err = ZBX_VALID_OK; foreach ($var as $v) { $err |= check_type($field, $flags, $v, $type); } return $err; } $error = false; $message = ''; if ($type == T_ZBX_INT) { if (!zbx_is_int($var)) { $error = true; $message = _s('Field "%1$s" is not integer.', $caption); } } elseif ($type == T_ZBX_DBL) { $decimalValidator = new CDecimalValidator(['maxPrecision' => 16, 'maxScale' => 4, 'messageInvalid' => _('Value "%2$s" of "%1$s" has incorrect decimal format.'), 'messagePrecision' => _('Value "%2$s" of "%1$s" is too long: it cannot have more than %3$s digits before the decimal point ' . 'and more than %4$s digits after the decimal point.'), 'messageNatural' => _('Value "%2$s" of "%1$s" has too many digits before the decimal point: ' . 'it cannot have more than %3$s digits.'), 'messageScale' => _('Value "%2$s" of "%1$s" has too many digits after the decimal point: ' . 'it cannot have more than %3$s digits.')]); $decimalValidator->setObjectName($caption); if (!$decimalValidator->validate($var)) { $error = true; $message = $decimalValidator->getError(); } } elseif ($type == T_ZBX_DBL_BIG) { $decimalValidator = new CDecimalValidator(['maxScale' => 4, 'messageInvalid' => _('Value "%2$s" of "%1$s" has incorrect decimal format.'), 'messageScale' => _('Value "%2$s" of "%1$s" has too many digits after the decimal point: ' . 'it cannot have more than %3$s digits.')]); $decimalValidator->setObjectName($caption); if (!$decimalValidator->validate($var)) { $error = true; $message = $decimalValidator->getError(); } } elseif ($type == T_ZBX_DBL_STR) { $decimalStringValidator = new CDecimalStringValidator(['messageInvalid' => _('Value "%2$s" of "%1$s" has incorrect decimal format.')]); $decimalStringValidator->setObjectName($caption); if (!$decimalStringValidator->validate($var)) { $error = true; $message = $decimalStringValidator->getError(); } } elseif ($type == T_ZBX_STR) { if (!is_string($var)) { $error = true; $message = _s('Field "%1$s" is not string.', $caption); } } elseif ($type == T_ZBX_CLR) { $colorValidator = new CColorValidator(); if (!$colorValidator->validate($var)) { $error = true; $message = _s('Colour "%1$s" is not correct: expecting hexadecimal colour code (6 symbols).', $caption); } } elseif ($type == T_ZBX_TP) { $timePeriodValidator = new CTimePeriodValidator(); if (!$timePeriodValidator->validate($var)) { $error = true; $message = _s('Field "%1$s" is not correct: %2$s', $caption, $timePeriodValidator->getError()); } } if ($error) { if ($flags & P_SYS) { error($message); return ZBX_VALID_ERROR; } else { info($message); return ZBX_VALID_WARNING; } } return ZBX_VALID_OK; }