This commit is contained in:
Ross
2021-09-25 20:47:52 +01:00
parent b5925bf894
commit a4fc1e3076
3 changed files with 48 additions and 78 deletions
+42 -1
View File
@@ -688,4 +688,45 @@ class GenericViewBase:
for id in answer_ids:
self.cid_user_answer_object.objects.get(pk=id).delete()
return JsonResponse({"status": "success"})
return JsonResponse({"status": "error"})
return JsonResponse({"status": "error"})
@login_required
def question_detail(self, request, pk):
question = get_object_or_404(self.question_object, pk=pk)
if not question.open_access:
if (
not request.user.groups.filter(name="rapid_checker").exists()
and request.user not in question.author.all()
):
raise PermissionDenied()
# if request.user not in rapid.author.all():
# raise PermissionDenied
view_feedback = False
if (
request.user.groups.filter(name="rapid_checker").exists()
or request.user.groups.filter(name="feedback_checker").exists()
or request.user in question.author.all()
):
view_feedback = True
# logging.debug(rapid.subspecialty.first().name.all())
return render(
request,
f"{self.app_name}/question_detail.html",
{"question": question, "view_feedback": view_feedback},
)
@login_required
def question_user_answers(self, request, pk):
question = get_object_or_404(self.question_object, pk=pk)
answers = self.cid_user_answer_object.objects.filter(question__id=rapid.pk)
return render(
request,
f"{self.app_name}/question_user_answers.html",
{"question": question, "answers": answers},
)
+4 -4
View File
@@ -15,7 +15,7 @@ urlpatterns = [
# path("unchecked/", views.unchecked_list, name="unchecked_list"),
# path("verified/<int:pk>/", views.verified_detail, name="verified_detail"),
path(
"question/<int:pk>/", views.question_detail, name="question_detail"
"question/<int:pk>/", views.GenericViews.question_detail, name="question_detail"
), # path("question/<int:pk>/json", views.question_json, name="question_json"),
path(
"question/<int:pk>/save_annotation",
@@ -34,12 +34,12 @@ urlpatterns = [
),
path(
"question/<int:pk>/user_answers",
views.question_user_answers,
views.GenericViews.question_user_answers,
name="question_user_answers",
),
path(
"exam/<int:pk>/review",
views.question_review,
views.GenericViews.question_review,
name="question_review",
),
path("exam/<int:pk>/<int:sk>/mark", views.mark, name="mark"),
@@ -144,7 +144,7 @@ urlpatterns = [
),
path(
"user_answers/delete",
views.user_answer_delete_multiple,
views.GenericViews.user_answer_delete_multiple,
name="user_answer_delete_multiple",
),
]
+2 -73
View File
@@ -40,7 +40,7 @@ from .models import (
CidUserAnswer,
)
from generic.views import ExamViews
from generic.views import ExamViews, GenericViewBase
from reversion.views import RevisionMixin
@@ -113,48 +113,6 @@ class AuthorOrCheckerRequiredMixin(object):
raise PermissionDenied() # or Http404
return obj
@login_required
def question_detail(request, pk):
rapid = get_object_or_404(Rapid, pk=pk)
if not rapid.open_access:
if (
not request.user.groups.filter(name="rapid_checker").exists()
and request.user not in rapid.author.all()
):
raise PermissionDenied()
# if request.user not in rapid.author.all():
# raise PermissionDenied
view_feedback = False
if (
request.user.groups.filter(name="rapid_checker").exists()
or request.user.groups.filter(name="feedback_checker").exists()
or request.user in rapid.author.all()
):
view_feedback = True
# logging.debug(rapid.subspecialty.first().name.all())
return render(
request,
"rapids/question_detail.html",
{"question": rapid, "view_feedback": view_feedback},
)
@login_required
def question_user_answers(request, pk):
rapid = get_object_or_404(Rapid, pk=pk)
answers = CidUserAnswer.objects.filter(question__id=rapid.pk)
return render(
request,
"rapids/question_user_answers.html",
{"question": rapid, "answers": answers},
)
@login_required
def rapid_split(request, pk):
rapid = get_object_or_404(Rapid, pk=pk)
@@ -1128,37 +1086,8 @@ class RapidLateralityViewSet(
# return { "content_type" : content_type,
# "object_id" : pk }
@user_passes_test(lambda u: u.is_superuser)
def user_answer_delete_multiple(request):
if request.is_ajax():
print(request.POST["answer_ids"])
answer_ids = json.loads(request.POST["answer_ids"])
GenericViews = GenericViewBase("rapids", Rapid, CidUserAnswer, Exam)
# We could probably delete them all at once....
for id in answer_ids:
CidUserAnswer.objects.get(pk=id).delete()
return JsonResponse({"status": "success"})
return JsonResponse({"status": "error"})
def question_review(request, pk):
"""
Return a json representation of the question when the exam is active
"""
if request.is_ajax():
exam = get_object_or_404(Exam, pk=pk)
print(request.POST["question_number"])
print(type(request.POST["question_number"]))
if not exam.publish_results:
raise Http404
question = exam.exam_questions.all()[int(request.POST["question_number"])]
question_json = question.get_question_json(based=False)
return JsonResponse(question_json)
return JsonResponse({"status": "error"})
@user_is_author_or_rapid_checker
def question_save_annotation(request, pk):