feat(admin): add transparent debug error-log mode

Add an admin-controlled debug mode that captures PHP errors of all
players into var/log/debug-players.log, to hunt remaining PHP 8.3 bugs
from real play sessions. Fully transparent to players: no redirect, no
gameplay change, errors are never displayed.

- DB: new debug_log table (one row), mirroring the maintenance pattern.
- Database: getDebugMode()/setDebugMode()/setDebugSettings(), defensive
  when the table is absent (no blank page).
- Session: register a custom error + shutdown handler when enabled; the
  handler runs even when php.ini error_reporting masks warnings/notices,
  so capture is complete without a Docker rebuild. Auto-disables after a
  configurable window.
- DebugErrorLogger: size-capped file with a single .log.1 rotation,
  honours the @ operator, never throws.
- Admin: new "Debug Error Log" page (levels, size cap, auto-off, on-page
  viewer, clear, download) + debugLog action mod.
- Menu: admin-only quick on/off widget (TZ_DEBUG_ON/OFF, EN/FR/RO).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Ferywir
2026-06-12 15:25:57 +02:00
committed by Catalin Novgorodschi
parent 63c94fa961
commit 827354a622
12 changed files with 563 additions and 3 deletions
+2
View File
@@ -1926,6 +1926,8 @@ define('TZ_CONSTRUCT_WAREHOUSE', 'Construiește un depozit.');
define('TZ_CP_DAY', 'PC/zi');
define('TZ_CROP_25_5_GOLD', 'Grâne +25% (5 aur)');
define('TZ_DATE_AND_TIME', 'Data și ora');
define('TZ_DEBUG_OFF', 'Jurnal debug OPRIT');
define('TZ_DEBUG_ON', 'Jurnal debug PORNIT');
define('TZ_DECLARE_WAR', 'declară război');
define('TZ_DEFAULT', 'Implicit:');
define('TZ_DELETE_ACCOUNT', 'Ștergi contul?');