Auto Delete - Automatisches Löschen | Keywords: DSGVO, GDPR, Cleanup, Datenlöschung, Cronjobs, Datenschutz, Retention
Übersicht: Löscht automatisch alte Logs, Dateien und Datensätze nach festgelegten Zeitintervallen via Cronjob. Ermöglicht DSGVO-konforme Datenhaltung durch automatisierte Bereinigung von YForm-Tabellen, Ordnern und SQL-Tabellen.
Cronjob-Typen
| Typ | Beschreibung |
|---|---|
YForm |
Löscht Datensätze mit datestamp_auto_delete Feld |
Table |
Löscht alte Einträge aus beliebigen Tabellen |
Folder |
Bereinigt Dateien in Ordnern nach Alter |
YForm-Feld: datestamp_auto_delete
| Parameter | Beschreibung |
|---|---|
name |
Feldname (z.B. delete_date) |
label |
Feld-Label |
format |
Datumsformat (Y-m-d H:i:s) |
no_db |
Nicht in DB speichern (0/1/2) |
offset |
Zeitoffset (z.B. +6 months, +90 days) |
Offset-Beispiele
| Offset | Bedeutung |
|---|---|
+30 days |
30 Tage in Zukunft |
+6 months |
6 Monate in Zukunft |
+1 year |
1 Jahr in Zukunft |
+2 weeks |
2 Wochen in Zukunft |
+90 days |
90 Tage in Zukunft |
Praxisbeispiele
Beispiel 1: datestamp_auto_delete in YForm-Tabelle
// YForm TableSet
value|datestamp_auto_delete|delete_date|Löschdatum|Y-m-d H:i:s|0|+6 months
Beispiel 2: YForm-Cronjob konfigurieren
Im Backend unter System > Cronjob:
- Typ: YForm
- Name: Alte YForm-Einträge löschen
- Beschreibung: Löscht Einträge mit abgelaufenem delete_date
- Intervall: Täglich um 03:00 Uhr
- Umgebung: Script (nur Console)
Beispiel 3: Eigenes Feld mit Offset erstellen
// +90 Tage = 3 Monate
value|datestamp_auto_delete|expires_at|Verfallsdatum|Y-m-d H:i:s|1|+90 days
Beispiel 4: Table-Cronjob für rex_Tabelle
// Im Backend: System > Cronjob
// Typ: Table
// Parameter:
// - rex_table: rex_my_table
// - field: updatedate
// - interval: 6 (Monate)
Beispiel 5: Bewerberdaten nach 6 Monaten löschen
// YForm-Tabelle: rex_applications
value|datestamp_auto_delete|delete_after|Automatische Löschung|Y-m-d H:i:s|1|+6 months
// Cronjob: YForm
// Täglich prüfen und alte Bewerbungen löschen
Beispiel 6: Folder-Cronjob für Logs
// Im Backend: System > Cronjob
// Typ: Folder
// Parameter:
// - dir: /path/to/logs
// - days: 30
// Löscht Dateien älter als 30 Tage
Beispiel 7: PHPMailer-Logs bereinigen
// Cronjob: Folder
// dir: redaxo/data/addons/phpmailer/
// days: 7
// Löscht E-Mail-Logs älter als 7 Tage
Beispiel 8: Temporäre Uploads löschen
// YForm-Tabelle: rex_temp_uploads
value|datestamp_auto_delete|cleanup_date|Bereinigung|Y-m-d H:i:s|1|+1 day
// Cronjob läuft täglich und löscht alte Uploads
Beispiel 9: Newsletter-Anmeldungen bereinigen
// Nach 2 Jahren löschen
value|datestamp_auto_delete|delete_date|Löschdatum|Y-m-d H:i:s|1|+2 years
// DSGVO: Speicherfrist für Marketing-Daten
Beispiel 10: Table-Cronjob für nicht-YForm-Tabellen
// Tabelle: rex_custom_logs
// Feld: created_at
// Intervall: 3 Monate
$cronjob = new Alexplusde\AutoDelete\Cronjob\Table();
// Manuell ausführen via Code
Beispiel 11: Offset mit strtotime-Format
// Alle PHP strtotime-Formate funktionieren:
// +1 week
// +14 days
// +3 months
// +1 year
// first day of next month
// last day of this month
value|datestamp_auto_delete|delete_date|Löschdatum|Y-m-d H:i:s|1|first day of next month
Beispiel 12: Programmatischer Zugriff
// Datum abrufen
$entry = rex_yform_manager_dataset::query('rex_applications', $id)->findOne();
echo $entry->getValue('delete_after');
// Ausgabe: 2024-06-30 03:00:00
Beispiel 13: Cronjob per Console ausführen
# Alle fälligen YForm-Löschungen ausführen
php redaxo/bin/console cronjob:run
Beispiel 14: Multiple Tabellen mit YForm-Cronjob
// Der YForm-Cronjob durchsucht ALLE YForm-Tabellen
// nach dem Feld "datestamp_auto_delete"
// Tabelle 1: rex_applications
value|datestamp_auto_delete|delete_date|Löschdatum|Y-m-d H:i:s|1|+6 months
// Tabelle 2: rex_temp_files
value|datestamp_auto_delete|delete_date|Löschdatum|Y-m-d H:i:s|1|+1 day
// Ein Cronjob löscht aus BEIDEN Tabellen
Beispiel 15: Folder-Cronjob mit Unterordnern
// Rekursiv alle Dateien in Unterordnern löschen
// Cronjob: Folder
// dir: redaxo/data/addons/myaddon/uploads/
// days: 90
// Löscht auch Dateien in /uploads/2024/, /uploads/temp/, etc.
Beispiel 16: Sicherheit - nur ältere Logs
// Table-Cronjob für rex_system_log
// Tabelle: rex_system_log
// Feld: createdate
// Intervall: 12 Monate
// Behält Logs der letzten 12 Monate
Beispiel 17: DSGVO-konform: Kundendaten
// Nach Vertragsende + 10 Jahre löschen
value|datestamp_auto_delete|legal_delete_date|Gesetzliche Löschung|Y-m-d H:i:s|1|+10 years
// Hinweis: Löschfristen an gesetzliche Aufbewahrungspflichten anpassen!
Beispiel 18: Extension Point nutzen
// Vor dem Löschen Extension Point auslösen
rex_extension::register('YFORM_DATA_DELETE', function($ep) {
$dataset = $ep->getSubject();
if ($dataset->getTableName() == 'rex_applications') {
// Log erstellen, E-Mail versenden, etc.
rex_logger::logNotice('auto_delete', 'Bewerbung gelöscht: ' . $dataset->getId());
}
});
Beispiel 19: Ordner-Cronjob für Medienpool-Kategorie
// Cronjob: Folder
// dir: redaxo/media/temp/
// days: 14
// Löscht temporäre Medienpool-Dateien nach 2 Wochen
Beispiel 20: Kombiniert mit YForm-Actions
// In YForm-Formular
value|datestamp_auto_delete|auto_cleanup|Automatische Bereinigung|Y-m-d H:i:s|1|+30 days
action|db
action|tpl2email|...
// Nach 30 Tagen werden Formulareinträge automatisch gelöscht
Beispiel 21: Nur Wert anzeigen, nicht speichern
// no_db = 0: Speichern und anzeigen
// no_db = 1: Nur anzeigen, wenn leer
// no_db = 2: Nie speichern
value|datestamp_auto_delete|cleanup_info|Info|Y-m-d H:i:s|2|+90 days
// Zeigt Datum an, speichert aber nicht in DB
Beispiel 22: Cronjob-Status prüfen
$sql = rex_sql::factory();
$sql->setQuery('SELECT * FROM rex_cronjob WHERE type LIKE "%AutoDelete%"');
foreach ($sql as $row) {
echo 'Cronjob: ' . $row->getValue('name');
echo '<br>Status: ' . ($row->getValue('status') == 1 ? 'Aktiv' : 'Inaktiv');
echo '<br>Letzter Lauf: ' . date('d.m.Y H:i', $row->getValue('execution_moment'));
}
Beispiel 23: Manuelle Löschung testen
// YForm Auto-Delete manuell ausführen
use Alexplusde\AutoDelete\AutoDelete;
AutoDelete::YForm();
// Führt Löschung für alle YForm-Tabellen aus
Beispiel 24: Backup vor Löschung
rex_extension::register('YFORM_DATA_DELETE', function($ep) {
$dataset = $ep->getSubject();
// Backup in separate Tabelle
$backup = rex_sql::factory();
$backup->setTable('rex_deleted_entries');
$backup->setValue('original_id', $dataset->getId());
$backup->setValue('table_name', $dataset->getTableName());
$backup->setValue('data', json_encode($dataset->getData()));
$backup->setValue('deleted_at', date('Y-m-d H:i:s'));
$backup->insert();
});
Beispiel 25: Verschiedene Löschfristen
// Kurze Frist: Spam-Einträge
value|datestamp_auto_delete|spam_cleanup|Spam-Bereinigung|Y-m-d H:i:s|1|+7 days
// Mittlere Frist: Formulardaten
value|datestamp_auto_delete|form_cleanup|Formular-Bereinigung|Y-m-d H:i:s|1|+90 days
// Lange Frist: Archivdaten
value|datestamp_auto_delete|archive_cleanup|Archiv-Bereinigung|Y-m-d H:i:s|1|+5 years
Integration: Cronjob-Addon (registriert eigene Cronjob-Typen), YForm (datestamp_auto_delete Feld, YOrm Dataset-Deletion), Extension Points (YFORM_DATA_DELETE), rex_sql (Table-Cronjob), Dateisystem (Folder-Cronjob), Console (cronjob:run), GDPR/DSGVO-Compliance