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.
zabbix/ui/include/views/configuration.graph.list.php

300 lines
9.3 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.
**/
/**
* @var CView $this
* @var array $data
*/
$this->includeJsFile('configuration.graph.list.js.php');
if (!empty($this->data['parent_discoveryid'])) {
$html_page = (new CHtmlPage())
->setTitle(_('Graph prototypes'))
->setDocUrl(CDocHelper::getUrl($data['context'] === 'host'
? CDocHelper::DATA_COLLECTION_HOST_GRAPH_PROTOTYPE_LIST
: CDocHelper::DATA_COLLECTION_TEMPLATES_GRAPH_PROTOTYPE_LIST
))
->setControls(
(new CTag('nav', true,
(new CList())
->addItem(
new CRedirectButton(_('Create graph prototype'),
(new CUrl('graphs.php'))
->setArgument('form', 'create')
->setArgument('parent_discoveryid', $data['parent_discoveryid'])
->setArgument('context', $data['context'])
)
)
))->setAttribute('aria-label', _('Content controls'))
)
->setNavigation(getHostNavigation('graphs', $this->data['hostid'], $this->data['parent_discoveryid']));
}
else {
$html_page = (new CHtmlPage())
->setTitle(_('Graphs'))
->setDocUrl(CDocHelper::getUrl($data['context'] === 'host'
? CDocHelper::DATA_COLLECTION_HOST_GRAPH_LIST
: CDocHelper::DATA_COLLECTION_TEMPLATE_GRAPH_LIST
))
->setControls(
(new CTag('nav', true,
(new CList())
->addItem(
$data['hostid'] != 0
? new CRedirectButton(_('Create graph'),
(new CUrl('graphs.php'))
->setArgument('hostid', $data['hostid'])
->setArgument('form', 'create')
->setArgument('context', $data['context'])
)
: (new CButton('form',
$data['context'] === 'host'
? _('Create graph (select host first)')
: _('Create graph (select template first)')
))->setEnabled(false)
)
))->setAttribute('aria-label', _('Content controls'))
);
if (!empty($this->data['hostid'])) {
$html_page->setNavigation(getHostNavigation('graphs', $this->data['hostid']));
}
// Add filter tab.
$hg_ms_params = $data['context'] === 'host' ? ['with_hosts' => true] : ['with_templates' => true];
$html_page->addItem(
(new CFilter())
->setResetUrl((new CUrl('graphs.php'))->setArgument('context', $data['context']))
->setProfile($data['profileIdx'])
->setActiveTab($data['active_tab'])
->addvar('context', $data['context'])
->addFilterTab(_('Filter'), [
(new CFormList())
->addRow(
new CLabel($data['context'] === 'host' ? _('Host groups') : _('Template groups'),
'filter_groupids__ms'
),
(new CMultiSelect([
'name' => 'filter_groupids[]',
'object_name' => $data['context'] === 'host' ? 'hostGroup' : 'templateGroup',
'data' => $data['filter']['groups'],
'popup' => [
'parameters' => [
'srctbl' => $data['context'] === 'host' ? 'host_groups' : 'template_groups',
'srcfld1' => 'groupid',
'dstfrm' => 'zbx_filter',
'dstfld1' => 'filter_groupids_',
'editable' => true,
'enrich_parent_groups' => true
] + $hg_ms_params
]
]))->setWidth(ZBX_TEXTAREA_MEDIUM_WIDTH)
)
->addRow(
(new CLabel(($data['context'] === 'host') ? _('Hosts') : _('Templates'), 'filter_hostids__ms')),
(new CMultiSelect([
'name' => 'filter_hostids[]',
'object_name' => $data['context'] === 'host' ? 'hosts' : 'templates',
'data' => $data['filter']['hosts'],
'popup' => [
'filter_preselect' => [
'id' => 'filter_groupids_',
'submit_as' => 'groupid'
],
'parameters' => [
'srctbl' => $data['context'] === 'host' ? 'hosts' : 'templates',
'srcfld1' => 'hostid',
'dstfrm' => 'zbx_filter',
'dstfld1' => 'filter_hostids_',
'editable' => 1
]
]
]))->setWidth(ZBX_TEXTAREA_MEDIUM_WIDTH)
)
])
);
}
$url = (new CUrl('graphs.php'))
->setArgument('context', $data['context'])
->getUrl();
// create form
$graphForm = (new CForm('post', $url))
->setName('graphForm')
->addVar('hostid', $data['hostid'])
->addVar('context', $data['context'], 'form_context');
if (!empty($this->data['parent_discoveryid'])) {
$graphForm->addVar('parent_discoveryid', $this->data['parent_discoveryid']);
}
// create table
$discover = null;
$info_column = null;
if ($data['parent_discoveryid']) {
$discover = make_sorting_header(_('Discover'), 'discover', $data['sort'], $data['sortorder'], $url);
}
else {
$info_column = ($data['context'] === 'host') ? _('Info') : null;
}
$graphTable = (new CTableInfo())
->setHeader([
(new CColHeader(
(new CCheckBox('all_graphs'))->onClick("checkAll('".$graphForm->getName()."', 'all_graphs', 'group_graphid');")
))->addClass(ZBX_STYLE_CELL_WIDTH),
($data['hostid'] == 0) ? ($data['context'] === 'host') ? _('Host') : _('Template') : null,
make_sorting_header(_('Name'), 'name', $this->data['sort'], $this->data['sortorder'], $url),
_('Width'),
_('Height'),
make_sorting_header(_('Graph type'), 'graphtype', $this->data['sort'], $this->data['sortorder'], $url),
$discover,
$info_column
]);
$csrf_token = CCsrfTokenHelper::get('graphs.php');
foreach ($data['graphs'] as $graph) {
$graphid = $graph['graphid'];
$hostList = null;
if (empty($this->data['hostid'])) {
$hostList = [];
foreach ($graph['hosts'] as $host) {
$hostList[$host['name']] = $host['name'];
}
foreach ($graph['templates'] as $template) {
$hostList[$template['name']] = $template['name'];
}
$hostList = implode(', ', $hostList);
}
$flag = ($data['parent_discoveryid'] === null) ? ZBX_FLAG_DISCOVERY_NORMAL : ZBX_FLAG_DISCOVERY_PROTOTYPE;
$name = [];
$name[] = makeGraphTemplatePrefix($graphid, $data['parent_templates'], $flag, $data['allowed_ui_conf_templates']);
if ($graph['discoveryRule'] && $data['parent_discoveryid'] === null) {
$name[] = (new CLink($graph['discoveryRule']['name'],
(new CUrl('host_discovery.php'))
->setArgument('form', 'update')
->setArgument('itemid', $graph['discoveryRule']['itemid'])
->setArgument('context', $data['context'])
))
->addClass(ZBX_STYLE_LINK_ALT)
->addClass(ZBX_STYLE_ORANGE);
$name[] = NAME_DELIMITER;
}
$url = (new CUrl('graphs.php'))
->setArgument('form', 'update')
->setArgument('parent_discoveryid', $data['parent_discoveryid'])
->setArgument('graphid', $graphid)
->setArgument('context', $data['context']);
if ($data['parent_discoveryid'] === null) {
$url->setArgument('filter_hostids', [$data['hostid']]);
}
$name[] = new CLink($graph['name'], $url);
$info_icons = [];
$discover = null;
if ($data['parent_discoveryid']) {
$nodiscover = ($graph['discover'] == ZBX_PROTOTYPE_NO_DISCOVER);
$discover = (new CLink($nodiscover ? _('No') : _('Yes'),
(new CUrl('graphs.php'))
->setArgument('action', 'graph.updatediscover')
->setArgument('parent_discoveryid', $data['parent_discoveryid'])
->setArgument('graphid', $graphid)
->setArgument('discover', $nodiscover ? ZBX_PROTOTYPE_DISCOVER : ZBX_PROTOTYPE_NO_DISCOVER)
->setArgument('context', $data['context'])
->getUrl()
))
->addCsrfToken($csrf_token)
->addClass(ZBX_STYLE_LINK_ACTION)
->addClass($nodiscover ? ZBX_STYLE_RED : ZBX_STYLE_GREEN);
}
else if (array_key_exists('ts_delete', $graph['graphDiscovery']) && $graph['graphDiscovery']['ts_delete'] > 0) {
$info_icons[] = getGraphLifetimeIndicator(time(), (int) $graph['graphDiscovery']['ts_delete']);
}
$graphTable->addRow([
new CCheckBox('group_graphid['.$graphid.']', $graphid),
$hostList,
$name,
$graph['width'],
$graph['height'],
$graph['graphtype'],
$discover,
($info_column === null) ? null : makeInformationList($info_icons)
]);
}
// buttons
$buttons = [];
if (!$this->data['parent_discoveryid']) {
$buttons['graph.masscopyto'] = [
'content' => (new CSimpleButton(_('Copy')))
->addClass('js-copy')
->addClass(ZBX_STYLE_BTN_ALT)
->removeId()
];
}
$buttons['graph.massdelete'] = [
'name' => _('Delete'),
'confirm_singular' => $this->data['parent_discoveryid']
? _('Delete selected graph prototype?')
: _('Delete selected graph?'),
'confirm_plural' => $this->data['parent_discoveryid']
? _('Delete selected graph prototypes?')
: _('Delete selected graphs?'),
'csrf_token' => $csrf_token
];
// append table to form
$graphForm->addItem([
$graphTable,
$data['paging'],
new CActionButtonList('action', 'group_graphid', $buttons,
$data['parent_discoveryid'] ?: $data['hostid']
)
]);
(new CScriptTag('
view.init('.json_encode([
'checkbox_hash' => $data['parent_discoveryid'] ?? $data['hostid'],
'checkbox_object' => 'group_graphid',
'context' => $data['context'],
'parent_discoveryid' => $data['parent_discoveryid']
]).');
'))
->setOnDocumentReady()
->show();
$html_page
->addItem($graphForm)
->show();