8

Merge pull request #13 from LabD/feature/dropdown-variant-create

Feature/dropdown variant create
This commit is contained in:
Boris Besemer
2016-12-06 14:36:42 +01:00
committed by GitHub
4 changed files with 58 additions and 2 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

@@ -4,8 +4,12 @@ import logging
from django.shortcuts import reverse
from django.conf.urls import include, url
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from wagtail.contrib.modeladmin.views import IndexView
from wagtail.wagtailadmin.widgets import (
Button, ButtonWithDropdownFromHook, PageListingButton)
from wagtail.wagtailcore import hooks
from personalisation import admin_urls
@@ -68,6 +72,7 @@ def set_visit_count(page, request, serve_args, serve_kwargs):
# No counters exist. Create a new counter with count value 1.
create_new_counter(page, request)
@hooks.register('before_serve_page')
def segment_user(page, request, serve_args, serve_kwargs):
request.session['segments'] = []
@@ -172,3 +177,28 @@ def _check_for_variations(segments, page):
return variation
return None
@hooks.register('register_page_listing_buttons')
def page_listing_variant_buttons(page, page_perms, is_parent=False):
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()
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')})