Compare commits
No commits in common. "77f759a9ca995622f4b493c78507f02b5a455c5d" and "a917803eff42a3c8d352dff758272391ae453791" have entirely different histories.
77f759a9ca
...
a917803eff
@ -18,10 +18,6 @@ class UserWarningsRepositoryABC(ABC):
|
|||||||
def get_user_warnings_by_id(self, id: int) -> UserWarnings:
|
def get_user_warnings_by_id(self, id: int) -> UserWarnings:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_user_warnings_by_server_id(self, server_id: int) -> List[UserWarnings]:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_user_warnings_by_user_id(self, user_id: int) -> List[UserWarnings]:
|
def get_user_warnings_by_user_id(self, user_id: int) -> List[UserWarnings]:
|
||||||
pass
|
pass
|
||||||
|
@ -2,10 +2,6 @@ from datetime import datetime
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from cpl_core.database import TableABC
|
from cpl_core.database import TableABC
|
||||||
from cpl_core.dependency_injection import ServiceProviderABC
|
|
||||||
from cpl_discord.service import DiscordBotServiceABC
|
|
||||||
from cpl_query.extension import List
|
|
||||||
from discord import Role
|
|
||||||
|
|
||||||
from bot_data.model.server import Server
|
from bot_data.model.server import Server
|
||||||
|
|
||||||
@ -37,13 +33,6 @@ class Level(TableABC):
|
|||||||
def id(self) -> int:
|
def id(self) -> int:
|
||||||
return self._id
|
return self._id
|
||||||
|
|
||||||
@property
|
|
||||||
@ServiceProviderABC.inject
|
|
||||||
def icon_url(self, bot: DiscordBotServiceABC) -> str:
|
|
||||||
guild = bot.get_guild(self.server.discord_id)
|
|
||||||
role = List(Role, guild.roles).where(lambda x: x.name == self._name).first_or_default()
|
|
||||||
return None if role is None else role.icon
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
return self._name
|
return self._name
|
||||||
|
@ -59,17 +59,6 @@ class UserWarnings(TableABC):
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_select_by_server_id_string(id: int) -> str:
|
|
||||||
return str(
|
|
||||||
f"""
|
|
||||||
SELECT `UserWarnings`.* FROM `UserWarnings`
|
|
||||||
INNER JOIN `Users`
|
|
||||||
ON `Users`.`UserId` = `UserWarnings`.`UserId`
|
|
||||||
WHERE `Users`.`ServerId` = {id};
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_select_by_user_id_string(id: int) -> str:
|
def get_select_by_user_id_string(id: int) -> str:
|
||||||
return str(
|
return str(
|
||||||
|
@ -56,20 +56,6 @@ class UserWarningsRepositoryService(UserWarningsRepositoryABC):
|
|||||||
self._logger.trace(__name__, f"Send SQL command: {UserWarnings.get_select_by_id_string(id)}")
|
self._logger.trace(__name__, f"Send SQL command: {UserWarnings.get_select_by_id_string(id)}")
|
||||||
return self._from_result(self._context.select(UserWarnings.get_select_by_id_string(id))[0])
|
return self._from_result(self._context.select(UserWarnings.get_select_by_id_string(id))[0])
|
||||||
|
|
||||||
def get_user_warnings_by_server_id(self, server_id: int) -> List[UserWarnings]:
|
|
||||||
self._logger.trace(
|
|
||||||
__name__,
|
|
||||||
f"Send SQL command: {UserWarnings.get_select_by_server_id_string(server_id)}",
|
|
||||||
)
|
|
||||||
|
|
||||||
return List(
|
|
||||||
UserWarnings,
|
|
||||||
[
|
|
||||||
self._from_result(warning)
|
|
||||||
for warning in self._context.select(UserWarnings.get_select_by_server_id_string(server_id))
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
def get_user_warnings_by_user_id(self, user_id: int) -> List[UserWarnings]:
|
def get_user_warnings_by_user_id(self, user_id: int) -> List[UserWarnings]:
|
||||||
self._logger.trace(
|
self._logger.trace(
|
||||||
__name__,
|
__name__,
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
type Level implements TableWithHistoryQuery {
|
type Level implements TableWithHistoryQuery {
|
||||||
id: ID
|
id: ID
|
||||||
iconURL: String
|
|
||||||
name: String
|
name: String
|
||||||
color: String
|
color: String
|
||||||
minXp: Int
|
minXp: Int
|
||||||
|
@ -29,9 +29,6 @@ type Server implements TableWithHistoryQuery {
|
|||||||
activeUserCount: Int
|
activeUserCount: Int
|
||||||
users(filter: UserFilter, page: Page, sort: Sort): [User]
|
users(filter: UserFilter, page: Page, sort: Sort): [User]
|
||||||
|
|
||||||
userWarningCount: Int
|
|
||||||
userWarnings(filter: UserWarningFilter, page: Page, sort: Sort): [UserWarning]
|
|
||||||
|
|
||||||
achievementCount: Int
|
achievementCount: Int
|
||||||
achievements(filter: AchievementFilter, page: Page, sort: Sort): [Achievement]
|
achievements(filter: AchievementFilter, page: Page, sort: Sort): [Achievement]
|
||||||
|
|
||||||
|
@ -86,9 +86,5 @@ class UserMutation(QueryABC):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
member = self._bot.get_guild(user.server.discord_id).get_member(user.discord_id)
|
member = self._bot.get_guild(user.server.discord_id).get_member(user.discord_id)
|
||||||
if "author" not in warning:
|
author = self._users.get_user_by_id(int(warning["author"]))
|
||||||
author = Route.get_user().users.where(lambda u: u.server.id == user.server.id).single()
|
|
||||||
else:
|
|
||||||
author = self._users.get_user_by_id(int(warning["author"]))
|
|
||||||
|
|
||||||
self._user_warning_service.add_warnings(member, warning["description"], author.discord_id)
|
self._user_warning_service.add_warnings(member, warning["description"], author.discord_id)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from cpl_core.database.context import DatabaseContextABC
|
from cpl_core.database.context import DatabaseContextABC
|
||||||
|
|
||||||
|
from bot_data.model.level import Level
|
||||||
from bot_data.model.level_history import LevelHistory
|
from bot_data.model.level_history import LevelHistory
|
||||||
from bot_graphql.abc.data_query_with_history_abc import DataQueryWithHistoryABC
|
from bot_graphql.abc.data_query_with_history_abc import DataQueryWithHistoryABC
|
||||||
|
|
||||||
@ -8,13 +9,33 @@ class LevelQuery(DataQueryWithHistoryABC):
|
|||||||
def __init__(self, db: DatabaseContextABC):
|
def __init__(self, db: DatabaseContextABC):
|
||||||
DataQueryWithHistoryABC.__init__(self, "Level", "LevelsHistory", LevelHistory, db)
|
DataQueryWithHistoryABC.__init__(self, "Level", "LevelsHistory", LevelHistory, db)
|
||||||
|
|
||||||
self.set_field("id", lambda x, *_: x.id)
|
self.set_field("id", self.resolve_id)
|
||||||
self.set_field(
|
self.set_field("name", self.resolve_name)
|
||||||
"iconURL",
|
self.set_field("color", self.resolve_color)
|
||||||
lambda x, *_: "https://cdn.discordapp.com/emojis/1170348708894875659.webp?size=32&quality=lossless",
|
self.set_field("minXp", self.resolve_min_xp)
|
||||||
)
|
self.set_field("permissions", self.resolve_permissions)
|
||||||
self.set_field("name", lambda x, *_: x.name)
|
self.set_field("server", self.resolve_server)
|
||||||
self.set_field("color", lambda x, *_: x.color)
|
|
||||||
self.set_field("minXp", lambda x, *_: x.min_xp)
|
@staticmethod
|
||||||
self.set_field("permissions", lambda x, *_: x.permissions)
|
def resolve_id(level: Level, *_):
|
||||||
self.set_field("server", lambda x, *_: x.server)
|
return level.id
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def resolve_name(level: Level, *_):
|
||||||
|
return level.name
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def resolve_color(level: Level, *_):
|
||||||
|
return level.color
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def resolve_min_xp(level: Level, *_):
|
||||||
|
return level.min_xp
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def resolve_permissions(level: Level, *_):
|
||||||
|
return level.permissions
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def resolve_server(level: Level, *_):
|
||||||
|
return level.server
|
||||||
|
@ -17,7 +17,6 @@ from bot_data.abc.user_joined_voice_channel_repository_abc import (
|
|||||||
UserJoinedVoiceChannelRepositoryABC,
|
UserJoinedVoiceChannelRepositoryABC,
|
||||||
)
|
)
|
||||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
||||||
from bot_data.abc.user_warnings_repository_abc import UserWarningsRepositoryABC
|
|
||||||
from bot_data.model.server import Server
|
from bot_data.model.server import Server
|
||||||
from bot_data.model.server_config import ServerConfig
|
from bot_data.model.server_config import ServerConfig
|
||||||
from bot_data.model.server_history import ServerHistory
|
from bot_data.model.server_history import ServerHistory
|
||||||
@ -29,7 +28,6 @@ from bot_graphql.filter.level_filter import LevelFilter
|
|||||||
from bot_graphql.filter.scheduled_event_filter import ScheduledEventFilter
|
from bot_graphql.filter.scheduled_event_filter import ScheduledEventFilter
|
||||||
from bot_graphql.filter.short_role_name_filter import ShortRoleNameFilter
|
from bot_graphql.filter.short_role_name_filter import ShortRoleNameFilter
|
||||||
from bot_graphql.filter.user_filter import UserFilter
|
from bot_graphql.filter.user_filter import UserFilter
|
||||||
from bot_graphql.filter.user_warning_filter import UserWarningFilter
|
|
||||||
from bot_graphql.model.server_statistics import ServerStatistics
|
from bot_graphql.model.server_statistics import ServerStatistics
|
||||||
|
|
||||||
|
|
||||||
@ -50,7 +48,6 @@ class ServerQuery(DataQueryWithHistoryABC):
|
|||||||
short_role_names: ShortRoleNameRepositoryABC,
|
short_role_names: ShortRoleNameRepositoryABC,
|
||||||
scheduled_events: ScheduledEventRepositoryABC,
|
scheduled_events: ScheduledEventRepositoryABC,
|
||||||
server_configs: ServerConfigRepositoryABC,
|
server_configs: ServerConfigRepositoryABC,
|
||||||
user_warnings: UserWarningsRepositoryABC,
|
|
||||||
):
|
):
|
||||||
DataQueryWithHistoryABC.__init__(self, "Server", "ServersHistory", ServerHistory, db)
|
DataQueryWithHistoryABC.__init__(self, "Server", "ServersHistory", ServerHistory, db)
|
||||||
|
|
||||||
@ -92,11 +89,6 @@ class ServerQuery(DataQueryWithHistoryABC):
|
|||||||
lambda server, *_: self._users.get_users_with_activity_by_server_id(server.id),
|
lambda server, *_: self._users.get_users_with_activity_by_server_id(server.id),
|
||||||
UserFilter,
|
UserFilter,
|
||||||
)
|
)
|
||||||
self.add_collection(
|
|
||||||
"userWarning",
|
|
||||||
lambda server, *_: user_warnings.get_user_warnings_by_server_id(server.id),
|
|
||||||
UserWarningFilter,
|
|
||||||
)
|
|
||||||
self.add_collection(
|
self.add_collection(
|
||||||
"gameServer",
|
"gameServer",
|
||||||
lambda server, *_: game_servers.get_game_servers_by_server_id(server.id),
|
lambda server, *_: game_servers.get_game_servers_by_server_id(server.id),
|
||||||
|
@ -155,7 +155,6 @@ export class Queries {
|
|||||||
levelCount
|
levelCount
|
||||||
levels(filter: $filter, page: $page, sort: $sort) {
|
levels(filter: $filter, page: $page, sort: $sort) {
|
||||||
id
|
id
|
||||||
iconURL
|
|
||||||
name
|
name
|
||||||
color
|
color
|
||||||
minXp
|
minXp
|
||||||
@ -377,22 +376,6 @@ export class Queries {
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
static liteUsersQuery = `
|
|
||||||
query UsersList($serverId: ID, $filter: UserFilter, $page: Page, $sort: Sort) {
|
|
||||||
servers(filter: {id: $serverId}) {
|
|
||||||
userCount
|
|
||||||
users(filter: $filter, page: $page, sort: $sort) {
|
|
||||||
id
|
|
||||||
discordId
|
|
||||||
name
|
|
||||||
|
|
||||||
createdAt
|
|
||||||
modifiedAt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
|
|
||||||
static userProfile = `
|
static userProfile = `
|
||||||
query UserProfile($serverId: ID, $userId: ID, $page: Page, $sort: Sort) {
|
query UserProfile($serverId: ID, $userId: ID, $page: Page, $sort: Sort) {
|
||||||
userCount
|
userCount
|
||||||
@ -519,29 +502,6 @@ export class Queries {
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
static userWarningsQuery = `
|
|
||||||
query userWarnings($serverId: ID, $page: Page, $sort: Sort) {
|
|
||||||
servers(filter: {id: $serverId}) {
|
|
||||||
userWarningCount
|
|
||||||
userWarnings(page: $page, sort: $sort) {
|
|
||||||
id
|
|
||||||
user {
|
|
||||||
id
|
|
||||||
name
|
|
||||||
}
|
|
||||||
description
|
|
||||||
author {
|
|
||||||
id
|
|
||||||
name
|
|
||||||
}
|
|
||||||
|
|
||||||
createdAt
|
|
||||||
modifiedAt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
|
|
||||||
static autoRolesQuery = `
|
static autoRolesQuery = `
|
||||||
query AutoRoleQuery($serverId: ID, $filter: AutoRoleFilter, $page: Page, $sort: Sort) {
|
query AutoRoleQuery($serverId: ID, $filter: AutoRoleFilter, $page: Page, $sort: Sort) {
|
||||||
servers(filter: {id: $serverId}) {
|
servers(filter: {id: $serverId}) {
|
||||||
|
@ -1,251 +1,238 @@
|
|||||||
<h1>
|
<h1>
|
||||||
{{'view.server.levels.header' | translate}}
|
{{'view.server.levels.header' | translate}}
|
||||||
</h1>
|
</h1>
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<p-table #dt [value]="levels" [responsive]="true" responsiveLayout="stack" [breakpoint]="'720px'" dataKey="id"
|
<p-table #dt [value]="levels" [responsive]="true" responsiveLayout="stack" [breakpoint]="'720px'" dataKey="id"
|
||||||
editMode="row" [rowHover]="true" [rows]="10"
|
editMode="row" [rowHover]="true" [rows]="10"
|
||||||
[rowsPerPageOptions]="[10,25,50]" [paginator]="true" [loading]="loading" [totalRecords]="totalRecords"
|
[rowsPerPageOptions]="[10,25,50]" [paginator]="true" [loading]="loading" [totalRecords]="totalRecords"
|
||||||
[lazy]="true" (onLazyLoad)="nextPage($event)">
|
[lazy]="true" (onLazyLoad)="nextPage($event)">
|
||||||
|
|
||||||
<ng-template pTemplate="caption">
|
<ng-template pTemplate="caption">
|
||||||
<div class="table-caption">
|
<div class="table-caption">
|
||||||
<div class="table-caption-table-info">
|
<div class="table-caption-table-info">
|
||||||
<div class="table-caption-text">
|
<div class="table-caption-text">
|
||||||
<ng-container *ngIf="!loading">{{levels.length}} {{'common.of' | translate}}
|
<ng-container *ngIf="!loading">{{levels.length}} {{'common.of' | translate}}
|
||||||
{{dt.totalRecords}}
|
{{dt.totalRecords}}
|
||||||
</ng-container>
|
</ng-container>
|
||||||
{{'view.server.levels.levels' | translate}}
|
{{'view.server.levels.levels' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<app-multi-select-columns [table]="name" [columns]="columns"
|
<app-multi-select-columns [table]="name" [columns]="columns"
|
||||||
[(hiddenColumns)]="hiddenColumns"></app-multi-select-columns>
|
[(hiddenColumns)]="hiddenColumns"></app-multi-select-columns>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-caption-btn-wrapper btn-wrapper">
|
<div class="table-caption-btn-wrapper btn-wrapper">
|
||||||
<button pButton label="{{'common.add' | translate}}" class="icon-btn btn"
|
<button pButton label="{{'common.add' | translate}}" class="icon-btn btn"
|
||||||
icon="pi pi-plus" (click)="addLevel(dt)"
|
icon="pi pi-plus" (click)="addLevel(dt)"
|
||||||
[disabled]="isEditingNew || user?.isModerator && !user?.isAdmin">
|
[disabled]="isEditingNew || user?.isModerator && !user?.isAdmin">
|
||||||
</button>
|
</button>
|
||||||
<button pButton label="{{'common.reset_filters' | translate}}" icon="pi pi-undo"
|
<button pButton label="{{'common.reset_filters' | translate}}" icon="pi pi-undo"
|
||||||
class="icon-btn btn" (click)="resetFilters()">
|
class="icon-btn btn" (click)="resetFilters()">
|
||||||
</button>
|
</button>
|
||||||
<app-data-import-and-export name="levels" [(data)]="levels"
|
<app-data-import-and-export name="levels" [(data)]="levels"
|
||||||
[callback]="callback" [validator]="validator"></app-data-import-and-export>
|
[callback]="callback" [validator]="validator"></app-data-import-and-export>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template pTemplate="header">
|
<ng-template pTemplate="header">
|
||||||
<tr>
|
<tr>
|
||||||
<th hideable-th="id" [parent]="this" [sortable]="true">
|
<th hideable-th="id" [parent]="this" [sortable]="true">
|
||||||
<div class="table-header-label">
|
<div class="table-header-label">
|
||||||
<div class="table-header-text">{{'common.id' | translate}}</div>
|
<div class="table-header-text">{{'common.id' | translate}}</div>
|
||||||
<p-sortIcon field="id" class="table-header-icon"></p-sortIcon>
|
<p-sortIcon field="id" class="table-header-icon"></p-sortIcon>
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
<th hideable-th="icon" [parent]="this" [sortable]="true">
|
<th hideable-th="name" [parent]="this" [sortable]="true">
|
||||||
<div class="table-header-label">
|
<div class="table-header-label">
|
||||||
<div class="table-header-text">{{'common.icon' | translate}}</div>
|
<div class="table-header-text">{{'common.name' | translate}}</div>
|
||||||
<p-sortIcon field="id" class="table-header-icon"></p-sortIcon>
|
<p-sortIcon field="name" class="table-header-icon"></p-sortIcon>
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
<th hideable-th="name" [parent]="this" [sortable]="true">
|
<th hideable-th="color" [parent]="this" [sortable]="true">
|
||||||
<div class="table-header-label">
|
<div class="table-header-label">
|
||||||
<div class="table-header-text">{{'common.name' | translate}}</div>
|
<div class="table-header-text">{{'common.color' | translate}}</div>
|
||||||
<p-sortIcon field="name" class="table-header-icon"></p-sortIcon>
|
<p-sortIcon field="color" class="table-header-icon"></p-sortIcon>
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
<th hideable-th="color" [parent]="this" [sortable]="true">
|
<th hideable-th="min_xp" [parent]="this" [sortable]="true">
|
||||||
<div class="table-header-label">
|
<div class="table-header-label">
|
||||||
<div class="table-header-text">{{'common.color' | translate}}</div>
|
<div class="table-header-text">{{'common.min_xp' | translate}}</div>
|
||||||
<p-sortIcon field="color" class="table-header-icon"></p-sortIcon>
|
<p-sortIcon field="minXp" class="table-header-icon"></p-sortIcon>
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
<th hideable-th="min_xp" [parent]="this" [sortable]="true">
|
<th hideable-th="permissions" [parent]="this" [sortable]="true">
|
||||||
<div class="table-header-label">
|
<div class="table-header-label">
|
||||||
<div class="table-header-text">{{'common.min_xp' | translate}}</div>
|
<div class="table-header-text">{{'common.permissions' | translate}}</div>
|
||||||
<p-sortIcon field="minXp" class="table-header-icon"></p-sortIcon>
|
<p-sortIcon field="permissions" class="table-header-icon"></p-sortIcon>
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
<th hideable-th="permissions" [parent]="this" [sortable]="true">
|
<th>
|
||||||
<div class="table-header-label">
|
<div class="table-header-label">
|
||||||
<div class="table-header-text">{{'common.permissions' | translate}}</div>
|
<div class="table-header-text">{{'common.created_at' | translate}}</div>
|
||||||
<p-sortIcon field="permissions" class="table-header-icon"></p-sortIcon>
|
</div>
|
||||||
</div>
|
</th>
|
||||||
</th>
|
|
||||||
|
|
||||||
<th>
|
<th>
|
||||||
<div class="table-header-label">
|
<div class="table-header-label">
|
||||||
<div class="table-header-text">{{'common.created_at' | translate}}</div>
|
<div class="table-header-text">{{'common.modified_at' | translate}}</div>
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
<th>
|
<th>
|
||||||
<div class="table-header-label">
|
<div class="table-header-label">
|
||||||
<div class="table-header-text">{{'common.modified_at' | translate}}</div>
|
<div class="table-header-text">{{'common.actions' | translate}}</div>
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<th>
|
<tr>
|
||||||
<div class="table-header-label">
|
<th hideable-th="id" [parent]="this" class="table-header-small">
|
||||||
<div class="table-header-text">{{'common.actions' | translate}}</div>
|
<form [formGroup]="filterForm">
|
||||||
</div>
|
<input type="text" pInputText formControlName="id"
|
||||||
</th>
|
placeholder="{{'common.id' | translate}}">
|
||||||
</tr>
|
</form>
|
||||||
|
</th>
|
||||||
|
<th hideable-th="name" [parent]="this">
|
||||||
|
<form [formGroup]="filterForm">
|
||||||
|
<input type="text" pInputText formControlName="name"
|
||||||
|
placeholder="{{'common.name' | translate}}">
|
||||||
|
</form>
|
||||||
|
</th>
|
||||||
|
<th hideable-th="color" [parent]="this"></th>
|
||||||
|
<th hideable-th="min_xp" [parent]="this"></th>
|
||||||
|
<th hideable-th="permissions" [parent]="this"></th>
|
||||||
|
<th class="table-header-small-dropdown"></th>
|
||||||
|
<th class="table-header-small-dropdown"></th>
|
||||||
|
<th class="table-header-actions"></th>
|
||||||
|
</tr>
|
||||||
|
</ng-template>
|
||||||
|
|
||||||
<tr>
|
<ng-template pTemplate="body" let-level let-editing="editing" let-ri="rowIndex">
|
||||||
<th hideable-th="id" [parent]="this" class="table-header-small">
|
<tr [pEditableRow]="level">
|
||||||
<form [formGroup]="filterForm">
|
<td hideable-th="id" [parent]="this">
|
||||||
<input type="text" pInputText formControlName="id"
|
<span class="p-column-title">{{'common.id' | translate}}:</span>
|
||||||
placeholder="{{'common.id' | translate}}">
|
<p-cellEditor>
|
||||||
</form>
|
<ng-template pTemplate="input">
|
||||||
</th>
|
{{level.id}}
|
||||||
<th hideable-th="icon" [parent]="this" class="table-header-small">
|
</ng-template>
|
||||||
</th>
|
<ng-template pTemplate="output">
|
||||||
<th hideable-th="name" [parent]="this">
|
{{level.id}}
|
||||||
<form [formGroup]="filterForm">
|
</ng-template>
|
||||||
<input type="text" pInputText formControlName="name"
|
</p-cellEditor>
|
||||||
placeholder="{{'common.name' | translate}}">
|
</td>
|
||||||
</form>
|
|
||||||
</th>
|
|
||||||
<th hideable-th="color" [parent]="this"></th>
|
|
||||||
<th hideable-th="min_xp" [parent]="this"></th>
|
|
||||||
<th hideable-th="permissions" [parent]="this"></th>
|
|
||||||
<th class="table-header-small-dropdown"></th>
|
|
||||||
<th class="table-header-small-dropdown"></th>
|
|
||||||
<th class="table-header-actions"></th>
|
|
||||||
</tr>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template pTemplate="body" let-level let-editing="editing" let-ri="rowIndex">
|
<td hideable-th="name" [parent]="this">
|
||||||
<tr [pEditableRow]="level">
|
<span class="p-column-title">{{'common.name' | translate}}:</span>
|
||||||
<td hideable-th="id" [parent]="this">
|
<p-cellEditor>
|
||||||
<span class="p-column-title">{{'common.id' | translate}}:</span>
|
<ng-template pTemplate="input">
|
||||||
<p-cellEditor>
|
<input class="table-edit-input" pInputText type="text" [(ngModel)]="level.name">
|
||||||
<ng-template pTemplate="input">
|
</ng-template>
|
||||||
{{level.id}}
|
<ng-template pTemplate="output">
|
||||||
</ng-template>
|
{{level.name}}
|
||||||
<ng-template pTemplate="output">
|
</ng-template>
|
||||||
{{level.id}}
|
</p-cellEditor>
|
||||||
</ng-template>
|
</td>
|
||||||
</p-cellEditor>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td hideable-th="icon" [parent]="this">
|
<td hideable-th="color" [parent]="this">
|
||||||
<img width="32px" height="32px" *ngIf="level ? level.iconURL : ''" [src]="level ? level.iconURL : ''">
|
<span class="p-column-title">{{'common.color' | translate}}:</span>
|
||||||
</td>
|
<p-cellEditor>
|
||||||
|
<ng-template pTemplate="input">
|
||||||
|
<input class="table-edit-input" pInputText type="text" [(ngModel)]="level.color">
|
||||||
|
</ng-template>
|
||||||
|
<ng-template pTemplate="output">
|
||||||
|
{{level.color}}
|
||||||
|
</ng-template>
|
||||||
|
</p-cellEditor>
|
||||||
|
</td>
|
||||||
|
|
||||||
<td hideable-th="name" [parent]="this">
|
<td hideable-th="min_xp" [parent]="this">
|
||||||
<span class="p-column-title">{{'common.name' | translate}}:</span>
|
<span class="p-column-title">{{'common.min_xp' | translate}}:</span>
|
||||||
<p-cellEditor>
|
<p-cellEditor>
|
||||||
<ng-template pTemplate="input">
|
<ng-template pTemplate="input">
|
||||||
<input class="table-edit-input" pInputText type="text" [(ngModel)]="level.name">
|
<input class="table-edit-input" pInputText min="0" type="number"
|
||||||
</ng-template>
|
[(ngModel)]="level.minXp">
|
||||||
<ng-template pTemplate="output">
|
</ng-template>
|
||||||
{{level.name}}
|
<ng-template pTemplate="output">
|
||||||
</ng-template>
|
{{level.minXp}}
|
||||||
</p-cellEditor>
|
</ng-template>
|
||||||
</td>
|
</p-cellEditor>
|
||||||
|
</td>
|
||||||
|
|
||||||
<td hideable-th="color" [parent]="this">
|
<td hideable-th="permissions" [parent]="this">
|
||||||
<span class="p-column-title">{{'common.color' | translate}}:</span>
|
<span class="p-column-title">{{'common.permissions' | translate}}:</span>
|
||||||
<p-cellEditor>
|
<p-cellEditor>
|
||||||
<ng-template pTemplate="input">
|
<ng-template pTemplate="input">
|
||||||
<input class="table-edit-input" pInputText type="text" [(ngModel)]="level.color">
|
<input class="table-edit-input" pInputText min="0" type="text"
|
||||||
</ng-template>
|
[(ngModel)]="level.permissions">
|
||||||
<ng-template pTemplate="output">
|
</ng-template>
|
||||||
{{level.color}}
|
<ng-template pTemplate="output">
|
||||||
</ng-template>
|
{{level.permissions}}
|
||||||
</p-cellEditor>
|
</ng-template>
|
||||||
</td>
|
</p-cellEditor>
|
||||||
|
</td>
|
||||||
|
|
||||||
<td hideable-th="min_xp" [parent]="this">
|
<td>
|
||||||
<span class="p-column-title">{{'common.min_xp' | translate}}:</span>
|
<span class="p-column-title">{{'common.created_at' | translate}}:</span>
|
||||||
<p-cellEditor>
|
<p-cellEditor>
|
||||||
<ng-template pTemplate="input">
|
<ng-template pTemplate="input">
|
||||||
<input class="table-edit-input" pInputText min="0" type="number"
|
{{level.createdAt | date:'dd.MM.yy HH:mm'}}
|
||||||
[(ngModel)]="level.minXp">
|
</ng-template>
|
||||||
</ng-template>
|
<ng-template pTemplate="output">
|
||||||
<ng-template pTemplate="output">
|
{{level.createdAt | date:'dd.MM.yy HH:mm'}}
|
||||||
{{level.minXp}}
|
</ng-template>
|
||||||
</ng-template>
|
</p-cellEditor>
|
||||||
</p-cellEditor>
|
</td>
|
||||||
</td>
|
<td>
|
||||||
|
<span class="p-column-title">{{'common.modified_at' | translate}}:</span>
|
||||||
|
<p-cellEditor>
|
||||||
|
<ng-template pTemplate="input">
|
||||||
|
{{level.modifiedAt | date:'dd.MM.yy HH:mm'}}
|
||||||
|
</ng-template>
|
||||||
|
<ng-template pTemplate="output">
|
||||||
|
{{level.modifiedAt | date:'dd.MM.yy HH:mm'}}
|
||||||
|
</ng-template>
|
||||||
|
</p-cellEditor>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="btn-wrapper">
|
||||||
|
<app-history-btn *ngIf="!isEditingNew" [id]="level.id" [query]="query"
|
||||||
|
translationKey="view.server.levels.header"></app-history-btn>
|
||||||
|
<button *ngIf="!editing" pButton pInitEditableRow class="btn icon-btn" icon="pi pi-pencil"
|
||||||
|
(click)="onRowEditInit(dt, level, ri)"
|
||||||
|
[disabled]="!user || user.isModerator && !user.isAdmin"></button>
|
||||||
|
<button *ngIf="!editing" pButton class="btn icon-btn danger-icon-btn" icon="pi pi-trash"
|
||||||
|
(click)="deleteLevel(level)"
|
||||||
|
[disabled]="!user || user.isModerator && !user.isAdmin"></button>
|
||||||
|
|
||||||
<td hideable-th="permissions" [parent]="this">
|
<button *ngIf="editing" pButton pSaveEditableRow class="btn icon-btn"
|
||||||
<span class="p-column-title">{{'common.permissions' | translate}}:</span>
|
icon="pi pi-check-circle" (click)="onRowEditSave(level, ri)"
|
||||||
<p-cellEditor>
|
[disabled]="!user || user.isModerator && !user.isAdmin"></button>
|
||||||
<ng-template pTemplate="input">
|
<button *ngIf="editing" pButton pCancelEditableRow class="btn icon-btn danger-icon-btn"
|
||||||
<input class="table-edit-input" pInputText min="0" type="text"
|
icon="pi pi-times-circle" (click)="onRowEditCancel(ri)"
|
||||||
[(ngModel)]="level.permissions">
|
[disabled]="!user || user.isModerator && !user.isAdmin"></button>
|
||||||
</ng-template>
|
</div>
|
||||||
<ng-template pTemplate="output">
|
</td>
|
||||||
{{level.permissions}}
|
</tr>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</p-cellEditor>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td>
|
<ng-template pTemplate="emptymessage">
|
||||||
<span class="p-column-title">{{'common.created_at' | translate}}:</span>
|
<tr></tr>
|
||||||
<p-cellEditor>
|
<tr>
|
||||||
<ng-template pTemplate="input">
|
<td colspan="10">{{'common.no_entries_found' | translate}}</td>
|
||||||
{{level.createdAt | date:'dd.MM.yy HH:mm'}}
|
</tr>
|
||||||
</ng-template>
|
<tr></tr>
|
||||||
<ng-template pTemplate="output">
|
</ng-template>
|
||||||
{{level.createdAt | date:'dd.MM.yy HH:mm'}}
|
|
||||||
</ng-template>
|
|
||||||
</p-cellEditor>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<span class="p-column-title">{{'common.modified_at' | translate}}:</span>
|
|
||||||
<p-cellEditor>
|
|
||||||
<ng-template pTemplate="input">
|
|
||||||
{{level.modifiedAt | date:'dd.MM.yy HH:mm'}}
|
|
||||||
</ng-template>
|
|
||||||
<ng-template pTemplate="output">
|
|
||||||
{{level.modifiedAt | date:'dd.MM.yy HH:mm'}}
|
|
||||||
</ng-template>
|
|
||||||
</p-cellEditor>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<div class="btn-wrapper">
|
|
||||||
<app-history-btn *ngIf="!isEditingNew" [id]="level.id" [query]="query"
|
|
||||||
translationKey="view.server.levels.header"></app-history-btn>
|
|
||||||
<button *ngIf="!editing" pButton pInitEditableRow class="btn icon-btn" icon="pi pi-pencil"
|
|
||||||
(click)="onRowEditInit(dt, level, ri)"
|
|
||||||
[disabled]="!user || user.isModerator && !user.isAdmin"></button>
|
|
||||||
<button *ngIf="!editing" pButton class="btn icon-btn danger-icon-btn" icon="pi pi-trash"
|
|
||||||
(click)="deleteLevel(level)"
|
|
||||||
[disabled]="!user || user.isModerator && !user.isAdmin"></button>
|
|
||||||
|
|
||||||
<button *ngIf="editing" pButton pSaveEditableRow class="btn icon-btn"
|
<ng-template pTemplate="paginatorleft">
|
||||||
icon="pi pi-check-circle" (click)="onRowEditSave(level, ri)"
|
</ng-template>
|
||||||
[disabled]="!user || user.isModerator && !user.isAdmin"></button>
|
</p-table>
|
||||||
<button *ngIf="editing" pButton pCancelEditableRow class="btn icon-btn danger-icon-btn"
|
</div>
|
||||||
icon="pi pi-times-circle" (click)="onRowEditCancel(ri)"
|
|
||||||
[disabled]="!user || user.isModerator && !user.isAdmin"></button>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template pTemplate="emptymessage">
|
|
||||||
<tr></tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="10">{{'common.no_entries_found' | translate}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr></tr>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template pTemplate="paginatorleft">
|
|
||||||
</ng-template>
|
|
||||||
</p-table>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ import { Table } from "primeng/table";
|
|||||||
import { User } from "../../../../../../models/data/user.model";
|
import { User } from "../../../../../../models/data/user.model";
|
||||||
import { LevelMutationResult, UpdateUserMutationResult } from "../../../../../../models/graphql/result.model";
|
import { LevelMutationResult, UpdateUserMutationResult } from "../../../../../../models/graphql/result.model";
|
||||||
import { Mutations } from "../../../../../../models/graphql/mutations.model";
|
import { Mutations } from "../../../../../../models/graphql/mutations.model";
|
||||||
import { Subject, throwError } from "rxjs";
|
import { forkJoin, Subject, throwError } from "rxjs";
|
||||||
import { Server } from "../../../../../../models/data/server.model";
|
import { Server } from "../../../../../../models/data/server.model";
|
||||||
import { UserDTO } from "../../../../../../models/auth/auth-user.dto";
|
import { UserDTO } from "../../../../../../models/auth/auth-user.dto";
|
||||||
import { ComponentWithTable } from "../../../../../../base/component-with-table";
|
import { ComponentWithTable } from "../../../../../../base/component-with-table";
|
||||||
@ -72,7 +72,7 @@ export class LevelsComponent extends ComponentWithTable implements OnInit, OnDes
|
|||||||
private sidebar: SidebarService,
|
private sidebar: SidebarService,
|
||||||
private route: ActivatedRoute
|
private route: ActivatedRoute
|
||||||
) {
|
) {
|
||||||
super("level", ["id", "icon", "name", "color", "min_xp", "permissions"], (oldElement: Level, newElement: Level) => {
|
super("level", ["id", "name", "color", "min_xp", "permissions"], (oldElement: Level, newElement: Level) => {
|
||||||
return oldElement.name === newElement.name;
|
return oldElement.name === newElement.name;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -64,9 +64,7 @@ export class MembersComponent extends ComponentWithTable implements OnInit, OnDe
|
|||||||
level: FormControl<Level | null>
|
level: FormControl<Level | null>
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
filter: UserFilter = {
|
filter: UserFilter = {};
|
||||||
leftServer: false
|
|
||||||
};
|
|
||||||
page: Page = {
|
page: Page = {
|
||||||
pageSize: undefined,
|
pageSize: undefined,
|
||||||
pageIndex: undefined
|
pageIndex: undefined
|
||||||
@ -147,7 +145,7 @@ export class MembersComponent extends ComponentWithTable implements OnInit, OnDe
|
|||||||
id: new FormControl<number | null>(null),
|
id: new FormControl<number | null>(null),
|
||||||
discordId: new FormControl<number | null>(null),
|
discordId: new FormControl<number | null>(null),
|
||||||
name: [""],
|
name: [""],
|
||||||
leftServer: new FormControl<boolean | null>(false),
|
leftServer: new FormControl<boolean | null>(null),
|
||||||
level: new FormControl<Level | null>(null)
|
level: new FormControl<Level | null>(null)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -8,55 +8,19 @@ import { MemberRoles } from "../../../models/auth/auth-user.dto";
|
|||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{ path: "", component: ServerDashboardComponent },
|
{ path: "", component: ServerDashboardComponent },
|
||||||
{
|
{ path: "members", component: MembersComponent, canActivate: [AuthGuard], data: { memberRole: MemberRoles.Moderator } },
|
||||||
path: "members",
|
|
||||||
component: MembersComponent,
|
|
||||||
canActivate: [AuthGuard],
|
|
||||||
data: { memberRole: MemberRoles.Moderator }
|
|
||||||
},
|
|
||||||
{ path: "members/:memberId", component: ProfileComponent },
|
{ path: "members/:memberId", component: ProfileComponent },
|
||||||
{
|
|
||||||
path: "user-warnings",
|
|
||||||
loadChildren: () => import("./user-warning/user-warning.module").then(m => m.UserWarningModule),
|
|
||||||
canActivate: [AuthGuard],
|
|
||||||
data: { memberRole: MemberRoles.Moderator }
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: "auto-roles",
|
path: "auto-roles",
|
||||||
loadChildren: () => import("./auto-role/auto-role.module").then(m => m.AutoRoleModule),
|
loadChildren: () => import("./auto-role/auto-role.module").then(m => m.AutoRoleModule),
|
||||||
canActivate: [AuthGuard],
|
canActivate: [AuthGuard],
|
||||||
data: { memberRole: MemberRoles.Moderator }
|
data: { memberRole: MemberRoles.Moderator }
|
||||||
},
|
},
|
||||||
{
|
{ path: "levels", loadChildren: () => import("./levels/levels.module").then(m => m.LevelsModule), canActivate: [AuthGuard], data: { memberRole: MemberRoles.Moderator } },
|
||||||
path: "levels",
|
{ path: "achievements", loadChildren: () => import("./achievements/achievements.module").then(m => m.AchievementsModule), canActivate: [AuthGuard], data: { memberRole: MemberRoles.Moderator } },
|
||||||
loadChildren: () => import("./levels/levels.module").then(m => m.LevelsModule),
|
{ path: "short-role-names", loadChildren: () => import("./short-role-name/short-role-name.module").then(m => m.ShortRoleNameModule), canActivate: [AuthGuard], data: { memberRole: MemberRoles.Moderator } },
|
||||||
canActivate: [AuthGuard],
|
{ path: "scheduled-events", loadChildren: () => import("./scheduled-events/scheduled-events.module").then(m => m.ScheduledEventsModule), canActivate: [AuthGuard], data: { memberRole: MemberRoles.Moderator } },
|
||||||
data: { memberRole: MemberRoles.Moderator }
|
{ path: "config", loadChildren: () => import("./config/config.module").then(m => m.ConfigModule), canActivate: [AuthGuard], data: { memberRole: MemberRoles.Admin } }
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "achievements",
|
|
||||||
loadChildren: () => import("./achievements/achievements.module").then(m => m.AchievementsModule),
|
|
||||||
canActivate: [AuthGuard],
|
|
||||||
data: { memberRole: MemberRoles.Moderator }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "short-role-names",
|
|
||||||
loadChildren: () => import("./short-role-name/short-role-name.module").then(m => m.ShortRoleNameModule),
|
|
||||||
canActivate: [AuthGuard],
|
|
||||||
data: { memberRole: MemberRoles.Moderator }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "scheduled-events",
|
|
||||||
loadChildren: () => import("./scheduled-events/scheduled-events.module").then(m => m.ScheduledEventsModule),
|
|
||||||
canActivate: [AuthGuard],
|
|
||||||
data: { memberRole: MemberRoles.Moderator }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "config",
|
|
||||||
loadChildren: () => import("./config/config.module").then(m => m.ConfigModule),
|
|
||||||
canActivate: [AuthGuard],
|
|
||||||
data: { memberRole: MemberRoles.Admin }
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
|
@ -1,213 +0,0 @@
|
|||||||
<h1>
|
|
||||||
{{'common.user_warnings' | translate}}
|
|
||||||
</h1>
|
|
||||||
<div class="content-wrapper">
|
|
||||||
<div class="content">
|
|
||||||
<p-table #dt [value]="userWarnings" [responsive]="true" responsiveLayout="stack" [breakpoint]="'720px'"
|
|
||||||
dataKey="id" editMode="row" [rowHover]="true" [rows]="10"
|
|
||||||
[rowsPerPageOptions]="[10,25,50]" [paginator]="true" [loading]="loading" [totalRecords]="totalRecords"
|
|
||||||
[lazy]="true" (onLazyLoad)="nextPage($event)">
|
|
||||||
|
|
||||||
<ng-template pTemplate="caption">
|
|
||||||
<div class="table-caption">
|
|
||||||
<div class="table-caption-table-info">
|
|
||||||
<div class="table-caption-text">
|
|
||||||
<ng-container *ngIf="!loading">{{userWarnings.length}} {{'common.of' | translate}}
|
|
||||||
{{dt.totalRecords}}
|
|
||||||
</ng-container>
|
|
||||||
{{'common.user_warnings' | translate}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<app-multi-select-columns [table]="name" [columns]="columns"
|
|
||||||
[(hiddenColumns)]="hiddenColumns"></app-multi-select-columns>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="table-caption-btn-wrapper btn-wrapper">
|
|
||||||
<button pButton label="{{'common.add' | translate}}" class="icon-btn btn"
|
|
||||||
icon="pi pi-plus" (click)="addUserWarning(dt)"
|
|
||||||
[disabled]="isEditingNew || !user?.isModerator && !user?.isAdmin">
|
|
||||||
</button>
|
|
||||||
<button pButton label="{{'common.reset_filters' | translate}}" icon="pi pi-undo"
|
|
||||||
class="icon-btn btn" (click)="resetFilters()">
|
|
||||||
</button>
|
|
||||||
<app-data-import-and-export name="userWarnings" [(data)]="userWarnings"
|
|
||||||
[callback]="callback" [validator]="validator"></app-data-import-and-export>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template pTemplate="header">
|
|
||||||
<tr>
|
|
||||||
<th hideable-th="id" [parent]="this" [sortable]="true">
|
|
||||||
<div class="table-header-label">
|
|
||||||
<div class="table-header-text">{{'common.id' | translate}}</div>
|
|
||||||
<p-sortIcon field="id" class="table-header-icon"></p-sortIcon>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th hideable-th="description" [parent]="this" [sortable]="true">
|
|
||||||
<div class="table-header-label">
|
|
||||||
<div class="table-header-text">{{'common.description' | translate}}</div>
|
|
||||||
<p-sortIcon field="name" class="table-header-icon"></p-sortIcon>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th hideable-th="user" [parent]="this" [sortable]="true">
|
|
||||||
<div class="table-header-label">
|
|
||||||
<div class="table-header-text">{{'common.member' | translate}}</div>
|
|
||||||
<p-sortIcon field="attribute" class="table-header-icon"></p-sortIcon>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th hideable-th="author" [parent]="this" [sortable]="true">
|
|
||||||
<div class="table-header-label">
|
|
||||||
<div class="table-header-text">{{'common.author' | translate}}</div>
|
|
||||||
<p-sortIcon field="operator" class="table-header-icon"></p-sortIcon>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th>
|
|
||||||
<div class="table-header-label">
|
|
||||||
<div class="table-header-text">{{'common.created_at' | translate}}</div>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th>
|
|
||||||
<div class="table-header-label">
|
|
||||||
<div class="table-header-text">{{'common.modified_at' | translate}}</div>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th>
|
|
||||||
<div class="table-header-label">
|
|
||||||
<div class="table-header-text">{{'common.actions' | translate}}</div>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<th hideable-th="id" [parent]="this" class="table-header-small">
|
|
||||||
<form [formGroup]="filterForm">
|
|
||||||
<input type="text" pInputText formControlName="id"
|
|
||||||
placeholder="{{'common.id' | translate}}">
|
|
||||||
</form>
|
|
||||||
</th>
|
|
||||||
<th hideable-th="description" [parent]="this">
|
|
||||||
<form [formGroup]="filterForm">
|
|
||||||
<input type="text" pInputText formControlName="description"
|
|
||||||
placeholder="{{'common.description' | translate}}">
|
|
||||||
</form>
|
|
||||||
</th>
|
|
||||||
<th hideable-th="user" [parent]="this">
|
|
||||||
<form [formGroup]="filterForm">
|
|
||||||
<input type="text" pInputText formControlName="user"
|
|
||||||
placeholder="{{'common.member' | translate}}">
|
|
||||||
</form>
|
|
||||||
</th>
|
|
||||||
<th hideable-th="author" [parent]="this">
|
|
||||||
<form [formGroup]="filterForm">
|
|
||||||
<input type="text" pInputText formControlName="author"
|
|
||||||
placeholder="{{'common.author' | translate}}">
|
|
||||||
</form>
|
|
||||||
</th>
|
|
||||||
<th class="table-header-small-dropdown"></th>
|
|
||||||
<th class="table-header-small-dropdown"></th>
|
|
||||||
<th class="table-header-actions"></th>
|
|
||||||
</tr>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template pTemplate="body" let-userWarning let-editing="editing" let-ri="rowIndex">
|
|
||||||
<tr [pEditableRow]="userWarning">
|
|
||||||
<td hideable-td="id" [parent]="this">
|
|
||||||
<span class="p-column-title">{{'common.id' | translate}}:</span>
|
|
||||||
<p-cellEditor>
|
|
||||||
<ng-template pTemplate="input">
|
|
||||||
{{userWarning.id}}
|
|
||||||
</ng-template>
|
|
||||||
<ng-template pTemplate="output">
|
|
||||||
{{userWarning.id}}
|
|
||||||
</ng-template>
|
|
||||||
</p-cellEditor>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td hideable-td="description" [parent]="this">
|
|
||||||
<span class="p-column-title">{{'common.description' | translate}}:</span>
|
|
||||||
<p-cellEditor>
|
|
||||||
<ng-template pTemplate="input">
|
|
||||||
<input *ngIf="isEditingNew; else description" class="table-edit-input" pInputText type="text"
|
|
||||||
[(ngModel)]="userWarning.description">
|
|
||||||
<ng-template #description>{{userWarning.description}}</ng-template>
|
|
||||||
</ng-template>
|
|
||||||
<ng-template pTemplate="output">
|
|
||||||
{{userWarning.description}}
|
|
||||||
</ng-template>
|
|
||||||
</p-cellEditor>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td hideable-td="user" [parent]="this">
|
|
||||||
<span class="p-column-title">{{'common.user' | translate}}:</span>
|
|
||||||
<p-cellEditor>
|
|
||||||
<ng-template pTemplate="input">
|
|
||||||
<p-dropdown *ngIf="isEditingNew; else userName" optionLabel="name" [options]="users"
|
|
||||||
[(ngModel)]="userWarning.user"
|
|
||||||
placeholder="{{'common.member' | translate}}"></p-dropdown>
|
|
||||||
<ng-template #userName>{{userWarning.user.name}}</ng-template>
|
|
||||||
</ng-template>
|
|
||||||
<ng-template pTemplate="output">
|
|
||||||
{{userWarning.user.name}}
|
|
||||||
</ng-template>
|
|
||||||
</p-cellEditor>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td hideable-td="author" [parent]="this">
|
|
||||||
<span class="p-column-title">{{'common.author' | translate}}:</span>
|
|
||||||
<p-cellEditor>
|
|
||||||
<ng-template pTemplate="input">
|
|
||||||
{{'common.you' | translate}}
|
|
||||||
</ng-template>
|
|
||||||
<ng-template pTemplate="output">
|
|
||||||
{{userWarning.author.name}}
|
|
||||||
</ng-template>
|
|
||||||
</p-cellEditor>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td>
|
|
||||||
<span class="p-column-title">{{'common.created_at' | translate}}:</span>
|
|
||||||
{{userWarning.createdAt | date:'dd.MM.yy HH:mm'}}
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td>
|
|
||||||
<span class="p-column-title">{{'common.modified_at' | translate}}:</span>
|
|
||||||
{{userWarning.modifiedAt | date:'dd.MM.yy HH:mm'}}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<div class="btn-wrapper">
|
|
||||||
<button *ngIf="!editing" pButton class="btn icon-btn danger-icon-btn" icon="pi pi-trash"
|
|
||||||
(click)="deleteUserWarning(userWarning)"
|
|
||||||
[disabled]="!user || !user.isModerator && !user.isAdmin"></button>
|
|
||||||
|
|
||||||
<button *ngIf="editing" pButton pSaveEditableRow class="btn icon-btn"
|
|
||||||
icon="pi pi-check-circle" (click)="onRowEditSave(userWarning, ri)"
|
|
||||||
[disabled]="!user || !user.isModerator && !user.isAdmin"></button>
|
|
||||||
<button *ngIf="editing" pButton pCancelEditableRow class="btn icon-btn danger-icon-btn"
|
|
||||||
icon="pi pi-times-circle" (click)="onRowEditCancel(ri)"
|
|
||||||
[disabled]="!user || !user.isModerator && !user.isAdmin"></button>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template pTemplate="emptymessage">
|
|
||||||
<tr></tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="10">{{'common.no_entries_found' | translate}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr></tr>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template pTemplate="paginatorleft">
|
|
||||||
</ng-template>
|
|
||||||
</p-table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
|||||||
import { ComponentFixture, TestBed } from "@angular/core/testing";
|
|
||||||
|
|
||||||
import { UserWarningComponent } from "./user-warning.component";
|
|
||||||
|
|
||||||
describe("AchievementComponent", () => {
|
|
||||||
let component: UserWarningComponent;
|
|
||||||
let fixture: ComponentFixture<UserWarningComponent>;
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
await TestBed.configureTestingModule({
|
|
||||||
declarations: [UserWarningComponent]
|
|
||||||
})
|
|
||||||
.compileComponents();
|
|
||||||
|
|
||||||
fixture = TestBed.createComponent(UserWarningComponent);
|
|
||||||
component = fixture.componentInstance;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should create", () => {
|
|
||||||
expect(component).toBeTruthy();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,240 +0,0 @@
|
|||||||
import { Component, OnDestroy, OnInit } from "@angular/core";
|
|
||||||
import { FormBuilder, FormControl, FormGroup } from "@angular/forms";
|
|
||||||
import { Page } from "../../../../../../models/graphql/filter/page.model";
|
|
||||||
import { Sort, SortDirection } from "../../../../../../models/graphql/filter/sort.model";
|
|
||||||
import { Subject, throwError } from "rxjs";
|
|
||||||
import { Server } from "../../../../../../models/data/server.model";
|
|
||||||
import { UserDTO } from "../../../../../../models/auth/auth-user.dto";
|
|
||||||
import { Queries } from "../../../../../../models/graphql/queries.model";
|
|
||||||
import { AuthService } from "../../../../../../services/auth/auth.service";
|
|
||||||
import { SpinnerService } from "../../../../../../services/spinner/spinner.service";
|
|
||||||
import { ToastService } from "../../../../../../services/toast/toast.service";
|
|
||||||
import { ConfirmationDialogService } from "../../../../../../services/confirmation-dialog/confirmation-dialog.service";
|
|
||||||
import { TranslateService } from "@ngx-translate/core";
|
|
||||||
import { DataService } from "../../../../../../services/data/data.service";
|
|
||||||
import { SidebarService } from "../../../../../../services/sidebar/sidebar.service";
|
|
||||||
import { ActivatedRoute } from "@angular/router";
|
|
||||||
import { Query, UserListQuery, UserWarningQuery } from "../../../../../../models/graphql/query.model";
|
|
||||||
import { catchError, debounceTime, takeUntil } from "rxjs/operators";
|
|
||||||
import { LazyLoadEvent } from "primeng/api";
|
|
||||||
import { Table } from "primeng/table";
|
|
||||||
import { User } from "../../../../../../models/data/user.model";
|
|
||||||
import { UpdateUserMutationResult } from "../../../../../../models/graphql/result.model";
|
|
||||||
import { Mutations } from "../../../../../../models/graphql/mutations.model";
|
|
||||||
import { ComponentWithTable } from "../../../../../../base/component-with-table";
|
|
||||||
import { UserWarning, UserWarningFilter } from "../../../../../../models/data/user_warning.model";
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: "app-user-warning",
|
|
||||||
templateUrl: "./user-warning.component.html",
|
|
||||||
styleUrls: ["./user-warning.component.scss"]
|
|
||||||
})
|
|
||||||
export class UserWarningComponent extends ComponentWithTable implements OnInit, OnDestroy {
|
|
||||||
public userWarnings: UserWarning[] = [];
|
|
||||||
public users: User[] = [];
|
|
||||||
public loading = true;
|
|
||||||
|
|
||||||
public filterForm!: FormGroup<{
|
|
||||||
id: FormControl<number | null>,
|
|
||||||
description: FormControl<string | null>,
|
|
||||||
user: FormControl<string | null>,
|
|
||||||
author: FormControl<string | null>,
|
|
||||||
}>;
|
|
||||||
|
|
||||||
public filter: UserWarningFilter = {};
|
|
||||||
public page: Page = {
|
|
||||||
pageSize: undefined,
|
|
||||||
pageIndex: undefined
|
|
||||||
};
|
|
||||||
public sort: Sort = {
|
|
||||||
sortColumn: undefined,
|
|
||||||
sortDirection: undefined
|
|
||||||
};
|
|
||||||
|
|
||||||
public totalRecords: number = 0;
|
|
||||||
|
|
||||||
public clonedUserWarning: { [s: string]: UserWarning; } = {};
|
|
||||||
|
|
||||||
private unsubscriber = new Subject<void>();
|
|
||||||
private server: Server = {};
|
|
||||||
public user: UserDTO | null = null;
|
|
||||||
|
|
||||||
query: string = Queries.userWarningsQuery;
|
|
||||||
|
|
||||||
public constructor(
|
|
||||||
private authService: AuthService,
|
|
||||||
private spinner: SpinnerService,
|
|
||||||
private toastService: ToastService,
|
|
||||||
private confirmDialog: ConfirmationDialogService,
|
|
||||||
private fb: FormBuilder,
|
|
||||||
private translate: TranslateService,
|
|
||||||
private data: DataService,
|
|
||||||
private sidebar: SidebarService,
|
|
||||||
private route: ActivatedRoute) {
|
|
||||||
super("UserWarning", ["id", "name"],
|
|
||||||
(oldElement: UserWarning, newElement: UserWarning) => {
|
|
||||||
return oldElement.id === newElement.id;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public ngOnInit(): void {
|
|
||||||
this.loading = true;
|
|
||||||
this.setFilterForm();
|
|
||||||
this.data.getServerFromRoute(this.route).then(async server => {
|
|
||||||
this.server = server;
|
|
||||||
let authUser = await this.authService.getLoggedInUser();
|
|
||||||
this.user = authUser?.users?.find(u => u.server == this.server.id) ?? null;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public ngOnDestroy(): void {
|
|
||||||
this.unsubscriber.next();
|
|
||||||
this.unsubscriber.complete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public loadNextPage(): void {
|
|
||||||
this.data.query<UserWarningQuery>(Queries.userWarningsQuery, {
|
|
||||||
serverId: this.server.id, filter: this.filter, page: this.page, sort: this.sort
|
|
||||||
},
|
|
||||||
(data: Query) => {
|
|
||||||
return data.servers[0];
|
|
||||||
}
|
|
||||||
).subscribe(data => {
|
|
||||||
this.totalRecords = data.userWarningCount;
|
|
||||||
this.userWarnings = data.userWarnings;
|
|
||||||
|
|
||||||
this.data.query<UserListQuery>(Queries.liteUsersQuery, {
|
|
||||||
serverId: this.server.id, filter: {
|
|
||||||
leftServer: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
(x: { servers: Server[] }) => {
|
|
||||||
return x.servers[0];
|
|
||||||
}
|
|
||||||
).subscribe(data => {
|
|
||||||
this.users = data.users;
|
|
||||||
|
|
||||||
this.spinner.hideSpinner();
|
|
||||||
this.loading = false;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public setFilterForm(): void {
|
|
||||||
this.filterForm = this.fb.group({
|
|
||||||
id: new FormControl<number | null>(null),
|
|
||||||
description: new FormControl<string | null>(null),
|
|
||||||
user: new FormControl<string | null>(null),
|
|
||||||
author: new FormControl<string | null>(null)
|
|
||||||
});
|
|
||||||
|
|
||||||
this.filterForm.valueChanges.pipe(
|
|
||||||
takeUntil(this.unsubscriber),
|
|
||||||
debounceTime(600)
|
|
||||||
).subscribe(changes => {
|
|
||||||
if (changes.id) {
|
|
||||||
this.filter.id = changes.id;
|
|
||||||
} else {
|
|
||||||
this.filter.id = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.page.pageSize)
|
|
||||||
this.page.pageSize = 10;
|
|
||||||
|
|
||||||
if (this.page.pageIndex)
|
|
||||||
this.page.pageIndex = 0;
|
|
||||||
|
|
||||||
this.loadNextPage();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public newUserWarningTemplate: UserWarning = {
|
|
||||||
createdAt: "",
|
|
||||||
modifiedAt: ""
|
|
||||||
};
|
|
||||||
|
|
||||||
public nextPage(event: LazyLoadEvent): void {
|
|
||||||
this.page.pageSize = event.rows ?? 0;
|
|
||||||
if (event.first != null && event.rows != null)
|
|
||||||
this.page.pageIndex = event.first / event.rows;
|
|
||||||
this.sort.sortColumn = event.sortField ?? undefined;
|
|
||||||
this.sort.sortDirection = event.sortOrder === 1 ? SortDirection.ASC : event.sortOrder === -1 ? SortDirection.DESC : SortDirection.ASC;
|
|
||||||
|
|
||||||
this.loadNextPage();
|
|
||||||
}
|
|
||||||
|
|
||||||
public resetFilters(): void {
|
|
||||||
this.filterForm.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
public onRowEditInit(table: Table, user: User, index: number): void {
|
|
||||||
this.clonedUserWarning[index] = { ...user };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override onRowEditSave(newUserWarning: UserWarning, index: number): void {
|
|
||||||
if (this.isEditingNew && JSON.stringify(newUserWarning) === JSON.stringify(this.newUserWarningTemplate)) {
|
|
||||||
this.isEditingNew = false;
|
|
||||||
this.userWarnings.splice(index, 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!newUserWarning.id && !this.isEditingNew) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateUserByWarning(newUserWarning.user?.id ?? 0, this.userWarnings.filter(uw => uw.user?.id == newUserWarning.user?.id));
|
|
||||||
}
|
|
||||||
|
|
||||||
public onRowEditCancel(index: number): void {
|
|
||||||
if (this.isEditingNew) {
|
|
||||||
this.userWarnings.splice(index, 1);
|
|
||||||
delete this.clonedUserWarning[index];
|
|
||||||
this.isEditingNew = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.userWarnings[index] = this.clonedUserWarning[index];
|
|
||||||
delete this.clonedUserWarning[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
public addUserWarning(table: Table): void {
|
|
||||||
const newUserWarning = JSON.parse(JSON.stringify(this.newUserWarningTemplate));
|
|
||||||
|
|
||||||
this.userWarnings = [newUserWarning, ...this.userWarnings];
|
|
||||||
|
|
||||||
table.initRowEdit(newUserWarning);
|
|
||||||
|
|
||||||
const index = this.userWarnings.findIndex(l => l.id == newUserWarning.id);
|
|
||||||
this.onRowEditInit(table, newUserWarning, index);
|
|
||||||
|
|
||||||
this.isEditingNew = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public deleteUserWarning(userWarning: UserWarning): void {
|
|
||||||
this.userWarnings.splice(this.userWarnings.findIndex(uw => uw.id == userWarning.id), 1);
|
|
||||||
this.updateUserByWarning(userWarning.user?.id ?? 0, this.userWarnings.filter(uw => uw.user?.id == userWarning.user?.id));
|
|
||||||
}
|
|
||||||
|
|
||||||
public updateUserByWarning(userId: number, userWarnings: UserWarning[]) {
|
|
||||||
this.spinner.showSpinner();
|
|
||||||
this.data.mutation<UpdateUserMutationResult>(Mutations.updateUser, {
|
|
||||||
id: userId,
|
|
||||||
userWarnings: userWarnings?.map(userWarning => {
|
|
||||||
return {
|
|
||||||
id: userWarning.id,
|
|
||||||
user: userWarning.user?.id ?? undefined,
|
|
||||||
description: userWarning.description,
|
|
||||||
author: userWarning.author?.id ?? undefined
|
|
||||||
};
|
|
||||||
})
|
|
||||||
}
|
|
||||||
).pipe(catchError(err => {
|
|
||||||
this.spinner.hideSpinner();
|
|
||||||
return throwError(err);
|
|
||||||
})).subscribe(_ => {
|
|
||||||
this.spinner.hideSpinner();
|
|
||||||
this.toastService.success(this.translate.instant("view.server.user_warning.message.user_warning_updated"), this.translate.instant("view.server.user_warning.message.user_warning_updated"));
|
|
||||||
this.loadNextPage();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
import { NgModule } from "@angular/core";
|
|
||||||
import { RouterModule, Routes } from "@angular/router";
|
|
||||||
import { UserWarningComponent } from "./components/user-warning/user-warning.component";
|
|
||||||
|
|
||||||
const routes: Routes = [
|
|
||||||
|
|
||||||
{ path: "", component: UserWarningComponent }
|
|
||||||
];
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [RouterModule.forChild(routes)],
|
|
||||||
exports: [RouterModule]
|
|
||||||
})
|
|
||||||
export class UserWarningRoutingModule {
|
|
||||||
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
import { NgModule } from "@angular/core";
|
|
||||||
import { CommonModule } from "@angular/common";
|
|
||||||
import { UserWarningRoutingModule } from "./user-warning-routing.module";
|
|
||||||
import { SharedModule } from "../../../shared/shared.module";
|
|
||||||
import { UserWarningComponent } from "./components/user-warning/user-warning.component";
|
|
||||||
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
declarations: [
|
|
||||||
UserWarningComponent
|
|
||||||
],
|
|
||||||
imports: [
|
|
||||||
CommonModule,
|
|
||||||
UserWarningRoutingModule,
|
|
||||||
SharedModule
|
|
||||||
]
|
|
||||||
})
|
|
||||||
export class UserWarningModule {
|
|
||||||
}
|
|
@ -27,7 +27,6 @@ export class SidebarService {
|
|||||||
serverDashboard: MenuItem = {};
|
serverDashboard: MenuItem = {};
|
||||||
serverProfile: MenuItem = {};
|
serverProfile: MenuItem = {};
|
||||||
serverMembers: MenuItem = {};
|
serverMembers: MenuItem = {};
|
||||||
serverUserWarnings: MenuItem = {};
|
|
||||||
serverAutoRoles: MenuItem = {};
|
serverAutoRoles: MenuItem = {};
|
||||||
serverLevels: MenuItem = {};
|
serverLevels: MenuItem = {};
|
||||||
serverAchievements: MenuItem = {};
|
serverAchievements: MenuItem = {};
|
||||||
@ -90,12 +89,6 @@ export class SidebarService {
|
|||||||
visible: true,
|
visible: true,
|
||||||
routerLink: `server/${this.server?.id}/members`
|
routerLink: `server/${this.server?.id}/members`
|
||||||
};
|
};
|
||||||
this.serverUserWarnings = {
|
|
||||||
label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.user_warnings") : "",
|
|
||||||
icon: "pi pi-exclamation-triangle",
|
|
||||||
visible: true,
|
|
||||||
routerLink: `server/${this.server?.id}/user-warnings`
|
|
||||||
};
|
|
||||||
|
|
||||||
this.serverAutoRoles = {
|
this.serverAutoRoles = {
|
||||||
label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.auto_roles") : "",
|
label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.auto_roles") : "",
|
||||||
@ -144,7 +137,7 @@ export class SidebarService {
|
|||||||
icon: "pi pi-server",
|
icon: "pi pi-server",
|
||||||
visible: false,
|
visible: false,
|
||||||
expanded: true,
|
expanded: true,
|
||||||
items: [this.serverDashboard, this.serverProfile, this.serverMembers, this.serverUserWarnings, this.serverAutoRoles, this.serverLevels, this.serverAchievements, this.serverScheduledEvents, this.serverShortRoleNames, this.serverConfig]
|
items: [this.serverDashboard, this.serverProfile, this.serverMembers, this.serverAutoRoles, this.serverLevels, this.serverAchievements, this.serverScheduledEvents, this.serverShortRoleNames, this.serverConfig]
|
||||||
};
|
};
|
||||||
this.adminConfig = {
|
this.adminConfig = {
|
||||||
label: this.isSidebarOpen ? this.translateService.instant("sidebar.config") : "",
|
label: this.isSidebarOpen ? this.translateService.instant("sidebar.config") : "",
|
||||||
@ -201,7 +194,6 @@ export class SidebarService {
|
|||||||
if (this.server) {
|
if (this.server) {
|
||||||
this.serverMenu.visible = true;
|
this.serverMenu.visible = true;
|
||||||
this.serverMembers.visible = isTechnicianAndFullAccessActive || user?.isModerator;
|
this.serverMembers.visible = isTechnicianAndFullAccessActive || user?.isModerator;
|
||||||
this.serverUserWarnings.visible = isTechnicianAndFullAccessActive || user?.isModerator;
|
|
||||||
this.serverAutoRoles.visible = isTechnicianAndFullAccessActive || this.hasFeature("AutoRoleModule") && user?.isModerator;
|
this.serverAutoRoles.visible = isTechnicianAndFullAccessActive || this.hasFeature("AutoRoleModule") && user?.isModerator;
|
||||||
this.serverLevels.visible = isTechnicianAndFullAccessActive || this.hasFeature("LevelModule") && user?.isModerator;
|
this.serverLevels.visible = isTechnicianAndFullAccessActive || this.hasFeature("LevelModule") && user?.isModerator;
|
||||||
this.serverAchievements.visible = isTechnicianAndFullAccessActive || this.hasFeature("AchievementsModule") && user?.isModerator;
|
this.serverAchievements.visible = isTechnicianAndFullAccessActive || this.hasFeature("AchievementsModule") && user?.isModerator;
|
||||||
|
@ -180,7 +180,6 @@
|
|||||||
"value": "Wert",
|
"value": "Wert",
|
||||||
"xp": "XP"
|
"xp": "XP"
|
||||||
},
|
},
|
||||||
"icon": "Icon",
|
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
"import": "Importieren",
|
"import": "Importieren",
|
||||||
"interval": "Interval",
|
"interval": "Interval",
|
||||||
@ -190,7 +189,6 @@
|
|||||||
"left_server": "Aktiv",
|
"left_server": "Aktiv",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"location": "Ort",
|
"location": "Ort",
|
||||||
"member": "Mitglied",
|
|
||||||
"message_id": "Nachricht Id",
|
"message_id": "Nachricht Id",
|
||||||
"min_xp": "Min. XP",
|
"min_xp": "Min. XP",
|
||||||
"modified_at": "Bearbeitet am",
|
"modified_at": "Bearbeitet am",
|
||||||
@ -219,8 +217,7 @@
|
|||||||
"user_warnings": "Verwarnungen",
|
"user_warnings": "Verwarnungen",
|
||||||
"users": "Benutzer",
|
"users": "Benutzer",
|
||||||
"value": "Wert",
|
"value": "Wert",
|
||||||
"xp": "XP",
|
"xp": "XP"
|
||||||
"you": "Du"
|
|
||||||
},
|
},
|
||||||
"dialog": {
|
"dialog": {
|
||||||
"abort": "Abbrechen",
|
"abort": "Abbrechen",
|
||||||
@ -350,8 +347,7 @@
|
|||||||
"members": "Mitglieder",
|
"members": "Mitglieder",
|
||||||
"profile": "Dein Profil",
|
"profile": "Dein Profil",
|
||||||
"scheduled_events": "Geplante Events",
|
"scheduled_events": "Geplante Events",
|
||||||
"short_role_names": "Rollen Kürzel",
|
"short_role_names": "Rollen Kürzel"
|
||||||
"user_warnings": "Verwarnungen"
|
|
||||||
},
|
},
|
||||||
"server_empty": "Kein Server ausgewählt",
|
"server_empty": "Kein Server ausgewählt",
|
||||||
"settings": "Einstellungen",
|
"settings": "Einstellungen",
|
||||||
@ -625,11 +621,6 @@
|
|||||||
"short_role_names_update_failed_d": "Die Bearbeitung des Levels ist fehlgeschlagen!"
|
"short_role_names_update_failed_d": "Die Bearbeitung des Levels ist fehlgeschlagen!"
|
||||||
},
|
},
|
||||||
"short_role_names": "Rollen Kürzel"
|
"short_role_names": "Rollen Kürzel"
|
||||||
},
|
|
||||||
"user_warning": {
|
|
||||||
"message": {
|
|
||||||
"user_warning_updated": "Verwarnungen wurde bearbeitet"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"user_settings": {
|
"user_settings": {
|
||||||
|
@ -180,7 +180,6 @@
|
|||||||
"value": "Value",
|
"value": "Value",
|
||||||
"xp": "XP"
|
"xp": "XP"
|
||||||
},
|
},
|
||||||
"icon": "Icon",
|
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
"import": "Import",
|
"import": "Import",
|
||||||
"interval": "interval",
|
"interval": "interval",
|
||||||
@ -190,7 +189,6 @@
|
|||||||
"left_server": "Active",
|
"left_server": "Active",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"location": "Location",
|
"location": "Location",
|
||||||
"member": "Member",
|
|
||||||
"message_id": "Message Id",
|
"message_id": "Message Id",
|
||||||
"min_xp": "Min. XP",
|
"min_xp": "Min. XP",
|
||||||
"modified_at": "Modified at",
|
"modified_at": "Modified at",
|
||||||
@ -219,8 +217,7 @@
|
|||||||
"user_warnings": "User warnings",
|
"user_warnings": "User warnings",
|
||||||
"users": "User",
|
"users": "User",
|
||||||
"value": "Value",
|
"value": "Value",
|
||||||
"xp": "XP",
|
"xp": "XP"
|
||||||
"you": "You"
|
|
||||||
},
|
},
|
||||||
"dialog": {
|
"dialog": {
|
||||||
"abort": "Abort",
|
"abort": "Abort",
|
||||||
@ -350,8 +347,7 @@
|
|||||||
"members": "Members",
|
"members": "Members",
|
||||||
"profile": "Your profile",
|
"profile": "Your profile",
|
||||||
"scheduled_events": "Scheduled events",
|
"scheduled_events": "Scheduled events",
|
||||||
"short_role_names": "Short role names",
|
"short_role_names": "Short role names"
|
||||||
"user_warnings": "User warnings"
|
|
||||||
},
|
},
|
||||||
"server_empty": "No server selected",
|
"server_empty": "No server selected",
|
||||||
"settings": "Settings",
|
"settings": "Settings",
|
||||||
@ -625,11 +621,6 @@
|
|||||||
"short_role_names_update_failed_d": "Short role name editing failed!"
|
"short_role_names_update_failed_d": "Short role name editing failed!"
|
||||||
},
|
},
|
||||||
"short_role_names": "Level"
|
"short_role_names": "Level"
|
||||||
},
|
|
||||||
"user_warning": {
|
|
||||||
"message": {
|
|
||||||
"user_warning_updated": "Updated user warnings"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"user_settings": {
|
"user_settings": {
|
||||||
|
Loading…
Reference in New Issue
Block a user