diff --git a/allianceauth/groupmanagement/templates/groupmanagement/groups.html b/allianceauth/groupmanagement/templates/groupmanagement/groups.html index 02ed1535..0f1dc040 100644 --- a/allianceauth/groupmanagement/templates/groupmanagement/groups.html +++ b/allianceauth/groupmanagement/templates/groupmanagement/groups.html @@ -70,8 +70,8 @@ {% translate "Leave" %} {% else %} - {% endif %} {% elif not g.request %} @@ -85,9 +85,13 @@ {% endif %} {% else %} - + + + {% translate "Retract" %} + {% endif %} diff --git a/allianceauth/groupmanagement/urls.py b/allianceauth/groupmanagement/urls.py index 5b27821b..f083803a 100644 --- a/allianceauth/groupmanagement/urls.py +++ b/allianceauth/groupmanagement/urls.py @@ -10,6 +10,11 @@ urlpatterns = [ path( "group/request/leave//", views.group_request_leave, name="request_leave" ), + path( + "group/request/retract//", + views.group_request_retract, + name="request_retract" + ), # group management path("groupmanagement/requests/", views.group_management, name="management"), path("groupmanagement/membership/", views.group_membership, name="membership"), diff --git a/allianceauth/groupmanagement/views.py b/allianceauth/groupmanagement/views.py index 1d1bba87..7d6c85c8 100644 --- a/allianceauth/groupmanagement/views.py +++ b/allianceauth/groupmanagement/views.py @@ -420,3 +420,42 @@ def group_request_leave(request, group_id): grouprequest.notify_leaders() messages.success(request, _('Applied to leave group %(group)s.') % {"group": group}) return redirect("groupmanagement:groups") + +@login_required +def group_request_retract(request, group_id): + logger.debug( + f"group_request_retract called by user {request.user} for group id {group_id}" + ) + group = get_object_or_404(Group, id=group_id) + + if not GroupManager.check_internal_group(group): + logger.warning( + f"User {request.user} attempted to retract group request for " + f"group id {group_id} but it is not a joinable group" + ) + messages.warning( + request, + _("You cannot retract that request"), + ) + return redirect('groupmanagement:groups') + + try: + group_request = GroupRequest.objects.get( + user=request.user, group=group, leave_request=False + ) + group_request.delete() + + logger.info(f"Deleted group request for user {request.user} to group {group}") + messages.success( + request, _('Retracted application to group %(group)s.') % {"group": group} + ) + except GroupRequest.DoesNotExist: + logger.info( + f"{request.user} attempted to retract group request for " + f"group id {group_id} but has no open request" + ) + messages.warning( + request, _("You have no open request for that group.") + ) + + return redirect("groupmanagement:groups")