Пример #1
0
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)));
}
Пример #2
0
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();
Пример #3
0
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;
}
Пример #4
0
 /**
  * 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;
     }
 }
Пример #5
0
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;
}
Пример #6
0
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);
}