From 72899af1e41a93061bae1a59fef21b3ab8cfb532 Mon Sep 17 00:00:00 2001 From: Moonbase Date: Thu, 11 Dec 2025 14:21:19 -0800 Subject: [PATCH] Implement Admin Panel (Reimplements Admin Features) --- qtcnet-client/Forms/AddRoomForm.Designer.cs | 89 +++++ qtcnet-client/Forms/AddRoomForm.cs | 29 ++ qtcnet-client/Forms/AddRoomForm.resx | 120 ++++++ .../Forms/AdminPanelForm.Designer.cs | 363 ++++++++++++++++++ qtcnet-client/Forms/AdminPanelForm.cs | 106 +++++ qtcnet-client/Forms/AdminPanelForm.resx | 245 ++++++++++++ qtcnet-client/Forms/MainForm.cs | 22 ++ ...PI.Dtos.User.UserInformationDto.datasource | 10 + .../QtCNETAPI.Models.Room.datasource | 10 + 9 files changed, 994 insertions(+) create mode 100644 qtcnet-client/Forms/AddRoomForm.Designer.cs create mode 100644 qtcnet-client/Forms/AddRoomForm.cs create mode 100644 qtcnet-client/Forms/AddRoomForm.resx create mode 100644 qtcnet-client/Forms/AdminPanelForm.Designer.cs create mode 100644 qtcnet-client/Forms/AdminPanelForm.cs create mode 100644 qtcnet-client/Forms/AdminPanelForm.resx create mode 100644 qtcnet-client/Properties/DataSources/QtCNETAPI.Dtos.User.UserInformationDto.datasource create mode 100644 qtcnet-client/Properties/DataSources/QtCNETAPI.Models.Room.datasource diff --git a/qtcnet-client/Forms/AddRoomForm.Designer.cs b/qtcnet-client/Forms/AddRoomForm.Designer.cs new file mode 100644 index 0000000..70a49a1 --- /dev/null +++ b/qtcnet-client/Forms/AddRoomForm.Designer.cs @@ -0,0 +1,89 @@ +namespace qtcnet_client.Forms +{ + partial class AddRoomForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + lblHeader = new Label(); + txtRoomName = new TextBox(); + btnCreate = new Button(); + SuspendLayout(); + // + // lblHeader + // + lblHeader.AutoSize = true; + lblHeader.Font = new Font("Segoe UI Semibold", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); + lblHeader.ForeColor = Color.White; + lblHeader.Location = new Point(99, 9); + lblHeader.Name = "lblHeader"; + lblHeader.Size = new Size(217, 21); + lblHeader.TabIndex = 0; + lblHeader.Text = "Enter A Name For The Room"; + // + // txtRoomName + // + txtRoomName.Location = new Point(12, 40); + txtRoomName.Name = "txtRoomName"; + txtRoomName.Size = new Size(397, 23); + txtRoomName.TabIndex = 1; + // + // btnCreate + // + btnCreate.Location = new Point(189, 73); + btnCreate.Name = "btnCreate"; + btnCreate.Size = new Size(52, 23); + btnCreate.TabIndex = 2; + btnCreate.Text = "Create"; + btnCreate.UseVisualStyleBackColor = true; + btnCreate.Click += btnCreate_Click; + // + // AddRoomForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.DodgerBlue; + ClientSize = new Size(421, 106); + Controls.Add(btnCreate); + Controls.Add(txtRoomName); + Controls.Add(lblHeader); + FormBorderStyle = FormBorderStyle.FixedDialog; + MaximizeBox = false; + MinimizeBox = false; + Name = "AddRoomForm"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Add Room"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label lblHeader; + private TextBox txtRoomName; + private Button btnCreate; + } +} \ No newline at end of file diff --git a/qtcnet-client/Forms/AddRoomForm.cs b/qtcnet-client/Forms/AddRoomForm.cs new file mode 100644 index 0000000..2862df5 --- /dev/null +++ b/qtcnet-client/Forms/AddRoomForm.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace qtcnet_client.Forms +{ + public partial class AddRoomForm : Form + { + public string RoomName { get; private set; } = string.Empty; + public AddRoomForm() + { + InitializeComponent(); + } + + private void btnCreate_Click(object sender, EventArgs e) + { + if(!string.IsNullOrWhiteSpace(txtRoomName.Text)) + { + RoomName = txtRoomName.Text; + DialogResult = DialogResult.OK; + Close(); + } + } + } +} diff --git a/qtcnet-client/Forms/AddRoomForm.resx b/qtcnet-client/Forms/AddRoomForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/qtcnet-client/Forms/AddRoomForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/qtcnet-client/Forms/AdminPanelForm.Designer.cs b/qtcnet-client/Forms/AdminPanelForm.Designer.cs new file mode 100644 index 0000000..6c0c1a3 --- /dev/null +++ b/qtcnet-client/Forms/AdminPanelForm.Designer.cs @@ -0,0 +1,363 @@ +namespace qtcnet_client.Forms +{ + partial class AdminPanelForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AdminPanelForm)); + pbLogo = new PictureBox(); + lblServerAdmin = new Label(); + tcMain = new TabControl(); + tpRooms = new TabPage(); + dgRooms = new DataGridView(); + idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + nameDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + creatorIdDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + createdAtDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + userCountDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + cmsRoomAdd = new ContextMenuStrip(components); + tsiAddRoom = new ToolStripMenuItem(); + bsRooms = new BindingSource(components); + tpUsers = new TabPage(); + dgUsers = new DataGridView(); + idDataGridViewTextBoxColumn1 = new DataGridViewTextBoxColumn(); + usernameDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + profilePictureDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + bioDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + roleDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + dateOfBirthDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + createdAtDataGridViewTextBoxColumn1 = new DataGridViewTextBoxColumn(); + lastLoginDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + statusDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + currencyAmountDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + profileCosmeticIdDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); + bsUsers = new BindingSource(components); + ilTabIcons = new ImageList(components); + ((System.ComponentModel.ISupportInitialize)pbLogo).BeginInit(); + tcMain.SuspendLayout(); + tpRooms.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dgRooms).BeginInit(); + cmsRoomAdd.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)bsRooms).BeginInit(); + tpUsers.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dgUsers).BeginInit(); + ((System.ComponentModel.ISupportInitialize)bsUsers).BeginInit(); + SuspendLayout(); + // + // pbLogo + // + pbLogo.Image = Properties.Resources.QtCNETIcon; + pbLogo.Location = new Point(-16, -23); + pbLogo.Name = "pbLogo"; + pbLogo.Size = new Size(179, 125); + pbLogo.SizeMode = PictureBoxSizeMode.Zoom; + pbLogo.TabIndex = 0; + pbLogo.TabStop = false; + // + // lblServerAdmin + // + lblServerAdmin.AutoSize = true; + lblServerAdmin.Font = new Font("Segoe UI Semibold", 20F, FontStyle.Bold | FontStyle.Italic); + lblServerAdmin.ForeColor = Color.White; + lblServerAdmin.Location = new Point(399, 26); + lblServerAdmin.Name = "lblServerAdmin"; + lblServerAdmin.Size = new Size(174, 37); + lblServerAdmin.TabIndex = 1; + lblServerAdmin.Text = "Admin Panel"; + // + // tcMain + // + tcMain.Controls.Add(tpRooms); + tcMain.Controls.Add(tpUsers); + tcMain.ImageList = ilTabIcons; + tcMain.Location = new Point(12, 66); + tcMain.Name = "tcMain"; + tcMain.SelectedIndex = 0; + tcMain.Size = new Size(561, 372); + tcMain.TabIndex = 2; + // + // tpRooms + // + tpRooms.Controls.Add(dgRooms); + tpRooms.ImageKey = "Rooms"; + tpRooms.Location = new Point(4, 24); + tpRooms.Name = "tpRooms"; + tpRooms.Padding = new Padding(3); + tpRooms.Size = new Size(553, 344); + tpRooms.TabIndex = 0; + tpRooms.Text = "Rooms"; + tpRooms.UseVisualStyleBackColor = true; + // + // dgRooms + // + dgRooms.AutoGenerateColumns = false; + dgRooms.BackgroundColor = Color.White; + dgRooms.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dgRooms.Columns.AddRange(new DataGridViewColumn[] { idDataGridViewTextBoxColumn, nameDataGridViewTextBoxColumn, creatorIdDataGridViewTextBoxColumn, createdAtDataGridViewTextBoxColumn, userCountDataGridViewTextBoxColumn }); + dgRooms.ContextMenuStrip = cmsRoomAdd; + dgRooms.DataSource = bsRooms; + dgRooms.Dock = DockStyle.Fill; + dgRooms.Location = new Point(3, 3); + dgRooms.Name = "dgRooms"; + dgRooms.ReadOnly = true; + dgRooms.Size = new Size(547, 338); + dgRooms.TabIndex = 0; + dgRooms.UserDeletingRow += dgRooms_UserDeletingRow; + // + // idDataGridViewTextBoxColumn + // + idDataGridViewTextBoxColumn.DataPropertyName = "Id"; + idDataGridViewTextBoxColumn.HeaderText = "Id"; + idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn"; + idDataGridViewTextBoxColumn.ReadOnly = true; + // + // nameDataGridViewTextBoxColumn + // + nameDataGridViewTextBoxColumn.DataPropertyName = "Name"; + nameDataGridViewTextBoxColumn.HeaderText = "Name"; + nameDataGridViewTextBoxColumn.Name = "nameDataGridViewTextBoxColumn"; + nameDataGridViewTextBoxColumn.ReadOnly = true; + // + // creatorIdDataGridViewTextBoxColumn + // + creatorIdDataGridViewTextBoxColumn.DataPropertyName = "CreatorId"; + creatorIdDataGridViewTextBoxColumn.HeaderText = "CreatorId"; + creatorIdDataGridViewTextBoxColumn.Name = "creatorIdDataGridViewTextBoxColumn"; + creatorIdDataGridViewTextBoxColumn.ReadOnly = true; + // + // createdAtDataGridViewTextBoxColumn + // + createdAtDataGridViewTextBoxColumn.DataPropertyName = "CreatedAt"; + createdAtDataGridViewTextBoxColumn.HeaderText = "CreatedAt"; + createdAtDataGridViewTextBoxColumn.Name = "createdAtDataGridViewTextBoxColumn"; + createdAtDataGridViewTextBoxColumn.ReadOnly = true; + // + // userCountDataGridViewTextBoxColumn + // + userCountDataGridViewTextBoxColumn.DataPropertyName = "UserCount"; + userCountDataGridViewTextBoxColumn.HeaderText = "UserCount"; + userCountDataGridViewTextBoxColumn.Name = "userCountDataGridViewTextBoxColumn"; + userCountDataGridViewTextBoxColumn.ReadOnly = true; + // + // cmsRoomAdd + // + cmsRoomAdd.Items.AddRange(new ToolStripItem[] { tsiAddRoom }); + cmsRoomAdd.Name = "cmsRoomAdd"; + cmsRoomAdd.Size = new Size(132, 26); + // + // tsiAddRoom + // + tsiAddRoom.Name = "tsiAddRoom"; + tsiAddRoom.Size = new Size(131, 22); + tsiAddRoom.Text = "Add Room"; + tsiAddRoom.Click += tsiAddRoom_Click; + // + // bsRooms + // + bsRooms.DataSource = typeof(QtCNETAPI.Models.Room); + // + // tpUsers + // + tpUsers.Controls.Add(dgUsers); + tpUsers.ImageKey = "Users"; + tpUsers.Location = new Point(4, 24); + tpUsers.Name = "tpUsers"; + tpUsers.Padding = new Padding(3); + tpUsers.Size = new Size(553, 344); + tpUsers.TabIndex = 1; + tpUsers.Text = "Users"; + tpUsers.UseVisualStyleBackColor = true; + // + // dgUsers + // + dgUsers.AutoGenerateColumns = false; + dgUsers.BackgroundColor = Color.White; + dgUsers.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dgUsers.Columns.AddRange(new DataGridViewColumn[] { idDataGridViewTextBoxColumn1, usernameDataGridViewTextBoxColumn, profilePictureDataGridViewTextBoxColumn, bioDataGridViewTextBoxColumn, roleDataGridViewTextBoxColumn, dateOfBirthDataGridViewTextBoxColumn, createdAtDataGridViewTextBoxColumn1, lastLoginDataGridViewTextBoxColumn, statusDataGridViewTextBoxColumn, currencyAmountDataGridViewTextBoxColumn, profileCosmeticIdDataGridViewTextBoxColumn }); + dgUsers.DataSource = bsUsers; + dgUsers.Dock = DockStyle.Fill; + dgUsers.Location = new Point(3, 3); + dgUsers.Name = "dgUsers"; + dgUsers.ReadOnly = true; + dgUsers.Size = new Size(547, 338); + dgUsers.TabIndex = 0; + dgUsers.UserDeletingRow += dgUsers_UserDeletingRow; + // + // idDataGridViewTextBoxColumn1 + // + idDataGridViewTextBoxColumn1.DataPropertyName = "Id"; + idDataGridViewTextBoxColumn1.HeaderText = "Id"; + idDataGridViewTextBoxColumn1.Name = "idDataGridViewTextBoxColumn1"; + idDataGridViewTextBoxColumn1.ReadOnly = true; + // + // usernameDataGridViewTextBoxColumn + // + usernameDataGridViewTextBoxColumn.DataPropertyName = "Username"; + usernameDataGridViewTextBoxColumn.HeaderText = "Username"; + usernameDataGridViewTextBoxColumn.Name = "usernameDataGridViewTextBoxColumn"; + usernameDataGridViewTextBoxColumn.ReadOnly = true; + // + // profilePictureDataGridViewTextBoxColumn + // + profilePictureDataGridViewTextBoxColumn.DataPropertyName = "ProfilePicture"; + profilePictureDataGridViewTextBoxColumn.HeaderText = "ProfilePicture"; + profilePictureDataGridViewTextBoxColumn.Name = "profilePictureDataGridViewTextBoxColumn"; + profilePictureDataGridViewTextBoxColumn.ReadOnly = true; + // + // bioDataGridViewTextBoxColumn + // + bioDataGridViewTextBoxColumn.DataPropertyName = "Bio"; + bioDataGridViewTextBoxColumn.HeaderText = "Bio"; + bioDataGridViewTextBoxColumn.Name = "bioDataGridViewTextBoxColumn"; + bioDataGridViewTextBoxColumn.ReadOnly = true; + // + // roleDataGridViewTextBoxColumn + // + roleDataGridViewTextBoxColumn.DataPropertyName = "Role"; + roleDataGridViewTextBoxColumn.HeaderText = "Role"; + roleDataGridViewTextBoxColumn.Name = "roleDataGridViewTextBoxColumn"; + roleDataGridViewTextBoxColumn.ReadOnly = true; + // + // dateOfBirthDataGridViewTextBoxColumn + // + dateOfBirthDataGridViewTextBoxColumn.DataPropertyName = "DateOfBirth"; + dateOfBirthDataGridViewTextBoxColumn.HeaderText = "DateOfBirth"; + dateOfBirthDataGridViewTextBoxColumn.Name = "dateOfBirthDataGridViewTextBoxColumn"; + dateOfBirthDataGridViewTextBoxColumn.ReadOnly = true; + // + // createdAtDataGridViewTextBoxColumn1 + // + createdAtDataGridViewTextBoxColumn1.DataPropertyName = "CreatedAt"; + createdAtDataGridViewTextBoxColumn1.HeaderText = "CreatedAt"; + createdAtDataGridViewTextBoxColumn1.Name = "createdAtDataGridViewTextBoxColumn1"; + createdAtDataGridViewTextBoxColumn1.ReadOnly = true; + // + // lastLoginDataGridViewTextBoxColumn + // + lastLoginDataGridViewTextBoxColumn.DataPropertyName = "LastLogin"; + lastLoginDataGridViewTextBoxColumn.HeaderText = "LastLogin"; + lastLoginDataGridViewTextBoxColumn.Name = "lastLoginDataGridViewTextBoxColumn"; + lastLoginDataGridViewTextBoxColumn.ReadOnly = true; + // + // statusDataGridViewTextBoxColumn + // + statusDataGridViewTextBoxColumn.DataPropertyName = "Status"; + statusDataGridViewTextBoxColumn.HeaderText = "Status"; + statusDataGridViewTextBoxColumn.Name = "statusDataGridViewTextBoxColumn"; + statusDataGridViewTextBoxColumn.ReadOnly = true; + // + // currencyAmountDataGridViewTextBoxColumn + // + currencyAmountDataGridViewTextBoxColumn.DataPropertyName = "CurrencyAmount"; + currencyAmountDataGridViewTextBoxColumn.HeaderText = "CurrencyAmount"; + currencyAmountDataGridViewTextBoxColumn.Name = "currencyAmountDataGridViewTextBoxColumn"; + currencyAmountDataGridViewTextBoxColumn.ReadOnly = true; + // + // profileCosmeticIdDataGridViewTextBoxColumn + // + profileCosmeticIdDataGridViewTextBoxColumn.DataPropertyName = "ProfileCosmeticId"; + profileCosmeticIdDataGridViewTextBoxColumn.HeaderText = "ProfileCosmeticId"; + profileCosmeticIdDataGridViewTextBoxColumn.Name = "profileCosmeticIdDataGridViewTextBoxColumn"; + profileCosmeticIdDataGridViewTextBoxColumn.ReadOnly = true; + // + // bsUsers + // + bsUsers.DataSource = typeof(QtCNETAPI.Dtos.User.UserInformationDto); + // + // ilTabIcons + // + ilTabIcons.ColorDepth = ColorDepth.Depth32Bit; + ilTabIcons.ImageStream = (ImageListStreamer)resources.GetObject("ilTabIcons.ImageStream"); + ilTabIcons.TransparentColor = Color.Transparent; + ilTabIcons.Images.SetKeyName(0, "Contacts"); + ilTabIcons.Images.SetKeyName(1, "Rooms"); + ilTabIcons.Images.SetKeyName(2, "Users"); + ilTabIcons.Images.SetKeyName(3, "Games"); + ilTabIcons.Images.SetKeyName(4, "Store"); + // + // AdminPanelForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.DodgerBlue; + ClientSize = new Size(585, 450); + Controls.Add(tcMain); + Controls.Add(lblServerAdmin); + Controls.Add(pbLogo); + FormBorderStyle = FormBorderStyle.FixedSingle; + MaximizeBox = false; + MinimizeBox = false; + Name = "AdminPanelForm"; + StartPosition = FormStartPosition.CenterScreen; + Text = "QtC.NET Server Admin Panel"; + Load += AdminPanelForm_Load; + ((System.ComponentModel.ISupportInitialize)pbLogo).EndInit(); + tcMain.ResumeLayout(false); + tpRooms.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dgRooms).EndInit(); + cmsRoomAdd.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)bsRooms).EndInit(); + tpUsers.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dgUsers).EndInit(); + ((System.ComponentModel.ISupportInitialize)bsUsers).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private PictureBox pbLogo; + private Label lblServerAdmin; + private TabControl tcMain; + private TabPage tpRooms; + private TabPage tpUsers; + private ImageList ilTabIcons; + private DataGridView dgRooms; + private DataGridView dgUsers; + private ContextMenuStrip cmsRoomAdd; + private ToolStripMenuItem tsiAddRoom; + private DataGridViewTextBoxColumn idDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn nameDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn creatorIdDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn createdAtDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn userCountDataGridViewTextBoxColumn; + private BindingSource bsRooms; + private DataGridViewTextBoxColumn idDataGridViewTextBoxColumn1; + private DataGridViewTextBoxColumn usernameDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn profilePictureDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn bioDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn roleDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn dateOfBirthDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn createdAtDataGridViewTextBoxColumn1; + private DataGridViewTextBoxColumn lastLoginDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn statusDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn currencyAmountDataGridViewTextBoxColumn; + private DataGridViewTextBoxColumn profileCosmeticIdDataGridViewTextBoxColumn; + private BindingSource bsUsers; + } +} \ No newline at end of file diff --git a/qtcnet-client/Forms/AdminPanelForm.cs b/qtcnet-client/Forms/AdminPanelForm.cs new file mode 100644 index 0000000..25c4a2b --- /dev/null +++ b/qtcnet-client/Forms/AdminPanelForm.cs @@ -0,0 +1,106 @@ +using Krypton.Toolkit; +using QtCNETAPI.Models; +using QtCNETAPI.Services.ApiService; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace qtcnet_client.Forms +{ + public partial class AdminPanelForm : Form + { + private IApiService _apiService; + public AdminPanelForm(IApiService apiService) + { + _apiService = apiService; + InitializeComponent(); + } + + private async void AdminPanelForm_Load(object sender, EventArgs e) + { + // get data + var _roomData = await _apiService.GetAllRoomsAsync(); + var _userData = await _apiService.GetAllUsersAsync(); + + if (_roomData.Success && _roomData.Data != null) + bsRooms.DataSource = _roomData.Data; + + if (_userData.Success && _userData.Data != null) + bsUsers.DataSource = _userData.Data; + + dgUsers.Update(); + dgRooms.Update(); + } + + private async void tsiAddRoom_Click(object sender, EventArgs e) + { + // create a form to get room name + AddRoomForm _nameForm = new(); + var _result = _nameForm.ShowDialog(); + if (_result == DialogResult.OK) + { + // create the room and refresh room list + var now = DateTime.UtcNow; + var _apiRes = await _apiService.CreateRoomAsync(new() + { + Name = _nameForm.RoomName, + CreatedAt = now, + }); + + if (_apiRes.Success) + AdminPanelForm_Load(sender, e); // refresh data + } + } + + private async void dgRooms_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e) + { + if (dgRooms.CurrentCell?.Value is string roomId) + { + DialogResult _res = KryptonMessageBox.Show("Are You Sure You Want To Delete This Room?\n" + + "Deleting Rooms Also Kicks All Users In It Out.", "are you sure...?", + KryptonMessageBoxButtons.YesNo, KryptonMessageBoxIcon.Question); + + if (_res == DialogResult.Yes) + { + var _apiRes = await _apiService.DeleteRoomAsync(roomId); + if (_apiRes.Success) + AdminPanelForm_Load(sender, e); // refresh data + } + + e.Cancel = true; // cancel the local delete, refresh should get rid of it + } + } + + private async void dgUsers_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e) + { + if(dgUsers.CurrentCell?.Value is string userId) + { + if(_apiService.CurrentUser?.Id == userId) + { + KryptonMessageBox.Show("lol why would you delete yourself", "what"); + e.Cancel = true; + return; + } + + DialogResult _res = KryptonMessageBox.Show("Deleting Users Should Only Be Done As A Last Resort. Proper Moderation Features Are Coming Soon.\n" + + "Are You Sure?", "are you sure...?", + KryptonMessageBoxButtons.YesNo, KryptonMessageBoxIcon.Warning); + + if (_res == DialogResult.Yes) + { + // delete the user + var _apiRes = await _apiService.DeleteUserById(userId); + if(_apiRes.Success) + AdminPanelForm_Load(sender, e); // refresh data + } + + e.Cancel = true; // cancel the local delete, refresh should get rid of it + } + } + } +} diff --git a/qtcnet-client/Forms/AdminPanelForm.resx b/qtcnet-client/Forms/AdminPanelForm.resx new file mode 100644 index 0000000..aecfd58 --- /dev/null +++ b/qtcnet-client/Forms/AdminPanelForm.resx @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 120, 21 + + + 250, 21 + + + 353, 21 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs + LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA2hgAAAJNU0Z0AUkBTAIBAQUB + AAFwAQEBcAEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa + AAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8DVQGsAzABS8wAAzsB + YgNdAcUDaAH0AZ8BZQExAf8BlwFTARcB/wGWAUsBCQH/AZMBRgEBAf8BjAFDAQMB/wF9AUABCwH/AWsB + QAEaAf8BbgFQATYB/wNoAfADWgG3AzQBVMQAAzUBVQNdAccCbgFaAfUBuAFlARsB/wG5AVgBAgH/AckB + XwEAAf8B2AFlAQAB/wHcAWcBAAH/AdYBZAEAAf8BwwFcAQAB/wGiAUwBAAH/AXwBOwEDAf8BbgFGASMB + /wNoAfADWgG3AzABSsAAA1wBxAJ8AVwB+AHUAXEBGAH/AdcBZQEAAf8B5QFsAQAB/wHyAXIBAAH/AfoB + dQEAAf8B/AF2AQAB/wH6AXYBAAH/AfMBcgEAAf8B4gFrAQAB/wG9AVkBAAH/AYcBQAEAAf8BcQFIASMB + /wNoAfADVgGrwAAB/gHdAcEB/wHtAYABIAH/Ae0BcQECAf8B8wFzAQAB/wH6AXYBAAH/Af4BeAEAAv8B + ewEIAv8BiAEnAv8BogFTAf8B/gGBARcB/wH8AXgBBAH/AewBbwEAAf8BwQFbAQAB/wGGAUEBAwH/AXgB + VgE2Af8DYwHfwAAB/wGyAW8B/wH9AYABEQH/AfwBdwEBAf8B/QF3AQAC/wF4AQAC/wF/AQ8C/wGSATsC + /wGzAYMC/wHqAeAC/wGQAT0C/wF7AQoB/wH8AXcBAAH/AeUBbAEAAf8BsQFUAQAB/wGEAUsBGgH/A2MB + 38AAAf8BmgFCAv8BgwEVAf8B/gF6AQQC/wF4AQAC/wF4AQAC/wGVAT8C/wHKAa4C/wHaAcYC/wHtAeUC + /wGWAUkC/wF8AQ0B/wH+AXgBAAH/AfQBcwEAAf8B0AFiAQAB/wGaAU4BCgH/AWMCXQHfwAAB/wGVATcC + /wGJAR8C/wF9AQgC/wF4AQAC/wF4AQAC/wGoAVwC/wHgAc0C/wGhAWYC/wHYAcUC/wG5AZQC/wGHASMC + /wF4AQAB/wH7AXYBAAH/AeIBagEAAf8BrwFUAQMB/wFjAl0B38AAAf8BoAFJAv8BkgExAv8BgQERAv8B + eQEDAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BwAGfAv8BiQEnAv8BeAEAAf8B/gF4AQAB + /wHsAW8BAAH/Ab8BWgECAf8BYwJdAd/AAAH/AbMBbwL/AZ4BSAL/AYgBHgL/AXwBBwL/AXgBAAL/AZgB + QwL/Ac4BtAL/AdcBwAL/AeoB4AL/AZ0BVwL/AX4BEQL/AXgBAAL/AXgBAAH/AfABcQEAAf8BywFkAQkB + /wFjAWEBXQHfwAAB/wHMAZ8C/wGsAWMC/wGTATMC/wGBAREC/wF5AQIC/wGCARYC/wGaAUsC/wGuAXgC + /wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8CYwFdAd/AAAH/AekB + 1QL/AbwBgQL/AaQBVAL/AY4BKgL/AX8BDQL/AXkBAgL/AXsBCQL/AYIBHQL/AXgBAAL/AXgBAAL/AXgB + AQL/AXoBBAL/AXoBAwH/AfMBdAEDAf8B4gGEATIB/wNjAd/AAANeAdIBdwJqAfkB/wG7AX0C/wGjAVIC + /wGQASwC/wGCARMC/wF9AQgC/wF6AQQC/wF5AQIC/wF6AQQC/wF9AQkC/wGAAQ8C/wF/AQ0B/wH4AYYB + IAH/A2gB9ANYAbjAAAM8AWYDYwHVA3wB+AH/Ab4BhQL/AaoBXwL/AZkBPgL/AY0BJwL/AYYBGgL/AYMB + FQL/AYUBGQL/AYoBIgL/AY0BKAL/AZMBMwH/Am4BaAH1A10BxQM2AVnEAANCAXIDYwHVAXcBbQFqAfkB + /wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC/wGnAVgB/wN8AfgDXQHHAzsB + YswAAzwBZQNeAdIB/wHvAeAC/wHcAbwC/wHNAZ8C/wHBAYoC/wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB + /wNcAcQDNQFVyAADZwHvAmcBWQHvAWcBXQFZAe8BZwFbAVkB7wFnAVsBWQHvAWcCWQHvAWcBZAFZAe8D + ZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe84AAMzAVEDbgH1AwcBCQMqAT8DRQF8A1kB + uwNjAd8DaAH0A4AB/gOBAf8DgQH/A4EB/wOAAf4DaAH0A2MB3wNaAboDRAF6AycBOggAAzcBWgNYAbgD + YwHfAmMBXQHfAWICXQHfA10B3wNdAd8BYQJdAd8DYwHfA2MB3wNVAawDMAFLCAAD+AH/AbkBlQE8Af8B + gwF9AW4B/wGEAX0BbAH/AaoBhAEnAf8BrAF7AQAB/wHMAbwBlAH/A34B/wN+Af8DfgH/A34B/wN+Af8D + fgH/A34B/wN+Af8DjgH/OAADEgEYAz8BbQNDAXUDXQHMA3wB+AOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB + /wOBAf8DgQH/A4EB/wOBAf8DgQH/A3wB+ANUAagEAAM7AWIDXQHFA2gB9AGfAWUBMQH/AZcBUwEXAf8B + lgFLAQkB/wGTAUYBAQH/AYwBQwEDAf8BfQFAAQsB/wFrAUABGgH/AW4BUAE2Af8DaAHwA1oBtwM0AVQE + AAT/AZcBiwFtAf8CgQGAAf8BggGBAYAB/wGYAYgBYAH/AcoBkAEAAf8B3QHMAZ8B/wOBAf8DgQH/A4EB + /wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/zQAA18B0wM9AWcEAANqAe0DfQH6A4EB/wOBAf8DgQH/A4EB + /wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8DNQFVA10BxwJuAVoB9QG4AWUB + GwH/AbkBWAECAf8ByQFfAQAB/wHYAWUBAAH/AdwBZwEAAf8B1gFkAQAB/wHDAVwBAAH/AaIBTAEAAf8B + fAE7AQMB/wFuAUYBIwH/A2gB8ANaAbcDMAFKBP8BhgGEAX0B/wOBAf8DgQH/AYcBgwF6Af8BzwGUAQAB + /wHeAcwBnwH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8DvAH/NAADWgHCAzQBUwQAA2MB + 3wNuAfUDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A1UB + rwNcAcQCfAFcAfgB1AFxARgB/wHXAWUBAAH/AeUBbAEAAf8B8gFyAQAB/wH6AXUBAAH/AfwBdgEAAf8B + +gF2AQAB/wHzAXIBAAH/AeIBawEAAf8BvQFZAQAB/wGHAUABAAH/AXEBSAEjAf8DaAHwA1YBqwT/AYsB + hgF6Af8DgQH/A4EB/wGOAYYBcQH/Ac8BlAEAAf8B3gHMAZ8h/wPKAf8QAAMNAREDPwFsA1MBpwFcAlkB + vgFYAlYBswFIAkcBgwMhATAEAANvAfMDOgFgCAADNgFYA1sBwANuAfUDgQH/A4EB/wOBAf8DgQH/A4EB + /wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNoAfQDUgGkAf4B3QHBAf8B7QGAASAB/wHtAXEBAgH/AfMB + cwEAAf8B+gF2AQAB/wH+AXgBAAL/AXsBCAL/AYgBJwL/AaIBUwH/Af4BgQEXAf8B/AF4AQQB/wHsAW8B + AAH/AcEBWwEAAf8BhgFBAQMB/wF4AVYBNgH/A2MB3wT/AawBlgFgAf8BgwGCAX8B/wGFAYIBfQH/AbMB + kwFEAf8BzwGUAQAB/wHeAcwBnwH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DqAH/CAAD + GgEkA1IBoAJjAUgB9gGiAXMBAAH/Aa4BfAEAAf8BsAF9AQAB/wGoAXgBAAH/AZUBagEAAf8CgAEuAf4B + XAJZAcYDVwG1AxYBHggAAwIBAwMaASMDOAFcA1QBqANiAdcDcAHxA4AB/gOBAf8DgQH/A4EB/wOBAf0D + aAHwA2EB1ANTAaUDNgFZAxgBIAH/AbIBbwH/Af0BgAERAf8B/AF3AQEB/wH9AXcBAAL/AXgBAAL/AX8B + DwL/AZIBOwL/AbMBgwL/AeoB4AL/AZABPQL/AXsBCgH/AfwBdwEAAf8B5QFsAQAB/wGxAVQBAAH/AYQB + SwEaAf8DYwHfBP8B2QGqATcB/wG+AZgBOAH/AcABmAE2Af8B3AGiARQB/wHPAZQBAAH/Ad4BzAGfAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8EAAMgAS0CYwFaAekBvwGIAQAB/wHNAZUB + CgH/AbABiAEnAf8BcwFkAT8B/wFNAUsBRwH/AU4BSwFCAf8BZgFXATEB/wGaAXQBFwH/AaQBdgEDAf8B + cAFPAQAB/wNDAXYEAUQAAf8BmgFCAv8BgwEVAf8B/gF6AQQC/wF4AQAC/wF4AQAC/wGVAT8C/wHKAa4C + /wHaAcYC/wHtAeUC/wGWAUkC/wF8AQ0B/wH+AXgBAAH/AfQBcwEAAf8B0AFiAQAB/wGaAU4BCgH/AWMC + XQHfBP8B4QGuATEB/wG9AZcBOwH/AcABmAE1Af8B4wGlAQoB/wHPAZQBAAH/Ad4BzAGfAf8DwAH/A8AB + /wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wOvAf8EAAJjAVoB6QHZAZoBAAH/AdoBowEcAf8CjgGMAf8D + igH/A5cB/wObAf8DkQH/A3QB/wNIAf8BQwFCAT8B/wG1AYMBBwH/AXoBVwEAAf8DNgFYDAADAgEDAwgB + CgMhAS8DMQFOAz0BaANDAXYDRAF6A0MBdQM9AWcDMQFNAyABLgMHAQkEAgQAAf8BlQE3Av8BiQEfAv8B + fQEIAv8BeAEAAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BuQGUAv8BhwEjAv8BeAEAAf8B + +wF2AQAB/wHiAWoBAAH/Aa8BVAEDAf8BYwJdAd8E/wG7AZ0BUwH/AYgBhAF5Af8BjAGFAXQB/wHEAZkB + MAH/Ac8BlAEAAf8B3gHMAZ8h/wPKAf8DQwF2AekBpwECAf8B6QGrARIB/wHQAcoBuwH/A6wB/wNdAf8D + TAH/A0sB/wNEAf8DDwH/A7MB/wNmAf8BVAFMAToB/wGuAX0BBAH/A10BzAgAAxMBGgM5AV0DWQG8A2QB + 2wNqAe0DYwH2A18B+wOBAf0DXwH7A2MB9gNlAewDYwHaA1oBugM4AVwDEwEaAf8BoAFJAv8BkgExAv8B + gQERAv8BeQEDAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BwAGfAv8BiQEnAv8BeAEAAf8B + /gF4AQAB/wHsAW8BAAH/Ab8BWgECAf8BYwJdAd8E/wGUAYoBcwH/A4EB/wOBAf8BmgGKAWMB/wHPAZQB + AAH/Ad4BzAGfAf8D0AH/A9AB/wPQAf8D0AH/A9AB/wPQAf8D0AH/A9AB/wO1Af8CagFhAeYB7QGtARAB + /wH0AdABdgH/A/oB/wP6Af8DfQH/A38B/wOAAf8DgAH/A34B/wOEAf8DuwH/A2oB/wGoAYABHAH/AmMB + SAH2BAADGgEkA1YBrgNoAfQDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB + /wNrAfIDUgGhAf8BswFvAv8BngFIAv8BiAEeAv8BfAEHAv8BeAEAAv8BmAFDAv8BzgG0Av8B1wHAAv8B + 6gHgAv8BnQFXAv8BfgERAv8BeAEAAv8BeAEAAf8B8AFxAQAB/wHLAWQBCQH/AWMBYQFdAd8E/wGGAYMB + fgH/A4EB/wOBAf8BhgGDAXsB/wHPAZQBAAH/Ad4BzAGfAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOTAf8DYgHuAe8BtAEhAf8B9wHcAZcJ/wORAf8DiAH/A4cB/wOHAf8DgQH/A1cB/wPmAf8D + owH/AbYBkQE2Af8CagFBAfkEAANXAbIDZQHnA4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8B/wHMAZ8C/wGsAWMC/wGTATMC/wGBAREC/wF5AQIC/wGCARYC + /wGaAUsC/wGuAXgC/wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8C + YwFdAd8E/wGLAYYBeQH/A4EB/wOBAf8BjgGGAXEB/wHPAZQBAAH/Ad4BzAGfAf8DoQH/A6EB/wOhAf8D + oQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DSwGNAfABvgE/Af8B9AHNAWwh/wP7Af8D0AH/AdcBpwExAf8C + YQFdAdEEAANvAfMDXwH7A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wNVAa8B/wHpAdUC/wG8AYEC/wGkAVQC/wGOASoC/wF/AQ0C/wF5AQIC/wF7AQkC/wGCAR0C + /wF4AQAC/wF4AQAC/wF4AQEC/wF6AQQC/wF6AQMB/wHzAXQBAwH/AeIBhAEyAf8DYwHfBP8BpwGUAWcB + /wGDAYIBfwH/AYUBgwF+Af8BsAGUAU4B/wHTAZcBAgH/AeABzgGfAf8D5wH/A+cB/wPnAf8D5wH/A+cB + /wPnAf8D5wH/A+cB/wPAAf8DBwEJA2IB7gHxAbwBOwH/AfoB6gHCAf8D3AH/A3cB/wNoAf8DaAH/A2gB + /wMyCf8B8gHdAakB/wHqAakBCAH/Az4BagQAA2QB2wNoAfQDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A1UBrwNeAdIBdwJqAfkB/wG7AX0C/wGjAVIC/wGQASwC + /wGCARMC/wF9AQgC/wF6AQQC/wF5AQIC/wF6AQQC/wF9AQkC/wGAAQ8C/wF/AQ0B/wH4AYYBIAH/A2gB + 9ANYAbgE/wHXAbEBUgH/AZoBjwF0Af8BoAGSAW0B/wHgAa8BNwH/AecBqQEQAf8B6wHVAaAB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/wQAAzMBUQNoAfAB8wHGAVgB/wH6AecBuBb/Af4B + +wH/AfkB4gGqAf8B7wG4AS0B/wNOAZYEAgQAAzwBZANfAckDfQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DfQH6A1UBqgM8AWYDYwHVA3wB+AH/Ab4BhQL/AaoBXwL/AZkB + PgL/AY0BJwL/AYYBGgL/AYMBFQL/AYUBGQL/AYoBIgL/AY0BKAL/AZMBMwH/Am4BaAH1A10BxQM2AVkE + /wH0Ac0BbAH/AfQBywFmAf8B9AHLAWUB/wH0AcsBZQH/AfEBwQFJAf8B+QHjAawB/wOJAf8DiQH/A4kB + /wOJAf8DiQH/A4kB/wOJAf8DiQH/A5oB/wgAAyIBMQNfAckCfQFnAfoB8wHKAWUB/wH5AeEBpgH/AfsB + 7QHMAf8B+wHsAcgB/wH4Ad0BmwH/AZYBgAF/Af4CZQFeAeIDPQFoBAEIAAMGAQgDMQFMA1ABmwNlAewD + fQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN9AfoDagHtA1ABmwMvAUkEAANCAXIDYwHVAXcB + bQFqAfkB/wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC/wGnAVgB/wN8AfgD + XQHHAzsBYgQAQP8QAAMPARMDRwGCA2QB2wJ+AW8B/ANnAeoDVAGoAygBOxwAAwUBBgMSARcDOgFgA1EB + nwNfAdMDZwHvA2MB9gNiAe4DXgHSA1EBngM5AV8DEQEWAwUBBgwAAzwBZQNeAdIB/wHvAeAC/wHcAbwC + /wHNAZ8C/wHBAYoC/wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAABQgFNAT4HAAE+AwAB + KAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAcABAwYAAYABAWYAAYABAQYAAcABAwgAAf8B/AIAAcAB + AwIAAf8B/AIAAYABAQIAAf8B+QYAAf8B+QYAAfABEwYAAcABAwYAAYABAQL/BAABgAEBAcABAQUAAQEB + gAYAAQEHAAEBBwABAQcAAQEGAAGAAQEGAAHAAQMCAAGAAQECAAHwAR8BwAEBAcABAws= + + + \ No newline at end of file diff --git a/qtcnet-client/Forms/MainForm.cs b/qtcnet-client/Forms/MainForm.cs index fa86b5d..8472ed7 100644 --- a/qtcnet-client/Forms/MainForm.cs +++ b/qtcnet-client/Forms/MainForm.cs @@ -45,6 +45,7 @@ namespace qtcnet_client private readonly UpdateService _updateService; private readonly AudioService _audioService; + private bool IsAdmin = false; public MainForm(IApiService apiService, IGatewayService gatewayService, LoggingService loggingService, @@ -643,6 +644,27 @@ namespace qtcnet_client Controls.Add(CurrentProfileControl); Controls.Add(MainTabControl); + if(_apiService.CurrentUser.Role == "Admin") + { + // create a link label that opens the admin panel when clicked + LinkLabel llblAdminPanel = new() + { + Location = new(325, 9), + Text = "Admin Panel", + BackColor = Color.Transparent, + }; + + llblAdminPanel.Click += (sender, e) => + { + // open the admin panel + AdminPanelForm adminPanelForm = new(_apiService); + adminPanelForm.ShowDialog(); + adminPanelForm.Dispose(); + }; + + Controls.Add(llblAdminPanel); + } + ResumeLayout(true); // minimize main window if start minimized is on diff --git a/qtcnet-client/Properties/DataSources/QtCNETAPI.Dtos.User.UserInformationDto.datasource b/qtcnet-client/Properties/DataSources/QtCNETAPI.Dtos.User.UserInformationDto.datasource new file mode 100644 index 0000000..d812ff6 --- /dev/null +++ b/qtcnet-client/Properties/DataSources/QtCNETAPI.Dtos.User.UserInformationDto.datasource @@ -0,0 +1,10 @@ + + + + QtCNETAPI.Dtos.User.UserInformationDto, QtCNETAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/qtcnet-client/Properties/DataSources/QtCNETAPI.Models.Room.datasource b/qtcnet-client/Properties/DataSources/QtCNETAPI.Models.Room.datasource new file mode 100644 index 0000000..63da3c5 --- /dev/null +++ b/qtcnet-client/Properties/DataSources/QtCNETAPI.Models.Room.datasource @@ -0,0 +1,10 @@ + + + + QtCNETAPI.Models.Room, QtCNETAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file