.
This commit is contained in:
+6
-6
@@ -19,19 +19,19 @@ urlpatterns = [
|
|||||||
path("exam/<int:pk>/mark", views.mark_overview, name="mark_overview"),
|
path("exam/<int:pk>/mark", views.mark_overview, name="mark_overview"),
|
||||||
path("exam/<int:pk>/<int:sk>/", views.exam_take, name="exam_take"),
|
path("exam/<int:pk>/<int:sk>/", views.exam_take, name="exam_take"),
|
||||||
path("exam/<int:pk>/question/<int:sk>/", views.exam_question_detail, name="exam_question_detail"),
|
path("exam/<int:pk>/question/<int:sk>/", views.exam_question_detail, name="exam_question_detail"),
|
||||||
path("exam/<int:pk>/", views.exam_overview, name="exam_overview"),
|
path("exam/<int:pk>/", views.AnatomyExamViews.exam_overview, name="exam_overview"),
|
||||||
path("exam/<int:pk>/json_edit", views.exam_json_edit, name="exam_json_edit"),
|
path("exam/<int:pk>/json_edit", views.exam_json_edit, name="exam_json_edit"),
|
||||||
path("exam/<int:pk>/scores", views.exam_scores_cid,
|
path("exam/<int:pk>/scores", views.exam_scores_cid,
|
||||||
name="exam_scores_cid"),
|
name="exam_scores_cid"),
|
||||||
path("exam/<int:pk>/scores/<int:sk>/", views.exam_scores_cid_user,
|
path("exam/<int:pk>/scores/<int:sk>/", views.exam_scores_cid_user,
|
||||||
name="exam_scores_cid_user"),
|
name="exam_scores_cid_user"),
|
||||||
path("exam/<int:pk>/toggle_active", views.exam_toggle_active, name="exam_toggle_active"),
|
path("exam/<int:pk>/toggle_active", views.AnatomyExamViews.exam_toggle_active, name="exam_toggle_active"),
|
||||||
path("exam/<int:pk>/toggle_results_published", views.exam_toggle_results_published, name="exam_toggle_results_published"),
|
path("exam/<int:pk>/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/submit", views.postExamAnswers, name="exam_answers_submit"),
|
||||||
path("exam/", views.exam_list, name="exam_list"),
|
path("exam/", views.AnatomyExamViews.exam_list, name="exam_list"),
|
||||||
path("exam/json/", views.active_exams, name="active_exams"),
|
path("exam/json/", views.AnatomyExamViews.active_exams, name="active_exams"),
|
||||||
path("exam/json/<int:pk>", views.exam_json, name="exam_json"),
|
path("exam/json/<int:pk>", views.exam_json, name="exam_json"),
|
||||||
path("exam/json/<int:pk>/recreate", views.exam_json_recreate, name="exam_json_recreate"),
|
path("exam/json/<int:pk>/recreate", views.AnatomyExamViews.exam_json_recreate, name="exam_json_recreate"),
|
||||||
#path("cid/<int:pk>", views.cid_scores, name="cid_scores"),
|
#path("cid/<int:pk>", views.cid_scores, name="cid_scores"),
|
||||||
#path("cid/", views.cid_selector, name="cid_selector"),
|
#path("cid/", views.cid_selector, name="cid_selector"),
|
||||||
path("ajax/exam/flag/", views.flag_question, name="flag_question"),
|
path("ajax/exam/flag/", views.flag_question, name="flag_question"),
|
||||||
|
|||||||
+60
-85
@@ -44,6 +44,7 @@ from .models import (
|
|||||||
# IncorrectAnswers,
|
# IncorrectAnswers,
|
||||||
)
|
)
|
||||||
from generic.models import Examination
|
from generic.models import Examination
|
||||||
|
from generic.views import ExamViews
|
||||||
|
|
||||||
from .tables import AnatomyQuestionTable
|
from .tables import AnatomyQuestionTable
|
||||||
from .filters import AnatomyQuestionFilter
|
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
|
@login_required
|
||||||
def exam_take(request, pk, sk):
|
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):
|
# def exam_toggle_results_published(request, pk):
|
||||||
if request.is_ajax() and request.method == "POST":
|
# if request.is_ajax() and request.method == "POST":
|
||||||
|
#
|
||||||
exam = get_object_or_404(Exam, pk=pk)
|
# exam = get_object_or_404(Exam, pk=pk)
|
||||||
|
#
|
||||||
exam.publish_results = (
|
# exam.publish_results = (
|
||||||
True if request.POST.get("publish_results") == "true" else False
|
# True if request.POST.get("publish_results") == "true" else False
|
||||||
)
|
# )
|
||||||
exam.save()
|
# exam.save()
|
||||||
data = {"status": "success", "publish_results": exam.publish_results}
|
# data = {"status": "success", "publish_results": exam.publish_results}
|
||||||
return JsonResponse(data, status=200)
|
# return JsonResponse(data, status=200)
|
||||||
else:
|
# else:
|
||||||
data = {"status": "error"}
|
# data = {"status": "error"}
|
||||||
return JsonResponse(data, status=400)
|
# return JsonResponse(data, status=400)
|
||||||
|
#
|
||||||
|
#
|
||||||
def exam_toggle_active(request, pk):
|
# def exam_toggle_active(request, pk):
|
||||||
if request.is_ajax() and request.method == "POST":
|
# if request.is_ajax() and request.method == "POST":
|
||||||
|
#
|
||||||
exam = get_object_or_404(Exam, pk=pk)
|
# exam = get_object_or_404(Exam, pk=pk)
|
||||||
|
#
|
||||||
exam.active = True if request.POST.get("active") == "true" else False
|
# exam.active = True if request.POST.get("active") == "true" else False
|
||||||
exam.save()
|
# exam.save()
|
||||||
data = {"status": "success", "active": exam.active}
|
# data = {"status": "success", "active": exam.active}
|
||||||
return JsonResponse(data, status=200)
|
# return JsonResponse(data, status=200)
|
||||||
else:
|
# else:
|
||||||
data = {"status": "error"}
|
# data = {"status": "error"}
|
||||||
return JsonResponse(data, status=400)
|
# return JsonResponse(data, status=400)
|
||||||
|
#
|
||||||
|
#
|
||||||
def active_exams(request, json=True):
|
# def active_exams(request, json=True):
|
||||||
exams = Exam.objects.all()
|
# exams = Exam.objects.all()
|
||||||
|
#
|
||||||
active_exams = {"exams": []}
|
# active_exams = {"exams": []}
|
||||||
|
#
|
||||||
for exam in exams:
|
# for exam in exams:
|
||||||
if exam.active:
|
# if exam.active:
|
||||||
active_exams["exams"].append(
|
# active_exams["exams"].append(
|
||||||
{
|
# {
|
||||||
"name": exam.get_exam_name(),
|
# "name": exam.get_exam_name(),
|
||||||
"url": request.build_absolute_uri(exam.get_json_url()),
|
# "url": request.build_absolute_uri(exam.get_json_url()),
|
||||||
"type": "anatomy",
|
# "type": "anatomy",
|
||||||
}
|
# }
|
||||||
)
|
# )
|
||||||
|
#
|
||||||
if json == False:
|
# if json == False:
|
||||||
return active_exams["exams"]
|
# return active_exams["exams"]
|
||||||
|
#
|
||||||
return JsonResponse(active_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):
|
def exam_json(request, pk):
|
||||||
|
|
||||||
@@ -614,16 +599,6 @@ def exam_json(request, pk):
|
|||||||
return JsonResponse(exam_json)
|
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
|
@login_required
|
||||||
def exam_scores_cid(request, pk):
|
def exam_scores_cid(request, pk):
|
||||||
exam = get_object_or_404(Exam, pk=pk)
|
exam = get_object_or_404(Exam, pk=pk)
|
||||||
|
|||||||
+90
-1
@@ -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.contrib.auth.decorators import login_required, user_passes_test
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
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(json.dumps(data), content_type="application/json")
|
||||||
return HttpResponse("/")
|
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},
|
||||||
|
)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ from .models import Long
|
|||||||
def user_is_author_or_long_checker(function):
|
def user_is_author_or_long_checker(function):
|
||||||
def wrap(request, *args, **kwargs):
|
def wrap(request, *args, **kwargs):
|
||||||
long = Long.objects.get(pk=kwargs['pk'])
|
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)
|
return function(request, *args, **kwargs)
|
||||||
else:
|
else:
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<ol id="full-question-list">
|
<ol id="full-question-list">
|
||||||
{% for question in questions.all %}
|
{% for question in questions.all %}
|
||||||
|
|
||||||
<li>
|
<li data-question-id={{question.pk}}>
|
||||||
History: {{ question.history}}
|
History: {{ question.history}}
|
||||||
<br />
|
<br />
|
||||||
{% for series in question.series.all %}
|
{% for series in question.series.all %}
|
||||||
|
|||||||
+2
-2
@@ -30,7 +30,7 @@ from anatomy.models import Exam as AnatomyExam
|
|||||||
from rapids.models import CidUserAnswer as RapidsCidUserAnswer
|
from rapids.models import CidUserAnswer as RapidsCidUserAnswer
|
||||||
from rapids.models import Exam as RapidsExam
|
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
|
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):
|
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)
|
rapid_exams = active_rapid_exams(request, False)
|
||||||
|
|
||||||
exams = []
|
exams = []
|
||||||
|
|||||||
Reference in New Issue
Block a user