From f0d9b5de51dc364231fc3508c54586c594c4ed0a Mon Sep 17 00:00:00 2001 From: JensFalk Date: Mon, 21 Sep 2026 18:58:45 +0200 Subject: [PATCH] Diagnose: HTML-Kommentar-Debugausgabe (v1.0.1) --- .../src/Handler/TemplateHandler.php | 52 ++++++++++++++++--- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/fp_altcha_spamschutz/src/Handler/TemplateHandler.php b/fp_altcha_spamschutz/src/Handler/TemplateHandler.php index 73910a9..1e643b7 100644 --- a/fp_altcha_spamschutz/src/Handler/TemplateHandler.php +++ b/fp_altcha_spamschutz/src/Handler/TemplateHandler.php @@ -37,9 +37,7 @@ class TemplateHandler try { $this->doTemplateIntegration($args); } catch (\Throwable $e) { - if ($this->altchaService->isDebug()) { - error_log('[fp_altcha_spamschutz] Fehler bei Template-Integration: ' . $e->getMessage()); - } + $this->logDebug($args, 'Fehler bei Template-Integration: ' . $e->getMessage()); } } @@ -51,29 +49,69 @@ class TemplateHandler /** @var phpQueryObject $document */ $document = $args['document']; + $registerEnabled = $this->altchaService->isEnabledForRegistration(); + $newsletterEnabled = $this->altchaService->isEnabledForNewsletter(); + $injected = false; - if ($this->altchaService->isEnabledForRegistration()) { + $registerFormCount = 0; + if ($registerEnabled) { $registerForm = $document->find('form.register-form'); - if (\count($registerForm) > 0) { + $registerFormCount = \count($registerForm); + if ($registerFormCount > 0) { $this->injectWidget($document, $registerForm); $injected = true; } } - if ($this->altchaService->isEnabledForNewsletter()) { + $newsletterFormCount = 0; + if ($newsletterEnabled) { $newsletterForm = $document->find('input[name="abonnieren"]')->closest('form'); - if (\count($newsletterForm) > 0) { + $newsletterFormCount = \count($newsletterForm); + if ($newsletterFormCount > 0) { $this->injectWidget($document, $newsletterForm); $injected = true; } } + $this->logDebug($args, \sprintf( + 'Hook ausgefuehrt: register_enabled=%d register_forms_gefunden=%d ' + . 'newsletter_enabled=%d newsletter_forms_gefunden=%d widget_eingefuegt=%d', + $registerEnabled ? 1 : 0, + $registerFormCount, + $newsletterEnabled ? 1 : 0, + $newsletterFormCount, + $injected ? 1 : 0 + )); + if ($injected) { $this->includeScript($document); } } + /** + * Schreibt eine Diagnosemeldung, sofern in den Plugin-Einstellungen "Debug-Logging aktivieren" + * eingeschaltet ist. Die Meldung geht sowohl in das PHP-Errorlog des Servers als auch -- damit + * sie auch ohne Serverzugriff einsehbar ist -- als HTML-Kommentar in die ausgelieferte Seite + * (fuer Besucher unsichtbar, im Seitenquelltext aber direkt sichtbar). + * + * @param array $args + */ + private function logDebug(array $args, string $message): void + { + if (!$this->altchaService->isDebug()) { + return; + } + + error_log('[fp_altcha_spamschutz] ' . $message); + + $document = $args['document'] ?? null; + if ($document instanceof phpQueryObject) { + $safeMessage = htmlspecialchars($message, \ENT_QUOTES, 'UTF-8'); + $document->find('body')->append(''); + } + } + private function injectWidget(phpQueryObject $document, phpQueryObject $form): void { // Nicht doppelt einfuegen (z. B. wenn die Seite mehrfach gefiltert wird).