Datenschutz
Diese Seite ist nur für Administratoren zugänglich.
'; return; }
$message = null;
$error = null;
$found = null;
$searched = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
verify_csrf();
$action = $_POST['action'] ?? '';
if ($action === 'settings') {
$unit = isset(datenschutz_units()[$_POST['unit'] ?? '']) ? $_POST['unit'] : 'days';
$picked = array_values(array_intersect(array_keys(datenschutz_field_labels()), (array) ($_POST['fields'] ?? [])));
if (!$picked) {
$error = 'Bitte mindestens eine Datenart zum Anonymisieren wählen.';
} else {
plugin_set_setting(DATENSCHUTZ, 'amount', (string) max(1, (int) ($_POST['amount'] ?? 30)));
plugin_set_setting(DATENSCHUTZ, 'unit', $unit);
plugin_set_setting(DATENSCHUTZ, 'basis', ($_POST['basis'] ?? '') === 'created' ? 'created' : 'closed');
plugin_set_setting(DATENSCHUTZ, 'include_open', !empty($_POST['include_open']) ? '1' : '0');
plugin_set_setting(DATENSCHUTZ, 'fields', implode(',', $picked));
$message = 'Einstellungen gespeichert.';
}
} elseif ($action === 'enable') {
if (empty($_POST['confirm'])) $error = 'Bitte bestätigen, dass Sie die unwiderrufliche Anonymisierung einschalten wollen.';
else { plugin_set_setting(DATENSCHUTZ, 'enabled', '1'); datenschutz_log($pdo, 'manual', 0, 0, 'Automatische Anonymisierung eingeschaltet', (int) $staff['id']); $message = 'Die automatische Anonymisierung ist eingeschaltet. Sie läuft ab jetzt im Hintergrund.'; }
} elseif ($action === 'disable') {
plugin_set_setting(DATENSCHUTZ, 'enabled', '0');
datenschutz_log($pdo, 'manual', 0, 0, 'Automatische Anonymisierung ausgeschaltet', (int) $staff['id']);
$message = 'Die automatische Anonymisierung ist ausgeschaltet.';
} elseif ($action === 'run') {
$n = datenschutz_run($pdo, 500, 'manual', (int) $staff['id']);
$message = $n . ' Ticket(s) anonymisiert.';
} elseif ($action === 'core_off') {
set_setting('retention_enabled', '0');
audit_log($staff['id'], 'Automatische Datenlöschung des Kerns ausgeschaltet (Plugin Datenschutz übernimmt)');
$message = 'Die automatische Datenlöschung des Kerns ist ausgeschaltet.';
} elseif ($action === 'find') {
$searched = trim((string) ($_POST['email'] ?? ''));
$found = datenschutz_find_customer($pdo, $searched);
if (!$found) $error = 'Unter dieser Adresse gibt es keinen registrierten Kunden.';
} elseif ($action === 'delete_customer') {
if (empty($_POST['confirm'])) $error = 'Bitte die Löschung bestätigen.';
else {
$r = datenschutz_delete_customer($pdo, $staff, (int) ($_POST['user_id'] ?? 0), !empty($_POST['close_open']));
if ($r['ok']) $message = 'Die Daten des Kunden wurden unwiderruflich gelöscht (' . $r['tickets'] . ' Ticket(s) anonymisiert, Konto anonymisiert, Nachrichten und Anhänge entfernt).';
else { $error = $r['error']; $searched = trim((string) ($_POST['email'] ?? '')); $found = datenschutz_find_customer($pdo, $searched); }
}
}
}
$cfg = datenschutz_config();
$count = datenschutz_candidate_count($pdo);
$tabs = ['uebersicht' => 'Übersicht', 'einstellungen' => 'Einstellungen', 'antrag' => 'Löschung auf Antrag', 'protokoll' => 'Protokoll'];
$tab = (string) ($_GET['tab'] ?? 'uebersicht');
if (!isset($tabs[$tab])) $tab = 'uebersicht';
// Nach einer Suche bzw. Löschung bleibt man im Reiter „Löschung auf Antrag“
if ($_SERVER['REQUEST_METHOD'] === 'POST' && in_array($_POST['action'] ?? '', ['find', 'delete_customer'], true)) $tab = 'antrag';
$log = [];
$logTotal = 0;
$perPage = 50;
$seite = 1;
if ($tab === 'protokoll') {
$logTotal = (int) $pdo->query('SELECT COUNT(*) FROM plugin_datenschutz_log')->fetchColumn();
$pages = max(1, (int) ceil($logTotal / $perPage));
$seite = min($pages, max(1, (int) ($_GET['seite'] ?? 1)));
$log = $pdo->query('SELECT l.*, s.name AS staff_name FROM plugin_datenschutz_log l LEFT JOIN staff s ON s.id = l.staff_id ORDER BY l.id DESC LIMIT ' . $perPage . ' OFFSET ' . (($seite - 1) * $perPage))->fetchAll();
}
$coreOn = get_setting('retention_enabled', '0') === '1';
$kinds = ['auto' => 'Automatisch', 'manual' => 'Von Hand', 'request' => 'Löschung auf Antrag'];
?>
Datenschutz
= e($message) ?>
= e($error) ?>
= datenschutz_tabs($tab, $tabs) ?>
Die automatische Datenlöschung von DeskHub (Einstellungen → Datenschutz) ist eingeschaltet. Sie anonymisiert nach ihrer Frist auch registrierte Kunden. Das widerspricht der Regel „Daten registrierter Kunden bleiben bis zur Löschung auf Antrag“. Schalten Sie sie aus, dieses Plugin übernimmt die Aufgabe.
Regeln
- Tickets ohne Registrierung: Nach = e(datenschutz_frist_label($cfg)) ?> = $cfg['basis'] === 'closed' ? 'nach dem Schließen oder Lösen' : 'nach der Erstellung' ?> werden unwiderruflich entfernt: = e(implode(', ', array_map(fn($k) => datenschutz_field_labels()[$k], $cfg['fields']))) ?>. Eine Wiederherstellung ist nicht möglich= in_array('email', $cfg['fields'], true) ? ' (die Ersatzadresse ist ein Zufallswert)' : '' ?>.
- Registrierte Kunden: Die Daten bleiben gespeichert, bis der Kunde die Löschung beantragt. Sie führen die Löschung unten aus.
✓ Automatische Anonymisierung ist eingeschaltet. Zurzeit fällig: = $count ?> Ticket(s). Letzter Lauf: = e(plugin_setting(DATENSCHUTZ, 'last_run', '') ? format_dt((string) plugin_setting(DATENSCHUTZ, 'last_run', '')) : 'noch nicht') ?>.
Die automatische Anonymisierung ist noch ausgeschaltet. Beim Einschalten würden sofort = $count ?> vorhandene Ticket(s) anonymisiert.
Löschung auf Antrag eines registrierten Kunden
Der Kunde hat die Löschung seiner Daten verlangt. Das Konto wird anonymisiert und kann sich nicht mehr anmelden. Seine Tickets verlieren Name, Adresse, Nachrichten und Anhänge. Das ist nicht rückgängig zu machen.
Dieser Kunde ist bereits anonymisiert.
Protokoll
Noch keine Einträge. Das Protokoll enthält keine Kundendaten, bei Löschanträgen nur eine verkürzte Adresse.
| Wann | Art | Tickets | Hinweis | Von |
| = e(format_dt((string) $l['created_at'])) ?> | = e($kinds[$l['kind']] ?? $l['kind']) ?> | = (int) $l['tickets'] ?> | = e((string) $l['note']) ?> | = e((string) ($l['staff_name'] ?? '')) ?> |
1): ?>
1): ?>← Neuere ·
Seite = $seite ?> von = $pages ?>
· Ältere →