adds page copy logic to dropdown
This commit is contained in:
@ -10,4 +10,5 @@ urlpatterns = [
|
|||||||
name='enable'),
|
name='enable'),
|
||||||
url(r'^segment/(?P<segment_id>[0-9]+)/disable/$', views.disable,
|
url(r'^segment/(?P<segment_id>[0-9]+)/disable/$', views.disable,
|
||||||
name='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
|
PersonalisablePage.get_edit_handler = get_edit_handler
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.http import HttpResponseRedirect
|
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 django.utils.translation import ugettext_lazy as _
|
||||||
from wagtail.contrib.modeladmin.views import CreateView
|
from wagtail.contrib.modeladmin.views import CreateView
|
||||||
|
|
||||||
from personalisation.forms import SegmentForm
|
from personalisation.forms import SegmentForm
|
||||||
from personalisation.models import Segment
|
from personalisation.models import Segment, PersonalisablePage
|
||||||
|
|
||||||
|
|
||||||
def enable(request, segment_id):
|
def enable(request, segment_id):
|
||||||
@ -33,3 +33,27 @@ class CreateSegmentView(CreateView):
|
|||||||
form_class = SegmentForm
|
form_class = SegmentForm
|
||||||
template_name = 'modeladmin/personalisation/segment/create.html'
|
template_name = 'modeladmin/personalisation/segment/create.html'
|
||||||
header_icon = 'folder-open-1'
|
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
|
return None
|
||||||
|
|
||||||
|
|
||||||
@hooks.register('register_page_listing_buttons')
|
@hooks.register('register_page_listing_buttons')
|
||||||
def page_listing_variant_buttons(page, page_perms, is_parent=False):
|
def page_listing_variant_buttons(page, page_perms, is_parent=False):
|
||||||
yield ButtonWithDropdownFromHook(
|
personalisable_page = PersonalisablePage.objects.filter(pk=page.pk)
|
||||||
_('Variants'),
|
segments = Segment.objects.all()
|
||||||
hook_name='register_page_listing_variant_buttons',
|
|
||||||
page=page,
|
if personalisable_page and len(segments) > 0 and not any(item.segment for item in personalisable_page):
|
||||||
page_perms=page_perms,
|
yield ButtonWithDropdownFromHook(
|
||||||
is_parent=is_parent,
|
_('Variants'),
|
||||||
attrs={'target': '_blank', 'title': _('Create a new variant')}, priority=100)
|
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')
|
@hooks.register('register_page_listing_variant_buttons')
|
||||||
def page_listing_more_buttons(page, page_perms, is_parent=False):
|
def page_listing_more_buttons(page, page_perms, is_parent=False):
|
||||||
segments = Segment.objects.all()
|
segments = Segment.objects.all()
|
||||||
for segment in segments:
|
current_page = PersonalisablePage.objects.filter(pk=page.pk)
|
||||||
yield Button(segment.name, reverse('wagtailadmin_pages:copy', args=[page.id]),
|
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')})
|
attrs={"title": _('Create this variant')})
|
||||||
|
Reference in New Issue
Block a user