Files
wwdpublic/Content.Server/Database/DatabaseRecords.cs
SimpleStation14 29125fe18c Mirror: Improve admin message seen/dismiss state. (#291)
## Mirror of PR #26223: [Improve admin message seen/dismiss
state.](https://github.com/space-wizards/space-station-14/pull/26223)
from <img src="https://avatars.githubusercontent.com/u/10567778?v=4"
alt="space-wizards" width="22"/>
[space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14)

###### `d776c4b392a082dba7539d77cfa20fc904ed4091`

PR opened by <img
src="https://avatars.githubusercontent.com/u/8107459?v=4" width="16"/><a
href="https://github.com/PJB3005"> PJB3005</a> at 2024-03-18 04:02:20
UTC

---

PR changed 21 files with 3748 additions and 108 deletions.

The PR had the following labels:
- Changes: UI
- Status: Needs Review


---

<details open="true"><summary><h1>Original Body</h1></summary>

> As part of this, it has become impossible for a player to play without
dismissing the message in some form. Instead of a shitty popup window,
the popup is now a fullscreen overlay that blocks clicks behind it,
making the game unplayable. Also, if a user somehow has multiple
messages they will be combined into one popup.
> 
> ## About the PR
> Admin messages now have separate "seen" and "dismissed" fields. The
idea is that an admin should be able to tell whether a user pressed the
"dismiss for now" button. Instead of using "seen" as "show this message
to players when they join", "dismissed" is now used for this.
> 
> ## Why / Balance
> Fixes #26211
> 
> ## Technical details
> Existing notes in the database will automatically be marked as
dismissed on migration. A note cannot be dismissed without being seen
(enforced via constraint in the database too, aren't I fancy).
> 
> ## Media
> - [X] I have added screenshots/videos to this PR showcasing its
changes ingame, **or** this PR does not require an ingame showcase
> 
>
![image](https://github.com/space-wizards/space-station-14/assets/8107459/3be27968-f813-4a00-8bfb-82872fabae9d)
> 
>
![image](https://github.com/space-wizards/space-station-14/assets/8107459/07efabaf-5209-4d24-9144-2f8843524d95)
> 
> **Changelog**
> <!--
> Make players aware of new features and changes that could affect how
they play the game by adding a Changelog entry. Please read the
Changelog guidelines located at:
https://docs.spacestation14.io/en/getting-started/pr-guideline#changelog
> -->
> 
> 🆑
> ADMIN:
> - tweak: Admin messages are now shown as "seen" even if the player
dismisses them only temporarily. Also, it is impossible for players to
play without dismissing the message (temporary or permanent).


</details>

Co-authored-by: SimpleStation14 <Unknown>
2024-05-09 01:32:31 -04:00

129 lines
3.4 KiB
C#

using System.Collections.Immutable;
using System.Net;
using Content.Shared.Database;
using Robust.Shared.Network;
namespace Content.Server.Database;
// This file contains copies of records returned from the database.
// We can't return the raw EF Core entities as they are often unsuited.
// (e.g. datetime handling of Microsoft.Data.Sqlite)
public interface IAdminRemarksRecord
{
public int Id { get; }
public RoundRecord? Round { get; }
public PlayerRecord? Player { get; }
public TimeSpan PlaytimeAtNote { get; }
public string Message { get; }
public PlayerRecord? CreatedBy { get; }
public DateTimeOffset CreatedAt { get; }
public PlayerRecord? LastEditedBy { get; }
public DateTimeOffset? LastEditedAt { get; }
public DateTimeOffset? ExpirationTime { get; }
public bool Deleted { get; }
}
public sealed record ServerRoleBanNoteRecord(
int Id,
RoundRecord? Round,
PlayerRecord? Player,
TimeSpan PlaytimeAtNote,
string Message,
NoteSeverity Severity,
PlayerRecord? CreatedBy,
DateTimeOffset CreatedAt,
PlayerRecord? LastEditedBy,
DateTimeOffset? LastEditedAt,
DateTimeOffset? ExpirationTime,
bool Deleted,
string[] Roles,
PlayerRecord? UnbanningAdmin,
DateTime? UnbanTime) : IAdminRemarksRecord;
public sealed record ServerBanNoteRecord(
int Id,
RoundRecord? Round,
PlayerRecord? Player,
TimeSpan PlaytimeAtNote,
string Message,
NoteSeverity Severity,
PlayerRecord? CreatedBy,
DateTimeOffset CreatedAt,
PlayerRecord? LastEditedBy,
DateTimeOffset? LastEditedAt,
DateTimeOffset? ExpirationTime,
bool Deleted,
PlayerRecord? UnbanningAdmin,
DateTime? UnbanTime) : IAdminRemarksRecord;
public sealed record AdminNoteRecord(
int Id,
RoundRecord? Round,
PlayerRecord? Player,
TimeSpan PlaytimeAtNote,
string Message,
NoteSeverity Severity,
PlayerRecord? CreatedBy,
DateTimeOffset CreatedAt,
PlayerRecord? LastEditedBy,
DateTimeOffset? LastEditedAt,
DateTimeOffset? ExpirationTime,
bool Deleted,
PlayerRecord? DeletedBy,
DateTimeOffset? DeletedAt,
bool Secret) : IAdminRemarksRecord;
public sealed record AdminWatchlistRecord(
int Id,
RoundRecord? Round,
PlayerRecord? Player,
TimeSpan PlaytimeAtNote,
string Message,
PlayerRecord? CreatedBy,
DateTimeOffset CreatedAt,
PlayerRecord? LastEditedBy,
DateTimeOffset? LastEditedAt,
DateTimeOffset? ExpirationTime,
bool Deleted,
PlayerRecord? DeletedBy,
DateTimeOffset? DeletedAt) : IAdminRemarksRecord;
public sealed record AdminMessageRecord(
int Id,
RoundRecord? Round,
PlayerRecord? Player,
TimeSpan PlaytimeAtNote,
string Message,
PlayerRecord? CreatedBy,
DateTimeOffset CreatedAt,
PlayerRecord? LastEditedBy,
DateTimeOffset? LastEditedAt,
DateTimeOffset? ExpirationTime,
bool Deleted,
PlayerRecord? DeletedBy,
DateTimeOffset? DeletedAt,
bool Seen,
bool Dismissed) : IAdminRemarksRecord;
public sealed record PlayerRecord(
NetUserId UserId,
DateTimeOffset FirstSeenTime,
string LastSeenUserName,
DateTimeOffset LastSeenTime,
IPAddress LastSeenAddress,
ImmutableArray<byte>? HWId);
public sealed record RoundRecord(int Id, DateTimeOffset StartDate, ServerRecord Server);
public sealed record ServerRecord(int Id, string Name);