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 %}
+