]> git.parisson.com Git - teleforma.git/commitdiff
store user periods into session, optimize context,
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 29 Jun 2021 06:58:19 +0000 (08:58 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Tue, 29 Jun 2021 06:58:19 +0000 (08:58 +0200)
app/settings.py
app/wsgi.ini
teleforma/context_processors.py
teleforma/views/core.py

index 60cf799d5105c20668628913a3bc6e1c85541aa2..9d2f06d9c82e6407b82a46011db4d3dbe6320429 100644 (file)
@@ -233,7 +233,6 @@ TELEMETA_DEFAULT_GRAPHER_ID = 'waveform_contour_wh'
 AUTH_PROFILE_MODULE = 'telemeta.userprofile'
 LOGIN_URL = '/login/'
 LOGIN_REDIRECT_URL = reverse_lazy('teleforma-desk')
-SESSION_EXPIRE_AT_BROWSER_CLOSE = False
 
 EMAIL_HOST = 'angus.parisson.com'
 DEFAULT_FROM_EMAIL = 'crfpa@pre-barreau.com'
index 46cdf39a199f3c9d8b17fcfb1b1a4cf6ad6c7df7..c7033697ad9599c45b1027eed0ba75fdcba54c6d 100644 (file)
@@ -1,6 +1,6 @@
 [uwsgi]
 
-socket = 0.0.0.0:8000
+socket = :8000
 chdir = /srv/app/
 module = wsgi
 touch-reload = /srv/app/wsgi.py
index 9d8059822bde4d29821c10bccaa32e0ba669c971..eb88e5654fee711a037fc13169eff7694fc13b6a 100644 (file)
 
 
 from teleforma.views.core import get_periods
+from teleforma.models.core import Period
 
 
 def periods(request):
     """return the periods assigned to the user """
-
-    user = request.user
-
-    if not user.is_authenticated:
+    if not request.user.is_authenticated:
         return {'periods': None}
     else:
-        return {'periods': get_periods(user)}
+        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]
+        return {'periods': periods}
 
index d5b274d08eecb142f96995a28a0231b4db17290e..37c28d77c6fe8548b922e3248fba72e98dbbf173 100644 (file)
@@ -46,6 +46,7 @@ from django.contrib.contenttypes.models import ContentType
 from django.http import Http404, HttpResponse, HttpResponseRedirect
 from django.http.response import StreamingHttpResponse
 from django.shortcuts import redirect
+from django.shortcuts import get_object_or_404
 from django.contrib.sites.shortcuts import get_current_site
 from django.template import loader
 from django.urls import reverse
@@ -259,15 +260,14 @@ class HomeRedirectView(View):
 
     def get(self, request):
         if request.user.is_authenticated:
-            periods = get_periods(request.user)
-            if periods:
+            period_id = request.session.get('period')
+            if not period_id:
+                periods = request.session.get('periods')
+                if not periods:
+                    periods = get_periods(request.user)
                 period = get_default_period(periods)
-                if period in periods:
-                    return HttpResponseRedirect(reverse('teleforma-desk-period-list', kwargs={'period_id': period.id}))
-                else:
-                    return HttpResponseRedirect(reverse('teleforma-desk-period-list', kwargs={'period_id': periods[0].id}))
-            else:
-                return HttpResponseRedirect(reverse('teleforma-login'))
+                period_id = period.id
+            return HttpResponseRedirect(reverse('teleforma-desk-period-list', kwargs={'period_id': period_id}))
         else:
             return HttpResponseRedirect(reverse('teleforma-login'))
 
@@ -277,18 +277,17 @@ class PeriodAccessMixin(View):
     def get_context_data(self, **kwargs):
         context = super(PeriodAccessMixin, self).get_context_data(**kwargs)
         if 'period_id' in self.kwargs.keys():
-            period = Period.objects.filter(id=int(self.kwargs['period_id']))
-            if period:
-                self.period = period[0]
-            else:
-                periods = get_periods(self.request.user)
-                self.period = get_default_period(periods)
+            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
+        else:
+            self.period = get_default_period(context['periods'])
         context['period'] = self.period
         return context
 
     def render_to_response(self, context):
         period = context['period']
-        if not period in get_periods(self.request.user):
+        if not period in context['periods']:
             messages.warning(self.request, _(
                 "You do NOT have access to this resource and then have been redirected to your desk."))
             return redirect('teleforma-home')