diff --git a/atlas/views.py b/atlas/views.py index 70d52ce2..0b3210f0 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -1336,6 +1336,7 @@ def collection_case_view_take(request, pk, case_number, cid, passcode): redirect_url, case_number=case_number - 1, **kwargs ) elif "finish" in request.POST: + redirect_url = "atlas:collection_take" return redirect(redirect_url, **kwargs) elif "goto" in request.POST: return redirect( diff --git a/generic/urls.py b/generic/urls.py index c4f79e09..d27bdf83 100755 --- a/generic/urls.py +++ b/generic/urls.py @@ -200,6 +200,11 @@ def generic_exam_urls(generic_exam_view): generic_exam_view.exam_toggle_results_published, name="exam_toggle_results_published", ), + path( + "exam//toggle_archived", + generic_exam_view.exam_toggle_archived, + name="exam_toggle_archived", + ), path( "exam/submit", generic_exam_view.postExamAnswers, diff --git a/generic/views.py b/generic/views.py index 00de22b5..460a47cf 100644 --- a/generic/views.py +++ b/generic/views.py @@ -459,6 +459,33 @@ class ExamViews(View, LoginRequiredMixin): return False return True + @method_decorator(login_required) + def exam_toggle_archived(self, request, pk): + print("TOGGLE ARCHIVED", request.POST) + if request.is_ajax() and request.method == "POST": + + if not self.check_user_edit_access(request.user): + data = {"status": "error, insufficient permission"} + return JsonResponse(data, status=400) + + exam = get_object_or_404(self.Exam, pk=pk) + + exam.archive = ( + True if request.POST.get("archive") == "true" else False + ) + print(f"{exam.archive=}") + exam.save() + data = { + "status": "success", + "archive": exam.archive, + "name": exam.name, + "id": exam.id, + } + return JsonResponse(data, status=200) + else: + data = {"status": "error"} + return JsonResponse(data, status=400) + @method_decorator(login_required) def exam_toggle_results_published(self, request, pk): if request.is_ajax() and request.method == "POST": diff --git a/templates/exam_list.html b/templates/exam_list.html index bb3202da..a353a1e5 100644 --- a/templates/exam_list.html +++ b/templates/exam_list.html @@ -16,6 +16,10 @@ + {% if view_all %} + + + {% endif %} {% endif %} {% endfor %} @@ -34,6 +38,10 @@ + {% if view_all %} + + + {% endif %} {% endif %} {% endfor %} @@ -50,7 +58,7 @@ diff --git a/templates/exam_overview_js.html b/templates/exam_overview_js.html index 32c990d4..7592d3e1 100644 --- a/templates/exam_overview_js.html +++ b/templates/exam_overview_js.html @@ -58,6 +58,34 @@ console.log('[Done]'); }) }) + $(".exam-archived-switch").on("change", function (evt) { + $.ajax({ + url: evt.currentTarget.dataset.posturl, + data: { + csrfmiddlewaretoken: "{{ csrf_token }}", + archive: this.checked // true if checked else false + }, + type: "POST", + dataType: "json", + }) + // $.ajax().done(), $.ajax().fail(), $ajax().always() are upto you. Add/change accordingly + .done(function (data) { + console.log(data); + + if (data.status == "success") { + toastr.info(`Exam: ${data.name} [${data.id}] + Archived state changed to: ${data.archive}.`) + } + // show some message according to the response. + // For eg. A message box showing that the status has been changed + }) + .fail(function (data) { + toastr.error(`Failed to change state`); + }) + .always(function () { + console.log('[Done]'); + }) + }) $("#button-open-access").click(function (evt) { $.ajax({ url: evt.currentTarget.dataset.posturl,