87 lines
3.2 KiB
Python
87 lines
3.2 KiB
Python
from django.shortcuts import render, HttpResponse
|
|
from django.http import HttpResponseBadRequest
|
|
from django.views.generic import TemplateView
|
|
from django.utils.decorators import method_decorator
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
from bloonsa_game.models import Level, LevelRating
|
|
from users.models import Player
|
|
from users.util import tag_player
|
|
|
|
|
|
class CSRFexemptTemplateView(TemplateView):
|
|
@method_decorator(csrf_exempt)
|
|
def dispatch(self, *args, **kwargs):
|
|
return super().dispatch(*args, **kwargs)
|
|
|
|
|
|
class LoadLevel(CSRFexemptTemplateView):
|
|
def post(self, request, *args, **kwargs):
|
|
levelId = request.POST.get("levelId")
|
|
if levelId is None or not levelId.isdigit():
|
|
return HttpResponseBadRequest()
|
|
|
|
level = Level.objects.filter(levelId=int(levelId)).first()
|
|
if level is None:
|
|
return HttpResponseBadRequest()
|
|
|
|
if request.user.is_authenticated:
|
|
tag_player(request=request)
|
|
player = Player.objects.get(user=request.user)
|
|
player.bloonsa_levelsPlayed.add(level)
|
|
|
|
flashVars = level.getFlashVars(seperator="&")
|
|
return HttpResponse(flashVars)
|
|
|
|
|
|
class RandomLevel(CSRFexemptTemplateView):
|
|
def post(self, request, *args, **kwargs):
|
|
level = Level.objects.order_by("?").first()
|
|
flashVars = level.getFlashVars(seperator="&")
|
|
|
|
if request.user.is_authenticated:
|
|
tag_player(request=request)
|
|
player = Player.objects.get(user=request.user)
|
|
player.bloonsa_levelsPlayed.add(level)
|
|
|
|
return HttpResponse(flashVars)
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
return self.post(request=request, *args, **kwargs)
|
|
|
|
class CompleteLevel(CSRFexemptTemplateView):
|
|
def post(self, request, *args, **kwargs):
|
|
if request.user.is_authenticated:
|
|
tag_player(request=request)
|
|
levelId = int(request.POST.get("levelId"))
|
|
level = Level.objects.get(levelId=levelId)
|
|
player = Player.objects.get(user=request.user)
|
|
player.bloonsa_levelsBeaten.add(level)
|
|
|
|
# Sending empty content means error in as3
|
|
return HttpResponse(content="GG", status=200)
|
|
|
|
class RateLevel(CSRFexemptTemplateView):
|
|
def post(self, request, *args, **kwargs):
|
|
if request.user.is_authenticated:
|
|
tag_player(request=request)
|
|
rating = int(request.POST.get("rating"))
|
|
levelId = int(request.POST.get("levelId"))
|
|
level = Level.objects.get(levelId=levelId)
|
|
player = Player.objects.get(user=request.user)
|
|
ratingObject = LevelRating.objects.filter(player=player,
|
|
level=level).first()
|
|
if ratingObject:
|
|
ratingObject.rating = rating
|
|
ratingObject.save()
|
|
return HttpResponse(content="OK", status=200)
|
|
|
|
else:
|
|
rating = LevelRating.objects.create(player=player,
|
|
level=level,
|
|
rating=rating)
|
|
rating.save()
|
|
return HttpResponse(content="OK", status=200)
|
|
|
|
return HttpResponse(status=400)
|