summaryrefslogtreecommitdiff
path: root/chimere/main
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/main')
-rw-r--r--chimere/main/views.py64
-rw-r--r--chimere/main/widgets.py21
2 files changed, 52 insertions, 33 deletions
diff --git a/chimere/main/views.py b/chimere/main/views.py
index 86d98e7..dae5f82 100644
--- a/chimere/main/views.py
+++ b/chimere/main/views.py
@@ -40,10 +40,21 @@ from chimere.main.widgets import getMapJS, PointChooserWidget, \
from chimere.main.forms import MarkerForm, RouteForm, ContactForm, \
notifySubmission, notifyStaff
-base_response_dct = {'media_path':settings.MEDIA_URL,
- 'extra_url':settings.EXTRA_URL,}
+def get_base_response(area_name=""):
+ """
+ Get the base url
+ """
+ base_response_dct = {'media_path':settings.MEDIA_URL,}
+ base_url = settings.EXTRA_URL
+ if not base_url.startswith('/'):
+ base_url = '/' + base_url
+ if area_name:
+ base_url = '/' + area_name + base_url
+ base_response_dct['extra_url'] = base_url
+ base_response_dct['area_name'] = area_name
+ return base_response_dct
-def index(request):
+def index(request, area_name=None, default_area=None):
"""
Main page
"""
@@ -62,10 +73,10 @@ def index(request):
request.session['last_visit'] != today:
request.session['last_visit'] = today
display_welcome = True
- response_dct = base_response_dct
+ response_dct = get_base_response(area_name)
response_dct.update({'actions':actions, 'action_selected':('view',),
- 'error_message':'',
- 'extra_head':extra + getMapJS(),
+ 'error_message':'', 'default_area':default_area,
+ 'extra_head':extra + getMapJS(area_name),
'welcome':welcome(request, display_welcome),
'areas':Area.getAvailable(),
'map_layer':settings.MAP_LAYER,
@@ -86,7 +97,7 @@ def index(request):
response_dct['p_checked_categories'] = '';
return render_to_response('main_map.html', response_dct)
-def edit(request):
+def edit(request, area_name=""):
"""
Edition page
"""
@@ -100,13 +111,15 @@ def edit(request):
marker.status = 'S'
marker.save()
notifySubmission(marker)
- return HttpResponseRedirect('/' + settings.EXTRA_URL +'submited/edit')
+ response_dct = get_base_response(area_name)
+ return HttpResponseRedirect(response_dct['extra_url'] + \
+'submited/edit')
else:
# An unbound form
form = MarkerForm()
# get the « manualy » declared_fields. Ie: properties
declared_fields = form.declared_fields.keys()
- response_dct = base_response_dct
+ response_dct = get_base_response(area_name)
response_dct.update({'actions':actions,
'action_selected':('contribute', 'edit'),
'error_message':'',
@@ -114,7 +127,8 @@ def edit(request):
'form':form,
'extra_head':form.media,
'sub_categories':SubCategory.getAvailable(['M', 'B']),
- 'point_widget':PointChooserWidget().render('point', None),
+ 'point_widget':PointChooserWidget().render('point', None,
+ area_name=area_name),
'properties':declared_fields
})
# manualy populate the custom widget
@@ -122,7 +136,7 @@ def edit(request):
response_dct['current_category'] = int(form.data['subcategory'])
return render_to_response('edit.html', response_dct)
-def editRoute(request):
+def editRoute(request, area_name=""):
"""
Route edition page
"""
@@ -136,14 +150,15 @@ def editRoute(request):
route.status = 'S'
route.save()
notifySubmission(route)
- return HttpResponseRedirect('/' + settings.EXTRA_URL + \
- 'submited/edit_route')
+ response_dct = get_base_response(area_name)
+ return HttpResponseRedirect(response_dct['extra_url'] + \
+'submited/edit')
else:
# An unbound form
form = RouteForm()
# get the « manualy » declared_fields. Ie: properties
declared_fields = form.declared_fields.keys()
- response_dct = base_response_dct
+ response_dct = get_base_response(area_name)
response_dct.update({'actions':actions,
'action_selected':('contribute', 'edit_route'),
'error_message':'',
@@ -151,7 +166,8 @@ def editRoute(request):
'form':form,
'extra_head':form.media,
'sub_categories':SubCategory.getAvailable(['R', 'B']),
- 'route_widget':RouteChooserWidget().render('route', None),
+ 'route_widget':RouteChooserWidget().render('route', None,
+ area_name=area_name),
'properties':declared_fields
})
# manualy populate the custom widget
@@ -167,15 +183,15 @@ def welcome(request, display=None):
response_dct['news_lst'] = News.objects.filter(available=True)
return loader.render_to_string('welcome.html', response_dct)
-def submited(request, action):
+def submited(request, area_name="", action=""):
"""
Successful submission page
"""
- response_dct = base_response_dct
+ response_dct = get_base_response(area_name)
response_dct.update({'actions':actions, 'action_selected':action,})
return render_to_response('submited.html', response_dct)
-def contactus(request):
+def contactus(request, area_name=""):
"""
Contact page
"""
@@ -196,9 +212,9 @@ details.")
msg = _(u"Temporary error. Renew your message later.")
else:
form = ContactForm()
- response_dct = base_response_dct
- response_dct = ({'actions':actions, 'action_selected':('contact',),
- 'contact_form':form, 'message':msg})
+ response_dct = get_base_response(area_name)
+ response_dct.update({'actions':actions, 'action_selected':('contact',),
+ 'contact_form':form, 'message':msg})
return render_to_response('contactus.html', response_dct)
def getDetail(request, marker_id):
@@ -209,7 +225,7 @@ 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 = base_response_dct
+ response_dct = get_base_response()
response_dct['marker'] = marker
return render_to_response('detail.html', response_dct)
@@ -221,7 +237,7 @@ def getDescriptionDetail(request, category_id):
category = Category.objects.filter(id=int(category_id))[0]
except (ValueError, IndexError):
return HttpResponse('no results')
- response_dct = base_response_dct
+ response_dct = get_base_response()
response_dct['category'] = category
return render_to_response('category_detail.html', response_dct)
@@ -266,7 +282,7 @@ def getAvailableCategories(request, area=None, status='A', force=None):
'''
if settings.DYNAMIC_CATEGORIES and not area:
return ""
- response_dct = base_response_dct
+ response_dct = get_base_response()
if not settings.DYNAMIC_CATEGORIES:
subcategories = SubCategory.getAvailable()
response_dct['sub_categories'] = subcategories
diff --git a/chimere/main/widgets.py b/chimere/main/widgets.py
index 44e8ac8..2653c19 100644
--- a/chimere/main/widgets.py
+++ b/chimere/main/widgets.py
@@ -38,7 +38,7 @@ class ManyToManyField_NoSyncdb(models.ManyToManyField):
super(ManyToManyField_NoSyncdb, self).__init__(*args, **kwargs)
self.creates_table = False
-def getMapJS():
+def getMapJS(area_name=''):
'''Variable initialization for drawing the map
'''
# projection, center and bounds definitions
@@ -52,6 +52,9 @@ def getMapJS():
js += u"var media_path = '%s';\n" % settings.MEDIA_URL
js += u"var map_layer = %s;\n" % settings.MAP_LAYER
js += u"var restricted_extent;\n"
+
+ if area_name:
+ js += u"var area_name='%s';\n" % area_name
if settings.RESTRICTED_EXTENT:
restricted_extent_str = [str(coord) \
for coord in settings.RESTRICTED_EXTENT]
@@ -81,7 +84,7 @@ class PointChooserWidget(forms.TextInput):
js = URL_OSM_JS + ["%sedit_map.js" % settings.MEDIA_URL,
"%sbase.js" % settings.MEDIA_URL,]
- def render(self, name, value, attrs=None):
+ def render(self, name, value, attrs=None, area_name=''):
'''
Render a map and latitude, longitude information field
'''
@@ -99,7 +102,7 @@ class PointChooserWidget(forms.TextInput):
value = None
else:
value = None
- tpl = getMapJS()
+ tpl = getMapJS(area_name)
tpl += u'<script src="%sedit_map.js"></script>\n' % settings.MEDIA_URL
tpl += u"""<div id='map_edit'></div>
<div id='live_lonlat'>
@@ -112,8 +115,8 @@ value='%f'/></p>
</div>
<input type='hidden' name='%s' id='id_%s' value="%s"/>
""" % (_("Latitude"), value_y, _("Longitude"), value_x, name, name, val)
- tpl += """<script type='text/javascript'><!--
-init();"""
+ tpl += "<script type='text/javascript'><!--\n"
+ tpl += "init();\n"
if value:
tpl += '''var mylonlat = new OpenLayers.LonLat(%f,%f);
putMarker(mylonlat.transform(epsg_display_projection,
@@ -149,11 +152,11 @@ class RouteChooserWidget(forms.TextInput):
js = ["%sedit_route_map.js" % settings.MEDIA_URL,
"%sbase.js" % settings.MEDIA_URL,] + URL_OSM_JS
- def render(self, name, value, attrs=None):
+ def render(self, name, value, attrs=None, area_name=''):
'''
Render a map and latitude, longitude information field
'''
- tpl = getMapJS()
+ tpl = getMapJS(area_name)
help_create = ''
if not value:
help_create = """<h3>%s</h3>
@@ -198,8 +201,8 @@ onclick='toggleDrawOff();'>%s</div>
<hr class='spacer'/>
<input type='hidden' name='%s' id='id_%s' value="%s"/>
""" % (style, help_modify, name, name, value)
- tpl += """<script type='text/javascript'><!--
-init();"""
+ tpl += "<script type='text/javascript'><!--\n"
+ tpl += "init();\n"
if value:
val = value
if type(value) == unicode: