/** * Create element with event acknowledges info. * If $event has subarray 'acknowledges', returned link will have hint with acknowledges. * * @param array $event event data * @param int $event['acknowledged'] * @param int $event['eventid'] * @param int $event['objectid'] * @param array $event['acknowledges'] * @param bool|string $backUrl if true, add backurl param to link with current page file name * @param bool $isLink if true, return link otherwise span * @param array $params additional params for link * * @return array|CLink|CSpan|null|string */ function getEventAckState($event, $backUrl = false, $isLink = true, $params = array()) { $config = select_config(); if (!$config['event_ack_enable']) { return null; } if ($isLink) { if (!empty($backUrl)) { if (is_bool($backUrl)) { global $page; $backurl = '&backurl=' . $page['file']; } else { $backurl = '&backurl=' . $backUrl; } } else { $backurl = ''; } $additionalParams = ''; foreach ($params as $key => $value) { $additionalParams .= '&' . $key . '=' . $value; } if ($event['acknowledged'] == 0) { $ack = new CLink(_('No'), 'acknow.php?eventid=' . $event['eventid'] . '&triggerid=' . $event['objectid'] . $backurl . $additionalParams, 'disabled'); } else { $ackLink = new CLink(_('Yes'), 'acknow.php?eventid=' . $event['eventid'] . '&triggerid=' . $event['objectid'] . $backurl . $additionalParams, 'enabled'); if (is_array($event['acknowledges'])) { $ackLinkHints = makeAckTab($event); if (!empty($ackLinkHints)) { $ackLink->setHint($ackLinkHints, '', '', false); } $ack = array($ackLink, ' (' . count($event['acknowledges']) . ')'); } else { $ack = array($ackLink, ' (' . $event['acknowledges'] . ')'); } } } else { if ($event['acknowledged'] == 0) { $ack = new CSpan(_('No'), 'on'); } else { $ack = array(new CSpan(_('Yes'), 'off'), ' (' . (is_array($event['acknowledges']) ? count($event['acknowledges']) : $event['acknowledges']) . ')'); } } return $ack; }
require_once dirname(__FILE__) . '/include/page_header.php'; define('PAGE_SIZE', 100); // 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']], 'fullscreen' => [T_ZBX_INT, O_OPT, P_SYS, IN('0,1'), null], 'widget' => [T_ZBX_STR, O_OPT, P_ACT, IN('"' . WIDGET_HAT_EVENTACK . '","' . WIDGET_HAT_EVENTACTIONMSGS . '","' . WIDGET_HAT_EVENTACTIONMCMDS . '","' . WIDGET_HAT_EVENTLIST . '"'), null], 'state' => [T_ZBX_INT, O_OPT, P_ACT, IN('0,1'), null]]; check_fields($fields); /* * Ajax */ if (hasRequest('widget') && hasRequest('state')) { CProfile::update('web.tr_events.hats.' . getRequest('widget') . '.state', getRequest('state'), PROFILE_TYPE_INT); } 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 $events = API::Event()->get(['output' => API_OUTPUT_EXTEND, 'select_alerts' => API_OUTPUT_EXTEND, 'select_acknowledges' => API_OUTPUT_EXTEND, 'selectHosts' => API_OUTPUT_EXTEND, 'source' => EVENT_SOURCE_TRIGGERS, 'object' => EVENT_OBJECT_TRIGGER, 'eventids' => getRequest('eventid'), 'objectids' => getRequest('triggerid')]); $event = reset($events); /* * Display */ $config = select_config(); $eventTab = (new CTable())->addRow([new CDiv([(new CUiWidget(WIDGET_HAT_TRIGGERDETAILS, make_trigger_details($trigger)))->setHeader(_('Event source details')), (new CUiWidget(WIDGET_HAT_EVENTDETAILS, make_event_details($event, $trigger, $page['file'] . '?triggerid=' . getRequest('triggerid') . '&eventid=' . getRequest('eventid'))))->setHeader(_('Event details'))]), new CDiv([$config['event_ack_enable'] ? (new CCollapsibleUiWidget(WIDGET_HAT_EVENTACK, makeAckTab($event['acknowledges'])))->setExpanded((bool) CProfile::get('web.tr_events.hats.' . WIDGET_HAT_EVENTACK . '.state', true))->setHeader(_('Acknowledges'), [], false, 'tr_events.php') : null, (new CCollapsibleUiWidget(WIDGET_HAT_EVENTACTIONMSGS, getActionMessages($event['alerts'])))->setExpanded((bool) CProfile::get('web.tr_events.hats.' . WIDGET_HAT_EVENTACTIONMSGS . '.state', true))->setHeader(_('Message actions'), [], false, 'tr_events.php'), (new CCollapsibleUiWidget(WIDGET_HAT_EVENTACTIONMCMDS, getActionCommands($event['alerts'])))->setExpanded((bool) CProfile::get('web.tr_events.hats.' . WIDGET_HAT_EVENTACTIONMCMDS . '.state', true))->setHeader(_('Command actions'), [], false, 'tr_events.php'), (new CCollapsibleUiWidget(WIDGET_HAT_EVENTLIST, make_small_eventlist($event, $page['file'] . '?triggerid=' . getRequest('triggerid') . '&eventid=' . getRequest('eventid'))))->setExpanded((bool) CProfile::get('web.tr_events.hats.' . WIDGET_HAT_EVENTLIST . '.state', true))->setHeader(_('Event list [previous 20]'), [], false, 'tr_events.php')])]); $eventWidget = (new CWidget())->setTitle(_('Event details'))->setControls((new CList())->addItem(get_icon('fullscreen', ['fullscreen' => getRequest('fullscreen')])))->addItem($eventTab)->show(); require_once dirname(__FILE__) . '/include/page_footer.php';
/* * Display */ $config = select_config(); $eventWidget = new CWidget(); $eventWidget->setClass('header'); $eventWidget->addHeader(array(_('EVENTS') . ': "' . CMacrosResolverHelper::resolveTriggerName($trigger) . '"'), get_icon('fullscreen', array('fullscreen' => getRequest('fullscreen')))); // trigger details $triggerDetailsWidget = new CUiWidget('hat_triggerdetails', make_trigger_details($trigger)); $triggerDetailsWidget->setHeader(_('Event source details')); // event details $eventDetailsWidget = new CUiWidget('hat_eventdetails', make_event_details($event, $trigger)); $eventDetailsWidget->setHeader(_('Event details')); // if acknowledges are not disabled in configuration, let's show them if ($config['event_ack_enable']) { $eventAcknowledgesWidget = new CCollapsibleUiWidget('hat_eventack', makeAckTab($event)); $eventAcknowledgesWidget->open = (bool) CProfile::get('web.tr_events.hats.hat_eventack.state', true); $eventAcknowledgesWidget->setHeader(_('Acknowledges')); } else { $eventAcknowledgesWidget = null; } // actions messages $actionMessagesWidget = new CCollapsibleUiWidget('hat_eventactionmsgs', getActionMessages($event['alerts'])); $actionMessagesWidget->open = (bool) CProfile::get('web.tr_events.hats.hat_eventactionmsgs.state', true); $actionMessagesWidget->setHeader(_('Message actions')); // actions commands $actionCommandWidget = new CCollapsibleUiWidget('hat_eventactionmcmds', getActionCommands($event['alerts'])); $actionCommandWidget->open = (bool) CProfile::get('web.tr_events.hats.hat_eventactioncmds.state', true); $actionCommandWidget->setHeader(_('Command actions')); // event history $eventHistoryWidget = new CCollapsibleUiWidget('hat_eventlist', make_small_eventlist($event));
$text = array(_('EVENTS') . ': "' . CTriggerHelper::expandDescription($trigger) . '"'); $fs_icon = get_icon('fullscreen', array('fullscreen' => $_REQUEST['fullscreen'])); $tr_event_wdgt->addHeader($text, $fs_icon); $left_col = array(); // tr details $triggerDetails = new CUIWidget('hat_triggerdetails', make_trigger_details($trigger)); $triggerDetails->setHeader(_('Event source details')); $left_col[] = $triggerDetails; // event details $eventDetails = new CUIWidget('hat_eventdetails', make_event_details($event, $trigger)); $eventDetails->setHeader(_('Event details')); $left_col[] = $eventDetails; $right_col = array(); // if acknowledges are not disabled in configuration, let's show them if ($config['event_ack_enable']) { $event_ack = new CUIWidget('hat_eventack', makeAckTab($event), CProfile::get('web.tr_events.hats.hat_eventack.state', 1)); $event_ack->setHeader(_('Acknowledges')); $right_col[] = $event_ack; } // event sms actions $actions_sms = new CUIWidget('hat_eventactionmsgs', get_action_msgs_for_event($event), CProfile::get('web.tr_events.hats.hat_eventactionmsgs.state', 1)); $actions_sms->setHeader(_('Message actions')); $right_col[] = $actions_sms; // event cmd actions $actions_cmd = new CUIWidget('hat_eventactionmcmds', get_action_cmds_for_event($event), CProfile::get('web.tr_events.hats.hat_eventactioncmds.state', 1)); $actions_cmd->setHeader(_('Command actions')); $right_col[] = $actions_cmd; // event history $events_histry = new CUIWidget('hat_eventlist', make_small_eventlist($event), CProfile::get('web.tr_events.hats.hat_eventlist.state', 1)); $events_histry->setHeader(_('Event list [previous 20]')); $right_col[] = $events_histry;
/** * Create element with event acknowledges info. * If $event has subarray 'acknowledges', returned link will have hint with acknowledges. * * @param array $event event data * @param int $event['acknowledged'] * @param int $event['eventid'] * @param int $event['objectid'] * @param mixed $event['acknowledges'] * @param string $backurl add url param to link with current page file name * * @return CLink */ function getEventAckState($event, $backurl) { if ($event['acknowledged'] == EVENT_ACKNOWLEDGED) { $acknowledges_num = is_array($event['acknowledges']) ? count($event['acknowledges']) : $event['acknowledges']; } $link = 'zabbix.php?action=acknowledge.edit&eventids[]=' . $event['eventid'] . '&backurl=' . urlencode($backurl); if ($event['acknowledged'] == EVENT_ACKNOWLEDGED) { $ack = (new CLink(_('Yes'), $link))->addClass(ZBX_STYLE_LINK_ALT)->addClass(ZBX_STYLE_GREEN); if (is_array($event['acknowledges'])) { $ack->setHint(makeAckTab(array_slice($event['acknowledges'], 0, ZBX_WIDGET_ROWS)), '', false); } $ack = [$ack, CViewHelper::showNum($acknowledges_num)]; } else { $ack = (new CLink(_('No'), $link))->addClass(ZBX_STYLE_LINK_ALT)->addClass(ZBX_STYLE_RED); } return $ack; }