from django.shortcuts import render from django.shortcuts import render, redirect, get_object_or_404, reverse from play.models import QuizGame, QuizGameParticipant from library.models import QivipQuiz, QivipQuestion from django.http import HttpResponseRedirect, HttpResponseNotFound import json # Create your views here. def lobby(request, join_code): quiz_game = get_object_or_404(QuizGame, join_code=join_code) quiz = get_object_or_404(QivipQuiz, pk=quiz_game.quiz_id.id) context = { 'quiz': quiz, 'quiz_game': quiz_game, } if "host_id" in request.COOKIES: host_id = request.COOKIES['host_id'] if host_id == quiz_game.host_id: context['host_id'] = host_id return render(request, 'play/lobby.html', context=context) if not "participant_id" in request.COOKIES: return redirect('play:create_participant', join_code=join_code) participant_id = request.COOKIES['participant_id'] try: participant = QuizGameParticipant.objects.get(participant_id=participant_id) if not participant.quiz_game.join_code == join_code: # Teilnehmer dem richtigen Spiel hinzufügen participant.quiz_game = quiz_game participant.save() except QuizGameParticipant.DoesNotExist: return redirect('play:create_participant', join_code=join_code) context['participant'] = participant return render(request, 'play/lobby.html', context=context) def create_participant(request, join_code): if "participant_id" in request.COOKIES: # Prüfe ob der Teilnehmer noch existiert participant_id = request.COOKIES['participant_id'] try: participant = QuizGameParticipant.objects.get(participant_id=participant_id) return redirect('play:lobby', join_code=join_code) except QuizGameParticipant.DoesNotExist: # Cookie löschen wenn Teilnehmer nicht mehr existiert response = HttpResponseRedirect(request.path) response.delete_cookie('participant_id') return response if request.method == 'POST': display_name = request.POST.get('display_name') join_code = request.POST.get('join_code') try: quiz = QuizGame.objects.get(join_code=join_code) participant = QuizGameParticipant() participant.display_name = display_name participant.quiz_game = quiz participant.save() response = HttpResponseRedirect(reverse('play:lobby', kwargs={'join_code': join_code})) response.set_cookie('participant_id', participant.participant_id, max_age=3600) return response except QuizGame.DoesNotExist: # TODO: Fehlermeldung fuer nicht-existierendes Quiz pass return render(request, 'play/initialize_participant.html', {'join_code': join_code}) def create_game(request, quiz_id): try: quiz = QivipQuiz.objects.get(id=quiz_id) game = QuizGame() game.quiz_id = quiz game.host_id = game.generate_unique_id() game.save() response = HttpResponseRedirect(reverse('play:lobby', kwargs={'join_code': game.join_code})) response.set_cookie('host_id', game.host_id, max_age=3600) return response except QivipQuiz.DoesNotExist: return HttpResponseNotFound("Quiz nicht gefunden") def join_game(request): if request.method == 'POST': join_code = request.POST.get('game_code') try: quiz = QuizGame.objects.get(join_code=join_code) return redirect('play:lobby', join_code=join_code) except QuizGame.DoesNotExist: # TODO: Mit message eine Fehlermeldung weitergeben (und im entsprechenden Template Designen) pass return render(request, 'play/join_game.html') def question(request, join_code, question_id): question = get_object_or_404(QivipQuestion, pk=question_id) if question.data: question.data = json.loads(question.data) context = { 'question': question, } return render(request, 'play/game/question_host.html', {'question': question, 'debug': "debug"}) def question_participant(request, join_code, question_id): question = get_object_or_404(QivipQuestion, pk=question_id) if question.data: question.data = json.loads(question.data) context = { 'question': question, } return render(request, 'play/game/question_participant.html', {'question': question, 'debug': "debug"})