144 lines
6.4 KiB
PHP
144 lines
6.4 KiB
PHP
<?php
|
||
$assets = app()->assets();
|
||
$assets->addStyle('/module/pihole/asset?file=pihole.css');
|
||
$assets->addScript('/module/pihole/asset?file=pihole.js', 'footer', true);
|
||
|
||
$settings = modules()->settings('pihole');
|
||
$instances = module_fn('pihole', 'instances');
|
||
$hasConfig = !empty($instances);
|
||
$refreshSeconds = (int)($settings['dashboard_refresh_sec'] ?? 1);
|
||
if ($refreshSeconds < 0) {
|
||
$refreshSeconds = 1;
|
||
}
|
||
?>
|
||
<?= module_shell_header('pihole', [
|
||
'title' => 'Pi-hole Dashboard',
|
||
'description' => 'Status, Blockings, Usage und Steuerung fuer beide Instanzen.',
|
||
]) ?>
|
||
<div class="module-flow pihole-page" data-pihole-page="dashboard" data-refresh-seconds="<?= e((string)$refreshSeconds) ?>">
|
||
|
||
<section class="module-box">
|
||
<div class="pihole-section-header">
|
||
<strong>Hosts</strong>
|
||
<a class="module-button module-button--secondary module-button--small" href="/module/pihole/instances">Instanzen verwalten</a>
|
||
</div>
|
||
<?php if (!$instances): ?>
|
||
<div class="muted" style="margin-top:.75rem;">Keine Pi-hole Instanzen vorhanden. Bitte zuerst hinzufuegen.</div>
|
||
<div style="margin-top:.75rem;"><a class="module-button module-button--primary" href="/module/pihole/instances">+ Neue Instanz</a></div>
|
||
<?php else: ?>
|
||
<div class="pihole-list" style="margin-top:1rem;">
|
||
<?php foreach ($instances as $instance): ?>
|
||
<div class="pihole-list-row">
|
||
<div>
|
||
<strong><?= e((string)($instance['name'] ?? $instance['id'] ?? '')) ?></strong>
|
||
<div class="muted"><?= e((string)($instance['url'] ?? '')) ?></div>
|
||
</div>
|
||
<?php if (!empty($instance['is_primary'])): ?>
|
||
<span class="pihole-status">Primaer</span>
|
||
<?php endif; ?>
|
||
</div>
|
||
<?php endforeach; ?>
|
||
</div>
|
||
<?php endif; ?>
|
||
</section>
|
||
|
||
<?php if (!$hasConfig): ?>
|
||
<?php return; ?>
|
||
<?php else: ?>
|
||
<div class="module-box-grid module-box-grid--stats pihole-grid">
|
||
<div class="module-box-soft pihole-stat">
|
||
<div class="muted">DNS Queries (heute)</div>
|
||
<div class="pihole-stat-value" data-summary-dns>–</div>
|
||
</div>
|
||
<div class="module-box-soft pihole-stat">
|
||
<div class="muted">Ads geblockt</div>
|
||
<div class="pihole-stat-value" data-summary-blocked>–</div>
|
||
<div class="pihole-stat-sub" data-summary-percent>–</div>
|
||
</div>
|
||
<div class="module-box-soft pihole-stat">
|
||
<div class="muted">Unique Clients</div>
|
||
<div class="pihole-stat-value" data-summary-clients>–</div>
|
||
</div>
|
||
<div class="module-box-soft pihole-stat">
|
||
<div class="muted">Status</div>
|
||
<div class="pihole-stat-value" data-summary-status>–</div>
|
||
</div>
|
||
</div>
|
||
|
||
<section class="module-box">
|
||
<div class="pihole-section-header">
|
||
<strong>Blocker steuern (alle Instanzen)</strong>
|
||
<span class="muted" data-summary-last-refresh>Letztes Update: –</span>
|
||
</div>
|
||
<div class="pihole-actions" data-global-actions>
|
||
<button class="cta-button" data-action="enable" data-instance="all">Aktivieren</button>
|
||
<button class="nav-link" data-action="disable" data-minutes="5" data-instance="all">5 Min</button>
|
||
<button class="nav-link" data-action="disable" data-minutes="10" data-instance="all">10 Min</button>
|
||
<button class="nav-link" data-action="disable" data-minutes="20" data-instance="all">20 Min</button>
|
||
<button class="nav-link" data-action="disable" data-minutes="30" data-instance="all">30 Min</button>
|
||
<button class="nav-link" data-action="disable" data-minutes="60" data-instance="all">60 Min</button>
|
||
<div class="pihole-inline">
|
||
<input type="number" min="1" max="1440" placeholder="Minuten" data-custom-minutes="all">
|
||
<button class="nav-link" data-action="disable-custom" data-instance="all">Custom</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="module-box">
|
||
<div class="pihole-section-header">
|
||
<strong>Instanzen</strong>
|
||
<span class="muted">Einzeln steuerbar & getrennte Updates</span>
|
||
</div>
|
||
<div class="pihole-instance-grid" data-instance-cards></div>
|
||
</section>
|
||
|
||
<section class="module-box">
|
||
<div class="pihole-section-header">
|
||
<strong>Usage (Aggregiert)</strong>
|
||
<span class="muted">Query-Typen und Weiterleitungen</span>
|
||
</div>
|
||
<div class="pihole-split" style="margin-top:1rem;">
|
||
<div>
|
||
<div class="muted">Query-Typen</div>
|
||
<div class="pihole-list" data-query-types></div>
|
||
</div>
|
||
<div>
|
||
<div class="muted">Forward Destinations</div>
|
||
<div class="pihole-list" data-forward-destinations></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<?php endif; ?>
|
||
</div>
|
||
|
||
<template id="pihole-instance-template">
|
||
<div class="module-box-soft pihole-instance" data-instance="">
|
||
<div class="pihole-instance-header">
|
||
<div>
|
||
<strong data-instance-name></strong>
|
||
<div class="muted" data-instance-url></div>
|
||
</div>
|
||
<div class="pihole-status" data-instance-status>–</div>
|
||
</div>
|
||
<div class="pihole-instance-stats">
|
||
<div><span class="muted">DNS heute</span><div class="pihole-instance-value" data-instance-dns>–</div></div>
|
||
<div><span class="muted">Ads geblockt</span><div class="pihole-instance-value" data-instance-ads>–</div></div>
|
||
<div><span class="muted">% Blocked</span><div class="pihole-instance-value" data-instance-percent>–</div></div>
|
||
</div>
|
||
<div class="pihole-actions" data-instance-actions>
|
||
<button class="cta-button" data-action="enable" data-instance="">Aktivieren</button>
|
||
<button class="nav-link" data-action="disable" data-minutes="5" data-instance="">5 Min</button>
|
||
<button class="nav-link" data-action="disable" data-minutes="10" data-instance="">10 Min</button>
|
||
<button class="nav-link" data-action="disable" data-minutes="30" data-instance="">30 Min</button>
|
||
<div class="pihole-inline">
|
||
<input type="number" min="1" max="1440" placeholder="Minuten" data-custom-minutes="">
|
||
<button class="nav-link" data-action="disable-custom" data-instance="">Custom</button>
|
||
</div>
|
||
<button class="nav-link" data-action="update" data-instance="">Pi-hole Update</button>
|
||
</div>
|
||
<div class="pihole-update" data-instance-update></div>
|
||
<div class="pihole-error" data-instance-errors></div>
|
||
</div>
|
||
</template>
|
||
<?= module_shell_footer() ?>
|