Example #1
0
 * Ajax
 */
if (isset($_REQUEST['favobj'])) {
    if ($_REQUEST['favobj'] == 'filter') {
        CProfile::update('web.host_discovery.filter.state', $_REQUEST['favstate'], PROFILE_TYPE_INT);
    }
}
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']);
Example #2
0
function update_config($configs)
{
    $update = array();
    if (isset($configs['work_period'])) {
        $timePeriodValidator = new CTimePeriodValidator();
        if (!$timePeriodValidator->validate($configs['work_period'])) {
            error(_('Incorrect working time.'));
            return false;
        }
    }
    if (isset($configs['alert_usrgrpid'])) {
        if ($configs['alert_usrgrpid'] != 0 && !DBfetch(DBselect('SELECT u.usrgrpid FROM usrgrp u WHERE u.usrgrpid=' . zbx_dbstr($configs['alert_usrgrpid'])))) {
            error(_('Incorrect user group.'));
            return false;
        }
    }
    if (isset($configs['discovery_groupid'])) {
        $groupid = API::HostGroup()->get(array('groupids' => $configs['discovery_groupid'], 'output' => array('groupid'), 'preservekeys' => true));
        if (empty($groupid)) {
            error(_('Incorrect host group.'));
            return false;
        }
    }
    // checking color values to be correct hexadecimal numbers
    $colors = array('severity_color_0', 'severity_color_1', 'severity_color_2', 'severity_color_3', 'severity_color_4', 'severity_color_5', 'problem_unack_color', 'problem_ack_color', 'ok_unack_color', 'ok_ack_color');
    $colorvalidator = new CColorValidator();
    foreach ($colors as $color) {
        if (isset($configs[$color]) && !is_null($configs[$color])) {
            if (!$colorvalidator->validate($configs[$color])) {
                error($colorvalidator->getError());
                return false;
            }
        }
    }
    if (isset($configs['ok_period']) && !is_null($configs['ok_period']) && !ctype_digit($configs['ok_period'])) {
        error(_('"Display OK triggers" needs to be "0" or a positive integer.'));
        return false;
    }
    if (isset($configs['blink_period']) && !is_null($configs['blink_period']) && !ctype_digit($configs['blink_period'])) {
        error(_('"Triggers blink on status change" needs to be "0" or a positive integer.'));
        return false;
    }
    $currentConfig = select_config();
    // check duplicate severity names and if name is empty.
    $names = array();
    for ($i = 0; $i < TRIGGER_SEVERITY_COUNT; $i++) {
        $varName = 'severity_name_' . $i;
        if (!isset($configs[$varName]) || is_null($configs[$varName])) {
            $configs[$varName] = $currentConfig[$varName];
        }
        if ($configs[$varName] == '') {
            error(_('Severity name cannot be empty.'));
            return false;
        }
        if (isset($names[$configs[$varName]])) {
            error(_s('Duplicate severity name "%s".', $configs[$varName]));
            return false;
        } else {
            $names[$configs[$varName]] = 1;
        }
    }
    foreach ($configs as $key => $value) {
        if (!is_null($value)) {
            if ($key == 'alert_usrgrpid') {
                $update[] = $key . '=' . ($value == '0' ? 'NULL' : $value);
            } else {
                $update[] = $key . '=' . zbx_dbstr($value);
            }
        }
    }
    if (count($update) == 0) {
        error(_('Nothing to do.'));
        return null;
    }
    return DBexecute('UPDATE config' . ' SET ' . implode(',', $update) . whereDbNode('configid', false));
}
Example #3
0
 /**
  * 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());
             }
         }
     }
 }
require_once dirname(__FILE__) . '/include/triggers.inc.php';
require_once dirname(__FILE__) . '/include/forms.inc.php';
require_once dirname(__FILE__) . '/include/js.inc.php';
$page['title'] = _('Media');
$page['file'] = 'popup_media.php';
define('ZBX_PAGE_NO_MENU', 1);
require_once dirname(__FILE__) . '/include/page_header.php';
if ($USER_DETAILS['alias'] == ZBX_GUEST_USER) {
    access_deny();
}
//		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();
 /**
  * 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();
 }
Example #6
0
 /**
  * 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;
 }
Example #7
0
 /**
  * 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());
         }
     }
 }
Example #8
0
 /**
  * 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);
 }
 /**
  * Validate conditions.
  *
  * @static
  * @param $conditions
  * @return bool
  */
 public static function validateConditions($conditions)
 {
     $conditions = zbx_toArray($conditions);
     $hostGroupidsAll = array();
     $templateidsAll = array();
     $triggeridsAll = array();
     $hostidsAll = array();
     $discoveryRuleidsAll = array();
     $discoveryCheckidsAll = array();
     $proxyidsAll = array();
     $discoveryCheckTypes = discovery_check_type2str();
     $discoveryObjectStatuses = discovery_object_status2str();
     $timePeriodValidator = new CTimePeriodValidator();
     foreach ($conditions as $condition) {
         switch ($condition['conditiontype']) {
             case CONDITION_TYPE_HOST_GROUP:
                 $hostGroupidsAll[$condition['value']] = $condition['value'];
                 break;
             case CONDITION_TYPE_HOST_TEMPLATE:
                 $templateidsAll[$condition['value']] = $condition['value'];
                 break;
             case CONDITION_TYPE_TRIGGER:
                 $triggeridsAll[$condition['value']] = $condition['value'];
                 break;
             case CONDITION_TYPE_HOST:
                 $hostidsAll[$condition['value']] = $condition['value'];
                 break;
             case CONDITION_TYPE_DRULE:
                 $discoveryRuleidsAll[$condition['value']] = $condition['value'];
                 break;
             case CONDITION_TYPE_DCHECK:
                 $discoveryCheckidsAll[$condition['value']] = $condition['value'];
                 break;
             case CONDITION_TYPE_PROXY:
                 $proxyidsAll[$condition['value']] = $condition['value'];
                 break;
             case CONDITION_TYPE_TIME_PERIOD:
                 if (!$timePeriodValidator->validate($condition['value'])) {
                     self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect action condition period "%s".', $condition['value']));
                 }
                 break;
             case CONDITION_TYPE_DHOST_IP:
                 if (!validate_ip_range($condition['value'])) {
                     self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect action condition ip "%s".', $condition['value']));
                 }
                 break;
             case CONDITION_TYPE_DSERVICE_TYPE:
                 if (!isset($discoveryCheckTypes[$condition['value']])) {
                     self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery check.'));
                 }
                 break;
             case CONDITION_TYPE_DSERVICE_PORT:
                 if (!validate_port_list($condition['value'])) {
                     self::exception(ZBX_API_ERROR_PARAMETERS, _s('Incorrect action condition port "%s".', $condition['value']));
                 }
                 break;
             case CONDITION_TYPE_DSTATUS:
                 if (!isset($discoveryObjectStatuses[$condition['value']])) {
                     self::exception(ZBX_API_ERROR_PARAMETERS, _('Incorrect action condition discovery status.'));
                 }
                 break;
             case CONDITION_TYPE_MAINTENANCE:
                 // maintenance condition has no value...
                 break;
             case CONDITION_TYPE_TRIGGER_NAME:
             case CONDITION_TYPE_TRIGGER_VALUE:
             case CONDITION_TYPE_TRIGGER_SEVERITY:
             case CONDITION_TYPE_NODE:
             case CONDITION_TYPE_DOBJECT:
             case CONDITION_TYPE_DUPTIME:
             case CONDITION_TYPE_DVALUE:
             case CONDITION_TYPE_APPLICATION:
             case CONDITION_TYPE_HOST_NAME:
                 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($discoveryCheckidsAll)) {
         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;
 }
Example #10
0
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;
}