Mercurial > public > sg101
diff gpp/membermap/views.py @ 1:dbd703f7d63a
Initial import of sg101 stuff from private repository.
author | gremmie |
---|---|
date | Mon, 06 Apr 2009 02:43:12 +0000 |
parents | |
children | 4532ed27bed8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gpp/membermap/views.py Mon Apr 06 02:43:12 2009 +0000 @@ -0,0 +1,108 @@ +""" +Views for the membermap application. +""" +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.http import HttpResponse +from django.http import HttpResponseBadRequest +from django.http import HttpResponseForbidden +from django.views.decorators.http import require_POST + +from membermap.models import MapEntry +from membermap.forms import MapEntryForm + + +def index(request): + entry = None + if request.user.is_authenticated(): + try: + entry = MapEntry.objects.get(user=request.user) + except MapEntry.DoesNotExist: + pass + if entry is not None: + form = MapEntryForm(initial={ + 'location': entry.location, + 'message': entry.message}) + else: + form = MapEntryForm() + + return render_to_response('membermap/index.html', { + 'form': form, + }, + context_instance = RequestContext(request)) + + +def query(request): + """ + This view is called by AJAX. If the user is logged in, return + a JSON object that consists of: + "users" : array of user objects + "recent" : array of usernames recently modified + """ + if request.user.is_authenticated(): + qs = MapEntry.objects.values_list('json', flat=True).order_by('user__username') + s = '{"users":[' + ','.join(qs) + '], "recent":[' + + names = MapEntry.objects.values_list('user__username', flat=True)[:10] + s += ','.join(['"%s"' % name for name in names]) + s += ']}' + return HttpResponse(s, content_type='application/json') + + return HttpResponseForbidden('You must be logged in.') + + +@require_POST +def add(request): + """ + This view is called by AJAX to add/update the user to the map. + It returns the new JSON representation of the user. + """ + if not request.user.is_authenticated(): + return HttpResponseForbidden('You must be logged in.') + + loc = request.POST.get('loc', None) + lat = request.POST.get('lat', None) + lon = request.POST.get('lon', None) + msg = request.POST.get('msg', '') + + if loc is None or lat is None or lon is None: + return HttpResponseBadRequest('Missing parameters') + + try: + lat = float(lat) + lon = float(lon) + except ValueError: + return HttpResponseBadRequest('Invalid lat/lon') + + try: + entry = MapEntry.objects.get(user=request.user) + except MapEntry.DoesNotExist: + entry = MapEntry(user=request.user) + + entry.location = loc + entry.lat = lat + entry.lon = lon + entry.message = msg + entry.save() + + return HttpResponse(entry.json, content_type='application/json') + + +@require_POST +def delete(request): + """ + This view is called by AJAX to delete the user from the map. + """ + if not request.user.is_authenticated(): + return HttpResponseForbidden('You must be logged in.') + + try: + entry = MapEntry.objects.get(user=request.user) + except MapEntry.DoesNotExist: + pass + else: + entry.delete() + + return HttpResponse('') + +# vim: ts=4 sw=4