diff --git a/rowers/urls.py b/rowers/urls.py
index 8fcd905a..4948b2b4 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -272,6 +272,12 @@ urlpatterns = [
url(r'^workout/(?P\d+)/interactiveotwplot$',views.workout_otwpowerplot_view),
url(r'^workout/(?P\d+)/wind$',views.workout_wind_view),
url(r'^workout/(?P\d+)/image$',views.workout_uploadimage_view),
+ url(r'^virtualevent/(?P\d+)/image$',
+ views.virtualevent_uploadimage_view),
+ url(r'^virtualevent/(?P\d+)/setimage/(?P\d+)/$',
+ views.virtualevent_setlogo_view),
+ url(r'^logo/(?P\d+)/delete/$',
+ views.logo_delete_view),
url(r'^workout/(?P\d+)/darkskywind$',views.workout_downloadwind_view),
url(r'^workout/(?P\d+)/metar/(?P\w+)$',views.workout_downloadmetar_view),
url(r'^workout/(?P\d+)/stream$',views.workout_stream_view),
diff --git a/rowers/views.py b/rowers/views.py
index 4677fc33..88636c8e 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -83,6 +83,7 @@ from rowers.models import (
createmicrofillers, createmesofillers,
microcyclecheckdates,mesocyclecheckdates,macrocyclecheckdates,
TrainingMesoCycleForm, TrainingMicroCycleForm,
+ RaceLogo,
)
from rowers.models import (
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
@@ -10231,7 +10232,159 @@ def workout_map_view(request,id=0):
'mapdiv':mapdiv,
'mayedit':mayedit,
})
+
+@login_required()
+def logo_delete_view(request,id=0):
+ try:
+ logo = RaceLogo.objects.get(id=id)
+ except RaceLogo.DoesNotExist:
+ raise Http404("Logo doesn't exist")
+
+ if logo.user == request.user:
+ logo.delete()
+ messages.info(request,"Logo Deleted")
+
+ url = reverse(virtualevents_view)
+
+ return HttpResponseRedirect(url)
+
+@login_required()
+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")
+
+ try:
+ logo = RaceLogo.objects.get(id=logoid)
+ except RaceLogo.DoesNotExist:
+ raise Http404("Logo doesn't exist")
+
+ 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)
+
+ url = reverse(virtualevent_view,
+ kwargs={'id':id})
+
+ return HttpResponseRedirect(url)
+
+# Image upload to virtual event
+@login_required()
+def virtualevent_uploadimage_view(request,id=0):
+ is_ajax = False
+ if request.is_ajax():
+ is_ajax = True
+
+ r = getrower(request.user)
+
+ try:
+ race = VirtualRace.objects.get(id=id)
+ except VirtualRace.DoesNotExist:
+ raise Http404("Race doesn't exist")
+
+ logos = RaceLogo.objects.filter(user=request.user).order_by("-creationdatetime")
+
+ breadcrumbs = [
+ {
+ 'url': reverse(virtualevents_view),
+ 'name': 'Racing'
+ },
+ {
+ 'url': reverse(virtualevent_view,kwargs={'id':id}),
+ 'name': race.name
+ },
+ {
+ 'url': reverse(virtualevent_uploadimage_view,
+ kwargs={'id':id}),
+ 'name': 'Add Image'
+ }
+ ]
+
+ if request.method == 'POST':
+ if len(logos) >= 6:
+ messages.error(request,"You cannot have more than 6 logos")
+ url = reverse(virtualevent_imageupload_view,
+ kwargs={'id':id})
+
+ return HttpResponseRedirect(url)
+
+ form = ImageForm(request.POST, request.FILES)
+ if form.is_valid():
+ f = form.cleaned_data['file']
+
+ if f is not None:
+ filename, path_and_filename = handle_uploaded_image(f)
+ try:
+ width, height = Image.open(path_and_filename).size
+ except:
+ message = "Not a valid image"
+ messages.error(request,message)
+ os.remove(path_and_filename)
+ url = reverse(virtualevent_image_view,
+ kwargs={'id':id})
+
+ if is_ajax:
+ return JSONResponse({'result':0, 'url':0})
+ else:
+ return HttpResponseRedirect(url)
+
+ otherlogos = race.logos.all()
+ for logo in otherlogos:
+ logo.race.remove(race)
+
+ logo = RaceLogo(user = request.user,
+ creationdatetime=timezone.now(),
+ filename = path_and_filename,
+ width=width, height=height)
+ logo.save()
+ logo.race.add(race)
+ logo.save()
+
+
+ url = reverse(virtualevent_view,
+ kwargs={'id':id})
+
+ if is_ajax:
+ return JSONResponse({'result':1, 'url':url})
+ else:
+ return HttpResponseRedirect(url)
+ else:
+ messages.error(request,"Something went wrong - no file attached")
+ url = reverse(virtualevent_uploadimage_view,
+ kwargs = {'id':id})
+
+ if is_ajax:
+ return JSONResponse({'result':0,'url':1})
+ else:
+ return HttpResponseRedirect(url)
+ else:
+
+ form = ImageForm()
+
+
+ if is_ajax:
+ return {'result':0}
+
+
+ return render(request,'logo_form.html',
+ {'form':form,
+ 'rower':r,
+ 'logos':logos,
+ 'active':'nav-racing',
+ 'breadcrumbs':breadcrumbs,
+ 'race':race,
+ })
+
+
# Image upload
@login_required()
@@ -16104,7 +16257,12 @@ def virtualevent_view(request,id=0):
}
]
-
+ racelogos = race.logos.all()
+
+ if racelogos:
+ racelogo = racelogos[0]
+ else:
+ racelogo = None
return render(request,'virtualevent.html',
{
@@ -16117,6 +16275,7 @@ def virtualevent_view(request,id=0):
'buttons':buttons,
'dns':dns,
'records':records,
+ 'racelogo':racelogo,
'form':form,
'active':'nav-racing',
})