[MIRROR] Fix inability to demote certain subordinates with the ID card app. (#3818)

* Fix inability to demote certain subordinates with the ID card app. (#57317)

The trim system handles the interaction between heads and their air quotes "subordinates" differently. Instead of checking for head_subordinates - Which is a compiled list for who is and isn't a subordinate of who based on job datums - We instead check for the ability to apply a trim's access template to a card.

This means that if you're able to assign a trim's access as a template, you're able to demote that trim too.

This fixes some edge cases like being unable to demote Security Officer (Department) cards because technically Security Officer (Engineering) and Security Officer (Science) aren't real jobs (insert joke here) - They lack job datums and never get assigned as the HoS's subordinates.

This is a much more modular and intuitive way of handling demotions.

* Fix inability to demote certain subordinates with the ID card app.

Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
This commit is contained in:
SkyratBot
2021-03-03 23:34:09 +01:00
committed by GitHub
parent 1b30dfec51
commit f0f1810155

View File

@@ -18,8 +18,6 @@
var/authenticated_user
/// The regions this program has access to based on the authenticated ID.
var/list/region_access = list()
/// List of subordinate jobs for head roles on the authenticated ID.
var/list/head_subordinates = list()
/// List of job templates that can be applied to ID cards from this program.
var/list/job_templates = list()
/// Which departments this program has access to. See region defines.
@@ -60,14 +58,6 @@
head_types |= info["head"]
job_templates |= info["templates"]
head_subordinates.Cut()
if(length(head_types))
for(var/occupation in SSjob.occupations)
var/datum/job/job = occupation
for(var/head in head_types)
if(head in job.department_head)
head_subordinates += job.title
if(length(region_access))
minor = TRUE
authenticated_user = "[id_card.name] \[LIMITED ACCESS\]"
@@ -162,7 +152,7 @@
if(!computer || !authenticated_user)
return TRUE
if(minor)
if(!(target_id_card.trim?.assignment in head_subordinates) && target_id_card.trim?.assignment != "Assistant")
if(!(target_id_card.trim?.type in job_templates))
to_chat(usr, "<span class='notice'>Software error: You do not have the necessary permissions to demote this card.</span>")
return TRUE