1+ using Content . Client . Administration . Managers ;
12using Content . Client . CrewAssignments . UI ;
3+ using Content . Shared . Cargo . BUI ;
4+ using Content . Shared . CCVar ;
25using Content . Shared . IdentityManagement ;
36using Content . Shared . MessageBoard . Components ;
47using JetBrains . Annotations ;
58using Robust . Client . GameObjects ;
69using Robust . Client . Player ;
710using Robust . Client . UserInterface . Controls ;
11+ using Robust . Shared . Configuration ;
12+ using Robust . Shared . Player ;
813using Robust . Shared . Prototypes ;
914using Robust . Shared . Utility ;
1015using System ;
@@ -17,14 +22,67 @@ namespace Content.Client.MessageBoard.UI;
1722[ UsedImplicitly ]
1823public sealed class MessageBoardBoundUserInterface : BoundUserInterface
1924{
20- [ ViewVariables ]
25+ [ Dependency ] private readonly IClientAdminManager _admin = default ! ;
26+ [ Dependency ] private readonly IConfigurationManager _cfg = default ! ;
2127 private MessageBoard ? _menu ;
2228 private CreateEntry ? _createEntry ;
29+ private EntryWindow ? _entryWindow ;
2330
2431 public MessageBoardBoundUserInterface ( EntityUid owner , Enum uiKey ) : base ( owner , uiKey )
2532 {
2633 }
2734
35+ protected override void UpdateState ( BoundUserInterfaceState state )
36+ {
37+ bool isAdmin = _admin . IsActive ( ) ;
38+ var player = PlayerManager . LocalEntity ;
39+ if ( player == null ) return ;
40+ var playerName = Identity . Name ( player . Value , EntMan ) ;
41+ base . UpdateState ( state ) ;
42+ if ( _menu == null )
43+ {
44+ return ;
45+ }
46+ if ( state is not MessageBoardInterfaceState cState )
47+ return ;
48+ _menu . PublicBoardEntriesBC . DisposeAllChildren ( ) ;
49+ cState . PublicEntries . Reverse ( ) ;
50+ foreach ( var entry in cState . PublicEntries )
51+ {
52+ bool delete = false ;
53+ if ( isAdmin || playerName == entry . Author ) delete = true ;
54+ var adjustedTime = entry . CreationTime . AddYears ( _cfg . GetCVar ( CCVars . YearOffset ) ) ;
55+ EntryHeader header = new EntryHeader ( entry . Title , entry . Author , $ "{ adjustedTime . ToString ( ) } ", entry . Comments . Count , delete ) ;
56+ _menu . PublicBoardEntriesBC . AddChild ( header ) ;
57+ header . DeleteButton . OnPressed += ( args ) =>
58+ {
59+ SendMessage ( new MessageBoardDeleteEntryPublicMessage ( entry . UID ) ) ;
60+ } ;
61+ header . ViewButton . OnPressed += ( args ) =>
62+ {
63+ if ( _entryWindow != null )
64+ {
65+ _entryWindow . Dispose ( ) ;
66+ }
67+ var entryWindow = new EntryWindow ( entry , isAdmin , playerName , this ) ;
68+ _entryWindow = entryWindow ;
69+ entryWindow . OpenCentered ( ) ;
70+ entryWindow . AddCommentBtn . OnPressed += ( commentArgs ) =>
71+ {
72+ var comment = entryWindow . AddCommentLE . Text ;
73+ if ( comment == string . Empty ) return ;
74+ var ID = entryWindow . Entry . UID ;
75+ entryWindow . AddCommentLE . Text = string . Empty ;
76+ SendMessage ( new MessageBoardPostCommentPublicMessage ( ID , comment ) ) ;
77+ } ;
78+ } ;
79+ if ( _entryWindow != null && _entryWindow . Entry . UID == entry . UID )
80+ {
81+ _entryWindow . UpdateEntry ( entry ) ;
82+ }
83+ }
84+ }
85+
2886 protected override void Open ( )
2987 {
3088 base . Open ( ) ;
0 commit comments