Skip to content

Commit d8c35b0

Browse files
authored
admin2: refactor ban functionality (resolves #151) (#437)
* Rewrite UI, enable basic player ban functionality * Hacky fix for server error Requires further investigation & future refactoring * Addendum to previous commit * Add button to create new ban from bans tab * Fix sync of new bans * Fix client error when banning offline player * Fix UI bugs * Reset duration combobox on ban form reset * Fix ban serial validation * Reduce ban widget padding by 50% * Add ability to define custom ban duration * Remove extra debug output * Mask player identifiers in "streamer mode" * Refactor server code & fix unbans * Remove unimplemented commands * Add ban details widget * Add to previous commit * Remove community and temp column from ban list * Fix missing meta tag
1 parent d7b0202 commit d8c35b0

File tree

12 files changed

+480
-188
lines changed

12 files changed

+480
-188
lines changed

[admin]/admin2/admin_definitions.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ enum(
3737
"EVENT_RESOURCE",
3838
"EVENT_SERVER",
3939
"EVENT_MESSAGE",
40-
"EVENT_BANS",
40+
"EVENT_BAN",
4141
"EVENT_NETWORK",
4242
"EVENT_PROXY",
4343
"EVENT_ADMIN_CHAT",
@@ -62,6 +62,7 @@ enum(
6262
"SYNC_RESOURCE",
6363
"SYNC_ADMINS",
6464
"SYNC_SERVER",
65+
"SYNC_BAN",
6566
"SYNC_BANS",
6667
"SYNC_MESSAGES"
6768
},

[admin]/admin2/client/main/admin_bans.lua

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@ function aBansTab.Create(tab)
2121
guiGridListAddColumn(aBansTab.BansList, "Name", 0.22)
2222
guiGridListAddColumn(aBansTab.BansList, "IP", 0.25)
2323
guiGridListAddColumn(aBansTab.BansList, "Serial", 0.25)
24-
guiGridListAddColumn(aBansTab.BansList, "Username", 0.25)
25-
guiGridListAddColumn(aBansTab.BansList, "Date", 0.17)
24+
guiGridListAddColumn(aBansTab.BansList, "Expires", 0.17)
2625
guiGridListAddColumn(aBansTab.BansList, "Banned by", 0.22)
27-
guiGridListAddColumn(aBansTab.BansList, "Temporary", 0.22)
2826
aBansTab.Details = guiCreateButton(0.82, 0.07, 0.17, 0.04, "Details", true, aBansTab.Tab)
29-
aBansTab.Unban = guiCreateButton(0.82, 0.12, 0.17, 0.04, "Unban", true, aBansTab.Tab, "unban")
27+
aBansTab.Ban = guiCreateButton(0.82, 0.12, 0.17, 0.04, "Add ban", true, aBansTab.Tab, "ban")
28+
aBansTab.Unban = guiCreateButton(0.82, 0.17, 0.17, 0.04, "Unban", true, aBansTab.Tab, "unban")
3029
aBansTab.BansRefresh = guiCreateButton(0.82, 0.94, 0.17, 0.04, "Refresh", true, aBansTab.Tab, "listbans")
3130

3231
addEventHandler("onClientGUIChanged", aBansTab.BansListSearch, aBansTab.onBansListSearch)
@@ -41,26 +40,21 @@ function aBansTab.onClientClick(button)
4140
if (button == "left") then
4241
if (source == aBansTab.Details) then
4342
if (guiGridListGetSelectedItem(aBansTab.BansList) == -1) then
44-
messageBox("No ban row selected!", MB_ERROR, MB_OK)
43+
messageBox("No ban selected!", MB_ERROR, MB_OK)
4544
else
46-
local ip = guiGridListGetItemText(aBansTab.BansList, guiGridListGetSelectedItem(aBansTab.BansList), 2)
47-
aBanDetails(ip)
45+
local banID =
46+
guiGridListGetItemData(aBansTab.BansList, guiGridListGetSelectedItem(aBansTab.BansList), 1)
47+
aBanDetails.Show(banID, false)
4848
end
49+
elseif source == aBansTab.Ban then
50+
aBan.Show()
4951
elseif (source == aBansTab.Unban) then
5052
if (guiGridListGetSelectedItem(aBansTab.BansList) == -1) then
51-
messageBox("No ban row selected!", MB_ERROR, MB_OK)
53+
messageBox("No ban selected!", MB_ERROR, MB_OK)
5254
else
53-
local selected =
54-
guiGridListGetItemText(aBansTab.BansList, guiGridListGetSelectedItem(aBansTab.BansList), 2)
55-
if (aBans["Serial"][selected]) then
56-
if (messageBox("Unban Serial " .. selected .. "?", MB_QUESTION, MB_YESNO ) == true) then
57-
triggerServerEvent ( "aBans", localPlayer, "unbanserial", selected )
58-
end
59-
else
60-
if (messageBox("Unban IP " .. selected .. "?", MB_QUESTION, MB_YESNO) == true) then
61-
triggerServerEvent ( "aBans", localPlayer, "unbanip", selected )
62-
end
63-
end
55+
local banID =
56+
guiGridListGetItemData(aBansTab.BansList, guiGridListGetSelectedItem(aBansTab.BansList), 1)
57+
aBanDetails.Show(banID, true)
6458
end
6559
elseif (source == aBansTab.BansRefresh) then
6660
guiGridListClear(aBansTab.BansList)
@@ -80,7 +74,6 @@ function aBansTab.onBansListSearch()
8074
((ban.nick and string.find(string.upper(ban.nick), text)) or
8175
(ban.ip and string.find(string.upper(ban.ip), text)) or
8276
(ban.serial and string.find(string.upper(ban.serial), text)) or
83-
(ban.username and string.find(string.upper(ban.username), text)) or
8477
(ban.banner and string.find(string.upper(ban.banner), text)))
8578
then
8679
aBansTab.AddRow(id, ban)
@@ -117,29 +110,20 @@ function aBansTab.AddRow(id, data)
117110
guiGridListSetItemText(list, row, 1, data.nick or "Unknown", false, false)
118111
guiGridListSetItemText(list, row, 2, data.ip or "", false, false)
119112
guiGridListSetItemText(list, row, 3, data.serial or "", false, false)
120-
guiGridListSetItemText(list, row, 4, data.username or "", false, false)
121-
if (data.time) then
122-
local time = getRealTime(data.time)
123-
guiGridListSetItemText(
124-
list,
125-
row,
126-
5,
127-
time.monthday .. " " .. getMonthName(time.month) .. " " .. (1900 + time.year),
128-
false,
129-
false
130-
)
113+
if (data.unban) then
114+
guiGridListSetItemText(list, row, 4, formatDate("m/d/y h:m", nil, data.unban), false, false)
131115
else
132-
guiGridListSetItemText(list, row, 5, "", false, false)
116+
guiGridListSetItemText(list, row, 4, "Never", false, false)
133117
end
134-
guiGridListSetItemText(list, row, 6, data.banner or "", false, false)
135-
guiGridListSetItemText(list, row, 7, iif(data.unban, "Yes", "No"), false, false)
118+
guiGridListSetItemText(list, row, 5, data.banner or "", false, false)
136119

137120
guiGridListSetItemData(list, row, 1, id)
138121
end
139122

140123
function aBansTab.DeleteRow(id)
141124
local list = aBansTab.BansList
142-
for i = 1, guiGridListGetRowCount(list) do
125+
-- GridList row ids start at zero, not one
126+
for i = 0, guiGridListGetRowCount(list) do
143127
local data = guiGridListGetItemData(list, i, 1)
144128
if (data == id) then
145129
guiGridListRemoveRow(list, i)

[admin]/admin2/client/main/admin_players.lua

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,7 @@ function aPlayersTab.onClientClick(button)
168168
triggerServerEvent("aPlayer", localPlayer, player, "kick", reason)
169169
end
170170
elseif (source == aPlayersTab.Ban) then
171-
local reason = inputBox("Ban player " .. name, "Enter the ban reason")
172-
if (reason) then
173-
triggerServerEvent("aPlayer", localPlayer, player, "ban", reason)
174-
end
171+
aBan.Show(player)
175172
elseif (source == aPlayersTab.Slap) then
176173
triggerServerEvent("aPlayer", localPlayer, player, "slap",
177174
guiComboBoxGetItemText(aPlayersTab.SlapOptions, guiComboBoxGetSelected(aPlayersTab.SlapOptions))

0 commit comments

Comments
 (0)