7

adds page copy logic to dropdown

This commit is contained in:
Boris Besemer
2016-12-06 14:32:54 +01:00
parent 94bbe40351
commit 47eff9a4f1
4 changed files with 44 additions and 12 deletions

View File

@ -10,4 +10,5 @@ urlpatterns = [
name='enable'),
url(r'^segment/(?P<segment_id>[0-9]+)/disable/$', views.disable,
name='disable'),
url(r'^personalisation/(?P<page_id>[0-9]+)/copy/(?P<segment_id>[0-9]+)$', views.copy_page_view, name='copy_page')
]

View File

@ -380,3 +380,4 @@ def get_edit_handler(cls):
PersonalisablePage.get_edit_handler = get_edit_handler

View File

@ -1,12 +1,12 @@
from __future__ import absolute_import, unicode_literals
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.shortcuts import get_object_or_404, render, reverse
from django.utils.translation import ugettext_lazy as _
from wagtail.contrib.modeladmin.views import CreateView
from personalisation.forms import SegmentForm
from personalisation.models import Segment
from personalisation.models import Segment, PersonalisablePage
def enable(request, segment_id):
@ -33,3 +33,27 @@ class CreateSegmentView(CreateView):
form_class = SegmentForm
template_name = 'modeladmin/personalisation/segment/create.html'
header_icon = 'folder-open-1'
def copy_page_view(request, page_id, segment_id):
"""Copy page with selected segment"""
segment = get_object_or_404(Segment, pk=segment_id)
page = get_object_or_404(PersonalisablePage, pk=page_id)
slug = "{}-{}".format(page.slug, segment.encoded_name())
title = "{} ({})".format(page.title, segment.name)
update_attrs = {
'title': title,
'slug': slug,
'segment': segment,
'live': False,
'canonical_page': page,
'is_segmented': True,
}
new_page = page.copy(update_attrs=update_attrs, copy_revisions=False)
edit_url = reverse('wagtailadmin_pages:edit', args=[new_page.id])
return HttpResponseRedirect(edit_url)

View File

@ -178,21 +178,27 @@ def _check_for_variations(segments, page):
return None
@hooks.register('register_page_listing_buttons')
def page_listing_variant_buttons(page, page_perms, is_parent=False):
yield ButtonWithDropdownFromHook(
_('Variants'),
hook_name='register_page_listing_variant_buttons',
page=page,
page_perms=page_perms,
is_parent=is_parent,
attrs={'target': '_blank', 'title': _('Create a new variant')}, priority=100)
personalisable_page = PersonalisablePage.objects.filter(pk=page.pk)
segments = Segment.objects.all()
if personalisable_page and len(segments) > 0 and not any(item.segment for item in personalisable_page):
yield ButtonWithDropdownFromHook(
_('Variants'),
hook_name='register_page_listing_variant_buttons',
page=page,
page_perms=page_perms,
is_parent=is_parent,
attrs={'target': '_blank', 'title': _('Create a new variant')}, priority=100)
@hooks.register('register_page_listing_variant_buttons')
def page_listing_more_buttons(page, page_perms, is_parent=False):
segments = Segment.objects.all()
for segment in segments:
yield Button(segment.name, reverse('wagtailadmin_pages:copy', args=[page.id]),
current_page = PersonalisablePage.objects.filter(pk=page.pk)
available_segments = [item for item in segments if not PersonalisablePage.objects.filter(segment=item)]
for segment in available_segments:
yield Button(segment.name, reverse('segment:copy_page', args=[page.id, segment.id]),
attrs={"title": _('Create this variant')})