diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 57c933edc5..2fe020d544 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -347,3 +347,5 @@ default = FALSE /datum/config_entry/flag/dynamic_config_enabled + +/datum/config_entry/flag/station_name_needs_approval diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 3f5296a1ef..e9c3842619 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -14,6 +14,7 @@ var/response_timer_id = null var/approval_time = 600 var/allow_unicode = FALSE + var/admin_approved = FALSE var/static/regex/standard_station_regex @@ -62,8 +63,32 @@ to_chat(user, "Your name has been sent to your employers for approval.") // Autoapproves after a certain time - response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE) - to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [html_encode(new_name)] (will autoapprove in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (REJECT) [ADMIN_CENTCOM_REPLY(user)]") + var/requires_approval = CONFIG_GET(flag/station_name_needs_approval) + response_timer_id = addtimer(CALLBACK(src, .proc/check_state, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE) + to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [html_encode(new_name)] ([requires_approval ? "REQUIRES ADMIN APPROVAL and will autodeny" : "will autoapprove"] in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (REJECT)[requires_approval ? " (APPROVE)" : ""] [ADMIN_CENTCOM_REPLY(user)]") + +/obj/item/station_charter/proc/check_state(designation, uname, ureal_name, ukey) + var/requires_approval = CONFIG_GET(flag/station_name_needs_approval) + if(requires_approval && !admin_approved) + var/turf/T = get_turf(src) + T.visible_message("A note appears on [src], stating this sector requires central command approval for its station names, which was not performed in time for this request. Looks like the change has been auto-rejected.") + var/m = "Station rename has been autorejected due to config requiring admin approval." + message_admins(m) + log_admin(m) + else + rename_station(designation, uname, ureal_name, ukey) + response_timer_id = null + admin_approved = FALSE + +/obj/item/station_charter/proc/allow_pass(user) + if(!user) + return + if(!response_timer_id) + return + admin_approved = TRUE + var/m = "[key_name(user)] has approved the proposed station name. It can still be denied prior to the timer expiring." + message_admins(m) + log_admin(m) /obj/item/station_charter/proc/reject_proposed(user) if(!user) @@ -80,6 +105,7 @@ deltimer(response_timer_id) response_timer_id = null + admin_approved = FALSE /obj/item/station_charter/proc/rename_station(designation, uname, ureal_name, ukey) set_station_name(designation) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a8a7e51611..11270e0d96 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2038,6 +2038,12 @@ var/obj/item/station_charter/charter = locate(href_list["reject_custom_name"]) if(istype(charter)) charter.reject_proposed(usr) + else if(href_list["approve_custom_name"]) + if(!check_rights(R_ADMIN)) + return + var/obj/item/station_charter/charter = locate(href_list["approve_custom_name"]) + if(istype(charter)) + charter.allow_pass(usr) else if(href_list["jumpto"]) if(!isobserver(usr) && !check_rights(R_ADMIN)) return diff --git a/config/entries/general.txt b/config/entries/general.txt index 5fc3512c60..7fef691006 100644 --- a/config/entries/general.txt +++ b/config/entries/general.txt @@ -503,3 +503,6 @@ PAI_CUSTOM_HOLOFORMS ## Enables monstermos/"equalization" step in atmos. # ATMOS_EQUALIZATION_ENABLED + +## Do station renames from the station charter require admin approval to pass, as opposed to autoapproving if not denied. +STATION_NAME_NEEDS_APPROVAL