Browse Source

fix session ids

subDesTagesMitExtraKaese 2 years ago
parent
commit
8755632981
1 changed files with 21 additions and 15 deletions
  1. 21 15
      zitap/views.py

+ 21 - 15
zitap/views.py

@@ -1,4 +1,5 @@
 import random
+import datetime
 from django.db import IntegrityError
 from django.http import HttpResponseNotFound, HttpResponseRedirect, JsonResponse, HttpResponseNotAllowed
 from django.shortcuts import render
@@ -24,7 +25,12 @@ def create_event(request):
             n = 0
             while n<10:
                 try:
-                    event = Event.objects.create(name=data['event_name'])
+                    event = Event.objects.create(
+                        name=data['event_name'], 
+                        start_time=datetime.time(int(data['start_time']), 0), 
+                        end_time=datetime.time(int(data['end_time']), 0),
+                        slot_interval=datetime.timedelta(minutes=int(data['slot_interval'])),
+                    )
                     for date in data['event_date']:
                         event.date_set.create(date=date)
                     event.save()
@@ -43,17 +49,17 @@ def event(request, url):
         return render(request, 'zitap/event-not-found.html')
     
     # Check if the user is logged in
-    if 'participant_id' in request.session:
-        participant = Participant.objects.get(id=request.session['participant_id'])
+    if 'user_id' in request.session:
+        participant = Participant.objects.get(user_id=request.session['user_id'], event=event)
         login_form = None
-        update_form = UpdateSlotsForm(initial={'slots': participant.slots})
+        update_form = UpdateSlotsForm(initial={'slots': slots2string(participant, get_slot_count(event))}, participant=participant)
     else:
         login_form = LoginForm()
         update_form = None
     return render(
         request, 
         'zitap/event.html', 
-        {'event': event, 'grid': slots2grid(event), 'login_form': login_form, 'update_form': update_form}
+        {'event': event, 'grid': slots2grid(event, event.participant_set.all()), 'login_form': login_form, 'update_form': update_form}
     )
 
 def login(request, url):
@@ -77,14 +83,14 @@ def login(request, url):
                 return render(
                     request, 
                     'zitap/event.html', 
-                    {'event': event, 'grid': slots2grid(event), 'login_form': form, 'update_form': None}
+                    {'event': event, 'grid': slots2grid(event, event.participant_set.all()), 'login_form': form, 'update_form': None}
                 )
 
         auth_login(request, user)
         participant, created = Participant.objects.get_or_create(event=event, user=user)
-        participant.slots = random.getrandbits(get_slot_count(event)).to_bytes(get_slot_count(event) // 8, 'big')
+        participant.slots = random.getrandbits(get_slot_count(event)).to_bytes((get_slot_count(event)+7) // 8, 'big')
         participant.save()
-        request.session['participant_id'] = participant.id
+        request.session['user_id'] = user.id
         return HttpResponseRedirect(f'/{event.url}')
 
 def logout(request, url):
@@ -93,8 +99,8 @@ def logout(request, url):
     except Event.DoesNotExist:
         return render(request, 'zitap/event-not-found.html')
 
-    if 'participant_id' in request.session:
-        del request.session['participant_id']
+    if 'user_id' in request.session:
+        del request.session['user_id']
     return HttpResponseRedirect(f'/{event.url}')
 
 def update_slots(request, url):
@@ -106,10 +112,10 @@ def update_slots(request, url):
     if request.method != 'POST':
         return HttpResponseNotAllowed(['POST'])
 
-    form = UpdateSlotsForm(request.POST)
+    participant = Participant.objects.get(user_id=request.session['user_id'], event=event)
+    form = UpdateSlotsForm(request.POST, participant=participant)
     if form.is_valid():
         data = form.cleaned_data
-        participant = Participant.objects.get(id=request.session['participant_id'])
         participant.slots = string2slots(data['slots'], get_slot_count(event))
         participant.save()
         return HttpResponseRedirect(f'/{event.url}')
@@ -125,9 +131,9 @@ def slots_api(request, url):
         slot_count = get_slot_count(event)
 
         # Check if the user is logged in and wants to update their slots
-        if 'participant_id' in request.session and request.method == 'POST':
-            participant = Participant.objects.get(id=request.session['participant_id'])
-            form = UpdateSlotsForm(request.POST)
+        if 'user_id' in request.session and request.method == 'POST':
+            participant = Participant.objects.get(user_id=request.session['user_id'], event=event)
+            form = UpdateSlotsForm(request.POST, participant=participant)
             if form.is_valid():
                 data = form.cleaned_data
                 participant.slots = string2slots(data['slots'], slot_count)