adding functionality to comment on planned sessions and races
This commit is contained in:
@@ -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,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user