allianceauth/corputils/managers.py
2016-12-13 16:11:06 -05:00

44 lines
1.5 KiB
Python

from django.db import models
from authentication.models import AuthServicesInfo
from eveonline.models import EveCharacter
class CorpStatsQuerySet(models.QuerySet):
def visible_to(self, user):
# superusers get all visible
if user.is_superuser:
return self
auth = AuthServicesInfo.objects.get_or_create(user=user)[0]
try:
char = EveCharacter.objects.get(character_id=auth.main_char_id)
# build all accepted queries
queries = []
if user.has_perm('corpstats.corp_apis'):
queries.append(models.Q(corp__corporation_id=char.corporation_id))
if user.has_perm('corpstats.alliance_apis'):
queries.append(models.Q(corp__alliance_id=char.alliance_id))
if user.has_perm('corpstats.blue_apis'):
queries.append(models.Q(corp__is_blue=True))
# filter based on queries
if queries:
query = queries.pop()
for q in queries:
query |= q
return self.filter(query)
else:
# not allowed to see any
return self.none()
except EveCharacter.DoesNotExist:
return self.none()
class CorpStatsManager(models.Manager):
def get_queryset(self):
return CorpStatsQuerySet(self.model, using=self._db)
def visible_to(self, user):
return self.get_queryset().visible_to(user)