prepare('SELECT id FROM banlist WHERE value=?'); $chk->execute([$value]); if (!$chk->fetchColumn()) { $pdo->prepare('INSERT INTO banlist (match_type,value,reason,created_by,created_at) VALUES (?,?,?,?,?)') ->execute([$matchType, $value, $reason ?: null, $staff['id'], db_now()]); // Tickets schließen $col = $matchType === 'email' ? 'requester_email' : "" . sql_email_domain("requester_email") . ""; $priorStmt = $pdo->prepare("SELECT id,status FROM tickets WHERE $col=? AND status NOT IN ('closed')"); $priorStmt->execute([$value]); $priorTickets = $priorStmt->fetchAll(); $pdo->prepare("UPDATE tickets SET status='closed',resolution_code='spam',resolution_note='Im Rahmen einer Sperre geschlossen',closed_at=?,updated_at=? WHERE $col=? AND status NOT IN ('closed')") ->execute([db_now(), db_now(), $value]); ticket_sla_transition_rows($pdo, $priorTickets, 'closed', (int) $staff['id']); audit_log($staff['id'], "Sperrliste: $value hinzugefügt ($matchType)"); } flash('success', "$value gesperrt."); redirect('/staff/banlist.php'); } } if ($action === 'bulk_add') { $raw = trim($_POST['bulk_values'] ?? ''); $reason = trim($_POST['bulk_reason'] ?? ''); $lines = array_filter(array_map('trim', preg_split('/[\r\n,;]+/', $raw))); $added = 0; $skipped = 0; foreach ($lines as $val) { $val = strtolower($val); $type = str_contains($val, '@') ? 'email' : 'domain'; if ($type === 'email' && !filter_var($val, FILTER_VALIDATE_EMAIL)) { $skipped++; continue; } if ($type === 'domain' && !str_contains($val, '.')) { $skipped++; continue; } $chk = $pdo->prepare('SELECT id FROM banlist WHERE value=?'); $chk->execute([$val]); if ($chk->fetchColumn()) { $skipped++; continue; } $pdo->prepare('INSERT INTO banlist (match_type,value,reason,created_by,created_at) VALUES (?,?,?,?,?)') ->execute([$type, $val, $reason ?: null, $staff['id'], db_now()]); // Tickets schließen $col = $type === 'email' ? 'requester_email' : "" . sql_email_domain("requester_email") . ""; $priorStmt = $pdo->prepare("SELECT id,status FROM tickets WHERE $col=? AND status NOT IN ('closed')"); $priorStmt->execute([$val]); $priorTickets = $priorStmt->fetchAll(); $pdo->prepare("UPDATE tickets SET status='closed',resolution_code='spam',resolution_note='Im Rahmen einer Sperre geschlossen',closed_at=?,updated_at=? WHERE $col=? AND status NOT IN ('closed')") ->execute([db_now(), db_now(), $val]); ticket_sla_transition_rows($pdo, $priorTickets, 'closed', (int) $staff['id']); $added++; } audit_log($staff['id'], "Sperrliste Massen-Import: $added hinzugefügt, $skipped übersprungen"); flash('success', "$added Einträge gesperrt, $skipped übersprungen."); redirect('/staff/banlist.php'); } if ($action === 'delete') { $id = (int)$_POST['id']; $val = $pdo->prepare('SELECT value FROM banlist WHERE id=?'); $val->execute([$id]); $v = $val->fetchColumn(); $pdo->prepare('DELETE FROM banlist WHERE id=?')->execute([$id]); audit_log($staff['id'], "Sperrliste: $v entfernt"); flash('success', "$v entsperrt."); redirect('/staff/banlist.php'); } } $entries = $pdo->query( 'SELECT b.*, s.name AS added_by_name FROM banlist b LEFT JOIN staff s ON s.id = b.created_by ORDER BY b.created_at DESC' )->fetchAll(); $pageTitle = 'Sperrliste'; $activePage = 'banlist'; require __DIR__ . '/_header.php'; ?>
E-Mail-Adressen oder Domains die keine Tickets mehr erstellen dürfen. Beim Sperren werden alle offenen Tickets automatisch geschlossen.
| Typ | Wert | Grund | Gesperrt am | |
|---|---|---|---|---|
| = $b['match_type']==='domain'?'Domain':'E-Mail' ?> | = e($b['value']) ?> | = e($b['reason'] ?: '–') ?> | = format_dt($b['created_at']) ?>= $b['added_by_name'] ? ' '.e($b['added_by_name']) : '' ?> |
|
| Sperrliste ist leer. | ||||
Eine E-Mail oder Domain pro Zeile (oder kommagetrennt). Typ wird automatisch erkannt.