<?php use Icinga\Data\Filter\Filter; use Icinga\Module\Icingadb\Common\ServiceStates; 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"><?= $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">·</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/services', 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 $horizontalItemsPerPage = $this->horizontalPaginator->getLimit(); $horizontalTotalPages = ceil($this->horizontalPaginator->count() / $horizontalItemsPerPage); $verticalItemsPerPage = $this->verticalPaginator->getLimit(); $verticalTotalPages = ceil($this->verticalPaginator->count() / $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>