diff --git a/shiftregister/app/context_processors.py b/shiftregister/app/context_processors.py index 929a670..e5d0961 100644 --- a/shiftregister/app/context_processors.py +++ b/shiftregister/app/context_processors.py @@ -5,8 +5,6 @@ from .models import LoginToken def proc(request): context = { "DEBUG": settings.DEBUG, + "helper": request.helper, } - tk = LoginToken.objects.filter(pk=request.session.get("token")).first() - if tk: - context["helper"] = tk.helper return context diff --git a/shiftregister/app/middleware.py b/shiftregister/app/middleware.py new file mode 100644 index 0000000..027fdf6 --- /dev/null +++ b/shiftregister/app/middleware.py @@ -0,0 +1,23 @@ +from .models import LoginToken +def check_helper(get_response): + # One-time configuration and initialization. + + def middleware(request): + # Code to be executed for each request before + # the view (and later middleware) are called. + if request.session.get("token"): + tk = LoginToken.objects.get(pk=request.session.get("token")) + if not tk: + del request.session["token"] + else: + request.helper = tk.helper + + + response = get_response(request) + + # Code to be executed for each request/response after + # the view is called. + + return response + + return middleware \ No newline at end of file diff --git a/shiftregister/app/views.py b/shiftregister/app/views.py index 115798f..8bd05b7 100644 --- a/shiftregister/app/views.py +++ b/shiftregister/app/views.py @@ -14,14 +14,12 @@ def index(request): # dont show shifts starting in <60 minutes? # currently only sorts by date context = {} - helper = None - if request.session.get("token"): - helper = LoginToken.objects.get(pk=request.session["token"]).helper - context["my_shifts"] = helper.shiftregistration_set.filter( + if request.helper: + context["my_shifts"] = request.helper.shiftregistration_set.filter( shift__start_at__gt=timezone.now() ).order_by("shift__start_at") context["current_shift"] = ( - helper.shiftregistration_set.annotate( + request.helper.shiftregistration_set.annotate( shift_end=ExpressionWrapper( F("shift__start_at") + F("shift__duration"), output_field=DateTimeField(), @@ -36,13 +34,13 @@ def index(request): .filter(start_at__gt=timezone.now(), room__required_helpers__gt=F("reg_count")) .order_by("start_at") ) - if helper: + if request.helper: free_shifts = ( Shift.objects.annotate(reg_count=Count("shiftregistration")) .filter( start_at__gt=timezone.now(), room__required_helpers__gt=F("reg_count") ) - .filter(~Q(shiftregistration__helper=helper)) + .filter(~Q(shiftregistration__helper=request.helper)) .order_by("start_at") ) context["free_shifts"] = free_shifts @@ -75,7 +73,9 @@ def logout(request): def register(request): # handle number already being registered(resend message?) - if request.session.get("token"): + if request.helper: + if request.session.get("last_seen_shift"): + return redirect("shift", shiftid=request.session["last_seen_shift"]) return redirect("index") context = {} if request.method == "POST": @@ -102,7 +102,7 @@ def register(request): def shift(request, shiftid): shift = get_object_or_404(Shift, pk=shiftid) - helper = None + helper = request.helper context = { "can_register": False, "is_registered": False, @@ -114,8 +114,7 @@ def shift(request, shiftid): request.session["last_seen_shift"] = shiftid if shift.room.required_helpers > shift.shiftregistration_set.count(): context["can_register"] = True - if request.session.get("token"): - helper = LoginToken.objects.get(pk=request.session["token"]).helper + if helper: context["helper"] = helper reg = ShiftRegistration.objects.filter(shift=shift, helper=helper) if reg: @@ -126,7 +125,6 @@ def shift(request, shiftid): if request.method == "POST": if EmptyForm(request.POST).is_valid(): if not helper: - # todo: add flash message that signup is required? messages.add_message( request, messages.WARNING, @@ -160,9 +158,8 @@ def cancel(request, shiftid): return redirect("shift", shiftid=shiftid) if not request.session.get("token"): return redirect("shift", shiftid=shiftid) - helper = LoginToken.objects.get(pk=request.session["token"]).helper shift = get_object_or_404(Shift, pk=shiftid) - reg = get_object_or_404(ShiftRegistration, helper=helper, shift=shift) + reg = get_object_or_404(ShiftRegistration, helper=request.helper, shift=shift) if reg.can_cancel(): reg.delete() messages.add_message( diff --git a/shiftregister/settings.py b/shiftregister/settings.py index ed3bf5d..df0b2a2 100644 --- a/shiftregister/settings.py +++ b/shiftregister/settings.py @@ -52,6 +52,7 @@ MIDDLEWARE = [ "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", + "shiftregister.app.middleware.check_helper" ] ROOT_URLCONF = "shiftregister.urls"