Skip to content

Commit

Permalink
admin2: fixed /report message viewer widget (#429)
Browse files Browse the repository at this point in the history
* admin2: fixed /report message viewer

messages can now be viewed and deleted correctly

messages no longer create copies of themselves if you restart admin2

formated stored date to be more readable

other minor adjustments and fixes

still to do:

update number of read/unread messages on button in players tab

figure out a better way to delete messages, that ensures the correct message will be deleted, no matter what

* admin2: ensure correct message deletion; sync message count

added extra checks to make sure no unintended message deletions occur

sync message count to admins only if the count changes

* admin2: removed admin_message.lua

admin_messages.lua (with an s) is now fully independent, leaving admin_message.lua (without an s) with no purpose to exist

* admin2: replaced not (x == y) with x ~= y

* Minor tweaks to UI size

Adjusts message widget size to make it larger and allow the full date & time to be visible in the gridlist. Also adjusts the size of the main window so it fits a 800x600 screen.

---------

Co-authored-by: John Lillis <johnmichaelffs@gmail.com>
  • Loading branch information
Dark-Dragon and jlillis committed Jul 3, 2023
1 parent 25dcc4c commit 6dbdf2c
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 98 deletions.
2 changes: 1 addition & 1 deletion [admin]/admin2/client/main/admin.lua
Expand Up @@ -41,7 +41,7 @@ addEventHandler(
function aAdminMain.Open()
if (aAdminMain.Form == nil) then
local x, y = guiGetScreenSize()
aAdminMain.Form = guiCreateWindow(x / 2 - 372, y / 2 - 312, 744, 624, "Admin Menu - v" .. _version, false)
aAdminMain.Form = guiCreateWindow(x / 2 - 375, y / 2 - 300, 750, 600, "Admin Menu - v" .. _version, false)
guiSetText(aAdminMain.Form, "Admin Menu - v" .. _version)
guiCreateLabel(0.75, 0.05, 0.45, 0.04, "Admin Panel by lil_Toady", true, aAdminMain.Form)
aAdminMain.Panel = guiCreateTabPanel(0.01, 0.05, 0.98, 0.95, true, aAdminMain.Form)
Expand Down
64 changes: 0 additions & 64 deletions [admin]/admin2/client/widgets/admin_message.lua

This file was deleted.

77 changes: 53 additions & 24 deletions [admin]/admin2/client/widgets/admin_messages.lua
Expand Up @@ -12,24 +12,27 @@ aMessages = {
Messages = {}
}
addEvent("aMessage", true)
function aMessages.Open()
if (not aMessages.Form) then
local x, y = guiGetScreenSize()
aMessages.Form = guiCreateWindow(x / 2 - 250, y / 2 - 200, 500, 400, "View Messages", false)
aMessages.Form = guiCreateWindow(x / 2 - 350, y / 2 - 300, 700, 600, "View Messages", false)
aMessages.List = guiCreateGridList(0.02, 0.07, 0.30, 0.83, true, aMessages.Form)
aMessages.List = guiCreateGridList(0.02, 0.07, 0.35, 0.83, true, aMessages.Form)
guiGridListSetSortingEnabled(aMessages.List, false)
guiGridListAddColumn(aMessages.List, "Subject", 0.60)
guiGridListAddColumn(aMessages.List, "Date", 0.28)
aMessages.Delete = guiCreateButton(0.84, 0.07, 0.15, 0.055, "Delete", true, aMessages.Form)
aMessages.Refresh = guiCreateButton(0.02, 0.92, 0.30, 0.055, "Refresh", true, aMessages.Form)
aMessages.Refresh = guiCreateButton(0.02, 0.92, 0.35, 0.055, "Refresh", true, aMessages.Form)
aMessages.Exit = guiCreateButton(0.84, 0.92, 0.15, 0.055, "Close", true, aMessages.Form)
aMessages.Author = guiCreateLabel(0.36, 0.10, 0.50, 0.54, "Author: -", true, aMessages.Form)
aMessages.Subject = guiCreateLabel(0.36, 0.15, 0.50, 0.54, "Subject: -", true, aMessages.Form)
aMessages.Category = guiCreateLabel(0.36, 0.20, 0.50, 0.54, "Category: -", true, aMessages.Form)
aMessages.Date = guiCreateLabel(0.36, 0.25, 0.50, 0.54, "Date: -", true, aMessages.Form)
aMessages.Text = guiCreateMemo(0.36, 0.30, 0.59, 0.60, "", true, aMessages.Form)
aMessages.Author = guiCreateLabel(0.41, 0.10, 0.55, 0.54, "Author: -", true, aMessages.Form)
aMessages.Subject = guiCreateLabel(0.41, 0.15, 0.55, 0.54, "Subject: -", true, aMessages.Form)
aMessages.Category = guiCreateLabel(0.41, 0.20, 0.55, 0.54, "Category: -", true, aMessages.Form)
aMessages.Date = guiCreateLabel(0.41, 0.25, 0.55, 0.54, "Date: -", true, aMessages.Form)
aMessages.Text = guiCreateMemo(0.41, 0.30, 0.64, 0.60, "", true, aMessages.Form)
guiMemoSetReadOnly(aMessages.Text, true)
--Register With Admin Form
aRegister("Messages", aMessages.Form, aMessages.Open, aMessages.Close)
Expand Down Expand Up @@ -67,27 +70,49 @@ function aMessages.onSync(action, data)
message.id = id
table.insert(storage[message.author], message)
end
aMessages.Messages = storage
aMessages.Messages = data
local list = aMessages.List
local id = 1
guiGridListClear(aMessages.List)
local selected = guiGridListGetSelectedItem(list)
guiGridListClear(list)
for user, messages in pairs(storage) do
local row = guiGridListAddRow(list)
guiGridListSetItemText(list, row, 1, tostring(user), true, false)
for i, message in ipairs(messages) do
local row2 = guiGridListAddRow(list)
guiGridListSetItemText(list, row2, 1, message.subject, false, false)
guiGridListSetItemText(list, row2, 2, message.time, false, false)
row = guiGridListAddRow(list)
guiGridListSetItemText(list, row, 1, message.subject, false, false)
guiGridListSetItemData(list, row, 1, message.id)
guiGridListSetItemText(list, row, 2, message.time, false, false)
if (not message.read) then
guiGridListSetItemColor(list, row2, 1, 255, 50, 50)
guiGridListSetItemColor(list, row2, 2, 255, 50, 50)
guiGridListSetItemColor(list, row, 1, 255, 50, 50)
guiGridListSetItemColor(list, row, 2, 255, 50, 50)
end
id = id + 1
end
end
guiGridListSetSelectedItem(list, selected, 1)
end
end
function aMessages.View(id)
if (id) then
local message = aMessages.Messages[id]
guiSetText(aMessages.Author, "Author: "..message.author)
guiSetText(aMessages.Subject, "Subject: "..message.subject)
guiSetText(aMessages.Category, "Category: "..message.category)
guiSetText(aMessages.Date, "Date: "..message.time)
guiSetText(aMessages.Text, message.text)
if (not message.read) then
triggerServerEvent("aMessage", localPlayer, "read", id)
end
else
guiSetText(aMessages.Author, "Author: -")
guiSetText(aMessages.Subject, "Subject: -")
guiSetText(aMessages.Category, "Category: -")
guiSetText(aMessages.Date, "Date: -")
guiSetText(aMessages.Text, "")
end
end
Expand All @@ -97,21 +122,25 @@ function aMessages.onClick(button)
aMessages.Close()
elseif (source == aMessages.Refresh) then
triggerServerEvent("aMessage", localPlayer, "get")
elseif (source == aMessages.Read) then
elseif (source == aMessages.List) then
local row = guiGridListGetSelectedItem(aMessages.List)
if (row == -1) then
messageBox("No message selected!", MB_WARNING, MB_OK)
aMessages.View(false)
else
local id = guiGridListGetItemText(aMessages.List, row, 1)
aViewMessage(tonumber(id))
local id = guiGridListGetItemData(aMessages.List, row, 1)
aMessages.View(id)
end
elseif (source == aMessages.Delete) then
local row = guiGridListGetSelectedItem(aMessages.List)
if (row == -1) then
messageBox("No message selected!", MB_WARNING, MB_OK)
else
local id = guiGridListGetItemText(aMessages.List, row, 1)
triggerServerEvent("aMessage", localPlayer, "delete", tonumber(id))
local id = guiGridListGetItemData(aMessages.List, row, 1)
local confirm = messageBox("Are you sure you want to delete this message?", MB_QUESTION, MB_YESNO)
if (confirm) then
aMessages.View(false)
triggerServerEvent("aMessage", localPlayer, "delete", {id, aMessages.Messages[id]})
end
end
end
end
Expand Down
1 change: 0 additions & 1 deletion [admin]/admin2/meta.xml
Expand Up @@ -56,7 +56,6 @@
<script src="client/widgets/admin_performance.lua" type="client" />
<script src="client/widgets/admin_permissions.lua" type="client" />
<script src="client/widgets/admin_messages.lua" type="client" />
<script src="client/widgets/admin_message.lua" type="client" />
<script src="client/widgets/admin_spectator.lua" type="client" />
<script src="client/widgets/admin_editor.lua" type="client" />
<script src="client/widgets/admin_team.lua" type="client" />
Expand Down
24 changes: 20 additions & 4 deletions [admin]/admin2/server/admin_server.lua
Expand Up @@ -359,23 +359,39 @@ addEventHandler(
aReports[id].category = tostring(data.category)
aReports[id].subject = tostring(data.subject)
aReports[id].text = tostring(data.message)
aReports[id].time = time.monthday .. "/" .. time.month .. " " .. time.hour .. ":" .. time.minute
aReports[id].time = string.format("%02d/%02d %02d:%02d", time.monthday, time.month+1, time.hour, time.minute)
aReports[id].read = false
elseif (action == "get") then
triggerClientEvent(source, "aMessage", source, "get", aReports)
return
elseif (action == "read") then
if (aReports[data]) then
aReports[data].read = true
end
triggerClientEvent(source, "aMessage", source, "get", aReports)
elseif (action == "delete") then
if (aReports[data]) then
table.remove(aReports, data)
local id = data[1]
if (not aReports[id]) then
outputChatBox("Error - Message not found.", source, 255, 0, 0)
triggerClientEvent(source, "aMessage", source, "get", aReports)
return
end
local message = data[2]
for key, value in pairs(aReports[id]) do
if (message[key] ~= value) then
outputChatBox("Error - Message mismatch, please try again.", source, 255, 0, 0)
triggerClientEvent(source, "aMessage", source, "get", aReports)
return
end
end
table.remove(aReports, id)
triggerClientEvent(source, "aMessage", source, "get", aReports)
end
for id, p in ipairs(getElementsByType("player")) do
if (hasObjectPermissionTo(p, "general.adminpanel")) then
triggerEvent("aSync", p, "messages")
triggerEvent(EVENT_SYNC, p, SYNC_MESSAGES)
end
end
end
Expand Down
7 changes: 3 additions & 4 deletions [admin]/admin2/server/admin_storage.lua
Expand Up @@ -137,11 +137,10 @@ end
function aReleaseStorage()
local node = xmlLoadFile("conf\\reports.xml")
if (node) then
local messages = 0
while (xmlFindChild(node, "message", messages) ~= false) do
local subnode = xmlFindChild(node, "message", messages)
local subnode = xmlFindChild(node, "message", 0)
while (subnode) do
xmlDestroyNode(subnode)
messages = messages + 1
subnode = xmlFindChild(node, "message", 0)
end
else
node = xmlCreateFile("conf\\reports.xml", "messages")
Expand Down

0 comments on commit 6dbdf2c

Please sign in to comment.