1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#!/usr/bin/env python -tt
# encoding: utf-8
#
from forms import UploadMapForm, EditCommentForm
from django.shortcuts import render, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect, HttpResponseNotAllowed, HttpResponse, HttpResponseBadRequest
from django.urls import reverse
import models
from settings import MAPS_PER_PAGE
from wl_utils import get_real_ip
import os
#########
# Views #
#########
def index(request):
maps = models.Map.objects.all()
return render(request, 'wlmaps/index.html',
{'maps': maps,
'maps_per_page': MAPS_PER_PAGE,
})
def rate(request, map_slug):
"""Rate a given map."""
if request.method != 'POST':
return HttpResponseNotAllowed(['post'])
m = get_object_or_404(models.Map, slug=map_slug)
if not 'vote' in request.POST:
return HttpResponseBadRequest()
try:
val = int(request.POST['vote'])
except ValueError:
return HttpResponseBadRequest()
if not (0 < val <= 10):
return HttpResponseBadRequest()
m.rating.add(score=val, user=request.user,
ip_address=get_real_ip(request))
# m.save() is called in djangoratings.fields.add for each instance
return HttpResponseRedirect(reverse('wlmaps_view', kwargs= {'map_slug': m.slug}))
def download(request, map_slug):
"""Very simple view that just returns the binary data of this map and
increases the download count."""
m = get_object_or_404(models.Map, slug=map_slug)
file = open(m.file.path, 'rb')
data = file.read()
filename = os.path.basename('%s.wmf' % m.name)
# Remember that this has been downloaded
m.nr_downloads += 1
m.save(update_fields=['nr_downloads'])
response = HttpResponse(data, content_type='application/octet-stream')
response['Content-Disposition'] = 'attachment; filename="%s"' % filename
return response
def view(request, map_slug):
map = get_object_or_404(models.Map, slug=map_slug)
context = {
'map': map,
}
return render(request, 'wlmaps/map_detail.html',
context)
@login_required
def edit_comment(request, map_slug):
map = get_object_or_404(models.Map, slug=map_slug)
if request.method == 'POST':
form = EditCommentForm(request.POST)
if form.is_valid():
map.uploader_comment = form.cleaned_data['uploader_comment']
map.save(update_fields=['uploader_comment'])
return HttpResponseRedirect(map.get_absolute_url())
else:
form = EditCommentForm(instance=map)
context = {'form': form, 'map': map}
return render(request, 'wlmaps/edit_comment.html',
context)
@login_required
def upload(request):
if request.method == 'POST':
form = UploadMapForm(request.POST, request.FILES)
if form.is_valid():
map = form.save(commit=False)
map.uploader = request.user
map.save()
return HttpResponseRedirect(map.get_absolute_url())
else:
form = UploadMapForm()
context = {'form': form, }
return render(request, 'wlmaps/upload.html',
context)
|