1416
1454
$proxyIdsAll = array();
1417
1455
$proxyidsAll = array();
1419
$discoveryCheckTypes = discovery_check_type2str();
1420
$discoveryObjectStatuses = discovery_object_status2str();
1421
1458
$timePeriodValidator = new CTimePeriodValidator();
1459
$discoveryCheckTypeValidator = new CSetValidator(array(
1460
'values' => array_keys(discovery_check_type2str())
1462
$discoveryObjectStatusValidator = new CSetValidator(array(
1463
'values' => array_keys(discovery_object_status2str())
1465
$triggerSeverityValidator = new CSetValidator(array(
1466
'values' => array_keys(getSeverityCaption())
1468
$discoveryObjectValidator = new CSetValidator(array(
1469
'values' => array_keys(discovery_object2str())
1471
$triggerValueValidator = new CSetValidator(array(
1472
'values' => array_keys(trigger_value2str())
1474
$eventTypeValidator = new CSetValidator(array(
1475
'values' => array_keys(eventType())
1423
1478
foreach ($conditions as $condition) {
1424
switch ($condition['conditiontype']) {
1425
case CONDITION_TYPE_HOST_GROUP:
1426
$hostGroupIdsAll[$condition['value']] = $condition['value'];
1429
case CONDITION_TYPE_TEMPLATE:
1430
$templateIdsAll[$condition['value']] = $condition['value'];
1433
case CONDITION_TYPE_TRIGGER:
1434
$triggerIdsAll[$condition['value']] = $condition['value'];
1437
case CONDITION_TYPE_HOST:
1438
$hostIdsAll[$condition['value']] = $condition['value'];
1441
case CONDITION_TYPE_DRULE:
1442
$discoveryRuleIdsAll[$condition['value']] = $condition['value'];
1445
case CONDITION_TYPE_DCHECK:
1446
$proxyIdsAll[$condition['value']] = $condition['value'];
1449
case CONDITION_TYPE_PROXY:
1450
$proxyidsAll[$condition['value']] = $condition['value'];
1453
case CONDITION_TYPE_TIME_PERIOD:
1454
if (!$timePeriodValidator->validate($condition['value'])) {
1455
self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect action condition period "%s".', $condition['value']));
1459
case CONDITION_TYPE_DHOST_IP:
1460
if (!validate_ip_range($condition['value'])) {
1461
self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect action condition ip "%s".', $condition['value']));
1465
case CONDITION_TYPE_DSERVICE_TYPE:
1466
if (!isset($discoveryCheckTypes[$condition['value']])) {
1467
self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery check.'));
1471
case CONDITION_TYPE_DSERVICE_PORT:
1472
if (!validate_port_list($condition['value'])) {
1473
self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect action condition port "%s".', $condition['value']));
1477
case CONDITION_TYPE_DSTATUS:
1478
if (!isset($discoveryObjectStatuses[$condition['value']])) {
1479
self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery status.'));
1483
case CONDITION_TYPE_MAINTENANCE:
1484
// maintenance condition has no value...
1487
case CONDITION_TYPE_TRIGGER_NAME:
1488
case CONDITION_TYPE_TRIGGER_VALUE:
1489
case CONDITION_TYPE_TRIGGER_SEVERITY:
1490
case CONDITION_TYPE_NODE:
1491
case CONDITION_TYPE_DOBJECT:
1492
case CONDITION_TYPE_DUPTIME:
1493
case CONDITION_TYPE_DVALUE:
1494
case CONDITION_TYPE_APPLICATION:
1495
case CONDITION_TYPE_HOST_NAME:
1496
case CONDITION_TYPE_HOST_METADATA:
1497
case CONDITION_TYPE_EVENT_TYPE:
1498
if (zbx_empty($condition['value'])) {
1499
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1504
self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition type.'));
1479
// on create operator is mandatory and needs validation, but on update it must be validated only if it's set
1480
if (!$update || ($update && isset($condition['operator']))) {
1481
$operatorValidator = new CSetValidator(array(
1482
'values' => get_operators_by_conditiontype($condition['conditiontype'])
1484
if (!$operatorValidator->validate($condition['operator'])) {
1485
self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition operator.'));
1489
if (!$update || ($update && isset($condition['value']))) {
1490
// validate condition values depending on condition type
1491
switch ($condition['conditiontype']) {
1492
case CONDITION_TYPE_HOST_GROUP:
1493
if (!$condition['value']) {
1494
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1496
$hostGroupIdsAll[$condition['value']] = $condition['value'];
1499
case CONDITION_TYPE_TEMPLATE:
1500
if (!$condition['value']) {
1501
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1503
$templateIdsAll[$condition['value']] = $condition['value'];
1506
case CONDITION_TYPE_TRIGGER:
1507
if (!$condition['value']) {
1508
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1510
$triggerIdsAll[$condition['value']] = $condition['value'];
1513
case CONDITION_TYPE_HOST:
1514
if (!$condition['value']) {
1515
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1517
$hostIdsAll[$condition['value']] = $condition['value'];
1520
case CONDITION_TYPE_DRULE:
1521
if (!$condition['value']) {
1522
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1524
$discoveryRuleIdsAll[$condition['value']] = $condition['value'];
1527
case CONDITION_TYPE_DCHECK:
1528
if (!$condition['value']) {
1529
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1531
$proxyIdsAll[$condition['value']] = $condition['value'];
1534
case CONDITION_TYPE_PROXY:
1535
if (!$condition['value']) {
1536
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1538
$proxyidsAll[$condition['value']] = $condition['value'];
1541
case CONDITION_TYPE_DOBJECT:
1542
if (zbx_empty($condition['value'])) {
1543
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1545
elseif (!$discoveryObjectValidator->validate($condition['value'])) {
1546
self::exception(ZBX_API_ERROR_PARAMETERS,
1547
_('Incorrect action condition discovery object.'));
1551
case CONDITION_TYPE_TIME_PERIOD:
1552
if (!$timePeriodValidator->validate($condition['value'])) {
1553
self::exception(ZBX_API_ERROR_PARAMETERS, $timePeriodValidator->getError());
1557
case CONDITION_TYPE_DHOST_IP:
1558
if (zbx_empty($condition['value'])) {
1559
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1561
else if (!validate_ip_range($condition['value'])) {
1562
self::exception(ZBX_API_ERROR_PARAMETERS,
1563
_s('Incorrect action condition ip "%1$s".', $condition['value']));
1567
case CONDITION_TYPE_DSERVICE_TYPE:
1568
if (zbx_empty($condition['value'])) {
1569
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1571
elseif (!$discoveryCheckTypeValidator->validate($condition['value'])) {
1572
self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery check.'));
1576
case CONDITION_TYPE_DSERVICE_PORT:
1577
if (zbx_empty($condition['value'])) {
1578
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1580
elseif (!validate_port_list($condition['value'])) {
1581
self::exception(ZBX_API_ERROR_PARAMETERS,
1582
_s('Incorrect action condition port "%1$s".', $condition['value']));
1586
case CONDITION_TYPE_DSTATUS:
1587
if (zbx_empty($condition['value'])) {
1588
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1590
elseif (!$discoveryObjectStatusValidator->validate($condition['value'])) {
1591
self::exception(ZBX_API_ERROR_PARAMETERS,
1592
_('Incorrect action condition discovery status.'));
1596
case CONDITION_TYPE_MAINTENANCE:
1597
if (!zbx_empty($condition['value'])) {
1598
self::exception(ZBX_API_ERROR_PARAMETERS, _('Maintenance action condition value must be empty.'));
1602
case CONDITION_TYPE_TRIGGER_SEVERITY:
1603
if (zbx_empty($condition['value'])) {
1604
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1606
elseif (!$triggerSeverityValidator->validate($condition['value'])) {
1607
self::exception(ZBX_API_ERROR_PARAMETERS,
1608
_('Incorrect action condition trigger severity.'));
1612
case CONDITION_TYPE_TRIGGER_VALUE:
1613
if (zbx_empty($condition['value'])) {
1614
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1616
elseif (!$triggerValueValidator->validate($condition['value'])) {
1617
self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition trigger value.'));
1621
case CONDITION_TYPE_EVENT_TYPE:
1622
if (zbx_empty($condition['value'])) {
1623
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1625
elseif (!$eventTypeValidator->validate($condition['value'])) {
1626
self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition event type.'));
1630
case CONDITION_TYPE_TRIGGER_NAME:
1631
case CONDITION_TYPE_NODE:
1632
case CONDITION_TYPE_DUPTIME:
1633
case CONDITION_TYPE_DVALUE:
1634
case CONDITION_TYPE_APPLICATION:
1635
case CONDITION_TYPE_HOST_NAME:
1636
case CONDITION_TYPE_HOST_METADATA:
1637
if (zbx_empty($condition['value'])) {
1638
self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty action condition.'));
1643
self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition type.'));