Private
Public Access
1
0

adding functionality to comment on planned sessions and races

This commit is contained in:
Sander Roosendaal
2019-02-13 15:13:49 +01:00
parent da4d39709e
commit 3709ad7ccb
12 changed files with 305 additions and 10 deletions

View File

@@ -1,6 +1,150 @@
from statements import *
@login_required()
def plannedsession_comment_view(request,id=0,userid=0):
r = getrequestrower(request,userid=userid)
try:
ps = PlannedSession.objects.get(id=id)
except PlannedSession.DoesNotExist:
raise Http404("Planned Session does not exist")
m = ps.manager
mm = Rower.objects.get(user=m)
if ps.manager != request.user and ps.sessiontype not in ['race','indoorrace']:
if r.rowerplan == 'coach' and r not in ps.rower.all():
teams = Team.objects.filter(manager=request.user)
members = Rower.objects.filter(team__in=teams).distinct()
teamusers = [m.user for m in members]
if ps.manager not in teamusers:
raise PermissionDenied("You do not have access to this session")
elif r not in ps.rower.all():
raise PermissionDenied("You do not have access to this session")
comments = PlannedSessionComment.objects.filter(plannedsession=ps).order_by("created")
if request.method == 'POST':
manager = ps.manager
form = PlannedSessionCommentForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
comment = cd['comment']
comment = bleach.clean(comment)
if isinstance(comment,unicode):
comment = comment.encode('utf8')
elif isinstance(comment, str):
comment = comment.decode('utf8')
notification = cd['notification']
c = PlannedSessionComment(plannedsession=ps,user=request.user,comment=comment,
notification=notification)
c.save()
url = reverse('plannedsession_comment_view',
kwargs={
'id':id
})
message = '{name} says: <a href="{url}">{comment}</a>'.format(
name = request.user.first_name,
comment = comment,
url = url,
)
if request.user != manager:
a_messages.info(r.user,message.encode('ascii','ignore'))
sessiontype = 'training session'
if ps.sessiontype == 'race':
sessiontype = 'online virtual race'
elif ps.sessiontype == 'indoorrace':
sessiontype = 'indoor online virtual race'
res = myqueue(queuehigh,
handle_sendemailnewcomment,r.user.first_name,
r.user.last_name,
r.user.email,
request.user.first_name,
request.user.last_name,
comment,ps.name,ps.id,
emailbounced = r.emailbounced,
sessiontype = sessiontype,
commentlink = url
)
commenters = {oc.user for oc in comments if oc.notification}
for u in commenters:
a_messages.info(u,message)
if u != request.user and u != r.user:
ocr = Rower.objects.get(user=u)
res = myqueue(queuelow,
handle_sendemailnewresponse,
u.first_name,
u.last_name,
u.email,
request.user.first_name,
request.user.last_name,
comment,
ps.name,
ps.id,
c.id,
emailbounced = ocr.emailbounced,
sessiontype = sessiontype,
commentlink = url
)
url = reverse('plannedsession_comment_view',kwargs={'id':ps.id})
return HttpResponseRedirect(url)
form = WorkoutCommentForm()
rower = getrower(request.user)
if ps.sessiontype in ['race','indoorrace']:
breadcrumbs = [
{
'url':reverse('virtualevents_view'),
'name': 'Races'
},
{
'url': reverse('virtualevent_view',kwargs={'id':ps.id}),
'name': ps.name
},
{
'url':reverse('plannedsession_comment_view',kwargs={'id':ps.id}),
'name': 'Comments'
}
]
active = 'nav-racing'
else:
breadcrumbs = [
{
'url':reverse('virtualevents_view'),
'name': 'Races'
},
{
'url': reverse('virtualevent_view',kwargs={'id':ps.id}),
'name': ps.name
},
{
'url':reverse('plannedsession_comment_view',kwargs={'id':ps.id}),
'name': 'Comments'
}
]
active = 'nav-plan'
return render(request,
'plannedsession_comments.html',
{'plannedsession':ps,
'rower':rower,
'breadcrumbs':breadcrumbs,
'active':active,
'comments':comments,
'form':form,
})
# Cloning sessions
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/",
message="This functionality requires a Coach or Self-Coach plan",
@@ -1385,7 +1529,7 @@ def plannedsession_view(request,id=0,userid=0):
raise Http404("Planned Session does not exist")
if ps.sessiontype in ['race','indoorrace']:
url = reverse(virtualevent_view,
url = reverse('virtualevent_view',
kwargs={'id':ps.id}
)
return HttpResponseRedirect(url)
@@ -1522,6 +1666,8 @@ def plannedsession_view(request,id=0,userid=0):
}
]
comments = PlannedSessionComment.objects.filter(plannedsession=ps).order_by("created")
return render(request,'plannedsessionview.html',
{
'psdict': psdict,
@@ -1544,7 +1690,8 @@ def plannedsession_view(request,id=0,userid=0):
'timeperiod':timeperiod,
'ranking':ranking,
'coursescript': coursescript,
'coursediv': coursediv
'coursediv': coursediv,
'comments': comments,
}
)

View File

@@ -882,6 +882,9 @@ def virtualevent_view(request,id=0):
else:
racelogo = None
comments = PlannedSessionComment.objects.filter(plannedsession=race).order_by("created")
return render(request,'virtualevent.html',
{
'coursescript':script,
@@ -896,6 +899,7 @@ def virtualevent_view(request,id=0):
'racelogo':racelogo,
'form':form,
'active':'nav-racing',
'comments':comments
})
def virtualevent_ranking_view(request,id=0):

View File

@@ -87,6 +87,7 @@ from rowers.models import (
microcyclecheckdates,mesocyclecheckdates,macrocyclecheckdates,
TrainingMesoCycleForm, TrainingMicroCycleForm,
RaceLogo,RowerBillingAddressForm,PaidPlan,
PlannedSessionComment,
)
from rowers.models import (
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
@@ -97,7 +98,7 @@ from rowers.models import (
PlannedSessionFormSmall,GeoCourseEditForm,VirtualRace,
VirtualRaceForm,VirtualRaceResultForm,RowerImportExportForm,
IndoorVirtualRaceResultForm,IndoorVirtualRaceResult,
IndoorVirtualRaceForm,
IndoorVirtualRaceForm,PlannedSessionCommentForm,
)
from rowers.models import (
FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement,BasePlannedSessionFormSet,