diff --git a/rowers/templates/panel_delete.html b/rowers/templates/panel_delete.html
new file mode 100644
index 00000000..1668a635
--- /dev/null
+++ b/rowers/templates/panel_delete.html
@@ -0,0 +1,5 @@
+
diff --git a/rowers/templates/panel_export.html b/rowers/templates/panel_export.html
new file mode 100644
index 00000000..543df100
--- /dev/null
+++ b/rowers/templates/panel_export.html
@@ -0,0 +1,5 @@
+
diff --git a/rowers/templates/panel_middlesocial.html b/rowers/templates/panel_middlesocial.html
new file mode 100644
index 00000000..b1c917d2
--- /dev/null
+++ b/rowers/templates/panel_middlesocial.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/rowers/templates/panel_social.html b/rowers/templates/panel_social.html
new file mode 100644
index 00000000..a1c993de
--- /dev/null
+++ b/rowers/templates/panel_social.html
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/rowers/templates/workflow.html b/rowers/templates/workflow.html
index 01a0d55c..1a632bae 100644
--- a/rowers/templates/workflow.html
+++ b/rowers/templates/workflow.html
@@ -3,7 +3,6 @@
{% load rowerfilters %}
{% load tz %}
-
{% get_current_timezone as TIME_ZONE %}
{% block title %}{{ workout.name }}{% endblock %}
diff --git a/rowers/templatetags/do_include_maybe.py b/rowers/templatetags/do_include_maybe.py
new file mode 100644
index 00000000..d6c0a39e
--- /dev/null
+++ b/rowers/templatetags/do_include_maybe.py
@@ -0,0 +1,28 @@
+from django import template
+from django.template.loader_tags import do_include
+from django.template.defaulttags import CommentNode
+register = template.Library()
+
+@register.tag('do_include_maybe')
+def do_include_maybe(parser, token):
+ "Source: http://stackoverflow.com/a/18951166/15690"
+ bits = token.split_contents()
+ if len(bits) < 2:
+ raise template.TemplateSyntaxError(
+ "%r tag takes at least one argument: "
+ "the name of the template to be included." % bits[0])
+
+ try:
+ silent_node = do_include(parser, token)
+ except template.TemplateDoesNotExist:
+ # Django < 1.7
+ return CommentNode()
+
+ _orig_render = silent_node.render
+ def wrapped_render(*args, **kwargs):
+ try:
+ return _orig_render(*args, **kwargs)
+ except template.TemplateDoesNotExist:
+ return CommentNode()
+ silent_node.render = wrapped_render
+ return silent_node
diff --git a/rowers/templatetags/include_maybe.py b/rowers/templatetags/include_maybe.py
new file mode 100644
index 00000000..3e3d2e9b
--- /dev/null
+++ b/rowers/templatetags/include_maybe.py
@@ -0,0 +1,28 @@
+from django import template
+from django.template.loader_tags import do_include
+from django.template.defaulttags import CommentNode
+register = template.Library()
+
+@register.tag('include_maybe')
+def do_include_maybe(parser, token):
+ "Source: http://stackoverflow.com/a/18951166/15690"
+ bits = token.split_contents()
+ if len(bits) < 2:
+ raise template.TemplateSyntaxError(
+ "%r tag takes at least one argument: "
+ "the name of the template to be included." % bits[0])
+
+ try:
+ silent_node = do_include(parser, token)
+ except template.TemplateDoesNotExist:
+ # Django < 1.7
+ return CommentNode()
+
+ _orig_render = silent_node.render
+ def wrapped_render(*args, **kwargs):
+ try:
+ return _orig_render(*args, **kwargs)
+ except template.TemplateDoesNotExist:
+ return CommentNode()
+ silent_node.render = wrapped_render
+ return silent_node
diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py
index 12cd75b1..123faa9e 100644
--- a/rowers/templatetags/rowerfilters.py
+++ b/rowers/templatetags/rowerfilters.py
@@ -118,7 +118,6 @@ def user_teams(user):
return teams
-
@register.filter
def has_teams(user):
try:
diff --git a/rowers/utils.py b/rowers/utils.py
index 8f2e62a8..46ce0af2 100644
--- a/rowers/utils.py
+++ b/rowers/utils.py
@@ -11,6 +11,7 @@ workflowmiddlepanel = (
('panel_summary.html','Summary'),
('panel_map.html','Map'),
('panel_comments.html','Basic Info and Links'),
+ ('panel_middlesocial.html','Social Media Share Buttons'),
)
defaultmiddle = ['panel_statcharts.html',
@@ -20,6 +21,9 @@ defaultmiddle = ['panel_statcharts.html',
workflowleftpanel = (
('panel_navigationheader.html','Navigation Header'),
('panel_editbuttons.html','Edit Workout Button'),
+ ('panel_delete.html','Delete Workout Button'),
+ ('panel_export.html','Export Workout Button'),
+ ('panel_social.html','Social Media Share Buttons'),
('panel_advancededit.html','Advanced Workout Edit Button'),
('panel_editintervals.html','Edit Intervals Button'),
('panel_stats.html','Workout Statistics Button'),
diff --git a/rowers/views.py b/rowers/views.py
index 7cbeaaf6..09238cbc 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -12,6 +12,7 @@ from PIL import Image
from numbers import Number
from django.views.generic.base import TemplateView
from django.db.models import Q
+from django import template
from django.db import IntegrityError, transaction
from django.shortcuts import render
from django.http import (
@@ -6049,11 +6050,24 @@ def workout_workflow_view(request,id):
statcharts = GraphImage.objects.filter(workout=row)
- # This will be user configurable in the future
- middleTemplates = r.workflowmiddlepanel
- leftTemplates = r.workflowleftpanel
+ middleTemplates = []
+ for t in r.workflowmiddlepanel:
+ try:
+ template.loader.get_template(t)
+ middleTemplates.append(t)
+ except template.TemplateDoesNotExist:
+ pass
+ leftTemplates = []
+ for t in r.workflowleftpanel:
+ try:
+ template.loader.get_template(t)
+ leftTemplates.append(t)
+ except template.TemplateDoesNotExist:
+ pass
+
+
return render(request,
'workflow.html',
{