]> git.parisson.com Git - teleforma.git/commitdiff
improve period management in context and sessions
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 29 Jun 2021 23:32:37 +0000 (01:32 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 29 Jun 2021 23:32:37 +0000 (01:32 +0200)
teleforma/context_processors.py
teleforma/views/appointment.py
teleforma/views/core.py
teleforma/views/crfpa.py
teleforma/webclass/views.py

index 263bf24eb5d7afb69b235877bffec674d8817e76..cf45ad915a747cb71bf84adf015b5806cd37384b 100644 (file)
@@ -42,5 +42,5 @@ def periods(request):
     if not request.user.is_authenticated:
         return {'periods': None}
     else:
-        return {'periods': get_periods(request.user, request=request)}
+        return {'periods': get_periods(request)}
 
index d88d669af535eee5c000ed7356c0d4e210f27baf..ee7a36cf4a94208239211e9cb97047aaf176c426 100644 (file)
@@ -26,7 +26,7 @@ class Appointments(View):
         if not student:
             return HttpResponse('Unauthorized', status=401)
         period_id = int(period_id)
-        periods = [ p for p in get_periods(user) if int(p.id) == period_id ]
+        periods = [ p for p in get_periods(self.request) if int(p.id) == period_id ]
         if not periods:
             return HttpResponse('Unauthorized', status=401)
         return
index ca62fb3ab6579970fd005d72f9c04bc9ab6024d9..5ddbcdae87f6ca2819055911d7bd4f1961d66196 100644 (file)
@@ -142,36 +142,36 @@ def get_host(request):
     return host
 
 
-def get_periods(user, request=None):
-    if request:
-        period_ids = request.session.get('periods')
-            if not periods:
-                periods = get_periods(request.user)
-                request.session['periods'] = [period.id for period in periods]
-            else:
-                periods = [Period.objects.get(id=period_id) for period_id in period_ids]
-    periods = []
-    student = user.student.all()
-    if student:
-        student = user.student.get()
-        periods = [training.period for training in student.trainings.all()]
-        for period in periods:
-            for child in period.children.all():
-                periods.append(child)
-
-    if user.is_superuser or user.is_staff:
-        periods = Period.objects.filter(is_open=True)
-
-    professor = user.professor.all()
-    if professor:
-        periods = Period.objects.filter(is_open=True)
-
-    quotas = user.quotas.all()
-    if quotas and not (user.is_superuser or user.is_staff) and not professor:
+def get_periods(request):
+    period_ids = request.session.get('period_ids')
+
+    if period_ids:
+        periods = [Period.objects.get(id=period_id) for period_id in period_ids]
+    else:
         periods = []
-        for quota in quotas:
-            if not quota.period in periods:
-                periods.append(quota.period)
+        student = user.student.all()
+        if student:
+            student = user.student.get()
+            periods = [training.period for training in student.trainings.all()]
+            for period in periods:
+                for child in period.children.all():
+                    periods.append(child)
+
+        if user.is_superuser or user.is_staff:
+            periods = Period.objects.filter(is_open=True)
+
+        professor = user.professor.all()
+        if professor:
+            periods = Period.objects.filter(is_open=True)
+
+        quotas = user.quotas.all()
+        if quotas and not (user.is_superuser or user.is_staff) and not professor:
+            periods = []
+            for quota in quotas:
+                if not quota.period in periods:
+                    periods.append(quota.period)
+
+        request.session['period_ids'] = [period.id for period in periods]
 
     return periods
 
@@ -267,13 +267,12 @@ class HomeRedirectView(View):
 
     def get(self, request):
         if request.user.is_authenticated:
-            period_id = request.session.get('period')
+            period_id = request.session.get('period_id')
             if not period_id:
-                periods = request.session.get('periods')
-                if not periods:
-                    periods = get_periods(request.user)
+                periods = get_periods(request)
                 period = get_default_period(periods)
                 period_id = period.id
+                request.session['period_id'] = period_id
             return HttpResponseRedirect(reverse('teleforma-desk-period-list', kwargs={'period_id': period_id}))
         else:
             return HttpResponseRedirect(reverse('teleforma-login'))
@@ -284,11 +283,14 @@ class PeriodAccessMixin(View):
     def get_context_data(self, **kwargs):
         context = super(PeriodAccessMixin, self).get_context_data(**kwargs)
         if 'period_id' in self.kwargs.keys():
-            self.period = Period.objects.get_object_or_404(id=int(self.kwargs['period_id']))
-            if self.period in context['periods']:
-                self.request.session['period'] = self.period.id
+            period_id = int(self.kwargs['period_id'])
+            self.period = Period.objects.get_object_or_404(id=period_id)
         else:
-            self.period = get_default_period(context['periods'])
+            periods = get_periods(request)
+            period = get_default_period(periods)
+            period_id = period.id
+            self.period = period
+        request.session['period_id'] = period_id
         context['period'] = self.period
         return context
 
index 62899bd0be90f9e160db651f8a949839ba2ac6ca..804abce912cd06a303cc1fb2172f06eeef3aad2f 100644 (file)
@@ -706,7 +706,7 @@ class AnnalsView(ListView):
         if self.student:
             context['student'] =  self.student
         context['all_courses'] = self.all_courses
-        periods = get_periods(user)
+        periods = get_periods(self.request)
         context['period'] = periods[0]
         return context
 
index e3ecbf7d5f261a53794c054bd801f645efdc966e..cced620e25e69098e35742202ebe9a5f388e8eeb 100644 (file)
@@ -44,7 +44,7 @@ class WebclassAppointment(View):
         student = student[0]
         # check period
         period_id = webclass.period.id
-        periods = [p for p in get_periods(user) if int(p.id) == period_id]
+        periods = [p for p in get_periods(self.request) if int(p.id) == period_id]
         if not periods:
             return HttpResponse('Unauthorized', status=401)
         # check courses