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