Improve image tags to also work with eveonline objects, use new tags in group managenet, optimer, timerboard

This commit is contained in:
Erik Kalkoken
2020-02-05 04:31:13 +00:00
committed by colcrunch
parent 337c4d9ce5
commit fcb66a11a3
18 changed files with 1227 additions and 151 deletions

View File

@@ -8,43 +8,47 @@
<div class="col-lg-12">
<br>
{% include 'groupmanagement/menu.html' %}
<div>
<h3>{{ group }} Audit Log</h3>
<p> All times displayed are EVE/UTC.</p>
{% if entries %}
<div class="table-responsive">
<table class="table table-striped" id="log-entries">
<thead>
<th class="text-center" scope="col">{% trans "Date/Time" %}</th>
<th class="text-center" scope="col">{% trans "Requestor" %}</th>
<th class="text-center" scope="col">{% trans "Main Character" %}</th>
<th class="text-center" scope="col">{% trans "Group" %}</th>
<th class="text-center" scope="col">{% trans "Type" %}</th>
<th class="text-center" scope="col">{% trans "Action" %}</th>
<th class="text-center" scope="col">{% trans "Actor" %}</th>
</thead>
<tbody>
{% for entry in entries %}
<tr>
<td class="text-center">{{ entry.date }}</td>
<td class="text-center">{{ entry.requestor }}</td>
<td class="text-center">{{ entry.req_char }}</td>
<td class="text-center">{{ entry.group }}</td>
<td class="text-center">{{ entry.type_to_str }}</td>
{% if entry.request_type is None %}
<td class="text-center"> Removed</td>
{% else %}
<td class="text-center">{{ entry.action_to_str }}</td>
{% endif %}
<td class="text-center">{{ entry.request_actor }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="alert alert-warning text-center">{% trans "No entries found for this group." %}</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
{{ group }} - {% trans 'Audit Log' %}
</div>
<div class="panel-body">
<p> All times displayed are EVE/UTC.</p>
{% if entries %}
<div class="table-responsive">
<table class="table table-striped" id="log-entries">
<thead>
<th class="text-center" scope="col">{% trans "Date/Time" %}</th>
<th class="text-center" scope="col">{% trans "Requestor" %}</th>
<th class="text-center" scope="col">{% trans "Main Character" %}</th>
<th class="text-center" scope="col">{% trans "Group" %}</th>
<th class="text-center" scope="col">{% trans "Type" %}</th>
<th class="text-center" scope="col">{% trans "Action" %}</th>
<th class="text-center" scope="col">{% trans "Actor" %}</th>
</thead>
<tbody>
{% for entry in entries %}
<tr>
<td class="text-center">{{ entry.date }}</td>
<td class="text-center">{{ entry.requestor }}</td>
<td class="text-center">{{ entry.req_char }}</td>
<td class="text-center">{{ entry.group }}</td>
<td class="text-center">{{ entry.type_to_str }}</td>
{% if entry.request_type is None %}
<td class="text-center"> Removed</td>
{% else %}
<td class="text-center">{{ entry.action_to_str }}</td>
{% endif %}
<td class="text-center">{{ entry.request_actor }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="alert alert-warning text-center">{% trans "No entries found for this group." %}</div>
{% endif %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -1,6 +1,7 @@
{% extends "allianceauth/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% load evelinks %}
{% block page_title %}{% trans "Group Members" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
@@ -9,35 +10,62 @@
<div class="col-lg-12">
<br>
{% include 'groupmanagement/menu.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 'groupmanagement: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">{% trans "No group members to list." %}</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
{{ group.name }} - {% trans 'Members' %}
</div>
<div class="panel-body">
<div id="list" class="">
{% if group.user_set %}
<table class="table">
<tr>
<th class="text-center">{% trans "Leader" %}</th>
<th class="text-center">{% trans "Portrait" %}</th>
<th class="text-center">{% trans "Character" %}</th>
<th class="text-center">{% trans "Corporation" %}</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">
{% if member.is_leader %}
<i class="fa fa-star"></i>
{% endif %}
</td>
<td class="text-center">
<img src="{{ member.main_char|character_portrait_url:32 }}" class="img-circle">
</td>
<td class="text-center">
<a href="{{ member.main_char|evewho_character_url }}" target="_blank">
{{ member.main_char.character_name }}
</a>
</td>
<td class="text-center">
<a href="{{ member.main_char|dotlan_corporation_url }}" target="_blank">
{{ member.main_char.corporation_name }}
</a>
</td>
<td class="text-center">
<a href="{{ member.main_char|dotlan_alliance_url }}" target="_blank">
{{ member.main_char.alliance_name|default_if_none:"" }}
</a>
</td>
<td class="text-center">
<a href="{% url 'groupmanagement: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">{% trans "No group members to list." %}</div>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@@ -9,48 +9,52 @@
<div class="col-lg-12">
<br>
{% include 'groupmanagement/menu.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 'groupmanagement:membership_list' group.id %}" class="btn btn-primary"
title="{% trans "View Members" %}">
<i class="glyphicon glyphicon-eye-open"></i>
</a>
<a href="{% url "groupmanagement:audit_log" group.id %}" class="btn btn-info" title="{% trans "Audit Members" %}">
<i class="glyphicon glyphicon-list-alt"></i>
</a>
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="alert alert-warning text-center">{% trans "No groups to list." %}</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
Groups
</div>
<div class="panel-body">
{% if groups %}
<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 'groupmanagement:membership_list' group.id %}" class="btn btn-primary"
title="{% trans "View Members" %}">
<i class="glyphicon glyphicon-eye-open"></i>
</a>
<a href="{% url "groupmanagement:audit_log" group.id %}" class="btn btn-info" title="{% trans "Audit Members" %}">
<i class="glyphicon glyphicon-list-alt"></i>
</a>
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="alert alert-warning text-center">{% trans "No groups to list." %}</div>
{% endif %}
</div>
</div>
</div>
{% endblock content %}

View File

@@ -1,33 +1,65 @@
{% extends "allianceauth/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% load evelinks %}
{% block page_title %}{% trans "Groups Management" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block extra_css %}
<style>
.nav-tabs>li.active>a {
background-color: #ECF0F1 !important;
color: #2C3E50;
}
</style>
{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<br>
{% include 'groupmanagement/menu.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>
</ul>
<div class="tab-content">
<div id="add" class="tab-pane fade in active panel panel-default">
<div class="panel-body">
{% if acceptrequests %}
<table class="table">
<tr>
<th class="text-center">{% trans "RequestID" %}</th>
<th class="text-center">{% trans "CharacterName" %}</th>
<th class="text-center">{% trans "GroupName" %}</th>
<th class="text-center">{% trans "Action" %}</th>
<th class="text-center">{% trans "#" %}</th>
<th class="text-center">{% trans "Portrait" %}</th>
<th class="text-center">{% trans "Character" %}</th>
<th class="text-center">{% trans "Corporation" %}</th>
<th class="text-center">{% trans "Alliance" %}</th>
<th class="text-center">{% trans "Group" %}</th>
<th class="text-center"></th>
</tr>
{% for acceptrequest in acceptrequests %}
<tr>
<td class="text-center">{{ acceptrequest.id }}</td>
<td class="text-center">{{ acceptrequest.main_char.character_name }}</td>
<td class="text-center">
<img src="{{ acceptrequest.main_char|character_portrait_url:32 }}" class="img-circle">
</td>
<td class="text-center">
<a href="{{ acceptrequest.main_char|evewho_character_url }}" target="_blank">
{{ acceptrequest.main_char.character_name }}
</a>
</td>
<td class="text-center">
<a href="{{ acceptrequest.main_char|dotlan_corporation_url }}" target="_blank">
{{ acceptrequest.main_char.corporation_name }}
</a>
</td>
<td class="text-center">
<a href="{{ acceptrequest.main_char|dotlan_alliance_url }}" target="_blank">
{{ acceptrequest.main_char.alliance_name|default_if_none:"" }}
</a>
</td>
<td class="text-center">{{ acceptrequest.group.name }}</td>
<td class="text-center">
<a href="{% url 'groupmanagement:accept_request' acceptrequest.id %}" class="btn btn-success">
@@ -45,20 +77,41 @@
{% endif %}
</div>
</div>
<div id="leave" class="tab-pane fade panel panel-default">
<div class="panel-body">
{% if leaverequests %}
<table class="table">
<tr>
<th class="text-center">{% trans "RequestID" %}</th>
<th class="text-center">{% trans "CharacterName" %}</th>
<th class="text-center">{% trans "GroupName" %}</th>
<th class="text-center">{% trans "Action" %}</th>
<th class="text-center">{% trans "#" %}</th>
<th class="text-center">{% trans "Portrait" %}</th>
<th class="text-center">{% trans "Character" %}</th>
<th class="text-center">{% trans "Corporation" %}</th>
<th class="text-center">{% trans "Alliance" %}</th>
<th class="text-center">{% trans "Group" %}</th>
<th class="text-center"></th>
</tr>
{% for leaverequest in leaverequests %}
<tr>
<td class="text-center">{{ leaverequest.id }}</td>
<td class="text-center">{{ leaverequest.main_char.character_name }}</td>
<td class="text-center">
<img src="{{ leaverequest.main_char|character_portrait_url:32 }}" class="img-circle">
</td>
<td class="text-center">
<a href="{{ leaverequest.main_char|evewho_character_url }}" target="_blank">
{{ leaverequest.main_char.character_name }}
</a>
</td>
<td class="text-center">
<a href="{{ leaverequest.main_char|dotlan_corporation_url }}" target="_blank">
{{ leaverequest.main_char.corporation_name }}
</a>
</td>
<td class="text-center">
<a href="{{ leaverequest.main_char|dotlan_alliance_url }}" target="_blank">
{{ leaverequest.main_char.alliance_name|default_if_none:"" }}
</a>
</td>
<td class="text-center">{{ leaverequest.group.name }}</td>
<td class="text-center">
<a href="{% url 'groupmanagement:leave_accept_request' leaverequest.id %}" class="btn btn-success">
@@ -76,6 +129,7 @@
{% endif %}
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@@ -3,25 +3,28 @@
{% 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="#">{% trans "Group Management" %}</a>
<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="">{% trans "Group Management" %}</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="{% navactive request 'groupmanagement:management' %}">
<a href="{% url 'groupmanagement:management' %}">{% trans "Group Requests" %}</a>
</li>
<li class="{% renavactive request '^/group/membership/' %}">
<a href="{% url 'groupmanagement:membership' %}">{% trans "Group Membership" %}</a>
</li>
</ul>
</div>
</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 'groupmanagement:management' %}">{% trans "Group Requests" %}</a>
</li>
<li class="{% navactive request 'auth_group_membership auth_group_membership_list' %}">
<a href="{% url 'groupmanagement:membership' %}">{% trans "Group Membership" %}</a>
</li>
</ul>
</div>
</div>
</nav>

View File

@@ -96,32 +96,47 @@ def group_membership_audit(request, group_id):
@login_required
@user_passes_test(GroupManager.can_manage_groups)
def group_membership_list(request, group_id):
logger.debug("group_membership_list called by user %s for group id %s" % (request.user, group_id))
logger.debug(
"group_membership_list called by user %s "
"for group id %s" % (request.user, group_id)
)
group = get_object_or_404(Group, id=group_id)
try:
# Check its a joinable group i.e. not corp or internal
# And the user has permission to manage it
if not GroupManager.check_internal_group(group) 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))
if (not GroupManager.check_internal_group(group)
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
except ObjectDoesNotExist:
raise Http404("Group does not exist")
group_leaders = group.authgroup.group_leaders.all()
members = list()
for member in group.user_set.select_related('profile').all().order_by('username'):
for member in \
group.user_set\
.all()\
.select_related('profile')\
.order_by('profile__main_character__character_name'):
members.append({
'user': member,
'main_char': member.profile.main_character
'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)
return render(
request, 'groupmanagement/groupmembers.html',
context=render_items
)
@login_required