Skip to content

Commit fe59ab1

Browse files
authored
admin: replace "give admin" button with permissions widget (#329)
1 parent 5f72bde commit fe59ab1

File tree

6 files changed

+173
-12
lines changed

6 files changed

+173
-12
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
aAclForm = nil
1212
aAclData = {}
1313

14+
addEvent ( "aAdminACL", true )
15+
1416
function aManageACL ()
1517
if ( aAclForm == nil ) then
1618
aAclData["group_objects"] = {}
@@ -47,7 +49,6 @@ function aManageACL ()
4749
aACLExit = guiCreateButton ( 0.75, 0.90, 0.27, 0.04, "Close", true, aAclForm )
4850
aclDisplayOptions ( "", "" )
4951

50-
addEvent ( "aAdminACL", true )
5152
addEventHandler ( "aAdminACL", localPlayer, aAdminACL )
5253
addEventHandler ( "onClientGUIClick", aAclForm, aClientACLClick )
5354
addEventHandler ( "onClientGUIDoubleClick", aAclForm, aClientACLDoubleClick )

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

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ function aAdminMenu ()
7575

7676
aTab1.Nick = guiCreateButton ( 0.71, 0.260, 0.13, 0.04, "Set Nick", true, aTab1.Tab )
7777
aTab1.Shout = guiCreateButton ( 0.85, 0.260, 0.13, 0.04, "Shout!", true, aTab1.Tab, "shout" )
78-
aTab1.Admin = guiCreateButton ( 0.71, 0.305, 0.27, 0.04, "Give admin rights", true, aTab1.Tab, "setgroup" )
78+
aTab1.ManagePerms = guiCreateButton ( 0.71, 0.305, 0.27, 0.04, "Manage permissions", true, aTab1.Tab, "setgroup" )
7979

8080
local y = 0.03 -- Start y coord
8181
local A = 0.045 -- Large line gap
@@ -538,11 +538,6 @@ function aAdminRefresh ()
538538
guiSetText ( aTab1.Vehicle, "Vehicle: Foot" )
539539
guiSetText ( aTab1.VehicleHealth, "Vehicle Health: 0%" )
540540
end
541-
if ( aPlayers[player]["admin"] ) then
542-
guiSetText(aTab1.Admin, "Revoke admin rights")
543-
else
544-
guiSetText(aTab1.Admin, "Give admin rights")
545-
end
546541
return player
547542
end
548543
end
@@ -1041,9 +1036,12 @@ function aClientClick ( button )
10411036
elseif ( source == aTab1.VehicleBlow ) then triggerServerEvent ( "aVehicle", localPlayer, player, "blowvehicle" )
10421037
elseif ( source == aTab1.VehicleDestroy ) then triggerServerEvent ( "aVehicle", localPlayer, player, "destroyvehicle" )
10431038
elseif ( source == aTab1.VehicleCustomize ) then aVehicleCustomize ( player )
1044-
elseif ( source == aTab1.Admin ) then
1045-
if ( aPlayers[player]["admin"] ) then aMessageBox ( "warning", "Revoke admin rights from "..name.."?", "revokeAdmin", player )
1046-
else aMessageBox ( "warning", "Give admin rights to "..name.."?", "giveAdmin", player ) end
1039+
elseif ( source == aTab1.ManagePerms ) then
1040+
if (aPlayers[player]['accountname'] ~= 'guest') then
1041+
aPermissions.Show(player)
1042+
else
1043+
aMessageBox ( "error", "This player is not logged in!" )
1044+
end
10471045
elseif ( source == aTab1.ACModDetails ) then
10481046
aViewModdetails(player)
10491047
end
@@ -1290,7 +1288,6 @@ function aAdminReloadInfos()
12901288
guiSetText ( aTab1.ACModInfo, "Img Mods: N/A" )
12911289
guiSetText ( aTab1.Mute, "Mute" )
12921290
guiSetText ( aTab1.Freeze, "Freeze" )
1293-
guiSetText ( aTab1.Admin, "Give admin rights" )
12941291
guiSetText ( aTab1.Health, "Health: 0%" )
12951292
guiSetText ( aTab1.Armour, "Armour: 0%" )
12961293
guiSetText ( aTab1.Skin, "Skin: N/A" )

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ function runMessageAction(action)
147147
aSpectator.Close(false)
148148
elseif (action == "deleteTeam") then
149149
triggerServerEvent("aTeam", localPlayer, "destroyteam", varOne)
150+
elseif (action == "updatePlayerACLGroup") then
151+
aPermissions.PerformAction(varOne, varTwo, varThree)
150152
end
151153
end
152154

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
--[[**********************************
2+
*
3+
* Multi Theft Auto - Admin Panel
4+
*
5+
* client\gui\admin_permissions.lua
6+
*
7+
* Original File by lil_Toady
8+
*
9+
**************************************]]
10+
aPermissions = {
11+
Form = nil,
12+
SelectedPlayer = nil,
13+
}
14+
15+
addEvent('aPermissionsSync', true)
16+
addEvent('aOnPermissionsChange', true)
17+
18+
function aPermissions.Show(player)
19+
if (not aPermissions.Form) then
20+
local x, y = guiGetScreenSize()
21+
aPermissions.Form = guiCreateWindow(x / 2 - 200, y / 2 - 125, 400, 250, '', false)
22+
guiSetAlpha(aPermissions.Form, 1)
23+
24+
aPermissions.LabelYourPerms = guiCreateLabel(0.03, 0.1, 0.35, 0.07, '', true, aPermissions.Form)
25+
aPermissions.PlayerGroups = guiCreateGridList(0.03, 0.18, 0.35, 0.68, true, aPermissions.Form)
26+
guiGridListAddColumn(aPermissions.PlayerGroups, "Group Name", 0.85)
27+
aPermissions.RemoveGroup = guiCreateButton(0.39, 0.18, 0.075, 0.68, '>\n>\n>', true, aPermissions.Form)
28+
guiSetEnabled(aPermissions.RemoveGroup, false)
29+
30+
aPermissions.LabelAllPerms = guiCreateLabel(0.62, 0.1, 0.35, 0.07, "Available groups:", true, aPermissions.Form)
31+
aPermissions.AllGroups = guiCreateGridList(0.62, 0.18, 0.35, 0.68, true, aPermissions.Form)
32+
guiGridListAddColumn(aPermissions.AllGroups, "Group Name", 0.85)
33+
aPermissions.AddGroup = guiCreateButton(0.535, 0.18, 0.075, 0.68, '<\n<\n<', true, aPermissions.Form)
34+
guiSetEnabled(aPermissions.AddGroup, false)
35+
36+
aPermissions.Update = guiCreateButton(0.03, 0.88, 0.435, 0.09, "Refresh", true, aPermissions.Form)
37+
aPermissions.Hide = guiCreateButton(0.535, 0.88, 0.435, 0.09, "Close", true, aPermissions.Form)
38+
39+
addEventHandler('aPermissionsSync', localPlayer, aPermissions.onSync)
40+
addEventHandler('aOnPermissionsChange', localPlayer, aPermissions.Refresh)
41+
addEventHandler("onClientGUIClick", aPermissions.Form, aPermissions.onClick)
42+
43+
--Register With Admin Form
44+
aRegister("PlayerPermissions", aPermissions.Form, aPermissions.Show, aPermissions.Close)
45+
end
46+
guiSetText(aPermissions.Form, ("Manage %s's permissions"):format(getPlayerName(player)))
47+
guiSetText(aPermissions.LabelYourPerms, ("%s's groups:"):format(getPlayerName(player)))
48+
aPermissions.SelectedPlayer = player
49+
aPermissions.Refresh()
50+
guiSetVisible(aPermissions.Form, true)
51+
guiBringToFront(aPermissions.Form)
52+
end
53+
54+
function aPermissions.onSync(targetPlayer, permissions)
55+
if (targetPlayer == aPermissions.SelectedPlayer) then
56+
guiGridListClear(aPermissions.PlayerGroups)
57+
guiGridListClear(aPermissions.AllGroups)
58+
59+
for group, state in pairs(permissions) do
60+
local gridlist = state and aPermissions.PlayerGroups or aPermissions.AllGroups
61+
guiGridListAddRow(gridlist, group)
62+
end
63+
end
64+
end
65+
66+
function aPermissions.Close(destroy)
67+
if (destroy) then
68+
if (aPermissions.Form) then
69+
destroyElement(aPermissions.Form)
70+
aPermissions.Form = nil
71+
removeEventHandler('aPermissionsSync', localPlayer, aPermissions.onSync)
72+
removeEventHandler('aOnPermissionsChange', localPlayer, aPermissions.Refresh)
73+
end
74+
else
75+
guiSetVisible(aPermissions.Form, false)
76+
end
77+
aPermissions.SelectedPlayer = nil
78+
end
79+
80+
function aPermissions.onClick(button)
81+
if (button == 'left') then
82+
if (source == aPermissions.Hide) then
83+
aPermissions.Close()
84+
elseif (source == aPermissions.Update) then
85+
aPermissions.Refresh()
86+
elseif (source == aPermissions.RemoveGroup) then
87+
aPermissions.ConfirmChange(false)
88+
elseif (source == aPermissions.AddGroup) then
89+
aPermissions.ConfirmChange(true)
90+
elseif (source == aPermissions.AllGroups) then
91+
guiSetEnabled(aPermissions.AddGroup, guiGridListGetSelectedItem(aPermissions.AllGroups) > -1)
92+
elseif (source == aPermissions.PlayerGroups) then
93+
guiSetEnabled(aPermissions.RemoveGroup, guiGridListGetSelectedItem(aPermissions.PlayerGroups) > -1)
94+
end
95+
end
96+
end
97+
98+
function aPermissions.ConfirmChange(add)
99+
local player = aPermissions.SelectedPlayer
100+
101+
if (not isElement(player)) then
102+
aPermissions.Close(false)
103+
messageBox("Player not found!", MB_WARNING)
104+
return
105+
end
106+
107+
local gridlist = add and aPermissions.AllGroups or aPermissions.PlayerGroups
108+
109+
local selected = guiGridListGetSelectedItem(gridlist)
110+
111+
if (selected <= -1) then
112+
return
113+
end
114+
115+
local groupName = guiGridListGetItemText(gridlist, selected, 1)
116+
117+
local str = add and 'Are you sure you want to add "%s" to the "%s" group?' or 'Are you sure you want to remove "%s" from the "%s" group?'
118+
str = str:format(getPlayerName(player), groupName)
119+
120+
return aMessageBox ( "question", str, "updatePlayerACLGroup", player, groupName, add)
121+
end
122+
123+
function aPermissions.PerformAction(player, groupName, newState)
124+
local playerAccount = player and aPlayers[player] and aPlayers[player]['accountname']
125+
if playerAccount and (playerAccount ~= 'guest') then
126+
triggerServerEvent('aAdmin', localPlayer, newState and 'acladd' or 'aclremove', 'object', groupName, 'user.'..playerAccount, true)
127+
end
128+
end
129+
130+
function aPermissions.Refresh()
131+
local player = aPermissions.SelectedPlayer
132+
if isElement(player) and aPermissions.PlayerGroups and aPermissions.AllGroups then
133+
guiGridListClear(aPermissions.PlayerGroups)
134+
guiGridListClear(aPermissions.AllGroups)
135+
triggerServerEvent('aAdmin', localPlayer, "sync", "playeraclgroups", player)
136+
end
137+
end

[admin]/admin/meta.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<script src="client/admin_ACL.lua" type="client" />
2727
<script src="client/gui/admin_main.lua" type="client" />
2828
<script src="client/gui/admin_performance.lua" type="client" />
29+
<script src="client/gui/admin_permissions.lua" type="client" />
2930
<script src="client/gui/admin_maps.lua" type="client" />
3031
<script src="client/gui/admin_messages.lua" type="client" />
3132
<script src="client/gui/admin_message.lua" type="client" />

[admin]/admin/server/admin_server.lua

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,7 @@ addEventHandler ( "aAdmin", _root, function ( action, ... )
681681
for id, acl in ipairs ( aclList() ) do
682682
table.insert ( tableOut["acl"] ,aclGetName ( acl ) )
683683
end
684+
triggerClientEvent ( source, "aAdminACL", _root, type, tableOut )
684685
elseif ( type == "aclobjects" ) then
685686
local group = aclGetGroup ( tostring ( arg[2] ) )
686687
if ( group ) then
@@ -691,6 +692,7 @@ addEventHandler ( "aAdmin", _root, function ( action, ... )
691692
table.insert ( tableOut["acl"], aclGetName ( acl ) )
692693
end
693694
end
695+
triggerClientEvent ( source, "aAdminACL", _root, type, tableOut )
694696
elseif ( type == "aclrights" ) then
695697
local acl = aclGet ( tostring ( arg[2] ) )
696698
if ( acl ) then
@@ -700,8 +702,23 @@ addEventHandler ( "aAdmin", _root, function ( action, ... )
700702
tableOut["rights"][name] = aclGetRight ( acl, name )
701703
end
702704
end
705+
triggerClientEvent ( source, "aAdminACL", _root, type, tableOut )
706+
elseif ( type == 'playeraclgroups') then
707+
local player = arg[2]
708+
if isElement(player) then
709+
local ignoredGroups = {
710+
['Everyone'] = true,
711+
['autoGroup_irc'] = true,
712+
}
713+
for _, v in ipairs(aclGroupList()) do
714+
local groupName = aclGroupGetName(v)
715+
if (not ignoredGroups[groupName]) then
716+
tableOut[groupName] = isObjectInACLGroup('user.'..getAccountName(getPlayerAccount(player)), v)
717+
end
718+
end
719+
end
720+
triggerClientEvent ( source, "aPermissionsSync", _root, player, tableOut )
703721
end
704-
triggerClientEvent ( source, "aAdminACL", _root, type, tableOut )
705722
elseif ( action == "aclcreate" ) then
706723
local name = arg[2]
707724
if ( ( name ) and ( string.len ( name ) >= 1 ) ) then
@@ -759,6 +776,9 @@ addEventHandler ( "aAdmin", _root, function ( action, ... )
759776
mdata2 = "Object '"..arg[3].."'"
760777
outputServerLog ("ACL: "..getPlayerName(source).."["..getAccountName (getPlayerAccount(source)).."] ["..getPlayerSerial (source).."] ["..getPlayerIP (source).."] added "..object.." to ACL Group "..arg[2])
761778
triggerEvent ( "aAdmin", source, "sync", "aclobjects", arg[2] )
779+
if arg[4] then
780+
triggerClientEvent ( source, "aOnPermissionsChange", source )
781+
end
762782
end
763783
elseif ( arg[1] == "acl" ) then
764784
local group = aclGetGroup ( arg[2] )
@@ -802,6 +822,9 @@ addEventHandler ( "aAdmin", _root, function ( action, ... )
802822
mdata2 = "Object '"..arg[3].."'"
803823
triggerEvent ( "aAdmin", source, "sync", "aclobjects", arg[2] )
804824
outputServerLog ("ACL: "..getPlayerName(source).."["..getAccountName (getPlayerAccount(source)).."] ["..getPlayerSerial (source).."] ["..getPlayerIP (source).."] removed "..mdata2)
825+
if arg[4] then
826+
triggerClientEvent ( source, "aOnPermissionsChange", source )
827+
end
805828
end
806829
elseif ( arg[1] == "acl" ) then
807830
local group = aclGetGroup ( arg[2] )

0 commit comments

Comments
 (0)