From a225cfebbf5c4946bb2269a07538f261819a5b55 Mon Sep 17 00:00:00 2001 From: Matthias Kestenholz <mk@feinheit.ch> Date: Fri, 9 Aug 2024 11:48:07 +0200 Subject: [PATCH] Show a log of recent activity --- app/templates/projects/project.html | 3 +++ projects/models.py | 17 +++++++++++++++++ projects/views.py | 3 +++ 3 files changed, 23 insertions(+) diff --git a/app/templates/projects/project.html b/app/templates/projects/project.html index b5adbf0..cdd25b8 100644 --- a/app/templates/projects/project.html +++ b/app/templates/projects/project.html @@ -32,4 +32,7 @@ <h2>{% translate 'CLI configuration' %}</h2> <summary><code>~/.config/traduire.toml</code></summary> <pre>{{ toml }}</pre> </details> + +<h2>{% translate 'Latest activity' %}</h2> +{% for a in activity %}{{ a.as_html }}{% empty %}<p>{% translate 'None' %}</p>{% endfor %} {% endblock %} diff --git a/projects/models.py b/projects/models.py index f928d57..86e2e3b 100644 --- a/projects/models.py +++ b/projects/models.py @@ -6,6 +6,8 @@ from django.db import models from django.db.models import Q from django.urls import reverse +from django.utils.formats import date_format +from django.utils.html import format_html from django.utils.timesince import timesince from django.utils.translation import gettext_lazy as _ @@ -232,3 +234,18 @@ def save(self, *args, **kwargs): super().save(*args, **kwargs) save.alters_data = True + + def as_html(self): + return format_html( + """\ +<p> + <small>{created_at}</small><br> + {user} {action} {catalog} +</p> + """, + created_at=date_format(self.created_at, "Y-m-d H:i"), + action=self.get_action_display(), + user=self.user or self.user_string, + project=self.project or self.project_string, + catalog=self.catalog or self.catalog_string, + ) diff --git a/projects/views.py b/projects/views.py index 7581925..6eaacab 100644 --- a/projects/views.py +++ b/projects/views.py @@ -35,6 +35,9 @@ def project(request, slug): { "project": project, "toml": project.toml(request=request), + "activity": Event.objects.filter(project=project).select_related( + "user", "project", "catalog" + )[:30], }, )