From e29a3874b82960a0ab21a444e95432aa6b3136ff Mon Sep 17 00:00:00 2001 From: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com> Date: Sat, 18 Feb 2023 19:00:17 -0600 Subject: [PATCH] add entity logs verb (#14170) --- .../UI/Logs/AdminLogsControl.xaml.cs | 26 +++++++++++++++++++ .../Administration/UI/Logs/AdminLogsEui.cs | 9 +++++++ .../Administration/Logs/AdminLogsEui.cs | 11 ++++++++ .../Administration/Systems/AdminVerbSystem.cs | 21 +++++++++++++++ .../Administration/Logs/AdminLogsEuiState.cs | 15 +++++++++++ .../en-US/administration/admin-verbs.ftl | 1 + 6 files changed, 83 insertions(+) diff --git a/Content.Client/Administration/UI/Logs/AdminLogsControl.xaml.cs b/Content.Client/Administration/UI/Logs/AdminLogsControl.xaml.cs index 8372e3aa49..35233e4ae3 100644 --- a/Content.Client/Administration/UI/Logs/AdminLogsControl.xaml.cs +++ b/Content.Client/Administration/UI/Logs/AdminLogsControl.xaml.cs @@ -174,6 +174,32 @@ public sealed partial class AdminLogsControl : Control UpdateLogs(); } + public void SetTypesSelection(HashSet selectedTypes, bool invert = false) + { + SelectedTypes.Clear(); + + foreach (var control in TypesContainer.Children) + { + if (control is not AdminLogTypeButton type) + { + continue; + } + + if (selectedTypes.Contains(type.Type) ^ invert) + { + type.Pressed = true; + SelectedTypes.Add(type.Type); + } + else + { + type.Pressed = false; + type.Visible = ShouldShowType(type); + } + } + + UpdateLogs(); + } + public void UpdateTypes() { foreach (var control in TypesContainer.Children) diff --git a/Content.Client/Administration/UI/Logs/AdminLogsEui.cs b/Content.Client/Administration/UI/Logs/AdminLogsEui.cs index 0c0c87f6c2..39faa27284 100644 --- a/Content.Client/Administration/UI/Logs/AdminLogsEui.cs +++ b/Content.Client/Administration/UI/Logs/AdminLogsEui.cs @@ -137,6 +137,15 @@ public sealed class AdminLogsEui : BaseEui LogsControl.NextButton.Disabled = !newLogs.HasNext; break; + + case SetLogFilter setLogFilter: + if (setLogFilter.Search != null) + LogsControl.LogSearch.SetText(setLogFilter.Search); + + if (setLogFilter.Types != null) + LogsControl.SetTypesSelection(setLogFilter.Types, setLogFilter.InvertTypes); + + break; } } diff --git a/Content.Server/Administration/Logs/AdminLogsEui.cs b/Content.Server/Administration/Logs/AdminLogsEui.cs index 8b0366faf1..47f6e8af01 100644 --- a/Content.Server/Administration/Logs/AdminLogsEui.cs +++ b/Content.Server/Administration/Logs/AdminLogsEui.cs @@ -7,6 +7,7 @@ using Content.Server.GameTicking; using Content.Shared.Administration; using Content.Shared.Administration.Logs; using Content.Shared.CCVar; +using Content.Shared.Database; using Content.Shared.Eui; using Microsoft.Extensions.ObjectPool; using Robust.Shared.Configuration; @@ -140,6 +141,16 @@ public sealed class AdminLogsEui : BaseEui } } + public void SetLogFilter(string? search = null, bool invertTypes = false, HashSet? types = null) + { + var message = new SetLogFilter( + search, + invertTypes, + types); + + SendMessage(message); + } + private async void SendLogs(bool replace) { var stopwatch = new Stopwatch(); diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.cs b/Content.Server/Administration/Systems/AdminVerbSystem.cs index 300dec0386..0ad22dbf5e 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.cs @@ -1,4 +1,5 @@ using Content.Server.Administration.Commands; +using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; using Content.Server.Administration.UI; using Content.Server.Chemistry.Components.SolutionManager; @@ -48,6 +49,7 @@ namespace Content.Server.Administration.Systems [Dependency] private readonly ArtifactSystem _artifactSystem = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly PrayerSystem _prayerSystem = default!; + [Dependency] private readonly EuiManager _eui = default!; private readonly Dictionary _openSolutionUis = new(); @@ -119,6 +121,25 @@ namespace Content.Server.Administration.Systems }); } + // Admin Logs + if (_adminManager.HasAdminFlag(player, AdminFlags.Logs)) + { + Verb logsVerbEntity = new() + { + Priority = -2, + Text = Loc.GetString("admin-verbs-admin-logs-entity"), + Category = VerbCategory.Admin, + Act = () => + { + var ui = new AdminLogsEui(); + _eui.OpenEui(ui, player); + ui.SetLogFilter(search:args.Target.GetHashCode().ToString()); + }, + Impact = LogImpact.Low + }; + args.Verbs.Add(logsVerbEntity); + } + // TeleportTo args.Verbs.Add(new Verb { diff --git a/Content.Shared/Administration/Logs/AdminLogsEuiState.cs b/Content.Shared/Administration/Logs/AdminLogsEuiState.cs index 67017aca51..ec3c72c13b 100644 --- a/Content.Shared/Administration/Logs/AdminLogsEuiState.cs +++ b/Content.Shared/Administration/Logs/AdminLogsEuiState.cs @@ -27,6 +27,21 @@ public static class AdminLogsEuiMsg { } + [Serializable, NetSerializable] + public sealed class SetLogFilter : EuiMessageBase + { + public SetLogFilter(string? search = null, bool invertTypes = false, HashSet? types = null) + { + Search = search; + InvertTypes = invertTypes; + Types = types; + } + + public string? Search { get; set; } + public bool InvertTypes { get; set; } + public HashSet? Types { get; set; } + } + [Serializable, NetSerializable] public sealed class NewLogs : EuiMessageBase { diff --git a/Resources/Locale/en-US/administration/admin-verbs.ftl b/Resources/Locale/en-US/administration/admin-verbs.ftl index 5bd9845e42..dab68eab4d 100644 --- a/Resources/Locale/en-US/administration/admin-verbs.ftl +++ b/Resources/Locale/en-US/administration/admin-verbs.ftl @@ -2,6 +2,7 @@ delete-verb-get-data-text = Delete edit-solutions-verb-get-data-text = Edit Solutions explode-verb-get-data-text = Explode ahelp-verb-get-data-text = Message +admin-verbs-admin-logs-entity = Entity Logs admin-verbs-teleport-to = Teleport To admin-verbs-teleport-here = Teleport Here admin-verbs-freeze = Freeze