From 25dadf81f647e82a68a5e637d135cf25becccf67 Mon Sep 17 00:00:00 2001 From: Basraah Date: Sat, 3 Dec 2016 21:45:55 +1000 Subject: [PATCH 01/10] Add open/hidden group membership display and remove --- alliance_auth/urls.py | 6 ++ groupmanagement/views.py | 71 +++++++++++++++++++ .../templates/registered/groupmanagement.html | 2 +- .../registered/groupmanagementmenu.html | 26 +++++++ stock/templates/registered/groupmembers.html | 44 ++++++++++++ .../templates/registered/groupmembership.html | 54 ++++++++++++++ 6 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 stock/templates/registered/groupmanagementmenu.html create mode 100644 stock/templates/registered/groupmembers.html create mode 100644 stock/templates/registered/groupmembership.html diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index 29613fc5..46c155b4 100755 --- a/alliance_auth/urls.py +++ b/alliance_auth/urls.py @@ -192,6 +192,12 @@ urlpatterns += i18n_patterns( url(_(r'^groups/'), groupmanagement.views.groups_view, name='auth_groups'), url(_(r'^group/management/'), groupmanagement.views.group_management, name='auth_group_management'), + url(_(r'^group/membership/$'), groupmanagement.views.group_membership, + name='auth_group_membership'), + url(_(r'^group/membership/(\w+)/$'), groupmanagement.views.group_membership_list, + name='auth_group_membership_list'), + url(_(r'^group/membership/(\w+)/remove/(\w+)/$'), groupmanagement.views.group_membership_remove, + name='auth_group_membership_remove'), url(_(r'^group/request_add/(\w+)'), groupmanagement.views.group_request_add, name='auth_group_request_add'), url(_(r'^group/request/accept/(\w+)'), groupmanagement.views.group_accept_request, diff --git a/groupmanagement/views.py b/groupmanagement/views.py index 9a9eaf91..849a2ec1 100755 --- a/groupmanagement/views.py +++ b/groupmanagement/views.py @@ -13,6 +13,10 @@ from groupmanagement.models import OpenGroup from authentication.models import AuthServicesInfo from eveonline.managers import EveManager from django.utils.translation import ugettext_lazy as _ +from django.db.models import Count +from django.core.exceptions import ObjectDoesNotExist, PermissionDenied +from django.http import Http404 +from itertools import chain import logging @@ -39,6 +43,73 @@ def group_management(request): return render(request, 'registered/groupmanagement.html', context=render_items) +@login_required +@permission_required('auth.group_management') +def group_membership(request): + logger.debug("group_membership called by user %s" % request.user) + # Get all open and closed groups + opengroups = OpenGroup.objects.all().annotate(num_members=Count('group__user')) + closedgroups = HiddenGroup.objects.all().annotate(num_members=Count('group__user')) + + groups = list(chain(opengroups, closedgroups)) + groups.sort(key=lambda g: g.group.name.lower()) + + render_items = {'groups': groups} + + return render(request, 'registered/groupmembership.html', context=render_items) + + +@login_required +@permission_required('auth.group_management') +def group_membership_list(request, group_id): + logger.debug("group_membership_list called by user %s for group id %s" % (request.user, group_id)) + try: + group = Group.objects.get(id=group_id) + + # Check its a joinable group i.e. not corp or internal + if not hasattr(group, 'hiddengroup') and not hasattr(group, 'opengroup'): + raise PermissionDenied + + except ObjectDoesNotExist: + raise Http404("Group does not exist") + + members = list() + + for member in group.user_set.all(): + authinfo = AuthServicesInfo.objects.get_or_create(user=member)[0] + + members.append({ + 'user': member, + 'main_char': EveManager.get_character_by_id(authinfo.main_char_id) + }) + + render_items = {'group': group, 'members': members} + + return render(request, 'registered/groupmembers.html', context=render_items) + + +@login_required +@permission_required('auth.group_management') +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" % + (request.user, group_id, user_id)) + try: + group = Group.objects.get(id=group_id) + + try: + user = group.user_set.get(id=user_id) + # Remove group from user + user.groups.remove(group) + messages.success(request, "Removed user %s from group %s" % (user, group)) + except ObjectDoesNotExist: + messages.warning(request, "User does not exist in that group") + + except ObjectDoesNotExist: + messages.warning(request, "Group does not exist") + + return redirect('auth_group_membership_list', group_id) + + @login_required @permission_required('auth.group_management') def group_accept_request(request, group_request_id): diff --git a/stock/templates/registered/groupmanagement.html b/stock/templates/registered/groupmanagement.html index 9f48722d..7eeec15f 100644 --- a/stock/templates/registered/groupmanagement.html +++ b/stock/templates/registered/groupmanagement.html @@ -9,7 +9,7 @@ {% block content %}
- + {% include 'registered/groupmanagementmenu.html' with page="auth_group_management" %}