sdasd
This commit is contained in:
@@ -9,6 +9,10 @@
|
|||||||
return d.toLocaleString('de-DE');
|
return d.toLocaleString('de-DE');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let refreshTimer = null;
|
||||||
|
let loadInFlight = false;
|
||||||
|
let loadErrorShown = false;
|
||||||
|
|
||||||
const apiCall = async (action, payload = {}) => {
|
const apiCall = async (action, payload = {}) => {
|
||||||
const res = await fetch(`/module/pihole/api?action=${encodeURIComponent(action)}`,
|
const res = await fetch(`/module/pihole/api?action=${encodeURIComponent(action)}`,
|
||||||
{
|
{
|
||||||
@@ -240,6 +244,8 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
const loadDashboard = async () => {
|
const loadDashboard = async () => {
|
||||||
|
if (loadInFlight) return;
|
||||||
|
loadInFlight = true;
|
||||||
try {
|
try {
|
||||||
const data = await apiCall('dashboard');
|
const data = await apiCall('dashboard');
|
||||||
if (!data.ok) throw new Error(data.error || 'API error');
|
if (!data.ok) throw new Error(data.error || 'API error');
|
||||||
@@ -259,16 +265,32 @@
|
|||||||
renderList(document.querySelector('[data-top-queries]'), data.aggregate?.top_queries, 'Keine Daten');
|
renderList(document.querySelector('[data-top-queries]'), data.aggregate?.top_queries, 'Keine Daten');
|
||||||
renderList(document.querySelector('[data-top-clients]'), data.aggregate?.query_sources, 'Keine Daten');
|
renderList(document.querySelector('[data-top-clients]'), data.aggregate?.query_sources, 'Keine Daten');
|
||||||
renderBlocked(document.querySelector('[data-recent-blocked]'), data.aggregate?.recent_blocked);
|
renderBlocked(document.querySelector('[data-recent-blocked]'), data.aggregate?.recent_blocked);
|
||||||
|
loadErrorShown = false;
|
||||||
|
const existing = page.querySelector('[data-pihole-load-error]');
|
||||||
|
if (existing) existing.remove();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const message = document.createElement('div');
|
let message = page.querySelector('[data-pihole-load-error]');
|
||||||
message.className = 'card';
|
if (!message) {
|
||||||
message.style.marginTop = '1rem';
|
message = document.createElement('div');
|
||||||
|
message.className = 'card';
|
||||||
|
message.style.marginTop = '1rem';
|
||||||
|
message.dataset.piholeLoadError = '1';
|
||||||
|
page.appendChild(message);
|
||||||
|
}
|
||||||
message.textContent = `Fehler beim Laden der Pi-hole Daten: ${err.message}`;
|
message.textContent = `Fehler beim Laden der Pi-hole Daten: ${err.message}`;
|
||||||
page.appendChild(message);
|
loadErrorShown = true;
|
||||||
|
} finally {
|
||||||
|
loadInFlight = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
bindActionButtons();
|
bindActionButtons();
|
||||||
bindForms();
|
bindForms();
|
||||||
loadDashboard();
|
loadDashboard();
|
||||||
|
refreshTimer = window.setInterval(loadDashboard, 1000);
|
||||||
|
window.addEventListener('beforeunload', () => {
|
||||||
|
if (refreshTimer !== null) {
|
||||||
|
window.clearInterval(refreshTimer);
|
||||||
|
}
|
||||||
|
});
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -15,6 +15,21 @@ if (!$module) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$fields = (array)($module['setup']['fields'] ?? []);
|
$fields = (array)($module['setup']['fields'] ?? []);
|
||||||
|
$hasGlobalDebugField = false;
|
||||||
|
foreach ($fields as $field) {
|
||||||
|
if ((string)($field['name'] ?? '') === 'debug_enabled') {
|
||||||
|
$hasGlobalDebugField = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$hasGlobalDebugField) {
|
||||||
|
$fields[] = [
|
||||||
|
'name' => 'debug_enabled',
|
||||||
|
'label' => 'Modul-Debug aktivieren',
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'help' => 'Wenn aktiv, darf das Modul Debug-Daten sammeln und den Debug-Bereich anzeigen.',
|
||||||
|
];
|
||||||
|
}
|
||||||
$fieldTypes = [];
|
$fieldTypes = [];
|
||||||
$fieldMeta = [];
|
$fieldMeta = [];
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
@@ -407,6 +422,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
modules()->saveSettings($moduleName, $payload);
|
modules()->saveSettings($moduleName, $payload);
|
||||||
|
if (empty($payload['debug_enabled'])) {
|
||||||
|
module_debug_clear($moduleName);
|
||||||
|
}
|
||||||
$notice = 'Setup gespeichert.';
|
$notice = 'Setup gespeichert.';
|
||||||
$module = modules()->get($moduleName) ?: $module;
|
$module = modules()->get($moduleName) ?: $module;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -276,11 +276,30 @@ function module_design(string $module): array
|
|||||||
return $cache[$module];
|
return $cache[$module];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function module_debug_enabled(string $module): bool
|
||||||
|
{
|
||||||
|
if (preg_match('/[^a-zA-Z0-9_\-]/', $module)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$settings = modules()->settings($module);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$value = $settings['debug_enabled'] ?? '0';
|
||||||
|
return $value === true || $value === 1 || $value === '1' || $value === 'true';
|
||||||
|
}
|
||||||
|
|
||||||
function module_debug_entries(string $module): array
|
function module_debug_entries(string $module): array
|
||||||
{
|
{
|
||||||
if (preg_match('/[^a-zA-Z0-9_\-]/', $module)) {
|
if (preg_match('/[^a-zA-Z0-9_\-]/', $module)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
if (!module_debug_enabled($module)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
app()->session()->start();
|
app()->session()->start();
|
||||||
$entries = $_SESSION['module_debug'][$module] ?? [];
|
$entries = $_SESSION['module_debug'][$module] ?? [];
|
||||||
@@ -292,6 +311,9 @@ function module_debug_push(string $module, array $entry): void
|
|||||||
if (preg_match('/[^a-zA-Z0-9_\-]/', $module)) {
|
if (preg_match('/[^a-zA-Z0-9_\-]/', $module)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!module_debug_enabled($module)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
app()->session()->start();
|
app()->session()->start();
|
||||||
if (!isset($_SESSION['module_debug']) || !is_array($_SESSION['module_debug'])) {
|
if (!isset($_SESSION['module_debug']) || !is_array($_SESSION['module_debug'])) {
|
||||||
@@ -427,7 +449,7 @@ function module_shell_footer(): string
|
|||||||
{
|
{
|
||||||
$html = '';
|
$html = '';
|
||||||
$module = current_module_name();
|
$module = current_module_name();
|
||||||
if (is_string($module) && $module !== '') {
|
if (is_string($module) && $module !== '' && module_debug_enabled($module)) {
|
||||||
if ((string) ($_GET['module_debug_clear'] ?? '') === '1') {
|
if ((string) ($_GET['module_debug_clear'] ?? '') === '1') {
|
||||||
module_debug_clear($module);
|
module_debug_clear($module);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user