diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-09-09 01:26:34 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-09-09 01:26:34 +0200 | 
| commit | 0ccc30e337bb046000fb76d2337c2fb9792bc71f (patch) | |
| tree | bbf2307438389f91fdae1e618d0816238b0a015a /chimere/main/views.py | |
| parent | 5833aa61d039bf3d1f4372e0390ffc53b7d63eb9 (diff) | |
| download | Chimère-0ccc30e337bb046000fb76d2337c2fb9792bc71f.tar.bz2 Chimère-0ccc30e337bb046000fb76d2337c2fb9792bc71f.zip  | |
Association of a GPX (or KML) file to a route (refs #302)
 - new table in the model
 - new form in route edition
 - uploaded gpx file simplification
 - automatic route creation from the GPX file
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()  | 
