8
8
from django.contrib.auth.decorators import login_required
9
9
from django.http import HttpResponseRedirect, HttpResponseNotAllowed, HttpResponse, HttpResponseBadRequest
10
10
from django.core.urlresolvers import reverse
11
from django.utils import simplejson as json
12
11
from django.db import IntegrityError
16
from widelandslib.map import WidelandsMap, WlMapLibraryException
13
from pybb.util import paginate
14
from settings import MAPS_PER_PAGE
19
from cStringIO import StringIO
22
from settings import WIDELANDS_SVN_DIR, MEDIA_ROOT, MEDIA_URL
28
23
def index( request ):
29
objects = models.Map.objects.all()
24
maps = models.Map.objects.all()
25
page, paginator = paginate(maps, request, MAPS_PER_PAGE,
26
total_count=maps.count())
30
27
return render_to_response("wlmaps/index.html",
31
{ "object_list": objects, },
28
{ "maps": page.object_list,
30
"paginator": paginator,
32
32
context_instance = RequestContext(request))
34
34
def rate( request, map_slug ):
92
91
def view(request, map_slug):
93
m = get_object_or_404( models.Map, slug = map_slug )
95
if m.rating.votes > 0:
96
avg = "%.1f" %( float(m.rating.score) /m.rating.votes )
92
map = get_object_or_404( models.Map, slug = map_slug )
101
"average_rating": avg,
95
#"average_rating": _average_rating( map.rating ),
104
98
return render_to_response( "wlmaps/map_detail.html",
106
100
context_instance=RequestContext(request))
109
104
def upload( request ):
111
Uploads a map. This is an ajax post and returns an JSON object
112
with the following values.
114
success_code - integer (0 means success else error)
115
error_msg - if success_code = 1 this contains an descriptive error
116
map_id - id of newly uploaded map
118
def JsonReply( success_code, error_msg = None, **kwargs):
120
d['success_code'] = success_code
121
if error_msg != None:
122
d['error_msg'] = error_msg
123
return HttpResponse( json.dumps(d), mimetype="application/javascript" )
125
if request.method != "POST":
126
return HttpResponseNotAllowed(["post"])
128
form = UploadMapForm( request.POST )
129
test = request.POST.get("test", False)
130
comment = request.POST.get("comment",u"")
132
if "mapfile" in request.FILES:
133
mf = request.FILES["mapfile"]
139
m.load(StringIO(mfdata))
140
except WlMapLibraryException:
141
return JsonReply( 3, "Invalid Map File" )
144
mm = m.make_minimap(WIDELANDS_SVN_DIR)
145
mm_path = "%s/wlmaps/minimaps/%s.png" % (MEDIA_ROOT,m.name)
146
mm_url = "/wlmaps/minimaps/%s.png" % m.name
147
file_path = "%s/wlmaps/maps/%s.wmf" % (MEDIA_ROOT,m.name)
150
f = open(file_path,"wb")
153
i = Image.fromarray(mm)
158
nm = models.Map.objects.create(
163
nr_players = m.nr_players,
167
world_name = m.world_name,
169
uploader = request.user,
170
uploader_comment = comment,
172
except IntegrityError:
173
return JsonReply(2, "Map with the same name already exists in database!")
177
return JsonReply(0, map_id = nm.pk )
179
return JsonReply(1, "No mapfile in request!")
105
if request.method == 'POST':
106
form = UploadMapForm(request.POST, request.FILES)
108
map = form.save(commit = False)
109
map.uploader = request.user
111
return HttpResponseRedirect(map.get_absolute_url())
114
form = UploadMapForm()
116
context = { 'form': form, }
117
return render_to_response( "wlmaps/upload.html",
119
context_instance=RequestContext(request))