diff options
| author | etienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864> | 2008-10-22 22:39:53 +0000 | 
|---|---|---|
| committer | etienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864> | 2008-10-22 22:39:53 +0000 | 
| commit | 030ed86130fabc78695355021b5a0586df3e77b9 (patch) | |
| tree | bd06e4842c67577829cd433d7621bd22dac12776 /main/views.py | |
| download | Chimère-030ed86130fabc78695355021b5a0586df3e77b9.tar.bz2 Chimère-030ed86130fabc78695355021b5a0586df3e77b9.zip  | |
git-svn-id: http://www.peacefrogs.net/svn/chimere/trunk@1 9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864
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)  | 
