diff --git a/Content.Client/Administration/UI/Notes/NoteEdit.xaml b/Content.Client/Administration/UI/Notes/NoteEdit.xaml
index 506abac540ce..72b2c55ce8da 100644
--- a/Content.Client/Administration/UI/Notes/NoteEdit.xaml
+++ b/Content.Client/Administration/UI/Notes/NoteEdit.xaml
@@ -8,6 +8,7 @@
+
diff --git a/Content.Client/Administration/UI/Notes/NoteEdit.xaml.cs b/Content.Client/Administration/UI/Notes/NoteEdit.xaml.cs
index 6f314f79542e..a412e47396bf 100644
--- a/Content.Client/Administration/UI/Notes/NoteEdit.xaml.cs
+++ b/Content.Client/Administration/UI/Notes/NoteEdit.xaml.cs
@@ -17,6 +17,17 @@ public sealed partial class NoteEdit : FancyWindow
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly IClientConsoleHost _console = default!;
+ private enum Multipliers
+ {
+ Minutes,
+ Hours,
+ Days,
+ Weeks,
+ Months,
+ Years,
+ Centuries
+ }
+
public event Action? SubmitPressed;
public NoteEdit(SharedAdminNote? note, string playerName, bool canCreate, bool canEdit)
@@ -31,6 +42,20 @@ public NoteEdit(SharedAdminNote? note, string playerName, bool canCreate, bool c
ResetSubmitButton();
+ // It's weird to use minutes as the IDs, but it works and makes sense kind of :)
+ ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-minutes"), (int) Multipliers.Minutes);
+ ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-hours"), (int) Multipliers.Hours);
+ ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-days"), (int) Multipliers.Days);
+ ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-weeks"), (int) Multipliers.Weeks);
+ ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-months"), (int) Multipliers.Months);
+ ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-years"), (int) Multipliers.Years);
+ ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-centuries"), (int) Multipliers.Centuries);
+ ExpiryLengthDropdown.OnItemSelected += OnLengthChanged;
+
+ ExpiryLengthDropdown.SelectId((int) Multipliers.Weeks);
+
+ ExpiryLineEdit.OnTextChanged += OnTextChanged;
+
TypeOption.AddItem(Loc.GetString("admin-note-editor-type-note"), (int) NoteType.Note);
TypeOption.AddItem(Loc.GetString("admin-note-editor-type-message"), (int) NoteType.Message);
TypeOption.AddItem(Loc.GetString("admin-note-editor-type-watchlist"), (int) NoteType.Watchlist);
@@ -172,8 +197,9 @@ private void UpdatePermanentCheckboxFields()
{
ExpiryLabel.Visible = !PermanentCheckBox.Pressed;
ExpiryLineEdit.Visible = !PermanentCheckBox.Pressed;
+ ExpiryLengthDropdown.Visible = !PermanentCheckBox.Pressed;
- ExpiryLineEdit.Text = !PermanentCheckBox.Pressed ? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") : string.Empty;
+ ExpiryLineEdit.Text = !PermanentCheckBox.Pressed ? 1.ToString() : string.Empty;
}
private void OnSecretPressed(BaseButton.ButtonEventArgs _)
@@ -187,6 +213,16 @@ private void OnSeverityChanged(OptionButton.ItemSelectedEventArgs args)
SeverityOption.SelectId(args.Id);
}
+ private void OnLengthChanged(OptionButton.ItemSelectedEventArgs args)
+ {
+ ExpiryLengthDropdown.SelectId(args.Id);
+ }
+
+ private void OnTextChanged(HistoryLineEdit.LineEditEventArgs args)
+ {
+ ParseExpiryTime();
+ }
+
private void OnSubmitButtonPressed(BaseButton.ButtonEventArgs args)
{
if (!ParseExpiryTime())
@@ -263,13 +299,24 @@ private bool ParseExpiryTime()
return true;
}
- if (string.IsNullOrWhiteSpace(ExpiryLineEdit.Text) || !DateTime.TryParse(ExpiryLineEdit.Text, out var result) || DateTime.UtcNow > result)
+ if (string.IsNullOrWhiteSpace(ExpiryLineEdit.Text) || !uint.TryParse(ExpiryLineEdit.Text, out var inputInt))
{
ExpiryLineEdit.ModulateSelfOverride = Color.Red;
return false;
}
- ExpiryTime = result.ToUniversalTime();
+ var mult = ExpiryLengthDropdown.SelectedId switch
+ {
+ (int) Multipliers.Minutes => TimeSpan.FromMinutes(1).TotalMinutes,
+ (int) Multipliers.Hours => TimeSpan.FromHours(1).TotalMinutes,
+ (int) Multipliers.Days => TimeSpan.FromDays(1).TotalMinutes,
+ (int) Multipliers.Weeks => TimeSpan.FromDays(7).TotalMinutes,
+ (int) Multipliers.Months => TimeSpan.FromDays(30).TotalMinutes,
+ (int) Multipliers.Years => TimeSpan.FromDays(365).TotalMinutes,
+ (int) Multipliers.Centuries => TimeSpan.FromDays(36525).TotalMinutes,
+ _ => throw new ArgumentOutOfRangeException(nameof(ExpiryLengthDropdown.SelectedId), "Multiplier out of range :(")
+ };
+ ExpiryTime = DateTime.UtcNow.AddMinutes(inputInt * mult);
ExpiryLineEdit.ModulateSelfOverride = null;
return true;
}
diff --git a/Resources/Locale/en-US/administration/ui/admin-notes.ftl b/Resources/Locale/en-US/administration/ui/admin-notes.ftl
index 03e12902576b..c8da267e058c 100644
--- a/Resources/Locale/en-US/administration/ui/admin-notes.ftl
+++ b/Resources/Locale/en-US/administration/ui/admin-notes.ftl
@@ -57,13 +57,23 @@ admin-note-editor-severity-medium = Medium
admin-note-editor-severity-high = High
admin-note-editor-expiry-checkbox = Permanent?
admin-note-editor-expiry-checkbox-tooltip = Check this to make it expire
-admin-note-editor-expiry-label = Expires on:
+admin-note-editor-expiry-label = Expires in:
admin-note-editor-expiry-label-params = Expires on: {$date} (in {$expiresIn})
admin-note-editor-expiry-label-expired = Expired
-admin-note-editor-expiry-placeholder = Enter expiration date (yyyy-MM-dd HH:mm:ss)
+admin-note-editor-expiry-placeholder = Enter expiration time (integer).
admin-note-editor-submit = Submit
admin-note-editor-submit-confirm = Are you sure?
+# Time
+admin-note-button-minutes = Minutes
+admin-note-button-hours = Hours
+admin-note-button-days = Days
+admin-note-button-weeks = Weeks
+admin-note-button-months = Months
+admin-note-button-years = Years
+admin-note-button-centuries = Centuries
+
+
# Verb
admin-notes-verb-text = Open Admin Notes