diff --git a/rowers/rower_rules.py b/rowers/rower_rules.py index 97f9ed0d..7ebfc732 100644 --- a/rowers/rower_rules.py +++ b/rowers/rower_rules.py @@ -387,11 +387,6 @@ rules.add_perm('plannedsession.view_session',can_view_session) rules.add_perm('plannedsession.change_session',can_change_session) rules.add_perm('plannedsession.delete_session',can_delete_session) - - -# checkaccessplanuser (models.py) -# getrequestrower, getrequestplanrower - # TEAM (group) permissions """ @@ -455,8 +450,44 @@ rules.add_perm('teams.delete_team',can_delete_team) - rules to add, view, delete, change - GeoCourse - rules to add, view, delete, change + - RaceLogo """ +@rules.predicate +def can_change_course(user,course): + if user.is_anonymous: + return False + + return course.manager == user.rower + +@rules.predicate +def can_delete_course(user,course): + if user.is_anonymous: + return False + + return course.manager == user.rower + +@rules.predicate +def can_delete_logo(user,logo): + if user.is_anonymous: + return False + + return logo.user == user + +@rules.predicate +def can_change_race(user,race): + if user.is_anonymous: + return False + + return race.manager == user + +rules.add_perm('course.change_course',can_change_course) +rules.add_perm('course.delete_course',can_delete_course) + +rules.add_perm('racelogo.delete_logo',can_delete_logo) + +rules.add_perm('virtualevent.change_race',can_change_race) + # ANALYSIS permissions diff --git a/rowers/urls.py b/rowers/urls.py index b8c65fb6..4a890095 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -191,7 +191,7 @@ urlpatterns = [ views.virtualevent_submit_result_view,name='virtualevent_submit_result_view'), re_path(r'^virtualevent/(?P\d+)/submit/(?P\b[0-9A-Fa-f]+\b)/$', views.virtualevent_submit_result_view,name='virtualevent_submit_result_view'), - re_path(r'^virtualevent/(?P\d+)/disqualify/(?P\d+)/', + re_path(r'^virtualevent/(?P\d+)/disqualify/(?P\d+)/', views.virtualevent_disqualify_view,name='virtualevent_disqualify_view'), re_path(r'^list-workouts/$',views.workouts_view,name='workouts_view'), re_path(r'^list-courses/$',views.courses_view,name='courses_view'), diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index 1cc53312..358afddd 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -45,7 +45,7 @@ def course_map_view(request,id=0): return Http404("Course doesn't exist") script,div = course_map(course) - + breadcrumbs = [ { 'url': reverse('virtualevents_view'), @@ -64,10 +64,10 @@ def course_map_view(request,id=0): 'name': 'Map' } ] - + r = getrower(request.user) - - + + return render(request, 'coursemap.html', { @@ -76,21 +76,16 @@ def course_map_view(request,id=0): 'mapscript':script, 'active':'nav-racing', 'rower':r, - 'breadcrumbs':breadcrumbs, + 'breadcrumbs':breadcrumbs, }) - + @login_required() +@permission_required('course.change_course',fn=get_course_by_pk,raise_exception=True) def course_replace_view(request,id=0): - try: - course = GeoCourse.objects.get(id=id) - except GeoCourse.DoesNotExist: - return Http404("Course doesn't exist") + course = get_object_or_404(GeoCourse,pk=id) r = getrower(request.user) - - if course.manager != r: - raise PermissionDenied("Access denied") thecourses = GeoCourse.objects.filter(manager=r).exclude(id=id) @@ -141,18 +136,13 @@ def course_replace_view(request,id=0): 'mapdiv':div, 'mapscript':script, 'form':form}) - + @login_required() +@permission_required('course.delete_course',fn=get_course_by_pk,raise_exception=True) def course_delete_view(request,id=0): - try: - course = GeoCourse.objects.get(id=id) - except GeoCourse.DoesNotExist: - return Http404("Course doesn't exist") + course = get_object_or_404(GeoCourse,pk=id) r = getrower(request.user) - - if course.manager != r: - raise PermissionDenied("Access denied") ps = PlannedSession.objects.filter(course=course) nosessions = len(ps) == 0 @@ -163,22 +153,17 @@ def course_delete_view(request,id=0): url = reverse(courses_view) return HttpResponseRedirect(url) - + @login_required() +@permission_required('course.change_course',fn=get_course_by_pk,raise_exception=True) def course_edit_view(request,id=0): - try: - course = GeoCourse.objects.get(id=id) - except GeoCourse.DoesNotExist: - return Http404("Course doesn't exist") + course = get_object_or_404(GeoCourse,pk=id) r = getrower(request.user) - - if course.manager != r: - raise PermissionDenied("Access denied") ps = PlannedSession.objects.filter(course=course) nosessions = len(ps) == 0 - + script,div = course_map(course) if request.method == 'POST': @@ -187,7 +172,7 @@ def course_edit_view(request,id=0): name = form.cleaned_data['name'] country = form.cleaned_data['country'] notes = form.cleaned_data['notes'] - + course.name = name course.country = country course.notes = notes @@ -213,7 +198,7 @@ def course_edit_view(request,id=0): 'name': 'Edit' } ] - + return render(request, 'course_edit_view.html', { 'course':course, @@ -235,9 +220,9 @@ def course_view(request,id=0): return Http404("Course doesn't exist") r = getrower(request.user) - + script,div = course_map(course) - + breadcrumbs = [ { 'url': reverse('virtualevents_view'), @@ -266,11 +251,10 @@ def course_view(request,id=0): ) @login_required() +@permission_required('racelogo.delete_logo',fn=get_logo_by_pk,raise_exception=True) def logo_delete_view(request,id=0): - try: - logo = RaceLogo.objects.get(id=id) - except RaceLogo.DoesNotExist: - raise Http404("Logo doesn't exist") + logo = get_object_or_404(RaceLogo,pk=id) + if logo.user == request.user: logo.delete() @@ -281,28 +265,18 @@ def logo_delete_view(request,id=0): return HttpResponseRedirect(url) @login_required() +@permission_required('virtualevent.change_race',fn=get_virtualevent_by_pk,raise_exception=True) def virtualevent_setlogo_view(request,id=0,logoid=0): - try: - race = VirtualRace.objects.get(id=id) - except VirtualRace.DoesNotExist: - raise Http404("Race doesn't exist") + race = get_object_or_404(VirtualRace,pk=id) + logo = get_object_or_404(RaceLogo,pk=logoid) - try: - logo = RaceLogo.objects.get(id=logoid) - except RaceLogo.DoesNotExist: - raise Http404("Logo doesn't exist") + otherlogos = race.logos.all() + for otherlogo in otherlogos: + otherlogo.race.remove(race) - if logo.user == request.user and race.manager == request.user: - otherlogos = race.logos.all() - for otherlogo in otherlogos: - otherlogo.race.remove(race) - - logo.race.add(race) - logo.save() - else: - message = "You do not own this race or this image" - messages.error(request,message) + logo.race.add(race) + logo.save() url = reverse('virtualevent_view', kwargs={'id':id}) @@ -318,10 +292,7 @@ def virtualevent_uploadimage_view(request,id=0): r = getrower(request.user) - try: - race = VirtualRace.objects.get(id=id) - except VirtualRace.DoesNotExist: - raise Http404("Race doesn't exist") + race = get_object_or_404(VirtualRace,pk=id) logos = RaceLogo.objects.filter(user=request.user).order_by("-creationdatetime") @@ -348,7 +319,7 @@ def virtualevent_uploadimage_view(request,id=0): kwargs={'id':id}) return HttpResponseRedirect(url) - + form = ImageForm(request.POST, request.FILES) if form.is_valid(): f = form.cleaned_data['file'] @@ -399,14 +370,14 @@ def virtualevent_uploadimage_view(request,id=0): else: return HttpResponseRedirect(url) else: - + form = ImageForm() if is_ajax: return {'result':0} - + return render(request,'logo_form.html', {'form':form, 'rower':r, @@ -425,7 +396,7 @@ def course_upload_view(request): is_ajax = True r = getrower(request.user) - + if request.method == 'POST': form = CourseForm(request.POST,request.FILES) @@ -435,7 +406,7 @@ def course_upload_view(request): notes = form.cleaned_data['notes'] if f is not None: filename,path_and_filename = handle_uploaded_file(f) - + cs = courses.kmltocourse(path_and_filename) @@ -443,11 +414,11 @@ def course_upload_view(request): cname = name+' - '+course['name'] cnotes = notes+'\n\n'+course['description'] polygons = course['polygons'] - + course = courses.createcourse(r,cname,polygons,notes=cnotes) - + os.remove(path_and_filename) - + url = reverse(courses_view) if is_ajax: return JSONResponse({'result':1,'url':url}) @@ -492,7 +463,7 @@ def virtualevents_view(request): evaluation_closure__gte=timezone.now()-datetime.timedelta(days=3), ) - + races = (races1 | races2).order_by("startdate","start_time") if not request.user.is_anonymous: @@ -524,7 +495,7 @@ def virtualevents_view(request): country__in=countries ) - + races = (races1 | races2).order_by("startdate","start_time") @@ -550,7 +521,7 @@ def virtualevents_view(request): country__in=countries ).order_by("startdate","start_time") else: - + form = VirtualRaceSelectForm() if is_ajax: @@ -558,7 +529,7 @@ def virtualevents_view(request): { 'races':races, 'rower':r, }) - + breadcrumbs = [ { 'url':reverse('virtualevents_view'), @@ -576,18 +547,13 @@ def virtualevents_view(request): ) @login_required() -def virtualevent_disqualify_view(request,raceid=0,recordid=0): +@permission_required('virtualevent.change_race',fn=get_virtualevent_by_pk,raise_exception=True) +def virtualevent_disqualify_view(request,id=0,recordid=0): r = getrower(request.user) + race = get_object_or_404(VirtualRace,pk=id) + - try: - race = VirtualRace.objects.get(id=raceid) - except VirtualRace.DoesNotExist: - raise Http404("Virtual Race does not exist") - - if r.user != race.manager: - raise PermissionDenied("Access denied") - if race.sessiontype == 'race': recordobj = VirtualRaceResult else: @@ -603,7 +569,7 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0): if timezone.now() > race.evaluation_closure+datetime.timedelta(hours=1): messages.error(request,"The evaluation is already closed and the results are official") url = reverse('virtualevent_view',kwargs={'id':raceid}) - + return HttpResponseRedirect(url) if request.method == 'POST': @@ -619,16 +585,16 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0): job = myqueue(queue,handle_send_disqualification_email, r.user.email, name, disqualifier,message,race.name) - + messages.info(request,"We have invalidated the result for: "+str(record)) - + record.coursecompleted = False record.save() url = reverse('virtualevent_view',kwargs={'id':raceid}) return HttpResponseRedirect(url) - + else: form = DisqualificationForm(request.POST) @@ -705,7 +671,7 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0): if race_can_edit(r,race): buttons += ['editbutton'] - + return render(request,"disqualification_view.html", {'workout':workout, 'active':'nav-racing', @@ -723,13 +689,13 @@ def virtualevent_disqualify_view(request,raceid=0,recordid=0): def virtualevent_view(request,id=0): results = [] - + if not request.user.is_anonymous: r = getrower(request.user) else: r = None - + try: race = VirtualRace.objects.get(id=id) except VirtualRace.DoesNotExist: @@ -744,8 +710,8 @@ def virtualevent_view(request,id=0): resultobj = IndoorVirtualRaceResult records = resultobj.objects.filter(race=race) - - + + buttons = [] # to-do - add DNS @@ -755,7 +721,7 @@ def virtualevent_view(request,id=0): race=race, workoutid__isnull=True, ) - + if not request.user.is_anonymous: if race_can_register(r,race): @@ -790,14 +756,14 @@ def virtualevent_view(request,id=0): except KeyError: boattype = mytypes.waterboattype - try: + try: boatclass = cd['boatclass'] except KeyError: if race.sessiontype == 'race': boatclass = [t for t in mytypes.otwtypes] else: boatclass = [t for t in mytypes.otetypes] - + age_min = cd['age_min'] age_max = cd['age_max'] @@ -834,8 +800,8 @@ def virtualevent_view(request,id=0): age__gte=age_min, age__lte=age_max ).order_by("duration","-distance") - - + + # to-do - add DNS dns = [] if timezone.now() > race.evaluation_closure: @@ -860,9 +826,9 @@ def virtualevent_view(request,id=0): form = RaceResultFilterForm(records=records) else: form = None - - + + breadcrumbs = [ { 'url':reverse('virtualevents_view'), @@ -875,7 +841,7 @@ def virtualevent_view(request,id=0): 'name': race.name } ] - + racelogos = race.logos.all() if racelogos: @@ -885,7 +851,7 @@ def virtualevent_view(request,id=0): comments = PlannedSessionComment.objects.filter(plannedsession=race).order_by("created") - + return render(request,'virtualevent.html', { 'coursescript':script, @@ -906,13 +872,13 @@ def virtualevent_view(request,id=0): def virtualevent_ranking_view(request,id=0): results = [] - + if not request.user.is_anonymous: r = getrower(request.user) else: r = None - + try: race = VirtualRace.objects.get(id=id) except VirtualRace.DoesNotExist: @@ -927,8 +893,8 @@ def virtualevent_ranking_view(request,id=0): resultobj = IndoorVirtualRaceResult records = resultobj.objects.filter(race=race) - - + + buttons = [] # to-do - add DNS @@ -938,7 +904,7 @@ def virtualevent_ranking_view(request,id=0): race=race, workoutid__isnull=True, ) - + if not request.user.is_anonymous: if race_can_register(r,race): @@ -973,14 +939,14 @@ def virtualevent_ranking_view(request,id=0): except KeyError: boattype = mytypes.waterboattype - try: + try: boatclass = cd['boatclass'] except KeyError: if race.sessiontype == 'race': boatclass = [t for t in mytypes.otwtypes] else: boatclass = [t for t in mytypes.otetypes] - + age_min = cd['age_min'] age_max = cd['age_max'] @@ -1017,8 +983,8 @@ def virtualevent_ranking_view(request,id=0): age__gte=age_min, age__lte=age_max ).order_by("duration","-distance") - - + + # to-do - add DNS dns = [] if timezone.now() > race.evaluation_closure: @@ -1043,9 +1009,9 @@ def virtualevent_ranking_view(request,id=0): form = RaceResultFilterForm(records=records) else: form = None - - + + breadcrumbs = [ { 'url':reverse('virtualevents_view'), @@ -1058,7 +1024,7 @@ def virtualevent_ranking_view(request,id=0): 'name': race.name } ] - + racelogos = race.logos.all() if racelogos: @@ -1132,7 +1098,7 @@ def virtualevent_addboat_view(request,id=0): boattypes = [record.boattype for record in records] boatclasses = [record.boatclass for record in records] allowedboats = tuple([ type for type in mytypes.boattypes if type[0] not in boattypes] ) - + # we're still here if request.method == 'POST': @@ -1151,14 +1117,14 @@ def virtualevent_addboat_view(request,id=0): sex = r.sex if mix: sex = 'mixed' - + if boattype == '1x' and r.birthdate: age = calculate_age(r.birthdate) sex = r.sex if sex == 'not specified': sex = 'male' - + if boattype in boattypes and boatclass in boatclasses: # check if different sexes therecords = records.filter( @@ -1167,7 +1133,7 @@ def virtualevent_addboat_view(request,id=0): thesexes = [record.sex for record in therecords] if sex in thesexes: - + messages.error( request, "You have already registered in that boat class/type" @@ -1199,11 +1165,11 @@ def virtualevent_addboat_view(request,id=0): ) record.save() - + add_rower_race(r,race) - - + + messages.info( request, "You have successfully registered for this race. Good luck!" @@ -1215,14 +1181,14 @@ def virtualevent_addboat_view(request,id=0): }) return HttpResponseRedirect(url) - + else: initial = { 'age': calculate_age(r.birthdate), 'weightcategory': r.weightcategory, 'adaptiveclass': r.adaptiveclass, } - + form = VirtualRaceResultForm(initial=initial) breadcrumbs = [ @@ -1243,8 +1209,8 @@ def virtualevent_addboat_view(request,id=0): 'name': 'Add Discipline' } ] - - + + buttons = [] if not request.user.is_anonymous: @@ -1311,7 +1277,7 @@ def virtualevent_register_view(request,id=0): sex = r.sex if mix: sex = 'mixed' - + if boattype == '1x' and r.birthdate: age = calculate_age(r.birthdate) sex = r.sex @@ -1338,7 +1304,7 @@ def virtualevent_register_view(request,id=0): ) record.save() - + add_rower_race(r,race) otherrecords = IndoorVirtualRaceResult.objects.filter( @@ -1357,8 +1323,8 @@ def virtualevent_register_view(request,id=0): race.name, race.id ) - - + + messages.info( request, "You have successfully registered for this race. Good luck!" @@ -1370,14 +1336,14 @@ def virtualevent_register_view(request,id=0): }) return HttpResponseRedirect(url) - + else: initial = { 'age': calculate_age(r.birthdate), 'weightcategory': r.weightcategory, 'adaptiveclass': r.adaptiveclass, } - + form = VirtualRaceResultForm(initial=initial) breadcrumbs = [ @@ -1419,7 +1385,7 @@ def virtualevent_register_view(request,id=0): if race_can_edit(r,race): buttons += ['editbutton'] - + return render(request,'virtualeventregister.html', { 'form':form, @@ -1440,7 +1406,7 @@ def virtualevent_toggle_email_view(request,id=0): newsetting = False else: newsetting = True - + for record in records: record.emailnotifications = newsetting record.save() @@ -1454,7 +1420,7 @@ def virtualevent_toggle_email_view(request,id=0): def indoorvirtualevent_toggle_email_view(request,id=0): r = getrower(request.user) race = VirtualRace.objects.get(id=id) - + records = IndoorVirtualRaceResult.objects.filter(userid=r.id, race=race) @@ -1462,7 +1428,7 @@ def indoorvirtualevent_toggle_email_view(request,id=0): newsetting = False else: newsetting = True - + for record in records: record.emailnotifications = newsetting record.save() @@ -1503,7 +1469,7 @@ def indoorvirtualevent_register_view(request,id=0): boatclass = cd['boatclass'] sex = r.sex - + if r.birthdate: age = calculate_age(r.birthdate) sex = r.sex @@ -1529,7 +1495,7 @@ def indoorvirtualevent_register_view(request,id=0): ) record.save() - + add_rower_race(r,race) otherrecords = IndoorVirtualRaceResult.objects.filter( @@ -1548,8 +1514,8 @@ def indoorvirtualevent_register_view(request,id=0): race.name, race.id ) - - + + messages.info( request, "You have successfully registered for this race. Good luck!" @@ -1561,14 +1527,14 @@ def indoorvirtualevent_register_view(request,id=0): }) return HttpResponseRedirect(url) - + else: initial = { 'age': calculate_age(r.birthdate), 'weightcategory': r.weightcategory, 'adaptiveclass': r.adaptiveclass, } - + form = IndoorVirtualRaceResultForm(initial=initial) breadcrumbs = [ @@ -1624,7 +1590,7 @@ def indoorvirtualevent_register_view(request,id=0): @login_required() def indoorvirtualevent_create_view(request): r = getrower(request.user) - + if request.method == 'POST': racecreateform = IndoorVirtualRaceForm(request.POST) if racecreateform.is_valid(): @@ -1650,7 +1616,7 @@ def indoorvirtualevent_create_view(request): startdatetime = datetime.datetime.combine(startdate,start_time) enddatetime = datetime.datetime.combine(enddate,end_time) - + startdatetime = pytz.timezone(timezone_str).localize( startdatetime ) @@ -1681,7 +1647,7 @@ def indoorvirtualevent_create_view(request): sessionmode = 'time' else: sessionmode = 'distance' - + vs = VirtualRace( name=name, startdate=startdate, @@ -1719,7 +1685,7 @@ def indoorvirtualevent_create_view(request): ), dotweet = dotweet ) - + sa.save() url = reverse('virtualevents_view') @@ -1728,7 +1694,7 @@ def indoorvirtualevent_create_view(request): racecreateform = IndoorVirtualRaceForm(timezone=r.defaulttimezone) - + breadcrumbs = [ { 'url':reverse('virtualevents_view'), @@ -1753,7 +1719,7 @@ def indoorvirtualevent_create_view(request): @login_required() def virtualevent_create_view(request): r = getrower(request.user) - + if request.method == 'POST': racecreateform = VirtualRaceForm(request.POST) if racecreateform.is_valid(): @@ -1779,7 +1745,7 @@ def virtualevent_create_view(request): startdatetime = datetime.datetime.combine(startdate,start_time) enddatetime = datetime.datetime.combine(enddate,end_time) - + startdatetime = pytz.timezone(timezone_str).localize( startdatetime ) @@ -1805,8 +1771,8 @@ def virtualevent_create_view(request): registration_closure = enddatetime else: registration_closure = evaluation_closure - - + + vs = VirtualRace( name=name, startdate=startdate, @@ -1842,7 +1808,7 @@ def virtualevent_create_view(request): ), dotweet = dotweet ) - + sa.save() url = reverse('virtualevents_view') return HttpResponseRedirect(url) @@ -1850,7 +1816,7 @@ def virtualevent_create_view(request): racecreateform = VirtualRaceForm() - + breadcrumbs = [ { 'url':reverse('virtualevents_view'), @@ -1872,15 +1838,12 @@ def virtualevent_create_view(request): }) @login_required() +@permission_required('virtualevent.change_race',fn=get_virtualevent_by_pk,raise_exception=True) def virtualevent_edit_view(request,id=0): r = getrower(request.user) - - try: - race = VirtualRace.objects.get(id=id) - if race.manager != request.user: - raise PermissionDenied("Access denied") - except VirtualRace.DoesNotExist: - raise Http404("Virtual Race does not exist") + race = get_object_or_404(VirtualRace,pk=id) + + start_time = race.start_time start_date = race.startdate @@ -1900,7 +1863,7 @@ def virtualevent_edit_view(request,id=0): racecreateform = VirtualRaceForm(request.POST,instance=race) if racecreateform.is_valid(): cd = racecreateform.cleaned_data - + res, message = update_virtualrace(race,cd) if res: @@ -1912,7 +1875,7 @@ def virtualevent_edit_view(request,id=0): kwargs = { 'id':race.id }) - + return HttpResponseRedirect(url) else: @@ -1937,7 +1900,7 @@ def virtualevent_edit_view(request,id=0): 'name': 'Edit' } ] - + buttons = [] if not request.user.is_anonymous: @@ -1970,15 +1933,10 @@ def virtualevent_edit_view(request,id=0): }) @login_required() +@permission_required('virtualevent.change_race',fn=get_virtualevent_by_pk,raise_exception=True) def indoorvirtualevent_edit_view(request,id=0): r = getrower(request.user) - - try: - race = VirtualRace.objects.get(id=id) - if race.manager != request.user: - raise PermissionDenied("Access denied") - except VirtualRace.DoesNotExist: - raise Http404("Virtual Race does not exist") + race = get_object_or_404(VirtualRace,pk=id) start_time = race.start_time start_date = race.startdate @@ -1998,7 +1956,7 @@ def indoorvirtualevent_edit_view(request,id=0): racecreateform = IndoorVirtualRaceForm(request.POST,instance=race) if racecreateform.is_valid(): cd = racecreateform.cleaned_data - + res, message = update_indoorvirtualrace(race,cd) if res: @@ -2010,14 +1968,14 @@ def indoorvirtualevent_edit_view(request,id=0): kwargs = { 'id':race.id }) - + return HttpResponseRedirect(url) else: racecreateform = IndoorVirtualRaceForm(instance=race) - + breadcrumbs = [ { 'url':reverse('virtualevents_view'), @@ -2057,8 +2015,8 @@ def indoorvirtualevent_edit_view(request,id=0): if race_can_edit(r,race): buttons += ['editbutton'] - - + + return render(request,'virtualeventedit.html', { 'form':racecreateform, @@ -2084,7 +2042,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): start_date = race.startdate startdatetime = datetime.datetime.combine(start_date, start_time) startdatetime = pytz.timezone(race.timezone).localize(startdatetime) - + end_time = race.end_time end_date = race.enddate enddatetime = datetime.datetime.combine(end_date, end_time) @@ -2096,7 +2054,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): resultobj = VirtualRaceResult else: resultobj = IndoorVirtualRaceResult - + records = resultobj.objects.filter( userid = r.id, race=race @@ -2104,7 +2062,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): entrychoices = [] - + for record in records: rtpl = (record.id, record.__str__()) entrychoices.append(rtpl) @@ -2121,7 +2079,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): } ) return HttpResponseRedirect(url) - + ws = Workout.objects.filter( user=r, workouttype__in=mytypes.rowtypes, @@ -2134,14 +2092,14 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): request, 'You have no workouts executed during the race window. Please upload a result or enter it manually.' ) - + url = reverse('virtualevent_view', kwargs = { 'id':id }) return HttpResponseRedirect(url) - + initialworkouts = [w.id for w in Workout.objects.filter( user=r,plannedsession=race @@ -2151,7 +2109,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): workoutdata['initial'] = [] choices = [] - + for w in ws: wtpl = (w.id, w.__str__()) choices.append(wtpl) @@ -2183,7 +2141,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): result,comments,errors,jobid = add_workout_indoorrace( workouts,race,r,recordid=recordid) - + for c in comments: messages.info(request,c) for er in errors: @@ -2217,13 +2175,13 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): race.id ) - + # redirect to race page url = reverse('virtualevent_view', kwargs = { 'id':race.id }) - + return HttpResponseRedirect(url) else: @@ -2273,7 +2231,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0): if race_can_edit(r,race): buttons += ['editbutton'] - + return render(request,'race_submit.html', { 'race':race, diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 2955d3c7..43fa3315 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -285,9 +285,21 @@ def getfavorites(r,row): return favorites,maxfav +def get_logo_by_pk(request,*args,**kwargs): + id = kwargs['id'] + return get_object_or_404(RaceLogo,pk=id) + +def get_virtualevent_by_pk(request,*args,**kwargs): + id = kwargs['id'] + return get_object_or_404(VirtualRace,pk=id) + def get_promember(request,*args,**kwargs): return request.user +def get_course_by_pk(request,*args,**kwargs): + id = kwargs['id'] + return get_object_or_404(GeoCourse,pk=id) + def get_workout_by_opaqueid(request,id,**kwargs): pk = encoder.decode_hex(id) return get_object_or_404(Workout,pk=pk)