83 lines
3.6 KiB
Python
83 lines
3.6 KiB
Python
from django.utils.translation import gettext as _
|
|
|
|
from .models import AdminAuditLog
|
|
|
|
|
|
def display_user_name(user) -> str:
|
|
first_name = (getattr(user, 'first_name', '') or '').strip()
|
|
last_name = (getattr(user, 'last_name', '') or '').strip()
|
|
full_name = f'{first_name} {last_name}'.strip()
|
|
if full_name:
|
|
return full_name
|
|
username = (getattr(user, 'username', '') or '').strip()
|
|
if username:
|
|
return username
|
|
return (getattr(user, 'email', '') or '').strip()
|
|
|
|
|
|
def audit(
|
|
request,
|
|
action: str,
|
|
*,
|
|
target_type: str = '',
|
|
target_id: int | None = None,
|
|
target_label: str = '',
|
|
details: dict | None = None,
|
|
) -> None:
|
|
if not getattr(request, 'user', None) or not request.user.is_authenticated:
|
|
return
|
|
AdminAuditLog.objects.create(
|
|
actor=request.user,
|
|
actor_display=display_user_name(request.user),
|
|
action=action,
|
|
target_type=target_type,
|
|
target_id=target_id,
|
|
target_label=target_label,
|
|
details=details or {},
|
|
)
|
|
|
|
|
|
def audit_action_label(action: str) -> str:
|
|
labels = {
|
|
'requests_deleted': _('Vorgänge gelöscht'),
|
|
'request_deleted': _('Vorgang gelöscht'),
|
|
'request_retried': _('Vorgang erneut angestoßen'),
|
|
'intro_pdf_generated': _('Einweisungs-PDF erzeugt'),
|
|
'intro_live_pdf_generated': _('Live-Protokoll erzeugt'),
|
|
'intro_session_reset': _('Einweisung zurückgesetzt'),
|
|
'intro_session_saved': _('Einweisung als Entwurf gespeichert'),
|
|
'intro_session_completed': _('Einweisung abgeschlossen'),
|
|
'form_option_deleted': _('Formularoption gelöscht'),
|
|
'form_options_saved': _('Formularoptionen gespeichert'),
|
|
'form_field_texts_saved': _('Feldtexte gespeichert'),
|
|
'form_layout_saved': _('Formularlayout gespeichert'),
|
|
'intro_checklist_item_deleted': _('Einweisungs-Checkpunkt gelöscht'),
|
|
'intro_checklist_item_added': _('Einweisungs-Checkpunkt hinzugefügt'),
|
|
'intro_checklist_saved': _('Einweisungs-Checkliste gespeichert'),
|
|
'welcome_email_triggered_now': _('Welcome E-Mail sofort ausgelöst'),
|
|
'welcome_email_settings_saved': _('Welcome E-Mail Einstellungen gespeichert'),
|
|
'welcome_email_bulk_action': _('Welcome E-Mail Sammelaktion ausgeführt'),
|
|
'welcome_email_paused': _('Welcome E-Mail pausiert'),
|
|
'welcome_email_resumed': _('Welcome E-Mail fortgesetzt'),
|
|
'welcome_email_cancelled': _('Welcome E-Mail abgebrochen'),
|
|
'smtp_test_sent': _('SMTP-Test gesendet'),
|
|
'nextcloud_test_upload': _('Nextcloud-Testupload ausgeführt'),
|
|
'nextcloud_mode_toggled': _('Nextcloud-Modus umgeschaltet'),
|
|
'email_mode_toggled': _('E-Mail-Modus umgeschaltet'),
|
|
'integrations_saved': _('Integrationen gespeichert'),
|
|
'nextcloud_settings_saved': _('Nextcloud-Einstellungen gespeichert'),
|
|
'mail_settings_saved': _('Mail-Einstellungen gespeichert'),
|
|
'email_routing_saved': _('E-Mail-Routing gespeichert'),
|
|
'notification_rules_saved': _('Benachrichtigungsregeln gespeichert'),
|
|
'user_created': _('Benutzer erstellt'),
|
|
'user_updated': _('Benutzer aktualisiert'),
|
|
'user_password_reset_sent': _('Passwort-Reset-Link versendet'),
|
|
'user_deleted': _('Benutzer gelöscht'),
|
|
'backup_created': _('Backup erstellt'),
|
|
'backup_verified': _('Backup verifiziert'),
|
|
'backup_deleted': _('Backup gelöscht'),
|
|
'backup_settings_saved': _('Backup-Einstellungen gespeichert'),
|
|
'portal_app_registry_saved': _('App-Registry gespeichert'),
|
|
}
|
|
return labels.get(action, action.replace('_', ' ').strip().capitalize())
|