forked from CGM_Public/pretix_original
Widget: Keep language in no-cookie-flow
This commit is contained in:
@@ -35,6 +35,7 @@
|
|||||||
import json
|
import json
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
|
import urllib
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
|
|
||||||
@@ -90,16 +91,22 @@ class CartActionMixin:
|
|||||||
if 'cart_namespace' in self.kwargs:
|
if 'cart_namespace' in self.kwargs:
|
||||||
kwargs['cart_namespace'] = self.kwargs['cart_namespace']
|
kwargs['cart_namespace'] = self.kwargs['cart_namespace']
|
||||||
u = eventreverse(self.request.event, 'presale:event.index', kwargs=kwargs)
|
u = eventreverse(self.request.event, 'presale:event.index', kwargs=kwargs)
|
||||||
if '?' in u:
|
|
||||||
u += '&require_cookie=true'
|
query = {'require_cookie': 'true'}
|
||||||
else:
|
|
||||||
u += '?require_cookie=true'
|
if 'locale' in self.request.GET:
|
||||||
|
query['locale'] = self.request.GET['locale']
|
||||||
disclose_cart_id = (
|
disclose_cart_id = (
|
||||||
'iframe' in self.request.GET or settings.SESSION_COOKIE_NAME not in self.request.COOKIES
|
'iframe' in self.request.GET or settings.SESSION_COOKIE_NAME not in self.request.COOKIES
|
||||||
) and self.kwargs.get('cart_namespace')
|
) and self.kwargs.get('cart_namespace')
|
||||||
if disclose_cart_id:
|
if disclose_cart_id:
|
||||||
cart_id = get_or_create_cart_id(self.request)
|
cart_id = get_or_create_cart_id(self.request)
|
||||||
u += '&cart_id={}'.format(cart_id)
|
query['cart_id'] = cart_id
|
||||||
|
|
||||||
|
if '?' in u:
|
||||||
|
u += '&' + urllib.parse.urlencode(query)
|
||||||
|
else:
|
||||||
|
u += '?' + urllib.parse.urlencode(query)
|
||||||
return u
|
return u
|
||||||
|
|
||||||
def get_success_url(self, value=None):
|
def get_success_url(self, value=None):
|
||||||
@@ -489,6 +496,8 @@ class CartAdd(EventViewMixin, CartActionMixin, AsyncAction, View):
|
|||||||
u = super().get_check_url(task_id, ajax)
|
u = super().get_check_url(task_id, ajax)
|
||||||
if "next" in self.request.GET:
|
if "next" in self.request.GET:
|
||||||
u += "&next=" + quote(self.request.GET.get('next'))
|
u += "&next=" + quote(self.request.GET.get('next'))
|
||||||
|
if "locale" in self.request.GET and "locale=" not in u:
|
||||||
|
u += "&locale=" + quote(self.request.GET.get('locale'))
|
||||||
if "next_error" in self.request.GET:
|
if "next_error" in self.request.GET:
|
||||||
u += "&next_error=" + quote(self.request.GET.get('next_error'))
|
u += "&next_error=" + quote(self.request.GET.get('next_error'))
|
||||||
if ajax:
|
if ajax:
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
import calendar
|
import calendar
|
||||||
import hashlib
|
import hashlib
|
||||||
import sys
|
import sys
|
||||||
|
import urllib.parse
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from datetime import date, datetime, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
@@ -423,9 +424,11 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
|||||||
elif request.GET.get('iframe', '') == '1' and 'take_cart_id' in request.GET:
|
elif request.GET.get('iframe', '') == '1' and 'take_cart_id' in request.GET:
|
||||||
# Widget just opened, a cart already exists. Let's to a stupid redirect to check if cookies are disabled
|
# Widget just opened, a cart already exists. Let's to a stupid redirect to check if cookies are disabled
|
||||||
get_or_create_cart_id(request)
|
get_or_create_cart_id(request)
|
||||||
return redirect(eventreverse(request.event, 'presale:event.index', kwargs=kwargs) + '?require_cookie=true&cart_id={}'.format(
|
return redirect(eventreverse(request.event, 'presale:event.index', kwargs=kwargs) + '?' + urllib.parse.urlencode({
|
||||||
request.GET.get('take_cart_id')
|
'require_cookie': 'true',
|
||||||
))
|
'cart_id': request.GET.get('take_cart_id'),
|
||||||
|
**({"locale": request.GET.get('locale')} if request.GET.get('locale') else {}),
|
||||||
|
}))
|
||||||
elif request.GET.get('iframe', '') == '1' and len(self.request.GET.get('widget_data', '{}')) > 3:
|
elif request.GET.get('iframe', '') == '1' and len(self.request.GET.get('widget_data', '{}')) > 3:
|
||||||
# We've been passed data from a widget, we need to create a cart session to store it.
|
# We've been passed data from a widget, we need to create a cart session to store it.
|
||||||
get_or_create_cart_id(request)
|
get_or_create_cart_id(request)
|
||||||
@@ -434,10 +437,11 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
|||||||
r = render(request, 'pretixpresale/event/cookies.html', {
|
r = render(request, 'pretixpresale/event/cookies.html', {
|
||||||
'url': eventreverse(
|
'url': eventreverse(
|
||||||
request.event, "presale:event.index", kwargs={'cart_namespace': kwargs.get('cart_namespace') or ''}
|
request.event, "presale:event.index", kwargs={'cart_namespace': kwargs.get('cart_namespace') or ''}
|
||||||
) + (
|
) + "?" + urllib.parse.urlencode({
|
||||||
"?src=widget&take_cart_id={}".format(request.GET.get('cart_id'))
|
"src": "widget",
|
||||||
if "cart_id" in request.GET else ""
|
**({"locale": request.GET.get('locale')} if request.GET.get('locale') else {}),
|
||||||
)
|
**({"take_cart_id": request.GET.get('cart_id')} if request.GET.get('cart_id') else {}),
|
||||||
|
})
|
||||||
})
|
})
|
||||||
r._csp_ignore = True
|
r._csp_ignore = True
|
||||||
return r
|
return r
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class WaitingView(EventViewMixin, FormView):
|
|||||||
r = render(request, 'pretixpresale/event/cookies.html', {
|
r = render(request, 'pretixpresale/event/cookies.html', {
|
||||||
'url': eventreverse(
|
'url': eventreverse(
|
||||||
request.event, "presale:event.waitinglist", kwargs={'cart_namespace': kwargs.get('cart_namespace')}
|
request.event, "presale:event.waitinglist", kwargs={'cart_namespace': kwargs.get('cart_namespace')}
|
||||||
) + '?' + url_replace(request, 'require_cookie', '', 'iframe', '')
|
) + '?' + url_replace(request, 'require_cookie', '', 'iframe', '', 'locale', request.GET.get('locale', get_language_without_region()))
|
||||||
})
|
})
|
||||||
r._csp_ignore = True
|
r._csp_ignore = True
|
||||||
return r
|
return r
|
||||||
|
|||||||
Reference in New Issue
Block a user