addJsFile('gtlc.js'); $this->addJsFile('class.calendar.js'); $this->includeJsFile('reports.actionlog.list.js.php'); $filter_status_options = []; foreach ($data['statuses'] as $value => $label) { $filter_status_options[] = [ 'label' => $label, 'value' => $value, 'checked' => in_array($value, $data['actionlog_statuses']) ]; } $filter = (new CFilter()) ->setResetUrl((new CUrl('zabbix.php'))->setArgument('action', $data['action'])) ->setProfile($data['timeline']['profileIdx']) ->addVar('action', $data['action']) ->addTimeSelector($data['timeline']['from'], $data['timeline']['to'], true, 'web.actionlog.filter') ->setActiveTab($data['active_tab']) ->addFilterTab(_('Filter'), [ (new CFormList()) ->addRow(new CLabel(_('Recipients'), 'filter_userids__ms'), [ (new CMultiSelect([ 'name' => 'filter_userids[]', 'object_name' => 'users', 'data' => $data['userids'], 'placeholder' => '', 'popup' => [ 'parameters' => [ 'srctbl' => 'users', 'srcfld1' => 'userid', 'srcfld2' => 'fullname', 'dstfrm' => 'zbx_filter', 'dstfld1' => 'filter_userids_' ] ] ]))->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH) ]) ->addRow(new CLabel(_('Actions'), 'filter_actionids__ms'), [ (new CMultiSelect([ 'name' => 'filter_actionids[]', 'object_name' => 'actions', 'data' => $data['actionids'], 'placeholder' => '', 'popup' => [ 'parameters' => [ 'srctbl' => 'actions', 'srcfld1' => 'actionid', 'srcfld2' => 'name', 'dstfrm' => 'zbx_filter', 'dstfld1' => 'filter_actionids_' ] ] ]))->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH) ]) ->addRow(new CLabel(_('Media types'), 'filter_mediatypeids__ms'), [ (new CMultiSelect([ 'name' => 'filter_mediatypeids[]', 'object_name' => 'media_types', 'data' => $data['mediatypeids'], 'placeholder' => '', 'popup' => [ 'parameters' => [ 'srctbl' => 'media_types', 'srcfld1' => 'mediatypeid', 'srcfld2' => 'name', 'dstfrm' => 'zbx_filter', 'dstfld1' => 'filter_mediatypeids_' ] ] ]))->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH) ]), (new CFormList()) ->addRow(_('Status'), (new CCheckBoxList('filter_statuses')) ->setId('filter_status') ->setColumns(3) ->setWidth(360) ->setOptions($filter_status_options)) ->addRow(_('Search string'), (new CTextBox('filter_messages', $data['messages'])) ->setWidth(ZBX_TEXTAREA_FILTER_STANDARD_WIDTH) ) ]); $actionlog_list = (new CTableInfo()) ->setHeader([ _('Time'), _('Action'), _('Media type'), _('Recipient'), _('Message'), _('Status'), _('Info') ]); foreach ($data['alerts'] as $alert) { $mediatype = array_pop($alert['mediatypes']); $message = $alert['alerttype'] == ALERT_TYPE_MESSAGE ? [ bold(_('Subject').':'), BR(), $alert['subject'], BR(), BR(), bold(_('Message').':'), BR(), zbx_nl2br($alert['message']) ] : [ bold(_('Command').':'), BR(), zbx_nl2br($alert['message']) ]; if ($alert['status'] == ALERT_STATUS_SENT) { $status = ($alert['alerttype'] == ALERT_TYPE_MESSAGE) ? (new CSpan(_('Sent')))->addClass(ZBX_STYLE_GREEN) : (new CSpan(_('Executed')))->addClass(ZBX_STYLE_GREEN); } elseif ($alert['status'] == ALERT_STATUS_NOT_SENT || $alert['status'] == ALERT_STATUS_NEW) { $status = (new CSpan([ _('In progress').':', BR(), _n('%1$s retry left', '%1$s retries left', $mediatype['maxattempts'] - $alert['retries']) ]))->addClass(ZBX_STYLE_YELLOW); } else { $status = (new CSpan(_('Failed')))->addClass(ZBX_STYLE_RED); } $info_icons = []; if ($alert['error'] !== '') { $info_icons[] = makeErrorIcon($alert['error']); } $actionlog_list->addRow([ zbx_date2str(DATE_TIME_FORMAT_SECONDS, $alert['clock']), $data['actions'][$alert['actionid']]['name'], $mediatype ? $mediatype['name'] : '', array_key_exists('userid', $alert) && $alert['userid'] ? makeEventDetailsTableUser($alert + ['action_type' => ZBX_EVENT_HISTORY_ALERT], $data['users']) : zbx_nl2br($alert['sendto']), $message, $status, makeInformationList($info_icons) ]); } (new CHtmlPage()) ->setTitle(_('Action log')) ->setDocUrl(CDocHelper::getUrl(CDocHelper::ADMINISTRATION_ACTIONLOG_LIST)) ->setControls( (new CTag('nav', true, (new CList()) ->addItem( (new CRedirectButton(_('Export to CSV'), (new CUrl())->setArgument('action', 'actionlog.csv'))) ->setId('export_csv') ) ))->setAttribute('aria-label', _('Content controls')) ) ->addItem($filter) ->addItem( (new CForm('get')) ->setName('auditForm') ->addItem([$actionlog_list, $data['paging']]) ) ->show(); (new CScriptTag(' view.init('.json_encode($data['timeline'], JSON_THROW_ON_ERROR).'); ')) ->setOnDocumentReady() ->show();