119 lines
6.9 KiB
PHP
119 lines
6.9 KiB
PHP
<?php /** @var Zentrale\Ansicht $v */ ?>
|
||
<div class="titelzeile">
|
||
<h1>Installationen</h1>
|
||
<form method="post" action="/fassung" class="neueste">
|
||
<?= $v->csrf() ?>
|
||
<span>Neueste Fassung: <strong><?= null === $neueste ? 'unbekannt' : $v->e($neueste['version']) ?></strong></span>
|
||
<button type="submit" class="knopf knopf-leise">Neu abfragen</button>
|
||
</form>
|
||
</div>
|
||
|
||
<?php
|
||
$kacheln = [
|
||
null => ['', 'gesamt', $zahlen['alle']],
|
||
'aktuell' => ['z-ok', 'aktuell', $zahlen['aktuell'] ?? '–'],
|
||
'veraltet' => ['z-warn', 'veraltet', $zahlen['veraltet']],
|
||
'still' => ['z-still', 'ohne Meldung seit 48 h', $zahlen['still']],
|
||
'unbekannt' => ['z-fremd', 'ohne Kundenzuordnung', $zahlen['unbekannt']],
|
||
];
|
||
?>
|
||
<nav aria-label="Nach Zustand filtern">
|
||
<ul class="zahlen">
|
||
<?php foreach ($kacheln as $name => [$klasse, $text, $zahl]) { $aktiv = ($filter ?? '') === $name; ?>
|
||
<li class="<?= $klasse ?><?= $aktiv ? ' gewaehlt' : '' ?>"><a href="<?= $v->e($v->adresse(['q' => $suche, 'filter' => '' === $name ? null : $name])) ?>"<?= $aktiv ? ' aria-current="true"' : '' ?>><strong><?= $v->e($zahl) ?></strong> <?= $v->e($text) ?></a></li>
|
||
<?php } ?>
|
||
</ul>
|
||
</nav>
|
||
|
||
<?php if ([] !== $aktualisierbar && null !== $neueste) { ?>
|
||
<form method="post" action="/auftrag/alle" class="karte alle">
|
||
<?= $v->csrf() ?>
|
||
<div>
|
||
<h2>Alle auf <?= $v->e($neueste['version']) ?> aktualisieren</h2>
|
||
<?php $namen = array_column($aktualisierbar, 'domain'); ?>
|
||
<p><?= count($aktualisierbar) ?> Installation(en): <?= $v->e(implode(', ', array_slice($namen, 0, 8))) ?><?= count($namen) > 8 ? ' und '.(count($namen) - 8).' weitere' : '' ?>. Jede holt den Auftrag mit ihrer nächsten Meldung ab, sichert sich vorher und schaltet bei einem Fehler zurück.</p>
|
||
<label class="bestaetigen"><input type="checkbox" name="bestaetigt" value="ja" required> Ja, alle <?= count($aktualisierbar) ?> aktualisieren</label>
|
||
</div>
|
||
<button type="submit" class="knopf">Alle aktualisieren</button>
|
||
</form>
|
||
<?php } ?>
|
||
|
||
<?php if ($zahlen['alle'] > 0) { ?>
|
||
<form method="get" action="/" class="suche" role="search">
|
||
<?php if (null !== $filter) { ?><input type="hidden" name="filter" value="<?= $v->e($filter) ?>"><?php } ?>
|
||
<label for="q">Suchen</label>
|
||
<div class="suche-zeile">
|
||
<input id="q" name="q" type="search" value="<?= $v->e($suche) ?>" placeholder="Domain, Kunde, Fassung oder IP" aria-describedby="treffer">
|
||
<button type="submit" class="knopf">Suchen</button>
|
||
<?php if ('' !== $suche || null !== $filter) { ?><a class="knopf knopf-leise" href="/">Zurücksetzen</a><?php } ?>
|
||
</div>
|
||
<p class="klein" id="treffer" role="status">
|
||
<?php if (0 === $treffer) { ?>Keine Treffer.<?php } else { ?><?= $von ?>–<?= $bis ?> von <?= $treffer ?> <?= 1 === $treffer ? 'Installation' : 'Installationen' ?><?= null !== $filter ? ' · Filter: '.$v->e($kacheln[$filter][1]) : '' ?><?= '' !== $suche ? ' · Suche: „'.$v->e($suche).'“' : '' ?><?php } ?>
|
||
</p>
|
||
</form>
|
||
<?php } ?>
|
||
|
||
<?php if (0 === $zahlen['alle']) { ?>
|
||
<div class="karte leer">
|
||
<h2>Noch keine Meldung</h2>
|
||
<p>Sobald eine KantSites-Installation ab Fassung 1.36.0 läuft, meldet sie sich hier – spätestens 15 Minuten nach dem ersten Besuch oder Cron-Aufruf.</p>
|
||
</div>
|
||
<?php } elseif (0 === $treffer) { ?>
|
||
<div class="karte leer">
|
||
<h2>Nichts gefunden</h2>
|
||
<p>Keine Installation passt zu Suche und Filter. <a href="/">Alle anzeigen</a></p>
|
||
</div>
|
||
<?php } else { ?>
|
||
<div class="tabelle-rahmen">
|
||
<table class="tabelle">
|
||
<caption class="unsichtbar">Gemeldete Installationen, Seite <?= $seite ?> von <?= $seiten ?></caption>
|
||
<thead>
|
||
<tr><th scope="col">Domain</th><th scope="col">Kunde</th><th scope="col">Fassung</th><th scope="col">Letzte Meldung</th><th scope="col">Zustand</th><th scope="col"><span class="unsichtbar">Aktion</span></th></tr>
|
||
</thead>
|
||
<tbody>
|
||
<?php foreach ($installationen as $i) { ?>
|
||
<tr>
|
||
<th scope="row" data-label="Domain"><a href="/installation?id=<?= $v->e(rawurlencode($i['id'])) ?>"><?= $v->e($i['domain']) ?></a>
|
||
<?php if (null !== $i['domain_vorher']) { ?><span class="klein">vorher <?= $v->e($i['domain_vorher']) ?></span><?php } ?></th>
|
||
<td data-label="Kunde"><?= $i['unbekannt'] ? '<span class="marke-fremd">Unbekannt</span>' : $v->e($i['notiz']) ?></td>
|
||
<td data-label="Fassung"><span class="fassung <?= $i['veraltet'] ? 'f-alt' : 'f-ok' ?>"><?= $v->e($i['fassung']) ?></span><?php if ('git' === $i['art']) { ?> <span class="klein">Git</span><?php } ?></td>
|
||
<td data-label="Letzte Meldung"><span class="<?= $i['still'] ? 'still' : '' ?>"><?= $v->e($v->vor($i['alter'])) ?></span></td>
|
||
<td data-label="Zustand">
|
||
<?php if ($i['wartung']) { ?><span class="pille p-warn">Wartung</span> <?php } ?>
|
||
<?php if (null !== $i['auftrag_zustand']) { ?><span class="pille p-<?= $v->e($i['auftrag_zustand']['art']) ?>"><?= $v->e($i['auftrag_zustand']['text']) ?></span><?php } elseif (!$i['wartung']) { ?><span class="klein">–</span><?php } ?>
|
||
</td>
|
||
<td class="aktion">
|
||
<?php if ($i['kann_update'] && null !== $neueste && 'wartet' !== ($i['auftrag_zustand']['art'] ?? null)) { ?>
|
||
<form method="post" action="/auftrag">
|
||
<?= $v->csrf() ?>
|
||
<input type="hidden" name="id" value="<?= $v->e($i['id']) ?>">
|
||
<button type="submit" class="knopf knopf-klein">Auf <?= $v->e($neueste['version']) ?><span class="unsichtbar"> aktualisieren: <?= $v->e($i['domain']) ?></span></button>
|
||
</form>
|
||
<?php } ?>
|
||
</td>
|
||
</tr>
|
||
<?php } ?>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<?php if ($seiten > 1) { ?>
|
||
<nav class="seiten" aria-label="Seiten">
|
||
<?php $basis = ['q' => $suche, 'filter' => $filter]; ?>
|
||
<?php if ($seite > 1) { ?><a class="knopf knopf-leise" href="<?= $v->e($v->adresse([...$basis, 'seite' => $seite - 1])) ?>" rel="prev">← Zurück</a><?php } ?>
|
||
<ul>
|
||
<?php
|
||
// Erste, letzte und zwei um die aktuelle; dazwischen Auslassungen.
|
||
$zeigen = array_unique(array_filter([1, $seite - 2, $seite - 1, $seite, $seite + 1, $seite + 2, $seiten], static fn (int $n): bool => $n >= 1 && $n <= $seiten));
|
||
sort($zeigen);
|
||
$vorher = 0;
|
||
foreach ($zeigen as $n) {
|
||
if ($n > $vorher + 1) { ?><li aria-hidden="true">…</li><?php }
|
||
$vorher = $n; ?>
|
||
<li><?php if ($n === $seite) { ?><span aria-current="page"><span class="unsichtbar">Seite </span><?= $n ?></span><?php } else { ?><a href="<?= $v->e($v->adresse([...$basis, 'seite' => $n])) ?>"><span class="unsichtbar">Seite </span><?= $n ?></a><?php } ?></li>
|
||
<?php } ?>
|
||
</ul>
|
||
<?php if ($seite < $seiten) { ?><a class="knopf knopf-leise" href="<?= $v->e($v->adresse([...$basis, 'seite' => $seite + 1])) ?>" rel="next">Weiter →</a><?php } ?>
|
||
</nav>
|
||
<?php } ?>
|
||
<?php } ?>
|