Files
penracourses/rad/views.py
T
Ross 14b95180eb .
2021-04-18 12:16:56 +01:00

142 lines
4.3 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from django.views.decorators.csrf import csrf_exempt
from django import forms
# from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required, user_passes_test
from django.contrib.auth.models import User
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic import ListView
from django.db.models.functions import Lower
from django.core.cache import cache
from django.urls import reverse_lazy, reverse
from django.http import Http404, JsonResponse
from django.http import HttpResponseRedirect, HttpResponse
from physics.models import CidUserAnswer as PhysicsCidUserAnswer
from physics.models import Exam as PhysicsExam
from anatomy.models import CidUserAnswer as AnatomyCidUserAnswer
from anatomy.models import Exam as AnatomyExam
from rapids.models import CidUserAnswer as RapidsCidUserAnswer
from rapids.models import Exam as RapidsExam
from longs.models import CidUserAnswer as LongsCidUserAnswer
from longs.models import Exam as LongsExam
from anatomy.views import AnatomyExamViews
from rapids.views import RapidExamViews
from longs.views import LongExamViews
@login_required
def profile(request):
user = request.user
return render(request, "profile.html", {"user": user})
def cid_selector(request):
return render(
request,
"cid_selector.html",
)
def cid_scores(request, pk):
# exam = get_object_or_404(Exam, pk=pk)
# TODO:Need some kind of test for cid
cid = pk
# questions = exam.exam_questions.all()
physics_answers = PhysicsCidUserAnswer.objects.filter(cid=cid)
anatomy_answers = AnatomyCidUserAnswer.objects.filter(cid=cid)
rapids_answers = RapidsCidUserAnswer.objects.filter(cid=cid)
longs_answers = LongsCidUserAnswer.objects.filter(cid=cid)
if (
not physics_answers
and not anatomy_answers
and not rapids_answers
and not longs_answers
):
raise Http404("cid not found")
physics_exam_ids = physics_answers.values_list("exam").distinct()
physics_exams = PhysicsExam.objects.filter(id__in=physics_exam_ids)
anatomy_exam_ids = anatomy_answers.values_list("exam").distinct()
anatomy_exams = AnatomyExam.objects.filter(id__in=anatomy_exam_ids)
rapids_exam_ids = rapids_answers.values_list("exam").distinct()
rapids_exams = RapidsExam.objects.filter(id__in=rapids_exam_ids)
longs_exam_ids = longs_answers.values_list("exam").distinct()
longs_exams = LongsExam.objects.filter(id__in=longs_exam_ids)
return render(
request,
"cid_scores.html",
{
"physics_exams": physics_exams,
"anatomy_exams": anatomy_exams,
"rapids_exams": rapids_exams,
"longs_exams": longs_exams,
"cid": cid,
},
)
def active_exams(request):
anatomy_exams = AnatomyExamViews.active_exams(request, False)
rapid_exams = RapidExamViews.active_exams(request, False)
long_exams = LongExamViews.active_exams(request, False)
exams = []
exams.extend(anatomy_exams)
exams.extend(rapid_exams)
exams.extend(long_exams)
active_exams = {"exams": exams}
return JsonResponse(active_exams)
def active_exams_unbased(request):
anatomy_exams = AnatomyExamViews.active_exams(request, False, False)
rapid_exams = RapidExamViews.active_exams(request, False, False)
long_exams = LongExamViews.active_exams(request, False, False)
exams = []
exams.extend(anatomy_exams)
exams.extend(rapid_exams)
exams.extend(long_exams)
active_exams = {"exams": exams}
return JsonResponse(active_exams)
@csrf_exempt
def exam_submit(request):
if request.is_ajax and request.method == "POST":
exam_type, exam_id = request.POST.get("eid").split("/")
if exam_type == "anatomy":
return AnatomyExamViews.postExamAnswers(request)
elif exam_type == "rapid":
return RapidExamViews.postExamAnswers(request)
elif exam_type == "long":
return LongExamViews.postExamAnswers(request)
return JsonResponse({"success": False, "error": "Invalid exam type"})
# postExamAnswers
return JsonResponse({"success": False, "error": "Invalid data"})