summaryrefslogtreecommitdiff
path: root/chimere/main
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2011-09-14 20:53:46 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2011-09-14 21:22:44 +0200
commit518abc0e4a66c2bca84f87d162e91a6d66094621 (patch)
treef882d6ef930f199b56922002e27bce782b8f6ef0 /chimere/main
parentcff7402788e9c9399a5e7997fbb529dfa9705103 (diff)
downloadChimère-518abc0e4a66c2bca84f87d162e91a6d66094621.tar.bz2
Chimère-518abc0e4a66c2bca84f87d162e91a6d66094621.zip
Allow route submission from a simple page (closes #303)
Diffstat (limited to 'chimere/main')
-rw-r--r--chimere/main/forms.py6
-rw-r--r--chimere/main/views.py35
2 files changed, 33 insertions, 8 deletions
diff --git a/chimere/main/forms.py b/chimere/main/forms.py
index 7b7fc05..2337644 100644
--- a/chimere/main/forms.py
+++ b/chimere/main/forms.py
@@ -268,6 +268,12 @@ class FileForm(forms.Form):
u"GPX or KML file"))
return data
+class FullFileForm(FileForm):
+ name = forms.CharField(label=_(u"Name"))
+ def __init__(self, *args, **kwargs):
+ super(FullFileForm, self).__init__(*args, **kwargs)
+ self.fields.keyOrder = ['name', 'raw_file']
+
class AreaAdminForm(forms.ModelForm):
"""
Admin page to create an area
diff --git a/chimere/main/views.py b/chimere/main/views.py
index 05cd873..80097d1 100644
--- a/chimere/main/views.py
+++ b/chimere/main/views.py
@@ -41,7 +41,7 @@ from chimere.main.models import Category, SubCategory, PropertyModel, \
from chimere.main.widgets import getMapJS, PointChooserWidget, \
RouteChooserWidget, URL_OSM_JS, URL_OSM_CSS
from chimere.main.forms import MarkerForm, RouteForm, ContactForm, \
- FileForm, notifySubmission, notifyStaff
+ FileForm, FullFileForm, notifySubmission, notifyStaff
def get_base_response(area_name=""):
"""
@@ -151,11 +151,19 @@ def edit(request, area_name=""):
response_dct['current_category'] = int(form.data['subcategory'])
return render_to_response('edit.html', response_dct)
-def uploadFile(request, area_name=''):
+def uploadFile(request, category_id='', area_name=''):
response_dct = get_base_response(area_name)
+ Form = FileForm if not category_id else FullFileForm
+ category = None
+ if category_id:
+ try:
+ category = SubCategory.objects.get(pk=category_id)
+ response_dct['category'] = unicode(category)
+ except:
+ pass
# If the form has been submited
if request.method == 'POST':
- form = FileForm(request.POST, request.FILES)
+ form = Form(request.POST, request.FILES)
# All validation rules pass
if form.is_valid():
raw_file = form.cleaned_data['raw_file']
@@ -164,12 +172,20 @@ def uploadFile(request, area_name=''):
routefile = RouteFile(raw_file=raw_file, name=name,
file_type=file_type)
routefile.save()
- response_dct = get_base_response(area_name)
- response_dct['gpx_id'] = routefile.pk
- return render_to_response('upload_file.html', response_dct)
+ if not category_id:
+ response_dct['gpx_id'] = routefile.pk
+ return render_to_response('upload_file.html', response_dct)
+ routefile.process()
+ route = Route(name=form.cleaned_data['name'], route=routefile.route,
+ associated_file=routefile, status='S')
+ route.save()
+ route.categories.add(category)
+ route.save()
+ response_dct['thanks'] = True
+ form = Form()
else:
# An unbound form
- form = FileForm()
+ form = Form()
response_dct.update({'form':form})
return render_to_response('upload_file.html', response_dct)
@@ -360,7 +376,10 @@ def getGeoObjects(request, area_name, category_ids, status):
idx = 0
current_cat = c_cat
colors = list(Color.objects.filter(color_theme = c_cat.color_theme))
- jsons.append(route.getGeoJSON(color=colors[idx % len(colors)].code))
+ if colors:
+ jsons.append(route.getGeoJSON(color=colors[idx % len(colors)].code))
+ else:
+ jsons.append(route.getGeoJSON(color='000'))
idx += 1
try:
q = checkDate(Q(status__in=status, categories__in=category_ids))