mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-14 23:10:15 +02:00
Added search functionality to member list.
This commit is contained in:
parent
cc3d176533
commit
030a0e9a8c
@ -164,7 +164,9 @@ urlpatterns = patterns('',
|
|||||||
name="auth_srp_request_update_amount_view"),
|
name="auth_srp_request_update_amount_view"),
|
||||||
|
|
||||||
#corputils
|
#corputils
|
||||||
url(r'^corp_utils/$', 'corputils.views.corp_member_view', name='auth_corp_member_view'),
|
url(r'^corputils/$', 'corputils.views.corp_member_view', name='auth_corp_member_view'),
|
||||||
|
url(r'corputils_search/', 'corputils.views.corputils_search',
|
||||||
|
name="auth_corputils_search"),
|
||||||
|
|
||||||
# FLEET FITTINGS
|
# FLEET FITTINGS
|
||||||
url(r'^fits/$', 'services.views.fleet_fits', name='auth_fleet_fits'),
|
url(r'^fits/$', 'services.views.fleet_fits', name='auth_fleet_fits'),
|
||||||
|
5
corputils/forms.py
Normal file
5
corputils/forms.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from django import forms
|
||||||
|
|
||||||
|
|
||||||
|
class CorputilsSearchForm(forms.Form):
|
||||||
|
search_string = forms.CharField(max_length=254, required=True, label="Search String")
|
@ -3,12 +3,16 @@ from django.shortcuts import render_to_response
|
|||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.decorators import permission_required
|
from django.contrib.auth.decorators import permission_required
|
||||||
|
from django.shortcuts import HttpResponseRedirect
|
||||||
|
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
from authentication.managers import AuthServicesInfoManager
|
from authentication.managers import AuthServicesInfoManager
|
||||||
from services.managers.eve_api_manager import EveApiManager
|
from services.managers.eve_api_manager import EveApiManager
|
||||||
from eveonline.models import EveCorporationInfo
|
from eveonline.models import EveCorporationInfo
|
||||||
from eveonline.models import EveCharacter
|
from eveonline.models import EveCharacter
|
||||||
from authentication.models import AuthServicesInfo
|
from authentication.models import AuthServicesInfo
|
||||||
|
from forms import CorputilsSearchForm
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -30,7 +34,7 @@ def corp_member_view(request):
|
|||||||
member_list = EveApiManager.get_corp_membertracking()
|
member_list = EveApiManager.get_corp_membertracking()
|
||||||
characters_with_api = {}
|
characters_with_api = {}
|
||||||
characters_without_api = {}
|
characters_without_api = {}
|
||||||
for char_id, member_data in member_list.iteritems():
|
for char_id, member_data in member_list.items():
|
||||||
try:
|
try:
|
||||||
char = EveCharacter.objects.get(character_id=char_id)
|
char = EveCharacter.objects.get(character_id=char_id)
|
||||||
user = char.user
|
user = char.user
|
||||||
@ -43,10 +47,60 @@ def corp_member_view(request):
|
|||||||
|
|
||||||
context = {"corp": corp,
|
context = {"corp": corp,
|
||||||
"characters_with_api": sorted(characters_with_api.items()),
|
"characters_with_api": sorted(characters_with_api.items()),
|
||||||
"characters_without_api": sorted(characters_without_api.items())}
|
"characters_without_api": sorted(characters_without_api.items()),
|
||||||
|
"search_form": CorputilsSearchForm()}
|
||||||
|
|
||||||
return render_to_response('registered/corputils.html',context, context_instance=RequestContext(request) )
|
return render_to_response('registered/corputils.html',context, context_instance=RequestContext(request) )
|
||||||
else:
|
else:
|
||||||
logger.error("Not running in corporation mode. Cannot provide corp member tracking data." % (request.user, auth_info.main_char_id))
|
logger.error("Not running in corporation mode. Cannot provide corp member tracking data." % (request.user, auth_info.main_char_id))
|
||||||
return render_to_response('registered/corputils.html', None, context_instance=RequestContext(request))
|
return render_to_response('registered/corputils.html', None, context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@permission_required('auth.corp_stats')
|
||||||
|
def corputils_search(request):
|
||||||
|
logger.debug("corputils_search called by user %s" % request.user)
|
||||||
|
if request.method == 'POST':
|
||||||
|
form = CorputilsSearchForm(request.POST)
|
||||||
|
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
||||||
|
if form.is_valid():
|
||||||
|
# Really dumb search and only checks character name
|
||||||
|
# This can be improved but it does the job for now
|
||||||
|
searchstring = form.cleaned_data['search_string']
|
||||||
|
logger.debug("Searching for player with character name %s for user %s" % (searchstring, request.user))
|
||||||
|
|
||||||
|
member_list = EveApiManager.get_corp_membertracking()
|
||||||
|
|
||||||
|
Member = namedtuple('Member', ['name', 'main', 'api_registered'])
|
||||||
|
|
||||||
|
members = []
|
||||||
|
for memberid, member_data in member_list.items():
|
||||||
|
if searchstring.lower() in member_data["name"].lower():
|
||||||
|
try:
|
||||||
|
char = EveCharacter.objects.get(character_name=member_data["name"])
|
||||||
|
user = char.user
|
||||||
|
mainid = int(AuthServicesInfoManager.get_auth_service_info(user=user).main_char_id)
|
||||||
|
mainname = EveCharacter.objects.get(character_id=mainid).character_name
|
||||||
|
api_registered = True
|
||||||
|
except EveCharacter.DoesNotExist:
|
||||||
|
api_registered = False
|
||||||
|
mainname = ""
|
||||||
|
members.append(Member(name=member_data["name"], main=mainname, api_registered=api_registered))
|
||||||
|
|
||||||
|
|
||||||
|
logger.info("Found %s members for user %s matching search string %s" % (len(members), request.user, searchstring))
|
||||||
|
|
||||||
|
context = {'members': members, 'search_form': CorputilsSearchForm()}
|
||||||
|
|
||||||
|
return render_to_response('registered/corputilssearchview.html',
|
||||||
|
context, context_instance=RequestContext(request))
|
||||||
|
else:
|
||||||
|
logger.debug("Form invalid - returning for user %s to retry." % request.user)
|
||||||
|
context = {'applications': None, 'search_form': form}
|
||||||
|
return render_to_response('registered/corputilssearchview.html',
|
||||||
|
context, context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.debug("Returning empty search form for user %s" % request.user)
|
||||||
|
return HttpResponseRedirect("/corputils/")
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@
|
|||||||
</li>
|
</li>
|
||||||
{% if IS_CORP %}
|
{% if IS_CORP %}
|
||||||
<li>
|
<li>
|
||||||
<a {% ifequal request.path "/corp_utils/" %} class="active" {% endifequal %}
|
<a {% ifequal request.path "/corputils/" %} class="active" {% endifequal %}
|
||||||
href="{% url 'auth_corp_member_view' %}"><i
|
href="{% url 'auth_corp_member_view' %}"><i
|
||||||
class="fa fa-chain fa-fw grayiconecolor"></i> Member Tracking</a>
|
class="fa fa-chain fa-fw grayiconecolor"></i> Member Tracking</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
{% extends "public/base.html" %}
|
{% extends "public/base.html" %}
|
||||||
{% block title %}Alliance Auth{% endblock %}
|
{% load bootstrap %}
|
||||||
{% block page_title %}Corporation Stats{% endblock page_title %}
|
|
||||||
{% load corputils_extras %}
|
{% load corputils_extras %}
|
||||||
|
|
||||||
|
{% block title %}Alliance Auth{% endblock %}
|
||||||
|
{% block page_title %}Corporation Member Tracking{% endblock page_title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<h1 class="page-header text-center">Corporation Member Data</h1>
|
<h1 class="page-header text-center">Corporation Member Data</h1>
|
||||||
{% if perms.auth.member %}
|
{% if perms.auth.corp_stats %}
|
||||||
<div class="col-lg-12 container" id="example">
|
<div class="col-lg-12 container" id="example">
|
||||||
{% if corp %}
|
{% if corp %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -32,6 +34,13 @@
|
|||||||
|
|
||||||
<p>Unregistered characters: {{characters_without_api|length}}</p>
|
<p>Unregistered characters: {{characters_without_api|length}}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="text-right">
|
||||||
|
<!-- Button trigger modal -->
|
||||||
|
<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
|
||||||
|
Search Members
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -93,4 +102,31 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if perms.auth.corp_stats %}
|
||||||
|
<!-- Modal -->
|
||||||
|
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
|
||||||
|
aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="myModalLabel">Member Search</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-signin" role="form"
|
||||||
|
action={% url 'auth_corputils_search' %} method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ search_form|bootstrap }}
|
||||||
|
<br/>
|
||||||
|
<button class="btn btn-lg btn-primary btn-block" type="submit">Search</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
{% endblock content %}
|
{% endblock content %}
|
71
stock/templates/registered/corputilssearchview.html
Normal file
71
stock/templates/registered/corputilssearchview.html
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
{% extends "public/base.html" %}
|
||||||
|
{% load bootstrap %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% load corputils_extras %}
|
||||||
|
|
||||||
|
{% block title %}Alliance Auth{% endblock %}
|
||||||
|
|
||||||
|
{% block page_title %}Corporation Member Tracking{% endblock page_title %}
|
||||||
|
{% block extra_css %}{% endblock extra_css %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{% if perms.auth.corp_stats %}
|
||||||
|
<h1 class="page-header text-center">Member Search Results
|
||||||
|
<div class="text-right">
|
||||||
|
<!-- Button trigger modal -->
|
||||||
|
<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
|
||||||
|
Search Members
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</h1>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<tr>
|
||||||
|
<th class="text-center">Character</th>
|
||||||
|
<th class="text-center">Main Character</th>
|
||||||
|
</tr>
|
||||||
|
{% for member in members %}
|
||||||
|
<tr {% if not member.api_registered%} bgcolor="#DD5500" {% endif %} >
|
||||||
|
<td class="text-center">{{ member.name }}</td>
|
||||||
|
<td class="text-center">
|
||||||
|
{% if member.api_registered%}
|
||||||
|
{{ member.main }}
|
||||||
|
{% else %}
|
||||||
|
No API registered!
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if perms.auth.corp_stats %}
|
||||||
|
<!-- Modal -->
|
||||||
|
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
|
||||||
|
aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="myModalLabel">Member Search</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-signin" role="form"
|
||||||
|
action={% url 'auth_corputils_search' %} method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ search_form|bootstrap }}
|
||||||
|
<br/>
|
||||||
|
<button class="btn btn-lg btn-primary btn-block" type="submit">Search</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock content %}
|
Loading…
x
Reference in New Issue
Block a user