adding race logo functionality
This commit is contained in:
@@ -1804,6 +1804,8 @@ class PlannedSession(models.Model):
|
|||||||
|
|
||||||
from django.core.validators import RegexValidator,validate_email
|
from django.core.validators import RegexValidator,validate_email
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
registerchoices = (
|
registerchoices = (
|
||||||
('windowstart','Start of Race Window'),
|
('windowstart','Start of Race Window'),
|
||||||
('windowend','End of Race Window'),
|
('windowend','End of Race Window'),
|
||||||
@@ -1825,6 +1827,7 @@ class VirtualRace(PlannedSession):
|
|||||||
end_time = models.TimeField(blank=True,null=True)
|
end_time = models.TimeField(blank=True,null=True)
|
||||||
country = models.CharField(max_length=100,blank=True)
|
country = models.CharField(max_length=100,blank=True)
|
||||||
|
|
||||||
|
|
||||||
timezone = models.CharField(default='UTC',
|
timezone = models.CharField(default='UTC',
|
||||||
choices=timezones,
|
choices=timezones,
|
||||||
max_length=100)
|
max_length=100)
|
||||||
@@ -1881,6 +1884,21 @@ class VirtualRace(PlannedSession):
|
|||||||
|
|
||||||
super(VirtualRace,self).save(*args, **kwargs)
|
super(VirtualRace,self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
class RaceLogo(models.Model):
|
||||||
|
filename = models.CharField(default='',max_length=150)
|
||||||
|
creationdatetime = models.DateTimeField()
|
||||||
|
user = models.ForeignKey(User)
|
||||||
|
width = models.IntegerField(default=1200)
|
||||||
|
height = models.IntegerField(default=600)
|
||||||
|
race = models.ManyToManyField(VirtualRace,related_name='logos')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.filename
|
||||||
|
|
||||||
|
def delete(self, *args, **kwargs):
|
||||||
|
os.remove(self.filename)
|
||||||
|
print 'file deleted'
|
||||||
|
super(RaceLogo,self).delete(*args, **kwargs)
|
||||||
|
|
||||||
# Date input utility
|
# Date input utility
|
||||||
class DateInput(forms.DateInput):
|
class DateInput(forms.DateInput):
|
||||||
|
|||||||
280
rowers/templates/logo_form.html
Normal file
280
rowers/templates/logo_form.html
Normal file
@@ -0,0 +1,280 @@
|
|||||||
|
{% extends "newbase.html" %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% load rowerfilters %}
|
||||||
|
|
||||||
|
{% block title %}File loading{% endblock %}
|
||||||
|
|
||||||
|
{% block meta %}
|
||||||
|
<script type='text/javascript'
|
||||||
|
src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'>
|
||||||
|
</script>
|
||||||
|
<script type='text/javascript'
|
||||||
|
src='https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js'>
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
{% if race.logo %}
|
||||||
|
<h1>Current Logo</h1>
|
||||||
|
|
||||||
|
<img src="/{{ race.logo.filename }}" alt="{{ race.logo.filename }}">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="main-content">
|
||||||
|
{% if logos %}
|
||||||
|
<li class="grid_4">
|
||||||
|
<h1>Set logo by clicking on one of the logos you have used in the past</h1>
|
||||||
|
</li>
|
||||||
|
{% for logo in logos %}
|
||||||
|
<li>
|
||||||
|
<img src="/{{ logo.filename }}"
|
||||||
|
alt="{{ logo.filename }}" width="120" height="100">
|
||||||
|
<a href="/rowers/virtualevent/{{ race.id }}/setimage/{{ logo.id }}/">
|
||||||
|
Use this logo
|
||||||
|
</a>
|
||||||
|
<a href="/rowers/logo/{{ logo.id }}/delete">
|
||||||
|
Delete this logo
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% if logos|length <= 5 %}
|
||||||
|
<li class="grid_4">
|
||||||
|
<h1>Upload New Image (Race Logo)</h1>
|
||||||
|
<div id="id_dropregion" class="watermark invisible">
|
||||||
|
<p>Drag and drop files here </p>
|
||||||
|
</div>
|
||||||
|
<div id="id_drop-files" class="drop-files">
|
||||||
|
<form id="file_form" enctype="multipart/form-data" action="{{ formloc }}" method="post">
|
||||||
|
{% if form.errors %}
|
||||||
|
<p style="color: red;">
|
||||||
|
Please correct the error{{ form.errors|pluralize }} below.
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<table>
|
||||||
|
{{ form.as_table }}
|
||||||
|
</table>
|
||||||
|
{% csrf_token %}
|
||||||
|
<p>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block scripts %}
|
||||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
|
||||||
|
<script>
|
||||||
|
var td = new FormData();
|
||||||
|
var formdatasetok = false;
|
||||||
|
try {
|
||||||
|
td.set('aap','noot');
|
||||||
|
formdatasetok = true;
|
||||||
|
console.log('FormData.set OK');
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
console.log('FormData.set not OK');
|
||||||
|
formdatasetok = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!formdatasetok) {
|
||||||
|
$("#id_dropregion").remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (formdatasetok) {
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
|
||||||
|
console.log("CSRF token",csrftoken);
|
||||||
|
|
||||||
|
function csrfSafeMethod(method) {
|
||||||
|
// these HTTP methods do not require CSRF protection
|
||||||
|
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
|
||||||
|
}
|
||||||
|
$.ajaxSetup({
|
||||||
|
beforeSend: function(xhr, settings) {
|
||||||
|
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
|
||||||
|
xhr.setRequestHeader("X-CSRFToken", csrftoken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log("Loading dropper");
|
||||||
|
jQuery.event.props.push('dataTransfer');
|
||||||
|
|
||||||
|
$(window).on('dragenter', function() {
|
||||||
|
$("#id_drop-files").css("background-color","#E9E9E4");
|
||||||
|
$("#id_dropregion").addClass("watermark").removeClass("invisible");})
|
||||||
|
|
||||||
|
$(window).on('dragleave', function() {
|
||||||
|
$("#id_drop-files").css("background-color","#FFFFFF");
|
||||||
|
$("#id_dropregion").removeClass("watermark").addClass("invisible");})
|
||||||
|
|
||||||
|
var frm = $("#file_form");
|
||||||
|
|
||||||
|
if( window.FormData === undefined ) {
|
||||||
|
console.log('no formdata');
|
||||||
|
alert("No FormData");
|
||||||
|
} else {
|
||||||
|
console.log('we have formdata');
|
||||||
|
}
|
||||||
|
|
||||||
|
var data = new FormData(frm[0]);
|
||||||
|
|
||||||
|
|
||||||
|
$('#id_file').on('change', function(evt) {
|
||||||
|
var f = this.files[0];
|
||||||
|
console.log(f);
|
||||||
|
var istcx = false;
|
||||||
|
var isgzip = false;
|
||||||
|
var size1 = 10485760;
|
||||||
|
var size2 = 1048576;
|
||||||
|
if ((/\.(tcx|TCX)/i).test(f.name)) {
|
||||||
|
istcx = true;
|
||||||
|
console.log('tcx');
|
||||||
|
if ((/\.(gz|GZ)/i).test(f.name)) {
|
||||||
|
isgzip = true;
|
||||||
|
console.log('gzip');
|
||||||
|
size1 /= 5;
|
||||||
|
size2 /= 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(size1)
|
||||||
|
console.log(size2)
|
||||||
|
if (f.size > size1) {
|
||||||
|
alert("File Size must be smaller than 10 MB");
|
||||||
|
this.value = null;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (f.size > size2) {
|
||||||
|
$('#id_offline').val('True');
|
||||||
|
$('#id_offline').prop('checked','True');
|
||||||
|
data.set($('#id_offline').attr('name'),$('#id_offline').prop('checked'));
|
||||||
|
console.log("Set offline to True");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$('input').each(function( i ) {
|
||||||
|
$(this).change(function() {
|
||||||
|
if ($(this).attr('type') == 'checkbox') {
|
||||||
|
data.set($(this).attr('name'),$(this).prop('checked'));
|
||||||
|
console.log($(this).attr('id'),$(this).attr('name'),$(this).prop('checked'));
|
||||||
|
} else {
|
||||||
|
data.set($(this).attr('name'),$(this).val());
|
||||||
|
if ($(this).attr('id') == 'id_file') {
|
||||||
|
data.set("file",this.files[0]);
|
||||||
|
}
|
||||||
|
console.log($(this).attr('name'),$(this).val());
|
||||||
|
};
|
||||||
|
});});
|
||||||
|
|
||||||
|
$('select').each(function( i ) {
|
||||||
|
console.log($(this).attr('name'),$(this).val());
|
||||||
|
$(this).change(function() {
|
||||||
|
data.set($(this).attr('name'),$(this).val());
|
||||||
|
console.log($(this).attr('id'),$(this).attr('name'),$(this).val());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
frm.submit(function() {
|
||||||
|
console.log("Form submission");
|
||||||
|
$(data.values()).each(function(value) {
|
||||||
|
console.log(value);
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#id_drop-files").replaceWith(
|
||||||
|
'<div id="id_waiting"><img src="/static/img/rowingtimer.gif" width="60" height="50" style="width:60px">'
|
||||||
|
);
|
||||||
|
$.ajax({
|
||||||
|
data: data,
|
||||||
|
type: $(this).attr('method'),
|
||||||
|
url: '/rowers/virtualevent/{{ race.id }}/image',
|
||||||
|
contentType: false,
|
||||||
|
processData: false,
|
||||||
|
error: function(result) {
|
||||||
|
$("#id_waiting").replaceWith(
|
||||||
|
'<div id="id_failed" class="grid_12 alpha message">Your upload failed</div>'
|
||||||
|
);
|
||||||
|
setTimeout(function() {
|
||||||
|
location.reload();
|
||||||
|
},1000);
|
||||||
|
},
|
||||||
|
success: function(result) {
|
||||||
|
console.log('got something back');
|
||||||
|
console.log(result);
|
||||||
|
if (result.result == 1) {
|
||||||
|
window.location.href = result.url;
|
||||||
|
} else {
|
||||||
|
console.log(result," reloading");
|
||||||
|
location.reload();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$('#id_drop-files').bind({
|
||||||
|
drop: function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
console.log("you dropped something");
|
||||||
|
var files = e.dataTransfer.files;
|
||||||
|
console.log(files[0]);
|
||||||
|
|
||||||
|
var f = files[0];
|
||||||
|
var istcx = false;
|
||||||
|
var isgzip = false;
|
||||||
|
var size1 = 10485760;
|
||||||
|
var size2 = 1048576;
|
||||||
|
if ((/\.(tcx|TCX)/i).test(f.name)) {
|
||||||
|
istcx = true;
|
||||||
|
console.log('tcx');
|
||||||
|
if ((/\.(gz|GZ)/i).test(f.name)) {
|
||||||
|
isgzip = true;
|
||||||
|
console.log('gzip');
|
||||||
|
size1 /= 5;
|
||||||
|
size2 /= 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(f);
|
||||||
|
console.log(size1)
|
||||||
|
console.log(size2)
|
||||||
|
if (f.size > size1) {
|
||||||
|
alert("File Size must be smaller than 10 MB");
|
||||||
|
$("#id_file").value = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
data.set("file",f);
|
||||||
|
// data.append("file",f);
|
||||||
|
|
||||||
|
$("#id_file").replaceWith('<div id="id_file">'+files[0].name+' <a class="remove" href="javascript:void(0);"><b><font color="red">X</font></b></a></div>');
|
||||||
|
},
|
||||||
|
mouseenter:function(){$("#id_drop-files").css("background-color","#E9E9E4");},
|
||||||
|
mouseleave:function(){$("#id_drop-files").css("background-color","#FFFFFF");},
|
||||||
|
dragover:function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
$("#id_drop-files").css("background-color","#E9E9E4");},
|
||||||
|
dragleave:function(e){ e.preventDefault();},
|
||||||
|
});
|
||||||
|
$(document).on("click", "a.remove", function() {
|
||||||
|
$(this).parent().replaceWith('<td><input id="id_file" name="file" type="file" /></td>');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
{% include 'menu_racing.html' %}
|
||||||
|
{% endblock %}
|
||||||
@@ -13,7 +13,19 @@
|
|||||||
|
|
||||||
<h1>{{ race.name }}</h1>
|
<h1>{{ race.name }}</h1>
|
||||||
|
|
||||||
|
{% if not racelogo and race.manager == request.user %}
|
||||||
|
<a href="/rowers/virtualevent/{{ race.id }}/image">Add Race Logo</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<ul class="main-content">
|
<ul class="main-content">
|
||||||
|
{% if racelogo %}
|
||||||
|
<li class="grid_2">
|
||||||
|
<img src="/{{ racelogo.filename }}" alt="{{ racelogo.filename }}" height="100" width="120">
|
||||||
|
{% if race.manager == request.user %}
|
||||||
|
<a href="/rowers/virtualevent/{{ race.id }}/image">Edit Image</a>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
{% if race.sessiontype == 'race' %}
|
{% if race.sessiontype == 'race' %}
|
||||||
<li class="grid_2">
|
<li class="grid_2">
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -272,6 +272,12 @@ urlpatterns = [
|
|||||||
url(r'^workout/(?P<id>\d+)/interactiveotwplot$',views.workout_otwpowerplot_view),
|
url(r'^workout/(?P<id>\d+)/interactiveotwplot$',views.workout_otwpowerplot_view),
|
||||||
url(r'^workout/(?P<id>\d+)/wind$',views.workout_wind_view),
|
url(r'^workout/(?P<id>\d+)/wind$',views.workout_wind_view),
|
||||||
url(r'^workout/(?P<id>\d+)/image$',views.workout_uploadimage_view),
|
url(r'^workout/(?P<id>\d+)/image$',views.workout_uploadimage_view),
|
||||||
|
url(r'^virtualevent/(?P<id>\d+)/image$',
|
||||||
|
views.virtualevent_uploadimage_view),
|
||||||
|
url(r'^virtualevent/(?P<id>\d+)/setimage/(?P<logoid>\d+)/$',
|
||||||
|
views.virtualevent_setlogo_view),
|
||||||
|
url(r'^logo/(?P<id>\d+)/delete/$',
|
||||||
|
views.logo_delete_view),
|
||||||
url(r'^workout/(?P<id>\d+)/darkskywind$',views.workout_downloadwind_view),
|
url(r'^workout/(?P<id>\d+)/darkskywind$',views.workout_downloadwind_view),
|
||||||
url(r'^workout/(?P<id>\d+)/metar/(?P<airportcode>\w+)$',views.workout_downloadmetar_view),
|
url(r'^workout/(?P<id>\d+)/metar/(?P<airportcode>\w+)$',views.workout_downloadmetar_view),
|
||||||
url(r'^workout/(?P<id>\d+)/stream$',views.workout_stream_view),
|
url(r'^workout/(?P<id>\d+)/stream$',views.workout_stream_view),
|
||||||
|
|||||||
161
rowers/views.py
161
rowers/views.py
@@ -83,6 +83,7 @@ from rowers.models import (
|
|||||||
createmicrofillers, createmesofillers,
|
createmicrofillers, createmesofillers,
|
||||||
microcyclecheckdates,mesocyclecheckdates,macrocyclecheckdates,
|
microcyclecheckdates,mesocyclecheckdates,macrocyclecheckdates,
|
||||||
TrainingMesoCycleForm, TrainingMicroCycleForm,
|
TrainingMesoCycleForm, TrainingMicroCycleForm,
|
||||||
|
RaceLogo,
|
||||||
)
|
)
|
||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
|
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
|
||||||
@@ -10231,7 +10232,159 @@ def workout_map_view(request,id=0):
|
|||||||
'mapdiv':mapdiv,
|
'mapdiv':mapdiv,
|
||||||
'mayedit':mayedit,
|
'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
|
# Image upload
|
||||||
@login_required()
|
@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',
|
return render(request,'virtualevent.html',
|
||||||
{
|
{
|
||||||
@@ -16117,6 +16275,7 @@ def virtualevent_view(request,id=0):
|
|||||||
'buttons':buttons,
|
'buttons':buttons,
|
||||||
'dns':dns,
|
'dns':dns,
|
||||||
'records':records,
|
'records':records,
|
||||||
|
'racelogo':racelogo,
|
||||||
'form':form,
|
'form':form,
|
||||||
'active':'nav-racing',
|
'active':'nav-racing',
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user