From 3712cf15fc6a0c27b9613b1626087dee78d869a3 Mon Sep 17 00:00:00 2001 From: Ross Date: Sat, 6 Feb 2021 22:45:38 +0000 Subject: [PATCH] . --- anatomy/urls.py | 12 +- anatomy/views.py | 145 ++++++++++------------- generic/views.py | 91 +++++++++++++- longs/decorators.py | 2 +- longs/templates/longs/exam_overview.html | 2 +- rad/views.py | 4 +- 6 files changed, 160 insertions(+), 96 deletions(-) diff --git a/anatomy/urls.py b/anatomy/urls.py index 532415d1..0016d27c 100644 --- a/anatomy/urls.py +++ b/anatomy/urls.py @@ -19,19 +19,19 @@ urlpatterns = [ path("exam//mark", views.mark_overview, name="mark_overview"), path("exam///", views.exam_take, name="exam_take"), path("exam//question//", views.exam_question_detail, name="exam_question_detail"), - path("exam//", views.exam_overview, name="exam_overview"), + path("exam//", views.AnatomyExamViews.exam_overview, name="exam_overview"), path("exam//json_edit", views.exam_json_edit, name="exam_json_edit"), path("exam//scores", views.exam_scores_cid, name="exam_scores_cid"), path("exam//scores//", views.exam_scores_cid_user, name="exam_scores_cid_user"), - path("exam//toggle_active", views.exam_toggle_active, name="exam_toggle_active"), - path("exam//toggle_results_published", views.exam_toggle_results_published, name="exam_toggle_results_published"), + path("exam//toggle_active", views.AnatomyExamViews.exam_toggle_active, name="exam_toggle_active"), + path("exam//toggle_results_published", views.AnatomyExamViews.exam_toggle_results_published, name="exam_toggle_results_published"), path("exam/submit", views.postExamAnswers, name="exam_answers_submit"), - path("exam/", views.exam_list, name="exam_list"), - path("exam/json/", views.active_exams, name="active_exams"), + path("exam/", views.AnatomyExamViews.exam_list, name="exam_list"), + path("exam/json/", views.AnatomyExamViews.active_exams, name="active_exams"), path("exam/json/", views.exam_json, name="exam_json"), - path("exam/json//recreate", views.exam_json_recreate, name="exam_json_recreate"), + path("exam/json//recreate", views.AnatomyExamViews.exam_json_recreate, name="exam_json_recreate"), #path("cid/", views.cid_scores, name="cid_scores"), #path("cid/", views.cid_selector, name="cid_selector"), path("ajax/exam/flag/", views.flag_question, name="flag_question"), diff --git a/anatomy/views.py b/anatomy/views.py index 777bf48a..c7439c16 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -44,6 +44,7 @@ from .models import ( # IncorrectAnswers, ) from generic.models import Examination +from generic.views import ExamViews from .tables import AnatomyQuestionTable from .filters import AnatomyQuestionFilter @@ -150,31 +151,6 @@ def answer_question(request, pk): ) -@login_required -def exam_list(request): - exams = Exam.objects.all() - return render(request, "anatomy/exam_list.html", {"exams": exams}) - - -@login_required -def exam_overview(request, pk): - print(type(pk)) - #print(Exam.objects.all()) - #exams = Exam.objects.all() - #print("test", Exam.objects.all().get(id=pk)) - exam = get_object_or_404(Exam, pk=pk) - print("exam", exam) - - questions = exam.exam_questions.all() - - question_number = len(questions) - - return render( - request, - "anatomy/exam_overview.html", - {"exam": exam, "questions": questions, "question_number": question_number}, - ) - @login_required def exam_take(request, pk, sk): @@ -511,57 +487,66 @@ def mark(request, pk, sk): }, ) +AnatomyExamViews = ExamViews(Exam, "anatomy", "anatomy") -def exam_toggle_results_published(request, pk): - if request.is_ajax() and request.method == "POST": - - exam = get_object_or_404(Exam, pk=pk) - - exam.publish_results = ( - True if request.POST.get("publish_results") == "true" else False - ) - exam.save() - data = {"status": "success", "publish_results": exam.publish_results} - return JsonResponse(data, status=200) - else: - data = {"status": "error"} - return JsonResponse(data, status=400) - - -def exam_toggle_active(request, pk): - if request.is_ajax() and request.method == "POST": - - exam = get_object_or_404(Exam, pk=pk) - - exam.active = True if request.POST.get("active") == "true" else False - exam.save() - data = {"status": "success", "active": exam.active} - return JsonResponse(data, status=200) - else: - data = {"status": "error"} - return JsonResponse(data, status=400) - - -def active_exams(request, json=True): - exams = Exam.objects.all() - - active_exams = {"exams": []} - - for exam in exams: - if exam.active: - active_exams["exams"].append( - { - "name": exam.get_exam_name(), - "url": request.build_absolute_uri(exam.get_json_url()), - "type": "anatomy", - } - ) - - if json == False: - return active_exams["exams"] - - return JsonResponse(active_exams) - +# def exam_toggle_results_published(request, pk): +# if request.is_ajax() and request.method == "POST": +# +# exam = get_object_or_404(Exam, pk=pk) +# +# exam.publish_results = ( +# True if request.POST.get("publish_results") == "true" else False +# ) +# exam.save() +# data = {"status": "success", "publish_results": exam.publish_results} +# return JsonResponse(data, status=200) +# else: +# data = {"status": "error"} +# return JsonResponse(data, status=400) +# +# +# def exam_toggle_active(request, pk): +# if request.is_ajax() and request.method == "POST": +# +# exam = get_object_or_404(Exam, pk=pk) +# +# exam.active = True if request.POST.get("active") == "true" else False +# exam.save() +# data = {"status": "success", "active": exam.active} +# return JsonResponse(data, status=200) +# else: +# data = {"status": "error"} +# return JsonResponse(data, status=400) +# +# +# def active_exams(request, json=True): +# exams = Exam.objects.all() +# +# active_exams = {"exams": []} +# +# for exam in exams: +# if exam.active: +# active_exams["exams"].append( +# { +# "name": exam.get_exam_name(), +# "url": request.build_absolute_uri(exam.get_json_url()), +# "type": "anatomy", +# } +# ) +# +# if json == False: +# return active_exams["exams"] +# +# return JsonResponse(active_exams) +# +# @login_required +# def exam_json_recreate(request, pk): +# exam = get_object_or_404(Exam, pk=pk) +# +# exam.recreate_json = True +# exam.save() +# +# return redirect("anatomy:exam_overview", pk=pk) def exam_json(request, pk): @@ -614,16 +599,6 @@ def exam_json(request, pk): return JsonResponse(exam_json) -@login_required -def exam_json_recreate(request, pk): - exam = get_object_or_404(Exam, pk=pk) - - exam.recreate_json = True - exam.save() - - return redirect("anatomy:exam_overview", pk=pk) - - @login_required def exam_scores_cid(request, pk): exam = get_object_or_404(Exam, pk=pk) diff --git a/generic/views.py b/generic/views.py index 56f97af0..e484df78 100644 --- a/generic/views.py +++ b/generic/views.py @@ -1,4 +1,4 @@ -from django.shortcuts import render +from django.shortcuts import render, get_object_or_404, redirect from django.contrib.auth.decorators import login_required, user_passes_test from django.views.decorators.csrf import csrf_exempt @@ -39,3 +39,92 @@ def get_examination_id(request): return HttpResponse(json.dumps(data), content_type="application/json") return HttpResponse("/") + +class ExamViews: + def __init__(self, exam, app, question_type): + self.Exam = exam + self.app_name = app + self.question_type = question_type + + def exam_toggle_results_published(self, request, pk): + if request.is_ajax() and request.method == "POST": + + exam = get_object_or_404(self.Exam, pk=pk) + + exam.publish_results = ( + True if request.POST.get("publish_results") == "true" else False + ) + exam.save() + data = {"status": "success", "publish_results": exam.publish_results} + return JsonResponse(data, status=200) + else: + data = {"status": "error"} + return JsonResponse(data, status=400) + + + def exam_toggle_active(self, request, pk): + if request.is_ajax() and request.method == "POST": + + exam = get_object_or_404(self.Exam, pk=pk) + + exam.active = True if request.POST.get("active") == "true" else False + exam.save() + data = {"status": "success", "active": exam.active} + return JsonResponse(data, status=200) + else: + data = {"status": "error"} + return JsonResponse(data, status=400) + + + def active_exams(self, request, json=True): + exams = self.Exam.objects.all() + + active_exams = {"exams": []} + + for exam in exams: + if exam.active: + active_exams["exams"].append( + { + "name": exam.get_exam_name(), + "url": request.build_absolute_uri(exam.get_json_url()), + "type": self.question_type, + } + ) + + if json == False: + return active_exams["exams"] + + return JsonResponse(active_exams) + + @login_required + def exam_json_recreate(self, request, pk): + exam = get_object_or_404(self.Exam, pk=pk) + + exam.recreate_json = True + exam.save() + + return redirect("{}:exam_overview".format(self.app_name), pk=pk) + + @login_required + def exam_list(self, request): + exams = self.Exam.objects.all() + return render(request, "{}/exam_list.html".format(self.app_name), {"exams": exams}) + + + @login_required + def exam_overview(self, request, pk): + #print(Exam.objects.all()) + #exams = Exam.objects.all() + #print("test", Exam.objects.all().get(id=pk)) + exam = get_object_or_404(self.Exam, pk=pk) + + questions = exam.exam_questions.all() + + question_number = len(questions) + + return render( + request, + "{}/exam_overview.html".format(self.app_name), + {"exam": exam, "questions": questions, "question_number": question_number}, + ) + diff --git a/longs/decorators.py b/longs/decorators.py index 268511f5..2349fe72 100755 --- a/longs/decorators.py +++ b/longs/decorators.py @@ -4,7 +4,7 @@ from .models import Long def user_is_author_or_long_checker(function): def wrap(request, *args, **kwargs): long = Long.objects.get(pk=kwargs['pk']) - if request.user in long.author.all() or request.user.groups.filter(name='long_checker').exists(): + if request.user in long.author.all() or request.user.groups.filter(name='long_checker').exists() or request.user.is_superuser: return function(request, *args, **kwargs) else: raise PermissionDenied diff --git a/longs/templates/longs/exam_overview.html b/longs/templates/longs/exam_overview.html index 167b3ccc..c097018a 100644 --- a/longs/templates/longs/exam_overview.html +++ b/longs/templates/longs/exam_overview.html @@ -19,7 +19,7 @@
    {% for question in questions.all %} -
  1. +
  2. History: {{ question.history}}
    {% for series in question.series.all %} diff --git a/rad/views.py b/rad/views.py index 1024e11d..22efe790 100644 --- a/rad/views.py +++ b/rad/views.py @@ -30,7 +30,7 @@ from anatomy.models import Exam as AnatomyExam from rapids.models import CidUserAnswer as RapidsCidUserAnswer from rapids.models import Exam as RapidsExam -from anatomy.views import active_exams as active_anatomy_exams, postExamAnswers as postAnatomyExamAnswers +from anatomy.views import AnatomyExamViews as AnatomyExamViews, postExamAnswers as postAnatomyExamAnswers from rapids.views import active_exams as active_rapid_exams, postExamAnswers as postRapidExamAnswers @@ -88,7 +88,7 @@ def cid_scores(request, pk): ) def active_exams(request): - anatomy_exams = active_anatomy_exams(request, False) + anatomy_exams = AnatomyExamViews.active_exams(request, False) rapid_exams = active_rapid_exams(request, False) exams = []