From cfc61e862141de482a89c27e9606b9d6c72fdae2 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 8 Jan 2020 22:27:49 +0100 Subject: [PATCH] redirect to survey --- rowers/forms.py | 6 +++++ rowers/middleware.py | 36 ++++++++++++++++++++------ rowers/models.py | 2 ++ rowers/templates/survey.html | 47 ++++++++++++++++++++++++++++++++++ rowers/templates/survey2.html | 48 +++++++++++++++++++++++++++++++++++ rowers/urls.py | 1 + rowers/views/statements.py | 2 +- rowers/views/userviews.py | 25 ++++++++++++++++++ rowsandall_app/settings.py | 1 + templates/newbase.html | 5 ++++ 10 files changed, 164 insertions(+), 9 deletions(-) create mode 100644 rowers/templates/survey.html create mode 100644 rowers/templates/survey2.html diff --git a/rowers/forms.py b/rowers/forms.py index bbd919b8..20882308 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -31,6 +31,12 @@ formaxlabels = axlabels.copy() formaxlabels.pop('None') parchoices = list(sorted(formaxlabels.items(), key = lambda x:x[1])) +class SurveyForm(forms.Form): + surveydone = forms.ChoiceField( + required=True, + choices=(('YES','YES'),('NO','NO')), + label='Will you take a 2 minute survey to help improve rowsandall?', + widget = forms.RadioSelect) class FlexibleDecimalField(forms.DecimalField): diff --git a/rowers/middleware.py b/rowers/middleware.py index 7b9abb86..03a7cb2c 100644 --- a/rowers/middleware.py +++ b/rowers/middleware.py @@ -22,10 +22,10 @@ def getrower(user): def do_update(user,mode='rower',days=42): r = getrower(user) - + startdate = timezone.now()-datetime.timedelta(days=days) - # test if not something already done + # test if not something already done now_date = timezone.now().strftime('%Y-%m-%d') ms = PowerTimeFitnessMetric.objects.filter( user=user, @@ -37,11 +37,11 @@ def do_update(user,mode='rower',days=42): else: max_workout_id = max([m.last_workout for m in ms]) last_update_date = ms[0].date.strftime('%Y-%m-%d') - + #last_update_date = max([m.date.strftime('%Y-%m-%d') for m in ms]) - + if mode == 'rower': workouts = Workout.objects.filter( user=r, @@ -59,7 +59,7 @@ def do_update(user,mode='rower',days=42): except ValueError: max_id = 0 - + if last_update_date < now_date and max_workout_id < max_id: job = myqueue(queuelow, handle_updatefitnessmetric, @@ -73,7 +73,7 @@ def do_update(user,mode='rower',days=42): class PowerTimeFitnessMetricMiddleWare(object): def __init__(self, get_response): self.get_response = get_response - + def __call__(self, request): # Code to be executed before the view is called if request.user.is_authenticated: @@ -83,7 +83,7 @@ class PowerTimeFitnessMetricMiddleWare(object): response = self.get_response(request) return response - + from django.shortcuts import redirect @@ -98,8 +98,28 @@ allowed_paths = [ '/rowers/me/gdpr-optin-confirm' '/rowers/exportallworkouts/', '/rowers/exportallworkouts', + '/rowers/survey/' ] +class SurveyMiddleWare(object): + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + if request.user.is_authenticated and request.path not in allowed_paths: + r = getrower(request.user) + nexturl = request.path + if 'survey' in nexturl: + nexturl = '/rowers/list-workouts' + if not r.surveydone: + return redirect( + '/rowers/survey/?next=%s' % nexturl + ) + + response = self.get_response(request) + + return response + class GDPRMiddleWare(object): def __init__(self, get_response): self.get_response = get_response @@ -137,7 +157,7 @@ class RowerPlanMiddleWare(object): r.paidplan = basicplans[0] r.save() # remove from Free Coach groups - + # send email job = myqueue(queue, handle_sendemail_expired, diff --git a/rowers/models.py b/rowers/models.py index fd830b37..6d9b7ac9 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -730,6 +730,8 @@ class Rower(models.Model): # Privacy Data gdproptin = models.BooleanField(default=False) gdproptindate = models.DateTimeField(blank=True,null=True) + surveydone = models.BooleanField(default=False) + surveydonedate = models.DateTimeField(blank=True,null=True) # Heart Rate Zone data diff --git a/rowers/templates/survey.html b/rowers/templates/survey.html new file mode 100644 index 00000000..1e5fc0fb --- /dev/null +++ b/rowers/templates/survey.html @@ -0,0 +1,47 @@ +{% extends "newbase.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}File loading{% endblock %} + +{% block meta %} + + + +{% endblock %} + +{% block main %} + +{% endblock %} + +{% block sidebar %} +{% include 'menu_profile.html' %} +{% endblock %} diff --git a/rowers/templates/survey2.html b/rowers/templates/survey2.html new file mode 100644 index 00000000..a59c8179 --- /dev/null +++ b/rowers/templates/survey2.html @@ -0,0 +1,48 @@ +{% extends "newbase.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}Rowsandall {% endblock %} + + +{% block meta %} + + +{% endblock %} + + +{% block main %} + + + +{% endblock %} + + + + + +{% block sidebar %} +{% include 'menu_profile.html' %} +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 97a45af6..7146d4da 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -449,6 +449,7 @@ urlpatterns = [ re_path(r'^user-multiflex-data/$',views.multiflex_data,name='multiflex_data'), re_path(r'^me/deactivate/$',views.deactivate_user,name='deactivate_user'), re_path(r'^me/delete/$',views.remove_user,name='remove_user'), + re_path(r'^survey/$',views.survey,name='survey'), re_path(r'^me/gdpr-optin-confirm/?/$',views.user_gdpr_confirm,name='user_gdpr_confirm'), re_path(r'^me/gdpr-optin-confirm/$',views.user_gdpr_confirm,name='user_gdpr_confirm'), re_path(r'^me/gdpr-optin/?/$',views.user_gdpr_optin,name='user_gdpr_optin'), diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 9f09bccc..aab50741 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -60,7 +60,7 @@ from rowers.forms import ( MetricsForm,DisqualificationForm,disqualificationreasons, disqualifiers,SearchForm,BillingForm,PlanSelectForm, VideoAnalysisCreateForm,WorkoutSingleSelectForm, - VideoAnalysisMetricsForm, + VideoAnalysisMetricsForm,SurveyForm, ) from django.urls import reverse, reverse_lazy diff --git a/rowers/views/userviews.py b/rowers/views/userviews.py index 710fd771..205104fe 100644 --- a/rowers/views/userviews.py +++ b/rowers/views/userviews.py @@ -5,6 +5,31 @@ from __future__ import unicode_literals from rowers.views.statements import * +@login_required() +def survey(request): + + r = getrower(request.user) + + surveyform = SurveyForm() + + if request.method == 'POST': + form = SurveyForm(request.POST) + r.surveydone = True + r.surveydonedate = timezone.now() + r.save() + + nexturl = request.GET.get('next') + return HttpResponseRedirect(nexturl) + + context = { + 'teams':get_my_teams(request.user), + 'rower':r, + 'form':surveyform, + } + + + return render(request,'survey.html',context) + @login_required() def start_trial_view(request): r = getrower(request.user) diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index 283aa476..8814688e 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -98,6 +98,7 @@ MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'tz_detect.middleware.TimezoneMiddleware', 'rowers.middleware.GDPRMiddleWare', + 'rowers.middleware.SurveyMiddleWare', 'rowers.middleware.PowerTimeFitnessMetricMiddleWare', 'rowers.middleware.RowerPlanMiddleWare', ] diff --git a/templates/newbase.html b/templates/newbase.html index 41486614..5fab2852 100644 --- a/templates/newbase.html +++ b/templates/newbase.html @@ -327,6 +327,11 @@

{% endif %} {% block ad %} +
+ +