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"), 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
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.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/")

View File

@ -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>

View File

@ -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">&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 %} {% 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 %}