diff --git a/ProjectLighthouse.Localization/ModPanel.resx b/ProjectLighthouse.Localization/ModPanel.resx index d0987e59..813a9cdc 100644 --- a/ProjectLighthouse.Localization/ModPanel.resx +++ b/ProjectLighthouse.Localization/ModPanel.resx @@ -24,4 +24,10 @@ Welcome to the moderation panel, {0}! + + Banned Users + + + Hidden Levels + \ No newline at end of file diff --git a/ProjectLighthouse.Localization/StringLists/ModPanelStrings.cs b/ProjectLighthouse.Localization/StringLists/ModPanelStrings.cs index 00febf91..32299f8c 100644 --- a/ProjectLighthouse.Localization/StringLists/ModPanelStrings.cs +++ b/ProjectLighthouse.Localization/StringLists/ModPanelStrings.cs @@ -4,6 +4,8 @@ public static class ModPanelStrings { public static readonly TranslatableString ModPanelTitle = create("mod_panel_title"); public static readonly TranslatableString Greeting = create("greeting"); + public static readonly TranslatableString BannedUsers = create("banned_users"); + public static readonly TranslatableString HiddenLevels = create("hidden_levels"); private static TranslatableString create(string key) => new(TranslationAreas.ModPanel, key); } \ No newline at end of file diff --git a/ProjectLighthouse.Servers.Website/Pages/Moderation/BannedUsersPage.cshtml b/ProjectLighthouse.Servers.Website/Pages/Moderation/BannedUsersPage.cshtml new file mode 100644 index 00000000..42f0c154 --- /dev/null +++ b/ProjectLighthouse.Servers.Website/Pages/Moderation/BannedUsersPage.cshtml @@ -0,0 +1,41 @@ +@page "/moderation/bannedUsers/{pageNumber:int}" +@using LBPUnion.ProjectLighthouse.Extensions +@using LBPUnion.ProjectLighthouse.Localization.StringLists +@using LBPUnion.ProjectLighthouse.PlayerData.Profiles +@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.Moderation.BannedUsersPage + +@{ + Layout = "Layouts/BaseLayout"; + Model.Title = Model.Translate(ModPanelStrings.BannedUsers); + bool isMobile = Model.Request.IsMobile(); +} + +

There are @Model.UserCount banned users.

+ +@foreach (User user in Model.Users) +{ +
+ @await Html.PartialAsync("Partials/UserCardPartial", user, new ViewDataDictionary(ViewData) + { + { + "ShowLink", true + }, + { + "IsMobile", isMobile + }, + { + "Language", Model.GetLanguage() + }, + }) +
+} + +@if (Model.PageNumber != 0) +{ + Previous Page +} +@(Model.PageNumber + 1) / @(Model.PageAmount) +@if (Model.PageNumber < Model.PageAmount - 1) +{ + Next Page +} diff --git a/ProjectLighthouse.Servers.Website/Pages/Moderation/BannedUsersPage.cshtml.cs b/ProjectLighthouse.Servers.Website/Pages/Moderation/BannedUsersPage.cshtml.cs new file mode 100644 index 00000000..33c095b4 --- /dev/null +++ b/ProjectLighthouse.Servers.Website/Pages/Moderation/BannedUsersPage.cshtml.cs @@ -0,0 +1,41 @@ +using LBPUnion.ProjectLighthouse.Configuration; +using LBPUnion.ProjectLighthouse.PlayerData; +using LBPUnion.ProjectLighthouse.PlayerData.Profiles; +using LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.EntityFrameworkCore; + +namespace LBPUnion.ProjectLighthouse.Servers.Website.Pages.Moderation; + +public class BannedUsersPage : BaseLayout +{ + public BannedUsersPage(Database database) : base(database) + {} + + public List Users = new(); + + public int PageAmount; + + public int PageNumber; + + public int UserCount; + + public async Task OnGet([FromRoute] int pageNumber, [FromQuery] string? name) + { + WebToken? token = this.Database.WebTokenFromRequest(this.Request); + if (token == null) return this.Redirect("/login"); + + this.Users = await this.Database.Users + .Where(u => u.PermissionLevel < 0) + .Skip(pageNumber * ServerStatics.PageSize) + .Take(ServerStatics.PageSize) + .ToListAsync(); + + this.UserCount = await this.Database.Users.CountAsync(u => u.PermissionLevel < 0); + + this.PageAmount = Math.Max(1, (int)Math.Ceiling((double)this.UserCount / ServerStatics.PageSize)); + + return this.Page(); + } +} \ No newline at end of file diff --git a/ProjectLighthouse.Servers.Website/Pages/Moderation/HiddenLevelsPage.cshtml b/ProjectLighthouse.Servers.Website/Pages/Moderation/HiddenLevelsPage.cshtml new file mode 100644 index 00000000..e8122bc1 --- /dev/null +++ b/ProjectLighthouse.Servers.Website/Pages/Moderation/HiddenLevelsPage.cshtml @@ -0,0 +1,44 @@ +@page "/moderation/hiddenLevels/{pageNumber:int}" +@using LBPUnion.ProjectLighthouse.Extensions +@using LBPUnion.ProjectLighthouse.Levels +@using LBPUnion.ProjectLighthouse.Localization.StringLists +@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.Moderation.HiddenLevelsPage + +@{ + Layout = "Layouts/BaseLayout"; + Model.Title = Model.Translate(ModPanelStrings.HiddenLevels); + bool isMobile = Model.Request.IsMobile(); +} + +

There are @Model.SlotCount hidden levels.

+ +@foreach (Slot slot in Model.Slots) +{ +
+ @await Html.PartialAsync("Partials/SlotCardPartial", slot, new ViewDataDictionary(ViewData) + { + { + "User", Model.User + }, + { + "CallbackUrl", $"~/moderation/hiddenLevels/{Model.PageNumber}" + }, + { + "ShowLink", true + }, + { + "IsMobile", isMobile + }, + }) +
+} + +@if (Model.PageNumber != 0) +{ + Previous Page +} +@(Model.PageNumber + 1) / @(Model.PageAmount) +@if (Model.PageNumber < Model.PageAmount - 1) +{ + Next Page +} \ No newline at end of file diff --git a/ProjectLighthouse.Servers.Website/Pages/Moderation/HiddenLevelsPage.cshtml.cs b/ProjectLighthouse.Servers.Website/Pages/Moderation/HiddenLevelsPage.cshtml.cs new file mode 100644 index 00000000..11d4a25f --- /dev/null +++ b/ProjectLighthouse.Servers.Website/Pages/Moderation/HiddenLevelsPage.cshtml.cs @@ -0,0 +1,41 @@ +using LBPUnion.ProjectLighthouse.Configuration; +using LBPUnion.ProjectLighthouse.Levels; +using LBPUnion.ProjectLighthouse.PlayerData; +using LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.EntityFrameworkCore; + +namespace LBPUnion.ProjectLighthouse.Servers.Website.Pages.Moderation; + +public class HiddenLevelsPage : BaseLayout +{ + public HiddenLevelsPage(Database database) : base(database) + {} + + public int PageAmount; + + public int PageNumber; + + public int SlotCount; + + public List Slots = new(); + + public async Task OnGet([FromRoute] int pageNumber, [FromQuery] string? name) + { + WebToken? token = this.Database.WebTokenFromRequest(this.Request); + if (token == null) return this.Redirect("/login"); + + this.Slots = await this.Database.Slots + .Where(s => s.Hidden) + .Skip(pageNumber * ServerStatics.PageSize) + .Take(ServerStatics.PageSize) + .ToListAsync(); + + this.SlotCount = await this.Database.Slots.CountAsync(s => s.Hidden); + + this.PageAmount = Math.Max(1, (int)Math.Ceiling((double)this.SlotCount / ServerStatics.PageSize)); + + return this.Page(); + } +} \ No newline at end of file diff --git a/ProjectLighthouse.Servers.Website/Pages/Moderation/ModPanelPage.cshtml b/ProjectLighthouse.Servers.Website/Pages/Moderation/ModPanelPage.cshtml index 0c62c02f..304d54ab 100644 --- a/ProjectLighthouse.Servers.Website/Pages/Moderation/ModPanelPage.cshtml +++ b/ProjectLighthouse.Servers.Website/Pages/Moderation/ModPanelPage.cshtml @@ -42,12 +42,12 @@ else

Actions

- + View banned users

- + View hidden levels \ No newline at end of file diff --git a/ProjectLighthouse.Servers.Website/Pages/UsersPage.cshtml b/ProjectLighthouse.Servers.Website/Pages/UsersPage.cshtml index db8f7a46..e2f083e9 100644 --- a/ProjectLighthouse.Servers.Website/Pages/UsersPage.cshtml +++ b/ProjectLighthouse.Servers.Website/Pages/UsersPage.cshtml @@ -8,6 +8,7 @@ @{ Layout = "Layouts/BaseLayout"; Model.Title = Model.Translate(BaseLayoutStrings.HeaderUsers); + bool isMobile = Model.Request.IsMobile(); }

There are @Model.UserCount total users.

@@ -22,7 +23,6 @@ @foreach (User user in Model.Users) { - bool isMobile = Model.Request.IsMobile();
@await Html.PartialAsync("Partials/UserCardPartial", user, new ViewDataDictionary(ViewData) {