diff options
Diffstat (limited to 'chimere/main/views.py')
-rw-r--r-- | chimere/main/views.py | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/chimere/main/views.py b/chimere/main/views.py index 2f80ea8..812fff6 100644 --- a/chimere/main/views.py +++ b/chimere/main/views.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2008-2010 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2008-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as @@ -31,16 +31,17 @@ from django.http import HttpResponseRedirect, HttpResponse from django.core import serializers from django.utils.http import urlquote from django.db.models import Q +from django.utils import simplejson from chimere import settings from chimere.main.actions import actions -from chimere.main.models import Category, SubCategory, PropertyModel, Marker, \ - Route, News, SimpleArea, Area, Color, TinyUrl +from chimere.main.models import Category, SubCategory, PropertyModel, \ + Marker, Route, News, SimpleArea, Area, Color, TinyUrl, RouteFile from chimere.main.widgets import getMapJS, PointChooserWidget, \ RouteChooserWidget, URL_OSM_JS, URL_OSM_CSS from chimere.main.forms import MarkerForm, RouteForm, ContactForm, \ - notifySubmission, notifyStaff + FileForm, notifySubmission, notifyStaff def get_base_response(area_name=""): """ @@ -58,6 +59,7 @@ def get_base_response(area_name=""): if settings.CSS_AREAS and area_name: base_response_dct['css_area'] = area_name + ".css" base_response_dct['area_name'] = area_name + base_response_dct['JQUERY_URL'] = settings.JQUERY_URL return base_response_dct def index(request, area_name=None, default_area=None, simple=False): @@ -124,7 +126,7 @@ def edit(request, area_name=""): notifySubmission(marker) response_dct = get_base_response(area_name) return HttpResponseRedirect(response_dct['extra_url'] + \ -'submited/edit') + 'submited/edit') else: # An unbound form form = MarkerForm() @@ -149,6 +151,44 @@ 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=''): + response_dct = get_base_response(area_name) + # If the form has been submited + if request.method == 'POST': + form = FileForm(request.POST, request.FILES) + # All validation rules pass + if form.is_valid(): + raw_file = form.cleaned_data['raw_file'] + name = raw_file.name.split('.')[0] + file_type = raw_file.name.split('.')[-1][0].upper() + 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('uploadFile.html', response_dct) + else: + # An unbound form + form = FileForm() + response_dct.update({'form':form}) + return render_to_response('uploadFile.html', response_dct) + +def processRouteFile(request, area_name='', file_id=None): + if file_id: + try: + route_file = RouteFile.objects.get(pk=file_id) + route_file.process() + route = route_file.route + if not route: + return HttpResponse(status=500) + return HttpResponse(simplejson.dumps({'wkt':route}), + 'application/javascript', status=200) + except: + return HttpResponse(status=500) + else: + return HttpResponse(status=400) + + def editRoute(request, area_name=""): """ Route edition page @@ -165,7 +205,7 @@ def editRoute(request, area_name=""): notifySubmission(route) response_dct = get_base_response(area_name) return HttpResponseRedirect(response_dct['extra_url'] + \ -'submited/edit') + 'submited/edit') else: # An unbound form form = RouteForm() |