Added search functionality to member list.

This commit is contained in:
Ydmir 2016-01-15 22:54:53 +01:00
parent cc3d176533
commit 030a0e9a8c
6 changed files with 175 additions and 7 deletions

View File

@ -164,7 +164,9 @@ urlpatterns = patterns('',
name="auth_srp_request_update_amount_view"),
#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
url(r'^fits/$', 'services.views.fleet_fits', name='auth_fleet_fits'),

5
corputils/forms.py Normal file
View 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")

View File

@ -3,12 +3,16 @@ from django.shortcuts import render_to_response
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import permission_required
from django.shortcuts import HttpResponseRedirect
from collections import namedtuple
from authentication.managers import AuthServicesInfoManager
from services.managers.eve_api_manager import EveApiManager
from eveonline.models import EveCorporationInfo
from eveonline.models import EveCharacter
from authentication.models import AuthServicesInfo
from forms import CorputilsSearchForm
import logging
@ -30,7 +34,7 @@ def corp_member_view(request):
member_list = EveApiManager.get_corp_membertracking()
characters_with_api = {}
characters_without_api = {}
for char_id, member_data in member_list.iteritems():
for char_id, member_data in member_list.items():
try:
char = EveCharacter.objects.get(character_id=char_id)
user = char.user
@ -43,10 +47,60 @@ def corp_member_view(request):
context = {"corp": corp,
"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) )
else:
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))
@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/")

View File

@ -123,7 +123,7 @@
</li>
{% if IS_CORP %}
<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
class="fa fa-chain fa-fw grayiconecolor"></i> Member Tracking</a>
</li>

View File

@ -1,13 +1,15 @@
{% extends "public/base.html" %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}Corporation Stats{% endblock page_title %}
{% load bootstrap %}
{% load corputils_extras %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}Corporation Member Tracking{% endblock page_title %}
{% block content %}
<div class="col-lg-12">
<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">
{% if corp %}
<div class="row">
@ -32,6 +34,13 @@
<p>Unregistered characters: {{characters_without_api|length}}</p>
</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>
@ -93,4 +102,31 @@
{% endif %}
{% 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">&times;</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 %}

View 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">&times;</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 %}