diff --git a/rowers/models.py b/rowers/models.py index 3fea4dbb..6e57bfaa 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2917,6 +2917,16 @@ def update_duplicates_on_delete(sender, instance, **kwargs): # conn.close() # engine.dispose() +class VirtualRaceFollower(models.Model): + user = models.ForeignKey(User,on_delete=models.CASCADE,null=True) + race = models.ForeignKey(VirtualRace,on_delete=models.CASCADE) + emailaddress = models.EmailField(max_length=254,blank=True,null=True) + +class FollowerForm(ModelForm): + class Meta: + model = VirtualRaceFollower + fields = ['emailaddress'] + # Virtual Race results (for keeping results when workouts are deleted) @python_2_unicode_compatible class VirtualRaceResult(models.Model): diff --git a/rowers/templates/followerform.html b/rowers/templates/followerform.html new file mode 100644 index 00000000..433dabbd --- /dev/null +++ b/rowers/templates/followerform.html @@ -0,0 +1,47 @@ +{% extends "newbase.html" %} +{% load staticfiles %} +{% load rowerfilters %} +{% load tz %} + +{% block scripts %} +{% include "monitorjobs.html" %} +{% endblock %} + +{% block title %}Comment Session {% endblock %} + +{% block main %} + +

Comments {{ plannedession.name }}

+ +
    +
  • + {% for c in comments %} +

    + {{ c.created }} + {{ c.user.first_name }} {{ c.user.last_name }} +

    +
    + {{ c.comment }} +
    +
    +

    + {% endfor %} +
    + + {{ form.as_table }} +
    + {% csrf_token %} + +
    +
  • +
+ +{% endblock %} + +{% block sidebar %} +{% if 'racing' in active %} +{% include 'menu_racing.html' %} +{% else %} +{% include 'menu_plan.html' %} +{% endif %} +{% endblock %} diff --git a/rowers/templates/virtualevent.html b/rowers/templates/virtualevent.html index 3e2297ce..47debfd0 100644 --- a/rowers/templates/virtualevent.html +++ b/rowers/templates/virtualevent.html @@ -160,12 +160,14 @@
{% if request.user.is_anonymous %}

- Registered users of rowsandall.com can participate in this challenge. Participation is free, unless specified differently in the race comment above. + Registered users of rowsandall.com can participate in this challenge. + Participation is free, unless specified differently in the race comment above. {% if race.sessiontype == 'race' %}

Register

{% else %}

Register

{% endif %} +

Follow this challenge

{% else %}

@@ -184,6 +186,7 @@ {% else %}

Register

{% endif %} +

Follow this challenge

{% endif %} {% if button == 'submitbutton' %} diff --git a/rowers/urls.py b/rowers/urls.py index 1997e73f..b7fdeeb3 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -346,6 +346,8 @@ urlpatterns = [ views.virtualevent_uploadimage_view,name='virtualevent_uploadimage_view'), re_path(r'^virtualevent/(?P\d+)/setimage/(?P\d+)/$', views.virtualevent_setlogo_view,name='virtualevent_setlog_view'), + re_path(r'^virtualevent/(?P\d+)/follow/$', + views.addfollower_view,name='addfollower_view'), re_path(r'^logo/(?P\d+)/delete/$', views.logo_delete_view,name='logo_delete_view'), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/darkskywind/$',views.workout_downloadwind_view,name='workout_downloadwind_view'), diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index ed1c53db..d58d1379 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -2820,3 +2820,71 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): 'rower':r, 'w_form':w_form, }) + +def addfollower_view(request,id=0): + try: + race = VirtualRace.objects.get(id=id) + except VirtualRace.DoesNotExist: + raise Http404("Virtual Challenge does not exist") + + if not request.user.is_anonymous: + follower = VirtualRaceFollower( + user=request.user, + race=race, + emailaddress = request.user.email + ) + follower.save() + messages.info(request,"You will receive challenge notifications per email") + url = reverse(virtualevent_view, + kwargs={'id':id}) + + return HttpResponseRedirect(url) + + # Anonymous + if request.method == 'POST': + form = FollowerForm(request.POST) + if form.is_valid(): + email = form.cleaned_data['emailaddress'] + + follower = VirtualRaceFollower( + race=race, + emailaddress = email + ) + follower.save() + + messages.info(request,"You will receive challenge notifications per email") + + url = reverse(virtualevent_view, + kwargs={'id':id}) + + return HttpResponseRedirect(url) + + else: + form = FollowerForm() + + breadcrumbs = [ + { + 'url':reverse('virtualevents_view'), + 'name': 'Challenges' + }, + { + 'url':reverse('virtualevent_view', + kwargs={'id':race.id} + ), + 'name': race.name + }, + { + 'url': reverse(addfollower_view, + kwargs = {'id':race.id} + ), + 'name': 'Follow' + } + ] + + return render(request,'followerform.html', + { + 'form':form, + 'active':'nav-racing', + 'breadcrumbs':breadcrumbs, + } + ) diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 2a931d32..2bd13221 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -116,6 +116,7 @@ from rowers.models import ( PlannedSessionComment,CoachRequest,CoachOffer, VideoAnalysis,ShareKey, StandardCollection,CourseStandard, + VirtualRaceFollower, ) from rowers.models import ( RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm, @@ -129,7 +130,8 @@ from rowers.models import ( VirtualRaceForm,VirtualRaceResultForm,RowerImportExportForm, IndoorVirtualRaceResultForm,IndoorVirtualRaceResult, IndoorVirtualRaceForm,PlannedSessionCommentForm, - Alert, Condition, StaticChartRowerForm + Alert, Condition, StaticChartRowerForm, + FollowerForm, ) from rowers.models import ( FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement,BasePlannedSessionFormSet,