mirror of
https://github.com/Icinga/icingadb-web.git
synced 2026-05-20 09:22:09 -04:00
Adjust HostsController and ServicesController to use the new ColumnChooser form and the TabularViewModeSwitcher. The Controller class is adjusted to work with the TabularViewModeSwitcher The HostGroupsController and ServiceGroupsController are adjusted, to ensure they use with the GridViewModeSwitcher.
156 lines
5 KiB
PHP
156 lines
5 KiB
PHP
<?php
|
|
|
|
// SPDX-FileCopyrightText: 2019 Icinga GmbH <https://icinga.com>
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
namespace Icinga\Module\Icingadb\Controllers;
|
|
|
|
use GuzzleHttp\Psr7\ServerRequest;
|
|
use Icinga\Module\Icingadb\Model\Hostgroup;
|
|
use Icinga\Module\Icingadb\Model\Hostgroupsummary;
|
|
use Icinga\Module\Icingadb\View\HostgroupGridRenderer;
|
|
use Icinga\Module\Icingadb\View\HostgroupRenderer;
|
|
use Icinga\Module\Icingadb\Web\Control\GridViewModeSwitcher;
|
|
use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions;
|
|
use Icinga\Module\Icingadb\Web\Controller;
|
|
use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher;
|
|
use Icinga\Module\Icingadb\Widget\ItemTable\ObjectGrid;
|
|
use Icinga\Module\Icingadb\Widget\ItemTable\ObjectTable;
|
|
use Icinga\Module\Icingadb\Widget\ShowMore;
|
|
use ipl\Web\Control\LimitControl;
|
|
use ipl\Web\Control\SortControl;
|
|
use ipl\Web\Url;
|
|
|
|
class HostgroupsController extends Controller
|
|
{
|
|
public function init()
|
|
{
|
|
parent::init();
|
|
|
|
$this->assertRouteAccess();
|
|
}
|
|
|
|
public function indexAction()
|
|
{
|
|
$this->addTitleTab(t('Host Groups'));
|
|
$compact = $this->view->compact;
|
|
|
|
$db = $this->getDb();
|
|
|
|
$hostgroups = Hostgroupsummary::on($db);
|
|
|
|
$this->handleSearchRequest($hostgroups);
|
|
|
|
$limitControl = $this->createLimitControl();
|
|
$paginationControl = $this->createPaginationControl($hostgroups);
|
|
$viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl);
|
|
|
|
if ($viewModeSwitcher->getViewMode() === 'grid') {
|
|
$hostgroups->without([
|
|
'services_critical_handled',
|
|
'services_critical_unhandled',
|
|
'services_ok',
|
|
'services_pending',
|
|
'services_total',
|
|
'services_unknown_handled',
|
|
'services_unknown_unhandled',
|
|
'services_warning_handled',
|
|
'services_warning_unhandled',
|
|
]);
|
|
}
|
|
|
|
$sortControl = $this->createSortControl(
|
|
$hostgroups,
|
|
[
|
|
'display_name' => t('Name'),
|
|
'hosts_severity desc, display_name' => t('Severity'),
|
|
'hosts_total desc' => t('Total Hosts'),
|
|
],
|
|
['hosts_severity DESC', 'display_name']
|
|
);
|
|
|
|
$searchBar = $this->createSearchBar($hostgroups, [
|
|
$limitControl->getLimitParam(),
|
|
$sortControl->getSortParam(),
|
|
$viewModeSwitcher->getViewModeParam()
|
|
]);
|
|
|
|
if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) {
|
|
if ($searchBar->hasBeenSubmitted()) {
|
|
$filter = $this->getFilter();
|
|
} else {
|
|
$this->addControl($searchBar);
|
|
$this->sendMultipartUpdate();
|
|
return;
|
|
}
|
|
} else {
|
|
$filter = $searchBar->getFilter();
|
|
}
|
|
|
|
$this->filter($hostgroups, $filter);
|
|
|
|
$hostgroups->peekAhead($compact);
|
|
|
|
yield $this->export($hostgroups);
|
|
|
|
$this->addControl($paginationControl);
|
|
$this->addControl($sortControl);
|
|
$this->addControl($limitControl);
|
|
$this->addControl($viewModeSwitcher);
|
|
$this->addControl($searchBar);
|
|
|
|
$results = $hostgroups->execute();
|
|
|
|
if ($viewModeSwitcher->getViewMode() === 'grid') {
|
|
$content = new ObjectGrid($results, (new HostgroupGridRenderer())->setBaseFilter($filter));
|
|
} else {
|
|
$content = new ObjectTable($results, (new HostgroupRenderer())->setBaseFilter($filter));
|
|
}
|
|
|
|
$content->setEmptyStateMessage($paginationControl->getEmptyStateMessage());
|
|
|
|
$this->addContent($content);
|
|
|
|
if ($compact) {
|
|
$this->addContent(
|
|
(new ShowMore($results, Url::fromRequest()->without(['showCompact', 'limit', 'view'])))
|
|
->setBaseTarget('_next')
|
|
->setAttribute('title', sprintf(
|
|
t('Show all %d hostgroups'),
|
|
$hostgroups->count()
|
|
))
|
|
);
|
|
}
|
|
|
|
if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) {
|
|
$this->sendMultipartUpdate();
|
|
}
|
|
|
|
$this->setAutorefreshInterval(30);
|
|
}
|
|
|
|
public function completeAction()
|
|
{
|
|
$suggestions = new ObjectSuggestions();
|
|
$suggestions->setModel(Hostgroup::class);
|
|
$suggestions->forRequest(ServerRequest::fromGlobals());
|
|
$this->getDocument()->add($suggestions);
|
|
}
|
|
|
|
public function searchEditorAction()
|
|
{
|
|
$editor = $this->createSearchEditor(Hostgroupsummary::on($this->getDb()), [
|
|
LimitControl::DEFAULT_LIMIT_PARAM,
|
|
SortControl::DEFAULT_SORT_PARAM,
|
|
ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM
|
|
]);
|
|
|
|
$this->getDocument()->add($editor);
|
|
$this->setTitle(t('Adjust Filter'));
|
|
}
|
|
|
|
protected function getViewModeSwitcherInstance(): ViewModeSwitcher
|
|
{
|
|
return new GridViewModeSwitcher();
|
|
}
|
|
}
|