icingadb-web/application/views/scripts/services/grid-flipped.phtml
2025-04-25 10:43:58 +02:00

148 lines
6.1 KiB
PHTML

<?php
use Icinga\Data\Filter\Filter;
use Icinga\Web\Url;
if (! $this->compact): ?>
<?= $this->controls ?>
<?php endif ?>
<div class="content" data-base-target="_next" id="<?= $this->protectId('content') ?>">
<?php if (empty($pivotData)): ?>
<div class="item-list">
<div class="empty-state-bar"><?= $this->translate('No services found matching the filter.') ?></div>
</div>
</div>
<?php return; endif;
$serviceFilter = Filter::matchAny();
foreach ($pivotData as $serviceDescription => $_) {
$serviceFilter->orFilter(Filter::where('service.name', $serviceDescription));
}
?>
<table class="service-grid-table">
<thead>
<tr>
<th><?= $this->partial(
'joystickPagination-icingadb.phtml',
'default',
array(
'flippable' => true,
'baseUrl' => $baseUrl,
'xAxisPaginator' => $horizontalPaginator,
'yAxisPaginator' => $verticalPaginator
)
) ?></th>
<?php foreach ($pivotHeader['cols'] as $hostName => $hostAlias): ?>
<th class="rotate-45"><div><span><?= $this->qlink(
$this->ellipsis($hostAlias, 24),
Url::fromPath('icingadb/services')->addFilter(
Filter::matchAll($serviceFilter, Filter::where('host.name', $hostName))
),
null,
array('title' => sprintf($this->translate('List all reported services on host %s'), $hostAlias)),
false
) ?></span></div></th>
<?php endforeach ?>
</tr>
</thead>
<tbody>
<?php $i = 0 ?>
<?php foreach ($pivotHeader['rows'] as $serviceDescription => $serviceDisplayName): ?>
<tr>
<th><?php
$hostFilter = Filter::matchAny();
foreach ($pivotData[$serviceDescription] as $hostName => $_) {
$hostFilter->orFilter(Filter::where('host.name', $hostName));
}
echo $this->qlink(
$serviceDisplayName,
Url::fromPath('icingadb/services')->addFilter(
Filter::matchAll($hostFilter, Filter::where('service.name', $serviceDescription))
),
null,
array('title' => sprintf(
$this->translate('List all services with the name "%s" on all reported hosts'),
$serviceDisplayName
))
);
?></th>
<?php foreach (array_keys($pivotHeader['cols']) as $hostName): ?>
<td><?php
$service = $pivotData[$serviceDescription][$hostName];
if ($service === null): ?>
<span aria-hidden="true">&middot;</span>
<?php continue; endif ?>
<?php $ariaDescribedById = $this->protectId($service->host_name . '_' . $service->name . '_desc') ?>
<span class="sr-only" id="<?= $ariaDescribedById ?>">
<?= $this->escape($service->state->output) ?>
</span>
<?= $this->qlink(
'',
'icingadb/service',
array(
'host.name' => $hostName,
'name' => $serviceDescription
),
array(
'aria-describedby' => $ariaDescribedById,
'aria-label' => sprintf(
$this->translate('Show detailed information for service %s on host %s'),
$service->display_name,
$service->host_display_name
),
'class' => 'service-grid-link state-' . $service->state->getStateText() . ($service->state->is_handled ? ' handled' : ''),
'title' => $service->state->output
)
) ?>
</td>
<?php endforeach ?>
<?php
$horizontalTotalItems = $this->horizontalPaginator->count();
$horizontalItemsPerPage = $this->horizontalPaginator->getLimit() ?? $horizontalTotalItems;
$horizontalTotalPages = ceil($horizontalTotalItems / $horizontalItemsPerPage);
$verticalTotalItems = $this->verticalPaginator->count();
$verticalItemsPerPage = $this->verticalPaginator->getLimit() ?? $verticalTotalItems;
$verticalTotalPages = ceil($verticalTotalItems / $verticalItemsPerPage);
if (! $this->compact && $horizontalTotalPages > 1): ?>
<td>
<?php $expandLink = $this->qlink(
$this->translate('Load more'),
$baseUrl,
array(
'limit' => ($horizontalItemsPerPage + 20)
. ','
. $verticalItemsPerPage
),
array(
'class' => 'action-link',
'data-base-target' => '_self'
)
) ?>
<?= ++$i === (int) ceil(count($pivotHeader['rows']) / 2) ? $expandLink : '' ?>
</td>
<?php endif ?>
</tr>
<?php endforeach ?>
<?php if (! $this->compact && $verticalTotalPages > 1): ?>
<tr>
<td colspan="<?= count($pivotHeader['cols']) + 1?>" class="service-grid-table-more">
<?php echo $this->qlink(
$this->translate('Load more'),
$baseUrl,
array(
'limit' => $horizontalItemsPerPage
. ','
. ($verticalItemsPerPage + 20)
),
array(
'class' => 'action-link',
'data-base-target' => '_self'
)
) ?>
</td>
</tr>
<?php endif ?>
</tbody>
</table>
</div>