Implement hiding and showing functionality for user exams and collections

This commit is contained in:
Ross
2026-06-15 11:23:00 +01:00
parent 35ab7443d2
commit c50ace771e
11 changed files with 400 additions and 50 deletions
+42 -12
View File
@@ -706,39 +706,69 @@ def user_scores(request, user=None):
user = request.user
admin = False
from django.contrib.contenttypes.models import ContentType
from generic.models import UserHiddenItem
show_hidden = request.GET.get("show_hidden") in ("true", "1")
# Fetch user's hidden items map: {content_type_id: {object_ids}}
hidden_map = {}
for ct_id, obj_id in UserHiddenItem.objects.filter(user=user).values_list("content_type_id", "object_id"):
hidden_map.setdefault(ct_id, set()).add(obj_id)
# Filter Exam Results list (all_exams)
exams = get_user_exams(user)
filtered_exams = []
for exam_type, exams_qs in exams:
exam_model = exams_qs.model
ct_id = ContentType.objects.get_for_model(exam_model).id
hidden_ids = hidden_map.get(ct_id, set())
# case_collections = request.user.casecollection_exams.all()
if not show_hidden:
exams_qs = exams_qs.exclude(id__in=hidden_ids)
exams_list = list(exams_qs)
for exam in exams_list:
exam.is_hidden = exam.id in hidden_ids
if exams_list:
filtered_exams.append((exam_type, exams_list))
# Filter Assigned Exams list (available_exams)
available_exams = []
for n, t in USER_EXAM_TYPES:
exam_rel = getattr(user, t)
if exam_rel.exists():
temp_exams = exam_rel.filter(exam_mode=True, archive=False).order_by("name")
available_exams.append((n, temp_exams))
exam_model = temp_exams.model
ct_id = ContentType.objects.get_for_model(exam_model).id
hidden_ids = hidden_map.get(ct_id, set())
# available_exams = request.user.get_cid_exams()
if not show_hidden:
temp_exams = temp_exams.exclude(id__in=hidden_ids)
temp_exams_list = list(temp_exams)
for exam in temp_exams_list:
exam.is_hidden = exam.id in hidden_ids
if temp_exams_list:
available_exams.append((n, temp_exams_list))
return render(
request,
"user_scores.html",
{
# "physics_exams": physics_exams,
# "anatomy_exams": anatomy_exams,
# "rapid_exams": rapid_exams,
# "longs_exams": longs_exams,
# "sba_exams": sba_exams,
"all_exams": exams,
# "passcode": passcode,
"all_exams": filtered_exams,
"cid_user": user,
"available_exams": available_exams,
"case_collections": [], # case_collections,
"case_collections": [],
"admin": admin,
"show_hidden": show_hidden,
},
)
@login_required
def user_marking(request):
"""Main page for user marking overview. Uses HTMX to fetch per-app partials."""