Private
Public Access
1
0

Merge branch 'feature/raceregistration' into develop

This commit is contained in:
Sander Roosendaal
2018-11-29 17:12:04 +01:00
11 changed files with 111 additions and 24 deletions
+13
View File
@@ -2354,6 +2354,19 @@ def workout_trimp(w):
r.save()
if w.averagehr is None:
rowdata = rdata(w.csvfilename)
try:
avghr = rowdata.df[' HRCur (bpm)'].mean()
maxhr = rowdata.df[' HRCur (bpm)'].max()
except KeyError:
avghr = None
maxhr = None
w.averagehr = avghr
w.maxhr = maxhr
w.save()
job = myqueue(
queuehigh,
+3
View File
@@ -597,7 +597,10 @@ def handle_calctrimp(id,
df = rowdata.df
try:
df['deltat'] = df[' ElapsedTime (sec)'].diff().abs()
except KeyError:
return 0
df2 = df.copy()
+2 -1
View File
@@ -7,7 +7,8 @@
{% block main %}
<p>
We know you are eager to start using rowsandall.com, but we must
ask you to read and agree with the below first.
ask you to read and agree with the below first. At the bottom of this page,
you can opt in or delete this user account.
</p>
<h2>GDPR Opt-In</h2>
+10 -2
View File
@@ -21,14 +21,22 @@
</tr>
<tr>
<td></td>
<td><a href="/password_reset/">Forgot password?</a></td>
<td><p><a href="/password_reset/">Forgot password?</a></p></td>
</tr>
<tr>
<td></td>
<td><p><a href="/rowers/register?next={{ next }}">Register New User</a></p></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="login" /></td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
</li>
+3 -2
View File
@@ -1,7 +1,7 @@
{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Contact Us{% endblock title %}
{% block title %}New User Registration{% endblock title %}
{% block meta %}
{% endblock %}
@@ -23,7 +23,8 @@
{{ form.as_table }}
</table>
<a href="/rowers/legal">Terms of Service</a>
<input class="button green" type="submit" value="Submit">
<input type="hidden" name="next" value="{{ next }}"/>
<input type="submit" value="Submit">
</form>
</div>
</li>
+38 -2
View File
@@ -8,11 +8,42 @@
{% include "monitorjobs.html" %}
{% endblock %}
{% block og_title %}{{ race.name }}{% endblock %}
{% block description %}Virtual Rowing Race {{ race.name }}{% endblock %}
{% if racelogo %}
{% block og_image %}
<meta property="og:image" content="http://rowsandall.com/{{ racelogo.filename|spacetohtml }}" />
<meta property="og:image:secure_url" content="https://rowsandall.com/{{ racelogo.filename |spacetohtml }}" />
<meta property="og:image:width" content="{{ racelogo.width }}" />
<meta property="og:image:height" content="{{ racelogo.height }}" />
{% endblock %}
{% block image_src %}
<link rel="image_src" href="/{{ racelogo.filename |spacetohtml }}" />
{% endblock %}
{% endif %}
{% block main %}
<h1>{{ race.name }}</h1>
<p>
<div class="fb-share-button"
data-href="{{ request.build_absolute_uri }}"
data-layout="button" data-size="small" data-mobile-iframe="false">
<a class="fb-xfbml-parse-ignore" target="_blank"
href="https://www.facebook.com/sharer/sharer.php?u={{ request.build_absolute_uri }}">Share</a>
</div>
</p>
<p>
<a class="twitter-share-button"
href="https://twitter.com/intent/tweet"
data-url="{{ request.build_absolute_uri }}"
data-text="@rowsandall #rowingdata Participate in Indoor Rowing virtual race '{{ race.name }}'">Tweet</a>
</p>
{% if not racelogo and race.manager == request.user %}
<a href="/rowers/virtualevent/{{ race.id }}/image">Add Race Logo</a>
{% endif %}
@@ -97,6 +128,11 @@
{% if request.user.is_anonymous %}
<p>
Registered users of rowsandall.com can participate in this event. Participation is free, unless specified differently in the race comment above.
{% if race.sessiontype == 'race' %}
<a href="/rowers/virtualevent/{{ race.id }}/register"><h3>Register</h3></a>
{% else %}
<a href="/rowers/virtualevent/{{ race.id }}/registerindoor"><h3>Register</h3></a>
{% endif %}
</p>
{% else %}
<p>
@@ -108,9 +144,9 @@
{% if button == 'registerbutton' %}
<p>
{% if race.sessiontype == 'race' %}
<a href="/rowers/virtualevent/{{ race.id }}/register">Register</a>
<a href="/rowers/virtualevent/{{ race.id }}/register"><h3>Register</h3></a>
{% else %}
<a href="/rowers/virtualevent/{{ race.id }}/registerindoor">Register</a>
<a href="/rowers/virtualevent/{{ race.id }}/registerindoor"><h3>Register</h3></a>
{% endif %}
</p>
{% endif %}
+3 -4
View File
@@ -11,11 +11,10 @@
{{ workout.date }} - {{ workout.distance }}m - {{ workout.duration |durationprint:"%H:%M:%S.%f" }}{% endblock %}
{% block og_description %}{{ workout.name }}
{{ workout.date }} - {{ workout.distance }}m - {{ workout.duration |durationprint:"%H:%M:%S.%f" }}{% endblock %}
{% if graphs1 %}
{% endif %}
{% for graph in graphs1 %}
{% for graph in graphs %}
{% block og_image %}
{% if graphs1 %}
{% if graphs %}
{% for graph in graphs %}
<meta property="og:image" content="http://rowsandall.com/{{ graph.filename |spacetohtml }}" />
<meta property="og:image:secure_url" content="https://rowsandall.com/{{ graph.filename |spacetohtml }}" />
+14 -2
View File
@@ -52,6 +52,7 @@ class DjangoTestCase(TestCase, MockTestCase):
MockTestCase.tearDown(self)
delete_strokedata(1)
# to be done add polar mocks (for email processing)
def mocked_requests(*args, **kwargs):
with open('rowers/testdata/c2jsonworkoutdata.txt','r') as infile:
c2workoutdata = json.load(infile)
@@ -59,6 +60,10 @@ def mocked_requests(*args, **kwargs):
with open('rowers/testdata/c2jsonstrokedata.txt','r') as infile:
c2strokedata = json.load(infile)
polar_json = {
'available-user-data': []
}
c2workoutlist = json.load(open('rowers/testdata/c2workoutlist.txt'))
c2uploadjson = {
@@ -151,6 +156,7 @@ def mocked_requests(*args, **kwargs):
if not args:
return MockSession()
polartester = re.compile('.*?polaraccesslink\.com')
c2tester = re.compile('.*?log\.concept2\.com')
stravatester = re.compile('.*?strava\.com')
sttester = re.compile('.*?sporttracks\.mobi')
@@ -213,6 +219,10 @@ def mocked_requests(*args, **kwargs):
tpuploadregex = '.*?trainingpeaks\.com\/v1\/file'
tpuploadtester = re.compile(tpuploadregex)
if polartester.match(args[0]):
json_data = polar_json
return MockResponse(json_data,200)
if tptester.match(args[0]):
if 'token' in args[0]:
json_data = {
@@ -959,6 +969,7 @@ class NewUserRegistrationTest(TestCase):
'tos':True,
'weightcategory':'hwt',
'sex':'male',
'next':'/rowers/list-workouts',
'birthdate':datetime.datetime(year=1970,month=4,day=2)
}
@@ -968,7 +979,7 @@ class NewUserRegistrationTest(TestCase):
response = self.c.post('/rowers/register', form_data, follow=True)
self.assertRedirects(response,
expected_url='/rowers/register/thankyou/',
expected_url='/rowers/me/gdpr-optin/?next=/rowers/list-workouts/',
status_code=302,target_status_code=200)
from django_mailbox.models import Mailbox,MessageAttachment,Message
@@ -1066,7 +1077,8 @@ boattype: 4x
if not os.path.isdir(path):
os.remove(path)
def test_emailprocessing(self):
@patch('requests.get', side_effect=mocked_requests)
def test_emailprocessing(self, mock_get):
out = StringIO()
call_command('processemail', stdout=out,testing=True)
self.assertIn('Successfully processed email attachments',out.getvalue())
+17 -3
View File
@@ -1028,6 +1028,9 @@ def add_defaultfavorites(r):
# User registration
def rower_register_view(request):
nextpage = request.GET.get('next','/rowers/list-workouts/')
if request.method == 'POST':
#form = RegistrationFormUniqueEmail(request.POST)
form = RegistrationFormSex(request.POST)
@@ -1040,6 +1043,7 @@ def rower_register_view(request):
sex = form.cleaned_data['sex']
birthdate = form.cleaned_data['birthdate']
weightcategory = form.cleaned_data['weightcategory']
nextpage = request.POST['next']
theuser = User.objects.create_user(username,password=password)
theuser.first_name = first_name
theuser.last_name = last_name
@@ -1088,17 +1092,23 @@ def rower_register_view(request):
'Rowsandall Server <info@rowsandall.com>',
['roosendaalsander@gmail.com'])
return HttpResponseRedirect('/rowers/register/thankyou/')
theuser = authenticate(username=username,password=password)
login(request,theuser)
return HttpResponseRedirect(nextpage)
# '/rowers/register/thankyou/')
else:
return render(request,
"registration_form.html",
{'form':form})
{'form':form,
'next':nextpage,})
else:
form = RegistrationFormSex()
return render(request,
"registration_form.html",
{'form':form,})
{'form':form,
'next':nextpage,})
# Shows analysis page
@login_required()
@@ -6963,6 +6973,9 @@ def workouts_view(request,message='',successmessage='',
if rankingonly:
workouts = workouts.exclude(rankingpiece=False)
workoutsnohr = workouts.exclude(averagehr__isnull=False)
for w in workoutsnohr:
res = dataprep.workout_trimp(w)
query = request.GET.get('q')
if query:
@@ -7012,6 +7025,7 @@ def workouts_view(request,message='',successmessage='',
'name':'Workouts'
},
]
return render(request, 'list_workouts.html',
{'workouts': workouts,
'active': 'nav-workouts',
+1 -1
View File
@@ -157,7 +157,7 @@
{% elif user.rower.rowerplan == 'plan' %}
<i class="fas fa-user-chart "></i>
{% else %}
<a href="/rowers/me/edit" title="Profile">
<a href="/rowers/me/preferences" title="Profile">
<i class="fas fa-user"></i>
{% endif %}
</a>
+1 -1
View File
@@ -173,7 +173,7 @@
{% elif user.rower.rowerplan == 'plan' %}
<i class="fas fa-user-tie "></i>
{% else %}
<a href="/rowers/me/edit" title="Profile">
<a href="/rowers/me/preferences" title="Profile">
<i class="fas fa-user"></i>
{% endif %}
</a>