forked from CGM_Public/pretix_original
Widget: Pass cart IDs around in some more places
This commit is contained in:
@@ -115,7 +115,8 @@
|
|||||||
browser settings.
|
browser settings.
|
||||||
{% endblocktrans %}
|
{% endblocktrans %}
|
||||||
<br>
|
<br>
|
||||||
<a href="{% eventurl event "presale:event.index" %}" class="btn btn-default" target="_blank">
|
<a href="{% eventurl event "presale:event.index" cart_namespace=cart_namespace %}{% if "cart_id" in request.GET %}?src=widget&take_cart_id={{ request.GET.cart_id }}{% endif %}"
|
||||||
|
class="btn btn-primary" target="_blank">
|
||||||
{% trans "Open ticket shop in new tab" %}
|
{% trans "Open ticket shop in new tab" %}
|
||||||
</a>
|
</a>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
|
|||||||
@@ -20,10 +20,11 @@
|
|||||||
</p>
|
</p>
|
||||||
{% if event.presale_is_running or event.settings.show_items_outside_presale_period %}
|
{% if event.presale_is_running or event.settings.show_items_outside_presale_period %}
|
||||||
<form method="post" data-asynctask
|
<form method="post" data-asynctask
|
||||||
action="{% eventurl request.event "presale:event.cart.add" cart_namespace=cart_namespace %}?next={% eventurl request.event "presale:event.index" cart_namespace=cart_namespace %}">
|
action="{% eventurl request.event "presale:event.cart.add" cart_namespace=cart_namespace %}?next={% eventurl request.event "presale:event.index" cart_namespace=cart_namespace %}{% if "iframe" in request.GET %}&iframe={{ request.GET.iframe }}{% endif %}">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="subevent" value="{{ subevent.id|default_if_none:"" }}" />
|
<input type="hidden" name="subevent" value="{{ subevent.id|default_if_none:"" }}" />
|
||||||
<input type="hidden" name="_voucher_code" value="{{ voucher.code }}">
|
<input type="hidden" name="_voucher_code" value="{{ voucher.code }}">
|
||||||
|
|
||||||
{% for tup in items_by_category %}
|
{% for tup in items_by_category %}
|
||||||
<section>
|
<section>
|
||||||
{% if tup.0 %}
|
{% if tup.0 %}
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ class CartActionMixin:
|
|||||||
u += '&require_cookie=true'
|
u += '&require_cookie=true'
|
||||||
else:
|
else:
|
||||||
u += '?require_cookie=true'
|
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
|
return u
|
||||||
|
|
||||||
def get_success_url(self, value=None):
|
def get_success_url(self, value=None):
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
@@ -30,11 +32,11 @@ class CheckoutView(View):
|
|||||||
|
|
||||||
if not cart_exists(request) and "async_id" not in request.GET:
|
if not cart_exists(request) and "async_id" not in request.GET:
|
||||||
messages.error(request, _("Your cart is empty"))
|
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:
|
if not request.event.presale_is_running:
|
||||||
messages.error(request, _("The presale for this event is over or has not yet started."))
|
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
|
cart_error = None
|
||||||
try:
|
try:
|
||||||
@@ -49,14 +51,13 @@ class CheckoutView(View):
|
|||||||
continue
|
continue
|
||||||
if step.requires_valid_cart and cart_error:
|
if step.requires_valid_cart and cart_error:
|
||||||
messages.error(request, str(cart_error))
|
messages.error(request, str(cart_error))
|
||||||
return redirect(previous_step.get_step_url(request) if previous_step
|
return self.redirect(previous_step.get_step_url(request) if previous_step else self.get_index_url(request))
|
||||||
else self.get_index_url(request))
|
|
||||||
|
|
||||||
if 'step' not in kwargs:
|
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', ''))
|
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):
|
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 is_selected:
|
||||||
if request.method.lower() in self.http_method_names:
|
if request.method.lower() in self.http_method_names:
|
||||||
handler = getattr(step, request.method.lower(), self.http_method_not_allowed)
|
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_is_before = True
|
||||||
step.c_resolved_url = step.get_step_url(request)
|
step.c_resolved_url = step.get_step_url(request)
|
||||||
raise Http404()
|
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)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ from django.core.exceptions import PermissionDenied
|
|||||||
from django.db.models import Count, Prefetch, Q
|
from django.db.models import Count, Prefetch, Q
|
||||||
from django.http import Http404, HttpResponse
|
from django.http import Http404, HttpResponse
|
||||||
from django.shortcuts import get_object_or_404, redirect
|
from django.shortcuts import get_object_or_404, redirect
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
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"
|
template_name = "pretixpresale/event/index.html"
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
|
from pretix.presale.views.cart import get_or_create_cart_id
|
||||||
|
|
||||||
self.subevent = None
|
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 request.event.has_subevents:
|
||||||
if 'subevent' in kwargs:
|
if 'subevent' in kwargs:
|
||||||
self.subevent = request.event.subevents.filter(pk=kwargs['subevent'], active=True).first()
|
self.subevent = request.event.subevents.filter(pk=kwargs['subevent'], active=True).first()
|
||||||
|
|||||||
@@ -696,7 +696,7 @@ var shared_root_computed = {
|
|||||||
if (!this.$root.cart_exists) {
|
if (!this.$root.cart_exists) {
|
||||||
checkout_url += "checkout/start";
|
checkout_url += "checkout/start";
|
||||||
}
|
}
|
||||||
var form_target = this.event_url + 'w/' + widget_id + '/cart/add?iframe=1&next=' + checkout_url;
|
var form_target = this.event_url + 'w/' + widget_id + '/cart/add?iframe=1&next=' + encodeURIComponent(checkout_url);
|
||||||
if (getCookie(this.cookieName)) {
|
if (getCookie(this.cookieName)) {
|
||||||
form_target += "&take_cart_id=" + getCookie(this.cookieName);
|
form_target += "&take_cart_id=" + getCookie(this.cookieName);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user