100 lines
3.6 KiB
Python
100 lines
3.6 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib.auth.models import User
|
|
from .models import QivipQuiz, QivipQuestion
|
|
from .forms import QuizForm, QuestionForm
|
|
|
|
# Übersicht aller Quizze
|
|
@login_required
|
|
def overview_quiz(request):
|
|
quizzes = QivipQuiz.objects.filter(user_id=request.user)
|
|
return render(request, 'library/overview_quiz.html', {'quizzes': quizzes})
|
|
|
|
# Neues Quiz erstellen
|
|
@login_required
|
|
def new_quiz(request):
|
|
if request.method == 'POST':
|
|
form = QuizForm(request.POST)
|
|
if form.is_valid():
|
|
quiz = form.save(commit=False)
|
|
quiz.user_id = request.user
|
|
quiz.save()
|
|
form.save_m2m() # Speichert die Many-to-Many Beziehungen (Tags)
|
|
return redirect('library:edit_quiz', pk=quiz.pk)
|
|
else:
|
|
form = QuizForm()
|
|
return render(request, 'library/form.html', {'form': form})
|
|
|
|
# Quiz bearbeiten
|
|
@login_required
|
|
def edit_quiz(request, pk):
|
|
quiz = get_object_or_404(QivipQuiz, pk=pk, user_id=request.user)
|
|
if request.method == 'POST':
|
|
form = QuizForm(request.POST, instance=quiz)
|
|
if form.is_valid():
|
|
form.save()
|
|
return redirect('library:overview_quiz')
|
|
else:
|
|
form = QuizForm(instance=quiz)
|
|
return render(request, 'library/form.html', {'form': form})
|
|
|
|
# Quiz löschen
|
|
@login_required
|
|
def delete_quiz(request, pk):
|
|
quiz = get_object_or_404(QivipQuiz, pk=pk, user_id=request.user)
|
|
if request.method == 'POST':
|
|
quiz.delete()
|
|
return redirect('library:overview_quiz')
|
|
return render(request, 'library/delete_confirmation.html', {'object': quiz})
|
|
|
|
# Quiz anzeigen
|
|
@login_required
|
|
def detail_quiz(request, pk):
|
|
quiz = get_object_or_404(QivipQuiz, pk=pk, user_id=request.user)
|
|
questions = QivipQuestion.objects.filter(quiz_id=quiz)
|
|
return render(request, 'library/detail_quiz.html', {'quiz': quiz, 'questions': questions})
|
|
|
|
# Übersicht aller Fragen
|
|
@login_required
|
|
def question_list(request):
|
|
questions = QivipQuestion.objects.filter(quiz_id__user_id=request.user)
|
|
return render(request, 'library/question_list.html', {'questions': questions})
|
|
|
|
# Neue Frage erstellen
|
|
@login_required
|
|
def new_question(request):
|
|
if request.method == 'POST':
|
|
form = QuestionForm(request.POST)
|
|
if form.is_valid():
|
|
question = form.save(commit=False)
|
|
# Prüfe ob der User Zugriff auf das Quiz hat
|
|
if question.quiz_id.user_id != request.user:
|
|
return redirect('library:question_list')
|
|
question.save()
|
|
return redirect('library:edit_question', pk=question.pk)
|
|
else:
|
|
form = QuestionForm()
|
|
return render(request, 'library/form.html', {'form': form})
|
|
|
|
# Frage bearbeiten
|
|
@login_required
|
|
def edit_question(request, pk):
|
|
question = get_object_or_404(QivipQuestion, pk=pk, quiz_id__user_id=request.user)
|
|
if request.method == 'POST':
|
|
form = QuestionForm(request.POST, instance=question)
|
|
if form.is_valid():
|
|
form.save()
|
|
return redirect('library:edit_question', pk=pk)
|
|
else:
|
|
form = QuestionForm(instance=question)
|
|
return render(request, 'library/form.html', {'form': form})
|
|
|
|
# Frage löschen
|
|
@login_required
|
|
def delete_question(request, pk):
|
|
question = get_object_or_404(QivipQuestion, pk=pk, quiz_id__user_id=request.user)
|
|
if request.method == 'POST':
|
|
question.delete()
|
|
return redirect('library:detail_quiz', pk=question.quiz_id.pk)
|
|
return render(request, 'library/delete_confirmation.html', {'object': question})
|