Merge branch 'feature/opaqueid' into develop
This commit is contained in:
+4
-1
@@ -192,7 +192,10 @@ def summaryfromsplitdata(splitdata,data,filename,sep='|'):
|
||||
|
||||
totaldist = data['distance']
|
||||
totaltime = data['time']/10.
|
||||
spm = data['stroke_rate']
|
||||
try:
|
||||
spm = data['stroke_rate']
|
||||
except KeyError:
|
||||
spm = 0
|
||||
try:
|
||||
resttime = data['rest_time']/10.
|
||||
except KeyError:
|
||||
|
||||
+4
-4
@@ -80,7 +80,7 @@ from rowsandall_app.settings import SITE_URL
|
||||
from rowers.mytypes import otwtypes
|
||||
|
||||
from rowers.database import *
|
||||
|
||||
from rowers.opaque import encoder
|
||||
|
||||
|
||||
# mapping the DB column names to the CSV file column names
|
||||
@@ -1416,7 +1416,7 @@ def split_workout(r, parent, splitsecond, splitmode):
|
||||
setprivate=setprivate,
|
||||
forceunit='N')
|
||||
messages.append(message)
|
||||
ids.append(id)
|
||||
ids.append(encoder.encode_hex(id))
|
||||
if 'keep second' in splitmode:
|
||||
data2['cumdist'] = data2['cumdist'] - data2.iloc[
|
||||
0,
|
||||
@@ -1443,7 +1443,7 @@ def split_workout(r, parent, splitsecond, splitmode):
|
||||
setprivate=setprivate,
|
||||
dt=dt, forceunit='N')
|
||||
messages.append(message)
|
||||
ids.append(id)
|
||||
ids.append(encoder.encode_hex(id))
|
||||
|
||||
if not 'keep original' in splitmode:
|
||||
if 'keep second' in splitmode or 'keep first' in splitmode:
|
||||
@@ -1451,7 +1451,7 @@ def split_workout(r, parent, splitsecond, splitmode):
|
||||
messages.append('Deleted Workout: ' + parent.name)
|
||||
else:
|
||||
messages.append('That would delete your workout')
|
||||
ids.append(parent.id)
|
||||
ids.append(encoder.encode_hex(parent.id))
|
||||
elif 'originalprivate' in splitmode:
|
||||
parent.privacy = 'hidden'
|
||||
parent.save()
|
||||
|
||||
@@ -2230,7 +2230,7 @@ def interactive_chart(id=0,promember=0,intervaldata = {}):
|
||||
intervaldf['itime'] = intervaldf['itime']*1.e3
|
||||
intervaldf['time'] = intervaldf['itime'].cumsum()
|
||||
intervaldf['time'] = intervaldf['time'].shift(1)
|
||||
intervaldf.ix[0,'time'] = 0
|
||||
intervaldf.loc[:,'time'].iloc[0] = 0
|
||||
intervaldf['time_r'] = intervaldf['time'] +intervaldf['itime']
|
||||
intervaldf['value'] = 100
|
||||
mask = intervaldf['itype'] == 3
|
||||
|
||||
@@ -24,9 +24,12 @@ from rowers.mailprocessing import make_new_workout_from_email, send_confirm
|
||||
import rowers.polarstuff as polarstuff
|
||||
import rowers.c2stuff as c2stuff
|
||||
import rowers.stravastuff as stravastuff
|
||||
from rowers.opaque import encoder
|
||||
|
||||
from rowers.models import User,VirtualRace,Workout
|
||||
from rowers.plannedsessions import email_submit_race
|
||||
|
||||
|
||||
workoutmailbox = Mailbox.objects.get(name='workouts')
|
||||
failedmailbox = Mailbox.objects.get(name='Failed')
|
||||
|
||||
@@ -105,7 +108,7 @@ def processattachment(rower, fileobj, title, uploadoptions,testing=False):
|
||||
link = settings.SITE_URL+reverse(
|
||||
therower.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':workoutid[0],
|
||||
'id':encoder.encode_hex(workoutid[0]),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
import struct
|
||||
import base64
|
||||
|
||||
from rowsandall_app.settings import (
|
||||
C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET,
|
||||
STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET,
|
||||
POLAR_CLIENT_ID, POLAR_REDIRECT_URI, POLAR_CLIENT_SECRET,
|
||||
SPORTTRACKS_CLIENT_ID, SPORTTRACKS_REDIRECT_URI,
|
||||
SPORTTRACKS_CLIENT_SECRET,
|
||||
UNDERARMOUR_CLIENT_ID, UNDERARMOUR_REDIRECT_URI,
|
||||
UNDERARMOUR_CLIENT_SECRET,UNDERARMOUR_CLIENT_KEY,
|
||||
RUNKEEPER_CLIENT_ID,RUNKEEPER_REDIRECT_URI,RUNKEEPER_CLIENT_SECRET,
|
||||
TP_CLIENT_ID,TP_REDIRECT_URI,TP_CLIENT_KEY,TP_CLIENT_SECRET,
|
||||
BRAINTREE_MERCHANT_ID,BRAINTREE_PUBLIC_KEY,BRAINTREE_PRIVATE_KEY,
|
||||
PAYMENT_PROCESSING_ON,OPAQUE_SECRET_KEY
|
||||
)
|
||||
|
||||
class OpaqueEncoder:
|
||||
"""
|
||||
Opaque ID encoder.
|
||||
Translates between 32-bit integers (such as resource IDs) and obfuscated
|
||||
scrambled values, as a one-to-one mapping. Supports hex and base64 url-safe
|
||||
string representations. Expects a secret integer key in the constructor.
|
||||
(c) 2011 Marek Z. @marekweb
|
||||
"""
|
||||
|
||||
def __init__(self, key):
|
||||
self.key = key
|
||||
self.extra_chars = b'.-';
|
||||
|
||||
def transform(self, i):
|
||||
"""Produce an integer hash of a 16-bit integer, returning a transformed 16-bit integer."""
|
||||
i = (self.key ^ i) * 0x9e3b
|
||||
return i >> (i & 0xf) & 0xffff
|
||||
|
||||
def transcode(self, i):
|
||||
"""Reversibly transcode a 32-bit integer to a scrambled form, returning a new 32-bit integer."""
|
||||
r = i & 0xffff
|
||||
l = i >> 16 & 0xffff ^ self.transform(r)
|
||||
return ((r ^ self.transform(l)) << 16) + l
|
||||
|
||||
def encode_hex(self, i):
|
||||
"""Transcode an integer and return it as an 8-character hex string."""
|
||||
return "%08x" % self.transcode(i)
|
||||
|
||||
def encode_base64(self, i):
|
||||
"""Transcode an integer and return it as a 6-character base64 string."""
|
||||
return base64.b64encode(struct.pack('!L', self.transcode(i)), self.extra_chars)[:6]
|
||||
|
||||
def decode_hex(self, s):
|
||||
"""Decode an 8-character hex string, returning the original integer."""
|
||||
return self.transcode(int(s, 16))
|
||||
|
||||
def decode_base64(self, s):
|
||||
"""Decode a 6-character base64 string, returning the original integer."""
|
||||
return self.transcode(struct.unpack('!L', base64.b64decode(s + '==', self.extra_chars))[0])
|
||||
|
||||
|
||||
encoder = OpaqueEncoder(OPAQUE_SECRET_KEY)
|
||||
@@ -23,17 +23,17 @@
|
||||
<div class="grid_6 alpha">
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/edit">Edit Workout</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/workflow">Workflow View</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2 omega">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/export">Export</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -52,7 +52,7 @@
|
||||
</tr>
|
||||
<th>Public link to this workout</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}">https://rowsandall.com/rowers/workout/{{ workout.id|encode }}</a>
|
||||
<td>
|
||||
</table>
|
||||
</div>
|
||||
@@ -60,7 +60,7 @@
|
||||
<div class="grid_6 alpha">
|
||||
<div class="grid_2 alpha">
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/compare/{{ workout.id }}">Compare Workouts</a>
|
||||
<a class="button blue small" href="/rowers/workout/compare/{{ workout.id|encode }}">Compare Workouts</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans/">Compare Workouts*</a>
|
||||
{% endif %}
|
||||
@@ -69,7 +69,7 @@
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/flexchart">
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/flexchart">
|
||||
Flexible Interactive Plot
|
||||
</a>
|
||||
<p>
|
||||
@@ -80,7 +80,7 @@
|
||||
<div class="grid_2 omega tooltip">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/editintervals">Edit Intervals</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/editintervals">Edit Intervals</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Edit Intervals*</a>
|
||||
{% endif %}
|
||||
@@ -96,7 +96,7 @@
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/adddistanceplot2">Dist Metrics Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/adddistanceplot2">Dist Metrics Plot</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Dist Metrics Plot*</a>
|
||||
{% endif %}
|
||||
@@ -108,7 +108,7 @@
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addtimeplot2">Time Metrics Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/addtimeplot2">Time Metrics Plot</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Time Metrics Plot*</a>
|
||||
{% endif %}
|
||||
@@ -120,7 +120,7 @@
|
||||
<div class="grid_2 omega">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/histo">Power Histogram</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/histo">Power Histogram</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Power Histogram*</a>
|
||||
{% endif %}
|
||||
@@ -147,7 +147,7 @@
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/fusion/{{ workout.id }}/">Sensor Fusion</a>
|
||||
<a class="button blue small" href="/rowers/workout/fusion/{{ workout.id|encode }}/">Sensor Fusion</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Sensor Fusion*</a>
|
||||
{% endif %}
|
||||
@@ -159,7 +159,7 @@
|
||||
<div class="grid_2 omega">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/split">Split Workout</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/split">Split Workout</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Split Workout*</a>
|
||||
{% endif %}
|
||||
@@ -172,7 +172,7 @@
|
||||
<div class="grid_6 alpha">
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/interactiveplot">Big Interactive Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/interactiveplot">Big Interactive Plot</a>
|
||||
</p>
|
||||
<p>
|
||||
See (and save) the big interactive plot
|
||||
@@ -180,7 +180,7 @@
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/instroke">In-Stroke Metrics</a></p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/instroke">In-Stroke Metrics</a></p>
|
||||
<p>
|
||||
If your workout has in-stroke metrics (like a stroke power curve or boat acceleration curve), you will find it here.
|
||||
</p>
|
||||
|
||||
@@ -21,17 +21,17 @@
|
||||
{% endif %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/edit">Edit Workout</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/workflow">Workflow View</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2 omega">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/export">Export</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
@@ -49,7 +49,7 @@
|
||||
</tr>
|
||||
<th>Public link to this workout</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}">https://rowsandall.com/rowers/workout/{{ workout.id|encode }}</a>
|
||||
<td>
|
||||
</table>
|
||||
</div>
|
||||
@@ -58,7 +58,7 @@
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/compare/{{ workout.id }}">Compare Workouts</a>
|
||||
<a class="button blue small" href="/rowers/workout/compare/{{ workout.id|encode }}">Compare Workouts</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Compare Workouts*</a>
|
||||
{% endif %}
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/flexchart">Flexible Interactive Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/flexchart">Flexible Interactive Plot</a>
|
||||
</p>
|
||||
<p>
|
||||
Flexible Interactive plot. Pick your own X and Y axis parameters.
|
||||
@@ -80,7 +80,7 @@
|
||||
<div class="grid_2 omega tooltip">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/editintervals">Edit Intervals</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/editintervals">Edit Intervals</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Edit Intervals*</a>
|
||||
{% endif %}
|
||||
@@ -97,7 +97,7 @@
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/crewnerdsummary">CrewNerd Summary</a>
|
||||
<a class="button blue small"href="/rowers/workout/{{ workout.id|encode }}/crewnerdsummary">CrewNerd Summary</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">CrewNerd Summary*</a>
|
||||
{% endif %}
|
||||
@@ -111,7 +111,7 @@
|
||||
<div class="grid_2 tooltip">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/forcecurve">Stroke Profile (Empower)</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/forcecurve">Stroke Profile (Empower)</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Stroke Profile (Empower)*</a>
|
||||
{% endif %}
|
||||
@@ -124,7 +124,7 @@
|
||||
<div class="grid_2 omega tooltip">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addotwpowerplot">OTW Power Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/addotwpowerplot">OTW Power Plot</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">OTW Power Plot*</a>
|
||||
{% endif %}
|
||||
@@ -144,7 +144,7 @@
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/geeky">Geeky Stuff</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/geeky">Geeky Stuff</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Geeky Stuff*</a>
|
||||
{% endif %}
|
||||
@@ -159,7 +159,7 @@
|
||||
<div class="grid_2 tooltip">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/smoothenpace">Smooth out Pace Data</a>
|
||||
<a class="button blue small"href="/rowers/workout/{{ workout.id|encode }}/smoothenpace">Smooth out Pace Data</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Smooth out Pace Data*</a>
|
||||
{% endif %}
|
||||
@@ -176,7 +176,7 @@
|
||||
<div class="grid_2 omega">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/undosmoothenpace">Raw Data</a>
|
||||
<a class="button blue small"href="/rowers/workout/{{ workout.id|encode }}/undosmoothenpace">Raw Data</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Reset Smoothing*</a>
|
||||
{% endif %}
|
||||
@@ -203,7 +203,7 @@
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/fusion/{{ workout.id }}/">Sensor Fusion</a>
|
||||
<a class="button blue small" href="/rowers/workout/fusion/{{ workout.id|encode }}/">Sensor Fusion</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Sensor Fusion*</a>
|
||||
{% endif %}
|
||||
@@ -215,7 +215,7 @@
|
||||
<div class="grid_2 omega">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/split">Split Workout</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/split">Split Workout</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/paidplans">Split Workout*</a>
|
||||
{% endif %}
|
||||
@@ -229,7 +229,7 @@
|
||||
<div class="grid_6 alpha">
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/interactiveplot">Big Interactive Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/interactiveplot">Big Interactive Plot</a>
|
||||
</p>
|
||||
<p>
|
||||
See (and save) the big interactive plot
|
||||
@@ -237,7 +237,7 @@
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/instroke">In-Stroke Metrics</a></p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/instroke">In-Stroke Metrics</a></p>
|
||||
<p>
|
||||
If your workout has in-stroke metrics (like a stroke power curve or boat acceleration curve), you will find it here.
|
||||
</p>
|
||||
|
||||
@@ -42,12 +42,12 @@
|
||||
{% if user.is_authenticated and mayedit %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/edit">Edit Workout</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2 suffix_2 omega">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/advanced">Advanced Edit</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/advanced">Advanced Edit</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
<tr>
|
||||
<td> {{ cworkout.date }} </td>
|
||||
<td> {{ cworkout.starttime }} </td>
|
||||
<td> <a href="/rowers/workout/{{ workout.id }}/edit">{{ cworkout.name }}</a> </td>
|
||||
<td> <a href="/rowers/workout/{{ workout.id|encode }}/edit">{{ cworkout.name }}</a> </td>
|
||||
<td> {{ cworkout.workouttype }} </td>
|
||||
<td> {{ cworkout.distance }}m</td>
|
||||
<td> {{ cworkout.duration |durationprint:"%H:%M:%S.%f" }} </td>
|
||||
@@ -89,7 +89,7 @@
|
||||
{% if id == cworkout.id %}
|
||||
<td> </td>
|
||||
{% else %}
|
||||
<td> <a class="button blue small" href="/rowers/workout/compare/{{ id }}/{{ cworkout.id }}/time/hr">Compare</a> </td>
|
||||
<td> <a class="button blue small" href="/rowers/workout/compare/{{ id }}/{{ cworkout.id|encode }}/time/hr">Compare</a> </td>
|
||||
{% endif %}
|
||||
|
||||
</tr>
|
||||
|
||||
@@ -26,11 +26,11 @@
|
||||
<tr>
|
||||
<td> {{ workout.date }} </td>
|
||||
<td> {{ workout.starttime }} </td>
|
||||
<td><a href="/rowers/workout/{{workout.id}}/edit"> {{ workout.name }}</a> </td>
|
||||
<td><a href="/rowers/workout/{{workout.id|encode}}/edit"> {{ workout.name }}</a> </td>
|
||||
<td> {{ workout.workouttype }} </td>
|
||||
<td> <a href="/rowers/workout/{{ workout.id }}/deleteconfirm">D</td>
|
||||
<td> <a href="/rowers/workout/{{ workout.id|encode }}/deleteconfirm">D</td>
|
||||
{% if not workout.uploadedtoc2 %}
|
||||
<td> <a href="/rowers/workout/{{ workout.id }}/c2upload">C2</td>
|
||||
<td> <a href="/rowers/workout/{{ workout.id|encode }}/c2upload">C2</td>
|
||||
{% else %}
|
||||
<td> </td>
|
||||
{% endif %}
|
||||
|
||||
@@ -12,17 +12,17 @@
|
||||
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/edit">Edit Workout</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/workflow">Workflow View</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/workflow">Workflow View</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2 omega">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/advanced">Advanced Edit</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/advanced">Advanced Edit</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
@@ -42,7 +42,7 @@
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="grid_1 alpha">
|
||||
<a href="/rowers/workout/{{ workout.id }}/c2uploadw"><img src="/static/img/c2square.jpg" alt="Concept2 icon" width="60" height="60"></a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/c2uploadw"><img src="/static/img/c2square.jpg" alt="Concept2 icon" width="60" height="60"></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
@@ -60,7 +60,7 @@
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="grid_1">
|
||||
<a href="/rowers/workout/{{ workout.id }}/stravauploadw"><img src="/static/img/stravasquare.png" alt="Strava icon" width="60" height="60"></a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/stravauploadw"><img src="/static/img/stravasquare.png" alt="Strava icon" width="60" height="60"></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
@@ -77,7 +77,7 @@
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="grid_1">
|
||||
<a href="/rowers/workout/{{ workout.id }}/sporttracksuploadw">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/sporttracksuploadw">
|
||||
<img src="/static/img/sporttrackssquare.png" alt="SportTracks icon" width="60" height="60"></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -88,12 +88,12 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="grid_1">
|
||||
<a href="/rowers/workout/{{ workout.id }}/emailtcx">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/emailtcx">
|
||||
<img src="/static/img/export.png" alt="TCX Export" width="60" height="60"></a>
|
||||
</div>
|
||||
|
||||
<div class="grid_1">
|
||||
<a href="/rowers/workout/{{ workout.id }}/emailcsv">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/emailcsv">
|
||||
<img src="/static/img/CSVsquare.png" alt="CSV Export" width="60" height="60"></a>
|
||||
</div>
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="grid_1 alpha">
|
||||
<a href="/rowers/workout/{{ workout.id }}/runkeeperuploadw"><img src="/static/img/rksquare.png" alt="Runkeeper icon" width="60" height="60"></a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/runkeeperuploadw"><img src="/static/img/rksquare.png" alt="Runkeeper icon" width="60" height="60"></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
@@ -124,7 +124,7 @@
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="grid_1">
|
||||
<a href="/rowers/workout/{{ workout.id }}/underarmouruploadw"><img src="/static/img/uasquare.png" alt="Underarmour icon" width="60" height="60"></a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/underarmouruploadw"><img src="/static/img/uasquare.png" alt="Underarmour icon" width="60" height="60"></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
@@ -142,7 +142,7 @@
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="grid_1">
|
||||
<a href="/rowers/workout/{{ workout.id }}/tpuploadw"><img src="/static/img/tpicon.png" alt="Tp icon" width="60" height="60"></a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/tpuploadw"><img src="/static/img/tpicon.png" alt="Tp icon" width="60" height="60"></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
@@ -153,7 +153,7 @@
|
||||
{% endif %}
|
||||
|
||||
<div class="grid_1 omega">
|
||||
<a href="/rowers/workout/{{ workout.id }}/emailgpx">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/emailgpx">
|
||||
<img src="/static/img/gpx.jpg" alt="GPX Export" width="60" height="60"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
<tr>
|
||||
<td> {{ cworkout.date }} </td>
|
||||
<td> {{ cworkout.starttime }} </td>
|
||||
<td> <a href="/rowers/workout/{{ workout.id }}/edit">{{ cworkout.name }}</a> </td>
|
||||
<td> <a href="/rowers/workout/{{ workout.id|encode }}/edit">{{ cworkout.name }}</a> </td>
|
||||
<td> {{ cworkout.workouttype }} </td>
|
||||
<td> {{ cworkout.distance }}m</td>
|
||||
<td> {{ cworkout.duration |durationprint:"%H:%M:%S.%f" }} </td>
|
||||
@@ -124,7 +124,7 @@
|
||||
{% if id == cworkout.id %}
|
||||
<td> </td>
|
||||
{% else %}
|
||||
<td> <a class="button blue small" href="/rowers/workout/fusion/{{ id }}/{{ cworkout.id }}">Fusion</a> </td>
|
||||
<td> <a class="button blue small" href="/rowers/workout/fusion/{{ id }}/{{ cworkout.id|encode }}">Fusion</a> </td>
|
||||
{% endif %}
|
||||
|
||||
</tr>
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
$.ajax({
|
||||
data: data,
|
||||
type: $(this).attr('method'),
|
||||
url: '/rowers/workout/{{ workout.id }}/image/',
|
||||
url: '/rowers/workout/{{ workout.id|encode }}/image/',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
error: function(result) {
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
</tr>
|
||||
<th>Public link to this workout</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/">https://rowsandall.com/rowers/workout/{{ workout.id|encode }}</a>
|
||||
<td>
|
||||
|
||||
</table>
|
||||
@@ -42,7 +42,7 @@
|
||||
{% if instrokemetrics %}
|
||||
{% for metric in instrokemetrics %}
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/instroke/{{ metric }}/">{{ metric }}</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/instroke/{{ metric }}/">{{ metric }}</a>
|
||||
</p>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
|
||||
@@ -180,11 +180,11 @@
|
||||
<tr>
|
||||
{% endif %}
|
||||
<td id="mypointer"
|
||||
class="rankingtoggle" workoutid="{{ workout.id }}">
|
||||
class="rankingtoggle" workoutid="{{ workout.id|encode }}">
|
||||
{% if workout.rankingpiece %}
|
||||
<span id="star{{ workout.id }}" class="yellow">★</span>
|
||||
<span id="star{{ workout.id|encode }}" class="yellow">★</span>
|
||||
{% else %}
|
||||
<span id="star{{ workout.id }}" class="notyellow">☆</span>
|
||||
<span id="star{{ workout.id|encode }}" class="notyellow">☆</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td> {{ workout.date|date:"Y-m-d" }} </td>
|
||||
@@ -192,20 +192,20 @@
|
||||
{% if workout.user.user == user or user == team.manager %}
|
||||
{% if workout.name != '' %}
|
||||
<td>
|
||||
<a href={% url rower.defaultlandingpage id=workout.id %}>
|
||||
<a href={% url rower.defaultlandingpage id=workout.id|encode %}>
|
||||
{{ workout.name }}
|
||||
</a>
|
||||
</td>
|
||||
{% else %}
|
||||
<td>
|
||||
<a href={% url rower.defaultlandingpage id=workout.id %}>No Name
|
||||
<a href={% url rower.defaultlandingpage id=workout.id|encode %}>No Name
|
||||
</a></td>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if workout.name != '' %}
|
||||
<td><a href="/rowers/workout/{{ workout.id }}/">{{ workout.name }}</a></td>
|
||||
<td><a href="/rowers/workout/{{ workout.id|encode }}/">{{ workout.name }}</a></td>
|
||||
{% else %}
|
||||
<td><a href="/rowers/workout/{{ workout.id }}/">No Name</a> </td>
|
||||
<td><a href="/rowers/workout/{{ workout.id|encode }}/">No Name</a> </td>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<td> {{ workout.workouttype }} </td>
|
||||
@@ -223,27 +223,27 @@
|
||||
{% endif %}
|
||||
<td>
|
||||
<a class="small"
|
||||
href="/rowers/workout/{{ workout.id }}/edit/"
|
||||
href="/rowers/workout/{{ workout.id|encode }}/edit/"
|
||||
title="Edit">
|
||||
<i class="fas fa-pencil-alt fa-fw"></i>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a class="small"
|
||||
href="/rowers/workout/{{ workout.id }}/flexchart/"
|
||||
href="/rowers/workout/{{ workout.id|encode }}/flexchart/"
|
||||
title="Flex Chart">
|
||||
<i class="fas fa-chart-line fa-fw"></i>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a class="small"
|
||||
href="/rowers/workout/{{ workout.id }}/stats/"
|
||||
href="/rowers/workout/{{ workout.id|encode }}/stats/"
|
||||
title="Stats">
|
||||
<i class="fal fa-table fa-fw"></i>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a class="small" href="/rowers/workout/{{ workout.id }}/delete/"
|
||||
<a class="small" href="/rowers/workout/{{ workout.id|encode }}/delete/"
|
||||
title="Delete">
|
||||
<i class="fas fa-trash-alt fa-fw"></i>
|
||||
</a>
|
||||
|
||||
@@ -7,53 +7,52 @@
|
||||
<ul>
|
||||
<li id="workout-dashboard">
|
||||
{% if user.is_authenticated and workout|may_edit:request %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/workflow/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/workflow/">
|
||||
<i class="fas fa-tachometer-alt fa-fw"></i> View
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/workflow/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/workflow/">
|
||||
<i class="fas fa-tachometer-alt fa-fw"></i> View
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% if user.is_authenticated and workout|may_edit:request %}
|
||||
<li id="workout-edit">
|
||||
<a href="/rowers/workout/{{ workout.id }}/edit/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/edit/">
|
||||
<i class="fas fa-pencil-alt fa-fw"></i> Edit
|
||||
</a>
|
||||
</li>
|
||||
<li id="workout-intervals">
|
||||
<a href="/rowers/workout/{{ workout.id }}/editintervals/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/editintervals/">
|
||||
<i class="fas fa-pause fa-fw"></i> Intervals
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user.is_authenticated %}
|
||||
<li id="workout-comments">
|
||||
<a href="/rowers/workout/{{ workout.id }}/comment/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/comment/">
|
||||
<i class="fas fa-comments fa-fw"></i> Comments
|
||||
({{ workout|aantalcomments }})
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li id="workout-stats">
|
||||
<a href="/rowers/workout/{{ workout.id }}/stats/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/stats/">
|
||||
<i class="fal fa-table fa-fw"></i> Statistics
|
||||
</a>
|
||||
</li>
|
||||
<li id="compare">
|
||||
<a href="/rowers/multi-compare/workout/{{ workout.id }}/">
|
||||
<a href="/rowers/multi-compare/workout/{{ workout.id|encode }}/">
|
||||
<i class="fas fa-balance-scale fa-fw"></i> Compare
|
||||
</a>
|
||||
</li>
|
||||
{% if user.is_authenticated and workout|may_edit:request %}
|
||||
<li id="chart-image">
|
||||
<a href="/rowers/workout/{{ workout.id }}/image/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/image/">
|
||||
<i class="fas fa-file-image fa-fw"></i> Upload Image
|
||||
</a>
|
||||
</li>
|
||||
<li id="workout-delete">
|
||||
<a href="/rowers/workout/{{ workout.id }}/delete/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/delete/">
|
||||
<i class="fas fa-trash-alt fa-fw"></i> Delete
|
||||
</a>
|
||||
</li>
|
||||
@@ -65,23 +64,23 @@
|
||||
<label for="group-flexchart">Interactive Charts</label>
|
||||
<ul>
|
||||
<li id="chart-flexchart">
|
||||
<a href="/rowers/workout/{{ workout.id }}/flexchart/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/flexchart/">
|
||||
<i class="fas fa-chart-line fa-fw"></i> Flex Chart
|
||||
</a>
|
||||
</li>
|
||||
{% if workout|water %}
|
||||
<li id="chart-map">
|
||||
<a href="/rowers/workout/{{ workout.id }}/map/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/map/">
|
||||
<i class="fas fa-map-marked-alt fa-fw"></i> Map
|
||||
</a>
|
||||
</li>
|
||||
<li id="chart-empower">
|
||||
<a href="/rowers/workout/{{ workout.id }}/forcecurve/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/forcecurve/">
|
||||
<i class="fas fa-dumbbell fa-fw"></i> Force Curve
|
||||
</a>
|
||||
</li>
|
||||
<li id="chart-otwpower">
|
||||
<a href="/rowers/workout/{{ workout.id }}/interactiveotwplot/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/interactiveotwplot/">
|
||||
<i class="fal fa-calculator-alt fa-fw"></i> Corrected Pace Plot
|
||||
</a>
|
||||
</li>
|
||||
@@ -94,28 +93,28 @@
|
||||
<label for="group-chart">Static Charts</label>
|
||||
<ul>
|
||||
<li id="chart-time">
|
||||
<a href="/rowers/workout/{{ workout.id }}/addstatic/1/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/addstatic/1/">
|
||||
<i class="fas fa-stopwatch fa-fw"></i> Time
|
||||
</a>
|
||||
</li>
|
||||
<li id="chart-distance">
|
||||
<a href="/rowers/workout/{{ workout.id }}/addstatic/2/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/addstatic/2/">
|
||||
<i class="fas fa-ruler fa-fw"></i> Distance
|
||||
</a>
|
||||
</li>
|
||||
<li id="chart-powerpie">
|
||||
<a href="/rowers/workout/{{ workout.id }}/addstatic/13/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/addstatic/13/">
|
||||
<i class="far fa-chart-pie fa-fw"></i> Power (Pie)
|
||||
</a>
|
||||
</li>
|
||||
<li id="chart-hrpie">
|
||||
<a href="/rowers/workout/{{ workout.id }}/addstatic/3/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/addstatic/3/">
|
||||
<i class="fas fa-heartbeat fa-fw"></i> Heart Rate (Pie)
|
||||
</a>
|
||||
</li>
|
||||
{% if workout|water %}
|
||||
<li id="chart-otwpower">
|
||||
<a href="/rowers/workout/{{ workout.id }}/addstatic/9/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/addstatic/9/">
|
||||
<i class="fas fa-chart-area fa-fw"></i> OTW Power
|
||||
</a>
|
||||
</li>
|
||||
@@ -136,7 +135,7 @@
|
||||
Connect to Concept2
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/c2uploadw/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/c2uploadw/">
|
||||
Concept2
|
||||
</a>
|
||||
{% endif %}
|
||||
@@ -151,7 +150,7 @@
|
||||
Connect to Strava
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/stravauploadw/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/stravauploadw/">
|
||||
Strava
|
||||
</a>
|
||||
{% endif %}
|
||||
@@ -166,7 +165,7 @@
|
||||
Connect to SportTracks
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/sporttracksuploadw/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/sporttracksuploadw/">
|
||||
SportTracks
|
||||
</a>
|
||||
{% endif %}
|
||||
@@ -181,7 +180,7 @@
|
||||
Connect to Runkeeper
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/runkeeperuploadw/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/runkeeperuploadw/">
|
||||
Runkeeper
|
||||
</a>
|
||||
{% endif %}
|
||||
@@ -196,7 +195,7 @@
|
||||
Connect to MapMyFitness
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/underarmouruploadw/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/underarmouruploadw/">
|
||||
MapMyFitness
|
||||
</a>
|
||||
{% endif %}
|
||||
@@ -211,23 +210,23 @@
|
||||
Connect to TrainingPeaks
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/tpuploadw/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/tpuploadw/">
|
||||
TrainingPeaks
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li id="export-csv">
|
||||
<a href="/rowers/workout/{{ workout.id }}/emailcsv/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/emailcsv/">
|
||||
CSV
|
||||
</a>
|
||||
</li>
|
||||
<li id="export-gpx">
|
||||
<a href="/rowers/workout/{{ workout.id }}/emailgpx/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/emailgpx/">
|
||||
GPX
|
||||
</a>
|
||||
</li>
|
||||
<li id="export-tcx">
|
||||
<a href="/rowers/workout/{{ workout.id }}/emailtcx/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/emailtcx/">
|
||||
TCX
|
||||
</a>
|
||||
</li>
|
||||
@@ -238,27 +237,27 @@
|
||||
<label for="group-data">Data</label>
|
||||
<ul>
|
||||
<li id="data-smoothen">
|
||||
<a href="/rowers/workout/{{ workout.id }}/smoothenpace/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/smoothenpace/">
|
||||
<i class="fas fa-magic fa-fw"></i> Smoothen
|
||||
</a>
|
||||
</li>
|
||||
<li id="data-raw">
|
||||
<a href="/rowers/workout/{{ workout.id }}/undosmoothenpace/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/undosmoothenpace/">
|
||||
<i class="fas fa-undo fa-fw"></i> Restore Raw
|
||||
</a>
|
||||
</li>
|
||||
<li id="data-fusion">
|
||||
<a href="/rowers/workout/fusion/{{ workout.id }}/">
|
||||
<a href="/rowers/workout/fusion/{{ workout.id|encode }}/">
|
||||
<i class="fas fa-blender fa-fw"></i> Sensor Fusion
|
||||
</a>
|
||||
</li>
|
||||
<li id="data-split">
|
||||
<a href="/rowers/workout/{{ workout.id }}/split/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/split/">
|
||||
<i class="fas fa-cut fa-fw"></i> Split Workout
|
||||
</a>
|
||||
</li>
|
||||
<li id="data-view">
|
||||
<a href="/rowers/workout/{{ workout.id }}/data/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/data/">
|
||||
<i class="fal fa-table fa-fw"></i> Explore Raw Data
|
||||
</a>
|
||||
</ul>
|
||||
@@ -269,28 +268,28 @@
|
||||
<ul>
|
||||
{% if workout|water %}
|
||||
<li id="advanced-wind">
|
||||
<a href="/rowers/workout/{{ workout.id }}/wind/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/wind/">
|
||||
<i class="fas fa-pennant fa-fw"></i> Wind
|
||||
</a>
|
||||
</li>
|
||||
<li id="advanced-stream">
|
||||
<a href="/rowers/workout/{{ workout.id }}/stream/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/stream/">
|
||||
<i class="fas fa-stream fa-fw"></i> Stream
|
||||
</a>
|
||||
</li>
|
||||
<li id="advanced-otwpower">
|
||||
<a href="/rowers/workout/{{ workout.id }}/otwsetpower/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/otwsetpower/">
|
||||
<i class="fas fa-calculator-alt fa-fw"></i> OTW Power
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li id="advanced-instroke">
|
||||
<a href="/rowers/workout/{{ workout.id }}/instroke/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/instroke/">
|
||||
<i class="fas fa-search-plus fa-fw"></i> In-Stroke Metrics
|
||||
</a>
|
||||
</li>
|
||||
<li id="advanced-recalcsummary">
|
||||
<a href="/rowers/workout/{{ workout.id }}/recalcsummary/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/recalcsummary/">
|
||||
<i class="fas fa-window-restore fa-fw"></i> Update Summary
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
<td> {{ workout.averagehr }} </td>
|
||||
<td> {{ workout.maxhr }} </td>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/edit/">{{ workout.name }}</a> </td>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/edit/">{{ workout.name }}</a> </td>
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
@@ -19,17 +19,17 @@
|
||||
{% endif %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/edit">Edit Workout</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/advanced">Advanced Edit</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/advanced">Advanced Edit</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2 omega">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/export">Export</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
@@ -48,7 +48,7 @@
|
||||
</tr>
|
||||
<th>Public link to this workout</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}">https://rowsandall.com/rowers/workout/{{ workout.id|encode }}</a>
|
||||
<td>
|
||||
</table>
|
||||
</div>
|
||||
@@ -58,7 +58,7 @@
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/wind">Edit Wind Data</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/wind">Edit Wind Data</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/about">Edit Wind Data</a>
|
||||
{% endif %}
|
||||
@@ -71,7 +71,7 @@
|
||||
<div class="grid_2">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/stream">Edit Stream Data</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/stream">Edit Stream Data</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/about">Edit Stream Data</a>
|
||||
{% endif %}
|
||||
@@ -84,7 +84,7 @@
|
||||
<div class="grid_2 omega">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/otwsetpower">OTW Power</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/otwsetpower">OTW Power</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/about">OTW Power</a>
|
||||
{% endif %}
|
||||
@@ -101,7 +101,7 @@
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/interactiveotwplot">Corrected Pace Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/interactiveotwplot">Corrected Pace Plot</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/about">Corrected Pace Plot</a>
|
||||
{% endif %}
|
||||
@@ -113,7 +113,7 @@
|
||||
</div>
|
||||
<div class="grid_2 suffix_2 omega">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/interactiveplot">Big Interactive Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/interactiveplot">Big Interactive Plot</a>
|
||||
</p>
|
||||
<p>
|
||||
See (and save) the big interactive plot
|
||||
@@ -128,7 +128,7 @@
|
||||
{% else %}
|
||||
<div class="grid_2">
|
||||
{% endif %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/instroke/{{ metric }}">{{ metric }}</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/instroke/{{ metric }}">{{ metric }}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
@@ -91,12 +91,12 @@
|
||||
<tr>
|
||||
<td> {{ workout.distance }} m</td>
|
||||
<td> {{ workout.duration |durationprint:"%H:%M:%S.%f" }} </td>
|
||||
<td> {{ avgpower|lookup:workout.id }} W</td>
|
||||
<td> {{ avgpower|lookup:workout.id|encode }} W</td>
|
||||
<td> {{ workout.date }} </td>
|
||||
<td> {{ workout.averagehr }} </td>
|
||||
<td> {{ workout.maxhr }} </td>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/edit/">{{ workout.name }}</a> </td>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/edit/">{{ workout.name }}</a> </td>
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
@@ -26,11 +26,11 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="/rowers/workout/{{ workout.id }}/wind">Set wind strength and direction</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/wind">Set wind strength and direction</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="/rowers/workout/{{ workout.id }}/stream">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/stream">
|
||||
Set river stream strength
|
||||
</a>
|
||||
</p>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/advanced">Advanced</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/advanced">Advanced</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
</tr><tr>
|
||||
<th>Public link to this workout</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}">https://rowsandall.com/rowers/workout/{{ workout.id|encode }}</a>
|
||||
</td>
|
||||
</tr><tr>
|
||||
<th>Comments</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/comment">Comment ({{ aantalcomments }})</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/comment">Comment ({{ aantalcomments }})</a>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button red small" href="/rowers/workout/{{ workout.id }}/deleteconfirm">Delete</a>
|
||||
<a class="button red small" href="/rowers/workout/{{ workout.id|encode }}/delete">Delete</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/edit">Edit Workout</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/editintervals">Edit Intervals</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/editintervals">Edit Intervals</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/stream">Edit Stream Data</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/stream">Edit Stream Data</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/wind">Edit Wind Data</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/wind">Edit Wind Data</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export Workout</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/export">Export Workout</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/flexchart">Flex Chart</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/flexchart">Flex Chart</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/map">Map View</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/map">Map View</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
{% load rowerfilters %}
|
||||
<p>
|
||||
<div class="fb-share-button" data-href="https://rowsandall.com/rowers/workout/{{ workout.id }}" 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=https://rowsandall.com/rowers/workout/{{ workout.id }}">Share</a>
|
||||
<div class="fb-share-button" data-href="https://rowsandall.com/rowers/workout/{{ workout.id|encode }}" 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=https://rowsandall.com/rowers/workout/{{ workout.id|encode }}">Share</a>
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
<a class="twitter-share-button"
|
||||
href="https://twitter.com/intent/tweet"
|
||||
data-url="https://rowsandall.com/rowers/workout/{{ workout.id }}"
|
||||
data-url="https://rowsandall.com/rowers/workout/{{ workout.id|encode }}"
|
||||
data-text="@rowsandall #rowingdata">Tweet</a>
|
||||
</p>
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/otwsetpower">OTW Power</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/otwsetpower">OTW Power</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/updatecp">
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/updatecp">
|
||||
Make Ranking Piece</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<tr>
|
||||
<th>Comments</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/comment">Comment ({{ aantalcomments }})</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/comment">Comment ({{ aantalcomments }})</a>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<div class="fb-share-button" data-href="https://rowsandall.com/rowers/workout/{{ workout.id }}" 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=https://rowsandall.com/rowers/workout/{{ workout.id }}">Share</a>
|
||||
<div class="fb-share-button" data-href="https://rowsandall.com/rowers/workout/{{ workout.id|encode }}" 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=https://rowsandall.com/rowers/workout/{{ workout.id|encode }}">Share</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid_2 alpha">
|
||||
<p> </p>
|
||||
<a class="twitter-share-button"
|
||||
href="https://twitter.com/intent/tweet"
|
||||
data-url="https://rowsandall.com/rowers/workout/{{ workout.id }}"
|
||||
data-url="https://rowsandall.com/rowers/workout/{{ workout.id|encode }}"
|
||||
data-text="@rowsandall #rowingdata">Tweet</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,23 +1,24 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<h2>Create Charts</h2>
|
||||
</div>
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addtimeplot">Add Time Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/addtimeplot">Add Time Plot</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/adddistanceplot">Add Distance Plot</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/adddistanceplot">Add Distance Plot</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addpiechart">Add HR Pie Chart</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/addpiechart">Add HR Pie Chart</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addpowerpiechart">Add Power Pie Chart</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/addpowerpiechart">Add Power Pie Chart</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
{% load rowerfilters %}
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/stats">Workout Stats</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ workout.id|encode }}/stats">Workout Stats</a>
|
||||
</p>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% load rowerfilters %}
|
||||
<div class="grid_2 alpha">
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/image">Attach Image</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id|encode }}/image">Attach Image</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -150,20 +150,20 @@
|
||||
{% if workout.user.user == user or user == team.manager %}
|
||||
{% if workout.name != '' %}
|
||||
<td>
|
||||
<a href={% url rower.defaultlandingpage id=workout.id %}>
|
||||
<a href={% url rower.defaultlandingpage id=workout.id|encode %}>
|
||||
{{ workout.name }}
|
||||
</a>
|
||||
</td>
|
||||
{% else %}
|
||||
<td>
|
||||
<a href={% url rower.defaultlandingpage id=workout.id %}>No Name
|
||||
<a href={% url rower.defaultlandingpage id=workout.id|encode %}>No Name
|
||||
</a></td>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if workout.name != '' %}
|
||||
<td><a href="/rowers/workout/{{ workout.id }}/">{{ workout.name }}</a></td>
|
||||
<td><a href="/rowers/workout/{{ workout.id|encode }}/">{{ workout.name }}</a></td>
|
||||
{% else %}
|
||||
<td><a href="/rowers/workout/{{ workout.id }}/">No Name</a> </td>
|
||||
<td><a href="/rowers/workout/{{ workout.id|encode }}/">No Name</a> </td>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<td> {{ workout.workouttype }} </td>
|
||||
|
||||
@@ -111,20 +111,21 @@
|
||||
{% if workout.user.user == user or user == team.manager %}
|
||||
{% if workout.name != '' %}
|
||||
<td>
|
||||
<a href={% url rower.defaultlandingpage id=workout.id %}>
|
||||
<a href={% url rower.defaultlandingpage id=workout.id|encode %}>
|
||||
{{ workout.name }}
|
||||
</a>
|
||||
</td>
|
||||
{% else %}
|
||||
<td>
|
||||
<a href={% url rower.defaultlandingpage id=workout.id %}>No Name
|
||||
<a href={% url rower.defaultlandingpage id=workout.id|encode %}>No Name
|
||||
</a></td>
|
||||
{% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if workout.name != '' %}
|
||||
<td><a href="/rowers/workout/{{ workout.id }}/">{{ workout.name }}</a></td>
|
||||
<td><a href="/rowers/workout/{{ workout.id|encode }}/">{{ workout.name }}</a></td>
|
||||
{% else %}
|
||||
<td><a href="/rowers/workout/{{ workout.id }}/">No Name</a> </td>
|
||||
<td><a href="/rowers/workout/{{ workout.id|encode }}/">No Name</a> </td>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<td> {{ workout.workouttype }} </td>
|
||||
@@ -138,6 +139,7 @@
|
||||
</table>
|
||||
</li>
|
||||
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
<td> {{ workout.date|date:"Y-m-d" }} </td>
|
||||
<td>
|
||||
<div class="tooltip">
|
||||
<a href="{% url manager.defaultlandingpage id=workout.id %}">
|
||||
<a href="{% url manager.defaultlandingpage id=workout.id|encode %}">
|
||||
{{ workout.name }}
|
||||
</a>
|
||||
<span class="tooltiptext">{{ workout.notes }}</span>
|
||||
@@ -90,7 +90,7 @@
|
||||
<td> {{ workout.distance }}m</td>
|
||||
<td> {{ workout.duration |durationprint:"%H:%M:%S.%f" }} </td>
|
||||
<td>
|
||||
<a href="/rowers/sessions/{{ psdict.id.1 }}/detach/{{ workout.id }}/">Detach</a>
|
||||
<a href="/rowers/sessions/{{ psdict.id.1 }}/detach/{{ workout.id|encode }}/">Detach</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
<td> {{ workout.averagehr }} </td>
|
||||
<td> {{ workout.maxhr }} </td>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/edit/">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/edit/">
|
||||
{{ workout.name }}
|
||||
</a>
|
||||
</td>
|
||||
|
||||
@@ -52,16 +52,16 @@
|
||||
<li>
|
||||
{% if user.is_authenticated and user == rower.user %}
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ graph.workout.id }}/edit">Edit Workout</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ graph.workout.id|encode }}/edit">Edit Workout</a>
|
||||
</p>
|
||||
{% else %}
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ graph.workout.id }}">See Workout</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ graph.workout.id|encode }}">See Workout</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if user.is_authenticated and user == rower.user %}
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/workout/{{ graph.workout.id }}/workflow">Workflow View</a>
|
||||
<a class="button gray small" href="/rowers/workout/{{ graph.workout.id|encode }}/workflow">Workflow View</a>
|
||||
</p>
|
||||
{% else %}
|
||||
<p> </p>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<ul class="main-content">
|
||||
<li class="grid_2">
|
||||
<p>
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/split/" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id|encode }}/split/" method="post">
|
||||
<table width=100%>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
@@ -42,7 +42,7 @@
|
||||
</tr><tr>
|
||||
<th>Public link to this workout</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}">https://rowsandall.com/rowers/workout/{{ workout.id|encode }}</a>
|
||||
<td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
</tr><tr>
|
||||
<th>Public link to this workout</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/">https://rowsandall.com/rowers/workout/{{ workout.id|encode }}</a>
|
||||
<td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -38,7 +38,7 @@
|
||||
<p>
|
||||
See the how-to <a href="#howto">at the bottom of this page</a> for details on how to use this form.
|
||||
</p>
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/editintervals/" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id|encode }}/editintervals/" method="post">
|
||||
<table width=100%>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
@@ -73,7 +73,7 @@
|
||||
</li>
|
||||
<li class="grid_2">
|
||||
<h1>Updated Summary</h1>
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/editintervals/" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id|encode }}/editintervals/" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="{{ savebutton }}" value="{{ intervalstring }}">
|
||||
<input type="hidden" name="nrintervals" value={{ nrintervals }}>
|
||||
@@ -84,12 +84,12 @@
|
||||
{{ field.as_hidden }}
|
||||
{% endfor %}
|
||||
<p>
|
||||
<input class="button green" type="submit" value="Save">
|
||||
<input type="submit" value="Save">
|
||||
</p>
|
||||
<span>
|
||||
<a href="">Reset to last saved</a>
|
||||
|
||||
<a href="/rowers/workout/{{ workout.id }}/restore/">Restore Original data</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/restore/">Restore Original data</a>
|
||||
</span>
|
||||
</form>
|
||||
<p>
|
||||
@@ -101,7 +101,7 @@
|
||||
<li class="grid_2">
|
||||
<h1>Detailed Summary Edit</h1>
|
||||
<p>This is still experimental and there are known bugs. Use at your own risk. Nothing is stored permanently until you hit Save in the Updated Summary section. You can use the restore original button to restore the original values.</p>
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/editintervals/" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id|encode }}/editintervals/" method="post">
|
||||
<table width=100%>
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
{{ inviteform.as_table }}
|
||||
</table>
|
||||
{% csrf_token %}
|
||||
<input class="button green" type="submit" value="Submit">
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
{% else %}
|
||||
<p>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
You can read the comment here:
|
||||
</p>
|
||||
<p>
|
||||
<a href="{{ siteurl }} {{ commentlink }}">
|
||||
<a href="{{ siteurl }}{{ commentlink }}">
|
||||
{{ siteurl }}{{ commentlink }}</a>
|
||||
</p>
|
||||
|
||||
|
||||
@@ -41,9 +41,9 @@
|
||||
<li>
|
||||
<p>Closest Airport Weather: {{ airport }}
|
||||
({{ airportdistance | floatformat:-1 }} km)
|
||||
<a class="button green small" href="/rowers/workout/{{ workout.id }}/metar/{{ airport }}/">Airport Data</a></p>
|
||||
<a class="button green small" href="/rowers/workout/{{ workout.id|encode }}/metar/{{ airport }}/">Airport Data</a></p>
|
||||
<p>
|
||||
<a class="button green small" href="/rowers/workout/{{ workout.id }}/darkskywind/">Dark Sky Data</a>
|
||||
<a class="button green small" href="/rowers/workout/{{ workout.id|encode }}/darkskywind/">Dark Sky Data</a>
|
||||
<p>
|
||||
Download wind speed and bearing from <a href="http://forecast.io/">The Dark Sky</a>
|
||||
</p>
|
||||
|
||||
@@ -28,12 +28,13 @@
|
||||
<script>
|
||||
$(function($) {
|
||||
console.log('loading script');
|
||||
var workoutid = {{ workout.id }};
|
||||
var workoutid = '{{ workout.id|encode }}';
|
||||
console.log(workoutid);
|
||||
var shownotes = true;
|
||||
if("{{ rower.showfavoritechartnotes }}" == "False") {
|
||||
shownotes = false;
|
||||
}
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/workout/{{ workout.id }}/get-thumbnails/', function(json) {
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/workout/{{ workout.id|encode }}/get-thumbnails/', function(json) {
|
||||
var counter=0;
|
||||
$("#id_sitready").remove();
|
||||
$("#id_thumbs").append(
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
{% load rowerfilters %}
|
||||
{% for chart in charts %}
|
||||
<div class="grid_3 alpha">
|
||||
<big>{{ forloop.counter }}</big>
|
||||
<div class="grid_3 tooltip">
|
||||
<a href="/rowers/workout/{{ workout.id }}/flexchart?favoritechart={{ forloop.counter |add:"-1" }}">
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/flexchart?favoritechart={{ forloop.counter |add:"-1" }}">
|
||||
{{ chart.div | safe }}
|
||||
</a>
|
||||
{% if rower.showfavoritechartnotes %}
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
</tr><tr>
|
||||
<th>Public link to this workout</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/">https://rowsandall.com/rowers/workout/{{ workout.id }}/</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/">https://rowsandall.com/rowers/workout/{{ workout.id|encode }}/</a>
|
||||
<td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -56,7 +56,7 @@
|
||||
</div>
|
||||
</p>
|
||||
{% endfor %}
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/comment/" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id|encode }}/comment/" method="post">
|
||||
<table width=100%>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
|
||||
@@ -57,15 +57,15 @@ $('#id_workouttype').change();
|
||||
<li class="grid_4">
|
||||
<p>
|
||||
<div class="fb-share-button"
|
||||
data-href="https://rowsandall.com/rowers/workout/{{ workout.id }}/"
|
||||
data-href="https://rowsandall.com/rowers/workout/{{ workout.id|encode }}/"
|
||||
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=https://rowsandall.com/rowers/workout/{{ workout.id }}">Share</a>
|
||||
<a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https://rowsandall.com/rowers/workout/{{ workout.id|encode }}">Share</a>
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
<a class="twitter-share-button"
|
||||
href="https://twitter.com/intent/tweet"
|
||||
data-url="https://rowsandall.com/rowers/workout/{{ workout.id }}"
|
||||
data-url="https://rowsandall.com/rowers/workout/{{ workout.id|encode }}/"
|
||||
data-text="@rowsandall #rowingdata">Tweet</a>
|
||||
</p>
|
||||
<table width=100%>
|
||||
@@ -86,7 +86,7 @@ $('#id_workouttype').change();
|
||||
</tr><tr>
|
||||
<th>Public link to this workout:</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/">https://rowsandall.com/rowers/workout/{{ workout.id }}/</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/">https://rowsandall.com/rowers/workout/{{ workout.id|encode }}/</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -123,7 +123,7 @@ $('#id_workouttype').change();
|
||||
<h1>Racing</h1>
|
||||
{% for race in indoorraces %}
|
||||
<p>
|
||||
<a href="/rowers/virtualevent/{{ race.id }}/submit/{{ workout.id }}/">Submit this to Indoor Race {{ race.name }}</a>
|
||||
<a href="/rowers/virtualevent/{{ race.id }}/submit/{{ workout.id|encode }}/">Submit this to Indoor Race {{ race.name }}</a>
|
||||
</p>
|
||||
{% endfor %}
|
||||
</li>
|
||||
|
||||
@@ -56,10 +56,10 @@
|
||||
{% endif %}
|
||||
<p>
|
||||
<div class="fb-share-button"
|
||||
data-href="https://rowsandall.com/rowers/workout/{{ workout.id }}"
|
||||
data-href="https://rowsandall.com/rowers/workout/{{ workout.id|encode }}"
|
||||
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=https://rowsandall.com/rowers/workout/{{ workout.id }}">
|
||||
href="https://www.facebook.com/sharer/sharer.php?u=https://rowsandall.com/rowers/workout/{{ workout.id|encode }}">
|
||||
Share
|
||||
</a>
|
||||
</div>
|
||||
@@ -67,7 +67,7 @@
|
||||
<p>
|
||||
<a class="twitter-share-button"
|
||||
href="https://twitter.com/intent/tweet"
|
||||
data-url="https://rowsandall.com/rowers/workout/{{ workout.id }}"
|
||||
data-url="https://rowsandall.com/rowers/workout/{{ workout.id|encode }}"
|
||||
data-text="@rowsandall #rowingdata">Tweet</a>
|
||||
</p>
|
||||
<table width=100%>
|
||||
@@ -94,7 +94,7 @@
|
||||
<tr>
|
||||
<th>Comments</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}/comment/">Comment ({{ aantalcomments }})</a>
|
||||
<a href="/rowers/workout/{{ workout.id|encode }}/comment/">Comment ({{ aantalcomments }})</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
@@ -26,8 +26,12 @@ from rowers.utils import NoTokenError
|
||||
|
||||
import rowers.payments as payments
|
||||
|
||||
|
||||
from rowers.opaque import encoder
|
||||
|
||||
import arrow
|
||||
|
||||
|
||||
def strfdelta(tdelta):
|
||||
minutes,seconds = divmod(tdelta.seconds,60)
|
||||
tenths = int(tdelta.microseconds/1e5)
|
||||
@@ -81,6 +85,10 @@ def aantalcomments(workout):
|
||||
|
||||
return aantalcomments
|
||||
|
||||
@register.filter
|
||||
def encode(id):
|
||||
return str(encoder.encode_hex(id))
|
||||
|
||||
@register.filter
|
||||
def water(workout):
|
||||
try:
|
||||
@@ -567,7 +575,7 @@ def nextworkout(workout,user):
|
||||
return 0
|
||||
|
||||
if ws:
|
||||
return ws[0].id
|
||||
return encoder.encode_hex(ws[0].id)
|
||||
else:
|
||||
return 0
|
||||
|
||||
@@ -598,7 +606,7 @@ def previousworkout(workout,user):
|
||||
|
||||
|
||||
if ws:
|
||||
return ws[0].id
|
||||
return encoder.encode_hex(ws[0].id)
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
from rowers.opaque import encoder
|
||||
encoded1 = str(encoder.encode_hex(1))
|
||||
encoded2 = str(encoder.encode_hex(2))
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
|
||||
@@ -84,6 +84,7 @@ faker = Factory.create()
|
||||
from rowers.utils import calculate_age
|
||||
|
||||
from rowers.tasks import handle_getagegrouprecords
|
||||
from rowers.opaque import encoder
|
||||
|
||||
import inspect
|
||||
|
||||
@@ -211,5 +212,8 @@ def cleanup(request):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
request.addfinalizer(remove_test_files)
|
||||
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ class WorkoutCompareTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/team-compare-select/workout/1/team/0/user/1/'
|
||||
url = '/rowers/team-compare-select/workout/'+encoded1+'/team/0/user/1/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -299,7 +299,8 @@ class ForcecurveTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password = self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/workout/1/forcecurve/'
|
||||
encoded1 = str(encoder.encode_hex(1))
|
||||
url = '/rowers/workout/'+encoded1+'/forcecurve/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@@ -125,7 +125,7 @@ class WorkoutViewTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = reverse('workout_forcecurve_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_forcecurve_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -186,7 +186,7 @@ class WorkoutViewTest(TestCase):
|
||||
|
||||
expected_url = reverse(self.r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':12
|
||||
'id':encoder.encode_hex(12)
|
||||
})
|
||||
|
||||
self.assertRedirects(response,
|
||||
@@ -209,7 +209,7 @@ class WorkoutViewTest(TestCase):
|
||||
response = self.c.get('/')
|
||||
url = reverse('multi_compare_view',kwargs={
|
||||
'userid':self.u.id,
|
||||
'id':self.werg1.id,
|
||||
'id':encoder.encode_hex(self.werg1.id),
|
||||
})
|
||||
print url
|
||||
|
||||
@@ -241,13 +241,13 @@ class WorkoutViewTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = reverse('workout_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
url = reverse('workout_downloadmetar_view',kwargs={
|
||||
'id': self.wwater.id,
|
||||
'id': encoder.encode_hex(self.wwater.id),
|
||||
'airportcode': 'LKHO'
|
||||
}
|
||||
)
|
||||
@@ -256,7 +256,7 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
url = reverse('workout_downloadwind_view',kwargs={
|
||||
'id': self.wwater.id,
|
||||
'id': encoder.encode_hex(self.wwater.id),
|
||||
}
|
||||
)
|
||||
|
||||
@@ -270,14 +270,14 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertTrue(login)
|
||||
|
||||
|
||||
url = reverse('workout_smoothenpace_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_smoothenpace_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
expected_url = reverse(self.r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':self.wwater.id
|
||||
'id':encoder.encode_hex(self.wwater.id)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -285,14 +285,14 @@ class WorkoutViewTest(TestCase):
|
||||
expected_url=expected_url,
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
url = reverse('workout_undo_smoothenpace_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_undo_smoothenpace_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
expected_url = reverse(self.r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':self.wwater.id
|
||||
'id':encoder.encode_hex(self.wwater.id)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -308,7 +308,7 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertTrue(login)
|
||||
|
||||
|
||||
url = reverse('workout_wind_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_wind_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -336,7 +336,7 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertTrue(login)
|
||||
|
||||
|
||||
url = reverse('workout_stream_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_stream_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -363,7 +363,7 @@ class WorkoutViewTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = reverse('instroke_view',kwargs={'id':self.winstroke.id})
|
||||
url = reverse('instroke_view',kwargs={'id':encoder.encode_hex(self.winstroke.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -380,7 +380,7 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertTrue(login)
|
||||
|
||||
|
||||
url = reverse('workout_otwsetpower_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_otwsetpower_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -397,7 +397,7 @@ class WorkoutViewTest(TestCase):
|
||||
response = self.c.post(url,form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
expected_url = reverse('workout_edit_view',kwargs={'id':self.wwater.id})
|
||||
expected_url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url=expected_url,
|
||||
@@ -410,7 +410,7 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertTrue(login)
|
||||
|
||||
|
||||
url = reverse('workout_comment_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_comment_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -425,7 +425,7 @@ class WorkoutViewTest(TestCase):
|
||||
response = self.c.post(url,form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
url = reverse('workout_unsubscribe_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_unsubscribe_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@@ -436,7 +436,7 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertTrue(login)
|
||||
|
||||
|
||||
url = reverse('workout_map_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_map_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -448,7 +448,8 @@ class WorkoutViewTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = reverse('workout_uploadimage_view',kwargs={'id':self.werg1.id})
|
||||
url = reverse('workout_uploadimage_view',
|
||||
kwargs={'id':encoder.encode_hex(self.werg1.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -466,7 +467,8 @@ class WorkoutViewTest(TestCase):
|
||||
|
||||
response = self.c.post(url,form_data,format='multipart',follow=True)
|
||||
|
||||
expected_url = reverse(self.r.defaultlandingpage,kwargs={'id':self.werg1.id})
|
||||
expected_url = reverse(self.r.defaultlandingpage,
|
||||
kwargs={'id':encoder.encode_hex(self.werg1.id)})
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url=expected_url,
|
||||
@@ -480,7 +482,7 @@ class WorkoutViewTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = reverse('workout_split_view',kwargs={'id':self.werg1.id})
|
||||
url = reverse('workout_split_view',kwargs={'id':encoder.encode_hex(self.werg1.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -505,8 +507,9 @@ class WorkoutViewTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = reverse('workout_fusion_view',kwargs={'id1':self.werg2.id,
|
||||
'id2':self.werg2copy.id})
|
||||
url = reverse('workout_fusion_view',
|
||||
kwargs={'id1':encoder.encode_hex(self.werg2.id),
|
||||
'id2':encoder.encode_hex(self.werg2copy.id)})
|
||||
|
||||
|
||||
response = self.c.get(url)
|
||||
@@ -534,7 +537,7 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertTrue(login)
|
||||
|
||||
|
||||
url = reverse('workout_summary_edit_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_summary_edit_view',kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@@ -213,7 +213,7 @@ class CPChartTest(TestCase):
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/{id}/edit/'.format(
|
||||
id=workout_expected_id),
|
||||
id=encoder.encode_hex(workout_expected_id)),
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
# add some tests of complex form data (no hr, no spm, zero spm, etc)
|
||||
|
||||
@@ -53,9 +53,10 @@ class EmpowerTest(TestCase):
|
||||
def test_workflow_map_view(self, mocked_sqlalchemy):
|
||||
login = self.c.login(username='john',password='koeinsloot')
|
||||
self.assertTrue(login)
|
||||
encodedid = str(encoder.encode_hex(self.wote.id))
|
||||
|
||||
url = '/rowers/workout/{id}/workflow/'.format(
|
||||
id = self.wote.id
|
||||
id = encodedid
|
||||
)
|
||||
|
||||
response = self.c.get(url)
|
||||
|
||||
@@ -103,7 +103,8 @@ class WorkoutViewTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = reverse('workout_flexchart3_view',kwargs={'id':self.wwater.id})
|
||||
url = reverse('workout_flexchart3_view',
|
||||
kwargs={'id':encoder.encode_hex(self.wwater.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -126,7 +127,7 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
url = reverse('workout_flexchart3_view',kwargs={
|
||||
'id':self.wwater.id,
|
||||
'id':encoder.encode_hex(self.wwater.id),
|
||||
'xparam':'distance',
|
||||
'yparam1':'hr',
|
||||
'yparam2':'power'
|
||||
@@ -150,7 +151,8 @@ class WorkoutViewTest(TestCase):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = reverse('workout_flexchart3_view',kwargs={'id':self.werg1.id})
|
||||
url = reverse('workout_flexchart3_view',
|
||||
kwargs={'id':encoder.encode_hex(self.werg1.id)})
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -168,7 +170,7 @@ class WorkoutViewTest(TestCase):
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
url = reverse('workout_flexchart3_view',kwargs={
|
||||
'id':self.werg1.id,
|
||||
'id':encoder.encode_hex(self.werg1.id),
|
||||
'xparam':'distance',
|
||||
'yparam1':'hr',
|
||||
'yparam2':'power'
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
|
||||
import rowers
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -78,13 +79,13 @@ class C2Objects(DjangoTestCase):
|
||||
@patch('rowers.c2stuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.c2stuff.requests.get', side_effect=mocked_requests)
|
||||
def test_c2_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/c2uploadw/')
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/c2uploadw/')
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/1/edit/',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/1/edit/')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.c2stuff.requests.post', side_effect=mocked_requests)
|
||||
@@ -101,7 +102,7 @@ class C2Objects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/c2import/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -307,7 +308,7 @@ class StravaObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/stravaimport/12',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit/',
|
||||
status_code=301,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -399,13 +400,13 @@ class STObjects(DjangoTestCase):
|
||||
@patch('rowers.sporttracksstuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.sporttracksstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_sporttracks_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/sporttracksuploadw/')
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/sporttracksuploadw/')
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/1/edit/',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/1/edit/')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.sporttracksstuff.requests.get', side_effect=mocked_requests)
|
||||
@@ -420,7 +421,7 @@ class STObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/sporttracksimport/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -430,8 +431,11 @@ class STObjects(DjangoTestCase):
|
||||
|
||||
response = self.c.get('/rowers/workout/sporttracksimport/13/',follow=True)
|
||||
|
||||
expected_url = reverse('workout_edit_view',
|
||||
kwargs = {'id':encoder.encode_hex(2)})
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
expected_url=expected_url,
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -521,13 +525,13 @@ class RunKeeperObjects(DjangoTestCase):
|
||||
@patch('rowers.runkeeperstuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.runkeeperstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_runkeeper_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/runkeeperuploadw/')
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/runkeeperuploadw/')
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/1/edit/',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/1/edit/')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.runkeeperstuff.requests.get', side_effect=mocked_requests)
|
||||
@@ -542,7 +546,7 @@ class RunKeeperObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/runkeeperimport/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -624,13 +628,13 @@ class UAObjects(DjangoTestCase):
|
||||
@patch('rowers.underarmourstuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.underarmourstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_underarmour_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/underarmouruploadw/')
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/underarmouruploadw/')
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/1/edit/',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/1/edit/')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.underarmourstuff.requests.get', side_effect=mocked_requests)
|
||||
@@ -646,7 +650,7 @@ class UAObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/underarmourimport/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -727,13 +731,15 @@ class TPObjects(DjangoTestCase):
|
||||
@patch('rowers.tpstuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.tpstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_tp_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/tpuploadw/')
|
||||
url = '/rowers/workout/'+encoded1+'/tpuploadw/'
|
||||
|
||||
response = self.c.get(url)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/1/edit/',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/1/edit/')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
|
||||
|
||||
@@ -1575,7 +1575,7 @@ class PlannedSessionsView(TestCase):
|
||||
|
||||
url = '/rowers/sessions/{psid}/detach/{id}/'.format(
|
||||
psid=self.ps_time.id,
|
||||
id = self.w1.id,
|
||||
id = encoder.encode_hex(self.w1.id),
|
||||
)
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
|
||||
@@ -74,7 +74,7 @@ class SimpleViewTest(TestCase):
|
||||
|
||||
def test_getworkout(self):
|
||||
with assert_raises(Http404):
|
||||
w = get_workout(123)
|
||||
w = get_workout(encoder.encode_hex(123))
|
||||
|
||||
def test_deactivate(self):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
|
||||
@@ -56,28 +56,30 @@ class ViewTest(TestCase):
|
||||
|
||||
f.close()
|
||||
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/workout/1/', form_data, follow=True)
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/workout/1/edit/', form_data, follow=True)
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/edit/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
response = self.c.get('/rowers/workout/1/histo/', form_data, follow=True)
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/histo/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/workout/1/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/workout/1/workflow/',
|
||||
|
||||
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/workflow/',
|
||||
follow=True)
|
||||
|
||||
response = self.c.get('/rowers/workout/1/get-thumbnails/',
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/get-thumbnails/',
|
||||
follow=True)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -98,7 +100,7 @@ class ViewTest(TestCase):
|
||||
}
|
||||
form = WorkoutForm(data=form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
response = self.c.post('/rowers/workout/1/edit/', form_data, follow=True)
|
||||
response = self.c.post('/rowers/workout/'+encoded1+'/edit/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@@ -151,12 +153,12 @@ class ViewTest(TestCase):
|
||||
|
||||
f.close()
|
||||
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/workout/1/', form_data, follow=True)
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@@ -193,7 +195,7 @@ class ViewTest(TestCase):
|
||||
|
||||
f.close()
|
||||
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -262,7 +264,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -273,7 +275,7 @@ class ViewTest(TestCase):
|
||||
form_data = {}
|
||||
form = CNsummaryForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('rowers/workout/1/crewnerdsummary',
|
||||
response = self.c.post('rowers/workout/'+encoded1+'/crewnerdsummary',
|
||||
form_data,
|
||||
follow=True)
|
||||
|
||||
@@ -312,7 +314,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -349,7 +351,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -388,7 +390,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -424,7 +426,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -461,7 +463,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -500,7 +502,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -536,7 +538,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -569,7 +571,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -602,7 +604,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -635,7 +637,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -669,7 +671,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -701,7 +703,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -733,7 +735,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -765,7 +767,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/1/edit/',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
+59
-55
@@ -1,8 +1,9 @@
|
||||
from __future__ import print_function
|
||||
#from __future__ import print_function
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
|
||||
|
||||
tested = [
|
||||
'/rowers/me/delete/'
|
||||
]
|
||||
@@ -152,21 +153,21 @@ class URLTests(TestCase):
|
||||
'/rowers/sessions/2016-01-01/2016-12-31/',
|
||||
'/rowers/sessions/2016-01-01/2016-12-31/user/1/',
|
||||
'/rowers/sessions/coach/',
|
||||
'/rowers/sessions/coach/user/1/',
|
||||
# '/rowers/sessions/coach/user/1/',
|
||||
'/rowers/sessions/create/',
|
||||
'/rowers/sessions/create/user/1/',
|
||||
# '/rowers/sessions/create/user/1/',
|
||||
'/rowers/sessions/manage/',
|
||||
'/rowers/sessions/manage/user/1/',
|
||||
# '/rowers/sessions/manage/user/1/',
|
||||
'/rowers/sessions/multiclone/',
|
||||
'/rowers/sessions/multiclone/user/1/',
|
||||
# '/rowers/sessions/multiclone/user/1/',
|
||||
'/rowers/sessions/multicreate/',
|
||||
'/rowers/sessions/multicreate/user/1/',
|
||||
# '/rowers/sessions/multicreate/user/1/',
|
||||
'/rowers/sessions/print/',
|
||||
'/rowers/sessions/print/user/1/',
|
||||
# '/rowers/sessions/print/user/1/',
|
||||
'/rowers/sessions/teamcreate/',
|
||||
'/rowers/sessions/user/1/',
|
||||
# '/rowers/sessions/user/1/',
|
||||
'/rowers/team-compare-select/',
|
||||
'/rowers/team-compare-select/workout/1/',
|
||||
'/rowers/team-compare-select/workout/'+encoded1+'/',
|
||||
'/rowers/team-compare-select/2016-01-01/2016-12-31/',
|
||||
# '/rowers/test-job/2/',
|
||||
# '/rowers/test-job2/2/',
|
||||
@@ -186,49 +187,48 @@ class URLTests(TestCase):
|
||||
# '/rowers/user-multiflex-select/user/1/2016-01-01/2016-12-31/',
|
||||
# '/rowers/user-multiflex/',
|
||||
# '/rowers/user-multiflex/user/1/',
|
||||
'/rowers/workout/1/',
|
||||
'/rowers/workout/1/adddistanceplot/',
|
||||
'/rowers/workout/1/adddistanceplot2/',
|
||||
'/rowers/workout/1/addotwpowerplot/',
|
||||
'/rowers/workout/1/addpiechart/',
|
||||
'/rowers/workout/1/addpowerpiechart/',
|
||||
'/rowers/workout/1/addstatic/',
|
||||
'/rowers/workout/1/addstatic/3/',
|
||||
'/rowers/workout/1/addtimeplot/',
|
||||
'/rowers/workout/1/addtimeplot2/',
|
||||
'/rowers/workout/1/comment/',
|
||||
'/rowers/workout/1/darkskywind/',
|
||||
'/rowers/workout/1/data/',
|
||||
'/rowers/workout/1/edit/',
|
||||
'/rowers/workout/1/editintervals/',
|
||||
'/rowers/workout/1/flexchart/',
|
||||
'/rowers/workout/1/forcecurve/',
|
||||
'/rowers/workout/1/get-testscript/',
|
||||
'/rowers/workout/1/get-thumbnails/',
|
||||
'/rowers/workout/1/histo/',
|
||||
'/rowers/workout/1/image/',
|
||||
'/rowers/workout/1/instroke/',
|
||||
'/rowers/workout/1/interactiveotwplot/',
|
||||
'/rowers/workout/1/map/',
|
||||
'/rowers/workout/1/otwsetpower/',
|
||||
'/rowers/workout/1/recalcsummary/',
|
||||
'/rowers/workout/1/restore/',
|
||||
'/rowers/workout/1/smoothenpace/',
|
||||
'/rowers/workout/1/split/',
|
||||
'/rowers/workout/1/stats/',
|
||||
'/rowers/workout/1/stream/',
|
||||
# '/rowers/workout/1/task/',
|
||||
'/rowers/workout/1/test_strokedata/',
|
||||
'/rowers/workout/1/toggle-ranking/',
|
||||
'/rowers/workout/1/undosmoothenpace/',
|
||||
'/rowers/workout/1/unsubscribe/',
|
||||
'/rowers/workout/1/updatecp/',
|
||||
'/rowers/workout/1/view/',
|
||||
'/rowers/workout/1/wind/',
|
||||
'/rowers/workout/1/workflow/',
|
||||
# '/rowers/workout/compare/1/2016-01-01/2016-12-31/',
|
||||
'/rowers/workout/fusion/1/',
|
||||
'/rowers/workout/fusion/1/2016-01-01/2016-12-31/',
|
||||
'/rowers/workout/'+encoded1+'/',
|
||||
'/rowers/workout/'+encoded1+'/adddistanceplot/',
|
||||
'/rowers/workout/'+encoded1+'/adddistanceplot2/',
|
||||
'/rowers/workout/'+encoded1+'/addotwpowerplot/',
|
||||
'/rowers/workout/'+encoded1+'/addpiechart/',
|
||||
'/rowers/workout/'+encoded1+'/addpowerpiechart/',
|
||||
'/rowers/workout/'+encoded1+'/addstatic/',
|
||||
'/rowers/workout/'+encoded1+'/addstatic/3/',
|
||||
'/rowers/workout/'+encoded1+'/addtimeplot/',
|
||||
'/rowers/workout/'+encoded1+'/addtimeplot2/',
|
||||
'/rowers/workout/'+encoded1+'/comment/',
|
||||
'/rowers/workout/'+encoded1+'/darkskywind/',
|
||||
'/rowers/workout/'+encoded1+'/data/',
|
||||
'/rowers/workout/'+encoded1+'/edit/',
|
||||
'/rowers/workout/'+encoded1+'/editintervals/',
|
||||
'/rowers/workout/'+encoded1+'/flexchart/',
|
||||
'/rowers/workout/'+encoded1+'/forcecurve/',
|
||||
'/rowers/workout/'+encoded1+'/get-testscript/',
|
||||
'/rowers/workout/'+encoded1+'/get-thumbnails/',
|
||||
'/rowers/workout/'+encoded1+'/histo/',
|
||||
'/rowers/workout/'+encoded1+'/image/',
|
||||
'/rowers/workout/'+encoded1+'/instroke/',
|
||||
'/rowers/workout/'+encoded1+'/interactiveotwplot/',
|
||||
'/rowers/workout/'+encoded1+'/map/',
|
||||
'/rowers/workout/'+encoded1+'/otwsetpower/',
|
||||
'/rowers/workout/'+encoded1+'/recalcsummary/',
|
||||
'/rowers/workout/'+encoded1+'/restore/',
|
||||
'/rowers/workout/'+encoded1+'/smoothenpace/',
|
||||
'/rowers/workout/'+encoded1+'/split/',
|
||||
'/rowers/workout/'+encoded1+'/stats/',
|
||||
'/rowers/workout/'+encoded1+'/stream/',
|
||||
# '/rowers/workout/'+encoded1+'/task/',
|
||||
# '/rowers/workout/'+encoded1+'/teststrokedata/',
|
||||
'/rowers/workout/'+encoded1+'/toggle-ranking/',
|
||||
'/rowers/workout/'+encoded1+'/undosmoothenpace/',
|
||||
'/rowers/workout/'+encoded1+'/unsubscribe/',
|
||||
'/rowers/workout/'+encoded1+'/updatecp/',
|
||||
'/rowers/workout/'+encoded1+'/view/',
|
||||
'/rowers/workout/'+encoded1+'/wind/',
|
||||
'/rowers/workout/'+encoded1+'/workflow/',
|
||||
'/rowers/workout/fusion/'+encoded1+'/',
|
||||
'/rowers/workout/fusion/'+encoded1+'/2016-01-01/2016-12-31/',
|
||||
'/rowers/workout/upload/',
|
||||
'/rowers/workout/upload/team/',
|
||||
'/rowers/workouts-join/',
|
||||
@@ -270,18 +270,22 @@ class URLTests(TestCase):
|
||||
expected)
|
||||
|
||||
html = BeautifulSoup(response.content,'html.parser')
|
||||
|
||||
|
||||
urls = [a['href'] for a in html.find_all('a')]
|
||||
|
||||
|
||||
for u in urls:
|
||||
if u not in tested and 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
||||
response = self.c.get(u)
|
||||
if response.status_code not in [200,302]:
|
||||
response2 = self.c.get(u)
|
||||
if response2.status_code not in [200,302]:
|
||||
print(len(tested))
|
||||
print(response.templates[0].name)
|
||||
print(url)
|
||||
print(u)
|
||||
print(response.status_code)
|
||||
tested.append(u)
|
||||
self.assertIn(response.status_code,
|
||||
self.assertIn(response2.status_code,
|
||||
[200,302])
|
||||
else:
|
||||
tested.append(u)
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+96
-86
@@ -110,7 +110,7 @@ urlpatterns = [
|
||||
url(r'^', include(router.urls)),
|
||||
url(r'^api-docs/$', views.schema_view,name='schema_view'),
|
||||
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
||||
url(r'^api/workouts/(?P<id>\d+)/strokedata/$',views.strokedatajson,name='strokedatajson'),
|
||||
url(r'^api/workouts/(?P<id>\b[0-9A-Fa-f]+\b)/strokedata/$',views.strokedatajson,name='strokedatajson'),
|
||||
url(r'^500v/$',views.error500_view,name='error500_view'),
|
||||
url(r'^502/$', TemplateView.as_view(template_name='502.html'),name='502'),
|
||||
url(r'^500/$', TemplateView.as_view(template_name='500.html'),name='500'),
|
||||
@@ -165,36 +165,36 @@ urlpatterns = [
|
||||
url(r'^virtualevent/(?P<id>\d+)/adddiscipline/$',views.virtualevent_addboat_view,name='virtualevent_addboat_view'),
|
||||
url(r'^virtualevent/(?P<id>\d+)/withdraw/(?P<recordid>\d+)/$',views.virtualevent_withdraw_view,name='virtualevent_withdraw_view'),
|
||||
url(r'^virtualevent/(?P<id>\d+)/withdraw/$',views.virtualevent_withdraw_view,name='virtualevent_withdraw_view'),
|
||||
url(r'^virtualevent/(?P<id>\d+)/submit/$',
|
||||
url(r'^virtualevent/(?P<id>\b[0-9A-Fa-f]+\b)/submit/$',
|
||||
views.virtualevent_submit_result_view,name='virtualevent_submit_result_view'),
|
||||
url(r'^virtualevent/(?P<id>\d+)/submit/(?P<workoutid>\d+)/$',
|
||||
url(r'^virtualevent/(?P<id>\d+)/submit/(?P<workoutid>\b[0-9A-Fa-f]+\b)/$',
|
||||
views.virtualevent_submit_result_view,name='virtualevent_submit_result_view'),
|
||||
url(r'^virtualevent/(?P<raceid>\d+)/disqualify/(?P<recordid>\d+)/',
|
||||
views.virtualevent_disqualify_view,name='virtualevent_submit_disqualify_view'),
|
||||
url(r'^list-workouts/$',views.workouts_view,
|
||||
name='workouts_view'),
|
||||
views.virtualevent_disqualify_view,name='virtualevent_disqualify_view'),
|
||||
url(r'^list-workouts/$',views.workouts_view,name='workouts_view'),
|
||||
url(r'^list-courses/$',views.courses_view,name='courses_view'),
|
||||
url(r'^courses/upload/$',views.course_upload_view,name='course_upload_view'),
|
||||
url(r'^workout/addmanual/$',views.addmanual_view,name='addmanual_view'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/team/(?P<teamid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/team/(?P<teamid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/team/(?P<teamid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/team/(?P<teamid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/user/(?P<userid>\d+)/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^team-compare-select/$',views.team_comparison_select,name='team_comparison_select'),
|
||||
url(r'^workouts-join-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workouts_join_select,name='workouts_join_select'),
|
||||
url(r'^workouts-join-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workouts_join_select,
|
||||
name='workouts_join_select'),
|
||||
url(r'^workouts-join/$',views.workouts_join_view,name='workouts_join_view'),
|
||||
url(r'^workouts-join-select/team/(?P<teamid>\d+)/$',views.workouts_join_select,name='workouts_join_select'),
|
||||
url(r'^workouts-join-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workouts_join_select,name='workouts_join_select'),
|
||||
@@ -251,43 +251,51 @@ urlpatterns = [
|
||||
url(r'^cumstats/$',views.cumstats,name='cumstats'),
|
||||
url(r'^graph/(?P<id>\d+)/$',views.graph_show_view,name='graph_show_view'),
|
||||
url(r'^graph/(?P<pk>\d+)/delete/$',views.GraphDelete.as_view(),name='graph_delete'),
|
||||
url(r'^workout/(?P<id>\d+)/get-thumbnails/$',views.get_thumbnails,name='get_thumbnails'),
|
||||
url(r'^workout/(?P<id>\d+)/toggle-ranking/$',views.workout_toggle_ranking,name='workout_toggle_ranking'),
|
||||
url(r'^workout/(?P<id>\d+)/get-testscript/$',views.get_testscript),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-thumbnails/$',views.get_thumbnails,
|
||||
name='get_thumbnails'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/toggle-ranking/$',views.workout_toggle_ranking,
|
||||
name='workout_toggle_ranking'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-testscript/$',views.get_testscript,
|
||||
name='get_testscript'),
|
||||
url(r'^workout/upload/team/$',views.team_workout_upload_view,name='team_workout_upload_view'),
|
||||
url(r'^workout/upload/$',views.workout_upload_view,name='workout_upload_view'),
|
||||
url(r'^workout/(?P<id>\d+)/histo/$',views.workout_histo_view,name='workout_histo_view'),
|
||||
# url(r'^workout/(?P<id>\d+)/task/$',views.workout_test_task_view),
|
||||
url(r'^workout/(?P<id>\d+)/forcecurve/$',views.workout_forcecurve_view,name='workout_forcecurve_view'),
|
||||
url(r'^workout/(?P<id>\d+)/unsubscribe/$',views.workout_unsubscribe_view,name='workout_unsubscribe_view'),
|
||||
# url(r'^workout/(?P<id>\d+)/export/$',views.workout_export_view),
|
||||
url(r'^workout/(?P<id>\d+)/comment/$',views.workout_comment_view,name='workout_comment_view'),
|
||||
url(r'^workout/(?P<id>\d+)/emailtcx/$',views.workout_tcxemail_view,name='workout_tcxemail_view'),
|
||||
url(r'^workout/(?P<id>\d+)/emailgpx/$',views.workout_gpxemail_view,name='workout_gpxemail_view'),
|
||||
url(r'^workout/(?P<id>\d+)/emailcsv/$',views.workout_csvemail_view,name='workout_csvemail_view'),
|
||||
url(r'^workout/(?P<id>\d+)/csvtoadmin/$',views.workout_csvtoadmin_view,name='workout_csvtoadmin_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/histo/$',views.workout_histo_view,
|
||||
name='workout_histo_view'),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/task/$',views.workout_test_task_view,name='workout_test_task_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/forcecurve/$',views.workout_forcecurve_view,
|
||||
name='workout_forcecurve_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/unsubscribe/$',views.workout_unsubscribe_view,
|
||||
name='workout_unsubscribe_view'),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/export/$',views.workout_export_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/comment/$',views.workout_comment_view,
|
||||
name='workout_comment_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/emailtcx/$',views.workout_tcxemail_view,
|
||||
name='workout_tcxemail_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/emailgpx/$',views.workout_gpxemail_view,
|
||||
name='workout_gpxemail_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/emailcsv/$',views.workout_csvemail_view,
|
||||
name='workout_csvemail_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/csvtoadmin/$',views.workout_csvtoadmin_view,
|
||||
name='workout_csvtoadmin_view'),
|
||||
url(r'^ergcpdatatoadmin/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.otecp_toadmin_view,name='otecp_toadmin_view'),
|
||||
url(r'^otwcpdatatoadmin/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.otwcp_toadmin_view,name='otwcp_toadmin_view'),
|
||||
# url(r'^workout/compare/(?P<id>\d+)/$',views.workout_comparison_list),
|
||||
# url(r'^workout/compare2/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/$',views.workout_comparison_view),
|
||||
# url(r'^workout/compare/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workout_comparison_list),
|
||||
url(r'^workout/(?P<id>\d+)/edit/$',views.workout_edit_view,
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/edit/$',views.workout_edit_view,
|
||||
name='workout_edit_view'),
|
||||
url(r'^workout/(?P<id>\d+)/map/$',views.workout_map_view,name='workout_map_view'),
|
||||
# url(r'^workout/(?P<id>\d+)/setprivate/$',views.workout_setprivate_view),
|
||||
url(r'^workout/(?P<id>\d+)/updatecp/$',views.workout_update_cp_view,name='workout_update_cp_view'),
|
||||
# url(r'^workout/(?P<id>\d+)/makepublic/$',views.workout_makepublic_view),
|
||||
# url(r'^workout/(?P<id>\d+)/geeky/$',views.workout_geeky_view),
|
||||
# url(r'^workout/(?P<id>\d+)/advanced/$',views.workout_advanced_view),
|
||||
url(r'^workout/(?P<id>\d+)/instroke/(?P<metric>\w+.*)/$',views.instroke_chart,name='instroke_chart'),
|
||||
url(r'^workout/(?P<id>\d+)/instroke/$',views.instroke_view,name='instroke_view'),
|
||||
url(r'^workout/(?P<id>\d+)/stats/$',views.workout_stats_view,name='workout_stats_view'),
|
||||
url(r'^workout/(?P<id>\d+)/data/$',views.workout_data_view,
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/map/$',views.workout_map_view,name='workout_map_view'),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/setprivate/$',views.workout_setprivate_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/updatecp/$',views.workout_update_cp_view,name='workout_update_cp_view'),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/makepublic/$',views.workout_makepublic_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/geeky/$',views.workout_geeky_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/advanced/$',views.workout_advanced_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/instroke/(?P<metric>\w+.*)/$',views.instroke_chart,name='instroke_chart'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/instroke/$',views.instroke_view,name='instroke_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stats/$',views.workout_stats_view,name='workout_stats_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/data/$',views.workout_data_view,
|
||||
name='workout_data_view'),
|
||||
url(r'^workout/(?P<id>\d+)/otwsetpower/$',views.workout_otwsetpower_view,name='workout_otwsetpower_view'),
|
||||
url(r'^workout/(?P<id>\d+)/interactiveotwplot/$',views.workout_otwpowerplot_view,name='workout_otwpowerplot_view'),
|
||||
url(r'^workout/(?P<id>\d+)/wind/$',views.workout_wind_view,name='workout_wind_view'),
|
||||
url(r'^workout/(?P<id>\d+)/image/$',views.workout_uploadimage_view,name='workout_uploadimage_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/otwsetpower/$',views.workout_otwsetpower_view,name='workout_otwsetpower_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/interactiveotwplot/$',views.workout_otwpowerplot_view,name='workout_otwpowerplot_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/wind/$',views.workout_wind_view,name='workout_wind_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/image/$',views.workout_uploadimage_view,name='workout_uploadimage_view'),
|
||||
url(r'^virtualevent/(?P<id>\d+)/compare/$',views.virtualevent_compare_view,name='virtualevent_compare_view'),
|
||||
url(r'^virtualevent/(?P<id>\d+)/image/$',
|
||||
views.virtualevent_uploadimage_view,name='virtualevent_uploadimage_view'),
|
||||
@@ -295,56 +303,58 @@ urlpatterns = [
|
||||
views.virtualevent_setlogo_view,name='virtualevent_setlog_view'),
|
||||
url(r'^logo/(?P<id>\d+)/delete/$',
|
||||
views.logo_delete_view,name='logo_delete_view'),
|
||||
url(r'^workout/(?P<id>\d+)/darkskywind/$',views.workout_downloadwind_view,name='workout_downloadwind_view'),
|
||||
url(r'^workout/(?P<id>\d+)/metar/(?P<airportcode>\w+)/$',views.workout_downloadmetar_view,name='workout_downloadmetar_view'),
|
||||
url(r'^workout/(?P<id>\d+)/stream/$',views.workout_stream_view,name='workout_stream_view'),
|
||||
# url(r'^workout/(?P<id>\d+)/crewnerdsummary/$',views.workout_crewnerd_summary_view),
|
||||
url(r'^workout/(?P<id>\d+)/editintervals/$',views.workout_summary_edit_view,
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/darkskywind/$',views.workout_downloadwind_view,name='workout_downloadwind_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/metar/(?P<airportcode>\w+)/$',views.workout_downloadmetar_view,name='workout_downloadmetar_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stream/$',views.workout_stream_view,name='workout_stream_view'),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/crewnerdsummary/$',views.workout_crewnerd_summary_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/editintervals/$',views.workout_summary_edit_view,
|
||||
name='workout_summary_edit_view'),
|
||||
url(r'^workout/(?P<id>\d+)/restore/$',views.workout_summary_restore_view,name='workout_summary_restore_view'),
|
||||
url(r'^workout/(?P<id>\d+)/split/$',views.workout_split_view,name='workout_split_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/restore/$',views.workout_summary_restore_view,name='workout_summary_restore_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/split/$',views.workout_split_view,name='workout_split_view'),
|
||||
# url(r'^workout/(?P<id>\d+)/interactiveplot/$',views.workout_biginteractive_view),
|
||||
url(r'^workout/(?P<id>\d+)/view/$',views.workout_view,name='workout_view'),
|
||||
url(r'^workout/(?P<id>\d+)/$',views.workout_view,name='workout_view'),
|
||||
url(r'^workout/fusion/(?P<id1>\d+)/(?P<id2>\d+)/$',views.workout_fusion_view,name='workout_fusion_view'),
|
||||
url(r'^workout/fusion/(?P<id>\d+)/$',views.workout_fusion_list,name='workout_fusion_list'),
|
||||
url(r'^workout/fusion/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workout_fusion_list,name='workout_fusion_list'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/view/$',views.workout_view,name='workout_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.workout_view,name='workout_view'),
|
||||
url(r'^workout/fusion/(?P<id1>\b[0-9A-Fa-f]+\b)/(?P<id2>\b[0-9A-Fa-f]+\b)/$',views.workout_fusion_view,name='workout_fusion_view'),
|
||||
url(r'^workout/fusion/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.workout_fusion_list,name='workout_fusion_list'),
|
||||
url(r'^workout/fusion/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workout_fusion_list,name='workout_fusion_list'),
|
||||
url(r'^help/$',TemplateView.as_view(
|
||||
template_name='help.html'),name='help'
|
||||
),
|
||||
url(r'^physics/$',TemplateView.as_view(template_name='physics.html'),name='physics'),
|
||||
url(r'^partners/$',TemplateView.as_view(template_name='partners.html'),name='partners'),
|
||||
# keeping the old URLs for retrofit
|
||||
url(r'^workout/(?P<id>\d+)/addtimeplot/$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addtimeplot/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'1'},name='workout_add_chart_view'),
|
||||
url(r'^workout/(?P<id>\d+)/adddistanceplot/$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/adddistanceplot/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'2'},name='workout_add_chart_view'),
|
||||
url(r'^workout/(?P<id>\d+)/addpiechart/$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addpiechart/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'3'},name='workout_add_chart_view'),
|
||||
url(r'^workout/(?P<id>\d+)/adddistanceplot2/$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/adddistanceplot2/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'7'},name='workout_add_chart_view'),
|
||||
url(r'^workout/(?P<id>\d+)/addtimeplot2/$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addtimeplot2/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'8'},name='workout_add_chart_view'),
|
||||
url(r'^workout/(?P<id>\d+)/addotwpowerplot/$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addotwpowerplot/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'9'},name='workout_add_chart_view'),
|
||||
url(r'^workout/(?P<id>\d+)/addpowerpiechart/$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addpowerpiechart/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'13'},name='workout_add_chart_view'),
|
||||
# addstatic is the new URL -> need to update in templates
|
||||
url(r'^workout/(?P<id>\d+)/addstatic/(?P<plotnr>\d+)/$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic/(?P<plotnr>\d+)/$',
|
||||
views.workout_add_chart_view,name='workout_add_chart_view'),
|
||||
url(r'^workout/(?P<id>\d+)/addstatic/$',views.workout_add_chart_view,name='workout_add_chart_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic/$',views.workout_add_chart_view,name='workout_add_chart_view'),
|
||||
url(r'^workout/(?P<pk>\d+)/delete/$',login_required(
|
||||
views.WorkoutDelete.as_view()),
|
||||
name='workout_delete'),
|
||||
url(r'^workout/(?P<id>\d+)/smoothenpace/$',views.workout_smoothenpace_view,name='workout_smoothenpace_view'),
|
||||
url(r'^workout/(?P<id>\d+)/undosmoothenpace/$',views.workout_undo_smoothenpace_view,name='workout_undo_smoothenpace_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/delete/$',login_required(
|
||||
views.workout_code_delete_view),name='workout_code_delete'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/smoothenpace/$',views.workout_smoothenpace_view,name='workout_smoothenpace_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/undosmoothenpace/$',views.workout_undo_smoothenpace_view,name='workout_undo_smoothenpace_view'),
|
||||
url(r'^workout/c2import/$',views.workout_c2import_view,name='workout_c2import_view'),
|
||||
url(r'^workout/c2list/$',views.workout_c2import_view,name='workout_c2import_view'),
|
||||
url(r'^workout/c2list/(?P<page>\d+)/$',views.workout_c2import_view,name='workout_c2import_view'),
|
||||
@@ -365,17 +375,17 @@ urlpatterns = [
|
||||
url(r'^workout/runkeeperimport/$',views.workout_runkeeperimport_view,name='workout_runkeeperimport_view'),
|
||||
url(r'^workout/runkeeperimport/user/(?P<userid>\d+)/$',views.workout_runkeeperimport_view,name='workout_runkeeperimport_view'),
|
||||
url(r'^workout/underarmourimport/$',views.workout_underarmourimport_view,name='workout_underarmourimport_view'),
|
||||
# url(r'^workout/(?P<id>\d+)/deleteconfirm/$',views.workout_delete_confirm_view),
|
||||
url(r'^workout/(?P<id>\d+)/c2uploadw/$',views.workout_c2_upload_view,name='workout_c2_upload_view'),
|
||||
url(r'^workout/(?P<id>\d+)/stravauploadw/$',views.workout_strava_upload_view,name='workout_strava_upload_view'),
|
||||
url(r'^workout/(?P<id>\d+)/recalcsummary/$',views.workout_recalcsummary_view,name='workout_recalcsummary_view'),
|
||||
url(r'^workout/(?P<id>\d+)/sporttracksuploadw/$',views.workout_sporttracks_upload_view,name='workout_sporttracks_upload_view'),
|
||||
url(r'^workout/(?P<id>\d+)/runkeeperuploadw/$',views.workout_runkeeper_upload_view,name='workout_runkeeper_upload_view'),
|
||||
url(r'^workout/(?P<id>\d+)/underarmouruploadw/$',views.workout_underarmour_upload_view,name='workout_underarmour_upload_view'),
|
||||
url(r'^workout/(?P<id>\d+)/tpuploadw/$',views.workout_tp_upload_view,name='workout_tp_upload_view'),
|
||||
url(r'^multi-compare/workout/(?P<id>\d+)/user/(?P<userid>\d+)/$',views.multi_compare_view,
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/deleteconfirm/$',views.workout_delete_confirm_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/c2uploadw/$',views.workout_c2_upload_view,name='workout_c2_upload_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stravauploadw/$',views.workout_strava_upload_view,name='workout_strava_upload_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/recalcsummary/$',views.workout_recalcsummary_view,name='workout_recalcsummary_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/sporttracksuploadw/$',views.workout_sporttracks_upload_view,name='workout_sporttracks_upload_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/runkeeperuploadw/$',views.workout_runkeeper_upload_view,name='workout_runkeeper_upload_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/underarmouruploadw/$',views.workout_underarmour_upload_view,name='workout_underarmour_upload_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/tpuploadw/$',views.workout_tp_upload_view,name='workout_tp_upload_view'),
|
||||
url(r'^multi-compare/workout/(?P<id>\b[0-9A-Fa-f]+\b)/user/(?P<userid>\d+)/$',views.multi_compare_view,
|
||||
name='multi_compare_view'),
|
||||
url(r'^multi-compare/workout/(?P<id>\d+)/$',views.multi_compare_view,name='multi_compare_view'),
|
||||
url(r'^multi-compare/workout/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.multi_compare_view,name='multi_compare_view'),
|
||||
url(r'^multi-compare/$',views.multi_compare_view,name='multi_compare_view'),
|
||||
url(r'^user-boxplot/user/(?P<userid>\d+)/$',views.boxplot_view,name='boxplot_view'),
|
||||
url(r'^user-boxplot/$',views.boxplot_view,name='boxplot_view'),
|
||||
@@ -472,12 +482,12 @@ urlpatterns = [
|
||||
url(r'^legal', TemplateView.as_view(template_name='legal.html'),name='legal'),
|
||||
url(r'^register/$',views.rower_register_view,name='rower_register_view'),
|
||||
url(r'^register/thankyou/$', TemplateView.as_view(template_name='registerthankyou.html'), name='registerthankyou'),
|
||||
url(r'^workout/(?P<id>\d+)/workflow/$',views.workout_workflow_view,
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/workflow/$',views.workout_workflow_view,
|
||||
name='workout_workflow_view'),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/(?P<xparam>[\w\ ]+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+)/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+.*)/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/(?P<xparam>[\w\ ]+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+)/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+.*)/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/$',views.workout_flexchart3_view,name='workout_flexchart3_view'),
|
||||
# url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>[\w\ ]+.*)/(?P<plottype>[\w\ ]+.*)/$',views.workout_comparison_view2),
|
||||
# url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>[\w\ ]+.*)/$',views.workout_comparison_view2),
|
||||
url(r'^test\_callback',views.rower_process_testcallback,name='rower_process_testcallback'),
|
||||
@@ -530,7 +540,7 @@ urlpatterns = [
|
||||
url(r'^edittarget/(?P<pk>\d+)/$',login_required(
|
||||
views.TrainingTargetUpdate.as_view()),
|
||||
name='trainingtarget_update_view'),
|
||||
url(r'^workout/(?P<id>\d+)/test\_strokedata/$',views.strokedataform),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/test\_strokedata/$',views.strokedataform),
|
||||
url(r'^sessions/teamcreate/user/(?P<userid>\d+)/$',views.plannedsession_teamcreate_view,
|
||||
name='plannedsession_teamcreate_view'),
|
||||
url(r'^sessions/teamcreate/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',
|
||||
@@ -579,8 +589,8 @@ urlpatterns = [
|
||||
url(r'^sessions/(?P<id>\d+)/edit/user/(?P<userid>\d+)/$',views.plannedsession_edit_view),
|
||||
url(r'^sessions/(?P<id>\d+)/clone/user/(?P<userid>\d+)/$',views.plannedsession_clone_view),
|
||||
url(r'^sessions/(?P<id>\d+)/clone/$',views.plannedsession_clone_view),
|
||||
url(r'^sessions/(?P<psid>\d+)/detach/(?P<id>\d+)/user/(?P<userid>\d+)/$',views.plannedsession_detach_view),
|
||||
url(r'^sessions/(?P<psid>\d+)/detach/(?P<id>\d+)/$',views.plannedsession_detach_view),
|
||||
url(r'^sessions/(?P<psid>\d+)/detach/(?P<id>\b[0-9A-Fa-f]+\b)/user/(?P<userid>\d+)/$',views.plannedsession_detach_view),
|
||||
url(r'^sessions/(?P<psid>\d+)/detach/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.plannedsession_detach_view),
|
||||
url(r'^sessions/(?P<id>\d+)/$',views.plannedsession_view,
|
||||
name='plannedsession_view'),
|
||||
url(r'^sessions/(?P<id>\d+)/user/(?P<userid>\d+)/$',views.plannedsession_view,
|
||||
|
||||
+26
-25
@@ -51,7 +51,7 @@ def workout_tp_upload_view(request,id=0):
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -106,7 +106,7 @@ def workout_strava_upload_view(request,id=0):
|
||||
pass
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
response = HttpResponseRedirect(url)
|
||||
return response
|
||||
@@ -137,14 +137,14 @@ def workout_strava_upload_view(request,id=0):
|
||||
w.save()
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
}
|
||||
)
|
||||
response = HttpResponseRedirect(url)
|
||||
@@ -156,7 +156,7 @@ def workout_strava_upload_view(request,id=0):
|
||||
os.remove(tcxfile)
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
@@ -183,7 +183,7 @@ def workout_c2_upload_view(request,id=0):
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':int(id)
|
||||
'id':encoder.encode_hex(w.id)
|
||||
})
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ def workout_runkeeper_upload_view(request,id=0):
|
||||
messages.error(request,message)
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':id,
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@@ -235,7 +235,8 @@ def workout_runkeeper_upload_view(request,id=0):
|
||||
runkeeperid = runkeeperstuff.getidfromresponse(response)
|
||||
w.uploadedtorunkeeper = runkeeperid
|
||||
w.save()
|
||||
url = reverse('workout_edit_view', kwargs={'id':w.id})
|
||||
url = reverse('workout_edit_view',
|
||||
kwargs={'id':encoder.encode_hex(w.id)})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
@@ -249,7 +250,7 @@ def workout_runkeeper_upload_view(request,id=0):
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -275,7 +276,7 @@ def workout_underarmour_upload_view(request,id=0):
|
||||
messages.error(request,message)
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@@ -300,7 +301,7 @@ def workout_underarmour_upload_view(request,id=0):
|
||||
underarmourid = underarmourstuff.getidfromresponse(response)
|
||||
w.uploadedtounderarmour = underarmourid
|
||||
w.save()
|
||||
url = reverse('workout_edit_view',kwargs={'id':w.id})
|
||||
url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(w.id)})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
@@ -313,7 +314,7 @@ def workout_underarmour_upload_view(request,id=0):
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -340,7 +341,7 @@ def workout_sporttracks_upload_view(request,id=0):
|
||||
messages.error(request,message)
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@@ -367,7 +368,7 @@ def workout_sporttracks_upload_view(request,id=0):
|
||||
message = "Upload to SportTracks was successful"
|
||||
messages.info(request,message)
|
||||
|
||||
url = reverse('workout_edit_view',kwargs={'id':w.id})
|
||||
url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(w.id)})
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
s = response
|
||||
@@ -379,7 +380,7 @@ def workout_sporttracks_upload_view(request,id=0):
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':str(w.id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -965,7 +966,7 @@ def workout_stravaimport_view(request,message="",userid=0):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_stravaimport_view),
|
||||
'url':reverse('workout_stravaimport_view'),
|
||||
'name':'Strava'
|
||||
},
|
||||
]
|
||||
@@ -1021,7 +1022,7 @@ def workout_runkeeperimport_view(request,message="",userid=0):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_runkeeperimport_view),
|
||||
'url':reverse('workout_runkeeperimport_view'),
|
||||
'name':'Runkeeper'
|
||||
}
|
||||
]
|
||||
@@ -1073,7 +1074,7 @@ def workout_underarmourimport_view(request,message="",userid=0):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_c2import_view),
|
||||
'url':reverse('workout_c2import_view'),
|
||||
'name':'Concept2'
|
||||
},
|
||||
]
|
||||
@@ -1126,7 +1127,7 @@ def workout_polarimport_view(request,userid=0):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_polarimport_view),
|
||||
'url':reverse('workout_polarimport_view'),
|
||||
'name':'Polar'
|
||||
},
|
||||
]
|
||||
@@ -1198,7 +1199,7 @@ def workout_sporttracksimport_view(request,message="",userid=0):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_sporttracksimport_view),
|
||||
'url':reverse('workout_sporttracksimport_view'),
|
||||
'name':'SportTracks'
|
||||
},
|
||||
]
|
||||
@@ -1343,11 +1344,11 @@ def workout_c2import_view(request,page=1,userid=0,message=""):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_c2import_view),
|
||||
'url':reverse('workout_c2import_view'),
|
||||
'name':'Concept2'
|
||||
},
|
||||
{
|
||||
'url':reverse(workout_c2import_view,kwargs={'page':page}),
|
||||
'url':reverse('workout_c2import_view',kwargs={'page':page}),
|
||||
'name':'Page '+str(page)
|
||||
}
|
||||
]
|
||||
@@ -1445,7 +1446,7 @@ def workout_getimportview(request,externalid,source = 'c2'):
|
||||
messages.info(request,message)
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -1458,7 +1459,7 @@ def workout_getimportview(request,externalid,source = 'c2'):
|
||||
source=source,
|
||||
workoutsource=source)
|
||||
|
||||
w = get_workout(id)
|
||||
w = get_workout(encoder.encode_hex(id))
|
||||
|
||||
if 'workout' in data:
|
||||
if 'splits' in data['workout']:
|
||||
@@ -1516,7 +1517,7 @@ def workout_getimportview(request,externalid,source = 'c2'):
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':int(id)
|
||||
'id':encoder.encode_hex(w.id)
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@@ -137,11 +137,11 @@ def plannedsession_comment_view(request,id=0,userid=0):
|
||||
else:
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':reverse('virtualevents_view'),
|
||||
'name': 'Races'
|
||||
'url':reverse('plannedsessions_view'),
|
||||
'name': 'Sessions'
|
||||
},
|
||||
{
|
||||
'url': reverse('virtualevent_view',kwargs={'id':ps.id}),
|
||||
'url': reverse('plannedsession_view',kwargs={'id':ps.id}),
|
||||
'name': ps.name
|
||||
},
|
||||
{
|
||||
|
||||
@@ -2251,7 +2251,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
|
||||
else:
|
||||
if workoutid:
|
||||
workoutdata['initial'] = workoutid
|
||||
workoutdata['initial'] = encoder.decode_hex(workoutid)
|
||||
w_form = WorkoutRaceSelectForm(workoutdata,entries)
|
||||
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ import cgi
|
||||
from icalendar import Calendar, Event
|
||||
import rowers.braintreestuff as braintreestuff
|
||||
import rowers.payments as payments
|
||||
from rowers.opaque import encoder
|
||||
|
||||
from django.shortcuts import render
|
||||
from django.template.loader import render_to_string
|
||||
@@ -258,13 +259,13 @@ def getfavorites(r,row):
|
||||
|
||||
def get_workout_default_page(request,id):
|
||||
if request.user.is_anonymous():
|
||||
return reverse('workout_view',kwargs={'id':str(id)})
|
||||
return reverse('workout_view',kwargs={'id':id})
|
||||
else:
|
||||
r = Rower.objects.get(user=request.user)
|
||||
if r.defaultlandingpage == 'workout_edit_view':
|
||||
return reverse('workout_edit_view',kwargs={'id':str(id)})
|
||||
return reverse('workout_edit_view',kwargs={'id':id})
|
||||
else:
|
||||
return reverse('workout_workflow_view',kwargs={'id':str(id)})
|
||||
return reverse('workout_workflow_view',kwargs={'id':id})
|
||||
|
||||
def getrequestrower(request,rowerid=0,userid=0,notpermanent=False):
|
||||
|
||||
@@ -318,6 +319,7 @@ def getrower(user):
|
||||
|
||||
def get_workout(id):
|
||||
try:
|
||||
id = encoder.decode_hex(id)
|
||||
w = Workout.objects.get(id=id)
|
||||
except Workout.DoesNotExist:
|
||||
raise Http404("Workout doesn't exist")
|
||||
@@ -709,7 +711,7 @@ def get_thumbnails(request,id):
|
||||
|
||||
charts = []
|
||||
|
||||
charts = thumbnails_set(r,id,favorites)
|
||||
charts = thumbnails_set(r,encoder.decode_hex(id),favorites)
|
||||
try:
|
||||
if charts[0]['script'] == '':
|
||||
charts = []
|
||||
|
||||
@@ -60,7 +60,7 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False):
|
||||
'the_div':div,
|
||||
'js_res': js_resources,
|
||||
'css_res':css_resources,
|
||||
'id':int(id),
|
||||
'id':id,
|
||||
'mayedit':mayedit,
|
||||
'workstrokesonly': not workstrokesonly,
|
||||
'teams':get_my_teams(request.user),
|
||||
@@ -126,7 +126,7 @@ def workout_histo_view(request,id=0):
|
||||
'workout':w,
|
||||
'rower':r,
|
||||
'the_div':div,
|
||||
'id':int(id),
|
||||
'id':id,
|
||||
'mayedit':mayedit,
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
@@ -248,7 +248,7 @@ def addmanual_view(request):
|
||||
|
||||
url = reverse(
|
||||
'workout_edit_view',
|
||||
kwargs={'id':id}
|
||||
kwargs={'id':encoder.encode_hex(id)}
|
||||
)
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
@@ -371,14 +371,14 @@ def workout_recalcsummary_view(request,id=0):
|
||||
messages.info(request,successmessage)
|
||||
url = reverse('workout_edit_view',
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
'id':id,
|
||||
})
|
||||
else:
|
||||
message = "Something went wrong. Could not update summary"
|
||||
messages.error(request,message)
|
||||
url = reverse('workout_edit_view',
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
'id':id,
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -419,7 +419,7 @@ def workouts_join_view(request):
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
'id':encoder.encode_hex(id),
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -740,7 +740,7 @@ def team_comparison_select(request,
|
||||
if not checkworkoutuser(request.user,firstworkout):
|
||||
raise PermissionDenied("You are not allowed to sue this workout")
|
||||
|
||||
firstworkoutquery = Workout.objects.filter(id=id)
|
||||
firstworkoutquery = Workout.objects.filter(id=encoder.decode_hex(id))
|
||||
workouts = firstworkoutquery | workouts
|
||||
else:
|
||||
firstworkout = None
|
||||
@@ -856,7 +856,7 @@ def virtualevent_compare_view(request,id=0):
|
||||
workouts = []
|
||||
for id in workoutids:
|
||||
try:
|
||||
workouts.append(Workout.objects.get(id=id))
|
||||
workouts.append(Workout.objects.get(id=encode.decode_hex(id)))
|
||||
except Workout.DoesNotExist:
|
||||
pass
|
||||
|
||||
@@ -888,7 +888,7 @@ def virtualevent_compare_view(request,id=0):
|
||||
workouts = []
|
||||
for id in workoutids:
|
||||
try:
|
||||
workouts.append(Workout.objects.get(id=id))
|
||||
workouts.append(Workout.objects.get(id=encoded.decode_hex(id)))
|
||||
except Workout.DoesNotExist:
|
||||
pass
|
||||
|
||||
@@ -989,7 +989,8 @@ def plannedsession_compare_view(request,id=0,userid=0):
|
||||
request.session['ps'] = ps.id
|
||||
|
||||
if ids:
|
||||
url = reverse('multi_compare_view',kwargs={'userid':userid,'id':ids[0]})
|
||||
url = reverse('multi_compare_view',
|
||||
kwargs={'userid':userid,'id':encoder.encode_hex(ids[0])})
|
||||
else:
|
||||
url = reverse('plannedsession_view',kwargs={'id':ps.id})
|
||||
|
||||
@@ -1400,10 +1401,13 @@ def workout_fusion_list(request,id=0,message='',successmessage='',
|
||||
s = enddate
|
||||
enddate = startdate
|
||||
startdate = s
|
||||
|
||||
if id:
|
||||
theid = encoder.decode_hex(id)
|
||||
|
||||
workouts = Workout.objects.filter(user=r,
|
||||
startdatetime__gte=startdate,
|
||||
startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=id)
|
||||
startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=theid)
|
||||
|
||||
query = request.GET.get('q')
|
||||
if query:
|
||||
@@ -1438,7 +1442,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='',
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':get_workout_default_page(request,row.id),
|
||||
'url':get_workout_default_page(request,encoder.encode_hex(row.id)),
|
||||
'name': row.name
|
||||
},
|
||||
{
|
||||
@@ -1449,7 +1453,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='',
|
||||
]
|
||||
|
||||
return render(request, 'fusion_list.html',
|
||||
{'id':int(id),
|
||||
{'id':id,
|
||||
'workout':row,
|
||||
'rower':r,
|
||||
'searchform':searchform,
|
||||
@@ -1474,7 +1478,7 @@ def workout_view(request,id=0):
|
||||
rower = None
|
||||
|
||||
try:
|
||||
row = Workout.objects.get(id=id)
|
||||
row = Workout.objects.get(id=encoder.decode_hex(id))
|
||||
except Workout.DoesNotExist:
|
||||
raise Http404("Workout doesn't exist")
|
||||
|
||||
@@ -1499,7 +1503,7 @@ def workout_view(request,id=0):
|
||||
|
||||
|
||||
# create interactive plot
|
||||
res = interactive_chart(id)
|
||||
res = interactive_chart(encoder.decode_hex(id))
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
|
||||
@@ -1591,7 +1595,7 @@ def workout_undo_smoothenpace_view(
|
||||
row.df[' Stroke500mPace (sec/500m)'] = 500./velo
|
||||
|
||||
row.write_csv(filename,gzip=True)
|
||||
dataprep.update_strokedata(id,row.df)
|
||||
dataprep.update_strokedata(encoder.decode_hex(id),row.df)
|
||||
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
@@ -1641,7 +1645,7 @@ def workout_smoothenpace_view(request,id=0,message="",successmessage=""):
|
||||
row.df = row.df.fillna(0)
|
||||
|
||||
row.write_csv(filename,gzip=True)
|
||||
dataprep.update_strokedata(id,row.df)
|
||||
dataprep.update_strokedata(encoder.decode_hex(id),row.df)
|
||||
|
||||
messages.info(request,'A smoothening filter was applied to your pace data')
|
||||
|
||||
@@ -1694,7 +1698,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
|
||||
messages.info(request,successmessage)
|
||||
url = reverse('workout_edit_view',
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
'id':id,
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -1707,7 +1711,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
|
||||
messages.error(request,message)
|
||||
url = reverse('workout_edit_view',
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
'id':id,
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
@@ -1785,7 +1789,7 @@ def workout_downloadwind_view(request,id=0,
|
||||
messages.info(request,message)
|
||||
|
||||
kwargs = {
|
||||
'id':int(id)}
|
||||
'id':id}
|
||||
|
||||
url = reverse('workout_wind_view',kwargs=kwargs)
|
||||
response = HttpResponseRedirect(url)
|
||||
@@ -1793,7 +1797,7 @@ def workout_downloadwind_view(request,id=0,
|
||||
message = "No latitude/longitude data"
|
||||
messages.error(request,message)
|
||||
kwargs = {
|
||||
'id':int(id)
|
||||
'id':id
|
||||
}
|
||||
url = reverse('workout_wind_view',kwargs=kwargs)
|
||||
response = HttpResponseRedirect(url)
|
||||
@@ -1851,7 +1855,7 @@ def workout_downloadmetar_view(request,id=0,
|
||||
messages.info(request,message)
|
||||
|
||||
kwargs = {
|
||||
'id':int(id)}
|
||||
'id':id}
|
||||
|
||||
url = reverse('workout_wind_view',kwargs=kwargs)
|
||||
response = HttpResponseRedirect(url)
|
||||
@@ -1859,7 +1863,7 @@ def workout_downloadmetar_view(request,id=0,
|
||||
message = "No latitude/longitude data"
|
||||
messages.error(request,message)
|
||||
kwargs = {
|
||||
'id':int(id)
|
||||
'id':id
|
||||
}
|
||||
url = reverse('workout_wind_view',kwargs=kwargs)
|
||||
response = HttpResponseRedirect(url)
|
||||
@@ -1963,7 +1967,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""):
|
||||
message = "Invalid Form"
|
||||
messages.error(request,message)
|
||||
kwargs = {
|
||||
'id':int(id)
|
||||
'id':id
|
||||
}
|
||||
url = reverse('workout_wind_view',kwargs=kwargs)
|
||||
response = HttpResponseRedirect(url)
|
||||
@@ -1972,7 +1976,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""):
|
||||
form = UpdateWindForm()
|
||||
|
||||
# create interactive plot
|
||||
res = interactive_windchart(id,promember=1)
|
||||
res = interactive_windchart(encoder.decode_hex(id),promember=1)
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
|
||||
@@ -2050,7 +2054,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""):
|
||||
message = "Invalid Form"
|
||||
messages.error(request,message)
|
||||
kwargs = {
|
||||
'id':int(id)}
|
||||
'id':id}
|
||||
url = reverse('workout_wind_view',kwargs=kwargs)
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
@@ -2058,7 +2062,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""):
|
||||
form = UpdateStreamForm()
|
||||
|
||||
# create interactive plot
|
||||
res = interactive_streamchart(id,promember=1)
|
||||
res = interactive_streamchart(encoder.decode_hex(id),promember=1)
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
|
||||
@@ -2173,7 +2177,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
|
||||
successmessage = 'Your calculations have been submitted. You will receive an email when they are done. You can check the status of your calculations <a href="/rowers/jobs-status/" target="_blank">here</a>'
|
||||
messages.info(request,successmessage)
|
||||
kwargs = {
|
||||
'id':int(id)}
|
||||
'id':id}
|
||||
|
||||
try:
|
||||
url = request.session['referer']
|
||||
@@ -2187,7 +2191,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
|
||||
message = "Invalid Form"
|
||||
messages.error(request,message)
|
||||
kwargs = {
|
||||
'id':int(id)}
|
||||
'id':id}
|
||||
url = reverse('workout_otwsetpower_view',kwargs=kwargs)
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
@@ -2366,7 +2370,7 @@ def workout_data_view(request, id=0):
|
||||
]
|
||||
|
||||
|
||||
datadf,row = dataprep.getrowdata_db(id=id)
|
||||
datadf,row = dataprep.getrowdata_db(id=encoder.decode_hex(id))
|
||||
|
||||
|
||||
datadf.sort_values(['ftime'],inplace=True)
|
||||
@@ -2473,14 +2477,14 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
|
||||
|
||||
|
||||
# prepare data frame
|
||||
datadf,row = dataprep.getrowdata_db(id=id)
|
||||
datadf,row = dataprep.getrowdata_db(id=encoder.decode_hex(id))
|
||||
if (checkworkoutuser(request.user,row)==False):
|
||||
raise PermissionDenied('Access Denied')
|
||||
|
||||
datadf = dataprep.clean_df_stats(datadf,workstrokesonly=workstrokesonly)
|
||||
|
||||
if datadf.empty:
|
||||
datadf,row = dataprep.getrowdata_db(id=id)
|
||||
datadf,row = dataprep.getrowdata_db(id=encoder.decode_hex(id))
|
||||
datadf = dataprep.clean_df_stats(datadf,workstrokesonly=False)
|
||||
workstrokesonly=False
|
||||
if datadf.empty:
|
||||
@@ -2964,7 +2968,7 @@ def workout_flexchart3_view(request,*args,**kwargs):
|
||||
css_resources,
|
||||
workstrokesonly
|
||||
) = interactive_flex_chart2(
|
||||
id,xparam=xparam,yparam1=yparam1,
|
||||
encoder.decode_hex(id),xparam=xparam,yparam1=yparam1,
|
||||
yparam2=yparam2,
|
||||
promember=promember,plottype=plottype,
|
||||
workstrokesonly=workstrokesonly
|
||||
@@ -2977,7 +2981,7 @@ def workout_flexchart3_view(request,*args,**kwargs):
|
||||
css_resources,
|
||||
workstrokesonly
|
||||
) = interactive_flex_chart2(
|
||||
id,xparam=xparam,yparam1=yparam1,
|
||||
encoder.decode_hex(id),xparam=xparam,yparam1=yparam1,
|
||||
yparam2=yparam2,
|
||||
promember=promember,plottype=plottype,
|
||||
workstrokesonly=workstrokesonly
|
||||
@@ -3044,7 +3048,7 @@ def workout_flexchart3_view(request,*args,**kwargs):
|
||||
|
||||
flexoptionsform = FlexOptionsForm(initial=initial)
|
||||
|
||||
row = Workout.objects.get(id=id)
|
||||
row = Workout.objects.get(id=encoder.decode_hex(id))
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
@@ -3076,7 +3080,7 @@ def workout_flexchart3_view(request,*args,**kwargs):
|
||||
'js_res': js_resources,
|
||||
'css_res':css_resources,
|
||||
'teams':get_my_teams(request.user),
|
||||
'id':int(id),
|
||||
'id':id,
|
||||
'xparam':xparam,
|
||||
'yparam1':yparam1,
|
||||
'yparam2':yparam2,
|
||||
@@ -3135,7 +3139,7 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""):
|
||||
mayedit=1
|
||||
|
||||
# create interactive plot
|
||||
res = interactive_otw_advanced_pace_chart(id,promember=promember)
|
||||
res = interactive_otw_advanced_pace_chart(encoder.decode_hex(id),promember=promember)
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
|
||||
@@ -3213,7 +3217,7 @@ def workout_comment_view(request,id=0):
|
||||
c.save()
|
||||
url = reverse('workout_comment_view',
|
||||
kwargs={
|
||||
'id':id
|
||||
'id':id,
|
||||
})
|
||||
message = '{name} says: <a href="{url}">{comment}</a>'.format(
|
||||
name = request.user.first_name,
|
||||
@@ -3342,20 +3346,20 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
|
||||
try:
|
||||
boattype = request.POST['boattype']
|
||||
except KeyError:
|
||||
boattype = Workout.objects.get(id=id).boattype
|
||||
boattype = Workout.objects.get(id=encoder.decode_hex(id)).boattype
|
||||
try:
|
||||
privacy = request.POST['privacy']
|
||||
except KeyError:
|
||||
privacy = Workout.objects.get(id=id).privacy
|
||||
privacy = Workout.objects.get(id=row.id).privacy
|
||||
try:
|
||||
rankingpiece = form.cleaned_data['rankingpiece']
|
||||
except KeyError:
|
||||
rankingpiece =- Workout.objects.get(id=id).rankingpiece
|
||||
rankingpiece =- Workout.objects.get(id=row.id).rankingpiece
|
||||
|
||||
try:
|
||||
duplicate = form.cleaned_data['duplicate']
|
||||
except KeyError:
|
||||
duplicate = Workout.objects.get(id=id).duplicate
|
||||
duplicate = Workout.objects.get(id=row.id).duplicate
|
||||
|
||||
if private:
|
||||
privacy = 'private'
|
||||
@@ -3418,7 +3422,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
|
||||
return HttpResponse("Error: CSV Data File Not Found")
|
||||
r.rowdatetime = startdatetime
|
||||
r.write_csv(row.csvfilename,gzip=True)
|
||||
dataprep.update_strokedata(id,r.df)
|
||||
dataprep.update_strokedata(encoder.decode_hex(id),r.df)
|
||||
successmessage = "Changes saved"
|
||||
|
||||
if rankingpiece:
|
||||
@@ -3427,7 +3431,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
|
||||
messages.info(request,successmessage)
|
||||
url = reverse('workout_edit_view',
|
||||
kwargs = {
|
||||
'id':str(row.id),
|
||||
'id':encoder.encode_hex(row.id),
|
||||
})
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
@@ -3486,11 +3490,11 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':get_workout_default_page(request,id),
|
||||
'url':get_workout_default_page(request,encoder.encode_hex(row.id)),
|
||||
'name': row.name
|
||||
},
|
||||
{
|
||||
'url':reverse('workout_edit_view',kwargs={'id':id}),
|
||||
'url':reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(row.id)}),
|
||||
'name': 'Edit'
|
||||
}
|
||||
|
||||
@@ -3631,7 +3635,7 @@ def workout_uploadimage_view(request,id):
|
||||
messages.error(request,message)
|
||||
url = reverse(r.defaultlandingpage,
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
'id':id,
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@@ -3729,7 +3733,7 @@ def workout_add_chart_view(request,id,plotnr=1):
|
||||
request.session['async_tasks'] = [(jobid,'make_plot')]
|
||||
|
||||
|
||||
url = reverse(r.defaultlandingpage,kwargs={'id':str(w.id)})
|
||||
url = reverse(r.defaultlandingpage,kwargs={'id':encoder.encode_hex(w.id)})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@@ -4004,9 +4008,11 @@ def workout_upload_view(request,
|
||||
if message:
|
||||
messages.error(request,message)
|
||||
|
||||
w = Workout.objects.get(id=id)
|
||||
|
||||
url = reverse('workout_edit_view',
|
||||
kwargs = {
|
||||
'id':int(id),
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
|
||||
if is_ajax:
|
||||
@@ -4014,7 +4020,6 @@ def workout_upload_view(request,
|
||||
else:
|
||||
response = HttpResponseRedirect(url)
|
||||
|
||||
w = Workout.objects.get(id=id)
|
||||
|
||||
r = getrower(request.user)
|
||||
if (make_plot):
|
||||
@@ -4135,7 +4140,7 @@ def workout_upload_view(request,
|
||||
if landingpage != 'workout_upload_view':
|
||||
url = reverse(landingpage,
|
||||
kwargs = {
|
||||
'id':w.id,
|
||||
'id':encoder.encode_hex(w.id),
|
||||
})
|
||||
else:
|
||||
url = reverse(landingpage)
|
||||
@@ -4326,7 +4331,7 @@ def team_workout_upload_view(request,message="",
|
||||
url = reverse('team_workout_upload_view')
|
||||
|
||||
response = HttpResponseRedirect(url)
|
||||
w = Workout.objects.get(id=id)
|
||||
w = Workout.objects.get(id=encoder.decode_hex(id))
|
||||
|
||||
r = getrower(request.user)
|
||||
if (make_plot):
|
||||
@@ -4459,12 +4464,7 @@ def graph_show_view(request,id):
|
||||
# Restore original stroke data and summary
|
||||
@login_required()
|
||||
def workout_summary_restore_view(request,id,message="",successmessage=""):
|
||||
try:
|
||||
row = Workout.objects.get(id=id)
|
||||
if (checkworkoutuser(request.user,row)==False):
|
||||
raise PermissionDenied("You are not allowed to edit this workout")
|
||||
except Workout.DoesNotExist:
|
||||
raise Http404("Workout doesn't exist")
|
||||
row = get_workout_permitted(request.user,id)
|
||||
|
||||
s = ""
|
||||
# still here - this is a workout we may edit
|
||||
@@ -4489,14 +4489,14 @@ def workout_summary_restore_view(request,id,message="",successmessage=""):
|
||||
raise Http404("Error: CSV Data File Not Found")
|
||||
rowdata.restoreintervaldata()
|
||||
rowdata.write_csv(f1,gzip=True)
|
||||
dataprep.update_strokedata(id,rowdata.df)
|
||||
dataprep.update_strokedata(encoder.decode_hex(id),rowdata.df)
|
||||
intervalstats = rowdata.allstats()
|
||||
row.summary = intervalstats
|
||||
row.save()
|
||||
|
||||
# create interactive plot
|
||||
try:
|
||||
res = interactive_chart(id,promember=1)
|
||||
res = interactive_chart(encoder.decode_hex(id),promember=1)
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
except ValueError:
|
||||
@@ -4506,14 +4506,14 @@ def workout_summary_restore_view(request,id,message="",successmessage=""):
|
||||
messages.info(request,'Original Interval Data Restored')
|
||||
url = reverse('workout_summary_edit_view',
|
||||
kwargs={
|
||||
'id':int(id),
|
||||
'id':encoder.encode_hex(row.id),
|
||||
}
|
||||
)
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Split a workout
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
def workout_split_view(request,id=id):
|
||||
def workout_split_view(request,id=0):
|
||||
row = get_workout_permitted(request.user,id)
|
||||
|
||||
r = row.user
|
||||
@@ -4524,11 +4524,11 @@ def workout_split_view(request,id=id):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':get_workout_default_page(request,row.id),
|
||||
'url':get_workout_default_page(request,id),
|
||||
'name': row.name
|
||||
},
|
||||
{
|
||||
'url':reverse('graph_show_view',
|
||||
'url':reverse('workout_split_view',
|
||||
kwargs={'id':id}),
|
||||
'name': 'Chart'
|
||||
}
|
||||
@@ -4586,7 +4586,7 @@ def workout_split_view(request,id=id):
|
||||
|
||||
# create interactive plot
|
||||
try:
|
||||
res = interactive_chart(id,promember=1)
|
||||
res = interactive_chart(encoder.decode_hex(id),promember=1)
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
except ValueError:
|
||||
@@ -4607,6 +4607,12 @@ def workout_split_view(request,id=id):
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
def workout_fusion_view(request,id1=0,id2=1):
|
||||
|
||||
try:
|
||||
id1 = encoder.decode_hex(id1)
|
||||
id2 = encoder.decode_hex(id2)
|
||||
except:
|
||||
pass
|
||||
|
||||
r = getrower(request.user)
|
||||
|
||||
try:
|
||||
@@ -4645,7 +4651,7 @@ def workout_fusion_view(request,id1=0,id2=1):
|
||||
|
||||
url = reverse('workout_edit_view',
|
||||
kwargs={
|
||||
'id':idnew,
|
||||
'id':encoder.encode_hex(idnew),
|
||||
})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -4658,17 +4664,21 @@ def workout_fusion_view(request,id1=0,id2=1):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':get_workout_default_page(request,w1.id),
|
||||
'name': str(w1.id)
|
||||
'url':get_workout_default_page(request,encoder.encode_hex(w1.id)),
|
||||
'name': encoder.encode_hex(w1.id)
|
||||
},
|
||||
{
|
||||
'url':reverse('workout_fusion_list',kwargs={'id':id1}),
|
||||
'url':reverse('workout_fusion_list',
|
||||
kwargs={'id':encoder.encode_hex(id1)}),
|
||||
'name': 'Sensor Fusion'
|
||||
},
|
||||
{
|
||||
'url':reverse('workout_fusion_view',
|
||||
kwargs={'id1':id1,'id2':id2}),
|
||||
'name': str(w2.id)
|
||||
kwargs={
|
||||
'id1':encoder.encode_hex(id1),
|
||||
'id2':encoder.encode_hex(id2)
|
||||
}),
|
||||
'name': encoder.encode_hex(w2.id)
|
||||
}
|
||||
|
||||
]
|
||||
@@ -4697,7 +4707,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':get_workout_default_page(request,row.id),
|
||||
'url':get_workout_default_page(request,encoder.encode_hex(row.id)),
|
||||
'name': row.name
|
||||
},
|
||||
{
|
||||
@@ -4837,7 +4847,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
||||
|
||||
rowdata.write_csv(f1,gzip=True)
|
||||
|
||||
dataprep.update_strokedata(id,rowdata.df)
|
||||
dataprep.update_strokedata(encoder.decode_hex(id),rowdata.df)
|
||||
|
||||
messages.info(request,"Updated interval data saved")
|
||||
data = {
|
||||
@@ -4881,7 +4891,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
||||
|
||||
row.save()
|
||||
rowdata.write_csv(f1,gzip=True)
|
||||
dataprep.update_strokedata(id,rowdata.df)
|
||||
dataprep.update_strokedata(encoder.decode_hex(id),rowdata.df)
|
||||
messages.info(request,"Updated interval data saved")
|
||||
data = {'intervalstring':s}
|
||||
form = SummaryStringForm(initial=data)
|
||||
@@ -4996,7 +5006,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
||||
|
||||
row.save()
|
||||
rowdata.write_csv(f1,gzip=True)
|
||||
dataprep.update_strokedata(id,rowdata.df)
|
||||
dataprep.update_strokedata(encoder.decode_hex(id),rowdata.df)
|
||||
messages.info(request,"Updated interval data saved")
|
||||
|
||||
form = SummaryStringForm()
|
||||
@@ -5077,11 +5087,12 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
||||
'normp': normp,
|
||||
'normv': normv,
|
||||
}
|
||||
res = interactive_chart(id,promember=1,intervaldata=intervaldata)
|
||||
res = interactive_chart(encoder.decode_hex(id),promember=1,intervaldata=intervaldata)
|
||||
script = res[0]
|
||||
div = res[1]
|
||||
except ValueError:
|
||||
pass
|
||||
script = ''
|
||||
div = ''
|
||||
|
||||
# render page
|
||||
|
||||
@@ -5150,6 +5161,13 @@ class GraphDelete(DeleteView):
|
||||
|
||||
return obj
|
||||
|
||||
def workout_code_delete_view(request,id=0):
|
||||
pk = encoder.decode_hex(id)
|
||||
|
||||
url = reverse('workout_delete',kwargs={'pk':pk})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
class WorkoutDelete(DeleteView):
|
||||
login_required = True
|
||||
model = Workout
|
||||
@@ -5165,8 +5183,8 @@ class WorkoutDelete(DeleteView):
|
||||
'name':'Workouts'
|
||||
},
|
||||
{
|
||||
'url':get_workout_default_page(self.request,self.object.id),
|
||||
'name': str(self.object.id)
|
||||
'url':get_workout_default_page(self.request,encoder.encode_hex(self.object.id)),
|
||||
'name': encoder.encode_hex(self.object.id)
|
||||
},
|
||||
{ 'url':reverse('workout_delete',kwargs={'pk':str(self.object.pk)}),
|
||||
'name': 'Delete'
|
||||
|
||||
+212
-112
File diff suppressed because it is too large
Load Diff
@@ -461,3 +461,9 @@ try:
|
||||
PAYMENT_PROCESSING_ON = CFG['payment_processing_on']
|
||||
except KeyError:
|
||||
PAYMENT_PROCESSING_ON = False
|
||||
|
||||
# ID obfuscation
|
||||
try:
|
||||
OPAQUE_SECRET_KEY = CFG['opaque_secret_key']
|
||||
except KeyError:
|
||||
OPAQUE_SECRET_KEY = 0xa193443a
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
<div class="grid_4 alpha">
|
||||
<div class="grid_1 alpha">
|
||||
<p id="header">
|
||||
<a class="button gray small" href="/rowers/videos">Videos</a></p>
|
||||
<a class="button gray small" href="/rowers/videos/">Videos</a></p>
|
||||
</div>
|
||||
<div class="grid_2">
|
||||
<p id="header">
|
||||
@@ -118,7 +118,7 @@
|
||||
</div>
|
||||
<div class="grid_1 omega">
|
||||
<p id="header">
|
||||
<a class="button gray small" href="/rowers/email">Contact</a>
|
||||
<a class="button gray small" href="/rowers/email/">Contact</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid_4 alpha">
|
||||
@@ -131,9 +131,9 @@
|
||||
{% if user.is_authenticated %}
|
||||
<p>
|
||||
{% if user.first_name %}
|
||||
<a class="button gray small" href="/rowers/me/edit">{{ user.first_name }}</a>
|
||||
<a class="button gray small" href="/rowers/me/edit/">{{ user.first_name }}</a>
|
||||
{% else %}
|
||||
<a class="button gray small" href="/rowers/me/edit">{{ user }}</a>
|
||||
<a class="button gray small" href="/rowers/me/edit/">{{ user }}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<span class="tooltiptext">Edit user account, e.g. heart rate zones, power zones, email, teams</span>
|
||||
@@ -144,7 +144,7 @@
|
||||
</div>
|
||||
<div class="grid_1">
|
||||
{% if user.is_authenticated %}
|
||||
<p><a class="button gray small" href="{% url 'logout' %}?next=/login">logout</a></p>
|
||||
<p><a class="button gray small" href="{% url 'logout' %}?next=/login/">logout</a></p>
|
||||
{% else %}
|
||||
<p> </p>
|
||||
{% endif %}
|
||||
|
||||
Reference in New Issue
Block a user