Compare commits

...

2 Commits

Author SHA1 Message Date
NiekRabelink 51658e0aa9 Merge pull request 'Timzone' (#59) from dev into main
Reviewed-on: #59
2026-09-12 08:57:25 +00:00
NiekRabelink 5a5456ffe0 Timzone 2026-09-12 10:57:11 +02:00
3 changed files with 28 additions and 6 deletions
+3 -3
View File
@@ -1453,9 +1453,9 @@ require_once __DIR__ . '/includes/header.php';
</p>
</div>
<div class="flex items-center space-x-2 flex-shrink-0">
<span class="inline-flex items-center px-2.5 py-1 rounded-full text-xs font-semibold bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border border-emerald-500/20">
<span class="inline-flex items-center px-2.5 py-1 rounded-full text-xs font-semibold bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border border-emerald-500/20" title="Tijdzone: Europe/Amsterdam (UTC+2 in zomertijd / UTC+1 in wintertijd)">
<span class="w-1.5 h-1.5 rounded-full bg-emerald-500 mr-1.5 animate-pulse"></span>
Live Audit Logging Actief
Live Audit Logging Actief • NL Tijd
</span>
</div>
</div>
@@ -1464,7 +1464,7 @@ require_once __DIR__ . '/includes/header.php';
<table class="w-full text-left text-xs text-slate-600 dark:text-slate-300">
<thead>
<tr class="border-b border-slate-200 dark:border-slate-800 text-[11px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500">
<th class="py-3 px-3">Tijdstip</th>
<th class="py-3 px-3">Tijdstip (NL)</th>
<th class="py-3 px-3">Gebruiker / Doel</th>
<th class="py-3 px-3">Actie</th>
<th class="py-3 px-3">IP-adres</th>
+21 -1
View File
@@ -32,6 +32,7 @@ function get_db_connection(): PDO {
");
}
$tzOffset = date('P'); // Dynamische offset conform Europe/Amsterdam (+02:00 in zomertijd, +01:00 in wintertijd)
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
@@ -41,6 +42,9 @@ function get_db_connection(): PDO {
if (defined('PDO::MYSQL_ATTR_MULTI_STATEMENTS')) {
$options[PDO::MYSQL_ATTR_MULTI_STATEMENTS] = true;
}
if (defined('PDO::MYSQL_ATTR_INIT_COMMAND')) {
$options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET time_zone = '{$tzOffset}'";
}
$dsnWithDb = sprintf(
'mysql:host=%s;port=%s;dbname=%s;charset=%s',
@@ -53,6 +57,8 @@ function get_db_connection(): PDO {
// 2. CHECK: Bestaat de database al?
try {
$pdo = new PDO($dsnWithDb, DB_USER, DB_PASS, $options);
// Garandeer dat MariaDB sessietijd 1-op-1 synchroon loopt met PHP tijd (Europe/Amsterdam)
$pdo->exec("SET time_zone = '{$tzOffset}'");
ensure_tables_exist($pdo);
return $pdo;
@@ -70,6 +76,7 @@ function get_db_connection(): PDO {
));
$pdo = new PDO($dsnWithDb, DB_USER, DB_PASS, $options);
$pdo->exec("SET time_zone = '{$tzOffset}'");
ensure_tables_exist($pdo);
return $pdo;
@@ -228,8 +235,21 @@ function ensure_tables_exist(PDO $pdo): void {
}
}
}
// Zorg dat eerdere audit logs die in UTC (+00:00) zijn weggeschreven worden gesynchroniseerd naar Europe/Amsterdam (+2 uur)
try {
$stmtCheck = $pdo->query("SELECT setting_value FROM system_settings WHERE setting_key = 'audit_logs_tz_fixed' LIMIT 1");
$fixed = $stmtCheck ? $stmtCheck->fetchColumn() : null;
if (!$fixed) {
// Pas bestaande audit logs eenmalig aan zodat de weergave klopt met de lokale tijd
$pdo->exec("UPDATE audit_logs SET created_at = DATE_ADD(created_at, INTERVAL 2 HOUR)");
$pdo->prepare("
INSERT INTO system_settings (setting_key, setting_value, created_at, updated_at)
VALUES ('audit_logs_tz_fixed', '1', NOW(), NOW())
ON DUPLICATE KEY UPDATE setting_value = '1', updated_at = NOW()
")->execute();
}
} catch (Throwable $e) {
// Stil negeren indien tabellen nog in opbouw zijn
// Stil negeren indien system_settings tabel nog niet bestaat
}
} catch (Throwable $e) {
error_log("Fout bij controleren tabellen: " . $e->getMessage());
+4 -2
View File
@@ -112,9 +112,10 @@ function fociz_log_audit(?int $userId, string $action, string $resourceType = ''
$statusNormalized = 'SUCCESS';
}
$createdAt = date('Y-m-d H:i:s');
$stmt = $db->prepare("
INSERT INTO audit_logs (user_id, user_email, action, resource_type, resource_id, details, ip_address, user_agent, status, created_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
");
$stmt->execute([
$userId ?: null,
@@ -125,7 +126,8 @@ function fociz_log_audit(?int $userId, string $action, string $resourceType = ''
$detailsJson,
$ip,
$ua,
$statusNormalized
$statusNormalized,
$createdAt
]);
} catch (Throwable $e) {
// Audit log mag NOOIT de applicatiewerking breken