mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-05 06:36:19 +01:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2bd2c09c23 | ||
|
|
c1cf859ec9 | ||
|
|
1ebf864998 | ||
|
|
0948e34e48 | ||
|
|
f9a1ea9c83 | ||
|
|
d02a8ebc1b | ||
|
|
5c2625b648 | ||
|
|
13174d006e | ||
|
|
2c59cc4cc3 | ||
|
|
41c81d3226 | ||
|
|
2ec7d3b4d9 | ||
|
|
b607b73598 | ||
|
|
f52791cd1f | ||
|
|
d829facbd4 | ||
|
|
44ac3a9ff2 |
@@ -1,7 +1,7 @@
|
|||||||
# This will make sure the app is always imported when
|
# This will make sure the app is always imported when
|
||||||
# Django starts so that shared_task will use this app.
|
# Django starts so that shared_task will use this app.
|
||||||
|
|
||||||
__version__ = '2.9.1'
|
__version__ = '2.9.2'
|
||||||
__title__ = 'Alliance Auth'
|
__title__ = 'Alliance Auth'
|
||||||
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
||||||
NAME = f'{__title__} v{__version__}'
|
NAME = f'{__title__} v{__version__}'
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ def run_model_update():
|
|||||||
for alliance in EveAllianceInfo.objects.all().values('alliance_id'):
|
for alliance in EveAllianceInfo.objects.all().values('alliance_id'):
|
||||||
update_alliance.apply_async(args=[alliance['alliance_id']], priority=TASK_PRIORITY)
|
update_alliance.apply_async(args=[alliance['alliance_id']], priority=TASK_PRIORITY)
|
||||||
|
|
||||||
#update existing character models if required
|
|
||||||
# update existing character models
|
# update existing character models
|
||||||
character_ids = EveCharacter.objects.all().values_list('character_id', flat=True)
|
character_ids = EveCharacter.objects.all().values_list('character_id', flat=True)
|
||||||
for character_ids_chunk in chunks(character_ids, CHUNK_SIZE):
|
for character_ids_chunk in chunks(character_ids, CHUNK_SIZE):
|
||||||
@@ -67,7 +66,7 @@ def update_character_chunk(character_ids_chunk: list):
|
|||||||
character_names = providers.provider.client.Universe\
|
character_names = providers.provider.client.Universe\
|
||||||
.post_universe_names(ids=character_ids_chunk).result()
|
.post_universe_names(ids=character_ids_chunk).result()
|
||||||
except:
|
except:
|
||||||
logger.error("Failed to bulk update characters. Attempting single updates")
|
logger.info("Failed to bulk update characters. Attempting single updates")
|
||||||
for character_id in character_ids_chunk:
|
for character_id in character_ids_chunk:
|
||||||
update_character.apply_async(
|
update_character.apply_async(
|
||||||
args=[character_id], priority=TASK_PRIORITY
|
args=[character_id], priority=TASK_PRIORITY
|
||||||
|
|||||||
Binary file not shown.
@@ -2,12 +2,12 @@
|
|||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Erik Kalkoken <erik.kalkoken@gmail.com>, 2020
|
# Erik Kalkoken <erik.kalkoken@gmail.com>, 2020
|
||||||
# Peter Pfeufer <rounon.dax@terra-nanotech.de>, 2021
|
|
||||||
# Joel Falknau <ozirascal@gmail.com>, 2021
|
# Joel Falknau <ozirascal@gmail.com>, 2021
|
||||||
#
|
# Peter Pfeufer <rounon.dax@terra-nanotech.de>, 2021
|
||||||
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -15,7 +15,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-10-26 18:36+1000\n"
|
"POT-Creation-Date: 2021-10-26 18:36+1000\n"
|
||||||
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
||||||
"Last-Translator: Joel Falknau <ozirascal@gmail.com>, 2021\n"
|
"Last-Translator: Peter Pfeufer <rounon.dax@terra-nanotech.de>, 2021\n"
|
||||||
"Language-Team: German (https://www.transifex.com/alliance-auth/teams/107430/de/)\n"
|
"Language-Team: German (https://www.transifex.com/alliance-auth/teams/107430/de/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@@ -2132,7 +2132,7 @@ msgstr "Strukturen Typ"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/form.py:62
|
#: allianceauth/timerboard/form.py:62
|
||||||
msgid "Timer Type"
|
msgid "Timer Type"
|
||||||
msgstr ""
|
msgstr "Timer Typ"
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:63
|
#: allianceauth/timerboard/form.py:63
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:33
|
#: allianceauth/timerboard/templates/timerboard/view.html:33
|
||||||
@@ -2163,15 +2163,15 @@ msgstr "Auf Corp beschränkt"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:14
|
#: allianceauth/timerboard/models.py:14
|
||||||
msgid "Not Specified"
|
msgid "Not Specified"
|
||||||
msgstr ""
|
msgstr "Keine Angabe"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:15
|
#: allianceauth/timerboard/models.py:15
|
||||||
msgid "Shield"
|
msgid "Shield"
|
||||||
msgstr ""
|
msgstr "Schild"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:16
|
#: allianceauth/timerboard/models.py:16
|
||||||
msgid "Armor"
|
msgid "Armor"
|
||||||
msgstr ""
|
msgstr "Panzerung"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:17
|
#: allianceauth/timerboard/models.py:17
|
||||||
msgid "Hull"
|
msgid "Hull"
|
||||||
@@ -2179,15 +2179,15 @@ msgstr "Hülle"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:18
|
#: allianceauth/timerboard/models.py:18
|
||||||
msgid "Final"
|
msgid "Final"
|
||||||
msgstr ""
|
msgstr "Final"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:19
|
#: allianceauth/timerboard/models.py:19
|
||||||
msgid "Anchoring"
|
msgid "Anchoring"
|
||||||
msgstr ""
|
msgstr "Ankernd"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:20
|
#: allianceauth/timerboard/models.py:20
|
||||||
msgid "Unanchoring"
|
msgid "Unanchoring"
|
||||||
msgstr ""
|
msgstr "Entankernd"
|
||||||
|
|
||||||
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
||||||
msgid "Delete Timer"
|
msgid "Delete Timer"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-10-26 18:36+1000\n"
|
"POT-Creation-Date: 2021-10-30 14:36+1000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -34,12 +34,12 @@ msgstr ""
|
|||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:74
|
#: allianceauth/authentication/models.py:79
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "State changed to: %s"
|
msgid "State changed to: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:75
|
#: allianceauth/authentication/models.py:80
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Your user's state is now: %(state)s"
|
msgid "Your user's state is now: %(state)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -58,29 +58,29 @@ msgid ""
|
|||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:81
|
#: allianceauth/authentication/templates/authentication/dashboard.html:102
|
||||||
msgid "No main character set."
|
msgid "No main character set."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:88
|
#: allianceauth/authentication/templates/authentication/dashboard.html:109
|
||||||
msgid "Add Character"
|
msgid "Add Character"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:92
|
#: allianceauth/authentication/templates/authentication/dashboard.html:113
|
||||||
msgid "Change Main"
|
msgid "Change Main"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:101
|
#: allianceauth/authentication/templates/authentication/dashboard.html:122
|
||||||
msgid "Group Memberships"
|
msgid "Group Memberships"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:121
|
#: allianceauth/authentication/templates/authentication/dashboard.html:142
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html:23
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html:23
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:41
|
#: allianceauth/hrapplications/templates/hrapplications/view.html:41
|
||||||
msgid "Characters"
|
msgid "Characters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:129
|
#: allianceauth/authentication/templates/authentication/dashboard.html:150
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:73
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:73
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:24
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:24
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:15
|
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:15
|
||||||
@@ -89,13 +89,13 @@ msgstr ""
|
|||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:130
|
#: allianceauth/authentication/templates/authentication/dashboard.html:151
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:23
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:23
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:46
|
#: allianceauth/hrapplications/templates/hrapplications/view.html:46
|
||||||
msgid "Corp"
|
msgid "Corp"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:131
|
#: allianceauth/authentication/templates/authentication/dashboard.html:152
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:76
|
#: allianceauth/corputils/templates/corputils/corpstats.html:76
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:47
|
#: allianceauth/hrapplications/templates/hrapplications/view.html:47
|
||||||
msgid "Alliance"
|
msgid "Alliance"
|
||||||
|
|||||||
Binary file not shown.
@@ -2,12 +2,14 @@
|
|||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# François LACROIX-DURANT <umbre@fallenstarscreations.com>, 2020
|
# François LACROIX-DURANT <umbre@fallenstarscreations.com>, 2020
|
||||||
# Philippe Querin-Laporte <philippe.querin@hotmail.com>, 2020
|
# Philippe Querin-Laporte <philippe.querin@hotmail.com>, 2020
|
||||||
# Keven D. <theenarki@gmail.com>, 2020
|
# Keven D. <theenarki@gmail.com>, 2020
|
||||||
#
|
# Idea ., 2021
|
||||||
|
# Mickael PATTE, 2021
|
||||||
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -15,7 +17,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-10-26 18:36+1000\n"
|
"POT-Creation-Date: 2021-10-26 18:36+1000\n"
|
||||||
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
||||||
"Last-Translator: Keven D. <theenarki@gmail.com>, 2020\n"
|
"Last-Translator: Mickael PATTE, 2021\n"
|
||||||
"Language-Team: French (France) (https://www.transifex.com/alliance-auth/teams/107430/fr_FR/)\n"
|
"Language-Team: French (France) (https://www.transifex.com/alliance-auth/teams/107430/fr_FR/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@@ -69,7 +71,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:81
|
#: allianceauth/authentication/templates/authentication/dashboard.html:81
|
||||||
msgid "No main character set."
|
msgid "No main character set."
|
||||||
msgstr "Aucun personnage principal choisi."
|
msgstr "Aucun personnage principal sélectionné."
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:88
|
#: allianceauth/authentication/templates/authentication/dashboard.html:88
|
||||||
msgid "Add Character"
|
msgid "Add Character"
|
||||||
@@ -77,7 +79,7 @@ msgstr "Ajouter un Personnage"
|
|||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:92
|
#: allianceauth/authentication/templates/authentication/dashboard.html:92
|
||||||
msgid "Change Main"
|
msgid "Change Main"
|
||||||
msgstr "Changer Personnage Principal"
|
msgstr "Changer de Personnage Principal"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:101
|
#: allianceauth/authentication/templates/authentication/dashboard.html:101
|
||||||
msgid "Group Memberships"
|
msgid "Group Memberships"
|
||||||
@@ -580,7 +582,7 @@ msgstr "Gestion de groupe"
|
|||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:5
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:5
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:14
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:14
|
||||||
msgid "Audit Log"
|
msgid "Audit Log"
|
||||||
msgstr ""
|
msgstr "Journal d'audit"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:20
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:20
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:21
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:21
|
||||||
@@ -618,11 +620,11 @@ msgstr "Acteur"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:47
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:47
|
||||||
msgid "Removed"
|
msgid "Removed"
|
||||||
msgstr ""
|
msgstr "Supprimé"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:59
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:59
|
||||||
msgid "All times displayed are EVE/UTC."
|
msgid "All times displayed are EVE/UTC."
|
||||||
msgstr ""
|
msgstr "Toutes les heures affichées sont EVE/UTC."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:66
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:66
|
||||||
msgid "No entries found for this group."
|
msgid "No entries found for this group."
|
||||||
@@ -642,13 +644,13 @@ msgstr "Organisation"
|
|||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:50
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:50
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:76
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:76
|
||||||
msgid "Group leader"
|
msgid "Group leader"
|
||||||
msgstr ""
|
msgstr "Chef de groupe"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:61
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:61
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:80
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:80
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:136
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:136
|
||||||
msgid "(unknown)"
|
msgid "(unknown)"
|
||||||
msgstr ""
|
msgstr "(inconnu)"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:66
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:66
|
||||||
msgid "Remove from group"
|
msgid "Remove from group"
|
||||||
@@ -1061,19 +1063,19 @@ msgstr "Ajouter un Commentaire"
|
|||||||
|
|
||||||
#: allianceauth/notifications/models.py:21
|
#: allianceauth/notifications/models.py:21
|
||||||
msgid "danger"
|
msgid "danger"
|
||||||
msgstr ""
|
msgstr "danger"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:22
|
#: allianceauth/notifications/models.py:22
|
||||||
msgid "warning"
|
msgid "warning"
|
||||||
msgstr ""
|
msgstr "attention"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:23
|
#: allianceauth/notifications/models.py:23
|
||||||
msgid "info"
|
msgid "info"
|
||||||
msgstr ""
|
msgstr "information"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:24
|
#: allianceauth/notifications/models.py:24
|
||||||
msgid "success"
|
msgid "success"
|
||||||
msgstr ""
|
msgstr "succès"
|
||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/list.html:5
|
#: allianceauth/notifications/templates/notifications/list.html:5
|
||||||
#: allianceauth/notifications/templates/notifications/list.html:9
|
#: allianceauth/notifications/templates/notifications/list.html:9
|
||||||
@@ -1134,7 +1136,7 @@ msgstr "Impossible de trouver l'alerte."
|
|||||||
|
|
||||||
#: allianceauth/notifications/views.py:83
|
#: allianceauth/notifications/views.py:83
|
||||||
msgid "Marked all notifications as read."
|
msgid "Marked all notifications as read."
|
||||||
msgstr ""
|
msgstr "Toutes les notifications ont été marquées comme lues."
|
||||||
|
|
||||||
#: allianceauth/notifications/views.py:91
|
#: allianceauth/notifications/views.py:91
|
||||||
msgid "Deleted all read notifications."
|
msgid "Deleted all read notifications."
|
||||||
@@ -1182,7 +1184,7 @@ msgstr "Heure Locale"
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/fleetoptable.html:15
|
#: allianceauth/optimer/templates/optimer/fleetoptable.html:15
|
||||||
msgid "FC"
|
msgid "FC"
|
||||||
msgstr ""
|
msgstr "Commandant de flotte"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:6
|
#: allianceauth/optimer/templates/optimer/management.html:6
|
||||||
msgid "Fleet Operation Management"
|
msgid "Fleet Operation Management"
|
||||||
@@ -1294,39 +1296,39 @@ msgstr "États"
|
|||||||
|
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:88
|
#: allianceauth/project_template/project_name/settings/base.py:88
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr ""
|
msgstr "Anglais"
|
||||||
|
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:89
|
#: allianceauth/project_template/project_name/settings/base.py:89
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr ""
|
msgstr "Allemand"
|
||||||
|
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:90
|
#: allianceauth/project_template/project_name/settings/base.py:90
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr ""
|
msgstr "Espagnol"
|
||||||
|
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:91
|
#: allianceauth/project_template/project_name/settings/base.py:91
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr ""
|
msgstr "Chinois simplifié"
|
||||||
|
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:92
|
#: allianceauth/project_template/project_name/settings/base.py:92
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr ""
|
msgstr "Russe"
|
||||||
|
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:93
|
#: allianceauth/project_template/project_name/settings/base.py:93
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr "Coréen"
|
||||||
|
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:94
|
#: allianceauth/project_template/project_name/settings/base.py:94
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr ""
|
msgstr "Français"
|
||||||
|
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:95
|
#: allianceauth/project_template/project_name/settings/base.py:95
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr ""
|
msgstr "Japonais"
|
||||||
|
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:96
|
#: allianceauth/project_template/project_name/settings/base.py:96
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr ""
|
msgstr "Italien"
|
||||||
|
|
||||||
#: allianceauth/services/abstract.py:72
|
#: allianceauth/services/abstract.py:72
|
||||||
msgid "That service account already exists"
|
msgid "That service account already exists"
|
||||||
@@ -1335,7 +1337,7 @@ msgstr "Ce compte de service existe déjà."
|
|||||||
#: allianceauth/services/abstract.py:103
|
#: allianceauth/services/abstract.py:103
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Successfully set your {self.service_name} password"
|
msgid "Successfully set your {self.service_name} password"
|
||||||
msgstr ""
|
msgstr "Mot de passe {} créé avec succès."
|
||||||
|
|
||||||
#: allianceauth/services/auth_hooks.py:12
|
#: allianceauth/services/auth_hooks.py:12
|
||||||
msgid "Services"
|
msgid "Services"
|
||||||
@@ -1415,7 +1417,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:5
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:5
|
||||||
msgid "Discord"
|
msgid "Discord"
|
||||||
msgstr ""
|
msgstr "Discord"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:18
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:18
|
||||||
msgid "Join the Discord server"
|
msgid "Join the Discord server"
|
||||||
@@ -1603,15 +1605,15 @@ msgstr "%s non trouvé sur le serveur."
|
|||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/templates/admin/teamspeak3/authts/change_list.html:9
|
#: allianceauth/services/modules/teamspeak3/templates/admin/teamspeak3/authts/change_list.html:9
|
||||||
msgid "Update TS3 groups"
|
msgid "Update TS3 groups"
|
||||||
msgstr ""
|
msgstr "Mise à jour des groupes TS3"
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:6
|
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:6
|
||||||
msgid "Verify Teamspeak"
|
msgid "Verify Teamspeak"
|
||||||
msgstr ""
|
msgstr "Vérifier Teamspeak"
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:11
|
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:11
|
||||||
msgid "Verify Teamspeak Identity"
|
msgid "Verify Teamspeak Identity"
|
||||||
msgstr ""
|
msgstr "Vérifier l'identité Teamspeak"
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:14
|
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:14
|
||||||
msgid "Join Server"
|
msgid "Join Server"
|
||||||
@@ -1639,18 +1641,18 @@ msgstr "Compte TeamSpeak3 désactivé"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/views.py:97
|
#: allianceauth/services/modules/teamspeak3/views.py:97
|
||||||
msgid "Reset TeamSpeak3 permission key."
|
msgid "Reset TeamSpeak3 permission key."
|
||||||
msgstr ""
|
msgstr "Réinitialisez la clé d'autorisation TeamSpeak3."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:30
|
#: allianceauth/services/modules/xenforo/views.py:30
|
||||||
msgid "Activated XenForo account."
|
msgid "Activated XenForo account."
|
||||||
msgstr ""
|
msgstr "Compte XenForo activé"
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:40
|
#: allianceauth/services/modules/xenforo/views.py:40
|
||||||
#: allianceauth/services/modules/xenforo/views.py:52
|
#: allianceauth/services/modules/xenforo/views.py:52
|
||||||
#: allianceauth/services/modules/xenforo/views.py:73
|
#: allianceauth/services/modules/xenforo/views.py:73
|
||||||
#: allianceauth/services/modules/xenforo/views.py:94
|
#: allianceauth/services/modules/xenforo/views.py:94
|
||||||
msgid "An error occurred while processing your XenForo account."
|
msgid "An error occurred while processing your XenForo account."
|
||||||
msgstr ""
|
msgstr "Une erreur est survenue durant la gestion de votre compte XenForo."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:50
|
#: allianceauth/services/modules/xenforo/views.py:50
|
||||||
msgid "Deactivated XenForo account."
|
msgid "Deactivated XenForo account."
|
||||||
@@ -1716,7 +1718,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/services/templates/services/services.html:10
|
#: allianceauth/services/templates/services/services.html:10
|
||||||
msgid "Available Services"
|
msgid "Available Services"
|
||||||
msgstr ""
|
msgstr "Services disponibles"
|
||||||
|
|
||||||
#: allianceauth/services/templates/services/services.html:15
|
#: allianceauth/services/templates/services/services.html:15
|
||||||
msgid "Service"
|
msgid "Service"
|
||||||
@@ -1746,15 +1748,15 @@ msgstr "Information additionnelle"
|
|||||||
|
|
||||||
#: allianceauth/srp/form.py:16
|
#: allianceauth/srp/form.py:16
|
||||||
msgid "Killboard Link (zkillboard.com or kb.evetools.org)"
|
msgid "Killboard Link (zkillboard.com or kb.evetools.org)"
|
||||||
msgstr ""
|
msgstr "Lien ZkillBoard ()"
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:34
|
#: allianceauth/srp/form.py:34
|
||||||
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
||||||
msgstr ""
|
msgstr "Lien non valide. Veuillez utiliser zkillboard.com ou kb.evetools.org"
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:46
|
#: allianceauth/srp/form.py:46
|
||||||
msgid "Invalid Link. Please post a direct link to a killmail."
|
msgid "Invalid Link. Please post a direct link to a killmail."
|
||||||
msgstr ""
|
msgstr "Lien non valide. Veuillez poster un lien direct vers un Killmail."
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:53
|
#: allianceauth/srp/form.py:53
|
||||||
msgid "After Action Report Link"
|
msgid "After Action Report Link"
|
||||||
@@ -1762,12 +1764,12 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/add.html:6
|
#: allianceauth/srp/templates/srp/add.html:6
|
||||||
msgid "SRP Fleet Create"
|
msgid "SRP Fleet Create"
|
||||||
msgstr ""
|
msgstr "SRP de flotte crée"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/add.html:14
|
#: allianceauth/srp/templates/srp/add.html:14
|
||||||
#: allianceauth/srp/templates/srp/add.html:24
|
#: allianceauth/srp/templates/srp/add.html:24
|
||||||
msgid "Create SRP Fleet"
|
msgid "Create SRP Fleet"
|
||||||
msgstr ""
|
msgstr "Créer SRP de flotte"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/add.html:27
|
#: allianceauth/srp/templates/srp/add.html:27
|
||||||
msgid "Give this link to the line members"
|
msgid "Give this link to the line members"
|
||||||
@@ -1775,15 +1777,15 @@ msgstr "Donner ce lien aux membres de la flotte"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:52
|
#: allianceauth/srp/templates/srp/data.html:52
|
||||||
msgid "SRP Fleet Data"
|
msgid "SRP Fleet Data"
|
||||||
msgstr ""
|
msgstr "Données de flotte SRP"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:57
|
#: allianceauth/srp/templates/srp/data.html:57
|
||||||
msgid "Mark Incomplete"
|
msgid "Mark Incomplete"
|
||||||
msgstr ""
|
msgstr "Marquer incomplet"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:61
|
#: allianceauth/srp/templates/srp/data.html:61
|
||||||
msgid "Mark Completed"
|
msgid "Mark Completed"
|
||||||
msgstr ""
|
msgstr "Marquer Complet"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:73
|
#: allianceauth/srp/templates/srp/data.html:73
|
||||||
#: allianceauth/srp/templates/srp/data.html:160
|
#: allianceauth/srp/templates/srp/data.html:160
|
||||||
@@ -1799,7 +1801,7 @@ msgstr "Coût en ISK total:"
|
|||||||
#: allianceauth/srp/templates/srp/data.html:82
|
#: allianceauth/srp/templates/srp/data.html:82
|
||||||
#: allianceauth/srp/templates/srp/data.html:169
|
#: allianceauth/srp/templates/srp/data.html:169
|
||||||
msgid "Are you sure you want to delete SRP requests?"
|
msgid "Are you sure you want to delete SRP requests?"
|
||||||
msgstr ""
|
msgstr "Êtes-vous sûr de vouloir supprimer la requête de SRP ?"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:91
|
#: allianceauth/srp/templates/srp/data.html:91
|
||||||
msgid "Pilot Name"
|
msgid "Pilot Name"
|
||||||
@@ -1819,11 +1821,13 @@ msgstr "Valeur des pertes zKillboard"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:96
|
#: allianceauth/srp/templates/srp/data.html:96
|
||||||
msgid "SRP ISK Cost"
|
msgid "SRP ISK Cost"
|
||||||
msgstr ""
|
msgstr "Coût en ISK SRP"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:97
|
#: allianceauth/srp/templates/srp/data.html:97
|
||||||
msgid "Click value to edit Enter to save & next ESC to cancel"
|
msgid "Click value to edit Enter to save & next ESC to cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Cliquez sur la valeur pour modifier, Entrée pour enregistrer & Échap pour "
|
||||||
|
"annuler"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:100
|
#: allianceauth/srp/templates/srp/data.html:100
|
||||||
msgid "Post Time"
|
msgid "Post Time"
|
||||||
@@ -2045,11 +2049,13 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
|
||||||
msgid "Task Queue"
|
msgid "Task Queue"
|
||||||
msgstr ""
|
msgstr "File d'attente des tâches"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:93
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:93
|
||||||
msgid "Error retrieving task queue length"
|
msgid "Error retrieving task queue length"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Erreur lors de la récupération de la longueur de la file d'attente des "
|
||||||
|
"tâches"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -2060,7 +2066,7 @@ msgstr[1] ""
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||||
msgid "Night Mode"
|
msgid "Night Mode"
|
||||||
msgstr ""
|
msgstr "Mode Nuit"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
||||||
msgid "Admin"
|
msgid "Admin"
|
||||||
@@ -2077,7 +2083,7 @@ msgstr ""
|
|||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:10
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:10
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:14
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:14
|
||||||
msgid "User Menu"
|
msgid "User Menu"
|
||||||
msgstr ""
|
msgstr "Menu Utilisateur"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:56
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:56
|
||||||
msgid "Logout"
|
msgid "Logout"
|
||||||
@@ -2125,7 +2131,7 @@ msgstr "Type de structure"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/form.py:62
|
#: allianceauth/timerboard/form.py:62
|
||||||
msgid "Timer Type"
|
msgid "Timer Type"
|
||||||
msgstr ""
|
msgstr "Type de timer"
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:63
|
#: allianceauth/timerboard/form.py:63
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:33
|
#: allianceauth/timerboard/templates/timerboard/view.html:33
|
||||||
@@ -2156,31 +2162,31 @@ msgstr "Limité à la Corporation"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:14
|
#: allianceauth/timerboard/models.py:14
|
||||||
msgid "Not Specified"
|
msgid "Not Specified"
|
||||||
msgstr ""
|
msgstr "Non Spécifié"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:15
|
#: allianceauth/timerboard/models.py:15
|
||||||
msgid "Shield"
|
msgid "Shield"
|
||||||
msgstr ""
|
msgstr "Bouclier"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:16
|
#: allianceauth/timerboard/models.py:16
|
||||||
msgid "Armor"
|
msgid "Armor"
|
||||||
msgstr ""
|
msgstr "Armure"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:17
|
#: allianceauth/timerboard/models.py:17
|
||||||
msgid "Hull"
|
msgid "Hull"
|
||||||
msgstr ""
|
msgstr "Coque"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:18
|
#: allianceauth/timerboard/models.py:18
|
||||||
msgid "Final"
|
msgid "Final"
|
||||||
msgstr ""
|
msgstr "Final"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:19
|
#: allianceauth/timerboard/models.py:19
|
||||||
msgid "Anchoring"
|
msgid "Anchoring"
|
||||||
msgstr ""
|
msgstr "Ancrage"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:20
|
#: allianceauth/timerboard/models.py:20
|
||||||
msgid "Unanchoring"
|
msgid "Unanchoring"
|
||||||
msgstr ""
|
msgstr "Désancrage"
|
||||||
|
|
||||||
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
||||||
msgid "Delete Timer"
|
msgid "Delete Timer"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-10-26 18:36+1000\n"
|
"POT-Creation-Date: 2021-10-30 14:36+1000\n"
|
||||||
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
||||||
"Last-Translator: Aaron BuBu <351793078@qq.com>, 2020\n"
|
"Last-Translator: Aaron BuBu <351793078@qq.com>, 2020\n"
|
||||||
"Language-Team: Chinese Simplified (https://www.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
|
"Language-Team: Chinese Simplified (https://www.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
|
||||||
@@ -39,12 +39,12 @@ msgstr "只有主要角色才能执行这个操作。在下面添加一个"
|
|||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr "电子邮箱"
|
msgstr "电子邮箱"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:74
|
#: allianceauth/authentication/models.py:79
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "State changed to: %s"
|
msgid "State changed to: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:75
|
#: allianceauth/authentication/models.py:80
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Your user's state is now: %(state)s"
|
msgid "Your user's state is now: %(state)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -63,29 +63,29 @@ msgid ""
|
|||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:81
|
#: allianceauth/authentication/templates/authentication/dashboard.html:102
|
||||||
msgid "No main character set."
|
msgid "No main character set."
|
||||||
msgstr "没有主要角色组"
|
msgstr "没有主要角色组"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:88
|
#: allianceauth/authentication/templates/authentication/dashboard.html:109
|
||||||
msgid "Add Character"
|
msgid "Add Character"
|
||||||
msgstr "添加角色"
|
msgstr "添加角色"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:92
|
#: allianceauth/authentication/templates/authentication/dashboard.html:113
|
||||||
msgid "Change Main"
|
msgid "Change Main"
|
||||||
msgstr "修改主要角色"
|
msgstr "修改主要角色"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:101
|
#: allianceauth/authentication/templates/authentication/dashboard.html:122
|
||||||
msgid "Group Memberships"
|
msgid "Group Memberships"
|
||||||
msgstr "用户组成员"
|
msgstr "用户组成员"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:121
|
#: allianceauth/authentication/templates/authentication/dashboard.html:142
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html:23
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html:23
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:41
|
#: allianceauth/hrapplications/templates/hrapplications/view.html:41
|
||||||
msgid "Characters"
|
msgid "Characters"
|
||||||
msgstr "角色"
|
msgstr "角色"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:129
|
#: allianceauth/authentication/templates/authentication/dashboard.html:150
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:73
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:73
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:24
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:24
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:15
|
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:15
|
||||||
@@ -94,13 +94,13 @@ msgstr "角色"
|
|||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "角色名"
|
msgstr "角色名"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:130
|
#: allianceauth/authentication/templates/authentication/dashboard.html:151
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:23
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:23
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:46
|
#: allianceauth/hrapplications/templates/hrapplications/view.html:46
|
||||||
msgid "Corp"
|
msgid "Corp"
|
||||||
msgstr "所在公司"
|
msgstr "所在公司"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:131
|
#: allianceauth/authentication/templates/authentication/dashboard.html:152
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:76
|
#: allianceauth/corputils/templates/corputils/corpstats.html:76
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:47
|
#: allianceauth/hrapplications/templates/hrapplications/view.html:47
|
||||||
msgid "Alliance"
|
msgid "Alliance"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from allianceauth.optimer.models import OpTimer
|
from allianceauth.optimer.models import OpTimer, OpTimerType
|
||||||
|
|
||||||
|
admin.site.register(OpTimerType)
|
||||||
admin.site.register(OpTimer)
|
admin.site.register(OpTimer)
|
||||||
|
|||||||
@@ -1,11 +1,34 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
from allianceauth.optimer.form_widgets import DataListWidget
|
||||||
|
|
||||||
|
|
||||||
class OpForm(forms.Form):
|
class OpForm(forms.Form):
|
||||||
|
"""
|
||||||
|
Create/Edit Fleet Operation Form
|
||||||
|
"""
|
||||||
|
|
||||||
doctrine = forms.CharField(max_length=254, required=True, label=_('Doctrine'))
|
doctrine = forms.CharField(max_length=254, required=True, label=_('Doctrine'))
|
||||||
system = forms.CharField(max_length=254, required=True, label=_("System"))
|
system = forms.CharField(max_length=254, required=True, label=_("System"))
|
||||||
start = forms.DateTimeField(required=True, label=_("Start Time"))
|
start = forms.DateTimeField(required=True, label=_("Start Time"))
|
||||||
duration = forms.CharField(max_length=254, required=True, label=_("Duration"))
|
|
||||||
operation_name = forms.CharField(max_length=254, required=True, label=_("Operation Name"))
|
operation_name = forms.CharField(max_length=254, required=True, label=_("Operation Name"))
|
||||||
|
type = forms.CharField(required=False, label=_("Operation Type"))
|
||||||
fc = forms.CharField(max_length=254, required=True, label=_("Fleet Commander"))
|
fc = forms.CharField(max_length=254, required=True, label=_("Fleet Commander"))
|
||||||
|
duration = forms.CharField(max_length=254, required=True, label=_("Duration"))
|
||||||
|
description = forms.CharField(
|
||||||
|
widget=forms.Textarea(attrs={"rows": 10, "cols": 20, "input_type": "textarea"}),
|
||||||
|
required=False,
|
||||||
|
label=_("Additional Info"),
|
||||||
|
help_text=_("(Optional) Describe the operation with a couple of short words."),
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
_data_list = kwargs.pop('data_list', None)
|
||||||
|
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
# Add the DataListWidget to our type field
|
||||||
|
self.fields['type'].widget = DataListWidget(
|
||||||
|
data_list=_data_list, name='data-list'
|
||||||
|
)
|
||||||
|
|||||||
45
allianceauth/optimer/form_widgets.py
Normal file
45
allianceauth/optimer/form_widgets.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
"""
|
||||||
|
Form Widgets
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django import forms
|
||||||
|
|
||||||
|
|
||||||
|
class DataListWidget(forms.TextInput):
|
||||||
|
"""
|
||||||
|
DataListWidget
|
||||||
|
|
||||||
|
Draws an HTML5 datalist form field
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, data_list, name, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
self._name = name
|
||||||
|
self._list = data_list
|
||||||
|
self.attrs.update({"list": "list__%s" % self._name})
|
||||||
|
|
||||||
|
def render(self, name, value, attrs=None, renderer=None):
|
||||||
|
"""
|
||||||
|
Render the DataList
|
||||||
|
:param name:
|
||||||
|
:type name:
|
||||||
|
:param value:
|
||||||
|
:type value:
|
||||||
|
:param attrs:
|
||||||
|
:type attrs:
|
||||||
|
:param renderer:
|
||||||
|
:type renderer:
|
||||||
|
:return:
|
||||||
|
:rtype:
|
||||||
|
"""
|
||||||
|
|
||||||
|
text_html = super().render(name, value, attrs=attrs)
|
||||||
|
data_list = '<datalist id="list__%s">' % self._name
|
||||||
|
|
||||||
|
for item in self._list:
|
||||||
|
data_list += '<option value="%s">' % item
|
||||||
|
|
||||||
|
data_list += "</datalist>"
|
||||||
|
|
||||||
|
return text_html + data_list
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
# Generated by Django 3.2.8 on 2021-10-26 16:20
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("optimer", "0004_on_delete"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="OpTimerType",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.AutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("type", models.CharField(default="", max_length=254)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
"ordering": ["type"],
|
||||||
|
"default_permissions": (),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name="optimer",
|
||||||
|
options={"default_permissions": (), "ordering": ["start"]},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="optimer",
|
||||||
|
name="description",
|
||||||
|
field=models.TextField(blank=True, default=""),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="optimer",
|
||||||
|
name="type",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to="optimer.optimertype",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -6,9 +6,25 @@ from django.utils import timezone
|
|||||||
from allianceauth.eveonline.models import EveCharacter
|
from allianceauth.eveonline.models import EveCharacter
|
||||||
|
|
||||||
|
|
||||||
|
class OpTimerType(models.Model):
|
||||||
|
"""
|
||||||
|
Optimer Type
|
||||||
|
"""
|
||||||
|
|
||||||
|
type = models.CharField(max_length=254, default="")
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.type
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ['type']
|
||||||
|
default_permissions = ()
|
||||||
|
|
||||||
|
|
||||||
class OpTimer(models.Model):
|
class OpTimer(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['start']
|
ordering = ['start']
|
||||||
|
default_permissions = ()
|
||||||
|
|
||||||
doctrine = models.CharField(max_length=254, default="")
|
doctrine = models.CharField(max_length=254, default="")
|
||||||
system = models.CharField(max_length=254, default="")
|
system = models.CharField(max_length=254, default="")
|
||||||
@@ -17,7 +33,10 @@ class OpTimer(models.Model):
|
|||||||
operation_name = models.CharField(max_length=254, default="")
|
operation_name = models.CharField(max_length=254, default="")
|
||||||
fc = models.CharField(max_length=254, default="")
|
fc = models.CharField(max_length=254, default="")
|
||||||
post_time = models.DateTimeField(default=timezone.now)
|
post_time = models.DateTimeField(default=timezone.now)
|
||||||
eve_character = models.ForeignKey(EveCharacter, null=True, on_delete=models.SET_NULL)
|
eve_character = models.ForeignKey(EveCharacter, null=True,
|
||||||
|
on_delete=models.SET_NULL)
|
||||||
|
description = models.TextField(blank=True, default="")
|
||||||
|
type = models.ForeignKey(OpTimerType, null=True, on_delete=models.SET_NULL)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.operation_name
|
return self.operation_name
|
||||||
|
|||||||
@@ -6,37 +6,48 @@
|
|||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-center col-lg-3">{% translate "Operation Name" %}</th>
|
<th>{% translate "Operation Name" %}</th>
|
||||||
<th class="text-center col lg-2">{% translate "Doctrine" %}</th>
|
<th>{% translate "Description" %}</th>
|
||||||
<th class="text-center col-lg-1">{% translate "Form Up System" %}</th>
|
<th>{% translate "Doctrine" %}</th>
|
||||||
<th class="text-center col-lg-1">{% translate "Start Time" %}</th>
|
<th>{% translate "Form Up System" %}</th>
|
||||||
<th class="text-center col-lg-1">{% translate "Local Time" %}</th>
|
<th>{% translate "Start Time" %}</th>
|
||||||
<th class="text-center col-lg-1">{% translate "Duration" %}</th>
|
<th>{% translate "Local Time" %}</th>
|
||||||
<th class="text-center col-lg-1">{% translate "FC" %}</th>
|
<th>{% translate "Duration" %}</th>
|
||||||
|
<th>{% translate "FC" %}</th>
|
||||||
{% if perms.auth.optimer_management %}
|
{% if perms.auth.optimer_management %}
|
||||||
<th class="text-center col-lg-1">{% translate "Creator" %}</th>
|
{# <th>{% translate "Creator" %}</th>#}
|
||||||
<th class="text-center col-lg-2">{% translate "Action" %}</th>
|
<th class="text-right" style="width: 150px;">{% translate "Action" %}</th>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for ops in timers %}
|
{% for ops in timers %}
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-center">{{ ops.operation_name }}</td>
|
<td>
|
||||||
<td class="text-center">{{ ops.doctrine }}</td>
|
{{ ops.operation_name }}
|
||||||
<td class="text-center">
|
{% if ops.type %}
|
||||||
|
<br>({{ ops.type }})
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>{{ ops.description }}</td>
|
||||||
|
<td>{{ ops.doctrine }}</td>
|
||||||
|
<td>
|
||||||
<a href="{{ ops.system|dotlan_solar_system_url }}">{{ ops.system }}</a>
|
<a href="{{ ops.system|dotlan_solar_system_url }}">{{ ops.system }}</a>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center" nowrap>{{ ops.start | date:"Y-m-d H:i" }}</td>
|
<td nowrap>{{ ops.start | date:"Y-m-d H:i" }}</td>
|
||||||
<td class="text-center" nowrap><div id="localtime{{ ops.id }}"></div><div id="countdown{{ ops.id }}"></div></td>
|
<td nowrap><div id="localtime{{ ops.id }}"></div><div id="countdown{{ ops.id }}"></div></td>
|
||||||
<td class="text-center">{{ ops.duration }}</td>
|
<td>{{ ops.duration }}</td>
|
||||||
<td class="text-center">{{ ops.fc }}</td>
|
<td>{{ ops.fc }}</td>
|
||||||
{% if perms.auth.optimer_management %}
|
{% if perms.auth.optimer_management %}
|
||||||
<td class="text-center">{{ ops.eve_character }}</td>
|
{# <td>{{ ops.eve_character }}</td>#}
|
||||||
<td class="text-center">
|
<td class="text-right">
|
||||||
<a href="{% url 'optimer:remove' ops.id %}" class="btn btn-danger">
|
<a href="{% url 'optimer:remove' ops.id %}" class="btn btn-danger">
|
||||||
<span class="glyphicon glyphicon-remove"></span>
|
<span class="glyphicon glyphicon-remove"></span>
|
||||||
</a><a href="{% url 'optimer:edit' ops.id %}" class="btn btn-info"><span class="glyphicon glyphicon-pencil"></span></a>
|
</a>
|
||||||
|
|
||||||
|
<a href="{% url 'optimer:edit' ops.id %}" class="btn btn-info">
|
||||||
|
<span class="glyphicon glyphicon-pencil"></span>
|
||||||
|
</a>
|
||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -24,14 +24,14 @@
|
|||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h4><b>{% translate "Next Timers" %}</b></h4>
|
<h4><b>{% translate "Next Fleet Operations" %}</b></h4>
|
||||||
{% if future_timers %}
|
{% if future_timers %}
|
||||||
{% include "optimer/fleetoptable.html" with timers=future_timers %}
|
{% include "optimer/fleetoptable.html" with timers=future_timers %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="alert alert-warning text-center">{% translate "No upcoming timers." %}</div>
|
<div class="alert alert-warning text-center">{% translate "No upcoming timers." %}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<h4><b>{% translate "Past Timers" %}</b></h4>
|
<h4><b>{% translate "Past Fleet Operations" %}</b></h4>
|
||||||
{% if past_timers %}
|
{% if past_timers %}
|
||||||
{% include "optimer/fleetoptable.html" with timers=past_timers %}
|
{% include "optimer/fleetoptable.html" with timers=past_timers %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from django.utils import timezone
|
|||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from .form import OpForm
|
from .form import OpForm
|
||||||
|
|
||||||
from .models import OpTimer
|
from .models import OpTimer, OpTimerType
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ logger = logging.getLogger(__name__)
|
|||||||
@permission_required('auth.optimer_view')
|
@permission_required('auth.optimer_view')
|
||||||
def optimer_view(request):
|
def optimer_view(request):
|
||||||
logger.debug("optimer_view called by user %s" % request.user)
|
logger.debug("optimer_view called by user %s" % request.user)
|
||||||
base_query = OpTimer.objects.select_related('eve_character')
|
base_query = OpTimer.objects.select_related('eve_character', 'type')
|
||||||
render_items = {'optimer': base_query.all(),
|
render_items = {'optimer': base_query.all(),
|
||||||
'future_timers': base_query.filter(
|
'future_timers': base_query.filter(
|
||||||
start__gte=timezone.now()),
|
start__gte=timezone.now()),
|
||||||
@@ -33,9 +33,21 @@ def optimer_view(request):
|
|||||||
def add_optimer_view(request):
|
def add_optimer_view(request):
|
||||||
logger.debug("add_optimer_view called by user %s" % request.user)
|
logger.debug("add_optimer_view called by user %s" % request.user)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = OpForm(request.POST)
|
form = OpForm(request.POST, data_list=OpTimerType.objects.all())
|
||||||
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
|
optimer_type = None
|
||||||
|
|
||||||
|
if form.cleaned_data['type'] != '':
|
||||||
|
try:
|
||||||
|
optimer_type = OpTimerType.objects.get(
|
||||||
|
type__iexact=form.cleaned_data['type']
|
||||||
|
)
|
||||||
|
except OpTimerType.DoesNotExist:
|
||||||
|
optimer_type = OpTimerType.objects.create(
|
||||||
|
type=form.cleaned_data['type']
|
||||||
|
)
|
||||||
|
|
||||||
# Get Current Time
|
# Get Current Time
|
||||||
post_time = timezone.now()
|
post_time = timezone.now()
|
||||||
# Get character
|
# Get character
|
||||||
@@ -50,13 +62,15 @@ def add_optimer_view(request):
|
|||||||
op.fc = form.cleaned_data['fc']
|
op.fc = form.cleaned_data['fc']
|
||||||
op.create_time = post_time
|
op.create_time = post_time
|
||||||
op.eve_character = character
|
op.eve_character = character
|
||||||
|
op.type = optimer_type
|
||||||
|
op.description = form.cleaned_data['description']
|
||||||
op.save()
|
op.save()
|
||||||
logger.info(f"User {request.user} created op timer with name {op.operation_name}")
|
logger.info(f"User {request.user} created op timer with name {op.operation_name}")
|
||||||
messages.success(request, _('Created operation timer for %(opname)s.') % {"opname": op.operation_name})
|
messages.success(request, _('Created operation timer for %(opname)s.') % {"opname": op.operation_name})
|
||||||
return redirect("optimer:view")
|
return redirect("optimer:view")
|
||||||
else:
|
else:
|
||||||
logger.debug("Returning new opForm")
|
logger.debug("Returning new opForm")
|
||||||
form = OpForm()
|
form = OpForm(data_list=OpTimerType.objects.all())
|
||||||
|
|
||||||
render_items = {'form': form}
|
render_items = {'form': form}
|
||||||
|
|
||||||
@@ -80,10 +94,23 @@ def edit_optimer(request, optimer_id):
|
|||||||
logger.debug(f"edit_optimer called by user {request.user} for optimer id {optimer_id}")
|
logger.debug(f"edit_optimer called by user {request.user} for optimer id {optimer_id}")
|
||||||
op = get_object_or_404(OpTimer, id=optimer_id)
|
op = get_object_or_404(OpTimer, id=optimer_id)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = OpForm(request.POST)
|
form = OpForm(request.POST, data_list=OpTimerType.objects.all())
|
||||||
logger.debug("Received POST request containing update optimer form, is valid: %s" % form.is_valid())
|
logger.debug("Received POST request containing update optimer form, is valid: %s" % form.is_valid())
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
character = request.user.profile.main_character
|
character = request.user.profile.main_character
|
||||||
|
|
||||||
|
optimer_type = None
|
||||||
|
|
||||||
|
if form.cleaned_data['type'] != '':
|
||||||
|
try:
|
||||||
|
optimer_type = OpTimerType.objects.get(
|
||||||
|
type__iexact=form.cleaned_data['type']
|
||||||
|
)
|
||||||
|
except OpTimerType.DoesNotExist:
|
||||||
|
optimer_type = OpTimerType.objects.create(
|
||||||
|
type=form.cleaned_data['type']
|
||||||
|
)
|
||||||
|
|
||||||
op.doctrine = form.cleaned_data['doctrine']
|
op.doctrine = form.cleaned_data['doctrine']
|
||||||
op.system = form.cleaned_data['system']
|
op.system = form.cleaned_data['system']
|
||||||
op.start = form.cleaned_data['start']
|
op.start = form.cleaned_data['start']
|
||||||
@@ -91,6 +118,8 @@ def edit_optimer(request, optimer_id):
|
|||||||
op.operation_name = form.cleaned_data['operation_name']
|
op.operation_name = form.cleaned_data['operation_name']
|
||||||
op.fc = form.cleaned_data['fc']
|
op.fc = form.cleaned_data['fc']
|
||||||
op.eve_character = character
|
op.eve_character = character
|
||||||
|
op.type = optimer_type
|
||||||
|
op.description = form.cleaned_data['description']
|
||||||
logger.info(f"User {request.user} updating optimer id {optimer_id} ")
|
logger.info(f"User {request.user} updating optimer id {optimer_id} ")
|
||||||
op.save()
|
op.save()
|
||||||
messages.success(request, _('Saved changes to operation timer for %(opname)s.') % {"opname": op.operation_name})
|
messages.success(request, _('Saved changes to operation timer for %(opname)s.') % {"opname": op.operation_name})
|
||||||
@@ -103,6 +132,8 @@ def edit_optimer(request, optimer_id):
|
|||||||
'duration': op.duration,
|
'duration': op.duration,
|
||||||
'operation_name': op.operation_name,
|
'operation_name': op.operation_name,
|
||||||
'fc': op.fc,
|
'fc': op.fc,
|
||||||
|
'description': op.description,
|
||||||
|
'type': op.type
|
||||||
}
|
}
|
||||||
form = OpForm(initial=data)
|
form = OpForm(initial=data, data_list=OpTimerType.objects.all())
|
||||||
return render(request, 'optimer/update.html', context={'form': form})
|
return render(request, 'optimer/update.html', context={'form': form})
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import requests
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from allianceauth import NAME
|
from allianceauth import NAME
|
||||||
from allianceauth.eveonline.providers import provider
|
from allianceauth.srp.providers import esi
|
||||||
|
|
||||||
from .models import SrpUserRequest
|
from .models import SrpUserRequest
|
||||||
|
|
||||||
@@ -32,8 +32,7 @@ class SRPManager:
|
|||||||
if result:
|
if result:
|
||||||
killmail_id = result['killmail_id']
|
killmail_id = result['killmail_id']
|
||||||
killmail_hash = result['zkb']['hash']
|
killmail_hash = result['zkb']['hash']
|
||||||
c = provider.client
|
km = esi.client.Killmails.get_killmails_killmail_id_killmail_hash(
|
||||||
km = c.Killmails.get_killmails_killmail_id_killmail_hash(
|
|
||||||
killmail_id=killmail_id,
|
killmail_id=killmail_id,
|
||||||
killmail_hash=killmail_hash
|
killmail_hash=killmail_hash
|
||||||
).result()
|
).result()
|
||||||
|
|||||||
18
allianceauth/srp/providers.py
Normal file
18
allianceauth/srp/providers.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import os
|
||||||
|
from esi.clients import EsiClientProvider
|
||||||
|
|
||||||
|
from allianceauth import __version__
|
||||||
|
|
||||||
|
SWAGGER_SPEC = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'swagger.json')
|
||||||
|
|
||||||
|
"""
|
||||||
|
Swagger spec operations:
|
||||||
|
get_killmails_killmail_id_killmail_hash
|
||||||
|
get_universe_types_type_id
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
esi = EsiClientProvider(
|
||||||
|
spec_file=SWAGGER_SPEC,
|
||||||
|
app_info_text=("allianceauth v" + __version__)
|
||||||
|
)
|
||||||
1
allianceauth/srp/swagger.json
Normal file
1
allianceauth/srp/swagger.json
Normal file
File diff suppressed because one or more lines are too long
@@ -36,7 +36,7 @@ class TestSrpManager(TestCase):
|
|||||||
expected = 81973979
|
expected = 81973979
|
||||||
self.assertEqual(int(SRPManager.get_kill_id(link)), expected)
|
self.assertEqual(int(SRPManager.get_kill_id(link)), expected)
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.provider')
|
@patch(MODULE_PATH + '.esi')
|
||||||
@patch(MODULE_PATH + '.requests.get')
|
@patch(MODULE_PATH + '.requests.get')
|
||||||
def test_can_get_kill_data(self, mock_get, mock_provider):
|
def test_can_get_kill_data(self, mock_get, mock_provider):
|
||||||
mock_get.return_value.json.return_value = load_data(
|
mock_get.return_value.json.return_value = load_data(
|
||||||
@@ -60,7 +60,7 @@ class TestSrpManager(TestCase):
|
|||||||
with self.assertRaises(ValueError):
|
with self.assertRaises(ValueError):
|
||||||
SRPManager.get_kill_data(81973979)
|
SRPManager.get_kill_data(81973979)
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.provider')
|
@patch(MODULE_PATH + '.esi')
|
||||||
@patch(MODULE_PATH + '.requests.get')
|
@patch(MODULE_PATH + '.requests.get')
|
||||||
def test_invalid_id_for_esi_raises_exception(
|
def test_invalid_id_for_esi_raises_exception(
|
||||||
self, mock_get, mock_provider
|
self, mock_get, mock_provider
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from django.utils import timezone
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
from allianceauth.authentication.decorators import permissions_required
|
from allianceauth.authentication.decorators import permissions_required
|
||||||
from allianceauth.eveonline.providers import provider
|
from allianceauth.srp.providers import esi
|
||||||
from allianceauth.notifications import notify
|
from allianceauth.notifications import notify
|
||||||
from .form import SrpFleetMainForm
|
from .form import SrpFleetMainForm
|
||||||
from .form import SrpFleetMainUpdateForm
|
from .form import SrpFleetMainUpdateForm
|
||||||
@@ -201,7 +201,8 @@ def srp_request_view(request, fleet_srp):
|
|||||||
return redirect("srp:management")
|
return redirect("srp:management")
|
||||||
|
|
||||||
if request.user.character_ownerships.filter(character__character_id=str(victim_id)).exists():
|
if request.user.character_ownerships.filter(character__character_id=str(victim_id)).exists():
|
||||||
srp_request.srp_ship_name = provider.get_itemtype(ship_type_id).name
|
item_type = esi.client.Universe.get_universe_types_type_id(type_id=ship_type_id).result()
|
||||||
|
srp_request.srp_ship_name = item_type['name']
|
||||||
srp_request.kb_total_loss = ship_value
|
srp_request.kb_total_loss = ship_value
|
||||||
srp_request.post_time = post_time
|
srp_request.post_time = post_time
|
||||||
srp_request.save()
|
srp_request.save()
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
// Alliance Auth customisations of the bootswatch Darkly theme
|
// Alliance Auth customisations of the bootswatch Darkly theme
|
||||||
// To build a new CSS file you need to `npm install -g less less-plugin-clean-css`
|
// To build a new CSS file you need to `npm install -g less less-plugin-clean-css`
|
||||||
// Then `lessc --clean-css darkly.less darkly.min.css`
|
// Then `lessc --clean-css="--advanced" darkly.less darkly.min.css`
|
||||||
|
|
||||||
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/bower_components/bootstrap/less/bootstrap.less";
|
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/bower_components/bootstrap/less/bootstrap.less";
|
||||||
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/darkly/variables.less";
|
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/darkly/variables.less";
|
||||||
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/darkly/bootswatch.less";
|
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/fa207fbbc80bd74339e179b054a322b092be98f6/darkly/bootswatch.less";
|
||||||
@import "../bootstrap-locals.less";
|
@import "../bootstrap-locals.less";
|
||||||
@import "../flatly-shared.less";
|
@import "../flatly-shared.less";
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,10 +1,10 @@
|
|||||||
// Alliance Auth customisations of the bootswatch Flatly theme
|
// Alliance Auth customisations of the bootswatch Flatly theme
|
||||||
// To build a new CSS file you need to `npm install -g less less-plugin-clean-css`
|
// To build a new CSS file you need to `npm install -g less less-plugin-clean-css`
|
||||||
// Then `lessc --clean-css flatly.less flatly.min.css`
|
// Then `lessc --clean-css="--advanced" flatly.less flatly.min.css`
|
||||||
|
|
||||||
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/bower_components/bootstrap/less/bootstrap.less";
|
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/bower_components/bootstrap/less/bootstrap.less";
|
||||||
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/flatly/variables.less";
|
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/flatly/variables.less";
|
||||||
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/v3/flatly/bootswatch.less";
|
@import "https://raw.githubusercontent.com/thomaspark/bootswatch/fa207fbbc80bd74339e179b054a322b092be98f6/flatly/bootswatch.less";
|
||||||
@import "../bootstrap-locals.less";
|
@import "../bootstrap-locals.less";
|
||||||
@import "../flatly-shared.less";
|
@import "../flatly-shared.less";
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -4,15 +4,14 @@
|
|||||||
{% if debug %}
|
{% if debug %}
|
||||||
<!-- In template debug, loading less file instead of CSS -->
|
<!-- In template debug, loading less file instead of CSS -->
|
||||||
<link rel="stylesheet/less" type="text/css" href="{% static 'css/themes/darkly/darkly.less' %}" />
|
<link rel="stylesheet/less" type="text/css" href="{% static 'css/themes/darkly/darkly.less' %}" />
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/less.js/2.7.3/less.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/less.js/4.1.2/less.min.js" integrity="sha512-eXBn7AaMbUOWb3PSDhwcjByoM89FeO1SF9Jww6kqPYQkBrGZvqAKFbtqLHh5O95rYA/AOtWZ0QRO2S6rP+KsUw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> {% else %}
|
||||||
{% else %}
|
|
||||||
<link rel="stylesheet" type="text/css" href="{% static 'css/themes/darkly/darkly.min.css' %}" />
|
<link rel="stylesheet" type="text/css" href="{% static 'css/themes/darkly/darkly.min.css' %}" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if debug %}
|
{% if debug %}
|
||||||
<!-- In template debug, loading less file instead of CSS -->
|
<!-- In template debug, loading less file instead of CSS -->
|
||||||
<link rel="stylesheet/less" type="text/css" href="{% static 'css/themes/flatly/flatly.less' %}" />
|
<link rel="stylesheet/less" type="text/css" href="{% static 'css/themes/flatly/flatly.less' %}" />
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/less.js/2.7.3/less.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/less.js/4.1.2/less.min.js" integrity="sha512-eXBn7AaMbUOWb3PSDhwcjByoM89FeO1SF9Jww6kqPYQkBrGZvqAKFbtqLHh5O95rYA/AOtWZ0QRO2S6rP+KsUw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
{% else %}
|
{% else %}
|
||||||
<link rel="stylesheet" type="text/css" href="{% static 'css/themes/flatly/flatly.min.css' %}" />
|
<link rel="stylesheet" type="text/css" href="{% static 'css/themes/flatly/flatly.min.css' %}" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<!-- Start Bootstrap + jQuery js from cdnjs -->
|
<!-- Start Bootstrap + jQuery js from cdnjs -->
|
||||||
<script type="application/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
<script type="application/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha512-oBTprMeNEKCnqfuqKd6sbvFzmFQtlXS3e0C/RGFV0hD6QzhHV+ODfaQbAlmY6/q0ubbwlAM/nCJjkrgA3waLzg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
<!-- End Bootstrap + jQuery js from cdnjs -->
|
<!-- End Bootstrap + jQuery js from cdnjs -->
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<!-- Start Datatables-css from cdnjs -->
|
<!-- Start Datatables-css from cdnjs -->
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/css/dataTables.bootstrap.min.css"/>
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/css/dataTables.bootstrap.min.css" integrity="sha512-BMbq2It2D3J17/C7aRklzOODG1IQ3+MHw3ifzBHMBwGO/0yUqYmsStgBjI0z5EYlaDEFnvYV7gNYdD3vFLRKsA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||||
<!-- End Datatables-css from cdnjs -->
|
<!-- End Datatables-css from cdnjs -->
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<!-- Start Datatables-js from cdnjs -->
|
<!-- Start Datatables-js from cdnjs -->
|
||||||
<script type="application/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/js/jquery.dataTables.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/js/jquery.dataTables.min.js" integrity="sha512-BkpSL20WETFylMrcirBahHfSnY++H2O1W+UnEEO4yNIl+jI2+zowyoGJpbtk6bx97fBXf++WJHSSK2MV4ghPcg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
<script type="application/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/js/dataTables.bootstrap.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/js/dataTables.bootstrap.min.js" integrity="sha512-F0E+jKGaUC90odiinxkfeS3zm9uUT1/lpusNtgXboaMdA3QFMUez0pBmAeXGXtGxoGZg3bLmrkSkbK1quua4/Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
<!-- End Datatables-js from cdnjs -->
|
<!-- End Datatables-js from cdnjs -->
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<!-- Start FontAwesome CSS from cdnjs -->
|
<!-- Start FontAwesome CSS from cdnjs -->
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css"/>
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" integrity="sha512-1ycn6IcaQQ40/MKBW2W4Rhis/DbILU74C1vSrLJxCq57o941Ym01SwNsOMqvEBFlcgUa6xLiPY/NS5R+E6ztJQ==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||||
<!-- End FontAwesome CSS from cdnjs -->
|
<!-- End FontAwesome CSS from cdnjs -->
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<!-- Start jQuery-DateTimePicker CSS from cdnjs -->
|
<!-- Start jQuery-DateTimePicker CSS from cdnjs -->
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.min.css"/>
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.min.css" integrity="sha512-f0tzWhCwVFS3WeYaofoLWkTP62ObhewQ1EZn65oSYDZUg1+CyywGKkWzm8BxaJj5HGKI72PnMH9jYyIFz+GH7g==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||||
<!-- End jQuery-DateTimePicker CSS from cdnjs -->
|
<!-- End jQuery-DateTimePicker CSS from cdnjs -->
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<!-- Start jQuery-DateTimePicker JS from cdnjs -->
|
<!-- Start jQuery-DateTimePicker JS from cdnjs -->
|
||||||
<script type="application/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.min.js" integrity="sha512-AIOTidJAcHBH2G/oZv9viEGXRqDNmfdPVPYOYKGy3fti0xIplnlgMHUGfuNRzC6FkzIo0iIxgFnr9RikFxK+sw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
<!-- End jQuery-DateTimePicker JS from cdnjs -->
|
<!-- End jQuery-DateTimePicker JS from cdnjs -->
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<!-- Start jQuery visibility js -->
|
<!-- Start jQuery visibility js -->
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-visibility/1.0.11/jquery-visibility.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-visibility/1.0.11/jquery-visibility.min.js" integrity="sha512-kL8M4N4KLFJ4ydyfbBiXU1InCR6zs8jm8NR1BXykgFmMhVO3RS9bvoMHnVwoPe+i6NRvfydNlweatKee85Df3A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
<!-- End jQuery visibility js -->
|
<!-- End jQuery visibility js -->
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!-- Start Moment.js from cdnjs -->
|
<!-- Start Moment.js from cdnjs -->
|
||||||
<script type="application/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
{% if locale and LANGUAGE_CODE != 'en' %}
|
{% if locale and LANGUAGE_CODE != 'en' %}
|
||||||
<!-- Moment.JS Not EN-en -->
|
<!-- Moment.JS Not EN-en -->
|
||||||
<script type="application/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/locale/{{ LANGUAGE_CODE }}.js"></script>
|
<script type="application/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/locale/{{ LANGUAGE_CODE }}.js"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<!-- End Moment JS from cdnjs -->
|
<!-- End Moment JS from cdnjs -->
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<!-- Start X-editable JS from cdnjs -->
|
<!-- Start X-editable JS from cdnjs -->
|
||||||
<script type="application/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.1/bootstrap3-editable/js/bootstrap-editable.min.js"></script>
|
<<script src="https://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.1/bootstrap3-editable/js/bootstrap-editable.min.js" integrity="sha512-Mvqhe3YIUElH6VT0CFmUeRgYMrLvCGd2mvYCnJOf2nL9FvRBK74qRgTn7u0zSqA5cHiGxy83bwuhl1ASbS9M/w==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
<!-- End X-editable JS from cdnjs -->
|
<!-- End X-editable JS from cdnjs -->
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<!-- Start X-editable CSS from cdnjs -->
|
<!-- Start X-editable CSS from cdnjs -->
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.1/bootstrap3-editable/css/bootstrap-editable.css"/>
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.1/bootstrap3-editable/css/bootstrap-editable.css" integrity="sha512-e0rbO6UJET0zDdXOHjwc6D44UpeKumn7cU7XR/fa4S0/Jso0bZqcCqlIF6mtvcimMbf846mkv8aSWFnTwABr/g==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||||
<!-- End X-editable CSS from cdnjs -->
|
<!-- End X-editable CSS from cdnjs -->
|
||||||
|
|||||||
4
setup.py
4
setup.py
@@ -15,14 +15,14 @@ install_requires = [
|
|||||||
'python-slugify>=1.2',
|
'python-slugify>=1.2',
|
||||||
'requests-oauthlib',
|
'requests-oauthlib',
|
||||||
'semantic_version',
|
'semantic_version',
|
||||||
'packaging>=20.1,<21',
|
'packaging>=21.0,<22',
|
||||||
'beautifulsoup4',
|
'beautifulsoup4',
|
||||||
|
|
||||||
'redis>=3.3.1,<4.0.0',
|
'redis>=3.3.1,<4.0.0',
|
||||||
'celery>=4.3.0,<6.0.0,!=4.4.4', # 4.4.4 is missing a dependency
|
'celery>=4.3.0,<6.0.0,!=4.4.4', # 4.4.4 is missing a dependency
|
||||||
'celery_once>=2.0.1',
|
'celery_once>=2.0.1',
|
||||||
|
|
||||||
'django>=3.2.7,<4.0.0',
|
'django>=3.2.8,<4.0.0',
|
||||||
'django-bootstrap-form',
|
'django-bootstrap-form',
|
||||||
'django-registration>=3.1',
|
'django-registration>=3.1',
|
||||||
'django-sortedm2m',
|
'django-sortedm2m',
|
||||||
|
|||||||
Reference in New Issue
Block a user