From f72f539516a2f774d14a66a0396ccb354a20e623 Mon Sep 17 00:00:00 2001 From: colcrunch Date: Tue, 12 Mar 2019 09:53:43 +0000 Subject: [PATCH] Add datetime to auditlog entries. Also, change ordering, add pagination, and stripe the table for increased readability. Action column now also reads "Removed" when a user is removed from a group. Note that this does not change anything on the back-end, so if you use this data for anything else, be aware that while the template is explicit, the data isn't as explicit. --- .../migrations/0011_requestlog_date.py | 19 +++++ allianceauth/groupmanagement/models.py | 2 + .../templates/groupmanagement/audit.html | 70 ++++++++++++------ allianceauth/groupmanagement/urls.py | 2 +- allianceauth/groupmanagement/views.py | 8 +- .../images/features/group_audit_log.png | Bin 0 -> 31807 bytes docs/features/groups.md | 11 +++ 7 files changed, 83 insertions(+), 29 deletions(-) create mode 100644 allianceauth/groupmanagement/migrations/0011_requestlog_date.py create mode 100644 docs/_static/images/features/group_audit_log.png diff --git a/allianceauth/groupmanagement/migrations/0011_requestlog_date.py b/allianceauth/groupmanagement/migrations/0011_requestlog_date.py new file mode 100644 index 00000000..fbe535ce --- /dev/null +++ b/allianceauth/groupmanagement/migrations/0011_requestlog_date.py @@ -0,0 +1,19 @@ +# Generated by Django 2.0.8 on 2018-12-07 08:56 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('groupmanagement', '0010_authgroup_states'), + ] + + operations = [ + migrations.AddField( + model_name='requestlog', + name='date', + field=models.DateTimeField(default=datetime.datetime(2018, 12, 7, 8, 56, 33, 846342)), + ), + ] diff --git a/allianceauth/groupmanagement/models.py b/allianceauth/groupmanagement/models.py index ce83dd05..e8c1c913 100644 --- a/allianceauth/groupmanagement/models.py +++ b/allianceauth/groupmanagement/models.py @@ -4,6 +4,7 @@ from django.db import models from django.db.models.signals import post_save from django.dispatch import receiver from allianceauth.authentication.models import State +from datetime import datetime class GroupRequest(models.Model): @@ -30,6 +31,7 @@ class RequestLog(models.Model): request_info = models.CharField(max_length=254) action = models.BooleanField(default=0) request_actor = models.ForeignKey(User, on_delete=models.CASCADE) + date = models.DateTimeField(auto_now_add=datetime.utcnow()) def requestor(self): return self.request_info.split(":")[0] diff --git a/allianceauth/groupmanagement/templates/groupmanagement/audit.html b/allianceauth/groupmanagement/templates/groupmanagement/audit.html index c5f26892..8cdad2cd 100644 --- a/allianceauth/groupmanagement/templates/groupmanagement/audit.html +++ b/allianceauth/groupmanagement/templates/groupmanagement/audit.html @@ -3,38 +3,60 @@ {% load i18n %} {% block page_title %}{{ group }} {% trans "Audit Log" %}{% endblock page_title %} -{% block extra_css %}{% endblock extra_css %} {% block content %}

{% include 'groupmanagement/menu.html' %}
- {% if entries %}

{{ group }} Audit Log

- - - - - - - - - - {% for entry in entries %} - - - - - - - - - {% endfor %} -
{% trans "Requestor" %}{% trans "Main Character" %}{% trans "Group" %}{% trans "Type" %}{% trans "Action" %}{% trans "Actor" %}
{{ entry.requestor }}{{ entry.req_char }}{{ entry.group }}{{ entry.type_to_str }}{{ entry.action_to_str }}{{ entry.request_actor }}
+

All times displayed are EVE/UTC.

+ {% if entries %} +
+ + + + + + + + + + + + {% for entry in entries %} + + + + + + + {% if entry.request_type is None %} + + {% else %} + + {% endif %} + + + {% endfor %} + +
{% trans "Date/Time" %}{% trans "Requestor" %}{% trans "Main Character" %}{% trans "Group" %}{% trans "Type" %}{% trans "Action" %}{% trans "Actor" %}
{{ entry.date }}{{ entry.requestor }}{{ entry.req_char }}{{ entry.group }}{{ entry.type_to_str }} Removed{{ entry.action_to_str }}{{ entry.request_actor }}
+
{% else %} -
{% trans "No entries found." %}
+
{% trans "No entries found for this group." %}
{% endif %}
-{% endblock content %} +{% endblock %} +{% block extra_javascript %} + {% include 'bundles/datatables-js.html' %} +{% endblock %} +{% block extra_css %} + {% include 'bundles/datatables-css.html' %} +{% endblock %} +{% block extra_script %} + $(document).ready(function(){ + $('#log-entries').DataTable(); + }); +{% endblock %} + diff --git a/allianceauth/groupmanagement/urls.py b/allianceauth/groupmanagement/urls.py index 3533df01..f16cad7f 100644 --- a/allianceauth/groupmanagement/urls.py +++ b/allianceauth/groupmanagement/urls.py @@ -12,7 +12,7 @@ urlpatterns = [ name='membership'), url(r'^membership/(\w+)/$', views.group_membership_list, name='membership_list'), - url(r'^membership/(\w+)/audit/', views.group_membership_audit, name="audit_log"), + url(r'^membership/(\w+)/audit/$', views.group_membership_audit, name="audit_log"), url(r'^membership/(\w+)/remove/(\w+)/$', views.group_membership_remove, name='membership_remove'), url(r'^request_add/(\w+)', views.group_request_add, diff --git a/allianceauth/groupmanagement/views.py b/allianceauth/groupmanagement/views.py index 213a904f..d0d7381d 100755 --- a/allianceauth/groupmanagement/views.py +++ b/allianceauth/groupmanagement/views.py @@ -5,6 +5,7 @@ from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.models import Group from django.core.exceptions import ObjectDoesNotExist, PermissionDenied +from django.core.paginator import Paginator, EmptyPage from django.db.models import Count from django.http import Http404 from django.shortcuts import render, redirect, get_object_or_404 @@ -83,10 +84,9 @@ def group_membership_audit(request, group_id): except ObjectDoesNotExist: raise Http404("Group does not exist") - - entries = RequestLog.objects.filter(group=group) - - render_items = {'entries': entries, 'group': group.name} + render_items = {'group': group.name} + entries = RequestLog.objects.filter(group=group).order_by('-date') + render_items['entries'] = entries return render(request, 'groupmanagement/audit.html', context=render_items) diff --git a/docs/_static/images/features/group_audit_log.png b/docs/_static/images/features/group_audit_log.png new file mode 100644 index 0000000000000000000000000000000000000000..e01998bccdf2e7eaa87e829094712090de684aaf GIT binary patch literal 31807 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 E0APy)JOBUy literal 0 HcmV?d00001 diff --git a/docs/features/groups.md b/docs/features/groups.md index 07f63fcf..d3267ea9 100644 --- a/docs/features/groups.md +++ b/docs/features/groups.md @@ -66,6 +66,17 @@ Clicking on the blue eye will take you to the group member management screen. He ![Group overview](/_static/images/features/group-member-management.png) +### Group Audit Log +Whenever a user Joins, Leaves, or is Removed from a group, this is logged. To find the audit log for a given group, click the light-blue button to the right of the Group Member Management (blue eye) button. + +These logs contain the Date and Time the action was taken (in EVE/UTC), the user which submitted the request being acted upon (requestor), the user's main character, the type of request (join, leave or removed), the action taken (accept, reject or remove), and the user that took the action (actor). + +![Audit Log Example](/_static/images/features/group_audit_log.png) + +```eval_rst +.. note:: + There is no tracking for "Open" groups as members are able to freely join/leave these groups. +``` ## Group Leaders