adds page copy logic to dropdown
This commit is contained in:
@ -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')
|
||||
]
|
||||
|
@ -380,3 +380,4 @@ def get_edit_handler(cls):
|
||||
|
||||
|
||||
PersonalisablePage.get_edit_handler = get_edit_handler
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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')})
|
||||
|
Reference in New Issue
Block a user