proper URL structure established

This commit is contained in:
Peter Pfeufer 2020-10-25 11:21:35 +01:00
parent 8980d8d32f
commit 281dbdbb01
No known key found for this signature in database
GPG Key ID: 6051D2C6AD4EBC27
3 changed files with 368 additions and 171 deletions

View File

@ -30,7 +30,7 @@
{% for group in groups %} {% for group in groups %}
<tr> <tr>
<td class="text-center"> <td class="text-center">
<a href="{% url 'groupmanagement:membership_list' group.id %}">{{ group.name }}</a> <a href="{% url 'groupmanagement:membership' group.id %}">{{ group.name }}</a>
</td> </td>
<td class="text-center">{{ group.authgroup.description }}</td> <td class="text-center">{{ group.authgroup.description }}</td>
<td class="text-center"> <td class="text-center">
@ -46,8 +46,7 @@
{{ group.num_members }} {{ group.num_members }}
</td> </td>
<td class="text-center"> <td class="text-center">
<a href="{% url 'groupmanagement:membership_list' group.id %}" class="btn btn-primary" <a href="{% url 'groupmanagement:membership' group.id %}" class="btn btn-primary" title="{% trans "View Members" %}">
title="{% trans "View Members" %}">
<i class="glyphicon glyphicon-eye-open"></i> <i class="glyphicon glyphicon-eye-open"></i>
</a> </a>
<a href="{% url "groupmanagement:audit_log" group.id %}" class="btn btn-info" title="{% trans "Audit Members" %}"> <a href="{% url "groupmanagement:audit_log" group.id %}" class="btn btn-info" title="{% trans "Audit Members" %}">

View File

@ -1,29 +1,52 @@
from . import views from . import views
from django.conf.urls import url from django.conf.urls import url
app_name = 'groupmanagement'
app_name = "groupmanagement"
urlpatterns = [ urlpatterns = [
url(r'^groups/', views.groups_view, name='groups'), # groups
url(r'^management/', views.group_management, url(r"^groups/$", views.groups_view, name="groups"),
name='management'), url(r"^group/request/join/(\w+)/$", views.group_request_add, name="request_add"),
url(r'^membership/$', views.group_membership, url(
name='membership'), r"^group/request/leave/(\w+)/$", views.group_request_leave, name="request_leave"
url(r'^membership/(\w+)/$', views.group_membership_list, ),
name='membership_list'), # group management
url(r'^membership/(\w+)/audit/$', views.group_membership_audit, name="audit_log"), url(r"^groupmanagement/requests/$", views.group_management, name="management"),
url(r'^membership/(\w+)/remove/(\w+)/$', views.group_membership_remove, url(r"^groupmanagement/membership/$", views.group_membership, name="membership"),
name='membership_remove'), url(
url(r'^request_add/(\w+)', views.group_request_add, r"^groupmanagement/membership/(\w+)/$",
name='request_add'), views.group_membership_list,
url(r'^request/accept/(\w+)', views.group_accept_request, name="membership",
name='accept_request'), ),
url(r'^request/reject/(\w+)', views.group_reject_request, url(
name='reject_request'), r"^groupmanagement/membership/(\w+)/audit-log/$",
url(r'^request_leave/(\w+)', views.group_request_leave, views.group_membership_audit,
name='request_leave'), name="audit_log",
url(r'leave_request/accept/(\w+)', views.group_leave_accept_request, ),
name='leave_accept_request'), url(
url(r'^leave_request/reject/(\w+)', views.group_leave_reject_request, r"^groupmanagement/membership/(\w+)/remove/(\w+)/$",
name='leave_reject_request'), views.group_membership_remove,
name="membership_remove",
),
url(
r"^groupmanagement/request/join/accept/(\w+)/$",
views.group_accept_request,
name="accept_request",
),
url(
r"^groupmanagement/request/join/reject/(\w+)/$",
views.group_reject_request,
name="reject_request",
),
url(
r"groupmanagement/request/leave/accept/(\w+)/$",
views.group_leave_accept_request,
name="leave_accept_request",
),
url(
r"^groupmanagement/request/leave/reject/(\w+)/$",
views.group_leave_reject_request,
name="leave_reject_request",
),
] ]

View File

@ -27,7 +27,9 @@ def group_management(request):
acceptrequests = [] acceptrequests = []
leaverequests = [] leaverequests = []
base_group_query = GroupRequest.objects.select_related('user', 'group', 'user__profile__main_character') base_group_query = GroupRequest.objects.select_related(
"user", "group", "user__profile__main_character"
)
if GroupManager.has_management_permission(request.user): if GroupManager.has_management_permission(request.user):
# Full access # Full access
group_requests = base_group_query.all() group_requests = base_group_query.all()
@ -42,12 +44,14 @@ def group_management(request):
else: else:
acceptrequests.append(grouprequest) acceptrequests.append(grouprequest)
logger.debug("Providing user %s with %s acceptrequests and %s leaverequests." % ( logger.debug(
request.user, len(acceptrequests), len(leaverequests))) "Providing user %s with %s acceptrequests and %s leaverequests."
% (request.user, len(acceptrequests), len(leaverequests))
)
render_items = {'acceptrequests': acceptrequests, 'leaverequests': leaverequests} render_items = {"acceptrequests": acceptrequests, "leaverequests": leaverequests}
return render(request, 'groupmanagement/index.html', context=render_items) return render(request, "groupmanagement/index.html", context=render_items)
@login_required @login_required
@ -62,11 +66,15 @@ def group_membership(request):
# Group leader specific # Group leader specific
groups = GroupManager.get_group_leaders_groups(request.user) groups = GroupManager.get_group_leaders_groups(request.user)
groups = groups.exclude(authgroup__internal=True).annotate(num_members=Count('user')).order_by('name') groups = (
groups.exclude(authgroup__internal=True)
.annotate(num_members=Count("user"))
.order_by("name")
)
render_items = {'groups': groups} render_items = {"groups": groups}
return render(request, 'groupmanagement/groupmembership.html', context=render_items) return render(request, "groupmanagement/groupmembership.html", context=render_items)
@login_required @login_required
@ -77,18 +85,22 @@ def group_membership_audit(request, group_id):
try: try:
# Check its a joinable group i.e. not corp or internal # Check its a joinable group i.e. not corp or internal
# And the user has permission to manage it # And the user has permission to manage it
if not GroupManager.check_internal_group(group) or not GroupManager.can_manage_group(request.user, group): if not GroupManager.check_internal_group(
logger.warning("User %s attempted to view the membership of group %s but permission was denied" % group
(request.user, group_id)) ) or not GroupManager.can_manage_group(request.user, group):
logger.warning(
"User %s attempted to view the membership of group %s but permission was denied"
% (request.user, group_id)
)
raise PermissionDenied raise PermissionDenied
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404("Group does not exist") raise Http404("Group does not exist")
render_items = {'group': group.name} render_items = {"group": group.name}
entries = RequestLog.objects.filter(group=group).order_by('-date') entries = RequestLog.objects.filter(group=group).order_by("-date")
render_items['entries'] = entries render_items["entries"] = entries
return render(request, 'groupmanagement/audit.html', context=render_items) return render(request, "groupmanagement/audit.html", context=render_items)
@login_required @login_required
@ -103,9 +115,9 @@ def group_membership_list(request, group_id):
# Check its a joinable group i.e. not corp or internal # Check its a joinable group i.e. not corp or internal
# And the user has permission to manage it # And the user has permission to manage it
if (not GroupManager.check_internal_group(group) if not GroupManager.check_internal_group(
or not GroupManager.can_manage_group(request.user, group) group
): ) or not GroupManager.can_manage_group(request.user, group):
logger.warning( logger.warning(
"User %s attempted to view the membership of group %s " "User %s attempted to view the membership of group %s "
"but permission was denied" % (request.user, group_id) "but permission was denied" % (request.user, group_id)
@ -117,90 +129,136 @@ def group_membership_list(request, group_id):
group_leaders = group.authgroup.group_leaders.all() group_leaders = group.authgroup.group_leaders.all()
members = list() members = list()
for member in \ for member in (
group.user_set\ group.user_set.all()
.all()\ .select_related("profile", "profile__main_character")
.select_related('profile', 'profile__main_character')\ .order_by("profile__main_character__character_name")
.order_by('profile__main_character__character_name'): ):
members.append({ members.append(
'user': member, {
'main_char': member.profile.main_character, "user": member,
'is_leader': member in group_leaders "main_char": member.profile.main_character,
}) "is_leader": member in group_leaders,
}
render_items = {'group': group, 'members': members}
return render(
request, 'groupmanagement/groupmembers.html',
context=render_items
) )
render_items = {"group": group, "members": members}
return render(request, "groupmanagement/groupmembers.html", context=render_items)
@login_required @login_required
@user_passes_test(GroupManager.can_manage_groups) @user_passes_test(GroupManager.can_manage_groups)
def group_membership_remove(request, group_id, user_id): def group_membership_remove(request, group_id, user_id):
logger.debug("group_membership_remove called by user %s for group id %s on user id %s" % logger.debug(
(request.user, group_id, user_id)) "group_membership_remove called by user %s for group id %s on user id %s"
% (request.user, group_id, user_id)
)
group = get_object_or_404(Group, id=group_id) group = get_object_or_404(Group, id=group_id)
try: try:
# Check its a joinable group i.e. not corp or internal # Check its a joinable group i.e. not corp or internal
# And the user has permission to manage it # And the user has permission to manage it
if not GroupManager.check_internal_group(group) or not GroupManager.can_manage_group(request.user, group): if not GroupManager.check_internal_group(
logger.warning("User %s attempted to remove a user from group %s but permission was denied" % (request.user, group
group_id)) ) or not GroupManager.can_manage_group(request.user, group):
logger.warning(
"User %s attempted to remove a user from group %s but permission was denied"
% (request.user, group_id)
)
raise PermissionDenied raise PermissionDenied
try: try:
user = group.user_set.get(id=user_id) user = group.user_set.get(id=user_id)
request_info = user.username + ":" + group.name request_info = user.username + ":" + group.name
log = RequestLog(request_type=None,group=group,request_info=request_info,action=1,request_actor=request.user) log = RequestLog(
request_type=None,
group=group,
request_info=request_info,
action=1,
request_actor=request.user,
)
log.save() log.save()
# Remove group from user # Remove group from user
user.groups.remove(group) user.groups.remove(group)
logger.info("User %s removed user %s from group %s" % (request.user, user, group)) logger.info(
messages.success(request, _("Removed user %(user)s from group %(group)s.") % {"user": user, "group": group}) "User %s removed user %s from group %s" % (request.user, user, group)
)
messages.success(
request,
_("Removed user %(user)s from group %(group)s.")
% {"user": user, "group": group},
)
except ObjectDoesNotExist: except ObjectDoesNotExist:
messages.warning(request, _("User does not exist in that group")) messages.warning(request, _("User does not exist in that group"))
except ObjectDoesNotExist: except ObjectDoesNotExist:
messages.warning(request, _("Group does not exist")) messages.warning(request, _("Group does not exist"))
return redirect('groupmanagement:membership_list', group_id) return redirect("groupmanagement:membership", group_id)
@login_required @login_required
@user_passes_test(GroupManager.can_manage_groups) @user_passes_test(GroupManager.can_manage_groups)
def group_accept_request(request, group_request_id): def group_accept_request(request, group_request_id):
logger.debug("group_accept_request called by user %s for grouprequest id %s" % (request.user, group_request_id)) logger.debug(
"group_accept_request called by user %s for grouprequest id %s"
% (request.user, group_request_id)
)
group_request = get_object_or_404(GroupRequest, id=group_request_id) group_request = get_object_or_404(GroupRequest, id=group_request_id)
try: try:
group, created = Group.objects.get_or_create(name=group_request.group.name) group, created = Group.objects.get_or_create(name=group_request.group.name)
if not GroupManager.joinable_group(group_request.group, group_request.user.profile.state) or \ if not GroupManager.joinable_group(
not GroupManager.can_manage_group(request.user, group_request.group): group_request.group, group_request.user.profile.state
) or not GroupManager.can_manage_group(request.user, group_request.group):
raise PermissionDenied raise PermissionDenied
group_request.user.groups.add(group) group_request.user.groups.add(group)
group_request.user.save() group_request.user.save()
log = RequestLog(request_type=group_request.leave_request,group=group,request_info=group_request.__str__(),action=1,request_actor=request.user) log = RequestLog(
request_type=group_request.leave_request,
group=group,
request_info=group_request.__str__(),
action=1,
request_actor=request.user,
)
log.save() log.save()
group_request.delete() group_request.delete()
logger.info("User %s accepted group request from user %s to group %s" % ( logger.info(
request.user, group_request.user, group_request.group.name)) "User %s accepted group request from user %s to group %s"
notify(group_request.user, "Group Application Accepted", level="success", % (request.user, group_request.user, group_request.group.name)
message="Your application to %s has been accepted." % group_request.group) )
messages.success(request, notify(
_('Accepted application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group}) group_request.user,
"Group Application Accepted",
level="success",
message="Your application to %s has been accepted." % group_request.group,
)
messages.success(
request,
_("Accepted application from %(mainchar)s to %(group)s.")
% {"mainchar": group_request.main_char, "group": group_request.group},
)
except PermissionDenied as p: except PermissionDenied as p:
logger.warning("User %s attempted to accept group join request %s but permission was denied" % logger.warning(
(request.user, group_request_id)) "User %s attempted to accept group join request %s but permission was denied"
% (request.user, group_request_id)
)
raise p raise p
except: except:
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group}) messages.error(
logger.exception("Unhandled exception occurred while user %s attempting to accept grouprequest id %s." % ( request,
request.user, group_request_id)) _(
"An unhandled error occurred while processing the application from %(mainchar)s to %(group)s."
)
% {"mainchar": group_request.main_char, "group": group_request.group},
)
logger.exception(
"Unhandled exception occurred while user %s attempting to accept grouprequest id %s."
% (request.user, group_request_id)
)
pass pass
return redirect("groupmanagement:management") return redirect("groupmanagement:management")
@ -209,31 +267,60 @@ def group_accept_request(request, group_request_id):
@login_required @login_required
@user_passes_test(GroupManager.can_manage_groups) @user_passes_test(GroupManager.can_manage_groups)
def group_reject_request(request, group_request_id): def group_reject_request(request, group_request_id):
logger.debug("group_reject_request called by user %s for group request id %s" % (request.user, group_request_id)) logger.debug(
"group_reject_request called by user %s for group request id %s"
% (request.user, group_request_id)
)
group_request = get_object_or_404(GroupRequest, id=group_request_id) group_request = get_object_or_404(GroupRequest, id=group_request_id)
try: try:
if not GroupManager.can_manage_group(request.user, group_request.group): if not GroupManager.can_manage_group(request.user, group_request.group):
raise PermissionDenied raise PermissionDenied
if group_request: if group_request:
logger.info("User %s rejected group request from user %s to group %s" % ( logger.info(
request.user, group_request.user, group_request.group.name)) "User %s rejected group request from user %s to group %s"
log = RequestLog(request_type=group_request.leave_request,group=group_request.group,request_info=group_request.__str__(),action=0,request_actor=request.user) % (request.user, group_request.user, group_request.group.name)
)
log = RequestLog(
request_type=group_request.leave_request,
group=group_request.group,
request_info=group_request.__str__(),
action=0,
request_actor=request.user,
)
log.save() log.save()
group_request.delete() group_request.delete()
notify(group_request.user, "Group Application Rejected", level="danger", notify(
message="Your application to %s has been rejected." % group_request.group) group_request.user,
messages.success(request, "Group Application Rejected",
_('Rejected application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group}) level="danger",
message="Your application to %s has been rejected."
% group_request.group,
)
messages.success(
request,
_("Rejected application from %(mainchar)s to %(group)s.")
% {"mainchar": group_request.main_char, "group": group_request.group},
)
except PermissionDenied as p: except PermissionDenied as p:
logger.warning("User %s attempted to reject group join request %s but permission was denied" % logger.warning(
(request.user, group_request_id)) "User %s attempted to reject group join request %s but permission was denied"
% (request.user, group_request_id)
)
raise p raise p
except: except:
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group}) messages.error(
logger.exception("Unhandled exception occurred while user %s attempting to reject group request id %s" % ( request,
request.user, group_request_id)) _(
"An unhandled error occurred while processing the application from %(mainchar)s to %(group)s."
)
% {"mainchar": group_request.main_char, "group": group_request.group},
)
logger.exception(
"Unhandled exception occurred while user %s attempting to reject group request id %s"
% (request.user, group_request_id)
)
pass pass
return redirect("groupmanagement:management") return redirect("groupmanagement:management")
@ -243,7 +330,9 @@ def group_reject_request(request, group_request_id):
@user_passes_test(GroupManager.can_manage_groups) @user_passes_test(GroupManager.can_manage_groups)
def group_leave_accept_request(request, group_request_id): def group_leave_accept_request(request, group_request_id):
logger.debug( logger.debug(
"group_leave_accept_request called by user %s for group request id %s" % (request.user, group_request_id)) "group_leave_accept_request called by user %s for group request id %s"
% (request.user, group_request_id)
)
group_request = get_object_or_404(GroupRequest, id=group_request_id) group_request = get_object_or_404(GroupRequest, id=group_request_id)
try: try:
if not GroupManager.can_manage_group(request.user, group_request.group): if not GroupManager.can_manage_group(request.user, group_request.group):
@ -252,24 +341,48 @@ def group_leave_accept_request(request, group_request_id):
group, created = Group.objects.get_or_create(name=group_request.group.name) group, created = Group.objects.get_or_create(name=group_request.group.name)
group_request.user.groups.remove(group) group_request.user.groups.remove(group)
group_request.user.save() group_request.user.save()
log = RequestLog(request_type=group_request.leave_request,group=group_request.group,request_info=group_request.__str__(),action=1,request_actor=request.user) log = RequestLog(
request_type=group_request.leave_request,
group=group_request.group,
request_info=group_request.__str__(),
action=1,
request_actor=request.user,
)
log.save() log.save()
group_request.delete() group_request.delete()
logger.info("User %s accepted group leave request from user %s to group %s" % ( logger.info(
request.user, group_request.user, group_request.group.name)) "User %s accepted group leave request from user %s to group %s"
notify(group_request.user, "Group Leave Request Accepted", level="success", % (request.user, group_request.user, group_request.group.name)
message="Your request to leave %s has been accepted." % group_request.group) )
messages.success(request, notify(
_('Accepted application from %(mainchar)s to leave %(group)s.') % {"mainchar": group_request.main_char, "group": group_request.group}) group_request.user,
"Group Leave Request Accepted",
level="success",
message="Your request to leave %s has been accepted." % group_request.group,
)
messages.success(
request,
_("Accepted application from %(mainchar)s to leave %(group)s.")
% {"mainchar": group_request.main_char, "group": group_request.group},
)
except PermissionDenied as p: except PermissionDenied as p:
logger.warning("User %s attempted to accept group leave request %s but permission was denied" % logger.warning(
(request.user, group_request_id)) "User %s attempted to accept group leave request %s but permission was denied"
% (request.user, group_request_id)
)
raise p raise p
except: except:
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to leave %(group)s.') % { messages.error(
"mainchar": group_request.main_char, "group": group_request.group}) request,
logger.exception("Unhandled exception occurred while user %s attempting to accept group leave request id %s" % ( _(
request.user, group_request_id)) "An unhandled error occurred while processing the application from %(mainchar)s to leave %(group)s."
)
% {"mainchar": group_request.main_char, "group": group_request.group},
)
logger.exception(
"Unhandled exception occurred while user %s attempting to accept group leave request id %s"
% (request.user, group_request_id)
)
pass pass
return redirect("groupmanagement:management") return redirect("groupmanagement:management")
@ -279,31 +392,58 @@ def group_leave_accept_request(request, group_request_id):
@user_passes_test(GroupManager.can_manage_groups) @user_passes_test(GroupManager.can_manage_groups)
def group_leave_reject_request(request, group_request_id): def group_leave_reject_request(request, group_request_id):
logger.debug( logger.debug(
"group_leave_reject_request called by user %s for group request id %s" % (request.user, group_request_id)) "group_leave_reject_request called by user %s for group request id %s"
% (request.user, group_request_id)
)
group_request = get_object_or_404(GroupRequest, id=group_request_id) group_request = get_object_or_404(GroupRequest, id=group_request_id)
try: try:
if not GroupManager.can_manage_group(request.user, group_request.group): if not GroupManager.can_manage_group(request.user, group_request.group):
raise PermissionDenied raise PermissionDenied
if group_request: if group_request:
log = RequestLog(request_type=group_request.leave_request,group=group_request.group,request_info=group_request.__str__(),action=0,request_actor=request.user) log = RequestLog(
request_type=group_request.leave_request,
group=group_request.group,
request_info=group_request.__str__(),
action=0,
request_actor=request.user,
)
log.save() log.save()
group_request.delete() group_request.delete()
logger.info("User %s rejected group leave request from user %s for group %s" % ( logger.info(
request.user, group_request.user, group_request.group.name)) "User %s rejected group leave request from user %s for group %s"
notify(group_request.user, "Group Leave Request Rejected", level="danger", % (request.user, group_request.user, group_request.group.name)
message="Your request to leave %s has been rejected." % group_request.group) )
messages.success(request, _('Rejected application from %(mainchar)s to leave %(group)s.') % { notify(
"mainchar": group_request.main_char, "group": group_request.group}) group_request.user,
"Group Leave Request Rejected",
level="danger",
message="Your request to leave %s has been rejected."
% group_request.group,
)
messages.success(
request,
_("Rejected application from %(mainchar)s to leave %(group)s.")
% {"mainchar": group_request.main_char, "group": group_request.group},
)
except PermissionDenied as p: except PermissionDenied as p:
logger.warning("User %s attempted to reject group leave request %s but permission was denied" % logger.warning(
(request.user, group_request_id)) "User %s attempted to reject group leave request %s but permission was denied"
% (request.user, group_request_id)
)
raise p raise p
except: except:
messages.error(request, _('An unhandled error occurred while processing the application from %(mainchar)s to leave %(group)s.') % { messages.error(
"mainchar": group_request.main_char, "group": group_request.group}) request,
logger.exception("Unhandled exception occurred while user %s attempting to reject group leave request id %s" % ( _(
request.user, group_request_id)) "An unhandled error occurred while processing the application from %(mainchar)s to leave %(group)s."
)
% {"mainchar": group_request.main_char, "group": group_request.group},
)
logger.exception(
"Unhandled exception occurred while user %s attempting to reject group leave request id %s"
% (request.user, group_request_id)
)
pass pass
return redirect("groupmanagement:management") return redirect("groupmanagement:management")
@ -316,96 +456,131 @@ def groups_view(request):
groups_qs = GroupManager.get_joinable_groups_for_user( groups_qs = GroupManager.get_joinable_groups_for_user(
request.user, include_hidden=False request.user, include_hidden=False
) )
groups_qs = groups_qs.order_by('name') groups_qs = groups_qs.order_by("name")
groups = [] groups = []
for group in groups_qs: for group in groups_qs:
group_request = GroupRequest.objects\ group_request = GroupRequest.objects.filter(user=request.user).filter(
.filter(user=request.user)\ group=group
.filter(group=group) )
groups.append({ groups.append(
'group': group, {"group": group, "request": group_request[0] if group_request else None}
'request': group_request[0] if group_request else None )
})
context = {'groups': groups} context = {"groups": groups}
return render(request, 'groupmanagement/groups.html', context=context) return render(request, "groupmanagement/groups.html", context=context)
@login_required @login_required
def group_request_add(request, group_id): def group_request_add(request, group_id):
logger.debug("group_request_add called by user %s for group id %s" % (request.user, group_id)) logger.debug(
"group_request_add called by user %s for group id %s" % (request.user, group_id)
)
group = Group.objects.get(id=group_id) group = Group.objects.get(id=group_id)
state = request.user.profile.state state = request.user.profile.state
if not GroupManager.joinable_group(group, state): if not GroupManager.joinable_group(group, state):
logger.warning("User %s attempted to join group id %s but it is not a joinable group" % logger.warning(
(request.user, group_id)) "User %s attempted to join group id %s but it is not a joinable group"
% (request.user, group_id)
)
messages.warning(request, _("You cannot join that group")) messages.warning(request, _("You cannot join that group"))
return redirect('groupmanagement:groups') return redirect("groupmanagement:groups")
if group in request.user.groups.all(): if group in request.user.groups.all():
# User is already a member of this group. # User is already a member of this group.
logger.warning("User %s attempted to join group id %s but they are already a member." % logger.warning(
(request.user, group_id)) "User %s attempted to join group id %s but they are already a member."
% (request.user, group_id)
)
messages.warning(request, _("You are already a member of that group.")) messages.warning(request, _("You are already a member of that group."))
return redirect('groupmanagement:groups') return redirect("groupmanagement:groups")
if not request.user.has_perm('groupmanagement.request_groups') and not group.authgroup.public: if (
not request.user.has_perm("groupmanagement.request_groups")
and not group.authgroup.public
):
# Does not have the required permission, trying to join a non-public group # Does not have the required permission, trying to join a non-public group
logger.warning("User %s attempted to join group id %s but it is not a public group" % logger.warning(
(request.user, group_id)) "User %s attempted to join group id %s but it is not a public group"
% (request.user, group_id)
)
messages.warning(request, _("You cannot join that group")) messages.warning(request, _("You cannot join that group"))
return redirect('groupmanagement:groups') return redirect("groupmanagement:groups")
if group.authgroup.open: if group.authgroup.open:
logger.info("%s joining %s as is an open group" % (request.user, group)) logger.info("%s joining %s as is an open group" % (request.user, group))
request.user.groups.add(group) request.user.groups.add(group)
return redirect("groupmanagement:groups") return redirect("groupmanagement:groups")
req = GroupRequest.objects.filter(user=request.user, group=group) req = GroupRequest.objects.filter(user=request.user, group=group)
if len(req) > 0: if len(req) > 0:
logger.info("%s attempted to join %s but already has an open application" % (request.user, group)) logger.info(
messages.warning(request, _("You already have a pending application for that group.")) "%s attempted to join %s but already has an open application"
% (request.user, group)
)
messages.warning(
request, _("You already have a pending application for that group.")
)
return redirect("groupmanagement:groups") return redirect("groupmanagement:groups")
grouprequest = GroupRequest() grouprequest = GroupRequest()
grouprequest.status = _('Pending') grouprequest.status = _("Pending")
grouprequest.group = group grouprequest.group = group
grouprequest.user = request.user grouprequest.user = request.user
grouprequest.leave_request = False grouprequest.leave_request = False
grouprequest.save() grouprequest.save()
logger.info("Created group request for user %s to group %s" % (request.user, Group.objects.get(id=group_id))) logger.info(
messages.success(request, _('Applied to group %(group)s.') % {"group": group}) "Created group request for user %s to group %s"
% (request.user, Group.objects.get(id=group_id))
)
messages.success(request, _("Applied to group %(group)s.") % {"group": group})
return redirect("groupmanagement:groups") return redirect("groupmanagement:groups")
@login_required @login_required
def group_request_leave(request, group_id): def group_request_leave(request, group_id):
logger.debug("group_request_leave called by user %s for group id %s" % (request.user, group_id)) logger.debug(
"group_request_leave called by user %s for group id %s"
% (request.user, group_id)
)
group = Group.objects.get(id=group_id) group = Group.objects.get(id=group_id)
if not GroupManager.check_internal_group(group): if not GroupManager.check_internal_group(group):
logger.warning("User %s attempted to leave group id %s but it is not a joinable group" % logger.warning(
(request.user, group_id)) "User %s attempted to leave group id %s but it is not a joinable group"
% (request.user, group_id)
)
messages.warning(request, _("You cannot leave that group")) messages.warning(request, _("You cannot leave that group"))
return redirect('groupmanagement:groups') return redirect("groupmanagement:groups")
if group not in request.user.groups.all(): if group not in request.user.groups.all():
logger.debug("User %s attempted to leave group id %s but they are not a member" % logger.debug(
(request.user, group_id)) "User %s attempted to leave group id %s but they are not a member"
% (request.user, group_id)
)
messages.warning(request, _("You are not a member of that group")) messages.warning(request, _("You are not a member of that group"))
return redirect('groupmanagement:groups') return redirect("groupmanagement:groups")
if group.authgroup.open: if group.authgroup.open:
logger.info("%s leaving %s as is an open group" % (request.user, group)) logger.info("%s leaving %s as is an open group" % (request.user, group))
request.user.groups.remove(group) request.user.groups.remove(group)
return redirect("groupmanagement:groups") return redirect("groupmanagement:groups")
req = GroupRequest.objects.filter(user=request.user, group=group) req = GroupRequest.objects.filter(user=request.user, group=group)
if len(req) > 0: if len(req) > 0:
logger.info("%s attempted to leave %s but already has an pending leave request." % (request.user, group)) logger.info(
messages.warning(request, _("You already have a pending leave request for that group.")) "%s attempted to leave %s but already has an pending leave request."
% (request.user, group)
)
messages.warning(
request, _("You already have a pending leave request for that group.")
)
return redirect("groupmanagement:groups") return redirect("groupmanagement:groups")
if getattr(settings, 'AUTO_LEAVE', False): if getattr(settings, "AUTO_LEAVE", False):
logger.info("%s leaving joinable group %s due to auto_leave" % (request.user, group)) logger.info(
"%s leaving joinable group %s due to auto_leave" % (request.user, group)
)
request.user.groups.remove(group) request.user.groups.remove(group)
return redirect('groupmanagement:groups') return redirect("groupmanagement:groups")
grouprequest = GroupRequest() grouprequest = GroupRequest()
grouprequest.status = _('Pending') grouprequest.status = _("Pending")
grouprequest.group = group grouprequest.group = group
grouprequest.user = request.user grouprequest.user = request.user
grouprequest.leave_request = True grouprequest.leave_request = True
grouprequest.save() grouprequest.save()
logger.info("Created group leave request for user %s to group %s" % (request.user, Group.objects.get(id=group_id))) logger.info(
messages.success(request, _('Applied to leave group %(group)s.') % {"group": group}) "Created group leave request for user %s to group %s"
% (request.user, Group.objects.get(id=group_id))
)
messages.success(request, _("Applied to leave group %(group)s.") % {"group": group})
return redirect("groupmanagement:groups") return redirect("groupmanagement:groups")