sdasd
This commit is contained in:
@@ -9,6 +9,10 @@
|
||||
return d.toLocaleString('de-DE');
|
||||
};
|
||||
|
||||
let refreshTimer = null;
|
||||
let loadInFlight = false;
|
||||
let loadErrorShown = false;
|
||||
|
||||
const apiCall = async (action, payload = {}) => {
|
||||
const res = await fetch(`/module/pihole/api?action=${encodeURIComponent(action)}`,
|
||||
{
|
||||
@@ -240,6 +244,8 @@
|
||||
};
|
||||
|
||||
const loadDashboard = async () => {
|
||||
if (loadInFlight) return;
|
||||
loadInFlight = true;
|
||||
try {
|
||||
const data = await apiCall('dashboard');
|
||||
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-clients]'), data.aggregate?.query_sources, 'Keine Daten');
|
||||
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) {
|
||||
const message = document.createElement('div');
|
||||
message.className = 'card';
|
||||
message.style.marginTop = '1rem';
|
||||
let message = page.querySelector('[data-pihole-load-error]');
|
||||
if (!message) {
|
||||
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}`;
|
||||
page.appendChild(message);
|
||||
loadErrorShown = true;
|
||||
} finally {
|
||||
loadInFlight = false;
|
||||
}
|
||||
};
|
||||
|
||||
bindActionButtons();
|
||||
bindForms();
|
||||
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'] ?? []);
|
||||
$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 = [];
|
||||
$fieldMeta = [];
|
||||
foreach ($fields as $field) {
|
||||
@@ -407,6 +422,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
}
|
||||
} else {
|
||||
modules()->saveSettings($moduleName, $payload);
|
||||
if (empty($payload['debug_enabled'])) {
|
||||
module_debug_clear($moduleName);
|
||||
}
|
||||
$notice = 'Setup gespeichert.';
|
||||
$module = modules()->get($moduleName) ?: $module;
|
||||
}
|
||||
|
||||
@@ -276,11 +276,30 @@ function module_design(string $module): array
|
||||
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
|
||||
{
|
||||
if (preg_match('/[^a-zA-Z0-9_\-]/', $module)) {
|
||||
return [];
|
||||
}
|
||||
if (!module_debug_enabled($module)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
app()->session()->start();
|
||||
$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)) {
|
||||
return;
|
||||
}
|
||||
if (!module_debug_enabled($module)) {
|
||||
return;
|
||||
}
|
||||
|
||||
app()->session()->start();
|
||||
if (!isset($_SESSION['module_debug']) || !is_array($_SESSION['module_debug'])) {
|
||||
@@ -427,7 +449,7 @@ function module_shell_footer(): string
|
||||
{
|
||||
$html = '';
|
||||
$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') {
|
||||
module_debug_clear($module);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user