summaryrefslogtreecommitdiff
path: root/chimere/main/views.py
diff options
context:
space:
mode:
authoretienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864>2010-02-28 20:50:07 +0000
committeretienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864>2010-02-28 20:50:07 +0000
commit4be50007afb898efdf11a34851c092b9102f386a (patch)
tree409da91b2bca55f5288c1aa7e6496da58786df8b /chimere/main/views.py
parent9651da473d422ed9c966997c6e2194f15d825836 (diff)
downloadChimè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.py103
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)
+