From 7ec039905d62d7b07a1bd0bbd70a4a12a3d76bf5 Mon Sep 17 00:00:00 2001 From: Boris Besemer Date: Tue, 15 Nov 2016 15:36:28 +0100 Subject: [PATCH] adds working add variation page --- src/personalisation/admin_urls.py | 2 +- src/personalisation/models.py | 21 ++++-- .../templates/wagtailadmin/add.html | 71 +++++++++++++++++++ src/personalisation/views.py | 5 +- 4 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 src/personalisation/templates/wagtailadmin/add.html diff --git a/src/personalisation/admin_urls.py b/src/personalisation/admin_urls.py index cb01c8b..518fd1f 100644 --- a/src/personalisation/admin_urls.py +++ b/src/personalisation/admin_urls.py @@ -19,6 +19,6 @@ urlpatterns = [ name="refferal_rule_embed"), url(r'^segment/visit-count-rule/$', views.visit_count_rule_embed, name="visit_count_rule_embed"), - url(r'^variations/(?P\d+)/add/(?P[^/]+)/$', + url(r'^variations/(?P\d+)/add/(?P[^/]+)/$', views.AddVariation.as_view(), name='add') ] diff --git a/src/personalisation/models.py b/src/personalisation/models.py index 26e29da..7a099a8 100644 --- a/src/personalisation/models.py +++ b/src/personalisation/models.py @@ -6,7 +6,6 @@ from datetime import datetime from django.db import models from django.db.models import Q from django.db.models.signals import pre_save -from django.dispatch import receiver from django.template.defaultfilters import slugify from django.utils.encoding import python_2_unicode_compatible from django.utils.functional import cached_property @@ -212,7 +211,7 @@ class AdminPersonalisablePageForm(WagtailAdminPageForm): segment_display = "{} - {}".format(segment_display, "canonical") self.fields['segment'].widget = ReadOnlyWidget( - text_display=segment_display if segment_display else '') + text_display=segment_display if segment_display else _("No segment")) class PersonalisablePage(Page): @@ -262,7 +261,7 @@ class PersonalisablePage(Page): ) return variation_parent - def create_variation(self, segment, parent=None): + def create_variation(self, segment, copy_fields=False, parent=None): slug = "{}-{}".format(self.slug, segment.encoded_name()) if not parent: @@ -276,9 +275,18 @@ class PersonalisablePage(Page): 'canonical_page': self, } - model_class = self.content_type.model_class() - new_page = model_class(**update_attrs) - parent.add_child() + if copy_fields: + kwargs = {'update_attrs': update_attrs} + if parent != self.get_parent(): + kwargs['to'] = parent + + new_page = self.copy(**kwargs) + else: + model_class = self.content_type.model_class() + new_page = model_class(**update_attrs) + parent.add_child(instance=new_page) + + return new_page @cached_property def has_variations(self): @@ -288,6 +296,7 @@ class PersonalisablePage(Page): def is_canonical(self): return not self.canonical_page and self.has_variations + @cached_classmethod def get_edit_handler(cls): tabs = [] diff --git a/src/personalisation/templates/wagtailadmin/add.html b/src/personalisation/templates/wagtailadmin/add.html new file mode 100644 index 0000000..e8650ba --- /dev/null +++ b/src/personalisation/templates/wagtailadmin/add.html @@ -0,0 +1,71 @@ +{% extends "wagtailadmin/generic/index.html" %} +{% load wagtailadmin_tags %} +{% load i18n %} + +{% block titletag %}{% blocktrans with page_type=content_type.model_class.get_verbose_name %}New {{ page_type }}{% endblocktrans %}{% endblock %} +{% block bodyclass %}page-editor create-model-{{ content_type.model }}{% endblock %} + +{% block content %} +
+ {% include "wagtailadmin/shared/breadcrumb.html" with page=parent_page include_self=1 %} + +
+
+

{% trans 'Add new variation for' %} {{ content_type.model_class.get_verbose_name }}: {{ page.title }} with segment {{ segment }}

+
+
+
+ +
+ {% csrf_token %} + {{ edit_handler.render_form_content }} + + {% page_permissions parent_page as parent_page_perms %} +
+
    +
  • + +
  • +
+
+ +
+ +{% endblock %} +{% block extra_css %} + {{ block.super }} + {% include "wagtailadmin/pages/_editor_css.html" %} +{% endblock %} +{% block extra_js %} + {{ block.super }} + {% include "wagtailadmin/pages/_editor_js.html" %} + + +{% endblock %} + diff --git a/src/personalisation/views.py b/src/personalisation/views.py index 0559854..981080f 100644 --- a/src/personalisation/views.py +++ b/src/personalisation/views.py @@ -73,6 +73,7 @@ class CreateSegmentView(CreateView): class AddVariation(FormView): form_class = PersonalisationForm + template_name = "wagtailadmin/add.html" add_variation_panels = [ FieldPanel('copy_from_canonical'), @@ -84,9 +85,9 @@ class AddVariation(FormView): base_form_class=PersonalisationForm) ]) - def dispatch(self, request, page_pk, segment_name, *args, **kwargs): + def dispatch(self, request, page_pk, segment_pk, *args, **kwargs): self.page = get_object_or_404(PersonalisablePage, pk=page_pk) - self.segment = get_object_or_404(Segment, name=segment_name) + self.segment = get_object_or_404(Segment, pk=segment_pk) return super(AddVariation, self).dispatch(request, *args, **kwargs)