Expanded functionality to full alliance support. The design may leave some things to wish for...

This commit is contained in:
Ydmir 2016-01-24 00:13:58 +01:00
parent 39a77829db
commit 25b89fdecb
8 changed files with 113 additions and 59 deletions

View File

@ -165,7 +165,8 @@ urlpatterns = patterns('',
#corputils
url(r'^corputils/$', 'corputils.views.corp_member_view', name='auth_corp_member_view'),
url(r'corputils_search/', 'corputils.views.corputils_search',
url(r'^corputils/(?P<corpid>[0-9]+)/$', 'corputils.views.corp_member_view', name='auth_corp_member_view'),
url(r'^corputils/search/', 'corputils.views.corputils_search',
name="auth_corputils_search"),
# FLEET FITTINGS

View File

@ -1,5 +1,15 @@
from django import forms
from django.conf import settings
from eveonline.models import EveCorporationInfo
from eveonline.models import EveAllianceInfo
class SelectCorpForm(forms.Form):
alliance = EveAllianceInfo.objects.get(alliance_id=settings.ALLIANCE_ID)
alliancecorps = EveCorporationInfo.objects.filter(alliance=alliance)
corpnamelist = [(int(corp.corporation_id), str(corp.corporation_name)) for corp in alliancecorps]
corpnamelist.sort(key=lambda tup: tup[1])
corpid = forms.ChoiceField(corpnamelist, required=True, label="Corporation")
class CorputilsSearchForm(forms.Form):
search_string = forms.CharField(max_length=254, required=True, label="Search String")

View File

@ -9,10 +9,13 @@ from collections import namedtuple
from authentication.managers import AuthServicesInfoManager
from services.managers.eve_api_manager import EveApiManager
from services.managers.evewho_manager import EveWhoManager
from eveonline.models import EveCorporationInfo
from eveonline.models import EveAllianceInfo
from eveonline.models import EveCharacter
from authentication.models import AuthServicesInfo
from forms import CorputilsSearchForm
from forms import SelectCorpForm
import logging
@ -22,18 +25,24 @@ logger = logging.getLogger(__name__)
# Because corp-api only exist for the executor corp, this function will only be available in corporation mode.
@login_required
@permission_required('auth.corputils')
def corp_member_view(request):
def corp_member_view(request, corpid = settings.CORP_ID):
logger.debug("corp_member_view called by user %s" % request.user)
# Get the corp the member is in
auth_info = AuthServicesInfo.objects.get(user=request.user)
logger.debug("Got user %s authservicesinfo model %s" % (request.user, auth_info))
if settings.IS_CORP:
corp = EveCorporationInfo.objects.get(corporation_id=settings.CORP_ID)
if request.method == 'POST':
form = SelectCorpForm(request.POST)
if form.is_valid():
return HttpResponseRedirect("/corputils/"+form.cleaned_data["corpid"])
else:
return HttpResponseRedirect("/corputils/")
corp = EveCorporationInfo.objects.get(corporation_id=corpid)
Player = namedtuple("Player", ["main", "maincorp", "altlist"])
member_list = EveApiManager.get_corp_membertracking()
if settings.IS_CORP:
member_list = EveApiManager.get_corp_membertracking(settings.CORP_API_ID, settings.CORP_API_VCODE)
else:
member_list = EveWhoManager.get_corporation_members(corpid)
characters_with_api = {}
characters_without_api = []
@ -58,15 +67,22 @@ def corp_member_view(request):
characters_without_api.append(member_data["name"])
if not settings.IS_CORP:
form = SelectCorpForm()
context = {"form": form,
"corp": corp,
"characters_with_api": sorted(characters_with_api.items()),
"characters_without_api": sorted(characters_without_api),
"search_form": CorputilsSearchForm()}
else:
logger.debug("corp_member_view running in corportation mode")
context = {"corp": corp,
"characters_with_api": sorted(characters_with_api.items()),
"characters_without_api": sorted(characters_without_api),
"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
@ -82,7 +98,7 @@ def corputils_search(request):
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_list = EveApiManager.get_corp_membertracking(settings.CORP_API_ID, settings.CORP_API_VCODE)
Member = namedtuple('Member', ['name', 'main', 'api_registered'])

View File

@ -5,6 +5,7 @@ evelink
dnspython
passlib
requests>=2.9.1
json
# Django Stuff #
django==1.6.5

View File

@ -195,12 +195,10 @@ class EveApiManager():
return {}
@staticmethod
def get_corp_membertracking():
if settings.IS_CORP:
if settings.CORP_API_ID and settings.CORP_API_VCODE:
def get_corp_membertracking(api, vcode):
try:
logger.debug("Getting corp membertracking with api id %s" % settings.CORP_API_ID)
api = evelink.api.API(api_key=(settings.CORP_API_ID, settings.CORP_API_VCODE))
api = evelink.api.API(api_key=(api, vcode))
corp = evelink.corp.Corp(api=api)
membertracking = corp.members()
results = membertracking.result
@ -208,10 +206,6 @@ class EveApiManager():
return results
except evelink.api.APIError as error:
logger.exception("Unhandled APIError occured.", exc_info=True)
else:
logger.error("No corp API key supplied in settings. Unable to get standings.")
else:
logger.error("Membertracking function only works in corporation mode.")
return {}

View File

@ -0,0 +1,19 @@
from django.conf import settings
import logging
import requests
import json
class EveWhoManager():
def __init__(self):
pass
@staticmethod
def get_corporation_members(corpid):
url = "http://evewho.com/api.php?type=corplist&id=%s" % corpid
jsondata = requests.get(url).content
data=json.loads(jsondata.decode())
return {row["character_id"]:{"name":row["name"]} for row in data["characters"]}

View File

@ -121,14 +121,14 @@
href="{% url 'auth_corp_stats' %}"><i
class="fa fa-share-alt fa-fw grayiconecolor"></i> Corporation Stats</a>
</li>
{% if IS_CORP %}
{% endif %}
{% if perms.auth.corputils %}
<li>
<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>
{% endif %}
{% endif %}
{% if perms.auth.group_management %}
<li>

View File

@ -1,5 +1,6 @@
{% extends "public/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}Corporation Member Tracking{% endblock page_title %}
@ -16,7 +17,6 @@
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">Corporation</div>
<div class="panel-body">
<div class="col-lg-5 col-sm-2"><img class=
"ra-avatar img-responsive" src=
@ -34,8 +34,21 @@
<p>Unregistered characters: {{characters_without_api|length}}</p>
</div>
<div class="text-right">
{% if form %}
<div class="container-fluid">
<div class="col-md-4 col-md-offset-4">
<div class="row">
<form class="form-signin" role="form" action="" method="POST">
{% csrf_token %}
{{ form|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Select corp</button>
</form>
</div>
</div>
</div>
{% endif %}
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
Search Members