From 6d20beebce1ac504c33a62ad0610ed0490244245 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 16 Dec 2024 10:28:51 +0000 Subject: [PATCH] allow adding users to group by email --- .../generic/cid_group_view_detail.html | 48 +++++++++++++------ generic/urls.py | 5 ++ generic/views.py | 41 ++++++++++++++++ 3 files changed, 79 insertions(+), 15 deletions(-) diff --git a/generic/templates/generic/cid_group_view_detail.html b/generic/templates/generic/cid_group_view_detail.html index 5e1d18ba..7fb2e25b 100755 --- a/generic/templates/generic/cid_group_view_detail.html +++ b/generic/templates/generic/cid_group_view_detail.html @@ -38,6 +38,24 @@ They can be created (or added) here {% endif %} {% endif %} + +
+
+ Add users by email +
+
+ {% csrf_token %} + + +
+
+
+
+
+

Exams

The group is currently associated with the following exams. This allows the users within the group to be easily added to the exam. It will not automatically give members of the group access to the exam. {% if group_type == "cid" %} @@ -52,7 +70,7 @@
{% for exam in value %}
- {{exam}} + {{exam}} {% if group_type == "cid" %} Edit candidates {% comment %} @@ -62,20 +80,20 @@
- - + +
{% endif %} diff --git a/generic/urls.py b/generic/urls.py index 23a57095..6e0047d0 100755 --- a/generic/urls.py +++ b/generic/urls.py @@ -130,6 +130,11 @@ urlpatterns = [ views.user_group_view_detail, name="user_group_detail", ), + path( + "user/group//add_by_email", + views.user_group_add_by_email_user, + name="user_group_add_by_email_user", + ), path( "user/group//add", views.user_group_add_candidates_to_exams, diff --git a/generic/views.py b/generic/views.py index e5d3467d..83af330e 100644 --- a/generic/views.py +++ b/generic/views.py @@ -2863,6 +2863,47 @@ def cid_group_view(request): {"groups": groups}, ) +@user_is_cid_user_manager +def user_group_add_by_email_user(request, group_id): + if request.htmx: + group = get_object_or_404(UserUserGroup, pk=group_id) + emails = request.POST.get("emails") + + if not emails: + return HttpResponse("No emails provided", content_type="text/plain") + + + added = [] + invalid_emails = [] + for email in emails.split(): + try: + validate_email(email) + + try: + user = User.objects.get(email=email) + + group.users.add(user) + added.append(user.username) + except User.DoesNotExist: + invalid_emails.append(email) + except ValidationError: + # Ignore invalid emails + pass + + res = f"
Users added to {group.name} [{','.join(added)}]
" + + if invalid_emails: + res += f"
Invalid emails [{','.join(invalid_emails)}]
" + + + return HttpResponse(format_html(res), content_type="text/html") + + + + + raise Http404 + + @user_is_cid_user_manager def cid_group_view_detail(request, group_id):