diff --git a/TODO.md b/TODO.md
index 0b08a2ca..47feded1 100644
--- a/TODO.md
+++ b/TODO.md
@@ -14,4 +14,8 @@
# Future
- Clean up user results / score pages
-- Remove external javascript dependencies
\ No newline at end of file
+- Remove external javascript dependencies
+
+- Viva cases
+
+- Update rapids for new style
\ No newline at end of file
diff --git a/generic/templates/generic/user_view.html b/generic/templates/generic/user_view.html
index 5c0e0d5e..fe985ea5 100644
--- a/generic/templates/generic/user_view.html
+++ b/generic/templates/generic/user_view.html
@@ -41,11 +41,17 @@
hx-target="#htmx-info"
>Delete supervisors
+
{% endblock %}
diff --git a/generic/urls.py b/generic/urls.py
index cc67f412..5dad80f7 100755
--- a/generic/urls.py
+++ b/generic/urls.py
@@ -94,9 +94,9 @@ urlpatterns = [
name="users_bulk_delete_supervisors",
),
path(
- "user/bulk_edit_grade/",
- views.users_bulk_edit_grade,
- name="users_bulk_edit_grade",
+ "user/bulk_edit/",
+ views.users_bulk_edit,
+ name="users_bulk_edit",
),
path("user/group/", views.user_group_view, name="user_group_view"),
path("user/group/all", views.user_group_view_all, name="user_group_view_all"),
diff --git a/generic/views.py b/generic/views.py
index b7bef479..5d9974dd 100644
--- a/generic/views.py
+++ b/generic/views.py
@@ -2475,63 +2475,82 @@ def users_bulk_delete_supervisors(request):
@user_is_cid_user_manager
-def users_bulk_edit_grade(request):
- if request.htmx.trigger == "bulk-edit-grade-button":
- user_grades = UserGrades.objects.all()
+def users_bulk_edit(request):
+ print(request.htmx.trigger)
+ print(request.htmx.trigger_name)
+ match request.htmx.trigger:
+ case r if r is None:
+ return HttpResponse("None", content_type="text/html")
- html = "".join(
- [
- f""""""
- for grade in user_grades
- ]
- )
- # TODO: work out how to actually use hyperscript
- html = (
- html
- + ""
- )
+ case "bulk-edit-grade-button":
+ user_grades = UserGrades.objects.all()
- return HttpResponse(html, content_type="text/html")
- elif request.htmx.trigger_name.startswith("add-grade"):
- selected_users = request.POST.getlist("selection")
+ html = "".join(
+ [
+ f""""""
+ for grade in user_grades
+ ]
+ )
+ # TODO: work out how to actually use hyperscript
+ html = (
+ html
+ + ""
+ )
- if not selected_users:
- return HttpResponse("No users selected", content_type="text/html")
- user_models = User.objects.filter(id__in=selected_users)
+ return HttpResponse(html, content_type="text/html")
+ case r if r.startswith("add-grade"):
+ selected_users = request.POST.getlist("selection")
- # u: User
- for u in user_models:
- u.userprofile.grade_id = request.htmx.trigger_name.split("--")[-1]
- u.save()
- return HttpResponse("Grades update", content_type="text/html")
- else:
- return HttpResponse("Error", content_type="text/html")
+ if not selected_users:
+ return HttpResponse("No users selected", content_type="text/html")
+ user_models = User.objects.filter(id__in=selected_users)
+ # u: User
+ for u in user_models:
+ u.userprofile.grade_id = r.split("--")[-1]
+ u.save()
+ return HttpResponse("Grades update", content_type="text/html")
+ case "bulk-add-group-button":
+ user_groups = UserUserGroup.objects.all()
-@user_is_cid_user_manager
-def users_bulk_delete_supervisors(request):
- if "selection" in request.POST:
- selected_users = request.POST.getlist("selection")
- user_models = User.objects.filter(id__in=selected_users)
+ html = "".join(
+ [
+ f""""""
+ for group in user_groups
+ ]
+ )
+ # TODO: work out how to actually use hyperscript
+ html = (
+ html
+ + ""
+ )
- for u in user_models:
- u.userprofile.supervisor = None
- u.save()
+ return HttpResponse(html, content_type="text/html")
+ case r if r.startswith("add-group"):
+ selected_users = request.POST.getlist("selection")
- modified_users = ",".join([user.username for user in user_models])
+ if not selected_users:
+ return HttpResponse("No users selected", content_type="text/html")
+ user_models = User.objects.filter(id__in=selected_users)
- return HttpResponse(
- f"Supervisors removed from {modified_users}. Refresh page to see update",
- content_type="text/plain",
- )
-
- else:
- return HttpResponse("No users selected", content_type="text/plain")
+ # u: User
+ for u in user_models:
+ pass
+ u.user_groups.add(r.split("--")[-1])
+ u.save()
+ return HttpResponse("Group added", content_type="text/html")
+ case _:
+ return HttpResponse("Error", content_type="text/html")
@user_is_cid_user_manager
diff --git a/rad/views.py b/rad/views.py
index 2b613a4c..a8d51b39 100644
--- a/rad/views.py
+++ b/rad/views.py
@@ -1,4 +1,5 @@
import secrets
+from typing import Optional
from django.conf import settings
from django_tables2 import SingleTableMixin
@@ -542,6 +543,12 @@ class UserListTableView(CidManagerRequiredMixin, SingleTableMixin, FilterView):
filterset_class = UserUserFilter
+ #table_pagination = {"per_page": 5}
+
+ def get_paginate_by(self, table_data) -> int | None:
+ return 2
+ #return super().get_paginate_by(table_data)
+
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# user = self.request.user