diff --git a/generic/templates/generic/partials/exam_cids_submitted_list.html b/generic/templates/generic/partials/exam_cids_submitted_list.html index ceba98c0..ce18a00a 100644 --- a/generic/templates/generic/partials/exam_cids_submitted_list.html +++ b/generic/templates/generic/partials/exam_cids_submitted_list.html @@ -37,7 +37,13 @@ {{ user_data.end_time }}
- + {% if user_data.cid_user %} + + + {% else %} + + + {% endif %} {% if request.user.is_superuser or request.user.is_staff %} {% endif %} diff --git a/generic/views.py b/generic/views.py index e3e214b2..3cccb7cf 100644 --- a/generic/views.py +++ b/generic/views.py @@ -2639,13 +2639,27 @@ class ExamViews(View, LoginRequiredMixin): return self.exam_user_status(request, pk, user_id=user_id) def exam_user_status(self, request, pk, cid=None, user_id=None): - # TODO: add filtering by user / cid exam = get_object_or_404(self.Exam, pk=pk) # Restrict just to exam authors if request.user not in exam.author.all(): raise PermissionDenied + # Robustly parse parameters from GET query string + get_cid = request.GET.get("cid") + get_user_id = request.GET.get("user_id") + + if get_cid not in (None, "", "None"): + try: + cid = int(get_cid) + except ValueError: + pass + if get_user_id not in (None, "", "None"): + try: + user_id = int(get_user_id) + except ValueError: + pass + if cid is not None: statuses = exam.exam_user_status.filter(cid_user_exam__cid_user__cid=cid) elif user_id is not None: @@ -3477,7 +3491,13 @@ class ExamViews(View, LoginRequiredMixin): cid_user=c, start_time=t ) in_progress = request.POST.get("in_progress") == "true" - if not in_progress: + if in_progress: + exam.exam_user_status.create( + cid_user_exam=cid_user_exam, + status="autosaved", + extra="autosaved {} answers".format(n), + ) + else: exam.exam_user_status.create( cid_user_exam=cid_user_exam, status="submitted", diff --git a/rapids/tests/test_rts_integration.py b/rapids/tests/test_rts_integration.py index d31d88b2..e12598fa 100644 --- a/rapids/tests/test_rts_integration.py +++ b/rapids/tests/test_rts_integration.py @@ -73,6 +73,7 @@ def test_autosubmit_in_progress(client, test_setup): assert cid_user_exam.end_time is None assert cid_user_exam.completed is False assert not ExamUserStatus.objects.filter(cid_user_exam=cid_user_exam, status="submitted").exists() + assert ExamUserStatus.objects.filter(cid_user_exam=cid_user_exam, status="autosaved").exists() def test_final_submit(client, test_setup): exam = test_setup["exam"]