store submission data in in EXamUserStatus
This commit is contained in:
@@ -16,6 +16,8 @@
|
|||||||
- Sort out conditions / signs / findings etc
|
- Sort out conditions / signs / findings etc
|
||||||
- Search by image id / name / etc
|
- Search by image id / name / etc
|
||||||
- Add markers directly to exam
|
- Add markers directly to exam
|
||||||
|
- Periodic posting of answers from RTS
|
||||||
|
- Exam status
|
||||||
|
|
||||||
|
|
||||||
# Future
|
# Future
|
||||||
|
|||||||
+26
-3
@@ -81,11 +81,34 @@ def user_exams(request):
|
|||||||
|
|
||||||
|
|
||||||
@router.get('/exam/{exam_id}/user_status', response=List[ExamUserStatusSchema])
|
@router.get('/exam/{exam_id}/user_status', response=List[ExamUserStatusSchema])
|
||||||
def get_exam_user_status(request, exam_id: int, latest:bool=True):
|
def get_exam_user_status_all(request, exam_id: int, latest:bool=True):
|
||||||
exam = get_object_or_404(Exam, id=exam_id)
|
exam = get_object_or_404(Exam, id=exam_id)
|
||||||
if not exam.check_user_can_edit(request.user):
|
if not exam.check_user_can_edit(request.user):
|
||||||
raise HttpError(HTTPStatus.UNAUTHORIZED,"Exam author required")
|
raise HttpError(HTTPStatus.UNAUTHORIZED,"Exam author required")
|
||||||
|
|
||||||
return exam.exam_user_status.all()
|
results = exam.exam_user_status.all()
|
||||||
|
if latest:
|
||||||
|
cid_users = exam.exam_user_status.filter(cid_user__isnull=False).order_by("cid_user", "-datetime").distinct("cid_user")
|
||||||
|
user_users = exam.exam_user_status.filter(user_user__isnull=False).order_by("user_user", "-datetime").distinct("user_user")
|
||||||
|
|
||||||
|
results = list(cid_users)
|
||||||
|
results.extend(list(user_users))
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
@router.get('/exam/{exam_id}/user_status/{cid}/cid', response=List[ExamUserStatusSchema])
|
||||||
|
def get_exam_user_status_cid_user(request, exam_id: int, cid: int):
|
||||||
|
exam = get_object_or_404(Exam, id=exam_id)
|
||||||
|
if not exam.check_user_can_edit(request.user):
|
||||||
|
raise HttpError(HTTPStatus.UNAUTHORIZED,"Exam author required")
|
||||||
|
|
||||||
|
return exam.exam_user_status.filter(cid_user=cid)
|
||||||
|
|
||||||
|
@router.get('/exam/{exam_id}/user_status/{user_id}/user', response=List[ExamUserStatusSchema])
|
||||||
|
def get_exam_user_status_user_user(request, exam_id: int, user_id: int):
|
||||||
|
exam = get_object_or_404(Exam, id=exam_id)
|
||||||
|
if not exam.check_user_can_edit(request.user):
|
||||||
|
raise HttpError(HTTPStatus.UNAUTHORIZED,"Exam author required")
|
||||||
|
|
||||||
|
return exam.exam_user_status.filter(user_user=user_id)
|
||||||
+8
-1
@@ -1627,15 +1627,22 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
datetime.fromtimestamp(float(request.POST.get("start_time")))
|
datetime.fromtimestamp(float(request.POST.get("start_time")))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# We currently store the submission time in two different places
|
||||||
if request.POST.get("cid").startswith("u-"):
|
if request.POST.get("cid").startswith("u-"):
|
||||||
cid_user_exam = exam.get_or_create_cid_user_exam(
|
cid_user_exam = exam.get_or_create_cid_user_exam(
|
||||||
user_user=request.user, start_time=t
|
user_user=request.user, start_time=t
|
||||||
)
|
)
|
||||||
|
exam.exam_user_status.create(
|
||||||
|
cid_user=None, user_user=request.user, status="submitted", extra="manual submission"
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
c = CidUser.objects.filter(cid=request.POST.get("cid")).first()
|
c = CidUser.objects.filter(cid=request.POST.get("cid")).first()
|
||||||
cid_user_exam = exam.get_or_create_cid_user_exam(
|
cid_user_exam = exam.get_or_create_cid_user_exam(
|
||||||
cid_user=c, start_time=t
|
cid_user=c, start_time=t
|
||||||
)
|
)
|
||||||
|
exam.exam_user_status.create(
|
||||||
|
cid_user=c, user_user=None, status="submitted", extra="manual submission"
|
||||||
|
)
|
||||||
|
|
||||||
cid_user_exam.end_time = timezone.now()
|
cid_user_exam.end_time = timezone.now()
|
||||||
cid_user_exam.save()
|
cid_user_exam.save()
|
||||||
@@ -1671,11 +1678,11 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
|
|
||||||
# Log exam access
|
# Log exam access
|
||||||
if exam.exam_mode:
|
if exam.exam_mode:
|
||||||
user = request.user
|
|
||||||
if cid is not None:
|
if cid is not None:
|
||||||
user = None
|
user = None
|
||||||
cid_user = CidUser.objects.get(cid=cid)
|
cid_user = CidUser.objects.get(cid=cid)
|
||||||
else:
|
else:
|
||||||
|
user = request.user
|
||||||
cid_user = None
|
cid_user = None
|
||||||
exam.exam_user_status.create(
|
exam.exam_user_status.create(
|
||||||
cid_user=cid_user, user_user=user, status="downloaded"
|
cid_user=cid_user, user_user=user, status="downloaded"
|
||||||
|
|||||||
Reference in New Issue
Block a user