function update_config($configs) { $update = array(); if (isset($configs['work_period']) && !is_null($configs['work_period'])) { if (!validate_period($configs['work_period'])) { error(S_ICORRECT_WORK_PERIOD); return NULL; } } if (isset($configs['alert_usrgrpid']) && !is_null($configs['alert_usrgrpid'])) { if ($configs['alert_usrgrpid'] != 0 && !DBfetch(DBselect('select usrgrpid from usrgrp where usrgrpid=' . $configs['alert_usrgrpid']))) { error(S_INCORRECT_GROUP); return NULL; } } foreach ($configs as $key => $value) { if (!is_null($value)) { $update[] = $key . '=' . zbx_dbstr($value); } } if (count($update) == 0) { error(S_NOTHING_TO_DO); return NULL; } return DBexecute('update config set ' . implode(',', $update) . ' where ' . DBin_node('configid', get_current_nodeid(false))); }
require_once "include/config.inc.php"; require_once "include/triggers.inc.php"; require_once "include/forms.inc.php"; require_once "include/js.inc.php"; $dstfrm = get_request("dstfrm", 0); // destination form $page["title"] = "S_MEDIA"; $page["file"] = "popup_media.php"; define('ZBX_PAGE_NO_MENU', 1); include_once "include/page_header.php"; // 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'])) { if (!validate_period($_REQUEST['period'])) { error("Icorrect time period"); } else { $severity = 0; $_REQUEST['severity'] = get_request('severity', array()); foreach ($_REQUEST['severity'] as $id) { $severity |= 1 << $id; } echo '<script language="JavaScript" type="text/javascript"><!-- add_media("' . $_REQUEST['dstfrm'] . '",' . $_REQUEST['media'] . ',' . $_REQUEST['mediatypeid'] . ',"' . $_REQUEST['sendto'] . '","' . $_REQUEST['period'] . '",' . $_REQUEST['active'] . ',' . $severity . ');' . "\n" . '--></script>'; } } echo SBR; if (isset($_REQUEST['media']) && !isset($_REQUEST['form_refresh'])) { $rq_severity = get_request('severity', 63); $severity = array();
function validate_condition($conditiontype, $value) { global $USER_DETAILS; switch ($conditiontype) { case CONDITION_TYPE_HOST_GROUP: $available_groups = get_accessible_groups_by_user($USER_DETAILS, PERM_READ_ONLY, null, get_current_nodeid(true)); if (!isset($available_groups[$value])) { error(S_INCORRECT_GROUP); return false; } break; case CONDITION_TYPE_HOST_TEMPLATE: $available_hosts = get_accessible_hosts_by_user($USER_DETAILS, PERM_READ_ONLY, null, get_current_nodeid(true)); if (!isset($available_hosts[$value])) { error(S_INCORRECT_HOST); return false; } break; case CONDITION_TYPE_TRIGGER: if (!DBfetch(DBselect('select triggerid from triggers where triggerid=' . $value)) || !check_right_on_trigger_by_triggerid(PERM_READ_ONLY, $value)) { error(S_INCORRECT_TRIGGER); return false; } break; case CONDITION_TYPE_HOST: $available_hosts = get_accessible_hosts_by_user($USER_DETAILS, PERM_READ_ONLY, null, get_current_nodeid(true)); if (!isset($available_hosts[$value])) { error(S_INCORRECT_HOST); return false; } break; case CONDITION_TYPE_TIME_PERIOD: if (!validate_period($value)) { error(S_INCORRECT_PERIOD . ' [' . $value . ']'); return false; } break; case CONDITION_TYPE_DHOST_IP: if (!validate_ip_range($value)) { error(S_INCORRECT_IP . ' [' . $value . ']'); return false; } break; case CONDITION_TYPE_DSERVICE_TYPE: if (S_UNKNOWN == discovery_check_type2str($value)) { error(S_INCORRECT_DISCOVERY_CHECK); return false; } break; case CONDITION_TYPE_DSERVICE_PORT: if (!validate_port_list($value)) { error(S_INCORRECT_PORT . ' [' . $value . ']'); return false; } break; case CONDITION_TYPE_DSTATUS: if (S_UNKNOWN == discovery_object_status2str($value)) { error(S_INCORRECT_DISCOVERY_STATUS); return false; } break; case CONDITION_TYPE_EVENT_ACKNOWLEDGED: if (S_UNKNOWN == condition_value2str($conditiontype, $value)) { error(S_INCORRECT_DISCOVERY_STATUS); return false; } break; case CONDITION_TYPE_TRIGGER_NAME: case CONDITION_TYPE_TRIGGER_VALUE: case CONDITION_TYPE_TRIGGER_SEVERITY: case CONDITION_TYPE_MAINTENANCE: case CONDITION_TYPE_DUPTIME: case CONDITION_TYPE_DVALUE: case CONDITION_TYPE_APPLICATION: break; default: error(S_INCORRECT_CONDITION_TYPE); return false; break; } return true; }
/** * Update Medias for User * * {@source} * @access public * @static * @since 1.8 * @version 1 * * @param array $media_data * @param array $media_data['users'] * @param array $media_data['users']['userid'] * @param array $media_data['medias'] * @param string $media_data['medias']['mediatypeid'] * @param string $media_data['medias']['sendto'] * @param int $media_data['medias']['severity'] * @param int $media_data['medias']['active'] * @param string $media_data['medias']['period'] * @return boolean */ public static function updateMedia($media_data) { global $USER_DETAILS; $new_medias = zbx_toArray($media_data['medias']); $users = zbx_toArray($media_data['users']); try { self::BeginTransaction(__METHOD__); if ($USER_DETAILS['type'] < USER_TYPE_ZABBIX_ADMIN) { self::setError(__METHOD__, ZBX_API_ERROR_PERMISSIONS, S_CUSER_ERROR_ONLY_ADMIN_CAN_CHANGE_USER_MEDIAS); return false; } $upd_medias = array(); $del_medias = array(); $userids = zbx_objectValues($users, 'userid'); $sql = 'SELECT m.mediaid ' . ' FROM media m ' . ' WHERE ' . DBcondition('userid', $userids); $result = DBselect($sql); while ($media = DBfetch($result)) { $del_medias[$media['mediaid']] = $media; } foreach ($new_medias as $mnum => $media) { if (!isset($media['mediaid'])) { continue; } if (isset($del_medias[$media['mediaid']])) { $upd_medias[$media['mediaid']] = $new_medias[$mnum]; } unset($new_medias[$mnum]); unset($del_medias[$media['mediaid']]); } // DELETE if (!empty($del_medias)) { $result = self::deleteMedia($del_medias); if (!$result) { throw new APIException(ZBX_API_ERROR_PARAMETERS, S_CUSER_ERROR_CANT_DELETE_USER_MEDIAS); } } // UPDATE foreach ($upd_medias as $mnum => $media) { if (!validate_period($media['period'])) { throw new APIException(ZBX_API_ERROR_PARAMETERS, S_CUSER_ERROR_WRONG_PERIOD_PART1 . ' ' . $media['period'] . ' ' . S_CUSER_ERROR_WRONG_PERIOD_PART2); } $sql = 'UPDATE media ' . ' SET mediatypeid=' . $media['mediatypeid'] . ',' . ' sendto=' . zbx_dbstr($media['sendto']) . ',' . ' active=' . $media['active'] . ',' . ' severity=' . $media['severity'] . ',' . ' period=' . zbx_dbstr($media['period']) . ' WHERE mediaid=' . $media['mediaid']; $result = DBexecute($sql); if (!$result) { throw new APIException(ZBX_API_ERROR_PARAMETERS, S_CUSER_ERROR_CANT_UPDATE_USER_MEDIAS); } } // CREATE if (!empty($new_medias)) { $result = self::addMedia(array('users' => $users, 'medias' => $new_medias)); if (!$result) { throw new APIException(ZBX_API_ERROR_PARAMETERS, S_CUSER_ERROR_CANT_INSERT_USER_MEDIAS); } } self::EndTransaction(true, __METHOD__); return array('userids' => $userids); } catch (APIException $e) { self::EndTransaction(false, __METHOD__); $error = $e->getErrors(); $error = reset($error); self::setError(__METHOD__, $e->getCode(), $error); return false; } }
function validate_condition($conditiontype, $value) { global $USER_DETAILS; switch ($conditiontype) { case CONDITION_TYPE_HOST_GROUP: $groups = CHostGroup::get(array('groupids' => $value, 'output' => API_OUTPUT_SHORTEN, 'nodeids' => get_current_nodeid(true))); if (empty($groups)) { error(S_INCORRECT_GROUP); return false; } break; case CONDITION_TYPE_HOST_TEMPLATE: $templates = CTemplate::get(array('templateids' => $value, 'output' => API_OUTPUT_SHORTEN, 'nodeids' => get_current_nodeid(true))); if (empty($templates)) { error(S_INCORRECT_HOST); return false; } break; case CONDITION_TYPE_TRIGGER: $triggers = CTrigger::get(array('triggerids' => $value, 'output' => API_OUTPUT_SHORTEN, 'nodeids' => get_current_nodeid(true))); if (empty($triggers)) { error(S_INCORRECT_TRIGGER); return false; } break; case CONDITION_TYPE_HOST: $hosts = CHost::get(array('hostids' => $value, 'output' => API_OUTPUT_SHORTEN, 'nodeids' => get_current_nodeid(true))); if (empty($hosts)) { error(S_INCORRECT_HOST); return false; } break; case CONDITION_TYPE_TIME_PERIOD: if (!validate_period($value)) { error(S_INCORRECT_PERIOD . ' [' . $value . ']'); return false; } break; case CONDITION_TYPE_DHOST_IP: if (!validate_ip_range($value)) { error(S_INCORRECT_IP . ' [' . $value . ']'); return false; } break; case CONDITION_TYPE_DSERVICE_TYPE: if (S_UNKNOWN == discovery_check_type2str($value)) { error(S_INCORRECT_DISCOVERY_CHECK); return false; } break; case CONDITION_TYPE_DSERVICE_PORT: if (!validate_port_list($value)) { error(S_INCORRECT_PORT . ' [' . $value . ']'); return false; } break; case CONDITION_TYPE_DSTATUS: if (S_UNKNOWN == discovery_object_status2str($value)) { error(S_INCORRECT_DISCOVERY_STATUS); return false; } break; case CONDITION_TYPE_EVENT_ACKNOWLEDGED: if (S_UNKNOWN == condition_value2str($conditiontype, $value)) { error(S_INCORRECT_DISCOVERY_STATUS); return false; } break; case CONDITION_TYPE_TRIGGER_NAME: case CONDITION_TYPE_TRIGGER_VALUE: case CONDITION_TYPE_TRIGGER_SEVERITY: case CONDITION_TYPE_MAINTENANCE: case CONDITION_TYPE_NODE: case CONDITION_TYPE_DRULE: case CONDITION_TYPE_DCHECK: case CONDITION_TYPE_DOBJECT: case CONDITION_TYPE_PROXY: case CONDITION_TYPE_DUPTIME: case CONDITION_TYPE_DVALUE: case CONDITION_TYPE_APPLICATION: case CONDITION_TYPE_HOST_NAME: break; default: error(S_INCORRECT_CONDITION_TYPE); return false; break; } return true; }
function update_media($mediaid, $userid, $mediatypeid, $sendto, $severity, $active, $period) { if (!validate_period($period)) { error("Icorrect time period"); return NULL; } $c = count($severity); $s = 0; for ($i = 0; $i < $c; $i++) { $s = $s | pow(2, (int) $severity[$i]); } $sql = "update media set userid={$userid}, mediatypeid={$mediatypeid}, sendto=" . zbx_dbstr($sendto) . ", active={$active},severity={$s},period=" . zbx_dbstr($period) . " where mediaid={$mediaid}"; return DBexecute($sql); }