From d656f0f4ec7244be96054f1c581eb48d224b2c72 Mon Sep 17 00:00:00 2001 From: Lucy Date: Sun, 16 Feb 2025 23:54:00 +0000 Subject: [PATCH] Refactor GLOB.admin/debug/fun_state into cached `/datum/ui_state/admin_state` instances (#89417) ## About The Pull Request So, some admin verbs/tools that used tguis, i.e edit/debug planes, were available to admins with +DEBUG... but the ui_state used `GLOB.admin_state`, which checks for +ADMIN - meaning that if they _only_ had +DEBUG, they would have the verb... but it would do nothing when they used it. I've refactored `GLOB.admin_state`, `GLOB.debug_state`, and `GLOB.fun_state` into a merged `/datum/ui_state/admin_state`, with a var for which specific permissions are being checked for. You now use the `ADMIN_STATE(perms)` macro to get the UI state for those specific perms, i.e `admin_state(R_ADMIN)` or `admin_state(R_DEBUG)`, and the resulting UI state will check for _those specific perms_. These are initialized and cached in `GLOB.admin_states` (which should never be directly accessed). So, I've went thru every single usage of `GLOB.admin_state`, `GLOB.fun_state`, and `GLOB.debug_state`, and made them all use `ADMIN_STATE()` with the actual permission flags needed to use said UI in the first place. ## Why It's Good For The Game Kinda dumb for specific admin permissions to be granted verbs that don't let them use it anyways. ## Changelog :cl: admin: Certain UI-based tools (plane debugger, filter editor, etc) that were given to admins with only +VAREDIT or +DEBUG, but refused to open without +ADMIN, now actually work for admins that have the needed permission. /:cl: --- code/__DEFINES/tgui.dm | 8 ++++++++ code/controllers/subsystem/air.dm | 2 +- code/controllers/subsystem/shuttle.dm | 2 +- code/modules/admin/admin_fax_panel.dm | 2 +- code/modules/admin/admin_pda_message.dm | 2 +- code/modules/admin/force_event.dm | 2 +- code/modules/admin/fun_balloon.dm | 2 +- code/modules/admin/outfit_editor.dm | 2 +- code/modules/admin/outfit_manager.dm | 2 +- code/modules/admin/painting_manager.dm | 2 +- code/modules/admin/skill_panel.dm | 2 +- code/modules/admin/trophy_manager.dm | 2 +- code/modules/admin/verbs/admin_newscaster.dm | 2 +- code/modules/admin/verbs/borgpanel.dm | 2 +- code/modules/admin/verbs/color_blind_test.dm | 2 +- code/modules/admin/verbs/commandreport.dm | 2 +- .../admin/verbs/ghost_pool_protection.dm | 2 +- code/modules/admin/verbs/lawpanel.dm | 2 +- code/modules/admin/verbs/light_debug.dm | 4 ++-- code/modules/admin/verbs/lua/lua_editor.dm | 2 +- code/modules/admin/verbs/plane_debugger.dm | 2 +- .../admin/verbs/player_ticket_history.dm | 2 +- code/modules/admin/verbs/secrets.dm | 2 +- code/modules/admin/verbs/selectequipment.dm | 2 +- .../view_variables/color_matrix_editor.dm | 2 +- .../admin/view_variables/filterrific.dm | 2 +- .../nobody_wants_to_learn_matrix_math.dm | 2 +- .../admin/view_variables/particle_editor.dm | 2 +- code/modules/cargo/centcom_podlauncher.dm | 2 +- code/modules/explorer_drone/manager.dm | 2 +- code/modules/fishing/admin.dm | 2 +- code/modules/interview/interview_manager.dm | 2 +- code/modules/logging/log_holder.dm | 2 +- code/modules/requests/request_manager.dm | 2 +- code/modules/tgui/states/admin.dm | 20 ++++++++++++++++--- code/modules/tgui/states/debug.dm | 6 ------ code/modules/tgui/states/fun.dm | 17 ---------------- .../admin/signal_handler/signal_list.dm | 2 +- code/modules/wiremod/core/admin_panel.dm | 2 +- tgstation.dme | 2 -- 40 files changed, 61 insertions(+), 64 deletions(-) delete mode 100644 code/modules/tgui/states/debug.dm delete mode 100644 code/modules/tgui/states/fun.dm diff --git a/code/__DEFINES/tgui.dm b/code/__DEFINES/tgui.dm index 02d6a25a660..e0cd6fc5fbf 100644 --- a/code/__DEFINES/tgui.dm +++ b/code/__DEFINES/tgui.dm @@ -36,3 +36,11 @@ #define TGUI_CREATE_MESSAGE(type, payload) ( \ "%7b%22type%22%3a%22[type]%22%2c%22payload%22%3a[url_encode(json_encode(payload))]%7d" \ ) + +/** + * Gets a ui_state that checks to see if the user has specific admin permissions. + * + * Arguments: + * * required_perms: Which admin permission flags to check the user for, such as [R_ADMIN] + */ +#define ADMIN_STATE(required_perms) (GLOB.admin_states["[required_perms]"] ||= new /datum/ui_state/admin_state(required_perms)) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 8332d9b1133..34e71209f19 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -840,7 +840,7 @@ GLOBAL_LIST_EMPTY(colored_images) currentrun -= machine /datum/controller/subsystem/air/ui_state(mob/user) - return GLOB.debug_state + return ADMIN_STATE(R_DEBUG) /datum/controller/subsystem/air/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index ff19d6d4b26..71d9ed0189e 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -978,7 +978,7 @@ SUBSYSTEM_DEF(shuttle) QDEL_NULL(preview_reservation) /datum/controller/subsystem/shuttle/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/controller/subsystem/shuttle/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/admin/admin_fax_panel.dm b/code/modules/admin/admin_fax_panel.dm index cc88f1949f2..3a9744ee3e4 100644 --- a/code/modules/admin/admin_fax_panel.dm +++ b/code/modules/admin/admin_fax_panel.dm @@ -57,7 +57,7 @@ ADMIN_VERB(fax_panel, R_ADMIN, "Fax Panel", "View and respond to faxes sent to C ui.open() /datum/fax_panel_interface/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/fax_panel_interface/ui_static_data(mob/user) var/list/data = list() diff --git a/code/modules/admin/admin_pda_message.dm b/code/modules/admin/admin_pda_message.dm index c1c4fef0b57..bee5a584634 100644 --- a/code/modules/admin/admin_pda_message.dm +++ b/code/modules/admin/admin_pda_message.dm @@ -24,7 +24,7 @@ ADMIN_VERB(message_pda, R_ADMIN, "PDA Message", "Send a message to a user's PDA. ui.open() /datum/admin_pda_panel/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/admin_pda_panel/ui_static_data(mob/user) var/list/data = list() diff --git a/code/modules/admin/force_event.dm b/code/modules/admin/force_event.dm index 519adbd8a9e..d3730437b56 100644 --- a/code/modules/admin/force_event.dm +++ b/code/modules/admin/force_event.dm @@ -20,7 +20,7 @@ ADMIN_VERB(force_event, R_FUN, "Trigger Event", "Forces an event to occur.", ADM ui.open() /datum/force_event/ui_state(mob/user) - return GLOB.fun_state + return ADMIN_STATE(R_FUN) /datum/force_event/ui_static_data(mob/user) var/static/list/category_to_icons diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index f619bd8aaba..efda097db6c 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -55,7 +55,7 @@ return data /obj/effect/fun_balloon/sentience/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /obj/effect/fun_balloon/sentience/ui_status(mob/user, datum/ui_state/state) if(popped) diff --git a/code/modules/admin/outfit_editor.dm b/code/modules/admin/outfit_editor.dm index a3bd433f52e..765fbb9999d 100644 --- a/code/modules/admin/outfit_editor.dm +++ b/code/modules/admin/outfit_editor.dm @@ -24,7 +24,7 @@ drip.name = "New Outfit" /datum/outfit_editor/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_NONE) /datum/outfit_editor/ui_status(mob/user, datum/ui_state/state) if(QDELETED(drip)) diff --git a/code/modules/admin/outfit_manager.dm b/code/modules/admin/outfit_manager.dm index c5f14db8ae3..6fc7bc640c2 100644 --- a/code/modules/admin/outfit_manager.dm +++ b/code/modules/admin/outfit_manager.dm @@ -5,7 +5,7 @@ ADMIN_VERB(outfit_manager, R_DEBUG|R_ADMIN, "Outfit Manager", "View and edit out /datum/outfit_manager /datum/outfit_manager/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_DEBUG | R_ADMIN) /datum/outfit_manager/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/admin/painting_manager.dm b/code/modules/admin/painting_manager.dm index 5ebcdef0059..fadd354380c 100644 --- a/code/modules/admin/painting_manager.dm +++ b/code/modules/admin/painting_manager.dm @@ -6,7 +6,7 @@ ADMIN_VERB(painting_manager, R_ADMIN, "Paintings Manager", "View and redact pain /datum/paintings_manager /datum/paintings_manager/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/paintings_manager/ui_close(mob/user) qdel(src) diff --git a/code/modules/admin/skill_panel.dm b/code/modules/admin/skill_panel.dm index b1ba4d10910..26b00ae41c3 100644 --- a/code/modules/admin/skill_panel.dm +++ b/code/modules/admin/skill_panel.dm @@ -12,7 +12,7 @@ holder = userMob.client //if its a mob, assign the mob's client to holder /datum/skill_panel/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/skill_panel/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/admin/trophy_manager.dm b/code/modules/admin/trophy_manager.dm index 5ad703b0994..95afad83a2a 100644 --- a/code/modules/admin/trophy_manager.dm +++ b/code/modules/admin/trophy_manager.dm @@ -6,7 +6,7 @@ ADMIN_VERB(trophy_manager, R_ADMIN, "Trophy Manager", "View all trophies.", ADMI /datum/trophy_manager /datum/trophy_manager/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/trophy_manager/ui_close(mob/user) qdel(src) diff --git a/code/modules/admin/verbs/admin_newscaster.dm b/code/modules/admin/verbs/admin_newscaster.dm index 7cac42e0b99..d199d31e9b9 100644 --- a/code/modules/admin/verbs/admin_newscaster.dm +++ b/code/modules/admin/verbs/admin_newscaster.dm @@ -29,7 +29,7 @@ ADMIN_VERB(access_news_network, R_ADMIN, "Access Newscaster Network", "Allows yo var/comment_text /datum/newspanel/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/newspanel/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index 97f690f2a5a..57ad91d691a 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -16,7 +16,7 @@ ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, AD borg = to_borg /datum/borgpanel/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/borgpanel/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/admin/verbs/color_blind_test.dm b/code/modules/admin/verbs/color_blind_test.dm index 45adb5e8ce9..b60a35fd5a7 100644 --- a/code/modules/admin/verbs/color_blind_test.dm +++ b/code/modules/admin/verbs/color_blind_test.dm @@ -23,7 +23,7 @@ var/selected_type = "" /datum/colorblind_tester/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_DEBUG) /datum/colorblind_tester/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/admin/verbs/commandreport.dm b/code/modules/admin/verbs/commandreport.dm index 84b95c6f478..6288ce76a4b 100644 --- a/code/modules/admin/verbs/commandreport.dm +++ b/code/modules/admin/verbs/commandreport.dm @@ -51,7 +51,7 @@ ADMIN_VERB(create_command_report, R_ADMIN, "Create Command Report", "Create a co preset_names.Insert(1, command_name()) /datum/command_report_menu/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/command_report_menu/ui_close() qdel(src) diff --git a/code/modules/admin/verbs/ghost_pool_protection.dm b/code/modules/admin/verbs/ghost_pool_protection.dm index ed31d124a7d..37ed7dc6852 100644 --- a/code/modules/admin/verbs/ghost_pool_protection.dm +++ b/code/modules/admin/verbs/ghost_pool_protection.dm @@ -30,7 +30,7 @@ ADMIN_VERB(ghost_pool_protection, R_ADMIN, "Ghost Pool Protection", "Choose whic new_role_flags = GLOB.ghost_role_flags /datum/ghost_pool_menu/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/ghost_pool_menu/ui_close() qdel(src) diff --git a/code/modules/admin/verbs/lawpanel.dm b/code/modules/admin/verbs/lawpanel.dm index 32815b73cbd..68a691111be 100644 --- a/code/modules/admin/verbs/lawpanel.dm +++ b/code/modules/admin/verbs/lawpanel.dm @@ -14,7 +14,7 @@ ADMIN_VERB(law_panel, R_ADMIN, "Law Panel", "View the AI laws.", ADMIN_CATEGORY_ ui.open() /datum/law_panel/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/law_panel/ui_close(mob/user) qdel(src) diff --git a/code/modules/admin/verbs/light_debug.dm b/code/modules/admin/verbs/light_debug.dm index 5738e06eeea..0611575e209 100644 --- a/code/modules/admin/verbs/light_debug.dm +++ b/code/modules/admin/verbs/light_debug.dm @@ -186,7 +186,7 @@ GLOBAL_LIST_EMPTY(light_debugged_atoms) ui_interact(usr) /atom/movable/screen/light_button/edit/ui_state(mob/user) - return GLOB.debug_state + return ADMIN_STATE(R_DEBUG) /atom/movable/screen/light_button/edit/can_interact() return TRUE @@ -362,7 +362,7 @@ GLOBAL_LIST_EMPTY(light_debugged_atoms) ui_interact(usr) /datum/action/spawn_light/ui_state(mob/user) - return GLOB.debug_state + return ADMIN_STATE(R_DEBUG) /datum/action/spawn_light/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/admin/verbs/lua/lua_editor.dm b/code/modules/admin/verbs/lua/lua_editor.dm index 280bd52a57d..15ead2a675f 100644 --- a/code/modules/admin/verbs/lua/lua_editor.dm +++ b/code/modules/admin/verbs/lua/lua_editor.dm @@ -42,7 +42,7 @@ LAZYREMOVEASSOC(SSlua.editors, text_ref(current_state), src) /datum/lua_editor/ui_state(mob/user) - return GLOB.debug_state + return ADMIN_STATE(R_DEBUG) /datum/lua_editor/ui_data(mob/user) var/list/data = list() diff --git a/code/modules/admin/verbs/plane_debugger.dm b/code/modules/admin/verbs/plane_debugger.dm index 083703ae78b..90a40a6ce08 100644 --- a/code/modules/admin/verbs/plane_debugger.dm +++ b/code/modules/admin/verbs/plane_debugger.dm @@ -77,7 +77,7 @@ set_target(get_target()) /datum/plane_master_debug/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_DEBUG) /datum/plane_master_debug/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/admin/verbs/player_ticket_history.dm b/code/modules/admin/verbs/player_ticket_history.dm index 829d4dfc2b5..631cea977cf 100644 --- a/code/modules/admin/verbs/player_ticket_history.dm +++ b/code/modules/admin/verbs/player_ticket_history.dm @@ -115,7 +115,7 @@ ADMIN_VERB(player_ticket_history, R_ADMIN, "Player Ticket History", "Allows you to_chat(usr, span_adminnotice("Finished caching ticket history for [ckey]!")) /datum/ticket_history_holder/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/ticket_history_holder/ui_static_data(mob/user) if(!check_rights_for(CLIENT_FROM_VAR(user), R_ADMIN)) diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index 1af6dcbeb69..4d7fbe16be8 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -22,7 +22,7 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w is_funmin = check_rights(R_FUN) /datum/secrets_menu/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_NONE) /datum/secrets_menu/ui_close() qdel(src) diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm index 96534967702..b42e01da44d 100644 --- a/code/modules/admin/verbs/selectequipment.dm +++ b/code/modules/admin/verbs/selectequipment.dm @@ -45,7 +45,7 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(select_equipment, R_FUN, "Select Equipment", mob/ta ui.set_autoupdate(FALSE) /datum/select_equipment/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_FUN) /datum/select_equipment/ui_status(mob/user, datum/ui_state/state) if(QDELETED(target_mob)) diff --git a/code/modules/admin/view_variables/color_matrix_editor.dm b/code/modules/admin/view_variables/color_matrix_editor.dm index 6c61382ceec..debe0be78bb 100644 --- a/code/modules/admin/view_variables/color_matrix_editor.dm +++ b/code/modules/admin/view_variables/color_matrix_editor.dm @@ -32,7 +32,7 @@ return ..() /datum/color_matrix_editor/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_VAREDIT) /datum/color_matrix_editor/ui_static_data(mob/user) var/list/data = list() diff --git a/code/modules/admin/view_variables/filterrific.dm b/code/modules/admin/view_variables/filterrific.dm index a997d520477..3034c092dc4 100644 --- a/code/modules/admin/view_variables/filterrific.dm +++ b/code/modules/admin/view_variables/filterrific.dm @@ -5,7 +5,7 @@ src.target = target /datum/filter_editor/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_VAREDIT) /datum/filter_editor/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm b/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm index 8eb2f1c72f0..4d057383284 100644 --- a/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm +++ b/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm @@ -20,7 +20,7 @@ return ..() /datum/nobody_wants_to_learn_matrix_math/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_VAREDIT) /datum/nobody_wants_to_learn_matrix_math/ui_close(mob/user) qdel(src) diff --git a/code/modules/admin/view_variables/particle_editor.dm b/code/modules/admin/view_variables/particle_editor.dm index dcda7a6e0df..e2c39481249 100644 --- a/code/modules/admin/view_variables/particle_editor.dm +++ b/code/modules/admin/view_variables/particle_editor.dm @@ -6,7 +6,7 @@ src.target = target /datum/particle_editor/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_VAREDIT) /datum/particle_editor/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index bb1c4ea8a8b..5205e842c78 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -124,7 +124,7 @@ ADMIN_VERB(centcom_podlauncher, R_ADMIN, "Config/Launch Supplypod", "Configure a /datum/centcom_podlauncher/ui_state(mob/user) if (SSticker.current_state >= GAME_STATE_FINISHED) return GLOB.always_state //Allow the UI to be given to players by admins after roundend - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/centcom_podlauncher/ui_assets(mob/user) return list( diff --git a/code/modules/explorer_drone/manager.dm b/code/modules/explorer_drone/manager.dm index ee51a2d5db3..cfad2aa116e 100644 --- a/code/modules/explorer_drone/manager.dm +++ b/code/modules/explorer_drone/manager.dm @@ -11,7 +11,7 @@ ui.open() /datum/adventure_browser/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_DEBUG) /// Handles finishing adventure /datum/adventure_browser/proc/resolve_adventure(datum/source,result) diff --git a/code/modules/fishing/admin.dm b/code/modules/fishing/admin.dm index 53aefaf3338..9e54aad28c7 100644 --- a/code/modules/fishing/admin.dm +++ b/code/modules/fishing/admin.dm @@ -12,7 +12,7 @@ ADMIN_VERB(fishing_calculator, R_DEBUG, "Fishing Calculator", "A calculator... f ui.open() /datum/fishing_calculator/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_DEBUG) /datum/fishing_calculator/ui_close(mob/user) qdel(src) diff --git a/code/modules/interview/interview_manager.dm b/code/modules/interview/interview_manager.dm index b5d39961b58..07104c15c0b 100644 --- a/code/modules/interview/interview_manager.dm +++ b/code/modules/interview/interview_manager.dm @@ -181,7 +181,7 @@ GLOBAL_DATUM_INIT(interviews, /datum/interview_manager, new) ui.open() /datum/interview_manager/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/interview_manager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if (..()) diff --git a/code/modules/logging/log_holder.dm b/code/modules/logging/log_holder.dm index 85a436076c8..2fb94500ce9 100644 --- a/code/modules/logging/log_holder.dm +++ b/code/modules/logging/log_holder.dm @@ -46,7 +46,7 @@ ADMIN_VERB(log_viewer_new, R_ADMIN|R_DEBUG, "View Round Logs", "View the rounds ui.open() /datum/log_holder/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN | R_DEBUG) /datum/log_holder/ui_static_data(mob/user) var/list/data = list( diff --git a/code/modules/requests/request_manager.dm b/code/modules/requests/request_manager.dm index 3106a925acd..d2257515f8f 100644 --- a/code/modules/requests/request_manager.dm +++ b/code/modules/requests/request_manager.dm @@ -143,7 +143,7 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new) ui.open() /datum/request_manager/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/request_manager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if (..()) diff --git a/code/modules/tgui/states/admin.dm b/code/modules/tgui/states/admin.dm index 4da5061dfcb..83085c4029c 100644 --- a/code/modules/tgui/states/admin.dm +++ b/code/modules/tgui/states/admin.dm @@ -6,12 +6,26 @@ /** * tgui state: admin_state * - * Checks that the user is an admin, end-of-story. + * Checks if the user has specific admin permissions. */ -GLOBAL_DATUM_INIT(admin_state, /datum/ui_state/admin_state, new) +GLOBAL_LIST_EMPTY_TYPED(admin_states, /datum/ui_state/admin_state) +GLOBAL_PROTECT(admin_states) + +/datum/ui_state/admin_state + /// The specific admin permissions required for the UI using this state. + VAR_FINAL/required_perms = R_ADMIN + +/datum/ui_state/admin_state/New(required_perms = R_ADMIN) + . = ..() + src.required_perms = required_perms /datum/ui_state/admin_state/can_use_topic(src_object, mob/user) - if(check_rights_for(user.client, R_ADMIN)) + if(check_rights_for(user.client, required_perms)) return UI_INTERACTIVE return UI_CLOSE + +/datum/ui_state/admin_state/vv_edit_var(var_name, var_value) + if(var_name == NAMEOF(src, required_perms)) + return FALSE + return ..() diff --git a/code/modules/tgui/states/debug.dm b/code/modules/tgui/states/debug.dm deleted file mode 100644 index 6c600b38cea..00000000000 --- a/code/modules/tgui/states/debug.dm +++ /dev/null @@ -1,6 +0,0 @@ -GLOBAL_DATUM_INIT(debug_state, /datum/ui_state/debug_state, new) - -/datum/ui_state/debug_state/can_use_topic(src_object, mob/user) - if(check_rights_for(user.client, R_DEBUG)) - return UI_INTERACTIVE - return UI_CLOSE diff --git a/code/modules/tgui/states/fun.dm b/code/modules/tgui/states/fun.dm deleted file mode 100644 index ba72f40fd08..00000000000 --- a/code/modules/tgui/states/fun.dm +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -/** - * tgui state: fun_state - * - * Checks that the user has the fun privilige. - */ - -GLOBAL_DATUM_INIT(fun_state, /datum/ui_state/fun_state, new) - -/datum/ui_state/fun_state/can_use_topic(src_object, mob/user) - if(check_rights_for(user.client, R_FUN)) - return UI_INTERACTIVE - return UI_CLOSE diff --git a/code/modules/wiremod/components/admin/signal_handler/signal_list.dm b/code/modules/wiremod/components/admin/signal_handler/signal_list.dm index 7d6571484b7..3c0cabd7f30 100644 --- a/code/modules/wiremod/components/admin/signal_handler/signal_list.dm +++ b/code/modules/wiremod/components/admin/signal_handler/signal_list.dm @@ -61,7 +61,7 @@ GLOBAL_LIST_INIT(integrated_circuit_global_signal_ids, generate_global_circuit_s ) /obj/item/circuit_component/signal_handler/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /obj/item/circuit_component/signal_handler/ui_static_data(mob/user) . = list() diff --git a/code/modules/wiremod/core/admin_panel.dm b/code/modules/wiremod/core/admin_panel.dm index 9a262cb5e4c..f74a6453dc0 100644 --- a/code/modules/wiremod/core/admin_panel.dm +++ b/code/modules/wiremod/core/admin_panel.dm @@ -71,7 +71,7 @@ ADMIN_VERB(view_all_circuits, R_ADMIN, "View All Circuits", "List all circuits i return TRUE /datum/circuit_admin_panel/ui_state(mob/user) - return GLOB.admin_state + return ADMIN_STATE(R_ADMIN) /datum/circuit_admin_panel/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/tgstation.dme b/tgstation.dme index ef478dc4b21..b0514a96b79 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6194,10 +6194,8 @@ #include "code\modules\tgui\states\always.dm" #include "code\modules\tgui\states\conscious.dm" #include "code\modules\tgui\states\contained.dm" -#include "code\modules\tgui\states\debug.dm" #include "code\modules\tgui\states\deep_inventory.dm" #include "code\modules\tgui\states\default.dm" -#include "code\modules\tgui\states\fun.dm" #include "code\modules\tgui\states\greyscale_menu.dm" #include "code\modules\tgui\states\hands.dm" #include "code\modules\tgui\states\human_adjacent.dm"