diff options
Diffstat (limited to 'main/views.py')
-rw-r--r-- | main/views.py | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/main/views.py b/main/views.py new file mode 100644 index 0000000..c0503ad --- /dev/null +++ b/main/views.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Views of the project +""" + +import datetime + +from django.shortcuts import render_to_response +from django.http import HttpResponseRedirect, HttpResponse +from django.core import serializers + +from chimere import settings +from chimere.main.actions import actions +from chimere.main.models import SubCategory, PropertyModel, Marker +from chimere.main.widgets import getMapJS, PointChooserWidget, URL_OSM_JS +from chimere.main.forms import MarkerForm + +def index(request): + """ + Main page + """ + subcategories = SubCategory.getAvailable() + # by default all subcategories are checked + for cat, sub_cats in subcategories: + for sub_category in sub_cats: + sub_category.selected = True + extra_js = "" + for url in URL_OSM_JS + ["%smain_map.js" % settings.MEDIA_URL]: + extra_js += '<script src="%s"></script>\n' % url + response_dct = {'actions':actions, 'action_selected':'view', + 'error_message':'', + 'sub_categories':subcategories, + 'extra_head':extra_js + getMapJS(), + 'media_path':settings.MEDIA_URL, + } + return render_to_response('main_map.html', response_dct) + +def edit(request): + """ + Edition page + """ + # If the form has been submited + if request.method == 'POST': + form = MarkerForm(request.POST, request.FILES) + # All validation rules pass + if form.is_valid(): + marker = form.save() + # set the submited status + marker.status = 'S' + marker.save() + return HttpResponseRedirect('/chimere/submited') + else: + # An unbound form + form = MarkerForm() + # get the « manualy » declared_fields. Ie: properties + declared_fields = form.declared_fields.keys() + response_dct = {'actions':actions, 'action_selected':'edit', + 'error_message':'', + 'media_path':settings.MEDIA_URL, + 'form':form, + 'extra_head':form.media, + 'sub_categories':SubCategory.getAvailable(), + 'point_widget':PointChooserWidget().render('point', None), + 'properties':declared_fields + } + # manualy populate the custom widget + if 'subcategory' in form.data and form.data['subcategory']: + response_dct['current_category'] = int(form.data['subcategory']) + return render_to_response('edit.html', response_dct) + +def submited(request): + """ + Successful submission page + """ + response_dct = {'actions':actions, 'action_selected':'edit', + 'media_path':settings.MEDIA_URL,} + return render_to_response('submited.html', response_dct) + +def getDetail(request, marker_id): + ''' + Get the detail for a marker + ''' + try: + marker = Marker.objects.filter(id=int(marker_id), status='A')[0] + except (ValueError, IndexError): + return HttpResponse('no results') + response_dct= {'media_path':settings.MEDIA_URL, 'marker':marker} + return render_to_response('detail.html', response_dct) + +def getMarkers(request, category_ids): + ''' + Get the JSON for a marker + ''' + try: + query = Marker.objects.filter(status='A') + query = query.extra(where=['subcategory_id IN (%s)' % \ + ",".join(category_ids.split('_'))]) + except: + return HttpResponse('no results') + markers = list(query) + if not markers: + return HttpResponse('no results') + data = '{"type": "FeatureCollection", "features":[%s]}' % \ + ",".join([marker.getGeoJSON() for marker in markers]) + return HttpResponse(data) |