if (getRequest('itemid') && !API::Item()->isWritable([$_REQUEST['itemid']]) || getRequest('triggerid') && !API::Trigger()->isWritable([$_REQUEST['triggerid']])) { access_deny(); } $itemid = getRequest('itemid', 0); $constructor = new CTextTriggerConstructor(new CTriggerExpression()); /** * Save a trigger */ if (hasRequest('add') || hasRequest('update')) { $item = API::Item()->get(['output' => ['key_'], 'selectHosts' => ['host'], 'itemids' => $itemid, 'limit' => 1]); $item = reset($item); $host = reset($item['hosts']); show_messages(); $exprs = getRequest('expressions', false); if ($exprs && ($expression = $constructor->getExpressionFromParts($host['host'], $item['key_'], $exprs))) { if (!check_right_on_trigger_by_expression(PERM_READ_WRITE, $expression)) { access_deny(); } $now = time(); $status = hasRequest('status') ? TRIGGER_STATUS_DISABLED : TRIGGER_STATUS_ENABLED; $type = TRIGGER_MULT_EVENT_ENABLED; if (hasRequest('triggerid')) { $triggerId = getRequest('triggerid'); $description = getRequest('description', ''); $db_triggers = API::Trigger()->get(['output' => ['description', 'expression', 'templateid'], 'triggerids' => [$triggerId]]); if ($db_triggers[0]['templateid'] != 0) { $db_triggers = CMacrosResolverHelper::resolveTriggerExpressions($db_triggers); $description = $db_triggers[0]['description']; $expression = $db_triggers[0]['expression']; } $trigger = [];
function check_right_on_trigger_by_triggerid($permission, $triggerid) { $trigger_data = DBfetch(DBselect('select expression from triggers where triggerid=' . $triggerid)); if (!$trigger_data) { return false; } return check_right_on_trigger_by_expression($permission, explode_exp($trigger_data['expression'], 0)); }
$_REQUEST['expr_action'] = '|'; } else { if (isset($_REQUEST['replace_expression'])) { $_REQUEST['expr_action'] = 'r'; } else { if (isset($_REQUEST['remove_expression']) && zbx_strlen($_REQUEST['remove_expression'])) { $_REQUEST['expr_action'] = 'R'; $_REQUEST['expr_target_single'] = $_REQUEST['remove_expression']; } else { if (isset($_REQUEST['clone']) && isset($_REQUEST['triggerid'])) { unset($_REQUEST['triggerid']); $_REQUEST['form'] = 'clone'; } else { if (isset($_REQUEST['save'])) { show_messages(); if (!check_right_on_trigger_by_expression(PERM_READ_WRITE, $_REQUEST['expression'])) { if (isset($_REQUEST['triggerid'])) { show_messages(false, null, S_CANNOT_UPDATE_TRIGGER); } else { show_messages(false, null, S_CANNOT_ADD_TRIGGER); } } else { $status = isset($_REQUEST['status']) ? TRIGGER_STATUS_DISABLED : TRIGGER_STATUS_ENABLED; $deps = get_request('dependencies', array()); if (isset($_REQUEST['triggerid'])) { $triggerData = get_trigger_by_triggerid($_REQUEST['triggerid']); if ($triggerData['templateid']) { $_REQUEST['description'] = $triggerData['description']; $_REQUEST['expression'] = explode_exp($triggerData['expression'], 0); } $current_deps = get_trigger_dependencies_by_triggerid($_REQUEST['triggerid']);