This commit is contained in:
2026-02-03 01:32:31 +01:00
parent 42f49f275e
commit 0668de87af
4 changed files with 52 additions and 11 deletions

View File

@@ -1 +1 @@
1.2.19 1.2.20

View File

@@ -1 +0,0 @@
1.2.1sss

View File

@@ -42,6 +42,8 @@ let debugPhpLoaded = false;
let debugPhpLoading = false; let debugPhpLoading = false;
let debugLogsLoaded = false; let debugLogsLoaded = false;
let debugActiveTab = 'php'; let debugActiveTab = 'php';
let debugLogsRefreshTimer = null;
let debugSelectedLogName = '';
let phpInfoContainer; let phpInfoContainer;
let consoleContainer; let consoleContainer;
let logsListContainer; let logsListContainer;
@@ -949,6 +951,9 @@ function ensureDebugDialog() {
<div class="debug-logs-list" id="debugLogsList">Keine Logs geladen.</div> <div class="debug-logs-list" id="debugLogsList">Keine Logs geladen.</div>
<div class="debug-logs-detail" id="debugLogDetail">Bitte Log auswaehlen.</div> <div class="debug-logs-detail" id="debugLogDetail">Bitte Log auswaehlen.</div>
</div> </div>
<div class="mt-3 flex justify-end">
<button type="button" class="btn" id="debugLogsRefresh">Logs aktualisieren</button>
</div>
</div> </div>
</div>`; </div>`;
document.body.appendChild(debugDialog); document.body.appendChild(debugDialog);
@@ -956,6 +961,7 @@ function ensureDebugDialog() {
consoleContainer = debugDialog.querySelector('#debugConsoleContent'); consoleContainer = debugDialog.querySelector('#debugConsoleContent');
logsListContainer = debugDialog.querySelector('#debugLogsList'); logsListContainer = debugDialog.querySelector('#debugLogsList');
logDetailContainer = debugDialog.querySelector('#debugLogDetail'); logDetailContainer = debugDialog.querySelector('#debugLogDetail');
debugDialog.querySelector('#debugLogsRefresh')?.addEventListener('click', () => loadDebugLogs(true));
debugDialog.querySelector('[data-debug-close]')?.addEventListener('click', () => closeDebugDialog()); debugDialog.querySelector('[data-debug-close]')?.addEventListener('click', () => closeDebugDialog());
debugDialog.addEventListener('close', () => setDebugTab('php')); debugDialog.addEventListener('close', () => setDebugTab('php'));
debugDialog.querySelectorAll('[data-debug-tab]').forEach(btn => { debugDialog.querySelectorAll('[data-debug-tab]').forEach(btn => {
@@ -975,6 +981,10 @@ function openDebugDialog(tab = 'php') {
} }
function closeDebugDialog() { function closeDebugDialog() {
if (debugLogsRefreshTimer) {
clearInterval(debugLogsRefreshTimer);
debugLogsRefreshTimer = null;
}
if (debugDialog?.open) debugDialog.close(); if (debugDialog?.open) debugDialog.close();
} }
@@ -993,7 +1003,19 @@ function setDebugTab(tab) {
} else if (debugActiveTab === 'console') { } else if (debugActiveTab === 'console') {
renderConsolePanel(); renderConsolePanel();
} else if (debugActiveTab === 'logs') { } else if (debugActiveTab === 'logs') {
loadDebugLogs(); loadDebugLogs(true);
if (!debugLogsRefreshTimer) {
debugLogsRefreshTimer = setInterval(() => {
if (debugDialog?.open && debugActiveTab === 'logs') {
loadDebugLogs(true);
}
}, 5000);
}
} else {
if (debugLogsRefreshTimer) {
clearInterval(debugLogsRefreshTimer);
debugLogsRefreshTimer = null;
}
} }
} }
@@ -1033,10 +1055,12 @@ function renderConsolePanel() {
consoleContainer.innerHTML = lines.join(''); consoleContainer.innerHTML = lines.join('');
} }
async function loadDebugLogs() { async function loadDebugLogs(force = false) {
if (debugLogsLoaded || !logsListContainer || !logDetailContainer) return; if ((!force && debugLogsLoaded) || !logsListContainer || !logDetailContainer) return;
logsListContainer.textContent = 'Lade Logs…'; logsListContainer.textContent = 'Lade Logs…';
if (!debugSelectedLogName) {
logDetailContainer.textContent = 'Bitte Log auswaehlen.'; logDetailContainer.textContent = 'Bitte Log auswaehlen.';
}
try { try {
const res = await apiAction('debug.logs.list', { method: 'GET' }); const res = await apiAction('debug.logs.list', { method: 'GET' });
if (!res?.ok) throw new Error(res?.error || 'Logs konnten nicht geladen werden'); if (!res?.ok) throw new Error(res?.error || 'Logs konnten nicht geladen werden');
@@ -1047,17 +1071,31 @@ async function loadDebugLogs() {
} }
logsListContainer.innerHTML = ''; logsListContainer.innerHTML = '';
items.forEach((item, idx) => { items.forEach((item, idx) => {
const name = item.name || item.file || `Log ${idx + 1}`;
const btn = document.createElement('button'); const btn = document.createElement('button');
btn.type = 'button'; btn.type = 'button';
btn.textContent = item.name || item.file || `Log ${idx + 1}`; btn.textContent = name;
btn.addEventListener('click', () => { btn.addEventListener('click', () => {
logsListContainer.querySelectorAll('button').forEach(b => b.classList.remove('active')); logsListContainer.querySelectorAll('button').forEach(b => b.classList.remove('active'));
btn.classList.add('active'); btn.classList.add('active');
loadDebugLogFile(item.name || item.file || ''); debugSelectedLogName = name;
loadDebugLogFile(name);
}); });
logsListContainer.appendChild(btn); logsListContainer.appendChild(btn);
if (idx === 0) btn.click(); if (debugSelectedLogName && debugSelectedLogName === name) {
btn.classList.add('active');
}
}); });
if (!debugSelectedLogName) {
const first = logsListContainer.querySelector('button');
if (first) first.click();
} else {
const active = logsListContainer.querySelector('button.active');
if (!active) {
const first = logsListContainer.querySelector('button');
if (first) first.click();
}
}
debugLogsLoaded = true; debugLogsLoaded = true;
} catch (err) { } catch (err) {
logsListContainer.textContent = err.message || 'Logs konnten nicht geladen werden'; logsListContainer.textContent = err.message || 'Logs konnten nicht geladen werden';

View File

@@ -17,8 +17,12 @@ if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$clientIp = (string)($_SERVER['REMOTE_ADDR'] ?? ''); $clientIp = (string)($_SERVER['REMOTE_ADDR'] ?? '');
} }
$clientIp = trim($clientIp); $clientIp = trim($clientIp);
$accessLine = date(DATE_ATOM) . ' | ' . ($clientIp !== '' ? $clientIp : 'unknown') . "\n"; $version = $GLOBALS['app_version'] ?? '';
@file_put_contents($debugDir . '/last_access.log', $accessLine); $versionLabel = $version ? (' | v' . $version) : '';
$accessLine = date(DATE_ATOM) . ' | ' . ($clientIp !== '' ? $clientIp : 'unknown') . $versionLabel . "\n";
$logFile = $debugDir . '/last_access.log';
$existing = is_file($logFile) ? (string)@file_get_contents($logFile) : '';
@file_put_contents($logFile, $accessLine . $existing);
$pageTitle = 'Email Template System Admin'; $pageTitle = 'Email Template System Admin';
$pageId = 'home'; $pageId = 'home';