views.py 3.3 KB

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