mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-17 22:03:50 +02:00
Group audit logs, ban list, invites, etc
This commit is contained in:
@@ -46,10 +46,17 @@ namespace VRCX
|
||||
foreach (Cookie cookie in cookies)
|
||||
cookieString += $"{cookie.Name}={cookie.Value};";
|
||||
}
|
||||
|
||||
httpClient.DefaultRequestHeaders.Add("Cookie", cookieString);
|
||||
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(Program.Version);
|
||||
using (var response = await httpClient.GetAsync(url))
|
||||
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, url)
|
||||
{
|
||||
Headers =
|
||||
{
|
||||
{ "Cookie", cookieString },
|
||||
{ "User-Agent", Program.Version }
|
||||
},
|
||||
|
||||
};
|
||||
using (var response = await httpClient.SendAsync(request))
|
||||
{
|
||||
response.EnsureSuccessStatusCode();
|
||||
await using (var fileStream = new FileStream(fileLocation, FileMode.Create, FileAccess.Write, FileShare.None))
|
||||
|
||||
918
html/src/app.js
918
html/src/app.js
File diff suppressed because it is too large
Load Diff
@@ -1007,8 +1007,8 @@ html
|
||||
el-dropdown-item(v-if="hasGroupPermission(groupDialog.ref, 'group-invites-manage')" icon="el-icon-message" command="Invite To Group") {{ $t('dialog.group.actions.invite_to_group') }}
|
||||
template(v-if="hasGroupPermission(groupDialog.ref, 'group-announcement-manage')")
|
||||
el-dropdown-item(icon="el-icon-tickets" command="Create Post") {{ $t('dialog.group.actions.create_post') }}
|
||||
template(v-if="hasGroupPermission(groupDialog.ref, 'group-members-manage')")
|
||||
el-dropdown-item(icon="el-icon-s-operation" command="Moderation Tools") {{ $t('dialog.group.actions.moderation_tools') }}
|
||||
//- template(v-if="hasGroupPermission(groupDialog.ref, 'group-members-manage')")
|
||||
el-dropdown-item(icon="el-icon-s-operation" command="Moderation Tools") {{ $t('dialog.group.actions.moderation_tools') }}
|
||||
template(v-if="groupDialog.ref.myMember && groupDialog.ref.privacy === 'default'")
|
||||
el-dropdown-item(icon="el-icon-view" command="Visibility Everyone" divided) #[i.el-icon-check(v-if="groupDialog.ref.myMember.visibility === 'visible'")] {{ $t('dialog.group.actions.visibility_everyone') }}
|
||||
el-dropdown-item(icon="el-icon-view" command="Visibility Friends") #[i.el-icon-check(v-if="groupDialog.ref.myMember.visibility === 'friends'")] {{ $t('dialog.group.actions.visibility_friends') }}
|
||||
@@ -2935,61 +2935,209 @@ html
|
||||
el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="groupMemberModeration" :visible.sync="groupMemberModeration.visible" :title="$t('dialog.group_member_moderation.header')" width="90vw")
|
||||
div(v-if="groupMemberModeration.visible")
|
||||
h3(v-text="groupMemberModeration.groupRef.name")
|
||||
div(style="margin-top:10px")
|
||||
el-button(type="default" @click="loadAllGroupMembers" size="mini" icon="el-icon-refresh" :loading="isGroupMembersLoading" circle)
|
||||
span(style="font-size:14px;margin-left:5px;margin-right:5px") {{ groupMemberModerationTable.data.length }}/{{ groupMemberModeration.groupRef.memberCount }}
|
||||
div(style="float:right;margin-top:5px")
|
||||
span(style="margin-right:5px") {{ $t('dialog.group.members.sort_by') }}
|
||||
el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px" :disabled="isGroupMembersLoading || groupDialog.memberSearch.length")
|
||||
el-button(size="mini")
|
||||
span {{ groupDialog.memberSortOrder.name }} #[i.el-icon-arrow-down.el-icon--right]
|
||||
el-dropdown-menu(#default="dropdown")
|
||||
el-dropdown-item(v-for="(item) in groupDialogSortingOptions" v-text="item.name" @click.native="setGroupMemberSortOrder(item)")
|
||||
span(style="margin-right:5px") {{ $t('dialog.group.members.filter') }}
|
||||
el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px" :disabled="isGroupMembersLoading || groupDialog.memberSearch.length")
|
||||
el-button(size="mini")
|
||||
span {{ groupDialog.memberFilter.name }} #[i.el-icon-arrow-down.el-icon--right]
|
||||
el-dropdown-menu(#default="dropdown")
|
||||
el-dropdown-item(v-for="(item) in groupDialogFilterOptions" v-text="item.name" @click.native="setGroupMemberFilter(item)")
|
||||
el-dropdown-item(v-for="(item) in groupDialog.ref.roles" v-text="item.name" @click.native="setGroupMemberFilter(item)")
|
||||
el-input(v-model="groupDialog.memberSearch" @input="groupMembersSearch" clearable size="mini" :placeholder="$t('dialog.group.members.search')" style="margin-top:10px;margin-bottom:10px")
|
||||
el-tabs(type="card" style="height:100%")
|
||||
el-tab-pane(:label="$t('dialog.group_member_moderation.members')")
|
||||
div(style="margin-top:10px")
|
||||
el-button(type="default" @click="loadAllGroupMembers" size="mini" icon="el-icon-refresh" :loading="isGroupMembersLoading" circle)
|
||||
span(style="font-size:14px;margin-left:5px;margin-right:5px") {{ groupMemberModerationTable.data.length }}/{{ groupMemberModeration.groupRef.memberCount }}
|
||||
div(style="float:right;margin-top:5px")
|
||||
span(style="margin-right:5px") {{ $t('dialog.group.members.sort_by') }}
|
||||
el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px" :disabled="isGroupMembersLoading || groupDialog.memberSearch.length || !hasGroupPermission(groupDialog.ref, 'group-bans-manage')")
|
||||
el-button(size="mini")
|
||||
span {{ groupDialog.memberSortOrder.name }} #[i.el-icon-arrow-down.el-icon--right]
|
||||
el-dropdown-menu(#default="dropdown")
|
||||
el-dropdown-item(v-for="(item) in groupDialogSortingOptions" v-text="item.name" @click.native="setGroupMemberSortOrder(item)")
|
||||
span(style="margin-right:5px") {{ $t('dialog.group.members.filter') }}
|
||||
el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px" :disabled="isGroupMembersLoading || groupDialog.memberSearch.length || !hasGroupPermission(groupDialog.ref, 'group-bans-manage')")
|
||||
el-button(size="mini")
|
||||
span {{ groupDialog.memberFilter.name }} #[i.el-icon-arrow-down.el-icon--right]
|
||||
el-dropdown-menu(#default="dropdown")
|
||||
el-dropdown-item(v-for="(item) in groupDialogFilterOptions" v-text="item.name" @click.native="setGroupMemberFilter(item)")
|
||||
el-dropdown-item(v-for="(item) in groupDialog.ref.roles" v-text="item.name" @click.native="setGroupMemberFilter(item)")
|
||||
el-input(v-model="groupDialog.memberSearch" :disabled="!hasGroupPermission(groupDialog.ref, 'group-bans-manage')" @input="groupMembersSearch" clearable size="mini" :placeholder="$t('dialog.group.members.search')" style="margin-top:10px;margin-bottom:10px")
|
||||
br
|
||||
el-button(size="small" @click="selectAllGroupMembers") {{ $t('dialog.group_member_moderation.select_all') }}
|
||||
data-tables(v-bind="groupMemberModerationTable" style="margin-top:10px")
|
||||
el-table-column(width="55" prop="$selected" :key="groupMemberModerationTableForceUpdate")
|
||||
template(v-once #default="scope")
|
||||
el-button(type="text" size="mini" @click.stop)
|
||||
el-checkbox(v-model="scope.row.$selected" @change="groupMemberModerationTableSelectionChange(scope.row)")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.avatar')" width="70" prop="photo")
|
||||
template(v-once #default="scope")
|
||||
el-popover(placement="right" height="500px" trigger="hover")
|
||||
img.friends-list-avatar(slot="reference" v-lazy="userImage(scope.row.user)")
|
||||
img.friends-list-avatar(v-lazy="userImageFull(scope.row.user)" style="height:500px;cursor:pointer" @click="showFullscreenImageDialog(userImageFull(scope.row.user))")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.display_name')" width="160" prop="$displayName" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(style="cursor:pointer" @click="showUserDialog(scope.row.userId)")
|
||||
span(v-if="randomUserColours" v-text="scope.row.user.displayName" :style="{'color':scope.row.user.$userColour}")
|
||||
span(v-else v-text="scope.row.user.displayName")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.roles')" prop="roleIds" sortable)
|
||||
template(v-once #default="scope")
|
||||
template(v-for="roleId in scope.row.roleIds" :key="roleId")
|
||||
span(v-for="(role, rIndex) in groupMemberModeration.groupRef.roles" :key="rIndex" v-if="role.id === roleId" v-text="role.name")
|
||||
span(v-if="scope.row.roleIds.indexOf(roleId) < scope.row.roleIds.length - 1") ,
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.notes')" prop="managerNotes" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.managerNotes" @click.stop)
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.joined_at')" width="170" prop="joinedAt" sortable)
|
||||
template(v-once #default="scope")
|
||||
span {{ scope.row.joinedAt | formatDate('long') }}
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.visibility')" width="120" prop="visibility" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.visibility")
|
||||
el-tab-pane(:label="$t('dialog.group_member_moderation.bans')" :disabled="!hasGroupPermission(groupDialog.ref, 'group-bans-manage')")
|
||||
div(style="margin-top:10px")
|
||||
el-button(type="default" @click="getAllGroupBans(groupMemberModeration.id)" size="mini" icon="el-icon-refresh" :loading="isGroupMembersLoading" circle)
|
||||
span(style="font-size:14px;margin-left:5px;margin-right:5px") {{ groupBansModerationTable.data.length }}
|
||||
br
|
||||
el-input(v-model="groupBansModerationTable.filters[0].value" clearable size="mini" :placeholder="$t('dialog.group.members.search')" style="margin-top:10px;margin-bottom:10px")
|
||||
br
|
||||
el-button(size="small" @click="selectAllGroupBans") {{ $t('dialog.group_member_moderation.select_all') }}
|
||||
data-tables(v-bind="groupBansModerationTable" style="margin-top:10px")
|
||||
el-table-column(width="55" prop="$selected" :key="groupMemberModerationTableForceUpdate")
|
||||
template(v-once #default="scope")
|
||||
el-button(type="text" size="mini" @click.stop)
|
||||
el-checkbox(v-model="scope.row.$selected" @change="groupMemberModerationTableSelectionChange(scope.row)")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.avatar')" width="70" prop="photo")
|
||||
template(v-once #default="scope")
|
||||
el-popover(placement="right" height="500px" trigger="hover")
|
||||
img.friends-list-avatar(slot="reference" v-lazy="userImage(scope.row.user)")
|
||||
img.friends-list-avatar(v-lazy="userImageFull(scope.row.user)" style="height:500px;cursor:pointer" @click="showFullscreenImageDialog(userImageFull(scope.row.user))")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.display_name')" width="160" prop="$displayName" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(style="cursor:pointer" @click="showUserDialog(scope.row.userId)")
|
||||
span(v-if="randomUserColours" v-text="scope.row.user.displayName" :style="{'color':scope.row.user.$userColour}")
|
||||
span(v-else v-text="scope.row.user.displayName")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.roles')" prop="roleIds" sortable)
|
||||
template(v-once #default="scope")
|
||||
template(v-for="roleId in scope.row.roleIds" :key="roleId")
|
||||
span(v-for="(role, rIndex) in groupMemberModeration.groupRef.roles" :key="rIndex" v-if="role.id === roleId" v-text="role.name")
|
||||
span(v-if="scope.row.roleIds.indexOf(roleId) < scope.row.roleIds.length - 1") ,
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.notes')" prop="managerNotes" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.managerNotes" @click.stop)
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.joined_at')" width="170" prop="joinedAt" sortable)
|
||||
template(v-once #default="scope")
|
||||
span {{ scope.row.joinedAt | formatDate('long') }}
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.banned_at')" width="170" prop="joinedAt" sortable)
|
||||
template(v-once #default="scope")
|
||||
span {{ scope.row.bannedAt | formatDate('long') }}
|
||||
el-tab-pane(:label="$t('dialog.group_member_moderation.invites')" :disabled="!hasGroupPermission(groupDialog.ref, 'group-invites-manage')")
|
||||
div(style="margin-top:10px")
|
||||
el-button(type="default" @click="getAllGroupInvitesAndJoinRequests(groupMemberModeration.id)" size="mini" icon="el-icon-refresh" :loading="isGroupMembersLoading" circle)
|
||||
br
|
||||
el-tabs
|
||||
el-tab-pane
|
||||
span(slot="label")
|
||||
span(v-text="$t('dialog.group_member_moderation.sent_invites')" style="font-weight:bold;font-size:16px")
|
||||
span(style="color:#909399;font-size:12px;margin-left:5px") {{ groupInvitesModerationTable.data.length }}
|
||||
el-button(size="small" @click="selectAllGroupInvites") {{ $t('dialog.group_member_moderation.select_all') }}
|
||||
data-tables(v-bind="groupInvitesModerationTable" style="margin-top:10px")
|
||||
el-table-column(width="55" prop="$selected" :key="groupMemberModerationTableForceUpdate")
|
||||
template(v-once #default="scope")
|
||||
el-button(type="text" size="mini" @click.stop)
|
||||
el-checkbox(v-model="scope.row.$selected" @change="groupMemberModerationTableSelectionChange(scope.row)")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.avatar')" width="70" prop="photo")
|
||||
template(v-once #default="scope")
|
||||
el-popover(placement="right" height="500px" trigger="hover")
|
||||
img.friends-list-avatar(slot="reference" v-lazy="userImage(scope.row.user)")
|
||||
img.friends-list-avatar(v-lazy="userImageFull(scope.row.user)" style="height:500px;cursor:pointer" @click="showFullscreenImageDialog(userImageFull(scope.row.user))")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.display_name')" width="160" prop="$displayName" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(style="cursor:pointer" @click="showUserDialog(scope.row.userId)")
|
||||
span(v-if="randomUserColours" v-text="scope.row.user.displayName" :style="{'color':scope.row.user.$userColour}")
|
||||
span(v-else v-text="scope.row.user.displayName")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.notes')" prop="managerNotes" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.managerNotes" @click.stop)
|
||||
br
|
||||
el-button(@click="groupMembersDeleteSentInvite" :disabled="groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-invites-manage')") {{ $t('dialog.group_member_moderation.delete_sent_invite') }}
|
||||
el-tab-pane
|
||||
span(slot="label")
|
||||
span(v-text="$t('dialog.group_member_moderation.join_requests')" style="font-weight:bold;font-size:16px")
|
||||
span(style="color:#909399;font-size:12px;margin-left:5px") {{ groupJoinRequestsModerationTable.data.length }}
|
||||
el-button(size="small" @click="selectAllGroupJoinRequests") {{ $t('dialog.group_member_moderation.select_all') }}
|
||||
data-tables(v-bind="groupJoinRequestsModerationTable" style="margin-top:10px")
|
||||
el-table-column(width="55" prop="$selected" :key="groupMemberModerationTableForceUpdate")
|
||||
template(v-once #default="scope")
|
||||
el-button(type="text" size="mini" @click.stop)
|
||||
el-checkbox(v-model="scope.row.$selected" @change="groupMemberModerationTableSelectionChange(scope.row)")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.avatar')" width="70" prop="photo")
|
||||
template(v-once #default="scope")
|
||||
el-popover(placement="right" height="500px" trigger="hover")
|
||||
img.friends-list-avatar(slot="reference" v-lazy="userImage(scope.row.user)")
|
||||
img.friends-list-avatar(v-lazy="userImageFull(scope.row.user)" style="height:500px;cursor:pointer" @click="showFullscreenImageDialog(userImageFull(scope.row.user))")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.display_name')" width="160" prop="$displayName" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(style="cursor:pointer" @click="showUserDialog(scope.row.userId)")
|
||||
span(v-if="randomUserColours" v-text="scope.row.user.displayName" :style="{'color':scope.row.user.$userColour}")
|
||||
span(v-else v-text="scope.row.user.displayName")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.notes')" prop="managerNotes" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.managerNotes" @click.stop)
|
||||
br
|
||||
el-button(@click="groupMembersAcceptInviteRequest" :disabled="groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-invites-manage')") {{ $t('dialog.group_member_moderation.accept_join_requests') }}
|
||||
el-button(@click="groupMembersRejectInviteRequest" :disabled="groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-invites-manage')") {{ $t('dialog.group_member_moderation.reject_join_requests') }}
|
||||
el-button(@click="groupMembersBlockJoinRequest" :disabled="groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-invites-manage')") {{ $t('dialog.group_member_moderation.block_join_requests') }}
|
||||
el-tab-pane
|
||||
span(slot="label")
|
||||
span(v-text="$t('dialog.group_member_moderation.blocked_requests')" style="font-weight:bold;font-size:16px")
|
||||
span(style="color:#909399;font-size:12px;margin-left:5px") {{ groupBlockedModerationTable.data.length }}
|
||||
el-button(size="small" @click="selectAllGroupBlocked") {{ $t('dialog.group_member_moderation.select_all') }}
|
||||
data-tables(v-bind="groupBlockedModerationTable" style="margin-top:10px")
|
||||
el-table-column(width="55" prop="$selected" :key="groupMemberModerationTableForceUpdate")
|
||||
template(v-once #default="scope")
|
||||
el-button(type="text" size="mini" @click.stop)
|
||||
el-checkbox(v-model="scope.row.$selected" @change="groupMemberModerationTableSelectionChange(scope.row)")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.avatar')" width="70" prop="photo")
|
||||
template(v-once #default="scope")
|
||||
el-popover(placement="right" height="500px" trigger="hover")
|
||||
img.friends-list-avatar(slot="reference" v-lazy="userImage(scope.row.user)")
|
||||
img.friends-list-avatar(v-lazy="userImageFull(scope.row.user)" style="height:500px;cursor:pointer" @click="showFullscreenImageDialog(userImageFull(scope.row.user))")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.display_name')" width="160" prop="$displayName" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(style="cursor:pointer" @click="showUserDialog(scope.row.userId)")
|
||||
span(v-if="randomUserColours" v-text="scope.row.user.displayName" :style="{'color':scope.row.user.$userColour}")
|
||||
span(v-else v-text="scope.row.user.displayName")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.notes')" prop="managerNotes" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.managerNotes" @click.stop)
|
||||
br
|
||||
el-button(@click="groupMembersDeleteBlockedRequest" :disabled="groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-invites-manage')") {{ $t('dialog.group_member_moderation.delete_blocked_requests') }}
|
||||
el-tab-pane(:label="$t('dialog.group_member_moderation.logs')" :disabled="!hasGroupPermission(groupDialog.ref, 'group-audit-view')")
|
||||
div(style="margin-top:10px")
|
||||
el-button(type="default" @click="getAllGroupLogs(groupMemberModeration.id)" size="mini" icon="el-icon-refresh" :loading="isGroupMembersLoading" circle)
|
||||
span(style="font-size:14px;margin-left:5px;margin-right:5px") {{ groupLogsModerationTable.data.length }}
|
||||
br
|
||||
data-tables(v-bind="groupLogsModerationTable" style="margin-top:10px")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.created_at')" width="170" prop="created_at" sortable)
|
||||
template(v-once #default="scope")
|
||||
span {{ scope.row.created_at | formatDate('long') }}
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.type')" width="190" prop="eventType" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.eventType")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.display_name')" width="160" prop="actorDisplayName" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(style="cursor:pointer" @click="showUserDialog(scope.row.actorId)")
|
||||
span(v-text="scope.row.actorDisplayName")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.description')" prop="description")
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.description")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.data')" prop="data")
|
||||
template(v-once #default="scope")
|
||||
span(v-if="Object.keys(scope.row.data).length" v-text="JSON.stringify(scope.row.data)")
|
||||
br
|
||||
el-button(size="small" @click="selectAllGroupMembers") {{ $t('dialog.group_member_moderation.select_all') }}
|
||||
data-tables(v-bind="groupMemberModerationTable" style="margin-top:10px")
|
||||
el-table-column(width="55" prop="$selected" :key="groupMemberModerationTableForceUpdate")
|
||||
template(v-once #default="scope")
|
||||
el-button(type="text" size="mini" @click.stop)
|
||||
el-checkbox(v-model="scope.row.$selected" @change="groupMemberModerationTableSelectionChange(scope.row)")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.avatar')" width="70" prop="photo")
|
||||
template(v-once #default="scope")
|
||||
el-popover(placement="right" height="500px" trigger="hover")
|
||||
img.friends-list-avatar(slot="reference" v-lazy="userImage(scope.row.user)")
|
||||
img.friends-list-avatar(v-lazy="userImageFull(scope.row.user)" style="height:500px;cursor:pointer" @click="showFullscreenImageDialog(userImageFull(scope.row.user))")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.display_name')" width="160" prop="displayName" sortable :sort-method="(a, b) => sortAlphabetically(a.user, b.user, 'displayName')")
|
||||
template(v-once #default="scope")
|
||||
span(style="cursor:pointer" @click="showUserDialog(scope.row.userId)")
|
||||
span(v-if="randomUserColours" v-text="scope.row.user.displayName" :style="{'color':scope.row.user.$userColour}")
|
||||
span(v-else v-text="scope.row.user.displayName")
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.roles')" prop="roleIds" sortable)
|
||||
template(v-once #default="scope")
|
||||
template(v-for="roleId in scope.row.roleIds" :key="roleId")
|
||||
span(v-for="(role, rIndex) in groupMemberModeration.groupRef.roles" :key="rIndex" v-if="role.id === roleId" v-text="role.name")
|
||||
span(v-if="scope.row.roleIds.indexOf(roleId) < scope.row.roleIds.length - 1") ,
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.notes')" prop="managerNotes" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.managerNotes" @click.stop)
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.joined_at')" width="170" prop="joinedAt" sortable)
|
||||
template(v-once #default="scope")
|
||||
span {{ scope.row.joinedAt | formatDate('long') }}
|
||||
el-table-column(:label="$t('dialog.group_member_moderation.visibility')" width="120" prop="visibility" sortable)
|
||||
template(v-once #default="scope")
|
||||
span(v-text="scope.row.visibility")
|
||||
span.name {{ $t('dialog.group_member_moderation.user_id') }}
|
||||
br
|
||||
el-input(v-model="groupMemberModeration.selectUserId" size="mini" style="margin-top:5px;width:340px" :placeholder="$t('dialog.group_member_moderation.user_id_placeholder')" clearable)
|
||||
el-button(size="small" @click="selectGroupMemberUserId" :disabled="!groupMemberModeration.selectUserId") {{ $t('dialog.group_member_moderation.select_user') }}
|
||||
br
|
||||
span.name {{ $t('dialog.group_member_moderation.selected_users') }}
|
||||
el-button(type="default" @click="clearSelectedGroupMembers" size="mini" icon="el-icon-delete" circle style="margin-left:5px")
|
||||
br
|
||||
el-tag(v-for="user in groupMemberModeration.selectedUsersArray" type="info" disable-transitions="true" :key="user.id" style="margin-right:5px;margin-top:5px" closable @close="deleteSelectedGroupMember(user)")
|
||||
span {{ user.user.displayName }}
|
||||
span {{ user.user?.displayName }} #[i.el-icon-warning(v-if="user.membershipStatus !== 'member'" style="margin-left:5px")]
|
||||
br
|
||||
br
|
||||
span.name {{ $t('dialog.group_member_moderation.notes') }}
|
||||
@@ -3005,11 +3153,12 @@ html
|
||||
br
|
||||
span.name {{ $t('dialog.group_member_moderation.actions') }}
|
||||
br
|
||||
el-button(@click="groupMembersAddRoles" :disabled="!groupMemberModeration.selectedRoles.length") {{ $t('dialog.group_member_moderation.add_roles') }}
|
||||
el-button(@click="groupMembersRemoveRoles" :disabled="!groupMemberModeration.selectedRoles.length") {{ $t('dialog.group_member_moderation.remove_roles') }}
|
||||
el-button(@click="groupMembersSaveNote" :disabled="groupMemberModeration.progressCurrent") {{ $t('dialog.group_member_moderation.save_note') }}
|
||||
el-button(@click="groupMembersKick" :disabled="groupMemberModeration.progressCurrent") {{ $t('dialog.group_member_moderation.kick') }}
|
||||
el-button(@click="groupMembersBan" :disabled="groupMemberModeration.progressCurrent") {{ $t('dialog.group_member_moderation.ban') }}
|
||||
el-button(@click="groupMembersAddRoles" :disabled="!groupMemberModeration.selectedRoles.length || groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-roles-assign')") {{ $t('dialog.group_member_moderation.add_roles') }}
|
||||
el-button(@click="groupMembersRemoveRoles" :disabled="!groupMemberModeration.selectedRoles.length || groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-roles-assign')") {{ $t('dialog.group_member_moderation.remove_roles') }}
|
||||
el-button(@click="groupMembersSaveNote" :disabled="groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-members-manage')") {{ $t('dialog.group_member_moderation.save_note') }}
|
||||
el-button(@click="groupMembersKick" :disabled="groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-members-remove')") {{ $t('dialog.group_member_moderation.kick') }}
|
||||
el-button(@click="groupMembersBan" :disabled="groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-bans-manage')") {{ $t('dialog.group_member_moderation.ban') }}
|
||||
el-button(@click="groupMembersUnban" :disabled="groupMemberModeration.progressCurrent || !hasGroupPermission(groupDialog.ref, 'group-bans-manage')") {{ $t('dialog.group_member_moderation.unban') }}
|
||||
span(v-if="groupMemberModeration.progressCurrent" style="margin-top:10px") #[i.el-icon-loading(style="margin-left:5px;margin-right:5px")] {{ $t('dialog.group_member_moderation.progress') }} {{ groupMemberModeration.progressCurrent }}/{{ groupMemberModeration.progressTotal }}
|
||||
el-button(v-if="groupMemberModeration.progressCurrent" @click="groupMemberModeration.progressTotal = 0" style="margin-left:5px") {{ $t('dialog.group_member_moderation.cancel') }}
|
||||
|
||||
|
||||
@@ -1288,20 +1288,41 @@
|
||||
},
|
||||
"group_member_moderation": {
|
||||
"header": "Group Member Moderation",
|
||||
"members": "Members",
|
||||
"bans": "Bans",
|
||||
"invites": "Invites",
|
||||
"logs": "Logs",
|
||||
"sent_invites": "Sent Invites",
|
||||
"join_requests": "Join Requests",
|
||||
"blocked_requests": "Blocked Requests",
|
||||
"notes": "Manager Note",
|
||||
"note_placeholder": "Click to add a note",
|
||||
"actions": "Actions",
|
||||
"kick": "Kick",
|
||||
"ban": "Ban",
|
||||
"unban": "Unban",
|
||||
"save_note": "Save Note",
|
||||
"delete_sent_invite": "Delete Sent Invite",
|
||||
"delete_blocked_requests": "Delete Blocked Requests",
|
||||
"accept_join_requests": "Accept Join Requests",
|
||||
"reject_join_requests": "Reject Join Requests",
|
||||
"block_join_requests": "Block Join Requests",
|
||||
"group_members": "Group Members",
|
||||
"progress": "Progress:",
|
||||
"display_name": "Display Name",
|
||||
"visibility": "Visibility",
|
||||
"avatar": "Avatar",
|
||||
"joined_at": "Joined At",
|
||||
"banned_at": "Banned At",
|
||||
"created_at": "Created At",
|
||||
"type": "Type",
|
||||
"description": "Description",
|
||||
"data": "Data",
|
||||
"note": "Note",
|
||||
"roles": "Roles",
|
||||
"user_id": "User ID",
|
||||
"user_id_placeholder": "Enter User ID(s)",
|
||||
"select_user": "Select User",
|
||||
"selected_users": "Selected Users",
|
||||
"select_all": "Select All",
|
||||
"cancel": "Cancel",
|
||||
|
||||
@@ -2482,7 +2482,7 @@ class Database {
|
||||
|
||||
async fixBrokenGroupChange() {
|
||||
await sqliteService.executeNonQuery(
|
||||
`DELETE FROM ${Database.userPrefix}_notifications WHERE type = 'groupChange'`
|
||||
`DELETE FROM ${Database.userPrefix}_notifications WHERE type = 'groupChange' AND created_at < '2024-04-23T03:00:00.000Z'`
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user