.
This commit is contained in:
@@ -689,3 +689,44 @@ class GenericViewBase:
|
|||||||
self.cid_user_answer_object.objects.get(pk=id).delete()
|
self.cid_user_answer_object.objects.get(pk=id).delete()
|
||||||
return JsonResponse({"status": "success"})
|
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
@@ -15,7 +15,7 @@ urlpatterns = [
|
|||||||
# path("unchecked/", views.unchecked_list, name="unchecked_list"),
|
# path("unchecked/", views.unchecked_list, name="unchecked_list"),
|
||||||
# path("verified/<int:pk>/", views.verified_detail, name="verified_detail"),
|
# path("verified/<int:pk>/", views.verified_detail, name="verified_detail"),
|
||||||
path(
|
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>/json", views.question_json, name="question_json"),
|
||||||
path(
|
path(
|
||||||
"question/<int:pk>/save_annotation",
|
"question/<int:pk>/save_annotation",
|
||||||
@@ -34,12 +34,12 @@ urlpatterns = [
|
|||||||
),
|
),
|
||||||
path(
|
path(
|
||||||
"question/<int:pk>/user_answers",
|
"question/<int:pk>/user_answers",
|
||||||
views.question_user_answers,
|
views.GenericViews.question_user_answers,
|
||||||
name="question_user_answers",
|
name="question_user_answers",
|
||||||
),
|
),
|
||||||
path(
|
path(
|
||||||
"exam/<int:pk>/review",
|
"exam/<int:pk>/review",
|
||||||
views.question_review,
|
views.GenericViews.question_review,
|
||||||
name="question_review",
|
name="question_review",
|
||||||
),
|
),
|
||||||
path("exam/<int:pk>/<int:sk>/mark", views.mark, name="mark"),
|
path("exam/<int:pk>/<int:sk>/mark", views.mark, name="mark"),
|
||||||
@@ -144,7 +144,7 @@ urlpatterns = [
|
|||||||
),
|
),
|
||||||
path(
|
path(
|
||||||
"user_answers/delete",
|
"user_answers/delete",
|
||||||
views.user_answer_delete_multiple,
|
views.GenericViews.user_answer_delete_multiple,
|
||||||
name="user_answer_delete_multiple",
|
name="user_answer_delete_multiple",
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
+2
-73
@@ -40,7 +40,7 @@ from .models import (
|
|||||||
CidUserAnswer,
|
CidUserAnswer,
|
||||||
)
|
)
|
||||||
|
|
||||||
from generic.views import ExamViews
|
from generic.views import ExamViews, GenericViewBase
|
||||||
|
|
||||||
from reversion.views import RevisionMixin
|
from reversion.views import RevisionMixin
|
||||||
|
|
||||||
@@ -113,48 +113,6 @@ class AuthorOrCheckerRequiredMixin(object):
|
|||||||
raise PermissionDenied() # or Http404
|
raise PermissionDenied() # or Http404
|
||||||
return obj
|
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
|
@login_required
|
||||||
def rapid_split(request, pk):
|
def rapid_split(request, pk):
|
||||||
rapid = get_object_or_404(Rapid, pk=pk)
|
rapid = get_object_or_404(Rapid, pk=pk)
|
||||||
@@ -1128,37 +1086,8 @@ class RapidLateralityViewSet(
|
|||||||
# return { "content_type" : content_type,
|
# return { "content_type" : content_type,
|
||||||
# "object_id" : pk }
|
# "object_id" : pk }
|
||||||
|
|
||||||
@user_passes_test(lambda u: u.is_superuser)
|
GenericViews = GenericViewBase("rapids", Rapid, CidUserAnswer, Exam)
|
||||||
def user_answer_delete_multiple(request):
|
|
||||||
if request.is_ajax():
|
|
||||||
print(request.POST["answer_ids"])
|
|
||||||
answer_ids = json.loads(request.POST["answer_ids"])
|
|
||||||
|
|
||||||
# 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
|
@user_is_author_or_rapid_checker
|
||||||
def question_save_annotation(request, pk):
|
def question_save_annotation(request, pk):
|
||||||
|
|||||||
Reference in New Issue
Block a user