mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
Fix cart ID handling issue in widget if cart/add takes longer than one request
This commit is contained in:
@@ -2,6 +2,7 @@ import json
|
|||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
@@ -283,7 +284,7 @@ def get_or_create_cart_id(request, create=True):
|
|||||||
current_id = orig_current_id = request.session.get(session_keyname)
|
current_id = orig_current_id = request.session.get(session_keyname)
|
||||||
if prefix and 'take_cart_id' in request.GET:
|
if prefix and 'take_cart_id' in request.GET:
|
||||||
pos = CartPosition.objects.filter(event=request.event, cart_id=request.GET.get('take_cart_id'))
|
pos = CartPosition.objects.filter(event=request.event, cart_id=request.GET.get('take_cart_id'))
|
||||||
if request.method == "POST" or pos.exists():
|
if request.method == "POST" or pos.exists() or 'ajax' in request.GET:
|
||||||
current_id = request.GET.get('take_cart_id')
|
current_id = request.GET.get('take_cart_id')
|
||||||
|
|
||||||
if current_id and current_id in request.session.get('carts', {}):
|
if current_id and current_id in request.session.get('carts', {}):
|
||||||
@@ -408,6 +409,15 @@ class CartAdd(EventViewMixin, CartActionMixin, AsyncAction, View):
|
|||||||
'has_cart': CartPosition.objects.filter(cart_id=cart_id, event=self.request.event).exists()
|
'has_cart': CartPosition.objects.filter(cart_id=cart_id, event=self.request.event).exists()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_check_url(self, task_id, ajax):
|
||||||
|
u = super().get_check_url(task_id, ajax)
|
||||||
|
if "next" in self.request.GET:
|
||||||
|
u += "&next=" + quote(self.request.GET.get('next'))
|
||||||
|
if ajax:
|
||||||
|
cart_id = get_or_create_cart_id(self.request)
|
||||||
|
u += '&take_cart_id=' + cart_id
|
||||||
|
return u
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
cart_id = get_or_create_cart_id(self.request)
|
cart_id = get_or_create_cart_id(self.request)
|
||||||
if "widget_data" in request.POST:
|
if "widget_data" in request.POST:
|
||||||
|
|||||||
Reference in New Issue
Block a user