diff --git a/backend/src/apis/humhub/model/Account.ts b/backend/src/apis/humhub/model/Account.ts index 1eb3e37be..ac80a195b 100644 --- a/backend/src/apis/humhub/model/Account.ts +++ b/backend/src/apis/humhub/model/Account.ts @@ -3,12 +3,11 @@ import { User } from '@entity/User' import { convertGradidoLanguageToHumhub } from '@/apis/humhub/convertLanguage' import { PublishNameLogic } from '@/data/PublishName.logic' -import { PublishNameType } from '@/graphql/enum/PublishNameType' export class Account { public constructor(user: User) { const publishNameLogic = new PublishNameLogic(user) - this.username = publishNameLogic.getUsername(user.humhubPublishName as PublishNameType) + this.username = publishNameLogic.getUsername() this.email = user.emailContact.email this.language = convertGradidoLanguageToHumhub(user.language) this.status = 1 diff --git a/backend/src/data/PublishName.logic.ts b/backend/src/data/PublishName.logic.ts index d3643d633..3c89fc057 100644 --- a/backend/src/data/PublishName.logic.ts +++ b/backend/src/data/PublishName.logic.ts @@ -66,7 +66,8 @@ export class PublishNameLogic { * @returns user.alias for publishNameType = PUBLISH_NAME_ALIAS_OR_INITALS and user has alias * else return user.firstName[0,2] + user.lastName[0,2] for publishNameType = [PUBLISH_NAME_ALIAS_OR_INITALS, PUBLISH_NAME_INITIALS] */ - public getUsername(publishNameType: PublishNameType): string { + public getUsername(): string { + const publishNameType = this.user.humhubPublishName as PublishNameType if ( [ PublishNameType.PUBLISH_NAME_ALIAS_OR_INITALS, diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index e31dc4867..e74ae8f45 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -60,7 +60,6 @@ import { EVENT_ADMIN_USER_DELETE, EVENT_ADMIN_USER_UNDELETE, } from '@/event/Events' -import { PublishNameType } from '@/graphql/enum/PublishNameType' import { isValidPassword } from '@/password/EncryptorUtils' import { encryptPassword, verifyPassword } from '@/password/PasswordEncryptor' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' @@ -172,7 +171,7 @@ export class UserResolver { if (CONFIG.HUMHUB_ACTIVE && dbUser.humhubAllowed) { const publishNameLogic = new PublishNameLogic(dbUser) humhubUserPromise = HumHubClient.getInstance()?.userByUsernameAsync( - publishNameLogic.getUsername(dbUser.humhubPublishName as PublishNameType), + publishNameLogic.getUsername(), ) } @@ -316,6 +315,8 @@ export class UserResolver { dbUser.firstName = firstName dbUser.lastName = lastName dbUser.language = language + // enable humhub from now on for new user + dbUser.humhubAllowed = true if (alias && (await validateAlias(alias))) { dbUser.alias = alias } @@ -386,6 +387,9 @@ export class UserResolver { await queryRunner.release() } logger.info('createUser() successful...') + if (CONFIG.HUMHUB_ACTIVE) { + void syncHumhub(null, dbUser) + } if (redeemCode) { eventRegisterRedeem.affectedUser = dbUser @@ -736,7 +740,8 @@ export class UserResolver { if (!humhubClient) { throw new LogError('cannot create humhub client') } - const username = dbUser.alias ?? dbUser.gradidoID + const userNameLogic = new PublishNameLogic(dbUser) + const username = userNameLogic.getUsername() let humhubUser = await humhubClient.userByUsername(username) if (!humhubUser) { humhubUser = await humhubClient.userByEmail(dbUser.emailContact.email) diff --git a/backend/src/graphql/resolver/util/syncHumhub.ts b/backend/src/graphql/resolver/util/syncHumhub.ts index 426f89c92..c229df655 100644 --- a/backend/src/graphql/resolver/util/syncHumhub.ts +++ b/backend/src/graphql/resolver/util/syncHumhub.ts @@ -7,11 +7,12 @@ import { UpdateUserInfosArgs } from '@/graphql/arg/UpdateUserInfosArgs' import { backendLogger as logger } from '@/server/logger' export async function syncHumhub( - updateUserInfosArg: UpdateUserInfosArgs, + updateUserInfosArg: UpdateUserInfosArgs | null, user: User, ): Promise { // check for humhub relevant changes if ( + updateUserInfosArg && updateUserInfosArg.alias === undefined && updateUserInfosArg.firstName === undefined && updateUserInfosArg.lastName === undefined &&