summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py70
1 files changed, 52 insertions, 18 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index af11be06c..803b5766a 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -18,6 +18,7 @@
# See the file COPYING for details.
import csv
+import datetime
import json
from io import TextIOWrapper, BytesIO
import os
@@ -160,29 +161,36 @@ def export_as_csv_action(
based on http://djangosnippets.org/snippets/1697/
"""
opts = modeladmin.model._meta
- field_names = set([field.name for field in opts.fields])
- if fields:
- fieldset = set(fields)
- field_names = field_names & fieldset
- elif exclude:
- excludeset = set(exclude)
- field_names = field_names - excludeset
-
- if hasattr(modeladmin, "CSV_FIELD_ORDER"):
- field_order = modeladmin.CSV_FIELD_ORDER
- field_names = sorted(
- field_names,
- key=lambda x: field_order.index(x) if x in field_order else 1000
- )
+ if hasattr(modeladmin, "CSV_FIELDS"):
+ field_names = field_order = modeladmin.CSV_FIELDS
+ else:
+ field_names = set([field.name for field in opts.fields])
+ if fields:
+ fieldset = set(fields)
+ field_names = field_names & fieldset
+ elif exclude:
+ excludeset = set(exclude)
+ field_names = field_names - excludeset
+
+ if hasattr(modeladmin, "CSV_FIELD_ORDER"):
+ field_order = modeladmin.CSV_FIELD_ORDER
+ field_names = sorted(
+ field_names,
+ key=lambda x: field_order.index(x) if x in field_order else 1000
+ )
response = HttpResponse(content_type="text/csv")
- response["Content-Disposition"] = "attachment; filename=%s.csv" % str(
- opts
- ).replace(".", "_")
+ csv_name = str(opts).replace(".", "_")
+ if hasattr(modeladmin, "get_csv_name"):
+ csv_name = modeladmin.get_csv_name()
+ response["Content-Disposition"] = "attachment; filename=%s.csv" % csv_name
writer = csv.writer(response)
if header:
- writer.writerow(list(field_names))
+ if hasattr(modeladmin, "CSV_HEADER"):
+ writer.writerow(modeladmin.CSV_HEADER)
+ else:
+ writer.writerow(list(field_names))
for obj in queryset.order_by("pk"):
row = []
for field in field_names:
@@ -698,6 +706,32 @@ class PersonAdmin(HistorizedObjectAdmin):
admin_site.register(models.Person, PersonAdmin)
+@admin.register(models.GDPRLog, site=admin_site)
+class GDPRLogAdmin(admin.ModelAdmin):
+ list_display = ("user", "date", "ip", "activity")
+ list_filter = ("activity",)
+ search_fields = ("user__username",)
+ actions = [
+ export_as_csv_action(exclude=("id",)),
+ ]
+ CSV_HEADER = (_("Date"), _("User"), _("IP"), _("Activity"), _("Persons"))
+ CSV_FIELDS = ("date", "user", "ip", "activity_lbl", "persons_lbl")
+
+ def has_add_permission(self, request, obj=None):
+ return False
+
+ def has_change_permission(self, request, obj=None):
+ return False
+
+ def has_delete_permission(self, request, obj=None):
+ return False
+
+ def get_csv_name(self):
+ now = datetime.datetime.now()
+ lbl = str(_("export-gdpr"))
+ return f"{now.strftime('%Y-%m-%d-%H%M')}-{lbl}"
+
+
class AuthorAdmin(admin.ModelAdmin):
list_display = ["person", "author_type"]
list_filter = ("author_type",)