Widget: Pass cart IDs around in some more places

This commit is contained in:
Raphael Michel
2018-08-16 18:40:21 +02:00
parent efdbbc6098
commit dfc7f7c827
6 changed files with 26 additions and 9 deletions

View File

@@ -47,6 +47,9 @@ class CartActionMixin:
u += '&require_cookie=true'
else:
u += '?require_cookie=true'
if 'iframe' in self.request.GET:
cart_id = get_or_create_cart_id(self.request)
u += '&cart_id={}'.format(cart_id)
return u
def get_success_url(self, value=None):

View File

@@ -1,3 +1,5 @@
from urllib.parse import quote
from django.contrib import messages
from django.http import Http404
from django.shortcuts import redirect
@@ -30,11 +32,11 @@ class CheckoutView(View):
if not cart_exists(request) and "async_id" not in request.GET:
messages.error(request, _("Your cart is empty"))
return redirect(self.get_index_url(self.request))
return self.redirect(self.get_index_url(self.request))
if not request.event.presale_is_running:
messages.error(request, _("The presale for this event is over or has not yet started."))
return redirect(self.get_index_url(self.request))
return self.redirect(self.get_index_url(self.request))
cart_error = None
try:
@@ -49,14 +51,13 @@ class CheckoutView(View):
continue
if step.requires_valid_cart and cart_error:
messages.error(request, str(cart_error))
return redirect(previous_step.get_step_url(request) if previous_step
else self.get_index_url(request))
return self.redirect(previous_step.get_step_url(request) if previous_step else self.get_index_url(request))
if 'step' not in kwargs:
return redirect(step.get_step_url(request))
return self.redirect(step.get_step_url(request))
is_selected = (step.identifier == kwargs.get('step', ''))
if "async_id" not in request.GET and not is_selected and not step.is_completed(request, warn=not is_selected):
return redirect(step.get_step_url(request))
return self.redirect(step.get_step_url(request))
if is_selected:
if request.method.lower() in self.http_method_names:
handler = getattr(step, request.method.lower(), self.http_method_not_allowed)
@@ -68,3 +69,8 @@ class CheckoutView(View):
step.c_is_before = True
step.c_resolved_url = step.get_step_url(request)
raise Http404()
def redirect(self, url):
if 'cart_id' in self.request.GET:
url += ('&' if '?' in url else '?') + 'cart_id=' + quote(self.request.GET.get('cart_id'))
return redirect(url)

View File

@@ -10,6 +10,7 @@ from django.core.exceptions import PermissionDenied
from django.db.models import Count, Prefetch, Q
from django.http import Http404, HttpResponse
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils.decorators import method_decorator
from django.utils.timezone import now
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
@@ -176,7 +177,12 @@ class EventIndex(EventViewMixin, CartMixin, TemplateView):
template_name = "pretixpresale/event/index.html"
def get(self, request, *args, **kwargs):
from pretix.presale.views.cart import get_or_create_cart_id
self.subevent = None
if request.GET.get('src', '') == 'widget' and 'take_cart_id' in request.GET:
get_or_create_cart_id(request)
return redirect(reverse('presale:event.index', kwargs=kwargs))
if request.event.has_subevents:
if 'subevent' in kwargs:
self.subevent = request.event.subevents.filter(pk=kwargs['subevent'], active=True).first()