mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-13 22:40:16 +02:00
Add open/hidden group membership display and remove
This commit is contained in:
parent
f0a3df5659
commit
25dadf81f6
@ -192,6 +192,12 @@ urlpatterns += i18n_patterns(
|
|||||||
url(_(r'^groups/'), groupmanagement.views.groups_view, name='auth_groups'),
|
url(_(r'^groups/'), groupmanagement.views.groups_view, name='auth_groups'),
|
||||||
url(_(r'^group/management/'), groupmanagement.views.group_management,
|
url(_(r'^group/management/'), groupmanagement.views.group_management,
|
||||||
name='auth_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,
|
url(_(r'^group/request_add/(\w+)'), groupmanagement.views.group_request_add,
|
||||||
name='auth_group_request_add'),
|
name='auth_group_request_add'),
|
||||||
url(_(r'^group/request/accept/(\w+)'), groupmanagement.views.group_accept_request,
|
url(_(r'^group/request/accept/(\w+)'), groupmanagement.views.group_accept_request,
|
||||||
|
@ -13,6 +13,10 @@ from groupmanagement.models import OpenGroup
|
|||||||
from authentication.models import AuthServicesInfo
|
from authentication.models import AuthServicesInfo
|
||||||
from eveonline.managers import EveManager
|
from eveonline.managers import EveManager
|
||||||
from django.utils.translation import ugettext_lazy as _
|
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
|
import logging
|
||||||
|
|
||||||
@ -39,6 +43,73 @@ def group_management(request):
|
|||||||
return render(request, 'registered/groupmanagement.html', context=render_items)
|
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
|
@login_required
|
||||||
@permission_required('auth.group_management')
|
@permission_required('auth.group_management')
|
||||||
def group_accept_request(request, group_request_id):
|
def group_accept_request(request, group_request_id):
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<h3 class="page-header text-center">{% trans "Group Management" %}</h3>
|
{% include 'registered/groupmanagementmenu.html' with page="auth_group_management" %}
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs">
|
||||||
<li class="active"><a data-toggle="tab" href="#add">{% trans "Group Add Requests" %}</a></li>
|
<li class="active"><a data-toggle="tab" href="#add">{% trans "Group Add Requests" %}</a></li>
|
||||||
<li><a data-toggle="tab" href="#leave">{% trans "Group Leave Requests" %}</a></li>
|
<li><a data-toggle="tab" href="#leave">{% trans "Group Leave Requests" %}</a></li>
|
||||||
|
26
stock/templates/registered/groupmanagementmenu.html
Normal file
26
stock/templates/registered/groupmanagementmenu.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{% load staticfiles %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
<nav class="navbar navbar-default">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
|
||||||
|
<span class="sr-only">{% trans "Toggle navigation" %}</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a class="navbar-brand" href="#">Group Management</a>
|
||||||
|
</div>
|
||||||
|
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
<li {% if page == 'auth_group_management' %}class="active"{% endif %}>
|
||||||
|
<a href="{% url 'auth_group_management' %}">{% trans "Group Requests" %}</a>
|
||||||
|
</li>
|
||||||
|
<li {% if page == 'auth_group_membership' %}class="active"{% endif %}>
|
||||||
|
<a href="{% url 'auth_group_membership' %}">{% trans "Group Membership" %}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
44
stock/templates/registered/groupmembers.html
Normal file
44
stock/templates/registered/groupmembers.html
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{% extends "public/base.html" %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block title %}Alliance Auth{% endblock %}
|
||||||
|
|
||||||
|
{% block page_title %}{% trans "Group Members" %}{% endblock page_title %}
|
||||||
|
{% block extra_css %}{% endblock extra_css %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{% include 'registered/groupmanagementmenu.html' with page="auth_group_membership" %}
|
||||||
|
<h3>{{ group.name }} {% trans 'Members' %}</h3>
|
||||||
|
<div id="list" class="">
|
||||||
|
{% if group.user_set %}
|
||||||
|
<table class="table">
|
||||||
|
<tr>
|
||||||
|
<th class="text-center">{% trans "User" %}</th>
|
||||||
|
<th class="text-center">{% trans "Character" %}</th>
|
||||||
|
<th class="text-center">{% trans "Corp" %}</th>
|
||||||
|
<th class="text-center">{% trans "Alliance" %}</th>
|
||||||
|
<th class="text-center">{% trans "Action" %}</th>
|
||||||
|
</tr>
|
||||||
|
{% for member in members %}
|
||||||
|
<tr>
|
||||||
|
<td class="text-center">{{ member.user.username }}</td>
|
||||||
|
<td class="text-center">{{ member.main_char.character_name }}</td>
|
||||||
|
<td class="text-center">{{ member.main_char.corporation_name }}</td>
|
||||||
|
<td class="text-center">{{ member.main_char.alliance_name }}</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<a href="{% url 'auth_group_membership_remove' group.id member.user.id %}" class="btn btn-danger"
|
||||||
|
title="{% trans "Remove from group" %}">
|
||||||
|
<i class="glyphicon glyphicon-remove"></i>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
<div class="alert alert-warning text-center">No group members to list.</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
54
stock/templates/registered/groupmembership.html
Normal file
54
stock/templates/registered/groupmembership.html
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
{% extends "public/base.html" %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block title %}Alliance Auth{% endblock %}
|
||||||
|
|
||||||
|
{% block page_title %}{% trans "Groups Membership" %}{% endblock page_title %}
|
||||||
|
{% block extra_css %}{% endblock extra_css %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{% include 'registered/groupmanagementmenu.html' with page="auth_group_membership" %}
|
||||||
|
<div>
|
||||||
|
{% if groups %}
|
||||||
|
<h3>Groups</h3>
|
||||||
|
<table class="table">
|
||||||
|
<tr>
|
||||||
|
<th class="text-center">{% trans "Name" %}</th>
|
||||||
|
<th class="text-center">{% trans "Description" %}</th>
|
||||||
|
<th class="text-center">{% trans "Status" %}</th>
|
||||||
|
<th class="text-center">{% trans "Member Count" %}</th>
|
||||||
|
<th class="text-center">{% trans "Action" %}</th>
|
||||||
|
</tr>
|
||||||
|
{% for group in groups %}
|
||||||
|
<tr>
|
||||||
|
<td class="text-center">{{ group.group.name }}</td>
|
||||||
|
<td class="text-center">{{ group.group.groupdescription.description }}</td>
|
||||||
|
<td class="text-center">
|
||||||
|
{% if group.group.hiddengroup %}
|
||||||
|
<span class="label label-info">{% trans "Hidden" %}</span>
|
||||||
|
{% elif group.group.opengroup %}
|
||||||
|
<span class="label label-success">{% trans "Open" %}</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="label label-default">{% trans "Other" %}</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="text-center">
|
||||||
|
{{ group.num_members }}
|
||||||
|
</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<a href="{% url 'auth_group_membership_list' group.group.id %}" class="btn btn-primary"
|
||||||
|
title="{% trans "View Members" %}">
|
||||||
|
<i class="glyphicon glyphicon-eye-open"></i>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
<div class="alert alert-warning text-center">No groups to list.</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
Loading…
x
Reference in New Issue
Block a user