From 463a74118548730d50754d48e0543729a4ab8998 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 13 Apr 2026 10:00:03 +0100 Subject: [PATCH] Refactor exam_user_bulk_edit method to support both generic and app-specific exam IDs for improved flexibility --- generic/views.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/generic/views.py b/generic/views.py index 9e23646f..04779661 100644 --- a/generic/views.py +++ b/generic/views.py @@ -2805,20 +2805,23 @@ class ExamViews(View, LoginRequiredMixin): return response @method_decorator(login_required) - def exam_user_bulk_edit(self, request, pk): + def exam_user_bulk_edit(self, request, pk=None, exam_id=None): """Bulk add/remove User objects to/from an exam. Expects POST with 'bulk_pks' (JSON list) and 'add' ('true'/'false'). Returns a rendered user list partial for HTMX swaps. """ + # Support both `pk` (generic urls) and `exam_id` (app-specific urls like atlas) + exam_pk = pk if pk is not None else exam_id + if request.method != 'POST': return JsonResponse({'status': 'error, invalid method'}, status=400) if request.user.groups.filter(name="cid_user_manager").exists(): pass - elif not self.check_user_edit_access(request.user, exam_id=pk): + elif not self.check_user_edit_access(request.user, exam_id=exam_pk): data = {"status": "invalid permisions"} return JsonResponse(data, status=403) - exam = get_object_or_404(self.Exam, pk=pk) + exam = get_object_or_404(self.Exam, pk=exam_pk) bulk_pks_raw = request.POST.get('bulk_pks') or request.POST.get('bulk_pks[]') items = [] @@ -2867,9 +2870,9 @@ class ExamViews(View, LoginRequiredMixin): try: if this_add: - app_exam_map[self.app_name].add(pk) + app_exam_map[self.app_name].add(exam_pk) else: - app_exam_map[self.app_name].remove(pk) + app_exam_map[self.app_name].remove(exam_pk) changed.append(user_obj.pk) except Exception: continue