diff options
| author | etienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864> | 2010-02-28 20:50:07 +0000 |
|---|---|---|
| committer | etienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864> | 2010-02-28 20:50:07 +0000 |
| commit | 4be50007afb898efdf11a34851c092b9102f386a (patch) | |
| tree | 409da91b2bca55f5288c1aa7e6496da58786df8b /chimere/main/views.py | |
| parent | 9651da473d422ed9c966997c6e2194f15d825836 (diff) | |
| download | Chimère-4be50007afb898efdf11a34851c092b9102f386a.tar.bz2 Chimère-4be50007afb898efdf11a34851c092b9102f386a.zip | |
Dynamic loading of categories #80 - Reactivate the check-all button #81
git-svn-id: http://www.peacefrogs.net/svn/chimere/trunk@66 9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864
Diffstat (limited to 'chimere/main/views.py')
| -rw-r--r-- | chimere/main/views.py | 103 |
1 files changed, 69 insertions, 34 deletions
diff --git a/chimere/main/views.py b/chimere/main/views.py index 9de8f4b..f584702 100644 --- a/chimere/main/views.py +++ b/chimere/main/views.py @@ -22,6 +22,7 @@ Views of the project """ import datetime +from itertools import groupby from django.utils.translation import ugettext as _ from django.shortcuts import render_to_response @@ -32,23 +33,20 @@ from django.core import serializers from chimere import settings from chimere.main.actions import actions from chimere.main.models import Category, SubCategory, PropertyModel, Marker, \ - Route, News, Area, Color + Route, News, SimpleArea, Area, Color from chimere.main.widgets import getMapJS, PointChooserWidget, \ RouteChooserWidget, URL_OSM_JS, URL_OSM_CSS from chimere.main.forms import MarkerForm, RouteForm, ContactForm, \ notifySubmission, notifyStaff +base_response_dct = {'media_path':settings.MEDIA_URL, + 'extra_url':settings.EXTRA_URL,} + def index(request): """ Main page """ - subcategories = SubCategory.getAvailable() - for cat, sub_cats in subcategories: - for sub_category in sub_cats: - if sub_category.id in settings.DEFAULT_CATEGORIES: - sub_category.selected = True - cat.selected= True extra = "" tab = " "*4 for url in URL_OSM_CSS: @@ -64,16 +62,14 @@ def index(request): request.session['last_visit'] != today: request.session['last_visit'] = today display_welcome = True - response_dct = {'actions':actions, 'action_selected':('view',), - 'error_message':'', - 'sub_categories':subcategories, - 'extra_head':extra + getMapJS(), - 'media_path':settings.MEDIA_URL, - 'extra_url':settings.EXTRA_URL, - 'welcome':welcome(request, display_welcome), - 'areas':Area.getAvailable(), - 'map_layer':settings.MAP_LAYER - } + response_dct = base_response_dct + response_dct.update({'actions':actions, 'action_selected':('view',), + 'error_message':'', + 'extra_head':extra + getMapJS(), + 'welcome':welcome(request, display_welcome), + 'areas':Area.getAvailable(), + 'map_layer':settings.MAP_LAYER, + }) # manage permalink if request.GET: for key in ('zoom', 'lon', 'lat', 'display_submited'): @@ -109,17 +105,17 @@ def edit(request): form = MarkerForm() # get the « manualy » declared_fields. Ie: properties declared_fields = form.declared_fields.keys() - response_dct = {'actions':actions, 'action_selected':('contribute', 'edit'), + response_dct = base_response_dct + response_dct.update({'actions':actions, + 'action_selected':('contribute', 'edit'), 'error_message':'', - 'media_path':settings.MEDIA_URL, - 'extra_url':settings.EXTRA_URL, 'map_layer':settings.MAP_LAYER, 'form':form, 'extra_head':form.media, 'sub_categories':SubCategory.getAvailable(['M', 'B']), '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']) @@ -146,18 +142,17 @@ def editRoute(request): form = RouteForm() # get the « manualy » declared_fields. Ie: properties declared_fields = form.declared_fields.keys() - response_dct = {'actions':actions, - 'action_selected':('contribute', 'edit_route'), + response_dct = base_response_dct + response_dct.update({'actions':actions, + 'action_selected':('contribute', 'edit_route'), 'error_message':'', - 'media_path':settings.MEDIA_URL, 'map_layer':settings.MAP_LAYER, 'form':form, 'extra_head':form.media, - 'extra_url':settings.EXTRA_URL, 'sub_categories':SubCategory.getAvailable(['R', 'B']), 'route_widget':RouteChooserWidget().render('route', 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']) @@ -175,8 +170,8 @@ def submited(request, action): """ Successful submission page """ - response_dct = {'actions':actions, 'action_selected':action, - 'media_path':settings.MEDIA_URL,} + response_dct = base_response_dct + response_dct.update({'actions':actions, 'action_selected':action,}) return render_to_response('submited.html', response_dct) def contactus(request): @@ -200,8 +195,9 @@ details.") msg = _(u"Temporary error. Renew your message later.") else: form = ContactForm() - response_dct = {'actions':actions, 'action_selected':('contact',), - 'media_path':settings.MEDIA_URL,'contact_form':form, 'message':msg} + response_dct = base_response_dct + response_dct = ({'actions':actions, 'action_selected':('contact',), + 'contact_form':form, 'message':msg}) return render_to_response('contactus.html', response_dct) def getDetail(request, marker_id): @@ -212,7 +208,8 @@ def getDetail(request, marker_id): 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} + response_dct = base_response_dct + response_dct['marker'] = marker return render_to_response('detail.html', response_dct) def getDescriptionDetail(request, category_id): @@ -223,13 +220,16 @@ def getDescriptionDetail(request, category_id): category = Category.objects.filter(id=int(category_id))[0] except (ValueError, IndexError): return HttpResponse('no results') - response_dct= {'media_path':settings.MEDIA_URL, 'category':category} + response_dct = base_response_dct + response_dct['category'] = category return render_to_response('category_detail.html', response_dct) -def getGeoObjects(request, category_ids, status='A'): +def getGeoObjects(request, category_ids, status): ''' - Get the JSON for a route + Get the JSON for markers and routes ''' + if not status: + status = 'A' status = status.split('_') try: query = Route.objects.filter(status__in=status, @@ -258,3 +258,38 @@ def getGeoObjects(request, category_ids, status='A'): return HttpResponse('no results') data = '{"type": "FeatureCollection", "features":[%s]}' % ",".join(jsons) return HttpResponse(data) + +def getAvailableCategories(request, area=None, status='A', force=None): + ''' + Get categories for a designed area + ''' + if settings.DYNAMIC_CATEGORIES and not area: + return "" + response_dct = base_response_dct + if not settings.DYNAMIC_CATEGORIES: + subcategories = SubCategory.getAvailable() + response_dct['sub_categories'] = subcategories + return render_to_response('categories.html', response_dct) + default_message = "<p>%s</p>" % _("No category available in this area.") + if not status: # there must be a status + status = 'A' + try: + status = status.split('_') + area = area.replace('M', '-').replace('D', '.') + area = SimpleArea([float(pt) for pt in area.split('_')]) + except: + # bad area format + return HttpResponse(default_message) + # if not force and area.isIn(SimpleArea(cookie.AREA):return + categories = area.getCategories(status) + if not categories: + return HttpResponse(default_message) + get_cat = lambda subcat: subcat.category + get_cat_order = lambda subcat: (subcat.category.order, subcat.category, + subcat.order) + categories = sorted(categories, key=get_cat_order) + subcategories = [(cat, list(subcats)) \ + for cat, subcats in groupby(categories, get_cat)] + response_dct['sub_categories'] = subcategories + return render_to_response('categories.html', response_dct) + |
