You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
6.6 KiB

<?php
/*
** Zabbix
** Copyright (C) 2001-2023 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
require_once dirname(__FILE__).'/include/config.inc.php';
require_once dirname(__FILE__).'/include/actions.inc.php';
require_once dirname(__FILE__).'/include/events.inc.php';
require_once dirname(__FILE__).'/include/triggers.inc.php';
require_once dirname(__FILE__).'/include/users.inc.php';
require_once dirname(__FILE__).'/include/html.inc.php';
$page['title'] = _('Event details');
$page['file'] = 'tr_events.php';
$page['type'] = detect_page_type();
$page['scripts'] = ['layout.mode.js', 'class.calendar.js'];
$page['web_layout_mode'] = CViewHelper::loadLayoutMode();
require_once dirname(__FILE__).'/include/page_header.php';
// VAR TYPE OPTIONAL FLAGS VALIDATION EXCEPTION
$fields = [
'triggerid' => [T_ZBX_INT, O_OPT, P_SYS, DB_ID, PAGE_TYPE_HTML.'=='.$page['type']],
'eventid' => [T_ZBX_INT, O_OPT, P_SYS, DB_ID, PAGE_TYPE_HTML.'=='.$page['type']]
];
check_fields($fields);
if ($page['type'] == PAGE_TYPE_JS || $page['type'] == PAGE_TYPE_HTML_BLOCK) {
require_once dirname(__FILE__).'/include/page_footer.php';
exit;
}
// triggers
$triggers = API::Trigger()->get([
'output' => API_OUTPUT_EXTEND,
'selectHosts' => API_OUTPUT_EXTEND,
'triggerids' => getRequest('triggerid')
]);
if (!$triggers) {
access_deny();
}
$trigger = reset($triggers);
$events = API::Event()->get([
'output' => ['eventid', 'r_eventid', 'clock', 'ns', 'objectid', 'name', 'acknowledged', 'severity',
'cause_eventid'
],
'selectAcknowledges' => ['clock', 'message', 'action', 'userid', 'old_severity', 'new_severity',
'suppress_until'
],
'selectTags' => ['tag', 'value'],
'source' => EVENT_SOURCE_TRIGGERS,
'object' => EVENT_OBJECT_TRIGGER,
'eventids' => getRequest('eventid'),
'objectids' => getRequest('triggerid'),
'value' => TRIGGER_VALUE_TRUE
]);
if (!$events) {
access_deny();
}
$event = reset($events);
$event['comments'] = ($trigger['comments'] !== '')
? CMacrosResolverHelper::resolveTriggerDescription(
[
'triggerid' => $trigger['triggerid'],
'expression' => $trigger['expression'],
'comments' => $trigger['comments'],
'clock' => $event['clock'],
'ns' => $event['ns']
],
['events' => true]
)
: '';
if ($event['r_eventid'] != 0) {
$r_events = API::Event()->get([
'output' => ['correlationid', 'userid'],
'source' => EVENT_SOURCE_TRIGGERS,
'object' => EVENT_OBJECT_TRIGGER,
'eventids' => [$event['r_eventid']],
'objectids' => getRequest('triggerid')
]);
if ($r_events) {
$r_event = reset($r_events);
$event['correlationid'] = $r_event['correlationid'];
$event['userid'] = $r_event['userid'];
}
}
if ($trigger['opdata'] !== '') {
$event['opdata'] = (new CCol(CMacrosResolverHelper::resolveTriggerOpdata(
[
'triggerid' => $trigger['triggerid'],
'expression' => $trigger['expression'],
'opdata' => $trigger['opdata'],
'clock' => $event['clock'],
'ns' => $event['ns']
],
[
'events' => true,
'html' => true
]
)))->addClass('opdata');
}
else {
$db_items = API::Item()->get([
'output' => ['itemid', 'name', 'value_type', 'units'],
'selectValueMap' => ['mappings'],
'triggerids' => $event['objectid']
]);
$event['opdata'] = (new CCol(CScreenProblem::getLatestValues($db_items)))->addClass('latest-values');
}
$actions = getEventDetailsActions($event);
$users = API::User()->get([
'output' => ['username', 'name', 'surname'],
'userids' => array_keys($actions['userids']),
'preservekeys' => true
]);
$mediatypes = API::Mediatype()->get([
'output' => ['maxattempts'],
'mediatypeids' => array_keys($actions['mediatypeids']),
'preservekeys' => true
]);
$allowed = [
'ui_correlation' => CWebUser::checkAccess(CRoleHelper::UI_CONFIGURATION_EVENT_CORRELATION),
'add_comments' => CWebUser::checkAccess(CRoleHelper::ACTIONS_ADD_PROBLEM_COMMENTS),
'change_severity' => CWebUser::checkAccess(CRoleHelper::ACTIONS_CHANGE_SEVERITY),
'acknowledge' => CWebUser::checkAccess(CRoleHelper::ACTIONS_ACKNOWLEDGE_PROBLEMS),
'suppress_problems' => CWebUser::checkAccess(CRoleHelper::ACTIONS_SUPPRESS_PROBLEMS),
'close' => ($trigger['manual_close'] == ZBX_TRIGGER_MANUAL_CLOSE_ALLOWED
&& CWebUser::checkAccess(CRoleHelper::ACTIONS_CLOSE_PROBLEMS)
),
'rank_change' => CWebUser::checkAccess(CRoleHelper::ACTIONS_CHANGE_PROBLEM_RANKING)
];
/*
* Display
*/
require_once dirname(__FILE__).'/include/views/js/tr_events.js.php';
$event_tab = (new CDiv([
new CDiv([
(new CSection(make_trigger_details($trigger, $event['eventid'])))
->setId(SECTION_HAT_TRIGGERDETAILS)
->setHeader(new CTag('h4', true, _('Trigger details'))),
(new CSection(make_event_details($event, $allowed)))
->setId(SECTION_HAT_EVENTDETAILS)
->setHeader(new CTag('h4', true, _('Event details')))
]),
new CDiv([
(new CSectionCollapsible(makeEventDetailsActionsTable($actions, $users, $mediatypes)))
->setId(SECTION_HAT_EVENTACTIONS)
->setHeader(new CTag('h4', true, _('Actions')))
->setProfileIdx('web.tr_events.hats.'.SECTION_HAT_EVENTACTIONS.'.state')
->setExpanded((bool) CProfile::get('web.tr_events.hats.'.SECTION_HAT_EVENTACTIONS.'.state', true)),
(new CSectionCollapsible(make_small_eventlist($event, $allowed)))
->setId(SECTION_HAT_EVENTLIST)
->setHeader(new CTag('h4', true, _('Event list [previous 20]')))
->setProfileIdx('web.tr_events.hats.'.SECTION_HAT_EVENTLIST.'.state')
->setExpanded((bool) CProfile::get('web.tr_events.hats.'.SECTION_HAT_EVENTLIST.'.state', true))
])
]))
->addClass(ZBX_STYLE_COLUMNS)
->addClass(ZBX_STYLE_COLUMNS_2);
(new CHtmlPage())
->setTitle(_('Event details'))
->setWebLayoutMode($page['web_layout_mode'])
->setDocUrl(CDocHelper::getUrl(CDocHelper::TR_EVENTS))
->setControls(
(new CTag('nav', true,
(new CList())->addItem(get_icon('kioskmode', ['mode' => $page['web_layout_mode']]))
))->setAttribute('aria-label', _('Content controls'))
)
->addItem($event_tab)
->show();
(new CScriptTag('view.init();'))
->setOnDocumentReady()
->show();
require_once dirname(__FILE__).'/include/page_footer.php';