mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-05 14:46:20 +01:00
Compare commits
54 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a650f0730e | ||
|
|
63eb9edc9c | ||
|
|
d6e1eb9792 | ||
|
|
b459f96e6b | ||
|
|
bf32f2c1ef | ||
|
|
7ca67ebaae | ||
|
|
fa32f87a35 | ||
|
|
a630015451 | ||
|
|
bf43f59232 | ||
|
|
54910746e3 | ||
|
|
07ae68333d | ||
|
|
69e70a4c9b | ||
|
|
b55f11ee74 | ||
|
|
94ee3c0203 | ||
|
|
25cf329a50 | ||
|
|
b02827cb3f | ||
|
|
2bcc0570ad | ||
|
|
a3ea0c65a1 | ||
|
|
5e526da11c | ||
|
|
5c79265f90 | ||
|
|
eb0134e716 | ||
|
|
afde1f4729 | ||
|
|
5c6dda0eac | ||
|
|
af453bc772 | ||
|
|
e13674e886 | ||
|
|
e3e856b826 | ||
|
|
9d1cd23a8f | ||
|
|
148f7c116f | ||
|
|
33e7134d6f | ||
|
|
fb799551aa | ||
|
|
7b95051fe1 | ||
|
|
efb6a6db4f | ||
|
|
478aa1aa12 | ||
|
|
751e55ed6c | ||
|
|
9dad53f763 | ||
|
|
2d57064a7a | ||
|
|
833d12cf66 | ||
|
|
7b56caa4cb | ||
|
|
5752644122 | ||
|
|
cadc0cb534 | ||
|
|
dcdab5ae1f | ||
|
|
d64e896288 | ||
|
|
500d8ede32 | ||
|
|
f4c5c7f6db | ||
|
|
43e1be4032 | ||
|
|
702def2a4d | ||
|
|
a34baf4154 | ||
|
|
4de0774f15 | ||
|
|
83d2dfc7d9 | ||
|
|
c93afd2d68 | ||
|
|
b7bacd11af | ||
|
|
f26835fae0 | ||
|
|
4edb7cb678 | ||
|
|
2ce9ba997f |
32
README.md
32
README.md
@@ -1,15 +1,15 @@
|
||||
# Alliance Auth
|
||||
|
||||
[](https://pypi.org/project/allianceauth/)
|
||||
[](https://pypi.org/project/allianceauth/)
|
||||
[](https://pypi.org/project/allianceauth/)
|
||||
[](https://pypi.org/project/allianceauth/)
|
||||
[](https://gitlab.com/allianceauth/allianceauth/commits/master)
|
||||
[](https://pypi.org/project/allianceauth/)
|
||||
[](https://pypi.org/project/allianceauth/)
|
||||
[](https://pypi.org/project/allianceauth/)
|
||||
[](https://pypi.org/project/allianceauth/)
|
||||
[](https://gitlab.com/allianceauth/allianceauth/commits/master)
|
||||
[](https://allianceauth.readthedocs.io/?badge=latest)
|
||||
[](https://gitlab.com/allianceauth/allianceauth/commits/master)
|
||||
[](https://gitlab.com/allianceauth/allianceauth/commits/master)
|
||||
[](https://discord.gg/fjnHAmk)
|
||||
|
||||
An auth system for EVE Online to help in-game organizations manage online service access.
|
||||
A flexible authentication platform for EVE Online to help in-game organizations manage access to applications and services. AA provides both, a stable core, and a robust framework for community development and custom applications.
|
||||
|
||||
## Content
|
||||
|
||||
@@ -22,17 +22,17 @@ An auth system for EVE Online to help in-game organizations manage online servic
|
||||
|
||||
## Overview
|
||||
|
||||
Alliance Auth (AA) is a web site that helps Eve Online organizations efficiently manage access to applications and services.
|
||||
Alliance Auth (AA) is a platform that helps Eve Online organizations efficiently manage access to applications and services.
|
||||
|
||||
Main features:
|
||||
|
||||
- Automatically grants or revokes user access to external services (e.g. Discord, Mumble) and web apps (e.g. SRP requests) based on the user's current membership to [in-game organizations](https://allianceauth.readthedocs.io/en/latest/features/core/states/) and [groups](https://allianceauth.readthedocs.io/en/latest/features/core/groups/)
|
||||
- Automatically grants or revokes user access to external services (e.g.: Discord, Mumble) based on the user's current membership to [a variety of EVE Online affiliation](https://allianceauth.readthedocs.io/en/latest/features/core/states/) and [groups](https://allianceauth.readthedocs.io/en/latest/features/core/groups/)
|
||||
|
||||
- Provides a central web site where users can directly access web apps (e.g. SRP requests, Fleet Schedule) and manage their access to external services and groups.
|
||||
|
||||
- Includes a set of connectors (called ["services"](https://allianceauth.readthedocs.io/en/latest/features/services/)) for integrating access management with many popular external applications / services like Discord, Mumble, Teamspeak 3, SMF and others
|
||||
- Includes a set of connectors (called ["Services"](https://allianceauth.readthedocs.io/en/latest/features/services/)) for integrating access management with many popular external applications / services like Discord, Mumble, Teamspeak 3, SMF and others
|
||||
|
||||
- Includes a set of web [apps](https://allianceauth.readthedocs.io/en/latest/features/apps/) which add many useful functions, e.g.: fleet schedule, timer board, SRP request management, fleet activity tracker
|
||||
- Includes a set of web [Apps](https://allianceauth.readthedocs.io/en/latest/features/apps/) which add many useful functions, e.g.: fleet schedule, timer board, SRP request management, fleet activity tracker
|
||||
|
||||
- Can be easily extended with additional services and apps. Many are provided by the community and can be found here: [Community Creations](https://gitlab.com/allianceauth/community-creations)
|
||||
|
||||
@@ -42,9 +42,15 @@ For further details about AA - including an installation guide and a full list o
|
||||
|
||||
## Screenshot
|
||||
|
||||
Here is an example of the Alliance Auth web site with some plug-ins apps and services enabled:
|
||||
Here is an example of the Alliance Auth web site with a mixture of Services, Apps and Community Creations enabled:
|
||||
|
||||

|
||||
### Flatly Theme
|
||||
|
||||

|
||||
|
||||
### Darkly Theme
|
||||
|
||||

|
||||
|
||||
## Support
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ manage online service access.
|
||||
# This will make sure the app is always imported when
|
||||
# Django starts so that shared_task will use this app.
|
||||
|
||||
__version__ = '4.6.4'
|
||||
__version__ = '4.7.0'
|
||||
__title__ = 'Alliance Auth'
|
||||
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
||||
NAME = f'{__title__} v{__version__}'
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class AnalyticsConfig(AppConfig):
|
||||
name = 'allianceauth.analytics'
|
||||
label = 'analytics'
|
||||
verbose_name = _('Analytics')
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
from django.apps import AppConfig
|
||||
from django.core.checks import register, Tags
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class AuthenticationConfig(AppConfig):
|
||||
name = "allianceauth.authentication"
|
||||
label = "authentication"
|
||||
verbose_name = _("Authentication")
|
||||
|
||||
def ready(self):
|
||||
from allianceauth.authentication import checks, signals # noqa: F401
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
from typing import ClassVar
|
||||
|
||||
from django.contrib.auth.models import User, Permission
|
||||
from django.db import models, transaction
|
||||
@@ -27,7 +28,7 @@ class State(models.Model):
|
||||
help_text="Factions to whose members this state is available.")
|
||||
public = models.BooleanField(default=False, help_text="Make this state available to any character.")
|
||||
|
||||
objects = StateManager()
|
||||
objects: ClassVar[StateManager] = StateManager()
|
||||
|
||||
class Meta:
|
||||
ordering = ['-priority']
|
||||
@@ -137,8 +138,10 @@ class UserProfile(models.Model):
|
||||
sender=self.__class__, user=self.user, state=self.state
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
def __str__(self) -> str:
|
||||
return str(self.user)
|
||||
|
||||
|
||||
class CharacterOwnership(models.Model):
|
||||
class Meta:
|
||||
default_permissions = ('change', 'delete')
|
||||
@@ -148,7 +151,7 @@ class CharacterOwnership(models.Model):
|
||||
owner_hash = models.CharField(max_length=28, unique=True)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='character_ownerships')
|
||||
|
||||
objects = CharacterOwnershipManager()
|
||||
objects: ClassVar[CharacterOwnershipManager] = CharacterOwnershipManager()
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.user}: {self.character}"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr>
|
||||
<td style="white-space:initial;">
|
||||
{% for s in t.scopes.all %}
|
||||
<span class="badge bg-secondary">{{ s.name }}</span>
|
||||
<span class="badge text-bg-secondary">{{ s.name }}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
{% load theme_tags %}
|
||||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en" {% theme_html_tags %}>
|
||||
<head>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<!-- TODO Bundle all the site specific stuff up into its own template for easy override -->
|
||||
<meta property="og:title" content="{{ SITE_NAME }}">
|
||||
<meta property="og:image" content="{{ SITE_URL }}{% static 'allianceauth/icons/apple-touch-icon.png' %}">
|
||||
<meta property="og:description" content="Alliance Auth - An auth system for EVE Online to help in-game organizations manage online service access.">
|
||||
<!-- End Required meta tags -->
|
||||
|
||||
<!-- Meta tags -->
|
||||
{% include 'allianceauth/opengraph.html' %}
|
||||
{% include 'allianceauth/icons.html' %}
|
||||
<!-- Meta tags -->
|
||||
|
||||
<title>{% block title %}{% block page_title %}{% endblock page_title %} - {{ SITE_NAME }}{% endblock title %}</title>
|
||||
|
||||
{% theme_css %}
|
||||
|
||||
{% include 'bundles/fontawesome.html' %}
|
||||
{% include 'bundles/auth-framework-css.html' %}
|
||||
|
||||
{% block extra_include %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class CorpUtilsConfig(AppConfig):
|
||||
name = 'allianceauth.corputils'
|
||||
label = 'corputils'
|
||||
verbose_name = _('Corporation Stats')
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import logging
|
||||
import os
|
||||
from typing import ClassVar
|
||||
|
||||
from allianceauth.authentication.models import CharacterOwnership, UserProfile
|
||||
from bravado.exception import HTTPForbidden
|
||||
@@ -40,9 +41,9 @@ class CorpStats(models.Model):
|
||||
verbose_name = "corp stats"
|
||||
verbose_name_plural = "corp stats"
|
||||
|
||||
objects = CorpStatsManager()
|
||||
objects: ClassVar[CorpStatsManager] = CorpStatsManager()
|
||||
|
||||
def __str__(self):
|
||||
def __str__(self) -> str:
|
||||
return f"{self.__class__.__name__} for {self.corp}"
|
||||
|
||||
def update(self):
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
<td style="width: 30%;">{{ alt.corporation_name }}</td>
|
||||
<td style="width: 30%;">{{ alt.alliance_name|default_if_none:"" }}</td>
|
||||
<td style="width: 5%;">
|
||||
<a href="https://zkillboard.com/character/{{ alt.character_id }}/" class="badge bg-danger" target="_blank">
|
||||
<a href="https://zkillboard.com/character/{{ alt.character_id }}/" class="badge text-bg-danger" target="_blank">
|
||||
{% translate "Killboard" %}
|
||||
</a>
|
||||
</td>
|
||||
@@ -175,7 +175,7 @@
|
||||
<td><img src="{{ member.portrait_url }}" class="img-circle" alt="{{ member }}"></td>
|
||||
<td>{{ member }}</td>
|
||||
<td>
|
||||
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge bg-danger" target="_blank">{% translate "Killboard" %}</a>
|
||||
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge text-bg-danger" target="_blank">{% translate "Killboard" %}</a>
|
||||
</td>
|
||||
<td>{{ member.character_ownership.user.profile.main_character.character_name }}</td>
|
||||
<td>{{ member.character_ownership.user.profile.main_character.corporation_name }}</td>
|
||||
@@ -188,7 +188,7 @@
|
||||
<td><img src="{{ member.portrait_url }}" class="img-circle" alt="{{ member.character_name }}"></td>
|
||||
<td>{{ member.character_name }}</td>
|
||||
<td>
|
||||
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge bg-danger" target="_blank">{% translate "Killboard" %}</a>
|
||||
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge text-bg-danger" target="_blank">{% translate "Killboard" %}</a>
|
||||
</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
@@ -219,7 +219,7 @@
|
||||
<td><img src="{{ member.portrait_url }}" class="img-circle" alt="{{ member.character_name }}"></td>
|
||||
<td>{{ member.character_name }}</td>
|
||||
<td>
|
||||
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge bg-danger" target="_blank">
|
||||
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge text-bg-danger" target="_blank">
|
||||
{% translate "Killboard" %}
|
||||
</a>
|
||||
</td>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<td><img src="{{ result.1.portrait_url }}" class="img-circle" alt="{{ result.1.character_name }}"></td>
|
||||
<td>{{ result.1.character_name }}</td>
|
||||
<td >{{ result.0.corp.corporation_name }}</td>
|
||||
<td><a href="https://zkillboard.com/character/{{ result.1.character_id }}/" class="badge bg-danger" target="_blank">{% translate "Killboard" %}</a></td>
|
||||
<td><a href="https://zkillboard.com/character/{{ result.1.character_id }}/" class="badge text-bg-danger" target="_blank">{% translate "Killboard" %}</a></td>
|
||||
<td>{{ result.1.main_character.character_name }}</td>
|
||||
<td>{{ result.1.main_character.corporation_name }}</td>
|
||||
<td>{{ result.1.main_character.alliance_name }}</td>
|
||||
|
||||
@@ -3,6 +3,7 @@ Crontab App Config
|
||||
"""
|
||||
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class CrontabConfig(AppConfig):
|
||||
@@ -12,3 +13,4 @@ class CrontabConfig(AppConfig):
|
||||
|
||||
name = "allianceauth.crontab"
|
||||
label = "crontab"
|
||||
verbose_name = _("Crontab")
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class EveonlineConfig(AppConfig):
|
||||
name = 'allianceauth.eveonline'
|
||||
label = 'eveonline'
|
||||
verbose_name = _('EVE Online')
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class EveAutogroupsConfig(AppConfig):
|
||||
name = 'allianceauth.eveonline.autogroups'
|
||||
label = 'eve_autogroups'
|
||||
verbose_name = _('EVE Online Autogroups')
|
||||
|
||||
def ready(self):
|
||||
import allianceauth.eveonline.autogroups.signals
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
from typing import ClassVar
|
||||
from django.db import models, transaction
|
||||
from django.contrib.auth.models import Group, User
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
@@ -38,13 +39,13 @@ class AutogroupsConfigManager(models.Manager):
|
||||
"""
|
||||
if state is None:
|
||||
state = user.profile.state
|
||||
for config in self.filter(states=state):
|
||||
# grant user new groups for their state
|
||||
config.update_group_membership_for_user(user)
|
||||
for config in self.exclude(states=state):
|
||||
# ensure user does not have groups from previous state
|
||||
config.remove_user_from_alliance_groups(user)
|
||||
config.remove_user_from_corp_groups(user)
|
||||
for config in self.filter(states=state):
|
||||
# grant user new groups for their state
|
||||
config.update_group_membership_for_user(user)
|
||||
|
||||
|
||||
class AutogroupsConfig(models.Model):
|
||||
@@ -78,7 +79,7 @@ class AutogroupsConfig(models.Model):
|
||||
max_length=10, default='', blank=True,
|
||||
help_text='Any spaces in the group name will be replaced with this.')
|
||||
|
||||
objects = AutogroupsConfigManager()
|
||||
objects: ClassVar[AutogroupsConfigManager] = AutogroupsConfigManager()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from allianceauth.eveonline.models import EveCorporationInfo
|
||||
from django.test import TestCase
|
||||
from allianceauth.tests.auth_utils import AuthUtils
|
||||
|
||||
@@ -73,3 +74,51 @@ class AutogroupsConfigManagerTestCase(TestCase):
|
||||
AutogroupsConfig.objects.update_groups_for_user(member)
|
||||
|
||||
self.assertTrue(update_groups.called)
|
||||
|
||||
def test_update_group_membership_corp_in_two_configs(self):
|
||||
# given
|
||||
member = AuthUtils.create_member('test member')
|
||||
AuthUtils.add_main_character_2(
|
||||
member,
|
||||
character_id='1234',
|
||||
name='test character',
|
||||
corp_id='2345',
|
||||
corp_name='corp name',
|
||||
corp_ticker='TIKK',
|
||||
|
||||
)
|
||||
|
||||
corp = EveCorporationInfo.objects.create(
|
||||
corporation_id='2345',
|
||||
corporation_name='corp name',
|
||||
corporation_ticker='TIKK',
|
||||
member_count=10,
|
||||
)
|
||||
|
||||
member_state = AuthUtils.get_member_state()
|
||||
member_config = AutogroupsConfig.objects.create(corp_groups=True)
|
||||
member_config.states.add(member_state)
|
||||
blue_state = AuthUtils.get_blue_state()
|
||||
blue_state.member_corporations.add(corp)
|
||||
blue_config = AutogroupsConfig.objects.create(corp_groups=True)
|
||||
blue_config.states.add(blue_state)
|
||||
|
||||
member.profile.state = blue_state
|
||||
member.profile.save()
|
||||
|
||||
AutogroupsConfig.objects.update_groups_for_user(member)
|
||||
|
||||
# Checks before test that the role is correctly applied
|
||||
group = blue_config.get_corp_group(corp)
|
||||
self.assertIn(group, member.groups.all())
|
||||
|
||||
# when
|
||||
blue_state.member_corporations.remove(corp)
|
||||
member_state.member_corporations.add(corp)
|
||||
member.profile.state = member_state
|
||||
member.profile.save()
|
||||
|
||||
# then
|
||||
AutogroupsConfig.objects.update_groups_for_user(member)
|
||||
group = member_config.get_corp_group(corp)
|
||||
self.assertIn(group, member.groups.all())
|
||||
|
||||
@@ -14,10 +14,10 @@ class EveCharacterProviderManager:
|
||||
class EveCharacterManager(models.Manager):
|
||||
provider = EveCharacterProviderManager()
|
||||
|
||||
def create_character(self, character_id):
|
||||
def create_character(self, character_id) -> models.Model:
|
||||
return self.create_character_obj(self.provider.get_character(character_id))
|
||||
|
||||
def create_character_obj(self, character: providers.Character):
|
||||
def create_character_obj(self, character: providers.Character) -> models.Model:
|
||||
return self.create(
|
||||
character_id=character.id,
|
||||
character_name=character.name,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import logging
|
||||
from typing import Union
|
||||
from typing import ClassVar, Union
|
||||
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.db import models
|
||||
@@ -75,8 +75,8 @@ class EveAllianceInfo(models.Model):
|
||||
alliance_ticker = models.CharField(max_length=254)
|
||||
executor_corp_id = models.PositiveIntegerField()
|
||||
|
||||
objects = EveAllianceManager()
|
||||
provider = EveAllianceProviderManager()
|
||||
objects: ClassVar[EveAllianceManager] = EveAllianceManager()
|
||||
provider: ClassVar[EveAllianceProviderManager] = EveAllianceProviderManager()
|
||||
|
||||
class Meta:
|
||||
indexes = [models.Index(fields=['executor_corp_id',])]
|
||||
@@ -147,7 +147,7 @@ class EveCorporationInfo(models.Model):
|
||||
EveAllianceInfo, blank=True, null=True, on_delete=models.SET_NULL
|
||||
)
|
||||
|
||||
objects = EveCorporationManager()
|
||||
objects: ClassVar[EveCorporationManager] = EveCorporationManager()
|
||||
provider = EveCorporationProviderManager()
|
||||
|
||||
class Meta:
|
||||
@@ -214,7 +214,7 @@ class EveCharacter(models.Model):
|
||||
faction_id = models.PositiveIntegerField(blank=True, null=True, default=None)
|
||||
faction_name = models.CharField(max_length=254, blank=True, null=True, default='')
|
||||
|
||||
objects = EveCharacterManager()
|
||||
objects: ClassVar[EveCharacterManager] = EveCharacterManager()
|
||||
provider = EveCharacterProviderManager()
|
||||
|
||||
class Meta:
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class FatConfig(AppConfig):
|
||||
name = 'allianceauth.fleetactivitytracking'
|
||||
label = 'fleetactivitytracking'
|
||||
verbose_name = _('Fleet Activity Tracking')
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<th class="text-center">{% translate "Character" %}</th>
|
||||
<th class="text-center">{% translate "System" %}</th>
|
||||
<th class="text-center">{% translate "Ship" %}</th>
|
||||
<th class="text-center">{% translate "Eve Time" %}</th>
|
||||
<th class="text-center">{% translate "EVE time" %}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
<tr>
|
||||
<th class="text-center">{% translate "Fleet" %}</th>
|
||||
<th class="text-center">{% translate "Creator" %}</th>
|
||||
<th class="text-center">{% translate "Eve Time" %}</th>
|
||||
<th class="text-center">{% translate "EVE time" %}</th>
|
||||
<th class="text-center">{% translate "Duration" %}</th>
|
||||
<th class="text-center">{% translate "Edit" %}</th>
|
||||
</tr>
|
||||
@@ -80,7 +80,7 @@
|
||||
{% for link in created_fats %}
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<a href="{% url 'fatlink:click' link.hash %}" class="badge bg-primary">
|
||||
<a href="{% url 'fatlink:click' link.hash %}" class="badge text-bg-primary">
|
||||
{{ link.fleet }}
|
||||
</a>
|
||||
</td>
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
<th scope="col" class="text-center">{% translate "Character" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "System" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "Ship" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "Eve Time" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "EVE time" %}</th>
|
||||
</tr>
|
||||
|
||||
{% for fat in fats %}
|
||||
@@ -89,7 +89,7 @@
|
||||
<th scope="col" class="text-center">{% translate "Name" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "Creator" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "Fleet" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "Eve Time" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "EVE time" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "Duration" %}</th>
|
||||
<th scope="col" class="text-center">{% translate "Edit" %}</th>
|
||||
</tr>
|
||||
@@ -97,7 +97,7 @@
|
||||
{% for link in fatlinks %}
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<a href="{% url 'fatlink:click' link.hash %}" class="badge bg-primary">{{ link.fleet }}</a>
|
||||
<a href="{% url 'fatlink:click' link.hash %}" class="badge text-bg-primary">{{ link.fleet }}</a>
|
||||
</td>
|
||||
<td class="text-center">{{ link.creator.username }}</td>
|
||||
<td class="text-center">{{ link.fleet }}</td>
|
||||
|
||||
@@ -3,6 +3,7 @@ Framework App Config
|
||||
"""
|
||||
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class FrameworkConfig(AppConfig):
|
||||
@@ -12,3 +13,4 @@ class FrameworkConfig(AppConfig):
|
||||
|
||||
name = "allianceauth.framework"
|
||||
label = "framework"
|
||||
verbose_name = _("Framework")
|
||||
|
||||
@@ -5,6 +5,24 @@
|
||||
* to be used throughout Alliance Auth and its Community Apps
|
||||
*/
|
||||
|
||||
/* General
|
||||
------------------------------------------------------------------------------------- */
|
||||
@media all {
|
||||
.navbar-toggler.collapsed {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
ul#nav-right:has(li) + ul#nav-right-character-control > li:first-child {
|
||||
display: list-item !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (max-width: 991px) {
|
||||
ul#nav-left:has(li) + ul#nav-right + ul#nav-right-character-control > li:first-child {
|
||||
display: list-item !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Bootstrap fixes
|
||||
------------------------------------------------------------------------------------- */
|
||||
@media all {
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
{# {% include "framework/header/page-header.html" with title="Foobar" subtitle="Barfoo" %}#}
|
||||
|
||||
{% if title %}
|
||||
<h1 class="page-header text-center mb-3">
|
||||
{{ title }}
|
||||
<header class="aa-page-header mb-3">
|
||||
<h1 class="page-header text-center">
|
||||
{{ title }}
|
||||
|
||||
{% if subtitle %}
|
||||
<br>
|
||||
<small class="text-muted">{{ subtitle }}</small>
|
||||
{% endif %}
|
||||
</h1>
|
||||
{% if subtitle %}
|
||||
<br>
|
||||
<small class="text-muted">{{ subtitle }}</small>
|
||||
{% endif %}
|
||||
</h1>
|
||||
</header>
|
||||
{% endif %}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class GroupManagementConfig(AppConfig):
|
||||
name = 'allianceauth.groupmanagement'
|
||||
label = 'groupmanagement'
|
||||
verbose_name = 'Group Management'
|
||||
verbose_name = _('Group Management')
|
||||
|
||||
def ready(self):
|
||||
from . import signals # noqa: F401
|
||||
|
||||
@@ -39,12 +39,12 @@
|
||||
|
||||
<td>
|
||||
{% if group.authgroup.hidden %}
|
||||
<span class="badge bg-info">{% translate "Hidden" %}</span>
|
||||
<span class="badge text-bg-info">{% translate "Hidden" %}</span>
|
||||
{% endif %}
|
||||
{% if group.authgroup.open %}
|
||||
<span class="badge bg-success">{% translate "Open" %}</span>
|
||||
<span class="badge text-bg-success">{% translate "Open" %}</span>
|
||||
{% else %}
|
||||
<span class="badge bg-secondary">{% translate "Requestable" %}</span>
|
||||
<span class="badge text-bg-secondary">{% translate "Requestable" %}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{% url 'groupmanagement:management' %}">{% translate "Group Management" %}
|
||||
{% if req_count %}
|
||||
<span class="badge bg-secondary">{{ req_count }}</span>
|
||||
<span class="badge text-bg-secondary">{{ req_count }}</span>
|
||||
{% endif %}
|
||||
</a>
|
||||
</li>
|
||||
@@ -33,8 +33,8 @@
|
||||
<th>{% translate "Description" %}</th>
|
||||
<th>
|
||||
{% translate "Leaders" %}<br>
|
||||
<span class="my-1 me-1 fw-lighter badge bg-primary">{% translate "User" %}</span>
|
||||
<span class="my-1 me-1 fw-lighter badge bg-secondary">{% translate "Group" %}</span>
|
||||
<span class="my-1 me-1 fw-lighter badge text-bg-primary">{% translate "User" %}</span>
|
||||
<span class="my-1 me-1 fw-lighter badge text-bg-secondary">{% translate "Group" %}</span>
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
@@ -53,13 +53,13 @@
|
||||
{% if g.group.authgroup.group_leaders.all.count %}
|
||||
{% for leader in g.group.authgroup.group_leaders.all %}
|
||||
{% if leader.profile.main_character %}
|
||||
<span class="my-1 me-1 badge bg-primary">{{leader.profile.main_character}}</span>
|
||||
<span class="my-1 me-1 badge text-bg-primary">{{leader.profile.main_character}}</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if g.group.authgroup.group_leader_groups.all.count %}
|
||||
{% for group in g.group.authgroup.group_leader_groups.all %}
|
||||
<span class="my-1 me-1 badge bg-secondary">{{group.name}}</span>
|
||||
<span class="my-1 me-1 badge text-bg-secondary">{{group.name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
{% translate "Join Requests" %}
|
||||
|
||||
{% if acceptrequests %}
|
||||
<span class="badge bg-secondary">{{ acceptrequests|length }}</span>
|
||||
<span class="badge text-bg-secondary">{{ acceptrequests|length }}</span>
|
||||
{% endif %}
|
||||
</a>
|
||||
</li>
|
||||
@@ -30,7 +30,7 @@
|
||||
{% translate "Leave Requests" %}
|
||||
|
||||
{% if leaverequests %}
|
||||
<span class="badge bg-secondary">{{ leaverequests|length }}</span>
|
||||
<span class="badge text-bg-secondary">{{ leaverequests|length }}</span>
|
||||
{% endif %}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class HRApplicationsConfig(AppConfig):
|
||||
name = 'allianceauth.hrapplications'
|
||||
label = 'hrapplications'
|
||||
verbose_name = _('HR Applications')
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from typing import ClassVar
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
from sortedm2m.fields import SortedManyToManyField
|
||||
@@ -40,7 +41,7 @@ class Application(models.Model):
|
||||
reviewer_character = models.ForeignKey(EveCharacter, on_delete=models.SET_NULL, blank=True, null=True)
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
objects = ApplicationManager()
|
||||
objects: ClassVar[ApplicationManager] = ApplicationManager()
|
||||
|
||||
def __str__(self):
|
||||
return str(self.user) + " Application To " + str(self.form)
|
||||
|
||||
@@ -43,11 +43,11 @@
|
||||
<td class="text-center">{{ personal_app.form.corp.corporation_name }}</td>
|
||||
<td class="text-center">
|
||||
{% if personal_app.approved == None %}
|
||||
<div class="badge bg-warning">{% translate "Pending" %}</div>
|
||||
<div class="badge text-bg-warning">{% translate "Pending" %}</div>
|
||||
{% elif personal_app.approved == True %}
|
||||
<div class="badge bg-success">{% translate "Approved" %}</div>
|
||||
<div class="badge text-bg-success">{% translate "Approved" %}</div>
|
||||
{% else %}
|
||||
<div class="badge bg-danger">{% translate "Rejected" %}</div>
|
||||
<div class="badge text-bg-danger">{% translate "Rejected" %}</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
@@ -133,14 +133,14 @@
|
||||
<td class="text-center">
|
||||
{% if app.approved == None %}
|
||||
{% if app.reviewer_str %}
|
||||
<div class="badge bg-info">{% translate "Reviewer:" %} {{ app.reviewer_str }}</div>
|
||||
<div class="badge text-bg-info">{% translate "Reviewer:" %} {{ app.reviewer_str }}</div>
|
||||
{% else %}
|
||||
<div class="badge bg-warning">{% translate "Pending" %}</div>
|
||||
<div class="badge text-bg-warning">{% translate "Pending" %}</div>
|
||||
{% endif %}
|
||||
{% elif app.approved == True %}
|
||||
<div class="badge bg-success">{% translate "Approved" %}</div>
|
||||
<div class="badge text-bg-success">{% translate "Approved" %}</div>
|
||||
{% else %}
|
||||
<div class="badge bg-danger">{% translate "Rejected" %}</div>
|
||||
<div class="badge text-bg-danger">{% translate "Rejected" %}</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
@@ -177,14 +177,14 @@
|
||||
<td class="text-center">
|
||||
{% if app.approved == None %}
|
||||
{% if app.reviewer_str %}
|
||||
<div class="badge bg-info">{% translate "Reviewer:" %} {{ app.reviewer_str }}</div>
|
||||
<div class="badge text-bg-info">{% translate "Reviewer:" %} {{ app.reviewer_str }}</div>
|
||||
{% else %}
|
||||
<div class="badge bg-warning">{% translate "Pending" %}</div>
|
||||
<div class="badge text-bg-warning">{% translate "Pending" %}</div>
|
||||
{% endif %}
|
||||
{% elif app.approved == True %}
|
||||
<div class="badge bg-success">{% translate "Approved" %}</div>
|
||||
<div class="badge text-bg-success">{% translate "Approved" %}</div>
|
||||
{% else %}
|
||||
<div class="badge bg-danger">{% translate "Rejected" %}</div>
|
||||
<div class="badge text-bg-danger">{% translate "Rejected" %}</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
|
||||
@@ -43,11 +43,11 @@
|
||||
<td>{{ app.form.corp }}</td>
|
||||
<td class="text-center">
|
||||
{% if app.approved == None %}
|
||||
<div class="badge bg-warning">{% translate "Pending" %}</div>
|
||||
<div class="badge text-bg-warning">{% translate "Pending" %}</div>
|
||||
{% elif app.approved == True %}
|
||||
<div class="badge bg-success">{% translate "Approved" %}</div>
|
||||
<div class="badge text-bg-success">{% translate "Approved" %}</div>
|
||||
{% else %}
|
||||
<div class="badge bg-danger">{% translate "Rejected" %}</div>
|
||||
<div class="badge text-bg-danger">{% translate "Rejected" %}</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</div>
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-header bg-info">
|
||||
<div class="card-header text-bg-info">
|
||||
<div class="card-title mb-0">{% translate "Applicant" %}</div>
|
||||
</div>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
</div>
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-header bg-info">
|
||||
<div class="card-header text-bg-info">
|
||||
<div class="card-title mb-0">{% translate "Characters" %}</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
||||
"POT-Creation-Date: 2025-05-24 16:55+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -18,6 +18,10 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: allianceauth/analytics/apps.py:8
|
||||
msgid "Analytics"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/analytics/models.py:22
|
||||
msgid "Google Analytics Universal"
|
||||
msgstr ""
|
||||
@@ -26,6 +30,10 @@ msgstr ""
|
||||
msgid "Google Analytics V4"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/apps.py:9
|
||||
msgid "Authentication"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/constants.py:6
|
||||
msgid ""
|
||||
"This software has exceeded the error limit for ESI. If you are a user, "
|
||||
@@ -35,7 +43,7 @@ msgid ""
|
||||
"esi on the EVE Online Discord. https://www.eveonline.com/discord"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/decorators.py:49
|
||||
#: allianceauth/authentication/decorators.py:52
|
||||
msgid "A main character is required to perform that action. Add one below."
|
||||
msgstr ""
|
||||
|
||||
@@ -48,91 +56,91 @@ msgstr ""
|
||||
msgid "You are not allowed to add or remove these restricted groups: %s"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:70
|
||||
#: allianceauth/project_template/project_name/settings/base.py:105
|
||||
#: allianceauth/authentication/models.py:72
|
||||
#: allianceauth/project_template/project_name/settings/base.py:106
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:71
|
||||
#: allianceauth/authentication/models.py:73
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:72
|
||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||
#: allianceauth/authentication/models.py:74
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:73
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
#: allianceauth/authentication/models.py:75
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:74
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
#: allianceauth/authentication/models.py:76
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:75
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
#: allianceauth/authentication/models.py:77
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:76
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
msgid "Korean"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:77
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:78
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
msgid "Russian"
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
msgid "Korean"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:79
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
msgid "Dutch"
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:80
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
msgid "Polish"
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:81
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
msgid "Ukrainian"
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:82
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:83
|
||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||
msgid "Ukrainian"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:84
|
||||
#: allianceauth/project_template/project_name/settings/base.py:118
|
||||
msgid "Simplified Chinese"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:98
|
||||
#: allianceauth/authentication/models.py:100
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:42
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:103
|
||||
#: allianceauth/authentication/models.py:105
|
||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||
msgid "Night Mode"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:107
|
||||
#: allianceauth/authentication/models.py:109
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:46
|
||||
msgid "Theme"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:124
|
||||
#: allianceauth/authentication/models.py:126
|
||||
#, python-format
|
||||
msgid "State changed to: %s"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:125
|
||||
#: allianceauth/authentication/models.py:127
|
||||
#, python-format
|
||||
msgid "Your user's state is now: %(state)s"
|
||||
msgstr ""
|
||||
@@ -267,53 +275,53 @@ msgstr ""
|
||||
msgid "Invalid or expired activation link."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:157
|
||||
#: allianceauth/authentication/views.py:158
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Cannot change main character to %(char)s: character owned by a different "
|
||||
"account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:164
|
||||
#: allianceauth/authentication/views.py:165
|
||||
#, python-format
|
||||
msgid "Changed main character to %s"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:178
|
||||
#: allianceauth/authentication/views.py:179
|
||||
#, python-format
|
||||
msgid "Added %(name)s to your account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:180
|
||||
#: allianceauth/authentication/views.py:181
|
||||
#, python-format
|
||||
msgid "Failed to add %(name)s to your account: they already have an account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:225
|
||||
#: allianceauth/authentication/views.py:226
|
||||
msgid ""
|
||||
"Unable to authenticate as the selected character. Please log in with the "
|
||||
"main character associated with this account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:292
|
||||
#: allianceauth/authentication/views.py:293
|
||||
msgid "Registration token has expired."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:353
|
||||
#: allianceauth/authentication/views.py:354
|
||||
msgid ""
|
||||
"Sent confirmation email. Please follow the link to confirm your email "
|
||||
"address."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:359
|
||||
#: allianceauth/authentication/views.py:360
|
||||
msgid "Confirmed your email address. Please login to continue."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:365
|
||||
#: allianceauth/authentication/views.py:366
|
||||
msgid "Registration of new accounts is not allowed at this time."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/corputils/auth_hooks.py:12
|
||||
#: allianceauth/corputils/apps.py:8 allianceauth/corputils/auth_hooks.py:12
|
||||
msgid "Corporation Stats"
|
||||
msgstr ""
|
||||
|
||||
@@ -419,6 +427,10 @@ msgstr ""
|
||||
msgid "Failed to gather corporation statistics with selected token."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/crontab/apps.py:16
|
||||
msgid "Crontab"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/crontab/models.py:13
|
||||
msgid "Minute Offset"
|
||||
msgstr ""
|
||||
@@ -452,6 +464,15 @@ msgstr ""
|
||||
msgid "This CSS will be added to the site after the default CSS."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/eveonline/apps.py:8
|
||||
msgid "EVE Online"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/eveonline/autogroups/apps.py:8
|
||||
msgid "EVE Online Autogroups"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/fleetactivitytracking/apps.py:8
|
||||
#: allianceauth/fleetactivitytracking/auth_hooks.py:10
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:10
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkcreate.html:11
|
||||
@@ -561,9 +582,11 @@ msgstr ""
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:75
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:44
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:92
|
||||
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:17
|
||||
#: allianceauth/templates/allianceauth/top-menu.html:23
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:18
|
||||
#: allianceauth/timerboard/templates/timerboard/timertable.html:12
|
||||
msgid "Eve Time"
|
||||
msgid "EVE time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:49
|
||||
@@ -728,6 +751,11 @@ msgid ""
|
||||
"character needs to be online."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/framework/apps.py:16
|
||||
msgid "Framework"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/apps.py:8
|
||||
#: allianceauth/groupmanagement/auth_hooks.py:18
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:18
|
||||
msgid "Group Management"
|
||||
@@ -956,7 +984,7 @@ msgid "Hidden"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:16
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
|
||||
@@ -1009,7 +1037,7 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
|
||||
#: allianceauth/srp/templates/srp/data.html:117
|
||||
#: allianceauth/srp/templates/srp/data.html:120
|
||||
#: allianceauth/srp/templates/srp/management.html:87
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
@@ -1151,6 +1179,10 @@ msgstr ""
|
||||
msgid "Applied to leave group %(group)s."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/apps.py:8
|
||||
msgid "HR Applications"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/auth_hooks.py:15
|
||||
msgid "Applications"
|
||||
msgstr ""
|
||||
@@ -1222,7 +1254,7 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:185
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:21
|
||||
#: allianceauth/srp/templates/srp/data.html:109
|
||||
#: allianceauth/srp/templates/srp/data.html:112
|
||||
msgid "Approved"
|
||||
msgstr ""
|
||||
|
||||
@@ -1230,7 +1262,7 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:187
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
|
||||
#: allianceauth/srp/templates/srp/data.html:113
|
||||
#: allianceauth/srp/templates/srp/data.html:116
|
||||
msgid "Rejected"
|
||||
msgstr ""
|
||||
|
||||
@@ -1345,7 +1377,7 @@ msgstr ""
|
||||
msgid "children"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/admin.py:90 allianceauth/menu/models.py:21
|
||||
#: allianceauth/menu/admin.py:90 allianceauth/menu/models.py:22
|
||||
msgid "text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1357,11 +1389,15 @@ msgstr ""
|
||||
msgid "visible"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/apps.py:16
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/constants.py:16
|
||||
msgid "app"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/constants.py:17 allianceauth/menu/models.py:37
|
||||
#: allianceauth/menu/constants.py:17 allianceauth/menu/models.py:38
|
||||
msgid "folder"
|
||||
msgstr ""
|
||||
|
||||
@@ -1373,47 +1409,47 @@ msgstr ""
|
||||
msgid "type"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:22
|
||||
#: allianceauth/menu/models.py:23
|
||||
msgid "Text to show on menu"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:27
|
||||
#: allianceauth/menu/models.py:28
|
||||
msgid "order"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:28
|
||||
#: allianceauth/menu/models.py:29
|
||||
msgid "Order of the menu. Lowest First"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:38
|
||||
#: allianceauth/menu/models.py:39
|
||||
msgid "Folder this item is in (optional)"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:42
|
||||
#: allianceauth/menu/models.py:43
|
||||
msgid "is hidden"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:44
|
||||
#: allianceauth/menu/models.py:45
|
||||
msgid ""
|
||||
"Hide this menu item.If this item is a folder all items under it will be "
|
||||
"hidden too"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:59
|
||||
#: allianceauth/menu/models.py:60
|
||||
msgid "icon classes"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:61
|
||||
#: allianceauth/menu/models.py:62
|
||||
msgid ""
|
||||
"Font Awesome classes to show as icon on menu, e.g. <code>fa-solid fa-house</"
|
||||
"code>"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:67
|
||||
#: allianceauth/menu/models.py:68
|
||||
msgid "url"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/models.py:68
|
||||
#: allianceauth/menu/models.py:69
|
||||
msgid "External URL this menu items will link to"
|
||||
msgstr ""
|
||||
|
||||
@@ -1422,6 +1458,7 @@ msgid "Add folder"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-notification-block.html:12
|
||||
#: allianceauth/notifications/apps.py:8
|
||||
#: allianceauth/notifications/templates/notifications/list.html:7
|
||||
#: allianceauth/notifications/templates/notifications/list.html:11
|
||||
#: allianceauth/templates/allianceauth/notifications_menu_item.html:6
|
||||
@@ -1447,19 +1484,19 @@ msgstr ""
|
||||
msgid "Sign In"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/models.py:21
|
||||
#: allianceauth/notifications/models.py:22
|
||||
msgid "danger"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/models.py:22
|
||||
#: allianceauth/notifications/models.py:23
|
||||
msgid "warning"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/models.py:23
|
||||
#: allianceauth/notifications/models.py:24
|
||||
msgid "info"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/models.py:24
|
||||
#: allianceauth/notifications/models.py:25
|
||||
msgid "success"
|
||||
msgstr ""
|
||||
|
||||
@@ -1516,7 +1553,7 @@ msgstr ""
|
||||
msgid "Deleted all read notifications."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/auth_hooks.py:12
|
||||
#: allianceauth/optimer/apps.py:8 allianceauth/optimer/auth_hooks.py:12
|
||||
msgid "Fleet Operations"
|
||||
msgstr ""
|
||||
|
||||
@@ -1590,11 +1627,6 @@ msgstr ""
|
||||
msgid "Form Up System"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:17
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:18
|
||||
msgid "EVE Time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/fleetoptable.html:14
|
||||
#: allianceauth/timerboard/templates/timerboard/timertable.html:13
|
||||
msgid "Local Time"
|
||||
@@ -1610,7 +1642,7 @@ msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:28
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:32
|
||||
msgid "Current Eve Time:"
|
||||
msgid "Current EVE time:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:36
|
||||
@@ -1655,6 +1687,7 @@ msgstr ""
|
||||
msgid "Saved changes to operation timer for %(opname)s."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/permissions_tool/apps.py:8
|
||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:7
|
||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:11
|
||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:17
|
||||
@@ -1711,7 +1744,7 @@ msgstr ""
|
||||
msgid "Successfully set your {self.service_name} password"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/auth_hooks.py:12
|
||||
#: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
@@ -1775,6 +1808,10 @@ msgstr ""
|
||||
msgid "Password must be at least 8 characters long."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/discord/apps.py:8
|
||||
msgid "Discord Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/discord/models.py:187
|
||||
msgid "Discord Account Disabled"
|
||||
msgstr ""
|
||||
@@ -1823,6 +1860,10 @@ msgid ""
|
||||
"again."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/discourse/apps.py:8
|
||||
msgid "Discourse Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/discourse/templates/services/discourse/discourse_service_ctrl.html:5
|
||||
msgid "Discourse"
|
||||
msgstr ""
|
||||
@@ -1853,6 +1894,14 @@ msgstr ""
|
||||
msgid "Invalid payload. Please contact support if this problem persists."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/example/apps.py:8
|
||||
msgid "Example Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/ips4/apps.py:8
|
||||
msgid "IPS4 Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/ips4/views.py:31
|
||||
msgid "Activated IPSuite4 account."
|
||||
msgstr ""
|
||||
@@ -1876,6 +1925,10 @@ msgstr ""
|
||||
msgid "Deactivated IPSuite4 account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/mumble/apps.py:8
|
||||
msgid "Mumble Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:7
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
@@ -1931,6 +1984,10 @@ msgstr ""
|
||||
msgid "Mumble Connection History"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/openfire/apps.py:8
|
||||
msgid "Openfire Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/openfire/auth_hooks.py:27
|
||||
msgid "Jabber"
|
||||
msgstr ""
|
||||
@@ -1982,6 +2039,10 @@ msgstr ""
|
||||
msgid "Set jabber password."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/phpbb3/apps.py:8
|
||||
msgid "phpBB3 Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/phpbb3/views.py:34
|
||||
msgid "Activated forum account."
|
||||
msgstr ""
|
||||
@@ -2005,6 +2066,10 @@ msgstr ""
|
||||
msgid "Set forum password."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/smf/apps.py:8
|
||||
msgid "SMF Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/smf/views.py:52
|
||||
msgid "Activated SMF account."
|
||||
msgstr ""
|
||||
@@ -2028,6 +2093,10 @@ msgstr ""
|
||||
msgid "Set SMF password."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/teamspeak3/apps.py:8
|
||||
msgid "TeamSpeak 3 Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/teamspeak3/forms.py:14
|
||||
#, python-format
|
||||
msgid "Unable to locate user %s on server"
|
||||
@@ -2077,6 +2146,10 @@ msgstr ""
|
||||
msgid "Reset TeamSpeak3 permission key."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/xenforo/apps.py:8
|
||||
msgid "Xenforo Service"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/modules/xenforo/views.py:30
|
||||
msgid "Activated XenForo account."
|
||||
msgstr ""
|
||||
@@ -2186,7 +2259,7 @@ msgid ""
|
||||
"Some services provide different options. Hover over the buttons to see more."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/auth_hooks.py:14
|
||||
#: allianceauth/srp/apps.py:8 allianceauth/srp/auth_hooks.py:14
|
||||
msgid "Ship Replacement"
|
||||
msgstr ""
|
||||
|
||||
@@ -2261,18 +2334,18 @@ msgid "Mark Completed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:48
|
||||
#: allianceauth/srp/templates/srp/data.html:139
|
||||
#: allianceauth/srp/templates/srp/data.html:142
|
||||
msgid "Total Losses:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:49
|
||||
#: allianceauth/srp/templates/srp/data.html:140
|
||||
#: allianceauth/srp/templates/srp/data.html:143
|
||||
#: allianceauth/srp/templates/srp/management.html:36
|
||||
msgid "Total ISK Cost:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:60
|
||||
#: allianceauth/srp/templates/srp/data.html:151
|
||||
#: allianceauth/srp/templates/srp/data.html:154
|
||||
msgid "Are you sure you want to delete SRP requests?"
|
||||
msgstr ""
|
||||
|
||||
@@ -2304,12 +2377,12 @@ msgstr ""
|
||||
msgid "Post Time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:99
|
||||
#: allianceauth/srp/templates/srp/data.html:102
|
||||
#: allianceauth/srp/templates/srp/management.html:70
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:160
|
||||
#: allianceauth/srp/templates/srp/data.html:163
|
||||
msgid "No SRP requests for this fleet."
|
||||
msgstr ""
|
||||
|
||||
@@ -2493,52 +2566,48 @@ msgstr ""
|
||||
msgid "Alliance Auth Notifications"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:18
|
||||
msgid "Closed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:24
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
|
||||
msgid "No notifications at this time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:33
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
|
||||
msgid "Powered by GitLab"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:39
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
|
||||
msgid "Support Discord"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:49
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:57
|
||||
msgid "Software Version"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:60
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:56
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:67
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
|
||||
msgid "Latest Stable"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:72
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:68
|
||||
msgid "Update available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:80
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
|
||||
msgid "Latest Pre-Release"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:85
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
|
||||
msgid "Pre-Release available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
|
||||
msgid "Task Queue"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:100
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -2547,11 +2616,11 @@ msgid ""
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:116
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:112
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:117
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:113
|
||||
msgid "queued"
|
||||
msgstr ""
|
||||
|
||||
@@ -2580,6 +2649,13 @@ msgstr ""
|
||||
msgid "Select Theme"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/apps.py:8
|
||||
#: allianceauth/timerboard/templates/timerboard/form.html:10
|
||||
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:10
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:14
|
||||
msgid "Structure Timers"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/form.py:36
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:14
|
||||
#: allianceauth/timerboard/templates/timerboard/timertable.html:8
|
||||
@@ -2766,6 +2842,10 @@ msgstr ""
|
||||
msgid "Abandoned"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/models.py:60
|
||||
msgid "Theft"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
||||
msgid "Upcoming Timers"
|
||||
@@ -2775,12 +2855,6 @@ msgstr ""
|
||||
msgid "Timer"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/form.html:10
|
||||
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:10
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:14
|
||||
msgid "Structure Timers"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/form.html:25
|
||||
msgid "Structure Timer Details"
|
||||
msgstr ""
|
||||
|
||||
Binary file not shown.
@@ -8,7 +8,7 @@
|
||||
# Fegpawn Kaundur, 2023
|
||||
# frank1210 <francolopez_16@hotmail.com>, 2023
|
||||
# Joel Falknau <ozirascal@gmail.com>, 2023
|
||||
# trenus, 2023
|
||||
# trenus, 2025
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
||||
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
||||
"Last-Translator: trenus, 2023\n"
|
||||
"Last-Translator: trenus, 2025\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/alliance-auth/teams/107430/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -64,7 +64,7 @@ msgstr "Inglés"
|
||||
|
||||
#: allianceauth/authentication/models.py:71
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Checo"
|
||||
|
||||
#: allianceauth/authentication/models.py:72
|
||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||
@@ -104,22 +104,22 @@ msgstr "Ruso"
|
||||
#: allianceauth/authentication/models.py:79
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
msgstr "Holandés"
|
||||
|
||||
#: allianceauth/authentication/models.py:80
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
msgstr "Polaco"
|
||||
|
||||
#: allianceauth/authentication/models.py:81
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
msgid "Ukrainian"
|
||||
msgstr ""
|
||||
msgstr "Ucraniano"
|
||||
|
||||
#: allianceauth/authentication/models.py:82
|
||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||
msgid "Simplified Chinese"
|
||||
msgstr ""
|
||||
msgstr "Chino Simplificado"
|
||||
|
||||
#: allianceauth/authentication/models.py:98
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:42
|
||||
@@ -134,7 +134,7 @@ msgstr "Modo Nocturno"
|
||||
#: allianceauth/authentication/models.py:107
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:46
|
||||
msgid "Theme"
|
||||
msgstr ""
|
||||
msgstr "Tema"
|
||||
|
||||
#: allianceauth/authentication/models.py:124
|
||||
#, python-format
|
||||
@@ -195,17 +195,17 @@ msgstr "Allianza"
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_groups.html:5
|
||||
msgid "Membership"
|
||||
msgstr ""
|
||||
msgstr "Membresía"
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_groups.html:10
|
||||
msgid "State:"
|
||||
msgstr ""
|
||||
msgstr "Estado:"
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/tokens.html:7
|
||||
#: allianceauth/authentication/templates/authentication/tokens.html:11
|
||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
|
||||
msgid "Token Management"
|
||||
msgstr ""
|
||||
msgstr "Gestión de Tokens"
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/tokens.html:17
|
||||
msgid ""
|
||||
@@ -346,7 +346,7 @@ msgstr "Corporaciones"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:35
|
||||
msgid "Add corporation"
|
||||
msgstr ""
|
||||
msgstr "Añadir corporación"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:51
|
||||
msgid "Search all corporations..."
|
||||
@@ -371,11 +371,11 @@ msgstr "Ultima Actualizacion:"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/corpstats.html:86
|
||||
msgid "Update Now"
|
||||
msgstr ""
|
||||
msgstr "Actualizar Ahora"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/corpstats.html:101
|
||||
msgid "Main character"
|
||||
msgstr ""
|
||||
msgstr "Personaje principal"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/corpstats.html:102
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:29
|
||||
@@ -549,7 +549,7 @@ msgstr "Editar Fatlink"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:21
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
msgstr "¿Estás seguro?"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:22
|
||||
msgid "Delete fat"
|
||||
@@ -692,7 +692,7 @@ msgstr "Promedio de participacion"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:6
|
||||
msgid "Fatlink Statistics"
|
||||
msgstr ""
|
||||
msgstr "Estadísticas Fatlink"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:32
|
||||
msgid "Ticker"
|
||||
@@ -1940,19 +1940,19 @@ msgstr "Cuenta IPSuite4 desactivada."
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:7
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
msgstr "Mumble"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:11
|
||||
msgid "Mumble History"
|
||||
msgstr ""
|
||||
msgstr "Historial de Mumble"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:23
|
||||
msgid "Server Connection History"
|
||||
msgstr ""
|
||||
msgstr "Historial de Conexiones al Servidor"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:32
|
||||
msgid "Displayed Name"
|
||||
msgstr ""
|
||||
msgstr "Nombre Visualizado"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:33
|
||||
msgid "Release"
|
||||
@@ -1961,24 +1961,24 @@ msgstr ""
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:34
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:68
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
msgstr "Versión"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:35
|
||||
msgid "Last Connect"
|
||||
msgstr ""
|
||||
msgstr "Última Conexión"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:36
|
||||
msgid "Last Disconnect"
|
||||
msgstr ""
|
||||
msgstr "Última Desconexión"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:48
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:60
|
||||
msgid "Server Connection Breakdown"
|
||||
msgstr ""
|
||||
msgstr "Desglose de la Conexión al Servidor"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:69
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
msgstr "Número"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:28
|
||||
#: allianceauth/services/templates/services/service_password.html:26
|
||||
@@ -1987,11 +1987,11 @@ msgstr "Cambiar Contraseña"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:46
|
||||
msgid "Connect"
|
||||
msgstr ""
|
||||
msgstr "Conectar"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:52
|
||||
msgid "Mumble Connection History"
|
||||
msgstr ""
|
||||
msgstr "Historia de Conexión Mumble"
|
||||
|
||||
#: allianceauth/services/modules/openfire/auth_hooks.py:27
|
||||
msgid "Jabber"
|
||||
@@ -2214,7 +2214,7 @@ msgstr "Cambiar contraseña en %(service_name)s"
|
||||
|
||||
#: allianceauth/services/templates/services/service_status.html:5
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
msgstr "Habilitado"
|
||||
|
||||
#: allianceauth/services/templates/services/service_status.html:7
|
||||
#: allianceauth/srp/templates/srp/management.html:78
|
||||
@@ -2299,11 +2299,11 @@ msgstr "Crear SRP"
|
||||
|
||||
#: allianceauth/srp/templates/srp/add.html:26
|
||||
msgid "SRP fleet details"
|
||||
msgstr ""
|
||||
msgstr "Detalles de la flota SRP"
|
||||
|
||||
#: allianceauth/srp/templates/srp/add.html:40
|
||||
msgid "Create SRP fleet"
|
||||
msgstr ""
|
||||
msgstr "Crear flota SRP"
|
||||
|
||||
#: allianceauth/srp/templates/srp/add.html:46
|
||||
msgid "Give this link to the line members."
|
||||
@@ -2316,7 +2316,7 @@ msgstr "Informacion de SRP de la flota"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:17
|
||||
msgid "View Fleets"
|
||||
msgstr ""
|
||||
msgstr "Ver Flotas"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:26
|
||||
msgid "Mark Incomplete"
|
||||
@@ -2435,11 +2435,11 @@ msgstr "Crear solicitud de SRP"
|
||||
|
||||
#: allianceauth/srp/templates/srp/request.html:22
|
||||
msgid "Your SRP request"
|
||||
msgstr ""
|
||||
msgstr "Tu solicitud SRP"
|
||||
|
||||
#: allianceauth/srp/templates/srp/request.html:35
|
||||
msgid "Create SRP request"
|
||||
msgstr ""
|
||||
msgstr "Crear solicitud SRP"
|
||||
|
||||
#: allianceauth/srp/templates/srp/update.html:7
|
||||
#: allianceauth/srp/templates/srp/update.html:16
|
||||
@@ -2456,7 +2456,7 @@ msgstr "No existe el SRP para esa flota"
|
||||
|
||||
#: allianceauth/srp/templates/srp/update.html:40
|
||||
msgid "Update AAR link"
|
||||
msgstr ""
|
||||
msgstr "Actualizar enlace AAR"
|
||||
|
||||
#: allianceauth/srp/views.py:85
|
||||
#, python-format
|
||||
@@ -2568,7 +2568,7 @@ msgstr "Cerrado"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:24
|
||||
msgid "No notifications at this time"
|
||||
msgstr ""
|
||||
msgstr "No hay notificaciones en este momento"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:33
|
||||
msgid "Powered by GitLab"
|
||||
@@ -2617,11 +2617,11 @@ msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:116
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
msgstr "ejecutando"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:117
|
||||
msgid "queued"
|
||||
msgstr ""
|
||||
msgstr "en cola"
|
||||
|
||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
||||
msgid "AA Documentation"
|
||||
@@ -2646,7 +2646,7 @@ msgstr "Navegacion"
|
||||
|
||||
#: allianceauth/theme/templates/theme/theme_select.html:7
|
||||
msgid "Select Theme"
|
||||
msgstr ""
|
||||
msgstr "Seleccionar tema"
|
||||
|
||||
#: allianceauth/timerboard/form.py:36
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:14
|
||||
@@ -2677,7 +2677,7 @@ msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/form.py:43
|
||||
msgid "Date and Time"
|
||||
msgstr ""
|
||||
msgstr "Fecha y hora"
|
||||
|
||||
#: allianceauth/timerboard/form.py:44
|
||||
msgid "Days Remaining"
|
||||
@@ -2744,35 +2744,35 @@ msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/models.py:31
|
||||
msgid "Astrahus"
|
||||
msgstr ""
|
||||
msgstr "Astrahus"
|
||||
|
||||
#: allianceauth/timerboard/models.py:32
|
||||
msgid "Fortizar"
|
||||
msgstr ""
|
||||
msgstr "Fortizar"
|
||||
|
||||
#: allianceauth/timerboard/models.py:33
|
||||
msgid "Keepstar"
|
||||
msgstr ""
|
||||
msgstr "Keepstar"
|
||||
|
||||
#: allianceauth/timerboard/models.py:34
|
||||
msgid "Raitaru"
|
||||
msgstr ""
|
||||
msgstr "Raitaru"
|
||||
|
||||
#: allianceauth/timerboard/models.py:35
|
||||
msgid "Azbel"
|
||||
msgstr ""
|
||||
msgstr "Azbel"
|
||||
|
||||
#: allianceauth/timerboard/models.py:36
|
||||
msgid "Sotiyo"
|
||||
msgstr ""
|
||||
msgstr "Sotiyo"
|
||||
|
||||
#: allianceauth/timerboard/models.py:37
|
||||
msgid "Athanor"
|
||||
msgstr ""
|
||||
msgstr "Athanor"
|
||||
|
||||
#: allianceauth/timerboard/models.py:38
|
||||
msgid "Tatara"
|
||||
msgstr ""
|
||||
msgstr "Tatara"
|
||||
|
||||
#: allianceauth/timerboard/models.py:39
|
||||
msgid "Cyno Beacon"
|
||||
@@ -2832,7 +2832,7 @@ msgstr "Desanclando"
|
||||
|
||||
#: allianceauth/timerboard/models.py:59
|
||||
msgid "Abandoned"
|
||||
msgstr ""
|
||||
msgstr "Abandonado"
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
||||
@@ -2906,17 +2906,19 @@ msgstr "Se guardaron los cambios en el timer."
|
||||
|
||||
#: allianceauth/views.py:55
|
||||
msgid "Bad Request"
|
||||
msgstr ""
|
||||
msgstr "Mala solicitud"
|
||||
|
||||
#: allianceauth/views.py:57 allianceauth/views.py:87
|
||||
msgid ""
|
||||
"Auth encountered an error processing your request, please try again. If the "
|
||||
"error persists, please contact the administrators."
|
||||
msgstr ""
|
||||
"Auth ha encontrado un error al procesar su solicitud, por favor inténtelo de"
|
||||
" nuevo. Si el error persiste, póngase en contacto con los administradores."
|
||||
|
||||
#: allianceauth/views.py:65
|
||||
msgid "Permission Denied"
|
||||
msgstr ""
|
||||
msgstr "Permiso Denegado"
|
||||
|
||||
#: allianceauth/views.py:67
|
||||
msgid ""
|
||||
@@ -2926,14 +2928,16 @@ msgstr ""
|
||||
|
||||
#: allianceauth/views.py:75
|
||||
msgid "Page Not Found"
|
||||
msgstr ""
|
||||
msgstr "Página No Encontrada"
|
||||
|
||||
#: allianceauth/views.py:77
|
||||
msgid ""
|
||||
"Page does not exist. If you believe this is in error please contact the "
|
||||
"administrators. "
|
||||
msgstr ""
|
||||
"La página no existe. Si cree que se trata de un error, póngase en contacto "
|
||||
"con los administradores. "
|
||||
|
||||
#: allianceauth/views.py:85
|
||||
msgid "Internal Server Error"
|
||||
msgstr ""
|
||||
msgstr "Error Interno del Servidor"
|
||||
|
||||
Binary file not shown.
@@ -7,6 +7,7 @@
|
||||
# Kristof Swensen, 2023
|
||||
# Денис Ивченко, 2024
|
||||
# Andrii Yukhymchak, 2024
|
||||
# Bandera Primary, 2025
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
@@ -15,7 +16,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
||||
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
||||
"Last-Translator: Andrii Yukhymchak, 2024\n"
|
||||
"Last-Translator: Bandera Primary, 2025\n"
|
||||
"Language-Team: Ukrainian (https://app.transifex.com/alliance-auth/teams/107430/uk/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -67,7 +68,7 @@ msgstr "Англійська"
|
||||
|
||||
#: allianceauth/authentication/models.py:71
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Чеська"
|
||||
|
||||
#: allianceauth/authentication/models.py:72
|
||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||
@@ -107,12 +108,12 @@ msgstr "Російська"
|
||||
#: allianceauth/authentication/models.py:79
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
msgstr "Нідерландська"
|
||||
|
||||
#: allianceauth/authentication/models.py:80
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
msgstr "Польська"
|
||||
|
||||
#: allianceauth/authentication/models.py:81
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
@@ -122,7 +123,7 @@ msgstr "Українська"
|
||||
#: allianceauth/authentication/models.py:82
|
||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||
msgid "Simplified Chinese"
|
||||
msgstr ""
|
||||
msgstr "Cпрощена китайська"
|
||||
|
||||
#: allianceauth/authentication/models.py:98
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:42
|
||||
@@ -216,6 +217,9 @@ msgid ""
|
||||
"your tokens. Always revoke tokens on "
|
||||
"https://developers.eveonline.com/authorized-apps where possible."
|
||||
msgstr ""
|
||||
"Тут ви може видалити токени, але резервні копії або логи бази даних все ще "
|
||||
"можуть містити їх. Завжди анульовуйте токени на "
|
||||
"https://developers.eveonline.com/authorized-apps, коли є можливість."
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/tokens.html:23
|
||||
msgid "Scopes"
|
||||
@@ -446,36 +450,36 @@ msgstr "Не вдалося зібрати статистику корпорац
|
||||
|
||||
#: allianceauth/crontab/models.py:13
|
||||
msgid "Minute Offset"
|
||||
msgstr ""
|
||||
msgstr "Зміщення хвилини"
|
||||
|
||||
#: allianceauth/crontab/models.py:14
|
||||
msgid "Hour Offset"
|
||||
msgstr ""
|
||||
msgstr "Зміщення години"
|
||||
|
||||
#: allianceauth/crontab/models.py:15
|
||||
msgid "Day of Month Offset"
|
||||
msgstr ""
|
||||
msgstr "Зміщення дня місяця"
|
||||
|
||||
#: allianceauth/crontab/models.py:16
|
||||
msgid "Month of Year Offset"
|
||||
msgstr ""
|
||||
msgstr "Зміщення місяця року"
|
||||
|
||||
#: allianceauth/crontab/models.py:17
|
||||
msgid "Day of Week Offset"
|
||||
msgstr ""
|
||||
msgstr "Зміщення дня тижня"
|
||||
|
||||
#: allianceauth/custom_css/apps.py:13 allianceauth/custom_css/models.py:36
|
||||
#: allianceauth/custom_css/models.py:37 allianceauth/custom_css/models.py:47
|
||||
msgid "Custom CSS"
|
||||
msgstr ""
|
||||
msgstr "Користувацький CSS"
|
||||
|
||||
#: allianceauth/custom_css/models.py:25
|
||||
msgid "Your custom CSS"
|
||||
msgstr ""
|
||||
msgstr "Ваш користувацький CSS"
|
||||
|
||||
#: allianceauth/custom_css/models.py:26
|
||||
msgid "This CSS will be added to the site after the default CSS."
|
||||
msgstr ""
|
||||
msgstr "Цей CSS буде додано до сайту після базового CSS."
|
||||
|
||||
#: allianceauth/fleetactivitytracking/auth_hooks.py:10
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:10
|
||||
@@ -1951,45 +1955,45 @@ msgstr "Деактивовано обліковий запис IPSuite4."
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:7
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
msgstr "Mumble"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:11
|
||||
msgid "Mumble History"
|
||||
msgstr ""
|
||||
msgstr "Історія Mumble"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:23
|
||||
msgid "Server Connection History"
|
||||
msgstr ""
|
||||
msgstr "Історія підключень до сервера"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:32
|
||||
msgid "Displayed Name"
|
||||
msgstr ""
|
||||
msgstr "Відображене ім'я"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:33
|
||||
msgid "Release"
|
||||
msgstr ""
|
||||
msgstr "Реліз"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:34
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:68
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
msgstr "Версія"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:35
|
||||
msgid "Last Connect"
|
||||
msgstr ""
|
||||
msgstr "Останнє підключення"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:36
|
||||
msgid "Last Disconnect"
|
||||
msgstr ""
|
||||
msgstr "Останнє відключення"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:48
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:60
|
||||
msgid "Server Connection Breakdown"
|
||||
msgstr ""
|
||||
msgstr "Розбір підключення до сервера"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:69
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
msgstr "Кількість"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:28
|
||||
#: allianceauth/services/templates/services/service_password.html:26
|
||||
@@ -2002,7 +2006,7 @@ msgstr "Підєднатись"
|
||||
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:52
|
||||
msgid "Mumble Connection History"
|
||||
msgstr ""
|
||||
msgstr "Історія підключень до Mumble"
|
||||
|
||||
#: allianceauth/services/modules/openfire/auth_hooks.py:27
|
||||
msgid "Jabber"
|
||||
@@ -2740,11 +2744,11 @@ msgstr "POCO"
|
||||
|
||||
#: allianceauth/timerboard/models.py:25
|
||||
msgid "Orbital Skyhook"
|
||||
msgstr ""
|
||||
msgstr "Орбітальний скайхук"
|
||||
|
||||
#: allianceauth/timerboard/models.py:26
|
||||
msgid "Sovereignty Hub"
|
||||
msgstr ""
|
||||
msgstr "Суверенітетний хаб"
|
||||
|
||||
#: allianceauth/timerboard/models.py:27
|
||||
msgid "TCU"
|
||||
@@ -2808,7 +2812,7 @@ msgstr "Мост Ансіблекс"
|
||||
|
||||
#: allianceauth/timerboard/models.py:42
|
||||
msgid "Mercenary Den"
|
||||
msgstr ""
|
||||
msgstr "Кубло найманців"
|
||||
|
||||
#: allianceauth/timerboard/models.py:43
|
||||
msgid "Moon Mining Cycle"
|
||||
@@ -2816,7 +2820,7 @@ msgstr "Цикл видобутку супутника"
|
||||
|
||||
#: allianceauth/timerboard/models.py:44
|
||||
msgid "Metenox Moon Drill"
|
||||
msgstr ""
|
||||
msgstr "Бур Метенокс"
|
||||
|
||||
#: allianceauth/timerboard/models.py:45
|
||||
msgid "Other"
|
||||
@@ -2852,7 +2856,7 @@ msgstr "Зняття з якорю"
|
||||
|
||||
#: allianceauth/timerboard/models.py:59
|
||||
msgid "Abandoned"
|
||||
msgstr ""
|
||||
msgstr "Покинуто"
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
||||
|
||||
Binary file not shown.
@@ -8,6 +8,7 @@
|
||||
# 85b931f94c2441449e78b527e0a313ae_baf2e99 <639a60f913241ffb1c9bd90bc93a541f_869335>, 2023
|
||||
# Aaron BuBu <351793078@qq.com>, 2023
|
||||
# Joel Falknau <ozirascal@gmail.com>, 2023
|
||||
# Aika Yu, 2025
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
@@ -16,7 +17,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
||||
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
||||
"Last-Translator: Joel Falknau <ozirascal@gmail.com>, 2023\n"
|
||||
"Last-Translator: Aika Yu, 2025\n"
|
||||
"Language-Team: Chinese Simplified (https://app.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -61,7 +62,7 @@ msgstr "英语"
|
||||
|
||||
#: allianceauth/authentication/models.py:71
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "捷克语"
|
||||
|
||||
#: allianceauth/authentication/models.py:72
|
||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||
@@ -101,22 +102,22 @@ msgstr "俄语"
|
||||
#: allianceauth/authentication/models.py:79
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
msgstr "荷兰语"
|
||||
|
||||
#: allianceauth/authentication/models.py:80
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
msgstr "波兰语"
|
||||
|
||||
#: allianceauth/authentication/models.py:81
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
msgid "Ukrainian"
|
||||
msgstr ""
|
||||
msgstr "乌克兰语"
|
||||
|
||||
#: allianceauth/authentication/models.py:82
|
||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||
msgid "Simplified Chinese"
|
||||
msgstr ""
|
||||
msgstr "简体中文"
|
||||
|
||||
#: allianceauth/authentication/models.py:98
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:42
|
||||
@@ -283,7 +284,7 @@ msgstr "不能修改主角色为%(char)s:这个角色被另一个账户所拥
|
||||
#: allianceauth/authentication/views.py:164
|
||||
#, python-format
|
||||
msgid "Changed main character to %s"
|
||||
msgstr ""
|
||||
msgstr "修改主角色为%s"
|
||||
|
||||
#: allianceauth/authentication/views.py:178
|
||||
#, python-format
|
||||
@@ -359,11 +360,11 @@ msgstr "最后一次更新"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/corpstats.html:86
|
||||
msgid "Update Now"
|
||||
msgstr ""
|
||||
msgstr "立刻更新"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/corpstats.html:101
|
||||
msgid "Main character"
|
||||
msgstr ""
|
||||
msgstr "主要角色"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/corpstats.html:102
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:29
|
||||
@@ -536,7 +537,7 @@ msgstr "编辑一个PAP"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:21
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
msgstr "是否确认?"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:22
|
||||
msgid "Delete fat"
|
||||
@@ -575,7 +576,7 @@ msgstr "EVE时间"
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:49
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:52
|
||||
msgid "Docked in"
|
||||
msgstr ""
|
||||
msgstr "停靠在"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:6
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalstatisticsview.html:6
|
||||
@@ -711,11 +712,11 @@ msgstr "记录中找不到已创建的PAP链接"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/views.py:218
|
||||
msgid "Character does not exist"
|
||||
msgstr ""
|
||||
msgstr "角色不存在"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/views.py:221
|
||||
msgid "User does not exist"
|
||||
msgstr ""
|
||||
msgstr "用户不存在"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/views.py:299
|
||||
msgid "Fleet participation registered."
|
||||
@@ -935,7 +936,7 @@ msgstr "用户组成员"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:13
|
||||
msgid "Join/Leave Requests"
|
||||
msgstr ""
|
||||
msgstr "加入/退出申请"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:24
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:33
|
||||
@@ -1444,13 +1445,13 @@ msgstr "管理员"
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:82
|
||||
msgid "Sign Out"
|
||||
msgstr ""
|
||||
msgstr "登出"
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:86
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
|
||||
msgid "Sign In"
|
||||
msgstr ""
|
||||
msgstr "登入"
|
||||
|
||||
#: allianceauth/notifications/models.py:21
|
||||
msgid "danger"
|
||||
@@ -1494,7 +1495,7 @@ msgstr "标题"
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/list_partial.html:28
|
||||
msgid "No notifications."
|
||||
msgstr ""
|
||||
msgstr "暂无通知"
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/view.html:5
|
||||
#: allianceauth/notifications/templates/notifications/view.html:9
|
||||
@@ -1584,7 +1585,7 @@ msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:7
|
||||
msgid "Upcoming Fleets"
|
||||
msgstr ""
|
||||
msgstr "接下来的队"
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:14
|
||||
msgid "Operation"
|
||||
@@ -1598,7 +1599,7 @@ msgstr "集结点"
|
||||
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:17
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:18
|
||||
msgid "EVE Time"
|
||||
msgstr ""
|
||||
msgstr "EVE时间"
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/fleetoptable.html:14
|
||||
#: allianceauth/timerboard/templates/timerboard/timertable.html:13
|
||||
@@ -1793,17 +1794,17 @@ msgstr ""
|
||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:26
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:22
|
||||
msgid "Activate"
|
||||
msgstr ""
|
||||
msgstr "激活"
|
||||
|
||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:32
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:34
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
msgstr "重置密码"
|
||||
|
||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:38
|
||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:40
|
||||
msgid "Deactivate"
|
||||
msgstr ""
|
||||
msgstr "停用"
|
||||
|
||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:45
|
||||
msgid "Link Discord Server"
|
||||
@@ -1820,7 +1821,7 @@ msgstr "在处理你的Discord账户时出错。"
|
||||
|
||||
#: allianceauth/services/modules/discord/views.py:102
|
||||
msgid "Your Discord account has been successfully activated."
|
||||
msgstr ""
|
||||
msgstr "你的discord账户已成功停用"
|
||||
|
||||
#: allianceauth/services/modules/discord/views.py:108
|
||||
msgid ""
|
||||
@@ -2232,7 +2233,7 @@ msgstr "补损舰队创建"
|
||||
#: allianceauth/srp/templates/srp/request.html:11
|
||||
#: allianceauth/srp/templates/srp/update.html:11
|
||||
msgid "Ship Replacement Program"
|
||||
msgstr ""
|
||||
msgstr "补损"
|
||||
|
||||
#: allianceauth/srp/templates/srp/add.html:20
|
||||
msgid "Create SRP Fleet"
|
||||
@@ -2257,7 +2258,7 @@ msgstr "舰队补损信息"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:17
|
||||
msgid "View Fleets"
|
||||
msgstr ""
|
||||
msgstr "查看舰队"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:26
|
||||
msgid "Mark Incomplete"
|
||||
@@ -2374,11 +2375,11 @@ msgstr "创建补损请求"
|
||||
|
||||
#: allianceauth/srp/templates/srp/request.html:22
|
||||
msgid "Your SRP request"
|
||||
msgstr ""
|
||||
msgstr "你的补损请求"
|
||||
|
||||
#: allianceauth/srp/templates/srp/request.html:35
|
||||
msgid "Create SRP request"
|
||||
msgstr ""
|
||||
msgstr "创建补损请求"
|
||||
|
||||
#: allianceauth/srp/templates/srp/update.html:7
|
||||
#: allianceauth/srp/templates/srp/update.html:16
|
||||
@@ -2387,7 +2388,7 @@ msgstr "上传战报链接"
|
||||
|
||||
#: allianceauth/srp/templates/srp/update.html:22
|
||||
msgid "After Action Report"
|
||||
msgstr ""
|
||||
msgstr "战报"
|
||||
|
||||
#: allianceauth/srp/templates/srp/update.html:31
|
||||
msgid "SRP Fleet Does Not Exist"
|
||||
@@ -2395,7 +2396,7 @@ msgstr "补损舰队不存在啊,老哥你在好好看看?"
|
||||
|
||||
#: allianceauth/srp/templates/srp/update.html:40
|
||||
msgid "Update AAR link"
|
||||
msgstr ""
|
||||
msgstr "更新战报链接"
|
||||
|
||||
#: allianceauth/srp/views.py:85
|
||||
#, python-format
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import logging
|
||||
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -12,6 +13,7 @@ logger = logging.getLogger(__name__)
|
||||
class MenuConfig(AppConfig):
|
||||
name = "allianceauth.menu"
|
||||
label = "menu"
|
||||
verbose_name = _("Menu")
|
||||
|
||||
def ready(self):
|
||||
from allianceauth.menu.core import smart_sync
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from typing import ClassVar
|
||||
from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
@@ -68,7 +69,7 @@ class MenuItem(models.Model):
|
||||
help_text=_("External URL this menu items will link to"),
|
||||
)
|
||||
|
||||
objects = MenuItemManager()
|
||||
objects: ClassVar[MenuItemManager] = MenuItemManager()
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.text
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
</a>
|
||||
|
||||
{% if item.count >= 1 %}
|
||||
<span class="badge bg-primary m-2 align-self-center{% if not item.is_folder %} me-2{% endif %}">
|
||||
<span class="badge text-bg-primary m-2 align-self-center{% if not item.is_folder %} me-2{% endif %}">
|
||||
{{ item.count }}
|
||||
</span>
|
||||
{% elif item.url %}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
{% load navactive %}
|
||||
{% load auth_notifications %}
|
||||
|
||||
<li class="nav-item {% navactive request 'notifications:' %}" id="menu_item_notifications">
|
||||
<a class="nav-link" href="{% url 'notifications:list' %}">
|
||||
<li class="nav-item" id="menu_item_notifications">
|
||||
<a class="nav-link {% navactive request 'notifications:' %}" href="{% url 'notifications:list' %}">
|
||||
{% with unread_count=request.user|user_unread_notification_count %}
|
||||
<i class="fa-solid fa-bell{% if unread_count %} text-danger{% endif %}"></i>
|
||||
{% endwith %}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<div class="col-auto px-0">
|
||||
<div class="collapse collapse-horizontal" tabindex="-1" id="sidebar">
|
||||
<div>
|
||||
<div class="nav-padding navbar-dark bg-dark text-light px-0 d-flex flex-column overflow-hidden vh-100 {% if not user.is_authenticated %}position-relative{% endif %}">
|
||||
<div class="nav-padding navbar-dark text-bg-dark px-0 d-flex flex-column overflow-hidden vh-100 {% if not user.is_authenticated %}position-relative{% endif %}">
|
||||
{% if user.is_authenticated %}
|
||||
<ul id="sidebar-menu" class="navbar-nav flex-column mb-auto overflow-auto pt-2">
|
||||
<li class="d-flex flex-wrap m-2 p-2 pt-0 pb-0 mt-0 mb-0 me-0 pe-0">
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class NotificationsConfig(AppConfig):
|
||||
name = 'allianceauth.notifications'
|
||||
label = 'notifications'
|
||||
verbose_name = _('Notifications')
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
from typing import ClassVar
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
@@ -56,7 +57,7 @@ class Notification(models.Model):
|
||||
timestamp = models.DateTimeField(auto_now_add=True, db_index=True)
|
||||
viewed = models.BooleanField(default=False, db_index=True)
|
||||
|
||||
objects = NotificationManager()
|
||||
objects: ClassVar[NotificationManager] = NotificationManager()
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.user}: {self.title}"
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" id="unread-tab" data-bs-toggle="tab" data-bs-target="#unread" type="button" role="tab" aria-controls="unread" aria-selected="true">
|
||||
{% translate "Unread" %}
|
||||
<span class="badge bg-secondary">{{ unread|length }}</span>
|
||||
<span class="badge text-bg-secondary">{{ unread|length }}</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="read-tab" data-bs-toggle="tab" data-bs-target="#read" type="button" role="tab" aria-controls="read" aria-selected="false">
|
||||
{% translate "Read" %}
|
||||
<span class="badge bg-secondary">{{ read|length }}</span>
|
||||
<span class="badge text-bg-secondary">{{ read|length }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endblock %}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
</div>
|
||||
|
||||
<div class="card border-{{ notif.level }}">
|
||||
<div class="card-header bg-{{ notif.level }}">
|
||||
<div class="card-header text-bg-{{ notif.level }}">
|
||||
{{ notif.timestamp }}
|
||||
{{ notif.title }}
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class OptimerConfig(AppConfig):
|
||||
name = 'allianceauth.optimer'
|
||||
label = 'optimer'
|
||||
verbose_name = _('Fleet Operations')
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<th class="text-center">{% translate "Operation" %}</th>
|
||||
<th class="text-center">{% translate "Type" %}</th>
|
||||
<th class="text-center">{% translate "Form Up System" %}</th>
|
||||
<th class="text-center">{% translate "EVE Time" %}</th>
|
||||
<th class="text-center">{% translate "EVE time" %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
{% block content %}
|
||||
<div>
|
||||
<div class="text-center mb-3">
|
||||
<div class="badge bg-primary text-start">
|
||||
<b>{% translate "Current Eve Time:" %}</b>
|
||||
<div class="badge text-bg-primary text-start">
|
||||
<b>{% translate "Current EVE time:" %}</b>
|
||||
<span id="current-time"></span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -127,8 +127,8 @@
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the current Eve time as a string
|
||||
* @returns {string} Eve time string
|
||||
* Get the current EVE time as a string
|
||||
* @returns {string} EVE time string
|
||||
*/
|
||||
const updateClock = () => {
|
||||
document.getElementById("current-time").innerHTML = getCurrentEveTimeString();
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class PermissionsToolConfig(AppConfig):
|
||||
name = 'allianceauth.permissions_tool'
|
||||
label = 'permissions_tool'
|
||||
verbose_name = _('Permissions Audit')
|
||||
|
||||
@@ -61,6 +61,7 @@ CELERYBEAT_SCHEDULE = {
|
||||
'esi_cleanup_token': {
|
||||
'task': 'esi.tasks.cleanup_token',
|
||||
'schedule': crontab(minute='0', hour='0'),
|
||||
'apply_offset': True,
|
||||
},
|
||||
'run_model_update': {
|
||||
'task': 'allianceauth.eveonline.tasks.run_model_update',
|
||||
|
||||
@@ -1,49 +1,48 @@
|
||||
[program:beat]
|
||||
command={{ celery }} -A {{ project_name }} beat
|
||||
directory={{ project_directory }}
|
||||
user=allianceserver
|
||||
stdout_logfile={{ project_directory }}/log/beat.log
|
||||
stderr_logfile={{ project_directory }}/log/beat.log
|
||||
autostart=true
|
||||
autorestart=true
|
||||
startsecs=10
|
||||
priority=998
|
||||
command = {{ celery }} -A {{ project_name }} beat
|
||||
directory = {{ project_directory }}
|
||||
user = allianceserver
|
||||
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
autostart = true
|
||||
autorestart = true
|
||||
startsecs = 10
|
||||
priority = 998
|
||||
|
||||
[program:worker]
|
||||
command={{ celery }} -A {{ project_name }} worker --pool=threads --concurrency=5 -n %(program_name)s_%(process_num)02d
|
||||
directory={{ project_directory }}
|
||||
user=allianceserver
|
||||
numprocs=1
|
||||
process_name=%(program_name)s_%(process_num)02d
|
||||
stdout_logfile={{ project_directory }}/log/worker.log
|
||||
stderr_logfile={{ project_directory }}/log/worker.log
|
||||
autostart=true
|
||||
autorestart=true
|
||||
startsecs=10
|
||||
command = {{ celery }} -A {{ project_name }} worker --pool=threads --concurrency=5 -n %(program_name)s_%(process_num)02d
|
||||
directory = {{ project_directory }}
|
||||
user = allianceserver
|
||||
numprocs = 1
|
||||
process_name = %(program_name)s_%(process_num)02d
|
||||
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
autostart = true
|
||||
autorestart = true
|
||||
startsecs = 10
|
||||
stopwaitsecs = 600
|
||||
killasgroup=true
|
||||
priority=998
|
||||
killasgroup = true
|
||||
priority = 998
|
||||
|
||||
{% if gunicorn %}
|
||||
[program:gunicorn]
|
||||
user = allianceserver
|
||||
directory={{ project_directory }}
|
||||
command={{ gunicorn }} {{ project_name }}.wsgi --workers=3 --timeout 120
|
||||
stdout_logfile={{ project_directory }}/log/gunicorn.log
|
||||
stderr_logfile={{ project_directory }}/log/gunicorn.log
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stopsignal=INT
|
||||
|
||||
directory = {{ project_directory }}
|
||||
command = {{ gunicorn }} {{ project_name }}.wsgi --workers=3 --timeout 120
|
||||
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
autostart = true
|
||||
autorestart = true
|
||||
stopsignal = INT
|
||||
{% endif %}
|
||||
|
||||
[eventlistener:memmon]
|
||||
command={{ memmon }} -p worker_00=256MB -p gunicorn=256MB
|
||||
directory={{ project_directory }}
|
||||
events=TICK_60
|
||||
stdout_logfile={{ project_directory }}/log/memmon.log
|
||||
stderr_logfile={{ project_directory }}/log/memmon.log
|
||||
command = {{ memmon }} -p worker_00=256MB -p gunicorn=256MB
|
||||
directory = {{ project_directory }}
|
||||
events = TICK_60
|
||||
stdout_logfile = {{ project_directory }}/log/memmon.log
|
||||
stderr_logfile = {{ project_directory }}/log/memmon.log
|
||||
|
||||
[group:{{ project_name }}]
|
||||
programs=beat,worker{% if gunicorn %},gunicorn{% endif %}
|
||||
priority=999
|
||||
programs = beat,worker{% if gunicorn %},gunicorn{% endif %}
|
||||
priority = 999
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class ServicesConfig(AppConfig):
|
||||
name = 'allianceauth.services'
|
||||
label = 'services'
|
||||
verbose_name = _('Services')
|
||||
|
||||
def ready(self):
|
||||
from . import signals
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class DiscordServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.discord'
|
||||
label = 'discord'
|
||||
verbose_name = _('Discord Service')
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import logging
|
||||
from typing import Optional
|
||||
from typing import ClassVar, Optional
|
||||
|
||||
from requests.exceptions import HTTPError
|
||||
|
||||
@@ -59,7 +59,7 @@ class DiscordUser(models.Model):
|
||||
help_text='Date & time this service account was activated'
|
||||
)
|
||||
|
||||
objects = DiscordUserManager()
|
||||
objects: ClassVar[DiscordUserManager] = DiscordUserManager()
|
||||
|
||||
class Meta:
|
||||
permissions = (
|
||||
|
||||
@@ -439,6 +439,7 @@ class TestUserHasAccount(NoSocketsTestCase):
|
||||
|
||||
def test_return_false_if_user_does_not_exist(self):
|
||||
my_user = User(username='Dummy')
|
||||
my_user.save()
|
||||
self.assertFalse(DiscordUser.objects.user_has_account(my_user))
|
||||
|
||||
def test_return_false_if_not_called_with_user_object(self):
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class DiscourseServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.discourse'
|
||||
label = 'discourse'
|
||||
verbose_name = _('Discourse Service')
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block active %}
|
||||
<span class="badge bg-success">
|
||||
<span class="badge text-bg-success">
|
||||
{% translate "SSO login active" %}
|
||||
</span>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class ExampleServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.example'
|
||||
label = 'example_service'
|
||||
verbose_name = _('Example Service')
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class Ips4ServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.ips4'
|
||||
label = 'ips4'
|
||||
verbose_name = _('IPS4 Service')
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class MumbleServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.mumble'
|
||||
label = 'mumble'
|
||||
verbose_name = _('Mumble Service')
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import random
|
||||
import string
|
||||
from typing import ClassVar
|
||||
from passlib.hash import bcrypt_sha256
|
||||
|
||||
from django.db import models
|
||||
@@ -116,7 +117,7 @@ class MumbleUser(AbstractServiceModel):
|
||||
help_text="Timestamp of the users Last Disconnection to Mumble"
|
||||
)
|
||||
|
||||
objects = MumbleManager()
|
||||
objects: ClassVar[MumbleManager] = MumbleManager()
|
||||
|
||||
def __str__(self):
|
||||
return self.username
|
||||
|
||||
@@ -48,9 +48,9 @@
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if request.user.is_superuser %}
|
||||
<a class="btn btn-primary" type="button" id="btnMumbleConnectionHistory" href="{% url 'mumble:connection_history' %}" title="{% translate 'Mumble Connection History' %}">
|
||||
<i class="fa-solid fa-clock-rotate-left"></i> History
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if perms.mumble.view_connection_history %}
|
||||
<a class="btn btn-primary" type="button" id="btnMumbleConnectionHistory" href="{% url 'mumble:connection_history' %}" title="{% translate 'Mumble Connection History' %}">
|
||||
<i class="fa-solid fa-clock-rotate-left"></i> History
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class OpenfireServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.openfire'
|
||||
label = 'openfire'
|
||||
verbose_name = _('Openfire Service')
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class Phpbb3ServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.phpbb3'
|
||||
label = 'phpbb3'
|
||||
verbose_name = _('phpBB3 Service')
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class SmfServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.smf'
|
||||
label = 'smf'
|
||||
verbose_name = _('SMF Service')
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class Teamspeak3ServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.teamspeak3'
|
||||
label = 'teamspeak3'
|
||||
verbose_name = _('TeamSpeak 3 Service')
|
||||
|
||||
def ready(self):
|
||||
from . import signals
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class XenforoServiceConfig(AppConfig):
|
||||
name = 'allianceauth.services.modules.xenforo'
|
||||
label = 'xenforo'
|
||||
verbose_name = _('Xenforo Service')
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div class="card text-center m-2" style="min-width: 18rem; min-height: 18rem;">
|
||||
<div class="card text-center mx-2 mb-3" style="min-width: 18rem; min-height: 18rem;">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{% block title %}{% endblock title %}</h5>
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class SRPConfig(AppConfig):
|
||||
name = 'allianceauth.srp'
|
||||
label = 'srp'
|
||||
verbose_name = _('Ship Replacement')
|
||||
|
||||
@@ -92,11 +92,14 @@ ESC to cancel{% endblocktranslate %}" id="blah"></i></th>
|
||||
{{ srpfleetrequest.character.alliance.alliance_ticker }}
|
||||
{% endif %}
|
||||
[{{ srpfleetrequest.character.corporation.corporation_ticker }}]
|
||||
{{ srpfleetrequest.character.character_name }} <i class="copy-text-fa-icon far fa-copy" data-clipboard-text="{{ srpfleetrequest.character.character_name }}"></i>
|
||||
{{ srpfleetrequest.character.character_name }}
|
||||
<sup>
|
||||
<i class="copy-text-fa-icon far fa-copy" data-clipboard-text="{{ srpfleetrequest.character.character_name }}"></i>
|
||||
</sup>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ srpfleetrequest.killboard_link }}"
|
||||
target="_blank" class="badge bg-warning">{% translate "Link" %}</a>
|
||||
target="_blank" class="badge text-bg-warning">{% translate "Link" %}</a>
|
||||
</td>
|
||||
<td>{{ srpfleetrequest.additional_info }}</td>
|
||||
<td>{{ srpfleetrequest.srp_ship_name }}</td>
|
||||
@@ -105,15 +108,15 @@ ESC to cancel{% endblocktranslate %}" id="blah"></i></th>
|
||||
<td data-sort="{{ srpfleetrequest.post_time | date:"Y-m-d H:i" }}">{{ srpfleetrequest.post_time | date:"Y-M-d H:i" }}</td>
|
||||
<td>
|
||||
{% if srpfleetrequest.srp_status == "Approved" %}
|
||||
<div class="badge bg-success">
|
||||
<div class="badge text-bg-success">
|
||||
{% translate "Approved" %}
|
||||
</div>
|
||||
{% elif srpfleetrequest.srp_status == "Rejected" %}
|
||||
<div class="badge bg-danger">
|
||||
<div class="badge text-bg-danger">
|
||||
{% translate "Rejected" %}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="badge bg-warning">
|
||||
<div class="badge text-bg-warning">
|
||||
{% translate "Pending" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -239,13 +242,19 @@ ESC to cancel{% endblocktranslate %}" id="blah"></i></th>
|
||||
}
|
||||
});
|
||||
|
||||
// Non-Orderable columns
|
||||
const nonOrderableTargets = [1];
|
||||
{% if perms.auth.srp_management %}
|
||||
nonOrderableTargets.push(8);
|
||||
{% endif %}
|
||||
|
||||
elementTableSrpList.DataTable({
|
||||
language: {url: '{{ DT_LANG_PATH }}'},
|
||||
"order": [[ 6, "asc" ]],
|
||||
"paging": false,
|
||||
"columnDefs": [
|
||||
{
|
||||
"targets": [1, 8],
|
||||
"targets": nonOrderableTargets,
|
||||
"orderable": false
|
||||
},
|
||||
{
|
||||
|
||||
@@ -61,20 +61,20 @@
|
||||
<td>{{ srpfleet.fleet_time | date:"Y-m-d H:i" }}</td>
|
||||
<td>{{ srpfleet.fleet_doctrine }}</td>
|
||||
<td>
|
||||
<div class="badge bg-success">
|
||||
<div class="badge text-bg-success">
|
||||
{{ srpfleet.fleet_commander.character_name }}
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
{% if srpfleet.fleet_srp_aar_link %}
|
||||
<a href="{{ srpfleet.fleet_srp_aar_link }}" target="_blank" class="badge bg-primary">{% translate "Link" %}</a>
|
||||
<a href="{{ srpfleet.fleet_srp_aar_link }}" target="_blank" class="badge text-bg-primary">{% translate "Link" %}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if srpfleet.fleet_srp_code %}
|
||||
<a class="badge bg-warning" href="{% url 'srp:request' srpfleet.fleet_srp_code %}">{{ srpfleet.fleet_srp_code }}</a>
|
||||
<a class="badge text-bg-warning" href="{% url 'srp:request' srpfleet.fleet_srp_code %}">{{ srpfleet.fleet_srp_code }}</a>
|
||||
{% else %}
|
||||
<div class="badge bg-danger">
|
||||
<div class="badge text-bg-danger">
|
||||
{% translate "Disabled" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -83,17 +83,17 @@
|
||||
|
||||
<td>
|
||||
{% if srpfleet.fleet_srp_status == "" %}
|
||||
<div class="badge bg-warning">
|
||||
<div class="badge text-bg-warning">
|
||||
{% translate "Pending" %}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="badge bg-success">
|
||||
<div class="badge text-bg-success">
|
||||
{% translate "Completed" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<div class="badge bg-warning">{{ srpfleet.pending_requests }}</div>
|
||||
<div class="badge text-bg-warning">{{ srpfleet.pending_requests }}</div>
|
||||
</td>
|
||||
<td class="text-end text-nowrap">
|
||||
<a href="{% url 'srp:fleet' srpfleet.id %}" class="btn btn-primary btn-sm m-1" title="View">
|
||||
|
||||
@@ -172,7 +172,7 @@ ul.list-group.list-group-horizontal > li.list-group-item {
|
||||
}
|
||||
}
|
||||
|
||||
/* eve time in navbar
|
||||
/* EVE time in navbar
|
||||
------------------------------------------------------------------------------------- */
|
||||
@media all {
|
||||
.nav-item-eve-time .eve-time-wrapper {
|
||||
|
||||
@@ -14,7 +14,7 @@ $(document).ready(() => {
|
||||
};
|
||||
|
||||
/**
|
||||
* Start the Eve time clock in the top menu bar
|
||||
* Start the EVE time clock in the top menu bar
|
||||
*/
|
||||
setInterval(() => {
|
||||
renderClock($('.eve-time-wrapper .eve-time-clock'));
|
||||
|
||||
@@ -28,7 +28,7 @@ const getDurationString = (duration) => { // eslint-disable-line no-unused-vars
|
||||
};
|
||||
|
||||
/**
|
||||
* returns the current eve time as a formatted string
|
||||
* returns the current EVE time as a formatted string
|
||||
*
|
||||
* condition:
|
||||
* only if moment.js is loaded before,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{% load admin_status %}
|
||||
|
||||
<div
|
||||
class="progress-bar bg-{{ level }} task-status-progress-bar"
|
||||
class="progress-bar text-bg-{{ level }} task-status-progress-bar"
|
||||
role="progressbar"
|
||||
aria-valuenow="{% decimal_widthratio tasks_count tasks_total 100 %}"
|
||||
aria-valuemin="0"
|
||||
|
||||
@@ -12,11 +12,7 @@
|
||||
<ul class="list-group">
|
||||
{% for notif in notifications %}
|
||||
<li class="list-group-item">
|
||||
{% if notif.state == 'opened' %}
|
||||
<span class="badge bg-success me-2">{% translate "Open" %}</span>
|
||||
{% else %}
|
||||
<span class="badge bg-danger me-2">{% translate "Closed" %}</span>
|
||||
{% endif %}
|
||||
<span class="badge text-bg-success me-2">{% translate "Open" %}</span>
|
||||
<a href="{{ notif.web_url }}" target="_blank">#{{ notif.iid }} {{ notif.title }}</a>
|
||||
</li>
|
||||
{% empty %}
|
||||
@@ -28,13 +24,13 @@
|
||||
|
||||
<div class="text-end pt-3">
|
||||
<a href="https://gitlab.com/allianceauth/allianceauth/issues" target="_blank" class="me-1 text-decoration-none">
|
||||
<span class="badge" style="background-color: rgb(230 83 40);">
|
||||
<span class="badge text-bg-danger">
|
||||
<i class="fab fa-gitlab" aria-hidden="true"></i>
|
||||
{% translate 'Powered by GitLab' %}
|
||||
</span>
|
||||
</a>
|
||||
<a href="https://discord.com/invite/fjnHAmk" target="_blank" class="text-decoration-none">
|
||||
<span class="badge" style="background-color: rgb(110 133 211);">
|
||||
<span class="badge text-bg-info">
|
||||
<i class="fab fa-discord" aria-hidden="true"></i>
|
||||
{% translate 'Support Discord' %}
|
||||
</span>
|
||||
@@ -62,7 +58,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="list-group-item bg-{% if latest_patch %}success{% elif latest_minor %}warning{% else %}danger{% endif %} w-100">
|
||||
<li class="list-group-item text-bg-{% if latest_patch %}success{% elif latest_minor %}warning{% else %}danger{% endif %} w-100">
|
||||
<a class="btn h-100 w-100" href="https://gitlab.com/allianceauth/allianceauth/-/releases/v{{ latest_patch_version }}">
|
||||
<h5 class="list-group-item-heading">{% translate "Latest Stable" %}</h5>
|
||||
|
||||
@@ -75,7 +71,7 @@
|
||||
</li>
|
||||
|
||||
{% if latest_beta %}
|
||||
<li class="list-group-item bg-info w-100">
|
||||
<li class="list-group-item text-bg-info w-100">
|
||||
<a class="btn h-100 w-100" href="https://gitlab.com/allianceauth/allianceauth/-/releases/v{{ latest_beta_version }}">
|
||||
<h5 class="list-group-item-heading">{% translate "Latest Pre-Release" %}</h5>
|
||||
|
||||
|
||||
@@ -12,11 +12,10 @@
|
||||
<!-- End Required meta tags -->
|
||||
|
||||
<!-- Meta tags -->
|
||||
<!-- TODO Bundle all the site specific stuff up into its own template for easy override -->
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
{% include 'allianceauth/opengraph.html' %}
|
||||
{% include 'allianceauth/icons.html' %}
|
||||
<!-- Meta tags -->
|
||||
|
||||
<title>{% block title %}{% block page_title %}{% endblock page_title %} - {{ SITE_NAME }}{% endblock title %}</title>
|
||||
|
||||
{% theme_css %}
|
||||
@@ -25,12 +24,11 @@
|
||||
{% include 'bundles/auth-framework-css.html' %}
|
||||
|
||||
<style>
|
||||
.navbar-toggler.collapsed{
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.nav-padding {
|
||||
padding-top: {% header_padding_size %} !important;
|
||||
@media all {
|
||||
.nav-padding {
|
||||
margin-top: {% header_padding_size %} !important;
|
||||
max-height: calc(100vh - {% header_padding_size %}) !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -41,7 +39,7 @@
|
||||
|
||||
<body>
|
||||
<!-- Top Menu, Blocks don't work in "include" tagged views -->
|
||||
<nav class="navbar navbar-expand-lg navbar-dark fixed-top bg-primary">
|
||||
<nav class="navbar navbar-expand-lg navbar-dark fixed-top text-bg-primary">
|
||||
<div class="container-fluid justify-content-start">
|
||||
<a class="navbar-brand" data-bs-toggle="collapse" data-bs-target="#sidebar" role="button">
|
||||
<i class="fa-solid fa-bars ms-2 me-2"></i>
|
||||
@@ -63,6 +61,11 @@
|
||||
</ul>
|
||||
|
||||
<ul id="nav-right-character-control" class="nav navbar-nav">
|
||||
<li class="nav-item ms-lg-2 py-2 py-lg-1 col-12 col-lg-auto d-none">
|
||||
<div class="vr d-none d-lg-flex h-100 mx-2 text-white-50"></div>
|
||||
<hr class="d-lg-none my-2 text-body text-white-50">
|
||||
</li>
|
||||
|
||||
{% block header_nav_user_character_control %} <!-- Default to add char and swap main -->
|
||||
{% include 'allianceauth/top-menu-rh-default.html' %}
|
||||
{% endblock %}
|
||||
|
||||
8
allianceauth/templates/allianceauth/opengraph.html
Normal file
8
allianceauth/templates/allianceauth/opengraph.html
Normal file
@@ -0,0 +1,8 @@
|
||||
{% load static %}
|
||||
|
||||
<meta property="og:title" content="{{ SITE_NAME }}">
|
||||
<meta property="og:image" content="{{ SITE_URL }}{% static 'allianceauth/icons/apple-touch-icon.png' %}">
|
||||
<meta property="og:description" content="Alliance Auth - An auth system for EVE Online to help in-game organizations manage online service access.">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:site_name" content="{{ request.META.HTTP_HOST }}">
|
||||
<meta property="og:url" content="{{ request.path }}">
|
||||
@@ -2,7 +2,7 @@
|
||||
{% if user.is_authenticated %}
|
||||
<li class="nav-item">
|
||||
<a href="{% url 'authentication:add_character' %}" class="nav-link" title="{% translate 'Add Character' %}">
|
||||
<i class="fa-solid fa-plus"></i>
|
||||
<i class="fa-solid fa-user-plus"></i>
|
||||
<span class="d-lg-none d-md-inline m-2">{% translate "Add Character" %}</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="collapse navbar-collapse auth-menus-collapse">
|
||||
<ul class="nav navbar-nav navbar-right navbar-pills">
|
||||
<li class="nav-item-eve-time">
|
||||
<div class="eve-time-wrapper">{% translate "Eve Time" %}: <span class="eve-time-clock"></span></div>
|
||||
<div class="eve-time-wrapper">{% translate "EVE time" %}: <span class="eve-time-clock"></span></div>
|
||||
</li>
|
||||
|
||||
{% if user.is_authenticated %}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{% load static %}
|
||||
|
||||
<img src="{% static 'allianceauth/images/auth-logo.svg' %}" width="{{ logo_width|default:"128px" }}" height="{% if logo_height %}{{ logo_ }}{% else %}{{ logo_width|default:"128px" }}{% endif %}" alt="{{ SITE_NAME }}">
|
||||
<img src="{% static 'allianceauth/images/auth-logo.svg' %}" width="{{ logo_width|default:"128px" }}" height="{% if logo_height %}{{ logo_height }}{% else %}{{ logo_width|default:"128px" }}{% endif %}" alt="{{ SITE_NAME }}">
|
||||
|
||||
@@ -67,6 +67,26 @@ def get_datatables_language_static(language: str) -> str:
|
||||
|
||||
return static_url
|
||||
|
||||
@register.simple_tag
|
||||
def get_relative_datatables_language_path(language: str) -> str:
|
||||
"""
|
||||
Get the correct language code URL for DataTables (relative path to the static folder)
|
||||
|
||||
:param language: Django's language code
|
||||
:type language: str
|
||||
:return: Mapped language code
|
||||
:rtype: str
|
||||
"""
|
||||
|
||||
mapped_language = get_datatable_language_code(language)
|
||||
static_url = (
|
||||
f"allianceauth/libs/DataTables/Plugins/2.2.1/i18n/{mapped_language}.json"
|
||||
if mapped_language
|
||||
else ""
|
||||
)
|
||||
|
||||
return static_url
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def get_momentjs_language_static(language: str) -> str:
|
||||
@@ -88,3 +108,24 @@ def get_momentjs_language_static(language: str) -> str:
|
||||
)
|
||||
|
||||
return static_url
|
||||
|
||||
@register.simple_tag
|
||||
def get_relative_momentjs_language_path(language: str) -> str:
|
||||
"""
|
||||
Get the correct language code URL for Moment.JS (relative path to the static folder)
|
||||
|
||||
:param language: Django's language code
|
||||
:type language: str
|
||||
:return: Mapped language code path
|
||||
:rtype: str
|
||||
"""
|
||||
|
||||
mapped_language = get_momentjs_language_code(language)
|
||||
|
||||
static_url = (
|
||||
f"allianceauth/libs/moment.js/2.29.4/locale/{mapped_language}.js"
|
||||
if mapped_language
|
||||
else ""
|
||||
)
|
||||
|
||||
return static_url
|
||||
|
||||
@@ -78,6 +78,13 @@ class AuthUtils:
|
||||
except State.DoesNotExist:
|
||||
return cls.create_state('Member', 100, disconnect_signals=True)
|
||||
|
||||
@classmethod
|
||||
def get_blue_state(cls):
|
||||
try:
|
||||
return State.objects.get(name='Blue')
|
||||
except State.DoesNotExist:
|
||||
return cls.create_state('Blue', 50, disconnect_signals=True)
|
||||
|
||||
@classmethod
|
||||
def get_guest_state(cls):
|
||||
cls.disconnect_signals()
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class TimerBoardConfig(AppConfig):
|
||||
name = 'allianceauth.timerboard'
|
||||
label = 'timerboard'
|
||||
verbose_name = _('Structure Timers')
|
||||
|
||||
@@ -66,7 +66,7 @@ class TimerForm(forms.ModelForm):
|
||||
future_time = datetime.timedelta(days=days_left, hours=hours_left, minutes=minutes_left)
|
||||
current_time = timezone.now()
|
||||
eve_time = current_time + future_time
|
||||
logger.debug(f"Determined timer eve time is {eve_time} - current time {current_time}, adding {future_time}")
|
||||
logger.debug(f"Determined timer EVE time is {eve_time} - current time {current_time}, adding {future_time}")
|
||||
elif absolute_time:
|
||||
# Use absolute time
|
||||
eve_time = absolute_time
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.16 on 2025-03-26 20:53
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('timerboard', '0007_alter_timer_structure'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='timer',
|
||||
name='timer_type',
|
||||
field=models.CharField(choices=[('UNSPECIFIED', 'Not Specified'), ('SHIELD', 'Shield'), ('ARMOR', 'Armor'), ('HULL', 'Hull'), ('FINAL', 'Final'), ('ANCHORING', 'Anchoring'), ('UNANCHORING', 'Unanchoring'), ('ABANDONED', 'Abandoned'), ('THEFT', 'Theft')], default='UNSPECIFIED', max_length=254),
|
||||
),
|
||||
]
|
||||
@@ -57,6 +57,7 @@ class Timer(models.Model):
|
||||
ANCHORING = "ANCHORING", _("Anchoring")
|
||||
UNANCHORING = "UNANCHORING", _("Unanchoring")
|
||||
ABANDONED = "ABANDONED", _("Abandoned")
|
||||
THEFT = "THEFT", _("Theft")
|
||||
|
||||
details = models.CharField(max_length=254, default="")
|
||||
system = models.CharField(max_length=254, default="")
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<th class="text-center">{% translate "Timer" %}</th>
|
||||
<th class="text-center">{% translate "Type" %}</th>
|
||||
<th class="text-center">{% translate "System" %}</th>
|
||||
<th class="text-center">{% translate "EVE Time" %}</th>
|
||||
<th class="text-center">{% translate "EVE time" %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -30,17 +30,17 @@
|
||||
</td>
|
||||
<td class="text-center" nowrap>
|
||||
{% if timer.objective == "Hostile" %}
|
||||
<div class="badge bg-danger">
|
||||
<div class="badge text-bg-danger">
|
||||
{% translate "Hostile" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if timer.objective == "Friendly" %}
|
||||
<div class="badge bg-primary">
|
||||
<div class="badge text-bg-primary">
|
||||
{% translate "Friendly" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if timer.objective == "Neutral" %}
|
||||
<div class="badge bg-secondary">
|
||||
<div class="badge text-bg-secondary">
|
||||
{% translate "Neutral" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<th class="text-center">{% translate "Objective" %}</th>
|
||||
<th class="text-center">{% translate "System" %}</th>
|
||||
<th class="text-center">{% translate "Structure" %}</th>
|
||||
<th class="text-center">{% translate "Eve Time" %}</th>
|
||||
<th class="text-center">{% translate "EVE time" %}</th>
|
||||
<th class="text-center">{% translate "Local Time" %}</th>
|
||||
<th class="text-center">{% translate "Creator" %}</th>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
<tbody>
|
||||
{% for timer in timers %}
|
||||
<tr class="{% if timer.important == True %}bg-danger bg-opacity-25{% else %}bg-info bg-opacity-25{% endif %}">
|
||||
<tr class="{% if timer.important == True %}text-bg-danger bg-opacity-50{% else %}text-bg-info bg-opacity-50{% endif %}">
|
||||
<td style="width: 150px;" class="text-center">
|
||||
{{ timer.details }}
|
||||
|
||||
@@ -34,15 +34,15 @@
|
||||
<td class="text-center">
|
||||
{% comment %} Objective: Hostile (BG: Danger) {% endcomment %}
|
||||
{% if timer.objective == "Hostile" %}
|
||||
<div class="badge bg-danger">
|
||||
<div class="badge text-bg-danger">
|
||||
|
||||
{% comment %} Objective: Friendly (BG: Primare) {% endcomment %}
|
||||
{% elif timer.objective == "Friendly" %}
|
||||
<div class="badge bg-primary">
|
||||
<div class="badge text-bg-primary">
|
||||
|
||||
{% comment %} Objective: Neutral (BG: Secondary) {% endcomment %}
|
||||
{% elif timer.objective == "Neutral" %}
|
||||
<div class="badge bg-secondary">
|
||||
<div class="badge text-bg-secondary">
|
||||
{% endif %}
|
||||
|
||||
{{ timer.get_objective_display }}
|
||||
@@ -54,7 +54,7 @@
|
||||
</td>
|
||||
|
||||
<td class="text-center">
|
||||
<div class="badge bg-{{ timer.bg_modifier }}">
|
||||
<div class="badge text-bg-{{ timer.bg_modifier }}">
|
||||
{{ timer.get_structure_display }}
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -28,8 +28,8 @@
|
||||
{% block content %}
|
||||
<div class="allianceauth-timerboard">
|
||||
<div class="col-lg-12 text-center mb-3">
|
||||
<div class="badge bg-primary text-start">
|
||||
<span>{% translate "Current Eve Time:" %}</span>
|
||||
<div class="badge text-bg-primary text-start">
|
||||
<span>{% translate "Current EVE time:" %}</span>
|
||||
<span id="current-time"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
PROTOCOL=https://
|
||||
AUTH_SUBDOMAIN=%AUTH_SUBDOMAIN%
|
||||
DOMAIN=%DOMAIN%
|
||||
AA_DOCKER_TAG=registry.gitlab.com/allianceauth/allianceauth/auth:v4.6.4
|
||||
AA_DOCKER_TAG=registry.gitlab.com/allianceauth/allianceauth/auth:v4.7.0
|
||||
|
||||
# Nginx Proxy Manager
|
||||
PROXY_HTTP_PORT=80
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
FROM python:3.11-slim
|
||||
ARG AUTH_VERSION=v4.6.4
|
||||
ARG AUTH_VERSION=v4.7.0
|
||||
ARG AUTH_PACKAGE=allianceauth==${AUTH_VERSION}
|
||||
ENV AUTH_USER=allianceauth
|
||||
ENV AUTH_GROUP=allianceauth
|
||||
|
||||
BIN
docs/_static/images/promotion/SampleInstallation-Darkly.png
vendored
Normal file
BIN
docs/_static/images/promotion/SampleInstallation-Darkly.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 206 KiB |
BIN
docs/_static/images/promotion/SampleInstallation-Flatly.png
vendored
Normal file
BIN
docs/_static/images/promotion/SampleInstallation-Flatly.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 206 KiB |
@@ -81,7 +81,7 @@ Example implementation for a celery chain:
|
||||
|
||||
```python
|
||||
from allianceauth.services.hooks import get_extension_logger
|
||||
from celery import shared_task, chain
|
||||
from celery import shared_task, group
|
||||
|
||||
logger = get_extension_logger(__name__)
|
||||
|
||||
@@ -98,18 +98,23 @@ def long_runner():
|
||||
task_signature = example.si()
|
||||
my_tasks.append(task_signature)
|
||||
|
||||
chain(my_tasks).delay()
|
||||
group(my_tasks).delay()
|
||||
```
|
||||
|
||||
In this example, we first add 10 example tasks that need to run one after the other to a list. This can be done by creating a so-called signature for a task. Those signatures are a kind of wrapper for tasks and can be used in various ways to compose work flow for tasks.
|
||||
|
||||
The list of task signatures is then converted to a chain and started asynchronously.
|
||||
|
||||
:::{note}
|
||||
In this example we import group to execute all tasks independently.
|
||||
If you wish to run them in order (and stop if a tasks fail) you can use `celery.chain` instead of `celery.group`
|
||||
|
||||
For more information on signature and work flows see the official documentation on [Canvas](https://docs.celeryproject.org/en/latest/userguide/canvas.html).
|
||||
:::
|
||||
|
||||
:::{hint}
|
||||
In our example we use ``si()``, which is a shortcut for "immutable signatures" and prevents us from having to deal with result sharing between tasks.
|
||||
|
||||
For more information on signature and work flows see the official documentation on `Canvas <https://docs.celeryproject.org/en/latest/userguide/canvas.html>`_.
|
||||
|
||||
In this context, please note that Alliance Auth currently only supports chaining because all other variants require a so-called results back, which Alliance Auth does not have.
|
||||
:::
|
||||
|
||||
|
||||
Reference in New Issue
Block a user