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.
297 lines
8.5 KiB
297 lines
8.5 KiB
1 year ago
|
<?php declare(strict_types = 0);
|
||
|
/*
|
||
|
** 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.
|
||
|
**/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @var CView $this
|
||
|
* @var array $data
|
||
|
*/
|
||
|
|
||
|
$form = (new CForm('post'))
|
||
|
->addItem((new CVar(CCsrfTokenHelper::CSRF_TOKEN_NAME, CCsrfTokenHelper::get('sla')))->removeId())
|
||
|
->setId('sla-form')
|
||
|
->setName('sla_form')
|
||
|
->addItem(getMessages());
|
||
|
|
||
|
// Enable form submitting on Enter.
|
||
|
$form->addItem((new CSubmitButton())->addClass(ZBX_STYLE_FORM_SUBMIT_HIDDEN));
|
||
|
|
||
|
// SLA tab.
|
||
|
|
||
|
$schedule = (new CTable())->addStyle('min-width: '.ZBX_TEXTAREA_STANDARD_WIDTH.'px;');
|
||
|
|
||
|
for ($weekday = 0; $weekday < 7; $weekday++) {
|
||
|
$schedule->addRow(new CRow([
|
||
|
(new CCheckBox('schedule_enabled['.$weekday.']', $weekday))
|
||
|
->setLabel(getDayOfWeekCaption($weekday))
|
||
|
->setChecked($data['form']['schedule_periods'][$weekday] !== ''),
|
||
|
(new CTextBox('schedule_periods['.$weekday.']', $data['form']['schedule_periods'][$weekday]))
|
||
|
->setWidth(ZBX_TEXTAREA_MEDIUM_WIDTH)
|
||
|
->setAttribute('placeholder', '8:00-17:00, ...')
|
||
|
]));
|
||
|
}
|
||
|
|
||
|
$sla_tab = (new CFormGrid())
|
||
|
->addItem([
|
||
|
(new CLabel(_('Name'), 'name'))->setAsteriskMark(),
|
||
|
new CFormField(
|
||
|
(new CTextBox('name', $data['form']['name'], false, DB::getFieldLength('sla', 'name')))
|
||
|
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
||
|
->setAriaRequired()
|
||
|
->setAttribute('autofocus', 'autofocus')
|
||
|
)
|
||
|
])
|
||
|
->addItem([
|
||
|
(new CLabel(_('SLO'), 'slo'))->setAsteriskMark(),
|
||
|
new CFormField([
|
||
|
(new CTextBox('slo', $data['form']['slo'], false, 7))
|
||
|
->setWidth(ZBX_TEXTAREA_TINY_WIDTH)
|
||
|
->setAttribute('placeholder', DB::getDefault('sla', 'slo'))
|
||
|
->setAriaRequired(),
|
||
|
' %'
|
||
|
])
|
||
|
])
|
||
|
->addItem([
|
||
|
new CLabel(_('Reporting period')),
|
||
|
new CFormField(
|
||
|
(new CRadioButtonList('period', (int) $data['form']['period']))
|
||
|
->addValue(_('Daily'), ZBX_SLA_PERIOD_DAILY)
|
||
|
->addValue(_('Weekly'), ZBX_SLA_PERIOD_WEEKLY)
|
||
|
->addValue(_('Monthly'), ZBX_SLA_PERIOD_MONTHLY)
|
||
|
->addValue(_('Quarterly'), ZBX_SLA_PERIOD_QUARTERLY)
|
||
|
->addValue(_('Annually'), ZBX_SLA_PERIOD_ANNUALLY)
|
||
|
->setModern(true)
|
||
|
)
|
||
|
])
|
||
|
->addItem([
|
||
|
new CLabel(_('Time zone'), 'timezone-focusable'),
|
||
|
new CFormField(
|
||
|
(new CSelect('timezone'))
|
||
|
->setId('timezone')
|
||
|
->setFocusableElementId('timezone-focusable')
|
||
|
->setValue($data['form']['timezone'])
|
||
|
->addOptions(CSelect::createOptionsFromArray([
|
||
|
ZBX_DEFAULT_TIMEZONE => CTimezoneHelper::getTitle(CTimezoneHelper::getSystemTimezone(),
|
||
|
_('System default')
|
||
|
)
|
||
|
] + CTimezoneHelper::getList()))
|
||
|
)
|
||
|
])
|
||
|
->addItem([
|
||
|
new CLabel(_('Schedule')),
|
||
|
new CFormField(
|
||
|
(new CRadioButtonList('schedule_mode', (int) $data['form']['schedule_mode']))
|
||
|
->addValue(_('24x7'), CSlaHelper::SCHEDULE_MODE_24X7)
|
||
|
->addValue(_('Custom'), CSlaHelper::SCHEDULE_MODE_CUSTOM)
|
||
|
->setModern(true)
|
||
|
)
|
||
|
])
|
||
|
->addItem([
|
||
|
(new CFormField(
|
||
|
(new CDiv($schedule))->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)
|
||
|
))
|
||
|
->setId('schedule')
|
||
|
->addStyle('display: none;')
|
||
|
])
|
||
|
->addItem([
|
||
|
(new CLabel(_('Effective date'), 'effective_date'))->setAsteriskMark(),
|
||
|
new CFormField(
|
||
|
(new CDateSelector('effective_date', $data['form']['effective_date']))
|
||
|
->setDateFormat(ZBX_DATE)
|
||
|
->setPlaceholder(_('YYYY-MM-DD'))
|
||
|
->setAriaRequired()
|
||
|
)
|
||
|
])
|
||
|
->addItem([
|
||
|
(new CLabel(_('Service tags')))->setAsteriskMark(),
|
||
|
new CFormField(
|
||
|
(new CDiv([
|
||
|
(new CTable())
|
||
|
->setId('service-tags')
|
||
|
->addStyle('min-width: '.ZBX_TEXTAREA_STANDARD_WIDTH.'px;')
|
||
|
->setHeader(
|
||
|
(new CRowHeader([_('Name'), _('Operation'), _('Value'), _('Action')]))
|
||
|
->addClass(ZBX_STYLE_GREY)
|
||
|
)
|
||
|
->setFooter(
|
||
|
(new CCol(
|
||
|
(new CButtonLink(_('Add')))->addClass('element-table-add')
|
||
|
))
|
||
|
),
|
||
|
(new CTemplateTag('service-tag-row-tmpl'))
|
||
|
->addItem(
|
||
|
(new CRow([
|
||
|
(new CTextBox('service_tags[#{rowNum}][tag]', '#{tag}', false,
|
||
|
DB::getFieldLength('sla_service_tag', 'tag')
|
||
|
))
|
||
|
->setAttribute('placeholder', _('tag'))
|
||
|
->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH),
|
||
|
(new CSelect('service_tags[#{rowNum}][operator]'))
|
||
|
->addOptions(CSelect::createOptionsFromArray([
|
||
|
ZBX_SLA_SERVICE_TAG_OPERATOR_EQUAL => _('Equals'),
|
||
|
ZBX_SLA_SERVICE_TAG_OPERATOR_LIKE => _('Contains')
|
||
|
]))
|
||
|
->setValue(ZBX_SLA_SERVICE_TAG_OPERATOR_EQUAL),
|
||
|
(new CTextBox('service_tags[#{rowNum}][value]', '#{value}', false,
|
||
|
DB::getFieldLength('sla_service_tag', 'value')
|
||
|
))
|
||
|
->setAttribute('placeholder', _('value'))
|
||
|
->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH),
|
||
|
(new CButtonLink(_('Remove')))->addClass('element-table-remove')
|
||
|
]))->addClass('form_row')
|
||
|
)
|
||
|
]))->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)
|
||
|
)
|
||
|
])
|
||
|
->addItem([
|
||
|
new CLabel(_('Description'), 'description'),
|
||
|
new CFormField(
|
||
|
(new CTextArea('description', $data['form']['description']))
|
||
|
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
|
||
|
->setMaxlength(DB::getFieldLength('sla', 'description'))
|
||
|
)
|
||
|
])
|
||
|
->addItem([
|
||
|
new CLabel(_('Enabled'), 'status'),
|
||
|
new CFormField(
|
||
|
(new CCheckBox('status', ZBX_SLA_STATUS_ENABLED))
|
||
|
->setChecked($data['form']['status'] == ZBX_SLA_STATUS_ENABLED)
|
||
|
)
|
||
|
]);
|
||
|
|
||
|
$excluded_downtimes = (new CTable())
|
||
|
->setId('excluded-downtimes')
|
||
|
->setHeader(
|
||
|
(new CRowHeader([_('Start time'), _('Duration'), _('Name'), _('Action')]))->addClass(ZBX_STYLE_GREY)
|
||
|
);
|
||
|
|
||
|
$excluded_downtimes->addItem(
|
||
|
(new CTag('tfoot', true))
|
||
|
->addItem(
|
||
|
(new CCol(
|
||
|
(new CButtonLink(_('Add')))->addClass('js-add')
|
||
|
))->setColSpan(4)
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$excluded_downtimes_tab = (new CFormGrid())
|
||
|
->addItem([
|
||
|
new CLabel(_('Excluded downtimes')),
|
||
|
new CFormField([
|
||
|
(new CDiv($excluded_downtimes))
|
||
|
->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)
|
||
|
->addStyle('min-width: '.ZBX_TEXTAREA_BIG_WIDTH.'px;')
|
||
|
])
|
||
|
]);
|
||
|
|
||
|
$tabs = (new CTabView())
|
||
|
->setSelected(0)
|
||
|
->addTab('sla-tab', _('SLA'), $sla_tab)
|
||
|
->addTab('excluded-downtimes-tab', _('Excluded downtimes'), $excluded_downtimes_tab,
|
||
|
TAB_INDICATOR_EXCLUDED_DOWNTIMES
|
||
|
);
|
||
|
|
||
|
// Output.
|
||
|
|
||
|
$form
|
||
|
->addItem($tabs)
|
||
|
->addItem(
|
||
|
(new CScriptTag('
|
||
|
sla_edit_popup.init('.json_encode([
|
||
|
'slaid' => $data['slaid'],
|
||
|
'service_tags' => $data['form']['service_tags'],
|
||
|
'excluded_downtimes' => $data['form']['excluded_downtimes']
|
||
|
]).');
|
||
|
'))->setOnDocumentReady()
|
||
|
);
|
||
|
|
||
|
if ($data['slaid'] !== null) {
|
||
|
$title = _('SLA');
|
||
|
$buttons = [
|
||
|
[
|
||
|
'title' => _('Update'),
|
||
|
'class' => 'js-update',
|
||
|
'keepOpen' => true,
|
||
|
'isSubmit' => true,
|
||
|
'action' => 'sla_edit_popup.submit();'
|
||
|
],
|
||
|
[
|
||
|
'title' => _('Clone'),
|
||
|
'class' => implode(' ', [ZBX_STYLE_BTN_ALT, 'js-clone']),
|
||
|
'keepOpen' => true,
|
||
|
'isSubmit' => false,
|
||
|
'action' => 'sla_edit_popup.clone('.json_encode([
|
||
|
'title' => _('New SLA'),
|
||
|
'buttons' => [
|
||
|
[
|
||
|
'title' => _('Add'),
|
||
|
'class' => 'js-add',
|
||
|
'keepOpen' => true,
|
||
|
'isSubmit' => true,
|
||
|
'action' => 'sla_edit_popup.submit();'
|
||
|
],
|
||
|
[
|
||
|
'title' => _('Cancel'),
|
||
|
'class' => implode(' ', [ZBX_STYLE_BTN_ALT, 'js-cancel']),
|
||
|
'cancel' => true,
|
||
|
'action' => ''
|
||
|
]
|
||
|
]
|
||
|
]).');'
|
||
|
],
|
||
|
[
|
||
|
'title' => _('Delete'),
|
||
|
'confirmation' => _('Delete selected SLA?'),
|
||
|
'class' => implode(' ', [ZBX_STYLE_BTN_ALT, 'js-delete']),
|
||
|
'keepOpen' => true,
|
||
|
'isSubmit' => false,
|
||
|
'action' => 'sla_edit_popup.delete();'
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
else {
|
||
|
$title = _('New SLA');
|
||
|
$buttons = [
|
||
|
[
|
||
|
'title' => _('Add'),
|
||
|
'class' => 'js-add',
|
||
|
'keepOpen' => true,
|
||
|
'isSubmit' => true,
|
||
|
'action' => 'sla_edit_popup.submit();'
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
$output = [
|
||
|
'header' => $title,
|
||
|
'doc_url' => CDocHelper::getUrl(CDocHelper::POPUP_SLA_EDIT),
|
||
|
'body' => $form->toString(),
|
||
|
'buttons' => $buttons,
|
||
|
'script_inline' => getPagePostJs().
|
||
|
$this->readJsFile('popup.sla.edit.js.php')
|
||
|
];
|
||
|
|
||
|
if ($data['user']['debug_mode'] == GROUP_DEBUG_MODE_ENABLED) {
|
||
|
CProfiler::getInstance()->stop();
|
||
|
$output['debug'] = CProfiler::getInstance()->make()->toString();
|
||
|
}
|
||
|
|
||
|
echo json_encode($output);
|