diff --git a/passbook/admin/templates/administration/audit/list.html b/passbook/admin/templates/administration/audit/list.html new file mode 100644 index 000000000..68a3703a8 --- /dev/null +++ b/passbook/admin/templates/administration/audit/list.html @@ -0,0 +1,84 @@ +{% extends "administration/base.html" %} + +{% load i18n %} +{% load utils %} + +{% block title %} +{% title %} +{% endblock %} + +{% block content %} +
+

{% trans "Audit Log" %}

+
+ {% for entry in object_list %} +
+
+
+ +
+
+
+
+ {{ entry.action }} +
+
+
+
+
+
+ + {{ entry.user }} +
+
+ + {{ entry.request_ip }} +
+
+ + {{ entry.app|default:'-' }} +
+
+
+
+
+ {% endfor %} +
+ + {% include 'partials/pagination.html' %} +
+{% endblock %} diff --git a/passbook/admin/templates/administration/base.html b/passbook/admin/templates/administration/base.html index 420dd02f6..60d783f6a 100644 --- a/passbook/admin/templates/administration/base.html +++ b/passbook/admin/templates/administration/base.html @@ -26,6 +26,9 @@
  • {% trans 'Users' %}
  • +
  • + {% trans 'Audit Log' %} +
  • {% trans 'Django' %}
  • diff --git a/passbook/admin/urls.py b/passbook/admin/urls.py index 7853ea20b..b34db5b76 100644 --- a/passbook/admin/urls.py +++ b/passbook/admin/urls.py @@ -1,7 +1,7 @@ """passbook URL Configuration""" from django.urls import path -from passbook.admin.views import (applications, invitations, overview, +from passbook.admin.views import (applications, audit, invitations, overview, providers, rules, sources) urlpatterns = [ @@ -40,5 +40,7 @@ urlpatterns = [ invitations.InvitationCreateView.as_view(), name='invitation-create'), path('invitations//delete/', invitations.InvitationDeleteView.as_view(), name='invitation-delete'), + # Audit Log + path('audit/', audit.AuditEntryListView.as_view(), name='audit-log'), # path('api/v1/', include('passbook.admin.api.v1.urls')) ] diff --git a/passbook/admin/views/audit.py b/passbook/admin/views/audit.py new file mode 100644 index 000000000..a7705550b --- /dev/null +++ b/passbook/admin/views/audit.py @@ -0,0 +1,16 @@ +"""passbook AuditEntry administration""" +from django.views.generic import ListView + +from passbook.admin.mixins import AdminRequiredMixin +from passbook.audit.models import AuditEntry + + +class AuditEntryListView(AdminRequiredMixin, ListView): + """Show list of all invitations""" + + model = AuditEntry + template_name = 'administration/audit/list.html' + paginate_by = 10 + + def get_queryset(self): + return AuditEntry.objects.all().order_by('-created') diff --git a/passbook/core/templates/partials/pagination.html b/passbook/core/templates/partials/pagination.html new file mode 100644 index 000000000..9b1209269 --- /dev/null +++ b/passbook/core/templates/partials/pagination.html @@ -0,0 +1,22 @@ +{% load i18n %} + +
    + {% with param=get_param|default:'page' %} + {% if page_obj.has_previous %} + + {% else %} + + {% endif %} + + {% blocktrans with current=page_obj.number total=page_obj.paginator.num_pages %} + Page {{ current }} of {{ total }} + {% endblocktrans %} + + {% if page_obj.has_next %} + + {% else %} + + {% endif %} + {% endwith %} +
    +