From bcce0b35a62b8d202a1a734d64cce32abf8c80c0 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Wed, 30 Jun 2021 01:32:37 +0200 Subject: [PATCH] improve period management in context and sessions --- teleforma/context_processors.py | 2 +- teleforma/views/appointment.py | 2 +- teleforma/views/core.py | 76 +++++++++++++++++---------------- teleforma/views/crfpa.py | 2 +- teleforma/webclass/views.py | 2 +- 5 files changed, 43 insertions(+), 41 deletions(-) diff --git a/teleforma/context_processors.py b/teleforma/context_processors.py index 263bf24e..cf45ad91 100644 --- a/teleforma/context_processors.py +++ b/teleforma/context_processors.py @@ -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)} diff --git a/teleforma/views/appointment.py b/teleforma/views/appointment.py index d88d669a..ee7a36cf 100644 --- a/teleforma/views/appointment.py +++ b/teleforma/views/appointment.py @@ -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 diff --git a/teleforma/views/core.py b/teleforma/views/core.py index ca62fb3a..5ddbcdae 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -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 diff --git a/teleforma/views/crfpa.py b/teleforma/views/crfpa.py index 62899bd0..804abce9 100644 --- a/teleforma/views/crfpa.py +++ b/teleforma/views/crfpa.py @@ -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 diff --git a/teleforma/webclass/views.py b/teleforma/webclass/views.py index e3ecbf7d..cced620e 100644 --- a/teleforma/webclass/views.py +++ b/teleforma/webclass/views.py @@ -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 -- 2.39.5