mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-14 23:10:15 +02:00
[ADDED] Update displayed name when main is changed
This commit is contained in:
parent
8772349309
commit
cd189927fe
@ -38,6 +38,12 @@ class SmfService(ServicesHook):
|
|||||||
if SmfTasks.has_account(user):
|
if SmfTasks.has_account(user):
|
||||||
SmfTasks.update_groups.delay(user.pk)
|
SmfTasks.update_groups.delay(user.pk)
|
||||||
|
|
||||||
|
def sync_nickname(self, user):
|
||||||
|
logger.debug(f"Updating {self.name} displayed name for {user}")
|
||||||
|
|
||||||
|
if SmfTasks.has_account(user):
|
||||||
|
SmfTasks.update_display_name.apply_async(args=[user.pk], countdown=5) # cooldown on this task to ensure DB clean when syncing
|
||||||
|
|
||||||
def update_all_groups(self):
|
def update_all_groups(self):
|
||||||
logger.debug('Update all %s groups called' % self.name)
|
logger.debug('Update all %s groups called' % self.name)
|
||||||
SmfTasks.update_all_groups.delay()
|
SmfTasks.update_all_groups.delay()
|
||||||
|
@ -11,6 +11,8 @@ from packaging import version
|
|||||||
|
|
||||||
from django.db import connections
|
from django.db import connections
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from allianceauth.eveonline.models import EveCharacter
|
from allianceauth.eveonline.models import EveCharacter
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -40,6 +42,8 @@ class SmfManager:
|
|||||||
|
|
||||||
SQL_UPD_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s, real_name = %%s WHERE member_name = %%s" % TABLE_PREFIX
|
SQL_UPD_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s, real_name = %%s WHERE member_name = %%s" % TABLE_PREFIX
|
||||||
|
|
||||||
|
SQL_UPD_DISPLAY_NAME = r"UPDATE %smembers SET real_name = %%s WHERE member_name = %%s" % TABLE_PREFIX
|
||||||
|
|
||||||
SQL_DIS_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s WHERE member_name = %%s" % TABLE_PREFIX
|
SQL_DIS_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s WHERE member_name = %%s" % TABLE_PREFIX
|
||||||
|
|
||||||
SQL_USER_ID_FROM_USERNAME = r"SELECT id_member from %smembers WHERE member_name = %%s" % TABLE_PREFIX
|
SQL_USER_ID_FROM_USERNAME = r"SELECT id_member from %smembers WHERE member_name = %%s" % TABLE_PREFIX
|
||||||
@ -273,6 +277,27 @@ class SmfManager:
|
|||||||
logger.error(f"Unable to delete smf user {username} - user not found on smf.")
|
logger.error(f"Unable to delete smf user {username} - user not found on smf.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def update_display_name(cls, user: User):
|
||||||
|
logger.debug(f"Updating SMF displayed name for user {user}")
|
||||||
|
cursor = connections['smf'].cursor()
|
||||||
|
smf_username = user.smf.username
|
||||||
|
|
||||||
|
try:
|
||||||
|
display_name = user.profile.main_character.character_name
|
||||||
|
except Exception as exc:
|
||||||
|
logger.exception(
|
||||||
|
f"Unable to find a main character name for {user}, skipping... ({exc})"
|
||||||
|
)
|
||||||
|
display_name = smf_username
|
||||||
|
|
||||||
|
if cls.check_user(smf_username):
|
||||||
|
cursor.execute(cls.SQL_UPD_DISPLAY_NAME, [display_name, smf_username])
|
||||||
|
logger.info(f"Updated displayed name for smf user {smf_username}")
|
||||||
|
return True
|
||||||
|
logger.error(f"Unable to update smf user {smf_username} - user not found on smf.")
|
||||||
|
return False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def update_groups(cls, username, groups):
|
def update_groups(cls, username, groups):
|
||||||
userid = cls.get_user_id(username)
|
userid = cls.get_user_id(username)
|
||||||
|
@ -57,6 +57,40 @@ class SmfTasks:
|
|||||||
else:
|
else:
|
||||||
logger.debug("User does not have an smf account")
|
logger.debug("User does not have an smf account")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
@shared_task(bind=True, name="smf.update_display_name", base=QueueOnce)
|
||||||
|
def update_display_name(self, pk):
|
||||||
|
user = User.objects.get(pk=pk)
|
||||||
|
logger.debug(f"Updating SMF displayed name user {user}")
|
||||||
|
|
||||||
|
if SmfTasks.has_account(user):
|
||||||
|
try:
|
||||||
|
if not SmfManager.update_display_name(user):
|
||||||
|
raise Exception("SMF Displayed Name Sync failed")
|
||||||
|
logger.debug(f"Updated user {user} SMF displayed name.")
|
||||||
|
return True
|
||||||
|
except SmfUser.DoesNotExist:
|
||||||
|
logger.info(
|
||||||
|
f"SMF displayed name sync failed for {user}, "
|
||||||
|
"user does not have a SMF account"
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
logger.exception(
|
||||||
|
f"SMF displayed name sync failed for {user}, retrying in 10 mins"
|
||||||
|
)
|
||||||
|
raise self.retry(countdown=60 * 10)
|
||||||
|
else:
|
||||||
|
logger.debug(f"User {user} does not have a SMF account, skipping")
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
@shared_task(name="smf.update_all_display_names")
|
||||||
|
def update_all_display_names():
|
||||||
|
logger.debug("Updating ALL SMF display names")
|
||||||
|
for smf_user in SmfUser.objects.exclude(username__exact=''):
|
||||||
|
SmfTasks.update_display_name.delay(smf_user)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@shared_task(name="smf.update_all_groups")
|
@shared_task(name="smf.update_all_groups")
|
||||||
def update_all_groups():
|
def update_all_groups():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user