From 37e1bf29a32e42051d01ad51fe1b32fc595abcd1 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 27 Apr 2026 11:12:44 +0100 Subject: [PATCH] Add self-review popup functionality with success message and auto-refresh --- .../atlas/collection_case_view_take.html | 8 ++- .../partials/_selfreview_popup_success.html | 69 +++++++++++++++++++ atlas/views.py | 44 +++++++++++- 3 files changed, 117 insertions(+), 4 deletions(-) create mode 100644 atlas/templates/atlas/partials/_selfreview_popup_success.html diff --git a/atlas/templates/atlas/collection_case_view_take.html b/atlas/templates/atlas/collection_case_view_take.html index b21dcdcc..15c7a0f4 100644 --- a/atlas/templates/atlas/collection_case_view_take.html +++ b/atlas/templates/atlas/collection_case_view_take.html @@ -668,8 +668,9 @@ }); window.openSelfReviewPopup = function (url) { + var popupUrl = url + (url.indexOf('?') === -1 ? '?popup=1' : '&popup=1'); var features = 'width=980,height=840,resizable=yes,scrollbars=yes'; - window.open(url, 'selfReviewPopup', features); + window.open(popupUrl, 'selfReviewPopup', features); }; window.selfReviewCurrentEmbedUrl = null; @@ -704,7 +705,10 @@ if (resp.redirected) { root.innerHTML = '
Self review saved. You can continue reviewing this case.
'; - setTimeout(function () { window.closeSelfReviewSidebar(); }, 700); + setTimeout(function () { + window.closeSelfReviewSidebar(); + window.location.reload(); + }, 500); return; } diff --git a/atlas/templates/atlas/partials/_selfreview_popup_success.html b/atlas/templates/atlas/partials/_selfreview_popup_success.html new file mode 100644 index 00000000..5c7417aa --- /dev/null +++ b/atlas/templates/atlas/partials/_selfreview_popup_success.html @@ -0,0 +1,69 @@ + + + + + Self Review Saved + + + + +
+
+

Self review saved

+

This window will close shortly and refresh the case page.

+
+
+ + + + diff --git a/atlas/views.py b/atlas/views.py index 9af89cd1..45a8f7be 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -5674,10 +5674,30 @@ class SelfReviewUpdate(UpdateView): context["case"] = self.case context["review"] = self.review context["embed"] = self.request.GET.get("embed") == "1" + context["popup"] = self.request.GET.get("popup") == "1" return context def get_success_url(self) -> str: - return self.user_exam.exam.get_case_take_url(self.case) + if getattr(self, "object", None) is not None: + return self.object.user_exam.exam.get_case_take_url(self.object.case) + + user_exam_id = self.kwargs["user_exam_id"] + case_id = self.kwargs["case_id"] + user_exam = get_object_or_404(CidUserExam, pk=user_exam_id) + case = get_object_or_404(Case, pk=case_id) + return user_exam.exam.get_case_take_url(case) + + def form_valid(self, form): + self.object = form.save() + + if self.request.GET.get("popup") == "1": + return render( + self.request, + "atlas/partials/_selfreview_popup_success.html", + {"target_url": self.get_success_url()}, + ) + + return HttpResponseRedirect(self.get_success_url()) # def get_object(self): # return self.review @@ -5728,10 +5748,30 @@ class AddSelfReview(CreateView): context["user_exam"] = self.user_exam context["case"] = self.case context["embed"] = self.request.GET.get("embed") == "1" + context["popup"] = self.request.GET.get("popup") == "1" return context def get_success_url(self) -> str: - return self.user_exam.exam.get_case_take_url(self.case) + if getattr(self, "object", None) is not None: + return self.object.user_exam.exam.get_case_take_url(self.object.case) + + user_exam_id = self.kwargs["user_exam_id"] + case_id = self.kwargs["case_id"] + user_exam = get_object_or_404(CidUserExam, pk=user_exam_id) + case = get_object_or_404(Case, pk=case_id) + return user_exam.exam.get_case_take_url(case) + + def form_valid(self, form): + self.object = form.save() + + if self.request.GET.get("popup") == "1": + return render( + self.request, + "atlas/partials/_selfreview_popup_success.html", + {"target_url": self.get_success_url()}, + ) + + return HttpResponseRedirect(self.get_success_url()) # return reverse("atlas:collection_take_overview_user", kwargs={"pk": self.user_exam.collection.id })