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.

312 lines
9.5 KiB

<?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())
->addItem((new CVar(CCsrfTokenHelper::CSRF_TOKEN_NAME, CCsrfTokenHelper::get('maintenance')))->removeId())
->setId('maintenance-form')
->setName('maintenance_form')
->addVar('maintenanceid', $data['maintenanceid'] ?: 0)
->addItem(getMessages());
// Enable form submitting on Enter.
$form->addItem((new CSubmitButton())->addClass(ZBX_STYLE_FORM_SUBMIT_HIDDEN));
$timeperiods = (new CTable())
->setId('timeperiods')
->addStyle('min-width: '.ZBX_TEXTAREA_BIG_WIDTH.'px;')
->setHeader(new CRowHeader([_('Period type'), _('Schedule'), _('Period'), _('Action')]))
->addItem(
(new CTag('tfoot', true))
->addItem(
(new CCol(
(new CButtonLink(_('Add')))
->addClass('js-add')
->setEnabled($data['allowed_edit'])
))
)
);
$timeperiod_template = new CTemplateTag('timeperiod-row-tmpl',
(new CRow([
(new CCol('#{formatted_type}'))->addItem([
(new CVar('timeperiods[#{row_index}][timeperiod_type]', '#{timeperiod_type}'))->removeId(),
(new CVar('timeperiods[#{row_index}][every]', '#{every}'))->removeId(),
(new CVar('timeperiods[#{row_index}][month]', '#{month}'))->removeId(),
(new CVar('timeperiods[#{row_index}][dayofweek]', '#{dayofweek}'))->removeId(),
(new CVar('timeperiods[#{row_index}][day]', '#{day}'))->removeId(),
(new CVar('timeperiods[#{row_index}][start_time]', '#{start_time}'))->removeId(),
(new CVar('timeperiods[#{row_index}][period]', '#{period}'))->removeId(),
(new CVar('timeperiods[#{row_index}][start_date]', '#{start_date}'))->removeId()
]),
(new CCol('#{formatted_schedule}'))->addClass(ZBX_STYLE_WORDBREAK),
(new CCol('#{formatted_period}')),
(new CCol(
(new CHorList([
(new CButtonLink(_('Edit')))
->addClass('js-edit')
->setEnabled($data['allowed_edit']),
(new CButtonLink(_('Remove')))
->addClass('js-remove')
->setEnabled($data['allowed_edit'])
]))
))
]))->setAttribute('data-row_index', '#{row_index}')
);
$tags = (new CTable())
->setId('tags')
->addStyle('width: '.ZBX_TEXTAREA_STANDARD_WIDTH.'px;')
->setHeader(
(new CCol(
(new CRadioButtonList('tags_evaltype', (int) $data['tags_evaltype']))
->addValue(_('And/Or'), MAINTENANCE_TAG_EVAL_TYPE_AND_OR)
->addValue(_('Or'), MAINTENANCE_TAG_EVAL_TYPE_OR)
->setModern()
->setEnabled($data['allowed_edit'] && $data['maintenance_type'] == MAINTENANCE_TYPE_NORMAL)
))
)
->setFooter(
(new CCol(
(new CButtonLink(_('Add')))
->addClass('element-table-add')
->setEnabled($data['allowed_edit'] && $data['maintenance_type'] == MAINTENANCE_TYPE_NORMAL)
))
);
$tag_template = new CTemplateTag('tag-row-tmpl',
(new CRow([
(new CTextBox('tags[#{rowNum}][tag]', '#{tag}', false, DB::getFieldLength('maintenance_tag', 'tag')))
->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH)
->setAttribute('placeholder', _('tag'))
->setReadonly(!$data['allowed_edit']),
(new CRadioButtonList('tags[#{rowNum}][operator]', MAINTENANCE_TAG_OPERATOR_LIKE))
->addValue(_('Contains'), MAINTENANCE_TAG_OPERATOR_LIKE)
->addValue(_('Equals'), MAINTENANCE_TAG_OPERATOR_EQUAL)
->setModern()
->setReadonly(!$data['allowed_edit']),
(new CTextBox('tags[#{rowNum}][value]', '#{value}', false, DB::getFieldLength('maintenance_tag', 'value')))
->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH)
->setAttribute('placeholder', _('value'))
->setReadonly(!$data['allowed_edit']),
(new CButton('tags[#{rowNum}][remove]', _('Remove')))
->addClass(ZBX_STYLE_BTN_LINK)
->addClass('element-table-remove')
->setEnabled($data['allowed_edit'])
]))->addClass('form_row')
);
$form->addItem(
(new CFormGrid())
->addItem([
(new CLabel(_('Name'), 'name'))->setAsteriskMark(),
new CFormField(
(new CTextBox('name', $data['name'], false, DB::getFieldLength('maintenances', 'name')))
->setAttribute('autofocus', 'autofocus')
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
->setAriaRequired()
->setReadonly(!$data['allowed_edit'])
)
])
->addItem([
(new CLabel(_('Maintenance type'), 'maintenance_type')),
new CFormField(
(new CRadioButtonList('maintenance_type', (int) $data['maintenance_type']))
->addValue(_('With data collection'), MAINTENANCE_TYPE_NORMAL)
->addValue(_('No data collection'), MAINTENANCE_TYPE_NODATA)
->setModern()
->setReadonly(!$data['allowed_edit'])
)
])
->addItem([
(new CLabel(_('Active since'), 'active_since'))->setAsteriskMark(),
new CFormField(
(new CDateSelector('active_since', $data['active_since']))
->setDateFormat(ZBX_DATE_TIME)
->setPlaceholder(_('YYYY-MM-DD hh:mm'))
->setAriaRequired()
->setReadonly(!$data['allowed_edit'])
)
])
->addItem([
(new CLabel(_('Active till'), 'active_till'))->setAsteriskMark(),
new CFormField(
(new CDateSelector('active_till', $data['active_till']))
->setDateFormat(ZBX_DATE_TIME)
->setPlaceholder(_('YYYY-MM-DD hh:mm'))
->setAriaRequired()
->setReadonly(!$data['allowed_edit'])
)
])
->addItem([
(new CLabel(_('Periods')))->setAsteriskMark(),
new CFormField(
(new CDiv([$timeperiods, $timeperiod_template]))->addClass(ZBX_STYLE_TABLE_FORMS_SEPARATOR)
)
])
->addItem([
new CLabel(_('Host groups'), 'groupids__ms'),
new CFormField(
(new CMultiSelect([
'name' => 'groupids[]',
'object_name' => 'hostGroup',
'data' => $data['groups_ms'],
'disabled' => !$data['allowed_edit'],
'popup' => [
'parameters' => [
'srctbl' => 'host_groups',
'srcfld1' => 'groupid',
'dstfrm' => $form->getName(),
'dstfld1' => 'groupids_',
'editable' => true
]
]
]))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
)
])
->addItem([
new CLabel(_('Hosts'), 'hostids__ms'),
new CFormField(
(new CMultiSelect([
'name' => 'hostids[]',
'object_name' => 'hosts',
'data' => $data['hosts_ms'],
'disabled' => !$data['allowed_edit'],
'popup' => [
'parameters' => [
'srctbl' => 'hosts',
'srcfld1' => 'hostid',
'dstfrm' => $form->getName(),
'dstfld1' => 'hostids_',
'editable' => true
]
]
]))->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
)
])
->addItem(
new CFormField((new CLabel(_('At least one host group or host must be selected.')))->setAsteriskMark())
)
->addItem([
new CLabel(_('Tags')),
new CFormField([$tags, $tag_template])
])
->addItem([
new CLabel(_('Description'), 'description'),
new CFormField(
(new CTextArea('description', $data['description']))
->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH)
->setReadonly(!$data['allowed_edit'])
)
])
);
$form->addItem(
(new CScriptTag('
maintenance_edit.init('.json_encode([
'maintenanceid' => $data['maintenanceid'],
'timeperiods' => $data['timeperiods'],
'tags' => $data['tags'],
'allowed_edit' => $data['allowed_edit']
]).');
'))->setOnDocumentReady()
);
if ($data['maintenanceid'] !== null) {
$title = _('Maintenance period');
$buttons = [
[
'title' => _('Update'),
'class' => 'js-update',
'keepOpen' => true,
'isSubmit' => true,
'enabled' => $data['allowed_edit'],
'action' => 'maintenance_edit.submit();'
],
[
'title' => _('Clone'),
'class' => implode(' ', [ZBX_STYLE_BTN_ALT, 'js-clone']),
'keepOpen' => true,
'isSubmit' => false,
'enabled' => $data['allowed_edit'],
'action' => 'maintenance_edit.clone('.json_encode([
'title' => _('New maintenance period'),
'buttons' => [
[
'title' => _('Add'),
'class' => 'js-add',
'keepOpen' => true,
'isSubmit' => true,
'action' => 'maintenance_edit.submit();'
],
[
'title' => _('Cancel'),
'class' => implode(' ', [ZBX_STYLE_BTN_ALT, 'js-cancel']),
'cancel' => true,
'action' => ''
]
]
]).');'
],
[
'title' => _('Delete'),
'confirmation' => _('Delete maintenance period?'),
'class' => implode(' ', [ZBX_STYLE_BTN_ALT, 'js-delete']),
'keepOpen' => true,
'isSubmit' => false,
'enabled' => $data['allowed_edit'],
'action' => 'maintenance_edit.delete();'
]
];
}
else {
$title = _('New maintenance period');
$buttons = [
[
'title' => _('Add'),
'class' => 'js-add',
'keepOpen' => true,
'isSubmit' => true,
'action' => 'maintenance_edit.submit();'
]
];
}
$output = [
'header' => $title,
'doc_url' => CDocHelper::getUrl(CDocHelper::DATA_COLLECTION_MAINTENANCE_EDIT),
'body' => $form->toString(),
'buttons' => $buttons,
'script_inline' => getPagePostJs().
$this->readJsFile('maintenance.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);