mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-13 10:36:25 +01:00
Group system overhaul (#588)
* Add open/hidden group membership display and remove * Include requestable groups other than open * Prevent users requesting or leaving non-joinable groups I have not prevented users joining hidden groups however, as there may be some use cases where the direct link is provided for users to request access to the group. Also prevent users generating leave requests for groups they are not a member of. * Refactor Group extension models into a single OneToOne model Added group leader field * Add blankable fields * Switched to use navactive for menu highlighting * Consolidate member state checking for easier code reuse * Added support for group leaders to manage groups * Added info log when a user removes someone from a group * Add ordering to group member list
This commit is contained in:
@@ -153,7 +153,7 @@
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if perms.auth.group_management %}
|
||||
{% if can_manage_groups %}
|
||||
<li>
|
||||
<a class="{% navactive request 'auth_group_management' %}" href="{% url 'auth_group_management' %}">
|
||||
<i class="fa fa-lock fa-sitemap fa-fw grayiconecolor"></i>{% trans " Group Management" %}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
{% block content %}
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header text-center">{% trans "Group Management" %}</h3>
|
||||
{% include 'registered/groupmanagementmenu.html' %}
|
||||
<ul class="nav nav-tabs">
|
||||
<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>
|
||||
|
||||
27
stock/templates/registered/groupmanagementmenu.html
Normal file
27
stock/templates/registered/groupmanagementmenu.html
Normal file
@@ -0,0 +1,27 @@
|
||||
{% load staticfiles %}
|
||||
{% load i18n %}
|
||||
{% load navactive %}
|
||||
|
||||
<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 class="{% navactive request 'auth_group_management' %}">
|
||||
<a href="{% url 'auth_group_management' %}">{% trans "Group Requests" %}</a>
|
||||
</li>
|
||||
<li class="{% navactive request 'auth_group_membership auth_group_membership_list' %}">
|
||||
<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' %}
|
||||
<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' %}
|
||||
<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.name }}</td>
|
||||
<td class="text-center">{{ group.authgroup.description }}</td>
|
||||
<td class="text-center">
|
||||
{% if group.authgroup.hidden %}
|
||||
<span class="label label-info">{% trans "Hidden" %}</span>
|
||||
{% elif group.authgroup.open %}
|
||||
<span class="label label-success">{% trans "Open" %}</span>
|
||||
{% else %}
|
||||
<span class="label label-default">{% trans "Requestable" %}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{{ group.num_members }}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<a href="{% url 'auth_group_membership_list' 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 %}
|
||||
@@ -11,36 +11,36 @@
|
||||
<div class="col-lg-12">
|
||||
<h1 class="page-header text-center">{% trans "Available Groups" %}</h1>
|
||||
{% if STATE == MEMBER_STATE or user.is_superuser %}
|
||||
{% if pairs %}
|
||||
{% if groups %}
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th class="text-center">{% trans "GroupName" %}</th>
|
||||
<th class="text-center">{% trans "GroupDesc" %}</th>
|
||||
<th class="text-center">{% trans "Name" %}</th>
|
||||
<th class="text-center">{% trans "Description" %}</th>
|
||||
<th class="text-center">{% trans "Action" %}</th>
|
||||
</tr>
|
||||
|
||||
{% for pair in pairs %}
|
||||
{% for g in groups %}
|
||||
<tr>
|
||||
<td class="text-center">{{ pair.0.name }}</td>
|
||||
<td class="text-center">{{ pair.1.description }}</td>
|
||||
<td class="text-center">{{ g.group.name }}</td>
|
||||
<td class="text-center">{{ g.group.authgroup.description }}</td>
|
||||
<td class="text-center">
|
||||
{% if pair.0 in user.groups.all %}
|
||||
{% if pair.2 == "" %}
|
||||
<a href="{% url 'auth_group_request_leave' pair.0.id %}" class="btn btn-danger">
|
||||
{% if g.group in user.groups.all %}
|
||||
{% if not g.request %}
|
||||
<a href="{% url 'auth_group_request_leave' g.group.id %}" class="btn btn-danger">
|
||||
{% trans "Leave" %}
|
||||
</a>
|
||||
{% else %}
|
||||
<button type="button" class="btn btn-primary" disabled>
|
||||
{{ pair.2.status }}
|
||||
{{ g.request.status }}
|
||||
</button>
|
||||
{% endif %}
|
||||
{% elif pair.2 == "" %}
|
||||
<a href="{% url 'auth_group_request_add' pair.0.id %}" class="btn btn-success">
|
||||
{% elif not g.request %}
|
||||
<a href="{% url 'auth_group_request_add' g.group.id %}" class="btn btn-success">
|
||||
{% trans "Request" %}
|
||||
</a>
|
||||
{% else %}
|
||||
<button type="button" class="btn btn-primary" disabled>
|
||||
{{ pair.2.status }}
|
||||
{{ g.request.status }}
|
||||
</button>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
Reference in New Issue
Block a user