Wagtail 3 changes
This commit is contained in:
committed by
nick.moreton
parent
dd4530203f
commit
c7eaec1315
@@ -1,16 +1,26 @@
|
||||
import csv
|
||||
|
||||
from django import VERSION as DJANGO_VERSION
|
||||
from django import forms
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.db import transaction
|
||||
from django.http import (
|
||||
HttpResponse, HttpResponseForbidden, HttpResponseRedirect)
|
||||
from django.http import HttpResponse, HttpResponseForbidden, HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
if DJANGO_VERSION >= (3, 0):
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
else:
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from wagtail import VERSION as WAGTAIL_VERSION
|
||||
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
|
||||
from wagtail.contrib.modeladmin.views import DeleteView, IndexView
|
||||
from wagtail.core.models import Page
|
||||
|
||||
if WAGTAIL_VERSION >= (3, 0):
|
||||
from wagtail.models import Page
|
||||
else:
|
||||
from wagtail.core.models import Page
|
||||
|
||||
from wagtail_personalisation.models import Segment
|
||||
from wagtail_personalisation.utils import can_delete_pages
|
||||
@@ -18,41 +28,42 @@ from wagtail_personalisation.utils import can_delete_pages
|
||||
|
||||
class SegmentModelIndexView(IndexView):
|
||||
"""Placeholder for additional list functionality."""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class SegmentModelDashboardView(IndexView):
|
||||
"""Additional dashboard functionality."""
|
||||
|
||||
def media(self):
|
||||
return forms.Media(
|
||||
css={'all': ['css/dashboard.css']},
|
||||
js=['js/commons.js', 'js/dashboard.js']
|
||||
css={"all": ["css/dashboard.css"]}, js=["js/commons.js", "js/dashboard.js"]
|
||||
)
|
||||
|
||||
def get_template_names(self):
|
||||
return [
|
||||
'modeladmin/wagtail_personalisation/segment/dashboard.html',
|
||||
'modeladmin/index.html'
|
||||
"modeladmin/wagtail_personalisation/segment/dashboard.html",
|
||||
"modeladmin/index.html",
|
||||
]
|
||||
|
||||
|
||||
class SegmentModelDeleteView(DeleteView):
|
||||
def get_affected_page_objects(self):
|
||||
return Page.objects.filter(pk__in=(
|
||||
self.instance.get_used_pages().values_list('variant_id', flat=True)
|
||||
))
|
||||
return Page.objects.filter(
|
||||
pk__in=(self.instance.get_used_pages().values_list("variant_id", flat=True))
|
||||
)
|
||||
|
||||
def get_template_names(self):
|
||||
return [
|
||||
'modeladmin/wagtail_personalisation/segment/delete.html',
|
||||
'modeladmin/delete.html',
|
||||
"modeladmin/wagtail_personalisation/segment/delete.html",
|
||||
"modeladmin/delete.html",
|
||||
]
|
||||
|
||||
def delete_instance(self):
|
||||
page_variants = self.get_affected_page_objects()
|
||||
if not can_delete_pages(page_variants, self.request.user):
|
||||
raise PermissionDenied(
|
||||
'User has no permission to delete variant page objects.'
|
||||
"User has no permission to delete variant page objects."
|
||||
)
|
||||
# Deleting page objects triggers deletion of the personalisation
|
||||
# metadata too because of models.CASCADE.
|
||||
@@ -63,8 +74,7 @@ class SegmentModelDeleteView(DeleteView):
|
||||
super().delete_instance()
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
if not can_delete_pages(self.get_affected_page_objects(),
|
||||
self.request.user):
|
||||
if not can_delete_pages(self.get_affected_page_objects(), self.request.user):
|
||||
context = self.get_context_data(
|
||||
cannot_delete_page_variants_error=True,
|
||||
)
|
||||
@@ -75,28 +85,39 @@ class SegmentModelDeleteView(DeleteView):
|
||||
@modeladmin_register
|
||||
class SegmentModelAdmin(ModelAdmin):
|
||||
"""The model admin for the Segments administration interface."""
|
||||
|
||||
model = Segment
|
||||
index_view_class = SegmentModelIndexView
|
||||
dashboard_view_class = SegmentModelDashboardView
|
||||
delete_view_class = SegmentModelDeleteView
|
||||
menu_icon = 'fa-snowflake-o'
|
||||
menu_icon = "fa-snowflake-o"
|
||||
add_to_settings_menu = False
|
||||
list_display = ('name', 'persistent', 'match_any', 'status',
|
||||
'page_count', 'variant_count', 'statistics')
|
||||
index_view_extra_js = ['js/commons.js', 'js/index.js']
|
||||
index_view_extra_css = ['css/index.css']
|
||||
form_view_extra_js = ['js/commons.js', 'js/form.js',
|
||||
'js/segment_form_control.js',
|
||||
'wagtailadmin/js/page-chooser-modal.js',
|
||||
'wagtailadmin/js/page-chooser.js']
|
||||
form_view_extra_css = ['css/form.css']
|
||||
list_display = (
|
||||
"name",
|
||||
"persistent",
|
||||
"match_any",
|
||||
"status",
|
||||
"page_count",
|
||||
"variant_count",
|
||||
"statistics",
|
||||
)
|
||||
index_view_extra_js = ["js/commons.js", "js/index.js"]
|
||||
index_view_extra_css = ["css/index.css"]
|
||||
form_view_extra_js = [
|
||||
"js/commons.js",
|
||||
"js/form.js",
|
||||
"js/segment_form_control.js",
|
||||
"wagtailadmin/js/page-chooser-modal.js",
|
||||
"wagtailadmin/js/page-chooser.js",
|
||||
]
|
||||
form_view_extra_css = ["css/form.css"]
|
||||
|
||||
def index_view(self, request):
|
||||
kwargs = {'model_admin': self}
|
||||
kwargs = {"model_admin": self}
|
||||
view_class = self.dashboard_view_class
|
||||
|
||||
request.session.setdefault('segment_view', 'dashboard')
|
||||
if request.session['segment_view'] != 'dashboard':
|
||||
request.session.setdefault("segment_view", "dashboard")
|
||||
if request.session["segment_view"] != "dashboard":
|
||||
view_class = self.index_view_class
|
||||
|
||||
return view_class.as_view(**kwargs)(request)
|
||||
@@ -109,7 +130,8 @@ class SegmentModelAdmin(ModelAdmin):
|
||||
|
||||
def statistics(self, obj):
|
||||
return _("{visits} visits in {days} days").format(
|
||||
visits=obj.visit_count, days=obj.get_active_days())
|
||||
visits=obj.visit_count, days=obj.get_active_days()
|
||||
)
|
||||
|
||||
|
||||
def toggle_segment_view(request):
|
||||
@@ -121,14 +143,14 @@ def toggle_segment_view(request):
|
||||
:rtype: django.http.HttpResponseRedirect
|
||||
|
||||
"""
|
||||
if request.user.has_perm('wagtailadmin.access_admin'):
|
||||
if request.session['segment_view'] == 'dashboard':
|
||||
request.session['segment_view'] = 'list'
|
||||
if request.user.has_perm("wagtailadmin.access_admin"):
|
||||
if request.session["segment_view"] == "dashboard":
|
||||
request.session["segment_view"] = "list"
|
||||
|
||||
elif request.session['segment_view'] != 'dashboard':
|
||||
request.session['segment_view'] = 'dashboard'
|
||||
elif request.session["segment_view"] != "dashboard":
|
||||
request.session["segment_view"] = "dashboard"
|
||||
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
|
||||
return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/"))
|
||||
|
||||
return HttpResponseForbidden()
|
||||
|
||||
@@ -144,12 +166,12 @@ def toggle(request, segment_id):
|
||||
:rtype: django.http.HttpResponseRedirect
|
||||
|
||||
"""
|
||||
if request.user.has_perm('wagtailadmin.access_admin'):
|
||||
if request.user.has_perm("wagtailadmin.access_admin"):
|
||||
segment = get_object_or_404(Segment, pk=segment_id)
|
||||
|
||||
segment.toggle()
|
||||
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
|
||||
return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/"))
|
||||
|
||||
return HttpResponseForbidden()
|
||||
|
||||
@@ -168,7 +190,7 @@ def copy_page_view(request, page_id, segment_id):
|
||||
:rtype: django.http.HttpResponseRedirect
|
||||
|
||||
"""
|
||||
if request.user.has_perm('wagtailadmin.access_admin'):
|
||||
if request.user.has_perm("wagtailadmin.access_admin"):
|
||||
segment = get_object_or_404(Segment, pk=segment_id)
|
||||
page = get_object_or_404(Page, pk=page_id).specific
|
||||
|
||||
@@ -178,7 +200,7 @@ def copy_page_view(request, page_id, segment_id):
|
||||
variant = variant_metadata.first()
|
||||
else:
|
||||
variant = metadata.copy_for_segment(segment)
|
||||
edit_url = reverse('wagtailadmin_pages:edit', args=[variant.id])
|
||||
edit_url = reverse("wagtailadmin_pages:edit", args=[variant.id])
|
||||
|
||||
return HttpResponseRedirect(edit_url)
|
||||
|
||||
@@ -187,14 +209,15 @@ def copy_page_view(request, page_id, segment_id):
|
||||
|
||||
# CSV download views
|
||||
def segment_user_data(request, segment_id):
|
||||
if request.user.has_perm('wagtailadmin.access_admin'):
|
||||
if request.user.has_perm("wagtailadmin.access_admin"):
|
||||
segment = get_object_or_404(Segment, pk=segment_id)
|
||||
|
||||
response = HttpResponse(content_type='text/csv; charset=utf-8')
|
||||
response['Content-Disposition'] = \
|
||||
'attachment;filename=segment-%s-users.csv' % str(segment_id)
|
||||
response = HttpResponse(content_type="text/csv; charset=utf-8")
|
||||
response[
|
||||
"Content-Disposition"
|
||||
] = "attachment;filename=segment-%s-users.csv" % str(segment_id)
|
||||
|
||||
headers = ['Username']
|
||||
headers = ["Username"]
|
||||
for rule in segment.get_rules():
|
||||
if rule.static:
|
||||
headers.append(rule.get_column_header())
|
||||
|
Reference in New Issue
Block a user