views.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. from django.core.urlresolvers import reverse
  2. from django.http import JsonResponse, HttpResponseForbidden
  3. from django.shortcuts import render, redirect
  4. from django.views.generic import View
  5. from .forms import PublicContribForm
  6. from .models import Contrib
  7. def add_contrib(request):
  8. if request.method == 'GET':
  9. form = PublicContribForm()
  10. elif request.method == 'POST':
  11. form = PublicContribForm(request.POST)
  12. if form.is_valid():
  13. form.save()
  14. return redirect(reverse('thanks'))
  15. return render(request, 'contribmap/wifi-form.html', {
  16. 'form': form,
  17. })
  18. def thanks(request):
  19. return render(request, 'contribmap/thanks.html')
  20. class JSONContribView(View):
  21. def get(self, request):
  22. return JsonResponse({
  23. "id": self.ID,
  24. "license": self.LICENSE,
  25. "features": self.get_features(),
  26. })
  27. PLACE_PROPERTIES = [
  28. 'floor', 'angles', 'orientations', 'roof', 'floor', 'floor_total']
  29. class PublicJSON(JSONContribView):
  30. ID = 'public'
  31. LICENSE = {
  32. "type": "ODC-BY-1.0",
  33. "url": "http:\/\/opendatacommons.org\/licenses\/by\/1.0\/"
  34. }
  35. def get_features(self):
  36. contribs = Contrib.objects.all()
  37. data = []
  38. for i in contribs:
  39. if not i.is_public():
  40. continue
  41. data.append({
  42. "id": i.pk,
  43. "type": "Feature",
  44. "geometry": {
  45. "coordinates": [
  46. i.latitude,
  47. i.longitude,
  48. ],
  49. "type": "Point",
  50. },
  51. "properties": {
  52. "contrib_type": i.contrib_type,
  53. "name": i.get_public_field('name'),
  54. "place": {
  55. k: i.get_public_field(k) for k in self.PLACE_PROPERTIES
  56. },
  57. "comment": i.get_public_field('comment'),
  58. }
  59. })
  60. return data
  61. class PrivateJSON(JSONContribView):
  62. ID = 'private'
  63. LICENSE = {
  64. "type": "Copyright",
  65. }
  66. def dispatch(self, request, *args, **kwargs):
  67. if hasattr(request, 'user') and request.user.is_staff:
  68. return super().dispatch(request, *args, **kwargs)
  69. else:
  70. return HttpResponseForbidden('Need staff access')
  71. def get_features(self):
  72. contribs = Contrib.objects.all()
  73. data = []
  74. for i in contribs:
  75. if not i.is_public():
  76. continue
  77. data.append({
  78. "id": i.pk,
  79. "type": "Feature",
  80. "geometry": {
  81. "coordinates": [
  82. i.latitude,
  83. i.longitude,
  84. ],
  85. "type": "Point",
  86. },
  87. "properties": {
  88. "contrib_type": i.contrib_type,
  89. "name": i.name,
  90. "place": {
  91. k: getattr(i, k) for k in self.PLACE_PROPERTIES
  92. },
  93. "comment": i.comment,
  94. "phone": i.phone,
  95. "email": i.email
  96. }
  97. })
  98. return data