bgneal@820
|
1 """Views for the bandmap application.
|
bgneal@820
|
2
|
bgneal@820
|
3 """
|
bgneal@827
|
4 import json
|
bgneal@827
|
5
|
bgneal@820
|
6 from django.contrib.auth.decorators import login_required
|
bgneal@820
|
7 from django.shortcuts import redirect, render
|
bgneal@821
|
8 from django.contrib import messages as django_messages
|
bgneal@827
|
9 from django.http import HttpResponse
|
bgneal@827
|
10 from django.template.loader import render_to_string
|
bgneal@827
|
11 from django.core.cache import cache
|
bgneal@820
|
12
|
bgneal@820
|
13 from bandmap.forms import BandForm
|
bgneal@827
|
14 from bandmap.models import BandEntry
|
bgneal@820
|
15
|
bgneal@820
|
16
|
bgneal@821
|
17 SUCCESS = "Successfully submitted {} for admin review. Thanks!"
|
bgneal@821
|
18
|
bgneal@821
|
19
|
bgneal@820
|
20 def map_view(request):
|
bgneal@820
|
21 return render(request, 'bandmap/map.html')
|
bgneal@820
|
22
|
bgneal@820
|
23
|
bgneal@820
|
24 @login_required
|
bgneal@820
|
25 def add_band(request):
|
bgneal@820
|
26 """
|
bgneal@820
|
27 Provides the ability for a user to submit a new band to the map.
|
bgneal@820
|
28
|
bgneal@820
|
29 """
|
bgneal@820
|
30 if request.method == 'POST':
|
bgneal@820
|
31 form = BandForm(request.POST)
|
bgneal@820
|
32 if form.is_valid():
|
bgneal@820
|
33 band = form.save(commit=False)
|
bgneal@820
|
34 band.user = request.user
|
bgneal@820
|
35 band.save()
|
bgneal@821
|
36 django_messages.success(request, SUCCESS.format(band.name))
|
bgneal@825
|
37 return redirect('bandmap-add')
|
bgneal@820
|
38 else:
|
bgneal@820
|
39 form = BandForm()
|
bgneal@820
|
40
|
bgneal@820
|
41 return render(request, 'bandmap/add.html', {
|
bgneal@820
|
42 'form': form,
|
bgneal@820
|
43 })
|
bgneal@827
|
44
|
bgneal@827
|
45
|
bgneal@827
|
46 def query(request):
|
bgneal@827
|
47 """Retrieves the band map entries and returns them as JSON.
|
bgneal@827
|
48
|
bgneal@827
|
49 """
|
bgneal@827
|
50 show_param = request.GET.get('show', 'all')
|
bgneal@827
|
51 if show_param not in ['all', 'active', 'inactive']:
|
bgneal@827
|
52 show_param = 'all'
|
bgneal@827
|
53
|
bgneal@827
|
54 # Do we have the results cached already?
|
bgneal@827
|
55 cache_key = 'bandmap-results-{}'.format(show_param)
|
bgneal@827
|
56 results = cache.get(cache_key)
|
bgneal@827
|
57 if results:
|
bgneal@827
|
58 return HttpResponse(results, content_type='application/json')
|
bgneal@827
|
59
|
bgneal@827
|
60 # Generate results
|
bgneal@827
|
61 qs = BandEntry.objects.filter(is_approved=True)
|
bgneal@827
|
62 if show_param == 'active':
|
bgneal@827
|
63 qs = qs.filter(is_active=True)
|
bgneal@827
|
64 elif show_param == 'inactive':
|
bgneal@827
|
65 qs = qs.filter(is_active=False)
|
bgneal@827
|
66
|
bgneal@827
|
67 bands = []
|
bgneal@827
|
68 for band in qs.iterator():
|
bgneal@831
|
69 note = render_to_string('bandmap/balloon.html', {'band': band})
|
bgneal@831
|
70 note = note.strip().replace('\n', '')
|
bgneal@827
|
71 bands.append({
|
bgneal@827
|
72 'name': band.name,
|
bgneal@827
|
73 'lat': band.lat,
|
bgneal@827
|
74 'lon': band.lon,
|
bgneal@830
|
75 'is_active': band.is_active,
|
bgneal@831
|
76 'note': note,
|
bgneal@827
|
77 })
|
bgneal@827
|
78 results = json.dumps(bands)
|
bgneal@827
|
79
|
bgneal@827
|
80 # Store in cache
|
bgneal@827
|
81 cache.set(cache_key, results, 300)
|
bgneal@827
|
82
|
bgneal@827
|
83 return HttpResponse(results, content_type='application/json')
|