kopia lustrzana https://github.com/wagtail/wagtail
Extract generic HistoryView from snippets history view
rodzic
79c3771cef
commit
dc049cd880
|
|
@ -0,0 +1,6 @@
|
|||
{% extends "wagtailadmin/generic/index_results.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block no_results_message %}
|
||||
<p>{% trans "No log entries found." %}</p>
|
||||
{% endblock %}
|
||||
|
|
@ -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 %}
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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' %}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue