Skip to content

Commit 76b121f

Browse files
authored
admin: screenshot tweaks (#317)
* Optimize bandwidth usage * Tweak permission check * Add new rights * Update ACL.xml * Use the lowest possible element
1 parent 4ae9f38 commit 76b121f

File tree

3 files changed

+49
-16
lines changed

3 files changed

+49
-16
lines changed

[admin]/admin/client/gui/admin_screenshot.lua

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ function aPlayerScreenShot (player)
1616
local x,y = guiGetScreenSize()
1717
aScreenShotForm = guiCreateWindow ( x / 2 - 300, y / 2 - 125, 600, 250, "Screenshot Management", false )
1818
aScreenShotList = guiCreateGridList ( 0.03, 0.08, 0.70, 0.90, true, aScreenShotForm )
19-
aScreenShotNew = guiCreateButton ( 0.75, 0.08, 0.42, 0.09, "Take New", true, aScreenShotForm )
20-
aScreenShotDelete = guiCreateButton ( 0.75, 0.18, 0.42, 0.09, "Delete", true, aScreenShotForm )
21-
aScreenShotView = guiCreateButton ( 0.75, 0.28, 0.42, 0.09, "View", true, aScreenShotForm )
22-
aScreenShotRefresh = guiCreateButton ( 0.75, 0.38, 0.42, 0.09, "Refresh", true, aScreenShotForm )
19+
aScreenShotNew = guiCreateButton ( 0.75, 0.08, 0.42, 0.09, "Take New", true, aScreenShotForm, "takescreenshot" )
20+
aScreenShotDelete = guiCreateButton ( 0.75, 0.18, 0.42, 0.09, "Delete", true, aScreenShotForm, "deletescreenshot" )
21+
aScreenShotView = guiCreateButton ( 0.75, 0.28, 0.42, 0.09, "View", true, aScreenShotForm, "viewscreenshot" )
22+
aScreenShotRefresh = guiCreateButton ( 0.75, 0.38, 0.42, 0.09, "Refresh", true, aScreenShotForm, "listscreenshots" )
2323
aScreenShotClose = guiCreateButton ( 0.75, 0.88, 0.42, 0.09, "Close", true, aScreenShotForm )
2424
guiGridListAddColumn(aScreenShotList,"Player",0.31 )
2525
guiGridListAddColumn(aScreenShotList,"Admin",0.31 )
@@ -36,7 +36,9 @@ end
3636
function aScreenShotsRefresh ()
3737
if aScreenShotList then
3838
guiGridListClear(aScreenShotList)
39-
triggerServerEvent("aScreenShot",resourceRoot,"list",localPlayer)
39+
if hasPermissionTo("command.listscreenshots") then
40+
triggerServerEvent("aScreenShot",localPlayer,"list")
41+
end
4042
end
4143
end
4244

@@ -54,7 +56,7 @@ function aScreenShotsDoubleClick (button)
5456
if source == aScreenShotList then
5557
local row = guiGridListGetSelectedItem(aScreenShotList)
5658
if row ~= -1 then
57-
triggerServerEvent("aScreenShot",resourceRoot,"view",localPlayer,guiGridListGetItemData(aScreenShotList,row,1),guiGridListGetItemText(aScreenShotList,row,1))
59+
triggerServerEvent("aScreenShot",localPlayer,"view",guiGridListGetItemData(aScreenShotList,row,1),guiGridListGetItemText(aScreenShotList,row,1))
5860
end
5961
end
6062
end
@@ -69,20 +71,20 @@ function aScreenShotsClick (button)
6971
aMessageBox("error","No player selected!")
7072
else
7173
local name = guiGridListGetItemPlayerName(aTab1.PlayerList,guiGridListGetSelectedItem(aTab1.PlayerList),1)
72-
triggerServerEvent("aScreenShot",resourceRoot,"new",localPlayer,getPlayerFromNick(name))
74+
triggerServerEvent("aScreenShot",localPlayer,"new",getPlayerFromNick(name))
7375
end
7476
elseif source == aScreenShotDelete then
7577
local row = guiGridListGetSelectedItem ( aScreenShotList )
7678
if row ~= -1 then
77-
triggerServerEvent("aScreenShot",resourceRoot,"delete",localPlayer,guiGridListGetItemData(aScreenShotList,row,1))
79+
triggerServerEvent("aScreenShot",localPlayer,"delete",guiGridListGetItemData(aScreenShotList,row,1))
7880
guiGridListRemoveRow(aScreenShotList,row)
7981
end
8082
elseif source == aScreenShotRefresh then
8183
aScreenShotsRefresh()
8284
elseif source == aScreenShotView then
8385
local row = guiGridListGetSelectedItem(aScreenShotList)
8486
if row ~= -1 then
85-
triggerServerEvent("aScreenShot",resourceRoot,"view",localPlayer,guiGridListGetItemData(aScreenShotList,row,1),guiGridListGetItemText(aScreenShotList,row,1))
87+
triggerServerEvent("aScreenShot",localPlayer,"view",guiGridListGetItemData(aScreenShotList,row,1),guiGridListGetItemText(aScreenShotList,row,1))
8688
end
8789
else
8890
for player,gui in pairs (aScreenShotWindows) do

[admin]/admin/conf/ACL.xml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@
8181
<right name="command.banserial" access="true" />
8282
<right name="command.unbanserial" access="true" />
8383
<right name="command.listbans" access="true" />
84+
<!--Screenshot related-->
85+
<right name="command.takescreenshot" access="true" />
86+
<right name="command.deletescreenshot" access="true" />
87+
<right name="command.viewscreenshot" access="true" />
88+
<right name="command.listscreenshots" access="true" />
8489
</acl>
8590
<acl name="SuperModerator">
8691
<!--This is the ACL for Admin group-->
@@ -96,7 +101,7 @@
96101
<right name="command.kick" access="true" />
97102
<right name="command.freeze" access="true" />
98103
<right name="command.mute" access="true" />
99-
<right name="command.setnick" access="true" />
104+
<right name="command.setnick" access="true" />
100105
<right name="command.shout" access="true" />
101106
<right name="command.spectate" access="true" />
102107
<right name="command.slap" access="true" />
@@ -157,6 +162,11 @@
157162
<right name="command.banserial" access="true" />
158163
<right name="command.unbanserial" access="true" />
159164
<right name="command.listbans" access="true" />
165+
<!--Screenshot related-->
166+
<right name="command.takescreenshot" access="true" />
167+
<right name="command.deletescreenshot" access="true" />
168+
<right name="command.viewscreenshot" access="true" />
169+
<right name="command.listscreenshots" access="true" />
160170
</acl>
161171
<acl name="Moderator">
162172
<!--This is the ACL for Admin group-->
@@ -233,6 +243,11 @@
233243
<right name="command.banserial" access="false" />
234244
<right name="command.unbanserial" access="false" />
235245
<right name="command.listbans" access="false" />
246+
<!--Screenshot related-->
247+
<right name="command.takescreenshot" access="true" />
248+
<right name="command.deletescreenshot" access="true" />
249+
<right name="command.viewscreenshot" access="true" />
250+
<right name="command.listscreenshots" access="true" />
236251
</acl>
237252
<acl name="Default">
238253
<!--This is the ACL for Admin group-->
@@ -310,5 +325,10 @@
310325
<right name="command.banserial" access="false" />
311326
<right name="command.unbanserial" access="false" />
312327
<right name="command.listbans" access="false" />
328+
<!--Screenshot related-->
329+
<right name="command.takescreenshot" access="false" />
330+
<right name="command.deletescreenshot" access="false" />
331+
<right name="command.viewscreenshot" access="false" />
332+
<right name="command.listscreenshots" access="false" />
313333
</acl>
314334
</ACL>

[admin]/admin/server/admin_screenshot.lua

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,20 @@
1010

1111
local con = dbConnect("sqlite", ":/registry.db")
1212
dbExec(con, "CREATE TABLE IF NOT EXISTS `admin_screenshots` (`id` INTEGER, `player` TEXT, `serial` TEXT, `admin` TEXT, `realtime` TEXT)")
13+
1314
local screenshots = {}
1415
local currentid = 0
16+
local rights = {
17+
["new"] = "takescreenshot",
18+
["delete"] = "deletescreenshot",
19+
["view"] = "viewscreenshot",
20+
["list"] = "listscreenshots"
21+
}
1522

16-
addEventHandler("onResourceStart", resourceRoot, function()
17-
dbQuery(resourceStartedCallback, {}, con, "SELECT `id` FROM `admin_screenshots`")
18-
end
23+
addEventHandler("onResourceStart", resourceRoot,
24+
function()
25+
dbQuery(resourceStartedCallback, {}, con, "SELECT `id` FROM `admin_screenshots`")
26+
end
1927
)
2028

2129
function resourceStartedCallback(qh)
@@ -28,10 +36,13 @@ function resourceStartedCallback(qh)
2836
end
2937

3038
addEvent("aScreenShot",true)
31-
addEventHandler("aScreenShot",resourceRoot,
32-
function (action,admin,player,arg1,arg2)
39+
addEventHandler("aScreenShot",root,
40+
function (action,player,arg1)
41+
local admin = client
3342
if not isElement(admin) then return end
34-
if not hasObjectPermissionTo(admin,"command.takescreenshot") then return end
43+
if not action then return end
44+
local right = rights[action]
45+
if not right or not hasObjectPermissionTo(admin,"command."..right) then return end
3546
if action == "new" then
3647
if not isElement(player) then return end
3748
if screenshots[player] then

0 commit comments

Comments
 (0)