forked from CGM_Public/pretix_original
Do not show infinitely long logs in sidebars
This commit is contained in:
@@ -6,7 +6,9 @@ from django.db import models
|
|||||||
from django.db.models.constants import LOOKUP_SEP
|
from django.db.models.constants import LOOKUP_SEP
|
||||||
from django.db.models.signals import post_delete
|
from django.db.models.signals import post_delete
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
|
from django.utils.functional import cached_property
|
||||||
|
|
||||||
from pretix.helpers.json import CustomJSONEncoder
|
from pretix.helpers.json import CustomJSONEncoder
|
||||||
|
|
||||||
@@ -113,6 +115,40 @@ class LoggedModel(models.Model, LoggingMixin):
|
|||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def logs_content_type(self):
|
||||||
|
return ContentType.objects.get_for_model(type(self))
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def all_logentries_link(self):
|
||||||
|
from pretix.base.models import Event
|
||||||
|
|
||||||
|
if isinstance(self, Event):
|
||||||
|
event = self
|
||||||
|
elif hasattr(self, 'event'):
|
||||||
|
event = self.event
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
return reverse(
|
||||||
|
'control:event.log',
|
||||||
|
kwargs={
|
||||||
|
'event': event.slug,
|
||||||
|
'organizer': event.organizer.slug,
|
||||||
|
}
|
||||||
|
) + '?content_type={}&object={}'.format(
|
||||||
|
self.logs_content_type.pk,
|
||||||
|
self.pk
|
||||||
|
)
|
||||||
|
|
||||||
|
def top_logentries(self):
|
||||||
|
qs = self.all_logentries()
|
||||||
|
if self.all_logentries_link:
|
||||||
|
qs = qs[:25]
|
||||||
|
return qs
|
||||||
|
|
||||||
|
def top_logentries_has_more(self):
|
||||||
|
return self.all_logentries().count() > 25
|
||||||
|
|
||||||
def all_logentries(self):
|
def all_logentries(self):
|
||||||
"""
|
"""
|
||||||
Returns all log entries that are attached to this object.
|
Returns all log entries that are attached to this object.
|
||||||
@@ -122,7 +158,7 @@ class LoggedModel(models.Model, LoggingMixin):
|
|||||||
from .log import LogEntry
|
from .log import LogEntry
|
||||||
|
|
||||||
return LogEntry.objects.filter(
|
return LogEntry.objects.filter(
|
||||||
content_type=ContentType.objects.get_for_model(type(self)), object_id=self.pk
|
content_type=self.logs_content_type, object_id=self.pk
|
||||||
).select_related('user', 'event', 'oauth_application', 'api_token', 'device')
|
).select_related('user', 'event', 'oauth_application', 'api_token', 'device')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
{% block inside %}
|
{% block inside %}
|
||||||
<h1>{% trans "Event logs" %}</h1>
|
<h1>{% trans "Event logs" %}</h1>
|
||||||
<form class="form-inline helper-display-inline" action="" method="get">
|
<form class="form-inline helper-display-inline" action="" method="get">
|
||||||
|
<input type="hidden" name="content_type" value="{{ request.GET.content_type }}">
|
||||||
|
<input type="hidden" name="object" value="{{ request.GET.object }}">
|
||||||
<p>
|
<p>
|
||||||
<select name="user" class="form-control">
|
<select name="user" class="form-control">
|
||||||
<option value="">{% trans "All actions" %}</option>
|
<option value="">{% trans "All actions" %}</option>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
{% for log in obj.all_logentries %}
|
{% for log in obj.top_logentries %}
|
||||||
<li class="list-group-item logentry">
|
<li class="list-group-item logentry">
|
||||||
<p class="meta">
|
<p class="meta">
|
||||||
<span class="fa fa-clock-o"></span> {{ log.datetime|date:"SHORT_DATETIME_FORMAT" }}
|
<span class="fa fa-clock-o"></span> {{ log.datetime|date:"SHORT_DATETIME_FORMAT" }}
|
||||||
@@ -45,4 +45,11 @@
|
|||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% if obj.all_logentries_link and obj.top_logentries_has_more %}
|
||||||
|
<li class="list-group-item logentry">
|
||||||
|
<a href="{{ obj.all_logentries_link }}">
|
||||||
|
{% trans "View full log" %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -975,6 +975,12 @@ class EventLog(EventPermissionRequiredMixin, ListView):
|
|||||||
elif self.request.GET.get('user'):
|
elif self.request.GET.get('user'):
|
||||||
qs = qs.filter(user_id=self.request.GET.get('user'))
|
qs = qs.filter(user_id=self.request.GET.get('user'))
|
||||||
|
|
||||||
|
if self.request.GET.get('content_type'):
|
||||||
|
qs = qs.filter(content_type=get_object_or_404(ContentType, pk=self.request.GET.get('content_type')))
|
||||||
|
|
||||||
|
if self.request.GET.get('object'):
|
||||||
|
qs = qs.filter(object_id=self.request.GET.get('object'))
|
||||||
|
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
|
|||||||
Reference in New Issue
Block a user