Extract generic HistoryView from snippets history view

pull/10919/head
Sage Abdullah 2023-09-18 15:50:23 +01:00
rodzic 79c3771cef
commit dc049cd880
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: EB1A33CC51CC0217
5 zmienionych plików z 106 dodań i 103 usunięć

Wyświetl plik

@ -0,0 +1,6 @@
{% extends "wagtailadmin/generic/index_results.html" %}
{% load i18n %}
{% block no_results_message %}
<p>{% trans "No log entries found." %}</p>
{% endblock %}

Wyświetl plik

@ -75,7 +75,7 @@
<div class="actionbutton">
{{ base_actions }}
{% with action_icon|default:'plus' as action_icon_name %}
<a href="{{ action_url }}" class="button bicolor button--icon">{% icon name=action_icon_name wrapped=1 %}{{ action_text }}</a>
<a href="{{ action_url }}" class="button bicolor button--icon">{% icon name=action_icon_name wrapped=1 %}{{ action_text|capfirst }}</a>
{% endwith %}
</div>
{% endif %}

Wyświetl plik

@ -1,13 +1,106 @@
from datetime import timedelta
import django_filters
from django.contrib.admin.utils import unquote
from django.core.paginator import Paginator
from django.shortcuts import get_object_or_404
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.translation import gettext_lazy
from django.utils.text import capfirst
from django.utils.translation import gettext, gettext_lazy
from django.views.generic import TemplateView
from wagtail.admin.filters import DateRangePickerWidget, WagtailFilterSet
from wagtail.admin.ui.tables import Column, DateColumn, InlineActionsTable, UserColumn
from wagtail.admin.views.generic.base import BaseObjectMixin, WagtailAdminTemplateMixin
from wagtail.models import Revision, TaskState, WorkflowState
from wagtail.admin.views.generic.models import IndexView
from wagtail.log_actions import registry as log_registry
from wagtail.models import (
DraftStateMixin,
ModelLogEntry,
Revision,
TaskState,
WorkflowState,
)
class HistoryReportFilterSet(WagtailFilterSet):
action = django_filters.ChoiceFilter(
label=gettext_lazy("Action"),
choices=log_registry.get_choices,
)
user = django_filters.ModelChoiceFilter(
label=gettext_lazy("User"),
field_name="user",
queryset=lambda request: ModelLogEntry.objects.all().get_users(),
)
timestamp = django_filters.DateFromToRangeFilter(
label=gettext_lazy("Date"), widget=DateRangePickerWidget
)
class Meta:
model = ModelLogEntry
fields = ["action", "user", "timestamp"]
class HistoryView(IndexView):
any_permission_required = ["add", "change", "delete"]
page_title = gettext_lazy("History")
results_template_name = "wagtailadmin/generic/history_results.html"
header_icon = "history"
is_searchable = False
paginate_by = 20
filterset_class = HistoryReportFilterSet
table_class = InlineActionsTable
def setup(self, request, *args, pk, **kwargs):
self.pk = pk
self.object = self.get_object()
super().setup(request, *args, **kwargs)
def get_object(self):
object = get_object_or_404(self.model, pk=unquote(self.pk))
if isinstance(object, DraftStateMixin):
return object.get_latest_revision_as_object()
return object
def get_page_subtitle(self):
return str(self.object)
def get_columns(self):
return [
Column("message", label=gettext("Action")),
UserColumn("user", blank_display_name="system"),
DateColumn("timestamp", label=gettext("Date")),
]
def get_breadcrumbs_items(self):
return self.breadcrumbs_items + [
{
"url": reverse(self.index_url_name),
"label": capfirst(self.model._meta.verbose_name_plural),
},
{
"url": self.get_edit_url(self.object),
"label": str(self.object),
},
{"url": "", "label": gettext("History")},
]
def get_context_data(self, *args, object_list=None, **kwargs):
context = super().get_context_data(*args, object_list=object_list, **kwargs)
context["object"] = self.object
context["header_action_url"] = self.get_edit_url(self.object)
context["header_action_label"] = gettext("Edit this %(model_name)s") % {
"model_name": self.model._meta.verbose_name
}
context["header_action_icon"] = "edit"
return context
def get_base_queryset(self):
return log_registry.get_logs_for_instance(self.object).select_related(
"revision", "user", "user__wagtail_userprofile"
)
class WorkflowHistoryView(BaseObjectMixin, WagtailAdminTemplateMixin, TemplateView):

Wyświetl plik

@ -1,23 +1 @@
{% extends 'wagtailadmin/reports/base_report.html' %}
{% load i18n wagtailadmin_tags %}
{% block titletag %}{% blocktrans trimmed with title=subtitle %}Snippet history for {{ subtitle }}{% endblocktrans %}{% endblock %}
{% block bodyclass %}model-{{ model_opts.model_name }}{% endblock %}
{% block actions %}
<a href="{% url view.edit_url_name object.pk|admin_urlquote %}" class="button bicolor button--icon">{% icon name="edit" wrapped=1 %}{% trans "Edit this snippet" %}</a>
{% endblock %}
{% block content %}
{% include 'wagtailadmin/shared/headers/slim_header.html' %}
{{ block.super }}
{% endblock %}
{% block results %}
{% if object_list %}
{% component table %}
{% else %}
<p>{% trans "No log entries found." %}</p>
{% endif %}
{% endblock %}
{% extends 'wagtailadmin/generic/index.html' %}

Wyświetl plik

@ -1,12 +1,11 @@
from warnings import warn
import django_filters
from django.apps import apps
from django.contrib.admin.utils import quote, unquote
from django.contrib.admin.utils import quote
from django.core import checks
from django.core.exceptions import ImproperlyConfigured, PermissionDenied
from django.http import Http404
from django.shortcuts import get_object_or_404, redirect
from django.shortcuts import redirect
from django.urls import path, re_path, reverse, reverse_lazy
from django.utils.functional import cached_property
from django.utils.text import capfirst
@ -14,7 +13,6 @@ from django.utils.translation import gettext as _
from django.utils.translation import gettext_lazy
from wagtail.admin.checks import check_panels_in_model
from wagtail.admin.filters import DateRangePickerWidget, WagtailFilterSet
from wagtail.admin.panels.group import ObjectList
from wagtail.admin.panels.model_utils import extract_panel_definitions_from_model_class
from wagtail.admin.ui.components import MediaContainer
@ -28,7 +26,6 @@ from wagtail.admin.ui.tables import (
TitleColumn,
UserColumn,
)
from wagtail.admin.utils import get_latest_str
from wagtail.admin.views import generic
from wagtail.admin.views.generic import history, lock, workflow
from wagtail.admin.views.generic.permissions import PermissionCheckedMixin
@ -37,10 +34,8 @@ from wagtail.admin.views.generic.preview import (
PreviewOnEdit,
PreviewRevision,
)
from wagtail.admin.views.reports.base import ReportView
from wagtail.admin.viewsets import viewsets
from wagtail.admin.viewsets.model import ModelViewSet, ModelViewSetGroup
from wagtail.log_actions import registry as log_registry
from wagtail.models import (
DraftStateMixin,
Locale,
@ -49,7 +44,6 @@ from wagtail.models import (
RevisionMixin,
WorkflowMixin,
)
from wagtail.models.audit_log import ModelLogEntry
from wagtail.permissions import ModelPermissionPolicy
from wagtail.snippets.action_menu import SnippetActionMenu
from wagtail.snippets.models import SnippetAdminURLFinder, get_snippet_models
@ -397,25 +391,6 @@ class UsageView(generic.UsageView):
permission_required = "change"
class SnippetHistoryReportFilterSet(WagtailFilterSet):
action = django_filters.ChoiceFilter(
label=_("Action"),
choices=log_registry.get_choices,
)
user = django_filters.ModelChoiceFilter(
label=_("User"),
field_name="user",
queryset=lambda request: ModelLogEntry.objects.all().get_users(),
)
timestamp = django_filters.DateFromToRangeFilter(
label=_("Date"), widget=DateRangePickerWidget
)
class Meta:
model = ModelLogEntry
fields = ["action", "user", "timestamp"]
class ActionColumn(Column):
cell_template_name = "wagtailsnippets/snippets/revisions/_actions.html"
@ -435,36 +410,12 @@ class ActionColumn(Column):
return context
class HistoryView(ReportView):
class HistoryView(history.HistoryView):
view_name = "history"
index_url_name = None
edit_url_name = None
revisions_view_url_name = None
revisions_revert_url_name = None
revisions_compare_url_name = None
revisions_unschedule_url_name = None
any_permission_required = ["add", "change", "delete"]
template_name = "wagtailsnippets/snippets/history.html"
title = gettext_lazy("Snippet history")
header_icon = "history"
is_searchable = False
paginate_by = 20
filterset_class = SnippetHistoryReportFilterSet
table_class = InlineActionsTable
def setup(self, request, *args, pk, **kwargs):
self.pk = pk
self.object = self.get_object()
super().setup(request, *args, **kwargs)
def get_object(self):
object = get_object_or_404(self.model, pk=unquote(str(self.pk)))
if isinstance(object, DraftStateMixin):
return object.get_latest_revision_as_object()
return object
def get_page_subtitle(self):
return str(self.object)
def get_columns(self):
return [
@ -479,31 +430,6 @@ class HistoryView(ReportView):
DateColumn("timestamp", label=_("Date")),
]
def get_breadcrumbs_items(self):
return self.breadcrumbs_items + [
{
"url": reverse(self.index_url_name),
"label": capfirst(self.model._meta.verbose_name_plural),
},
{
"url": self.get_edit_url(self.object),
"label": get_latest_str(self.object),
},
{"url": "", "label": _("History")},
]
def get_context_data(self, *args, object_list=None, **kwargs):
context = super().get_context_data(*args, object_list=object_list, **kwargs)
context["object"] = self.object
context["subtitle"] = self.get_page_subtitle()
context["model_opts"] = self.model._meta
return context
def get_queryset(self):
return log_registry.get_logs_for_instance(self.object).select_related(
"revision", "user", "user__wagtail_userprofile"
)
class InspectView(generic.InspectView):
view_name = "inspect"