diff options
Diffstat (limited to 'chimere/views.py')
-rw-r--r-- | chimere/views.py | 132 |
1 files changed, 111 insertions, 21 deletions
diff --git a/chimere/views.py b/chimere/views.py index a1f22c3..fdc4da0 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -35,21 +35,22 @@ from django.core.urlresolvers import reverse from django.db.models import Q from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import redirect, render_to_response -from django.template import loader, RequestContext +from django.template import loader, RequestContext, defaultfilters from django.utils import simplejson from django.utils.http import urlquote from django.utils.translation import ugettext as _ from chimere.actions import actions -from chimere.models import Category, SubCategory, PropertyModel, \ - Marker, Route, News, SimpleArea, Area, Color, TinyUrl, RouteFile, \ - get_users_by_area +from chimere.models import Category, SubCategory, PropertyModel, Page,\ + Marker, Route, News, SimpleArea, Area, Color, TinyUrl, RouteFile from chimere.widgets import getMapJS, PointChooserWidget, \ RouteChooserWidget, AreaWidget from chimere.forms import MarkerForm, RouteForm, ContactForm, FileForm, \ FullFileForm, MultimediaFileFormSet, PictureFileFormSet, notifySubmission,\ - notifyStaff, AreaForm + notifyStaff, AreaForm, RoutingForm, getStaffEmails + +from chimere.route import router def get_base_uri(request): base_uri = 'http://' @@ -103,6 +104,31 @@ def get_base_response(area_name=""): base_response_dct['JQUERY_CSS_URLS'] = settings.JQUERY_CSS_URLS return base_response_dct, None +def getShareUrl(request, area_name='', network=''): + """ + Get a share url + """ + data = getTinyfiedUrl(request, request.GET.urlencode(), area_name) + for name, url, img in settings.CHIMERE_SHARE_NETWORKS: + if defaultfilters.slugify(name) == network: + return HttpResponse(url % {'text':data['text'], 'url':data['url']}) + return HttpResponse('') + +def getShareNetwork(request, area_name='', marker=None): + """ + Get URLs to share items + """ + parameters = "" + if marker: + parameters = u'current_feature=%d' % marker.pk + parameters += u"&checked_categories=%s" % "_".join([str(m.id) \ + for m in marker.categories.all()]) + net_dct = getTinyfiedUrl(request, parameters, area_name) + share_networks = [] + for network in settings.CHIMERE_SHARE_NETWORKS: + share_networks.append((network[0], network[1] % net_dct, network[2])) + return share_networks, net_dct + def index(request, area_name=None, default_area=None, simple=False): """ Main page @@ -123,15 +149,21 @@ def index(request, area_name=None, default_area=None, simple=False): if request.GET and 'lat' in request.GET \ and 'lon' in request.GET: zoomout = None + if settings.CHIMERE_ENABLE_ROUTING: + response_dct['itinerary_form'] = RoutingForm() response_dct.update({ - 'actions':actions, 'action_selected':('view',), + 'actions':actions(response_dct['area_name']), + 'action_selected':('view',), 'error_message':'', 'news_visible': news_visible, 'areas_visible': settings.CHIMERE_DISPLAY_AREAS, 'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER, 'dynamic_categories':response_dct['dynamic_categories'], - 'zoomout':zoomout + 'zoomout':zoomout, + 'contact_email':settings.CONTACT_EMAIL }) + response_dct['share_networks'], net_dct = \ + getShareNetwork(request, response_dct['area_name']) tpl = 'chimere/main_map.html' if simple: tpl = 'chimere/main_map_simple.html' @@ -266,7 +298,7 @@ def edit(request, area_name="", item_id=None, submited=False): if request.POST and request.POST.get('point'): point_value = request.POST.get('point') response_dct.update({ - 'actions':actions, + 'actions':actions(response_dct['area_name']), 'action_selected':('contribute', 'edit'), 'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER, 'form':form, @@ -374,7 +406,7 @@ def editRoute(request, area_name="", item_id=None, submited=False): if request.POST and request.POST.get('route'): route_value = request.POST.get('route') response_dct.update({ - 'actions':actions, + 'actions':actions(response_dct['area_name']), 'action_selected':('contribute', 'edit-route'), 'error_message':'', 'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER, @@ -402,7 +434,8 @@ def submited(request, area_name="", action=""): response_dct, redir = get_base_response(area_name) if redir: return redir - response_dct.update({'actions':actions, 'action_selected':action,}) + response_dct.update({'actions':actions(response_dct['area_name']), + 'action_selected':action,}) return render_to_response('chimere/submited.html', response_dct, context_instance=RequestContext(request)) @@ -413,7 +446,8 @@ def charte(request, area_name=""): response_dct, redir = get_base_response(area_name) if redir: return redir - response_dct.update({'actions':actions, 'action_selected':('charte',)}) + response_dct.update({'actions':actions(response_dct['area_name']), + 'action_selected':('charte',)}) return render_to_response('chimere/charte.html', response_dct, context_instance=RequestContext(request)) @@ -441,11 +475,32 @@ def contactus(request, area_name=""): response_dct, redir = get_base_response(area_name) if redir: return redir - response_dct.update({'actions':actions, 'action_selected':('contact',), + response_dct.update({'actions':actions(response_dct['area_name']), + 'action_selected':('contact',), 'contact_form':form, 'message':msg}) return render_to_response('chimere/contactus.html', response_dct, context_instance=RequestContext(request)) +def extraPage(request, area_name="", page_id=""): + """ + Extra dynamic pages + """ + try: + page = Page.objects.get(available=True, mnemonic=page_id) + except ObjectDoesNotExist: + return redirect(reverse('chimere:index')) + response_dct, redir = get_base_response(area_name) + if redir: + return redir + response_dct.update({'actions':actions(response_dct['area_name']), + 'action_selected':(page_id,), + 'content':page.content, + 'title':page.title}) + tpl = page.template_path if page.template_path \ + else 'chimere/default_extra_page.html' + return render_to_response(tpl, response_dct, + context_instance=RequestContext(request)) + def getDetail(request, area_name, marker_id): ''' Get the detail for a marker @@ -462,15 +517,14 @@ def getDetail(request, area_name, marker_id): if request.method == 'GET': if 'simple' in request.GET and request.GET['simple']: response_dct['simple'] = True - parameters = u'current_feature=%s' % marker_id - parameters += u"&checked_categories=%s" % "_".join([str(m.id) \ - for m in marker.categories.all()]) - net_dct = getTinyfiedUrl(request, parameters, response_dct['area_name']) - share_networks = [] + response_dct['share_networks'], net_dct = \ + getShareNetwork(request, response_dct['area_name'], marker) response_dct['share_url'] = net_dct['url'] - for network in settings.CHIMERE_SHARE_NETWORKS: - share_networks.append((network[0], network[1] % net_dct, network[2])) - response_dct['share_networks'] = share_networks + net_dct['to'] = ";".join(getStaffEmails()) + if net_dct['to']: + net_dct["body"] = _(settings.CHIMERE_MODIF_EMAIL) + response_dct['modif_by_email'] = 'mailto:?to=%(to)s&subject='\ + '%(text)s&body=%(body)s%(url)s' % net_dct response_dct['dated'] = settings.CHIMERE_DAYS_BEFORE_EVENT \ and marker.start_date return render_to_response('chimere/detail.html', response_dct, @@ -592,6 +646,16 @@ def get_available_categories(request, area_name=None, area=None, status='A', return render_to_response('chimere/blocks/categories.html', context_data, context_instance=RequestContext(request)) +def getCategory(request, area_name='', category_id=0): + ''' + Get the JSON for a category (mainly in order to get the description) + ''' + try: + category = SubCategory.objects.get(pk=category_id) + except ObjectDoesNotExist: + return HttpResponse('no results') + return HttpResponse(category.getJSON()) + def getTinyfiedUrl(request, parameters, area_name=''): ''' Get the tinyfied version of parameters @@ -632,6 +696,31 @@ def redirectFromTinyURN(request, area_name='', tiny_urn=''): return redir return HttpResponseRedirect(response_dct['extra_url'] + parameters) +def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2, + transport='foot', speed=''): + ''' + Get the JSON for a route + ''' + try: + lon1, lat1 = float(lon1), float(lat1) + lon2, lat2 = float(lon2), float(lat2) + steps = [float(lonlat) for lonlat in lonlat_steps.split('_') if lonlat] + # regroup by 2 + steps = [(steps[i*2], steps[i*2+1]) for i in range(len(steps)/2)] + except ValueError: + return HttpResponse('no results') + jsons, desc, total = router.route(lon1, lat1, lon2, lat2, steps=steps, + transport=transport, speed=speed) + if not jsons: + return HttpResponse('no results') + jsonencoder = simplejson.JSONEncoder() + total = jsonencoder.encode(total) + desc = jsonencoder.encode(desc) + data = '{"properties":{"total":%s, "description":%s}, '\ + '"type": "FeatureCollection", "features":[%s]}' % (total, desc, + ",".join(jsons)) + return HttpResponse(data) + def rss(request, area_name=''): ''' Redirect to RSS subscription page @@ -639,7 +728,8 @@ def rss(request, area_name=''): response_dct, redir = get_base_response(area_name) if redir: return redir - response_dct.update({'actions':actions, 'action_selected':('rss',), + response_dct.update({'actions':actions(response_dct['area_name']), + 'action_selected':('rss',), 'category_rss_feed':'',}) # If the form has been submited if request.method == "POST": |