forked from CGM_Public/pretix_original
Refs #96 -- Allow anonymous orders
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
from datetime import timedelta
|
||||
from itertools import groupby
|
||||
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.views import redirect_to_login
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db.models import Q
|
||||
@@ -12,14 +11,54 @@ from pretix.base.models import CartPosition
|
||||
from pretix.base.signals import register_payment_providers
|
||||
|
||||
|
||||
class LoginRequiredMixin:
|
||||
def login_required(view_func):
|
||||
def _wrapped_view(request, *args, **kwargs):
|
||||
if request.user.is_authenticated():
|
||||
return view_func(request, *args, **kwargs)
|
||||
path = request.path
|
||||
return redirect_to_login(
|
||||
path, reverse('presale:event.checkout.login', kwargs={
|
||||
'organizer': request.event.organizer.slug,
|
||||
'event': request.event.slug,
|
||||
}), 'next'
|
||||
)
|
||||
return _wrapped_view
|
||||
|
||||
|
||||
def login_or_guest_required(view_func):
|
||||
def _wrapped_view(request, *args, **kwargs):
|
||||
if request.user.is_authenticated() or 'guest_email' in request.session:
|
||||
return view_func(request, *args, **kwargs)
|
||||
path = request.path
|
||||
return redirect_to_login(
|
||||
path, reverse('presale:event.checkout.login', kwargs={
|
||||
'organizer': request.event.organizer.slug,
|
||||
'event': request.event.slug,
|
||||
}), 'next'
|
||||
)
|
||||
return _wrapped_view
|
||||
|
||||
|
||||
class LoginRequiredMixin:
|
||||
@classmethod
|
||||
def as_view(cls, **initkwargs):
|
||||
view = super().as_view(**initkwargs)
|
||||
return login_required(view)
|
||||
|
||||
|
||||
class LoginOrGuestRequiredMixin:
|
||||
@classmethod
|
||||
def as_view(cls, **initkwargs):
|
||||
view = super().as_view(**initkwargs)
|
||||
return login_or_guest_required(view)
|
||||
|
||||
|
||||
def user_cart_q(request):
|
||||
if request.user.is_authenticated():
|
||||
return Q(Q(user=request.user) | Q(session=request.session.session_key))
|
||||
return Q(Q(user__isnull=True) & Q(session=request.session.session_key))
|
||||
|
||||
|
||||
class CartDisplayMixin:
|
||||
|
||||
@cached_property
|
||||
@@ -28,7 +67,7 @@ class CartDisplayMixin:
|
||||
A list of this users cart position
|
||||
"""
|
||||
return list(CartPosition.objects.current.filter(
|
||||
Q(user=self.request.user) & Q(event=self.request.event)
|
||||
user_cart_q(self.request) & Q(event=self.request.event)
|
||||
).order_by(
|
||||
'item', 'variation'
|
||||
).select_related(
|
||||
@@ -40,7 +79,7 @@ class CartDisplayMixin:
|
||||
|
||||
def get_cart(self, answers=False, queryset=None, payment_fee=None):
|
||||
queryset = queryset or CartPosition.objects.current.filter(
|
||||
Q(user=self.request.user) & Q(event=self.request.event)
|
||||
user_cart_q(self.request) & Q(event=self.request.event)
|
||||
)
|
||||
|
||||
prefetch = ['variation__values', 'variation__values__prop']
|
||||
@@ -106,7 +145,6 @@ class CartDisplayMixin:
|
||||
|
||||
|
||||
class EventViewMixin:
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['event'] = self.request.event
|
||||
|
||||
Reference in New Issue
Block a user