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 @@
-
+ {% 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"]
|