+
+ private buildActions () {
+ this.userActions = []
+
+ if (this.authService.isLoggedIn()) {
+ const authUser = this.authService.getUser()
+
+ if (this.user && authUser.id === this.user.id) return
+
+ if (this.user && authUser.hasRight(UserRight.MANAGE_USERS) && authUser.canManage(this.user)) {
+ this.userActions.push([
+ {
+ label: this.i18n('Edit user'),
+ description: this.i18n('Change quota, role, and more.'),
+ linkBuilder: ({ user }) => this.getRouterUserEditLink(user)
+ },
+ {
+ label: this.i18n('Delete user'),
+ description: this.i18n('Videos will be deleted, comments will be tombstoned.'),
+ handler: ({ user }) => this.removeUser(user)
+ },
+ {
+ label: this.i18n('Ban'),
+ description: this.i18n('User won\'t be able to login anymore, but videos and comments will be kept as is.'),
+ handler: ({ user }) => this.openBanUserModal(user),
+ isDisplayed: ({ user }) => !user.blocked
+ },
+ {
+ label: this.i18n('Unban user'),
+ description: this.i18n('Allow the user to login and create videos/comments again'),
+ handler: ({ user }) => this.unbanUser(user),
+ isDisplayed: ({ user }) => user.blocked
+ },
+ {
+ label: this.i18n('Set Email as Verified'),
+ handler: ({ user }) => this.setEmailAsVerified(user),
+ isDisplayed: ({ user }) => this.requiresEmailVerification && !user.blocked && user.emailVerified === false
+ }
+ ])
+ }
+
+ // Actions on accounts/servers
+ if (this.account) {
+ // User actions
+ this.userActions.push([
+ {
+ label: this.i18n('Mute this account'),
+ description: this.i18n('Hide any content from that user for you.'),
+ isDisplayed: ({ account }) => account.mutedByUser === false,
+ handler: ({ account }) => this.blockAccountByUser(account)
+ },
+ {
+ label: this.i18n('Unmute this account'),
+ description: this.i18n('Show back content from that user for you.'),
+ isDisplayed: ({ account }) => account.mutedByUser === true,
+ handler: ({ account }) => this.unblockAccountByUser(account)
+ },
+ {
+ label: this.i18n('Mute the instance'),
+ description: this.i18n('Hide any content from that instance for you.'),
+ isDisplayed: ({ account }) => !account.userId && account.mutedServerByInstance === false,
+ handler: ({ account }) => this.blockServerByUser(account.host)
+ },
+ {
+ label: this.i18n('Unmute the instance'),
+ description: this.i18n('Show back content from that instance for you.'),
+ isDisplayed: ({ account }) => !account.userId && account.mutedServerByInstance === true,
+ handler: ({ account }) => this.unblockServerByUser(account.host)
+ },
+ {
+ label: this.i18n('Remove comments from your videos'),
+ description: this.i18n('Remove comments of this account from your videos.'),
+ handler: ({ account }) => this.bulkRemoveCommentsOf({ accountName: account.nameWithHost, scope: 'my-videos' })
+ }
+ ])
+
+ let instanceActions: DropdownAction<{ user: User, account: Account }>[] = []
+
+ // Instance actions on account blocklists
+ if (authUser.hasRight(UserRight.MANAGE_ACCOUNTS_BLOCKLIST)) {
+ instanceActions = instanceActions.concat([
+ {
+ label: this.i18n('Mute this account by your instance'),
+ description: this.i18n('Hide any content from that user for you, your instance and its users.'),
+ isDisplayed: ({ account }) => account.mutedByInstance === false,
+ handler: ({ account }) => this.blockAccountByInstance(account)
+ },
+ {
+ label: this.i18n('Unmute this account by your instance'),
+ description: this.i18n('Show back content from that user for you, your instance and its users.'),
+ isDisplayed: ({ account }) => account.mutedByInstance === true,
+ handler: ({ account }) => this.unblockAccountByInstance(account)
+ }
+ ])
+ }
+
+ // Instance actions on server blocklists
+ if (authUser.hasRight(UserRight.MANAGE_SERVERS_BLOCKLIST)) {
+ instanceActions = instanceActions.concat([
+ {
+ label: this.i18n('Mute the instance by your instance'),
+ description: this.i18n('Hide any content from that instance for you, your instance and its users.'),
+ isDisplayed: ({ account }) => !account.userId && account.mutedServerByInstance === false,
+ handler: ({ account }) => this.blockServerByInstance(account.host)
+ },
+ {
+ label: this.i18n('Unmute the instance by your instance'),
+ description: this.i18n('Show back content from that instance for you, your instance and its users.'),
+ isDisplayed: ({ account }) => !account.userId && account.mutedServerByInstance === true,
+ handler: ({ account }) => this.unblockServerByInstance(account.host)
+ }
+ ])
+ }
+
+ if (authUser.hasRight(UserRight.REMOVE_ANY_VIDEO_COMMENT)) {
+ instanceActions = instanceActions.concat([
+ {
+ label: this.i18n('Remove comments from your instance'),
+ description: this.i18n('Remove comments of this account from your instance.'),
+ handler: ({ account }) => this.bulkRemoveCommentsOf({ accountName: account.nameWithHost, scope: 'instance' })
+ }
+ ])
+ }
+
+ if (instanceActions.length !== 0) {
+ this.userActions.push(instanceActions)
+ }
+ }
+ }
+ }