mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-14 23:10:15 +02:00
Expanded functionality to full alliance support. The design may leave some things to wish for...
This commit is contained in:
parent
39a77829db
commit
25b89fdecb
@ -165,7 +165,8 @@ urlpatterns = patterns('',
|
|||||||
|
|
||||||
#corputils
|
#corputils
|
||||||
url(r'^corputils/$', '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',
|
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"),
|
name="auth_corputils_search"),
|
||||||
|
|
||||||
# FLEET FITTINGS
|
# FLEET FITTINGS
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
from django import forms
|
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):
|
class CorputilsSearchForm(forms.Form):
|
||||||
search_string = forms.CharField(max_length=254, required=True, label="Search String")
|
search_string = forms.CharField(max_length=254, required=True, label="Search String")
|
||||||
|
@ -9,10 +9,13 @@ 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 services.managers.evewho_manager import EveWhoManager
|
||||||
from eveonline.models import EveCorporationInfo
|
from eveonline.models import EveCorporationInfo
|
||||||
|
from eveonline.models import EveAllianceInfo
|
||||||
from eveonline.models import EveCharacter
|
from eveonline.models import EveCharacter
|
||||||
from authentication.models import AuthServicesInfo
|
from authentication.models import AuthServicesInfo
|
||||||
from forms import CorputilsSearchForm
|
from forms import CorputilsSearchForm
|
||||||
|
from forms import SelectCorpForm
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -22,51 +25,64 @@ logger = logging.getLogger(__name__)
|
|||||||
# Because corp-api only exist for the executor corp, this function will only be available in corporation mode.
|
# Because corp-api only exist for the executor corp, this function will only be available in corporation mode.
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('auth.corputils')
|
@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)
|
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)
|
if request.method == 'POST':
|
||||||
logger.debug("Got user %s authservicesinfo model %s" % (request.user, auth_info))
|
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"])
|
||||||
|
|
||||||
if settings.IS_CORP:
|
if settings.IS_CORP:
|
||||||
corp = EveCorporationInfo.objects.get(corporation_id=settings.CORP_ID)
|
member_list = EveApiManager.get_corp_membertracking(settings.CORP_API_ID, settings.CORP_API_VCODE)
|
||||||
|
else:
|
||||||
|
member_list = EveWhoManager.get_corporation_members(corpid)
|
||||||
|
|
||||||
Player = namedtuple("Player", ["main", "maincorp", "altlist"])
|
characters_with_api = {}
|
||||||
|
characters_without_api = []
|
||||||
|
|
||||||
member_list = EveApiManager.get_corp_membertracking()
|
for char_id, member_data in member_list.items():
|
||||||
characters_with_api = {}
|
try:
|
||||||
characters_without_api = []
|
char = EveCharacter.objects.get(character_id=char_id)
|
||||||
|
user = char.user
|
||||||
for char_id, member_data in member_list.items():
|
|
||||||
try:
|
try:
|
||||||
char = EveCharacter.objects.get(character_id=char_id)
|
mainid = int(AuthServicesInfoManager.get_auth_service_info(user=user).main_char_id)
|
||||||
user = char.user
|
mainchar = EveCharacter.objects.get(character_id=mainid)
|
||||||
try:
|
mainname = mainchar.character_name
|
||||||
mainid = int(AuthServicesInfoManager.get_auth_service_info(user=user).main_char_id)
|
maincorp = mainchar.corporation_name
|
||||||
mainchar = EveCharacter.objects.get(character_id=mainid)
|
except ValueError:
|
||||||
mainname = mainchar.character_name
|
mainname = "User: " + user.username
|
||||||
maincorp = mainchar.corporation_name
|
maincorp = None
|
||||||
except ValueError:
|
characters_with_api.setdefault(mainname, Player(main=mainname,
|
||||||
mainname = "User: " + user.username
|
maincorp=maincorp,
|
||||||
maincorp = None
|
altlist=[])
|
||||||
characters_with_api.setdefault(mainname, Player(main=mainname,
|
).altlist.append(char.character_name)
|
||||||
maincorp=maincorp,
|
|
||||||
altlist=[])
|
|
||||||
).altlist.append(char.character_name)
|
|
||||||
|
|
||||||
except EveCharacter.DoesNotExist:
|
except EveCharacter.DoesNotExist:
|
||||||
characters_without_api.append(member_data["name"])
|
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,
|
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),
|
"characters_without_api": sorted(characters_without_api),
|
||||||
"search_form": CorputilsSearchForm()}
|
"search_form": CorputilsSearchForm()}
|
||||||
|
|
||||||
return render_to_response('registered/corputils.html',context, context_instance=RequestContext(request) )
|
|
||||||
else:
|
return render_to_response('registered/corputils.html',context, context_instance=RequestContext(request) )
|
||||||
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
|
@login_required
|
||||||
@ -82,7 +98,7 @@ def corputils_search(request):
|
|||||||
searchstring = form.cleaned_data['search_string']
|
searchstring = form.cleaned_data['search_string']
|
||||||
logger.debug("Searching for player with character name %s for user %s" % (searchstring, request.user))
|
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'])
|
Member = namedtuple('Member', ['name', 'main', 'api_registered'])
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ evelink
|
|||||||
dnspython
|
dnspython
|
||||||
passlib
|
passlib
|
||||||
requests>=2.9.1
|
requests>=2.9.1
|
||||||
|
json
|
||||||
|
|
||||||
# Django Stuff #
|
# Django Stuff #
|
||||||
django==1.6.5
|
django==1.6.5
|
||||||
|
@ -195,23 +195,17 @@ class EveApiManager():
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_corp_membertracking():
|
def get_corp_membertracking(api, vcode):
|
||||||
if settings.IS_CORP:
|
try:
|
||||||
if settings.CORP_API_ID and settings.CORP_API_VCODE:
|
logger.debug("Getting corp membertracking with api id %s" % settings.CORP_API_ID)
|
||||||
try:
|
api = evelink.api.API(api_key=(api, vcode))
|
||||||
logger.debug("Getting corp membertracking with api id %s" % settings.CORP_API_ID)
|
corp = evelink.corp.Corp(api=api)
|
||||||
api = evelink.api.API(api_key=(settings.CORP_API_ID, settings.CORP_API_VCODE))
|
membertracking = corp.members()
|
||||||
corp = evelink.corp.Corp(api=api)
|
results = membertracking.result
|
||||||
membertracking = corp.members()
|
logger.debug("Got corp membertracking from settings: %s" % results)
|
||||||
results = membertracking.result
|
return results
|
||||||
logger.debug("Got corp membertracking from settings: %s" % results)
|
except evelink.api.APIError as error:
|
||||||
return results
|
logger.exception("Unhandled APIError occured.", exc_info=True)
|
||||||
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 {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
19
services/managers/evewho_manager.py
Normal file
19
services/managers/evewho_manager.py
Normal 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"]}
|
@ -121,13 +121,13 @@
|
|||||||
href="{% url 'auth_corp_stats' %}"><i
|
href="{% url 'auth_corp_stats' %}"><i
|
||||||
class="fa fa-share-alt fa-fw grayiconecolor"></i> Corporation Stats</a>
|
class="fa fa-share-alt fa-fw grayiconecolor"></i> Corporation Stats</a>
|
||||||
</li>
|
</li>
|
||||||
{% if IS_CORP %}
|
{% endif %}
|
||||||
<li>
|
{% if perms.auth.corputils %}
|
||||||
<a {% ifequal request.path "/corputils/" %} class="active" {% endifequal %}
|
<li>
|
||||||
href="{% url 'auth_corp_member_view' %}"><i
|
<a {% ifequal request.path "/corputils/" %} class="active" {% endifequal %}
|
||||||
class="fa fa-chain fa-fw grayiconecolor"></i> Member Tracking</a>
|
href="{% url 'auth_corp_member_view' %}"><i
|
||||||
</li>
|
class="fa fa-chain fa-fw grayiconecolor"></i> Member Tracking</a>
|
||||||
{% endif %}
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if perms.auth.group_management %}
|
{% if perms.auth.group_management %}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{% extends "public/base.html" %}
|
{% extends "public/base.html" %}
|
||||||
{% load bootstrap %}
|
{% load bootstrap %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
|
||||||
{% block title %}Alliance Auth{% endblock %}
|
{% block title %}Alliance Auth{% endblock %}
|
||||||
{% block page_title %}Corporation Member Tracking{% endblock page_title %}
|
{% block page_title %}Corporation Member Tracking{% endblock page_title %}
|
||||||
@ -16,7 +17,6 @@
|
|||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">Corporation</div>
|
<div class="panel-heading">Corporation</div>
|
||||||
|
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div class="col-lg-5 col-sm-2"><img class=
|
<div class="col-lg-5 col-sm-2"><img class=
|
||||||
"ra-avatar img-responsive" src=
|
"ra-avatar img-responsive" src=
|
||||||
@ -34,8 +34,21 @@
|
|||||||
|
|
||||||
<p>Unregistered characters: {{characters_without_api|length}}</p>
|
<p>Unregistered characters: {{characters_without_api|length}}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="text-right">
|
<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 trigger modal -->
|
||||||
<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
|
<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
|
||||||
Search Members
|
Search Members
|
||||||
|
Loading…
x
Reference in New Issue
Block a user