From 93d1cd7c6e13ab40051e2b083589406cfbcddd04 Mon Sep 17 00:00:00 2001
From: davipatury
Date: Sat, 18 Feb 2017 15:58:01 -0200
Subject: [PATCH 1/3] Security Records nano-ui.
---
code/game/machinery/computer/security.dm | 930 ++++++++----------
code/modules/mob/living/carbon/human/human.dm | 30 +-
code/modules/paperwork/filingcabinet.dm | 8 +-
nano/templates/secure_data.tmpl | 230 +++++
4 files changed, 670 insertions(+), 528 deletions(-)
create mode 100644 nano/templates/secure_data.tmpl
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 77921e171bb..e6b349cf661 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -1,4 +1,6 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+#define SEC_DATA_R_LIST 1 // Record list
+#define SEC_DATA_MAINT 2 // Records maintenance
+#define SEC_DATA_RECORD 3 // Record
/obj/machinery/computer/secure_data//TODO:SANITY
name = "security records"
@@ -13,12 +15,8 @@
var/screen = null
var/datum/data/record/active1 = null
var/datum/data/record/active2 = null
- var/a_id = null
var/temp = null
var/printing = null
- var/can_change_id = 0
- var/list/Perp
- var/tempname = null
//Sorting Variables
var/sortBy = "name"
var/order = 1 // -1 = Descending - 1 = Ascending
@@ -26,538 +24,454 @@
light_color = LIGHT_COLOR_RED
-/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob, params)
+/obj/machinery/computer/secure_data/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/card/id) && !scan)
- usr.drop_item()
- O.loc = src
+ user.drop_item()
+ O.forceMove(src)
scan = O
- to_chat(user, "You insert [O].")
+ ui_interact(user)
..()
-/obj/machinery/computer/secure_data/attack_ai(mob/user as mob)
- return attack_hand(user)
-
//Someone needs to break down the dat += into chunks instead of long ass lines.
-/obj/machinery/computer/secure_data/attack_hand(mob/user as mob)
+/obj/machinery/computer/secure_data/attack_hand(mob/user)
if(..())
return
- if(is_away_level(src.z))
+ if(is_away_level(z))
to_chat(user, "Unable to establish a connection : You're too far away from the station!")
return
- var/dat
+ add_fingerprint(user)
+ ui_interact(user)
- // search javascript
- var/head_content = {"
-
-
-"}
-
- if(temp)
- dat = text("[] Clear Screen ", temp)
- else
- dat = text("Confirm Identity: [] ", (scan ? text("[]", scan.name) : "----------"))
- if(authenticated)
- switch(screen)
- if(1.0)
-
- //body tag start + onload and onkeypress (onkeyup) javascript event calls
- dat += ""
-
- dat += {"
-"}
- dat += "New Record "
- //search bar
- dat += {"
-
- "}
- dat += {"
-
-
-
-
-
-
-Name
-ID
-Rank
-Fingerprints
-Criminal Status
- "}
- if(!isnull(data_core.general))
- for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
- var/crimstat = ""
- for(var/datum/data/record/E in data_core.security)
- if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
- crimstat = E.fields["criminal"]
- var/background
- switch(crimstat)
- if("*Arrest*")
- background = "'background-color:#890E26'"
- if("Incarcerated")
- background = "'background-color:#743B03'"
- if("Parolled")
- background = "'background-color:#743B03'"
- if("Released")
- background = "'background-color:#216489'"
- if("None")
- background = "'background-color:#007f47'"
- if("")
- background = "''"
- crimstat = "No Record."
- dat += ""
- dat += text("[] ", R.fields["name"], R.fields["id"], R.fields["rank"], R.fields["fingerprint"], R, R.fields["name"])
- dat += text("[] ", R.fields["id"])
- dat += text("[] ", R.fields["rank"])
- dat += text("[] ", R.fields["fingerprint"])
- dat += text("[] ", crimstat)
- dat += {"
-
-
- "}
- dat += "Record Maintenance "
- dat += "{Log Out} "
- if(2.0)
- dat += "Records Maintenance "
- dat += "Delete All Records Back "
- if(3.0)
- dat += "Security Record "
- if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
- dat += {"
- "}
- else
- dat += "General Record Lost! "
- if((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
- dat += text(" \nSecurity Data \nCriminal Status: [] \n \nMinor Crimes: [] \nDetails: [] \n \nMajor Crimes: [] \nDetails: [] \n \nImportant Notes: \n\t[] \n \nComments/Log ", active2.fields["criminal"], active2.fields["mi_crim"], active2.fields["mi_crim_d"], active2.fields["ma_crim"], active2.fields["ma_crim_d"], active2.fields["notes"])
- var/counter = 1
- while(active2.fields[text("com_[]", counter)])
- dat += text("[]Delete Entry ", active2.fields[text("com_[]", counter)], counter)
- counter++
- dat += "Add Entry "
- dat += "Delete Record (Security Only) "
- else
- dat += "Security Record Lost! "
- dat += "New Security Record "
- dat += "\nDelete Record (ALL) \nPrint Record \nBack "
+/obj/machinery/computer/secure_data/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
+ var/data[0]
+ data["temp"] = temp
+ data["scan"] = scan ? scan.name : null
+ data["authenticated"] = authenticated
+ data["screen"] = screen
+ if(authenticated)
+ switch(screen)
+ if(SEC_DATA_R_LIST)
+ if(!isnull(data_core.general))
+ for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
+ var/crimstat = "null"
+ for(var/datum/data/record/E in data_core.security)
+ if(E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])
+ crimstat = E.fields["criminal"]
+ break
+ var/background = "''"
+ switch(crimstat)
+ if("*Arrest*")
+ background = "'background-color:#890E26'"
+ if("Incarcerated")
+ background = "'background-color:#743B03'"
+ if("Parolled")
+ background = "'background-color:#743B03'"
+ if("Released")
+ background = "'background-color:#216489'"
+ if("None")
+ background = "'background-color:#007f47'"
+ if("null")
+ crimstat = "No record."
+ data["records"] += list(list("ref" = "\ref[R]", "id" = R.fields["id"], "name" = R.fields["name"], "rank" = R.fields["rank"], "fingerprint" = R.fields["fingerprint"], "background" = background, "crimstat" = crimstat))
+ if(SEC_DATA_RECORD)
+ var/list/general = list()
+ data["general"] = general
+ if(istype(active1, /datum/data/record) && data_core.general.Find(active1))
+ var/list/fields = list()
+ general["fields"] = fields
+ fields[++fields.len] = list("field" = "Name:", "value" = active1.fields["name"], "edit" = "name")
+ fields[++fields.len] = list("field" = "ID:", "value" = active1.fields["id"], "edit" = "id")
+ fields[++fields.len] = list("field" = "Sex:", "value" = active1.fields["sex"], "edit" = "sex")
+ fields[++fields.len] = list("field" = "Age:", "value" = active1.fields["age"], "edit" = "age")
+ fields[++fields.len] = list("field" = "Rank:", "value" = active1.fields["rank"], "edit" = "rank")
+ fields[++fields.len] = list("field" = "Fingerprint:", "value" = active1.fields["fingerprint"], "edit" = "fingerprint")
+ fields[++fields.len] = list("field" = "Physical Status:", "value" = active1.fields["p_stat"], "edit" = null)
+ fields[++fields.len] = list("field" = "Mental Status:", "value" = active1.fields["m_stat"], "edit" = null)
+ var/list/photos = list()
+ general["photos"] = photos
+ photos[++photos.len] = list("photo" = active1.fields["photo-south"])
+ photos[++photos.len] = list("photo" = active1.fields["photo-west"])
+ general["has_photos"] += (active1.fields["photo-south"] || active1.fields["photo-west"] ? 1 : 0)
+ general["empty"] = 0
else
- else
- dat += "{Log In} "
- var/datum/browser/popup = new(user, "secure_rec", name, 600, 400)
- popup.set_content(dat)
- popup.add_head_content(head_content)
- popup.open(0)
- onclose(user, "secure_rec")
- return
+ general["empty"] = 1
+
+ var/list/security = list()
+ data["security"] = security
+ if(istype(active2, /datum/data/record) && data_core.security.Find(active2))
+ var/list/fields = list()
+ security["fields"] = fields
+ fields[++fields.len] = list("field" = "Criminal Status:", "value" = active2.fields["criminal"], "edit" = "criminal", "line_break" = 1)
+ fields[++fields.len] = list("field" = "Minor Crimes:", "value" = active2.fields["mi_crim"], "edit" = "mi_crim", "line_break" = 0)
+ fields[++fields.len] = list("field" = "Details:", "value" = active2.fields["mi_crim_d"], "edit" = "mi_crim_d", "line_break" = 1)
+ fields[++fields.len] = list("field" = "Major Crimes:", "value" = active2.fields["ma_crim"], "edit" = "ma_crim", "line_break" = 0)
+ fields[++fields.len] = list("field" = "Details:", "value" = active2.fields["ma_crim_d"], "edit" = "ma_crim_d", "line_break" = 1)
+ fields[++fields.len] = list("field" = "Important Notes:", "value" = active2.fields["notes"], "edit" = "notes", "line_break" = 0)
+ if(!active2.fields["comments"] || !islist(active2.fields["comments"]))
+ active2.fields["comments"] = list()
+ security["comments"] = active2.fields["comments"]
+ security["empty"] = 0
+ else
+ security["empty"] = 1
+ return data
-/*Revised /N
-I can't be bothered to look more of the actual code outside of switch but that probably needs revising too.
-What a mess.*/
/obj/machinery/computer/secure_data/Topic(href, href_list)
if(..())
return 1
- if(!( data_core.general.Find(active1) ))
+
+ if(!data_core.general.Find(active1))
active1 = null
- if(!( data_core.security.Find(active2) ))
+ if(!data_core.security.Find(active2))
active2 = null
- if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
- usr.set_machine(src)
- switch(href_list["choice"])
-// SORTING!
- if("Sorting")
- // Reverse the order if clicked twice
- if(sortBy == href_list["sort"])
- if(order == 1)
- order = -1
- else
- order = 1
+
+ if(href_list["temp"])
+ temp = null
+
+ if(href_list["temp_action"])
+ if(href_list["temp_action"])
+ var/temp_href = splittext(href_list["temp_action"], "=")
+ switch(temp_href[1])
+ if("del_all2")
+ for(var/datum/data/record/R in data_core.security)
+ qdel(R)
+ setTemp("All records deleted. ")
+ if("del_r2")
+ if(active2)
+ qdel(active2)
+ if("del_rg2")
+ if(active1)
+ for(var/datum/data/record/R in data_core.medical)
+ if(R.fields["name"] == active1.fields["name"] && R.fields["id"] == active1.fields["id"])
+ qdel(R)
+ qdel(active1)
+ active1 = null
+ if(active2)
+ qdel(active2)
+ active2 = null
+ screen = SEC_DATA_R_LIST
+ if("criminal")
+ if(active2)
+ switch(temp_href[2])
+ if("none")
+ active2.fields["criminal"] = "None"
+ if("arrest")
+ active2.fields["criminal"] = "*Arrest*"
+ if("incarcerated")
+ active2.fields["criminal"] = "Incarcerated"
+ if("parolled")
+ active2.fields["criminal"] = "Parolled"
+ if("released")
+ active2.fields["criminal"] = "Released"
+
+ for(var/mob/living/carbon/human/H in mob_list)
+ H.sec_hud_set_security_status()
+ if("rank")
+ if(active1)
+ active1.fields["rank"] = temp_href[2]
+ if(temp_href[2] in joblist)
+ active1.fields["real_rank"] = temp_href[2]
+
+ if(href_list["scan"])
+ if(scan)
+ scan.forceMove(loc)
+ if(ishuman(usr) && !usr.get_active_hand())
+ usr.put_in_hands(scan)
+ scan = null
+ else
+ var/obj/item/I = usr.get_active_hand()
+ if(istype(I, /obj/item/weapon/card/id))
+ usr.drop_item()
+ I.forceMove(src)
+ scan = I
+
+ if(href_list["login"])
+ if(isAI(usr))
+ authenticated = usr.name
+ rank = "AI"
+ else if(isrobot(usr))
+ authenticated = usr.name
+ var/mob/living/silicon/robot/R = usr
+ rank = "[R.modtype] [R.braintype]"
+ else if(istype(scan, /obj/item/weapon/card/id))
+ if(check_access(scan))
+ authenticated = scan.registered_name
+ rank = scan.assignment
+
+ if(authenticated)
+ active1 = null
+ active2 = null
+ screen = SEC_DATA_R_LIST
+
+ if(authenticated)
+ var/incapable = (usr.stat || usr.restrained() || (!in_range(src, usr) && !issilicon(usr)))
+ if(href_list["logout"])
+ authenticated = null
+ screen = null
+ active1 = null
+ active2 = null
+
+ else if(href_list["sort"])
+ // Reverse the order if clicked twice
+ if(sortBy == href_list["sort"])
+ if(order == 1)
+ order = -1
else
- // New sorting order!
- sortBy = href_list["sort"]
- order = initial(order)
-//BASIC FUNCTIONS
- if("Clear Screen")
- temp = null
+ order = 1
+ else
+ sortBy = href_list["sort"]
+ order = initial(order)
- if("Return")
- screen = 1
- active1 = null
- active2 = null
+ else if(href_list["screen"])
+ screen = text2num(href_list["screen"])
+ if(screen < 1)
+ screen = SEC_DATA_R_LIST
- if("Confirm Identity")
- if(scan)
- if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand())
- usr.put_in_hands(scan)
- else
- scan.loc = get_turf(src)
- scan = null
- else
- var/obj/item/I = usr.get_active_hand()
- if(istype(I, /obj/item/weapon/card/id))
- usr.drop_item()
- I.loc = src
- scan = I
+ active1 = null
+ active2 = null
- if("Log Out")
- authenticated = null
- screen = null
- active1 = null
- active2 = null
+ else if(href_list["d_rec"])
+ var/datum/data/record/R = locate(href_list["d_rec"])
+ var/datum/data/record/M = locate(href_list["d_rec"])
+ if(!data_core.general.Find(R))
+ setTemp("Record not found! ")
+ return 1
+ for(var/datum/data/record/E in data_core.security)
+ if(E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])
+ M = E
+ active1 = R
+ active2 = M
+ screen = SEC_DATA_RECORD
- if("Log In")
- if(istype(usr, /mob/living/silicon/ai))
- src.active1 = null
- src.active2 = null
- src.authenticated = usr.name
- src.rank = "AI"
- src.screen = 1
- else if(istype(usr, /mob/living/silicon/robot))
- src.active1 = null
- src.active2 = null
- src.authenticated = usr.name
- var/mob/living/silicon/robot/R = usr
- src.rank = R.braintype
- src.screen = 1
- else if(istype(scan, /obj/item/weapon/card/id))
- active1 = null
- active2 = null
- if(check_access(scan))
- authenticated = scan.registered_name
- rank = scan.assignment
- screen = 1
-//RECORD FUNCTIONS
- if("Record Maintenance")
- screen = 2
- active1 = null
- active2 = null
-
- if("Browse Record")
- var/datum/data/record/R = locate(href_list["d_rec"])
- var/S = locate(href_list["d_rec"])
- if(!( data_core.general.Find(R) ))
- temp = "Record Not Found!"
- else
- for(var/datum/data/record/E in data_core.security)
- if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
- S = E
+ /*else if("s_fingerprint")
+ var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text
+ if(!t1 || usr.stat || !authenticated || usr.restrained() || (!in_range(src, usr) && (!issilicon(usr)))
+ return
+ active1 = null
+ active2 = null
+ t1 = lowertext(t1)
+ for(var/datum/data/record/R in data_core.general)
+ if(lowertext(R.fields["fingerprint"]) == t1)
active1 = R
- active2 = S
- screen = 3
+ if(!active1)
+ setTemp("Could not locate record [t1].")
+ else
+ for(var/datum/data/record/E in data_core.security)
+ if((E.fields["name"] == active1.fields["name"] && E.fields["id"] == active1.fields["id"]))
+ active2 = E
+ screen = SEC_DATA_RECORD */
-/* if("Search Fingerprints")
- var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text
- if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))
- return
- active1 = null
- active2 = null
- t1 = lowertext(t1)
- for(var/datum/data/record/R in data_core.general)
- if(lowertext(R.fields["fingerprint"]) == t1)
- active1 = R
- if(!( active1 ))
- temp = text("Could not locate record [].", t1)
+ else if(href_list["del_all"])
+ var/list/buttons = list()
+ buttons[++buttons.len] = list("name" = "Yes", "icon" = "check", "href" = "del_all2=1", "status" = null)
+ buttons[++buttons.len] = list("name" = "No", "icon" = "times", "href" = null, "status" = null)
+ setTemp("Are you sure you wish to delete all records? ", buttons)
+
+ else if(href_list["del_rg"])
+ if(active1)
+ var/list/buttons = list()
+ buttons[++buttons.len] = list("name" = "Yes", "icon" = "check", "href" = "del_rg2=1", "status" = null)
+ buttons[++buttons.len] = list("name" = "No", "icon" = "times", "href" = null, "status" = null)
+ setTemp("Are you sure you wish to delete the record (ALL)? ", buttons)
+
+ else if(href_list["del_r"])
+ if(active1)
+ var/list/buttons = list()
+ buttons[++buttons.len] = list("name" = "Yes", "icon" = "check", "href" = "del_r2=1", "status" = null)
+ buttons[++buttons.len] = list("name" = "No", "icon" = "times", "href" = null, "status" = null)
+ setTemp("Are you sure you wish to delete the record (Security Portion Only)? ", buttons)
+
+ else if(href_list["new_s"])
+ if(istype(active1, /datum/data/record) && !istype(active2, /datum/data/record))
+ var/datum/data/record/R = new /datum/data/record()
+ R.fields["name"] = active1.fields["name"]
+ R.fields["id"] = active1.fields["id"]
+ R.name = "Security Record #[R.fields["id"]]"
+ R.fields["criminal"] = "None"
+ R.fields["mi_crim"] = "None"
+ R.fields["mi_crim_d"] = "No minor crime convictions."
+ R.fields["ma_crim"] = "None"
+ R.fields["ma_crim_d"] = "No major crime convictions."
+ R.fields["notes"] = "No notes."
+ data_core.security += R
+ active2 = R
+ screen = SEC_DATA_RECORD
+
+ else if(href_list["new_g"])
+ var/datum/data/record/G = new /datum/data/record()
+ G.fields["name"] = "New Record"
+ G.fields["id"] = "[add_zero(num2hex(rand(1, 1.6777215E7)), 6)]"
+ G.fields["rank"] = "Unassigned"
+ G.fields["real_rank"] = "Unassigned"
+ G.fields["sex"] = "Male"
+ G.fields["age"] = "Unknown"
+ G.fields["fingerprint"] = "Unknown"
+ G.fields["p_stat"] = "Active"
+ G.fields["m_stat"] = "Stable"
+ G.fields["species"] = "Human"
+ data_core.general += G
+ active1 = G
+ active2 = null
+
+ else if(href_list["print_r"])
+ if(!printing)
+ printing = 1
+ playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
+ sleep(50)
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
+ P.info = "Security Record "
+ if(istype(active1, /datum/data/record) && data_core.general.Find(active1))
+ P.info += {"Name: [active1.fields["name"]] ID: [active1.fields["id"]]
+ \nSex: [active1.fields["sex"]]
+ \nAge: [active1.fields["age"]]
+ \nFingerprint: [active1.fields["fingerprint"]]
+ \nPhysical Status: [active1.fields["p_stat"]]
+ \nMental Status: [active1.fields["m_stat"]] "}
else
- for(var/datum/data/record/E in data_core.security)
- if((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"]))
- active2 = E
- screen = 3 */
+ P.info += "General Record Lost! "
+ if(istype(active2, /datum/data/record) && data_core.security.Find(active2))
+ P.info += {" \nSecurity Data
+ \nCriminal Status: [active2.fields["criminal"]] \n
+ \nMinor Crimes: [active2.fields["mi_crim"]]
+ \nDetails: [active2.fields["mi_crim_d"]] \n
+ \nMajor Crimes: [active2.fields["ma_crim"]]
+ \nDetails: [active2.fields["ma_crim_d"]] \n
+ \nImportant Notes:
+ \n\t[active2.fields["notes"]] \n \nComments/Log "}
+ for(var/c in active2.fields["comments"])
+ P.info += "[c] "
+ else
+ P.info += "Security Record Lost! "
+ P.info += ""
+ P.name = "paper - 'Security Record'"
+ printing = 0
- if("Print Record")
- if(!( printing ))
- printing = 1
- playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
- sleep(50)
- var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
- P.info = "Security Record "
- if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
- P.info += text("Name: [] ID: [] \nSex: [] \nAge: [] \nFingerprint: [] \nPhysical Status: [] \nMental Status: [] ", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"], active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
- else
- P.info += "General Record Lost! "
- if((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
- P.info += text(" \nSecurity Data \nCriminal Status: [] \n \nMinor Crimes: [] \nDetails: [] \n \nMajor Crimes: [] \nDetails: [] \n \nImportant Notes: \n\t[] \n \nComments/Log ", active2.fields["criminal"], active2.fields["mi_crim"], active2.fields["mi_crim_d"], active2.fields["ma_crim"], active2.fields["ma_crim_d"], active2.fields["notes"])
- var/counter = 1
- while(active2.fields[text("com_[]", counter)])
- P.info += text("[] ", active2.fields[text("com_[]", counter)])
- counter++
- else
- P.info += "Security Record Lost! "
- P.info += ""
- P.name = "paper - 'Security Record'"
- printing = null
+ else if(href_list["print_p"])
+ if(!printing)
+ printing = 1
+ playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
+ sleep(50)
+ if(istype(active1, /datum/data/record) && data_core.general.Find(active1))
+ create_record_photo(active1)
+ printing = 0
- if("Print Photo")
- if(!printing)
- printing = 1
- playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
- sleep(50)
- if(istype(active1, /datum/data/record) && data_core.general.Find(active1))
- create_record_photo(active1)
- printing = null
-
-//RECORD DELETE
- if("Delete All Records")
- temp = ""
- temp += "Are you sure you wish to delete all Security records? "
- temp += "Yes "
- temp += "No "
-
- if("Purge All Records")
- for(var/datum/data/record/R in data_core.security)
- qdel(R)
- temp = "All Security records deleted."
-
- if("Add Entry")
- if(!( istype(active2, /datum/data/record) ))
- return
+ else if(href_list["add_c"])
+ if(istype(active2, /datum/data/record))
var/a2 = active2
- var/t1 = copytext(trim(sanitize(input("Add Comment:", "Secure. records", null, null) as message)),1,MAX_MESSAGE_LEN)
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
- return
- var/counter = 1
- while(active2.fields[text("com_[]", counter)])
- counter++
- active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [worldtime2text()] [t1]")
+ var/t1 = copytext(trim(sanitize(input("Add Comment:", "Secure. records", null, null) as message)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || incapable || active2 != a2)
+ return 1
+ active2.fields["comments"] += "Made by [authenticated] ([rank]) on [current_date_string] [worldtime2text()] [t1]"
- if("Delete Record (ALL)")
- if(active1)
- temp = "Are you sure you wish to delete the record (ALL)? "
- temp += "Yes "
- temp += "No "
+ else if(href_list["del_c"])
+ var/index = min(max(text2num(href_list["del_c"]) + 1, 1), length(active2.fields["comments"]))
+ if(istype(active2, /datum/data/record) && active2.fields["comments"][index])
+ active2.fields["comments"] -= active2.fields["comments"][index]
- if("Delete Record (Security)")
- if(active2)
- temp = "Are you sure you wish to delete the record (Security Portion Only)? "
- temp += "Yes "
- temp += "No "
-
- if("Delete Entry")
- if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
- active2.fields[text("com_[]", href_list["del_c"])] = "Deleted "
-//RECORD CREATE
- if("New Record (Security)")
- if((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) )))
- var/datum/data/record/R = new /datum/data/record()
- R.fields["name"] = active1.fields["name"]
- R.fields["id"] = active1.fields["id"]
- R.name = text("Security Record #[]", R.fields["id"])
- R.fields["criminal"] = "None"
- R.fields["mi_crim"] = "None"
- R.fields["mi_crim_d"] = "No minor crime convictions."
- R.fields["ma_crim"] = "None"
- R.fields["ma_crim_d"] = "No major crime convictions."
- R.fields["notes"] = "No notes."
- data_core.security += R
- active2 = R
- screen = 3
-
- if("New Record (General)")
- var/datum/data/record/G = new /datum/data/record()
- G.fields["name"] = "New Record"
- G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
- G.fields["rank"] = "Unassigned"
- G.fields["real_rank"] = "Unassigned"
- G.fields["sex"] = "Male"
- G.fields["age"] = "Unknown"
- G.fields["fingerprint"] = "Unknown"
- G.fields["p_stat"] = "Active"
- G.fields["m_stat"] = "Stable"
- G.fields["species"] = "Human"
- data_core.general += G
- active1 = G
- active2 = null
-
-//FIELD FUNCTIONS
- if("Edit Field")
- var/a1 = active1
- var/a2 = active2
- switch(href_list["field"])
- if("name")
- if(istype(active1, /datum/data/record))
- var/t1 = reject_bad_name(input("Please input name:", "Secure. records", active1.fields["name"], null) as text)
- if((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1)
- return
- active1.fields["name"] = t1
- if("id")
+ if(href_list["field"])
+ if(incapable)
+ return 1
+ var/a1 = active1
+ var/a2 = active2
+ switch(href_list["field"])
+ if("name")
+ if(istype(active1, /datum/data/record))
+ var/t1 = reject_bad_name(input("Please input name:", "Secure. records", active1.fields["name"], null) as text)
+ if(!t1 || !length(trim(t1)) || incapable || active1 != a1)
+ return 1
+ active1.fields["name"] = t1
if(istype(active2, /datum/data/record))
- var/t1 = copytext(trim(sanitize(input("Please input id:", "Secure. records", active1.fields["id"], null) as text)),1,MAX_MESSAGE_LEN)
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
- return
- active1.fields["id"] = t1
- if("fingerprint")
- if(istype(active1, /datum/data/record))
- var/t1 = copytext(trim(sanitize(input("Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) as text)),1,MAX_MESSAGE_LEN)
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
- return
- active1.fields["fingerprint"] = t1
- if("sex")
- if(istype(active1, /datum/data/record))
- if(active1.fields["sex"] == "Male")
- active1.fields["sex"] = "Female"
- else
- active1.fields["sex"] = "Male"
- if("age")
- if(istype(active1, /datum/data/record))
- var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
- return
- active1.fields["age"] = t1
- if("mi_crim")
+ active2.fields["name"] = t1
+ if("id")
+ if(istype(active1, /datum/data/record))
+ var/t1 = copytext(trim(sanitize(input("Please input id:", "Secure. records", active1.fields["id"], null) as text)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || incapable || active1 != a1)
+ return 1
+ active1.fields["id"] = t1
if(istype(active2, /datum/data/record))
- var/t1 = copytext(trim(sanitize(input("Please input minor crimes list:", "Secure. records", active2.fields["mi_crim"], null) as text)),1,MAX_MESSAGE_LEN)
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
- return
- active2.fields["mi_crim"] = t1
- if("mi_crim_d")
- if(istype(active2, /datum/data/record))
- var/t1 = copytext(trim(sanitize(input("Please summarize minor crimes:", "Secure. records", active2.fields["mi_crim_d"], null) as message)),1,MAX_MESSAGE_LEN)
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
- return
- active2.fields["mi_crim_d"] = t1
- if("ma_crim")
- if(istype(active2, /datum/data/record))
- var/t1 = copytext(trim(sanitize(input("Please input major crimes list:", "Secure. records", active2.fields["ma_crim"], null) as text)),1,MAX_MESSAGE_LEN)
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
- return
- active2.fields["ma_crim"] = t1
- if("ma_crim_d")
- if(istype(active2, /datum/data/record))
- var/t1 = copytext(trim(sanitize(input("Please summarize major crimes:", "Secure. records", active2.fields["ma_crim_d"], null) as message)),1,MAX_MESSAGE_LEN)
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
- return
- active2.fields["ma_crim_d"] = t1
- if("notes")
- if(istype(active2, /datum/data/record))
- var/t1 = copytext(html_encode(trim(input("Please summarize notes:", "Secure. records", html_decode(active2.fields["notes"]), null) as message)),1,MAX_MESSAGE_LEN)
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
- return
- active2.fields["notes"] = t1
- if("criminal")
- if(istype(active2, /datum/data/record))
- temp = "Criminal Status: "
- temp += ""
- if("rank")
- var/list/L = list( "Head of Personnel", "Captain", "AI" )
- //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
- if((istype(active1, /datum/data/record) && L.Find(rank)))
- temp = "Rank: "
- temp += ""
- for(var/rank in joblist)
- temp += "[rank] "
- temp += " "
+ active2.fields["id"] = t1
+ if("fingerprint")
+ if(istype(active1, /datum/data/record))
+ var/t1 = copytext(trim(sanitize(input("Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) as text)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || incapable || active1 != a1)
+ return 1
+ active1.fields["fingerprint"] = t1
+ if("sex")
+ if(istype(active1, /datum/data/record))
+ if(active1.fields["sex"] == "Male")
+ active1.fields["sex"] = "Female"
else
- alert(usr, "You do not have the required rank to do this!")
- if("species")
- if(istype(active1, /datum/data/record))
- var/t1 = copytext(trim(sanitize(input("Please enter race:", "General records", active1.fields["species"], null) as message)),1,MAX_MESSAGE_LEN)
- if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
- return
- active1.fields["species"] = t1
-
-//TEMPORARY MENU FUNCTIONS
- else//To properly clear as per clear screen.
- temp=null
- switch(href_list["choice"])
- if("Change Rank")
- if(active1)
- active1.fields["rank"] = href_list["rank"]
- if(href_list["rank"] in joblist)
- active1.fields["real_rank"] = href_list["real_rank"]
-
- if("Change Criminal Status")
- if(active2)
- switch(href_list["criminal2"])
- if("none")
- active2.fields["criminal"] = "None"
- if("arrest")
- active2.fields["criminal"] = "*Arrest*"
- if("incarcerated")
- active2.fields["criminal"] = "Incarcerated"
- if("parolled")
- active2.fields["criminal"] = "Parolled"
- if("released")
- active2.fields["criminal"] = "Released"
-
- for(var/mob/living/carbon/human/H in mob_list)
- H.sec_hud_set_security_status()
-
- if("Delete Record (Security) Execute")
- if(active2)
- qdel(active2)
-
- if("Delete Record (ALL) Execute")
- if(active1)
- for(var/datum/data/record/R in data_core.medical)
- if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
- qdel(R)
- else
- qdel(active1)
- if(active2)
- qdel(active2)
+ active1.fields["sex"] = "Male"
+ if("age")
+ if(istype(active1, /datum/data/record))
+ var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
+ if(!t1 || incapable || active1 != a1)
+ return 1
+ active1.fields["age"] = t1
+ if("mi_crim")
+ if(istype(active2, /datum/data/record))
+ var/t1 = copytext(trim(sanitize(input("Please input minor crimes list:", "Secure. records", active2.fields["mi_crim"], null) as text)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || incapable || active2 != a2)
+ return 1
+ active2.fields["mi_crim"] = t1
+ if("mi_crim_d")
+ if(istype(active2, /datum/data/record))
+ var/t1 = copytext(trim(sanitize(input("Please summarize minor crimes:", "Secure. records", active2.fields["mi_crim_d"], null) as message)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || incapable || active2 != a2)
+ return 1
+ active2.fields["mi_crim_d"] = t1
+ if("ma_crim")
+ if(istype(active2, /datum/data/record))
+ var/t1 = copytext(trim(sanitize(input("Please input major crimes list:", "Secure. records", active2.fields["ma_crim"], null) as text)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || incapable || active2 != a2)
+ return 1
+ active2.fields["ma_crim"] = t1
+ if("ma_crim_d")
+ if(istype(active2, /datum/data/record))
+ var/t1 = copytext(trim(sanitize(input("Please summarize major crimes:", "Secure. records", active2.fields["ma_crim_d"], null) as message)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || incapable || active2 != a2)
+ return 1
+ active2.fields["ma_crim_d"] = t1
+ if("notes")
+ if(istype(active2, /datum/data/record))
+ var/t1 = copytext(html_encode(trim(input("Please summarize notes:", "Secure. records", html_decode(active2.fields["notes"]), null) as message)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || incapable || active2 != a2)
+ return 1
+ active2.fields["notes"] = t1
+ if("criminal")
+ if(istype(active2, /datum/data/record))
+ var/list/buttons = list()
+ buttons[++buttons.len] = list("name" = "None", "icon" = "unlock", "href" = "criminal=none", "status" = (active2.fields["criminal"] == "None" ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "*Arrest*", "icon" = "lock", "href" = "criminal=arrest", "status" = (active2.fields["criminal"] == "*Arrest*" ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "Incarcerated", "icon" = "lock", "href" = "criminal=incarcerated", "status" = (active2.fields["criminal"] == "Incarcerated" ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "Parolled", "icon" = "unlock-alt", "href" = "criminal=parolled", "status" = (active2.fields["criminal"] == "Parolled" ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "Released", "icon" = "unlock", "href" = "criminal=released", "status" = (active2.fields["criminal"] == "Released" ? "selected" : null))
+ setTemp("Criminal Status ", buttons)
+ if("rank")
+ var/list/L = list("Head of Personnel", "Captain", "AI")
+ //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
+ if(istype(active1, /datum/data/record) && L.Find(rank))
+ var/list/buttons = list()
+ for(var/rank in joblist)
+ buttons[++buttons.len] = list("name" = rank, "icon" = null, "href" = "rank=[rank]", "status" = (active1.fields["rank"] == rank ? "selected" : null))
+ setTemp("Rank ", buttons)
else
- temp = "This function does not appear to be working at the moment. Our apologies."
+ setTemp("You do not have the required rank to do this! ")
+ if("species")
+ if(istype(active1, /datum/data/record))
+ var/t1 = copytext(trim(sanitize(input("Please enter race:", "General records", active1.fields["species"], null) as message)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || incapable || active1 != a1)
+ return 1
+ active1.fields["species"] = t1
+ return 1
- add_fingerprint(usr)
- updateUsrDialog()
- return
+/obj/machinery/computer/secure_data/proc/setTemp(text, list/buttons = list())
+ temp = list("text" = text, "buttons" = buttons, "has_buttons" = buttons.len > 0)
/obj/machinery/computer/secure_data/proc/create_record_photo(datum/data/record/R)
// basically copy-pasted from the camera code but different enough that it has to be redone
@@ -568,8 +482,8 @@ What a mess.*/
var/icon/pc = icon('icons/obj/bureaucracy.dmi', "photo")
small_img.Scale(8, 8)
tiny_img.Scale(4, 4)
- ic.Blend(small_img,ICON_OVERLAY, 10, 13)
- pc.Blend(tiny_img,ICON_OVERLAY, 12, 19)
+ ic.Blend(small_img, ICON_OVERLAY, 10, 13)
+ pc.Blend(tiny_img, ICON_OVERLAY, 12, 19)
var/datum/picture/P = new()
P.fields["name"] = "File Photo - [R.fields["name"]]"
@@ -582,8 +496,8 @@ What a mess.*/
P.fields["pixel_y"] = rand(-10, 10)
P.fields["size"] = 2
- var/obj/item/weapon/photo/Photo = new/obj/item/weapon/photo(loc)
- Photo.construct(P)
+ var/obj/item/weapon/photo/PH = new/obj/item/weapon/photo(loc)
+ PH.construct(P)
/obj/machinery/computer/secure_data/proc/get_record_photo(datum/data/record/R)
// similar to the code to make a photo, but of course the actual rendering is completely different
@@ -607,7 +521,7 @@ What a mess.*/
if(1)
R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]"
if(2)
- R.fields["sex"] = pick("Male", "Female")
+ R.fields["sex"] = pick("Male", "Female")
if(3)
R.fields["age"] = rand(5, 85)
if(4)
@@ -627,3 +541,7 @@ What a mess.*/
/obj/machinery/computer/secure_data/detective_computer
icon = 'icons/obj/computer.dmi'
icon_state = "messyfiles"
+
+#undef SEC_DATA_R_LIST
+#undef SEC_DATA_MAINT
+#undef SEC_DATA_RECORD
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 7e54aebf396..783c8cc9062 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -923,12 +923,11 @@
if(R.fields["id"] == E.fields["id"])
if(hasHUD(usr,"security"))
read = 1
- var/counter = 1
- while(R.fields[text("com_[]", counter)])
- to_chat(usr, text("[]", R.fields[text("com_[]", counter)]))
- counter++
- if(counter == 1)
- to_chat(usr, "No comment found")
+ if(length(R.fields["comments"]))
+ for(var/c in R.fields["comments"])
+ to_chat(usr, c)
+ else
+ to_chat(usr, "No comment found ")
to_chat(usr, "\[Add comment\] ")
if(!read)
@@ -950,21 +949,18 @@
for(var/datum/data/record/R in data_core.security)
if(R.fields["id"] == E.fields["id"])
if(hasHUD(usr,"security"))
- var/t1 = sanitize(copytext(input("Add Comment:", "Sec. records", null, null) as message,1,MAX_MESSAGE_LEN))
- if( !(t1) || usr.stat || usr.restrained() || !(hasHUD(usr,"security")) )
+ var/t1 = copytext(trim(sanitize(input("Add Comment:", "Sec. records", null, null) as message)), 1, MAX_MESSAGE_LEN)
+ if(!t1 || usr.stat || usr.restrained() || !hasHUD(usr, "security"))
return
- var/counter = 1
- while(R.fields[text("com_[]", counter)])
- counter++
- if(istype(usr,/mob/living/carbon/human))
+ if(ishuman(usr))
var/mob/living/carbon/human/U = usr
- R.fields[text("com_[counter]")] = text("Made by [U.get_authentification_name()] ([U.get_assignment()]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year] [t1]")
- if(istype(usr,/mob/living/silicon/robot))
+ R.fields["comments"] += "Made by [U.get_authentification_name()] ([U.get_assignment()]) on [current_date_string] [worldtime2text()] [t1]"
+ if(isrobot(usr))
var/mob/living/silicon/robot/U = usr
- R.fields[text("com_[counter]")] = text("Made by [U.name] ([U.modtype] [U.braintype]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year] [t1]")
- if(istype(usr,/mob/living/silicon/ai))
+ R.fields["comments"] += "Made by [U.name] ([U.modtype] [U.braintype]) on [current_date_string] [worldtime2text()] [t1]"
+ if(isAI(usr))
var/mob/living/silicon/ai/U = usr
- R.fields[text("com_[counter]")] = text("Made by [U.name] (artificial intelligence) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year] [t1]")
+ R.fields["comments"] += "Made by [U.name] (artificial intelligence) on [current_date_string] [worldtime2text()] [t1]"
if(href_list["medical"])
if(hasHUD(usr,"medical"))
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 0fe3a6e75a4..afc635222d7 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -110,17 +110,15 @@
for(var/datum/data/record/G in data_core.general)
var/datum/data/record/S
for(var/datum/data/record/R in data_core.security)
- if((R.fields["name"] == G.fields["name"] || R.fields["id"] == G.fields["id"]))
+ if(R.fields["name"] == G.fields["name"] || R.fields["id"] == G.fields["id"])
S = R
break
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src)
P.info = "Security Record "
P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]] \nSex: [G.fields["sex"]] \nAge: [G.fields["age"]] \nFingerprint: [G.fields["fingerprint"]] \nPhysical Status: [G.fields["p_stat"]] \nMental Status: [G.fields["m_stat"]] "
P.info += " \nSecurity Data \nCriminal Status: [S.fields["criminal"]] \n \nMinor Crimes: [S.fields["mi_crim"]] \nDetails: [S.fields["mi_crim_d"]] \n \nMajor Crimes: [S.fields["ma_crim"]] \nDetails: [S.fields["ma_crim_d"]] \n \nImportant Notes: \n\t[S.fields["notes"]] \n \nComments/Log "
- var/counter = 1
- while(S.fields["com_[counter]"])
- P.info += "[S.fields["com_[counter]"]] "
- counter++
+ for(var/c in S.fields["comments"])
+ P.info += "[c] "
P.info += ""
P.name = "paper - '[G.fields["name"]]'"
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
diff --git a/nano/templates/secure_data.tmpl b/nano/templates/secure_data.tmpl
new file mode 100644
index 00000000000..3ad05868fc5
--- /dev/null
+++ b/nano/templates/secure_data.tmpl
@@ -0,0 +1,230 @@
+
+
+
+
+{{if !data.temp && data.screen == 1}}
+
+{{/if}}
+
+
+
+
+ Confirm Identity:
+
+
+ {{:helper.link(data.scan ? data.scan : "----------", 'eject', {'scan' : 1}, null, data.scan ? 'itemContentWide' : 'fixedLeft')}}
+
+
+
+{{if data.authenticated}}
+ {{if data.screen == 1}}
+
+
{{:helper.link('New Record', 'plus', {'new_g' : 1})}}
+
+ Record List
+
+
+
+
+
+
+ {{:helper.link('Name', null, {'sort' : 'name'}, null, 'infoButton')}}
+ {{:helper.link('ID', null, {'sort' : 'id'}, null, 'infoButton')}}
+ {{:helper.link('Rank', null, {'sort' : 'rank'}, null, 'infoButton')}}
+ {{:helper.link('Fingerprints', null, {'sort' : 'fingerprint'}, null, 'infoButton')}}
+ {{:helper.link('Criminal Status', null, {'sort' : 'name'}, null, 'infoButton')}}
+
+
+
+ {{for data.records}}
+
+ {{:helper.link(value.name, 'user', {'d_rec' : value.ref}, null, 'infoButton')}}
+ {{:value.id}}
+ {{:value.rank}}
+ {{:value.fingerprint}}
+ {{:value.crimstat}}
+
+ {{/for}}
+
+
+
+
+ Menu
+ {{:helper.link('Record Maintenance', 'wrench', {'screen' : 2})}}
+ {{:helper.link('Logout', 'lock', {'logout' : 1})}}
+ {{else data.screen == 2}}
+ Records Maintenance
+ {{:helper.link('Backup To Disk', 'download', {'back' : 1}, 'disabled')}}
+ {{:helper.link('Upload From disk', 'upload', {'u_load' : 1}, 'disabled')}}
+ {{:helper.link('Delete All Records', 'trash', {'del_all' : 1})}}
+ {{:helper.link('Back', 'arrow-left', {'screen' : 1})}}
+ {{else data.screen == 3}}
+ Security Record
+ General Data
+ {{if data.general.empty}}
+ General Record Lost!
+ {{else}}
+
+
+
+ {{for data.general.fields}}
+
+
+ {{:value.field}}
+
+
+ {{:helper.link(value.value, value.edit ? 'pencil' : 'user-times', {'field' : value.edit}, value.edit ? null : 'disabled')}}
+
+
+ {{/for}}
+
+
+ {{if data.general.has_photos}}
+
+
{{:helper.link('Print photo', 'camera', {'print_p' : 1})}}
+
+ {{for data.general.photos}}
+ {{if value.photo}}
+
+ {{/if}}
+ {{/for}}
+ {{/if}}
+
+
+
+ {{/if}}
+
+ Security Data
+ {{if data.security.empty}}
+ Security Record Lost!
+
+
{{:helper.link('New Record', 'plus', {'new_s' : 1})}}
+
+ Menu
+ {{else}}
+ {{for data.security.fields}}
+
+
+ {{:value.field}}
+
+
+ {{:helper.link(value.value, 'pencil', {'field' : value.edit})}}
+
+
+ {{if value.line_break}}
+
+ {{/if}}
+ {{/for}}
+
+ Comments/Log
+ {{for data.security.comments}}
+ {{:value}}
+ {{:helper.link('Remove entry', 'trash', {'del_c' : index})}}
+
+ {{/for}}
+
+
+
{{:helper.link('Add Entry', 'plus', {'add_c' : 1})}}
+
+
+ Menu
+ {{:helper.link('Delete Record (Security Only)', 'trash', {'del_r' : 1})}}
+ {{/if}}
+
+ {{:helper.link('Delete Record (All)', 'trash', {'del_rg' : 1})}}
+ {{:helper.link('Print Record', 'print', {'print_r' : 1})}}
+ {{:helper.link('Back', 'arrow-left', {'screen' : 1})}}
+ {{/if}}
+{{else}}
+ Menu
+ {{:helper.link('Login', 'unlock', {'login' : 1})}}
+{{/if}}
+
+{{if data.temp}}
+
+
+ {{if data.temp.notice}}
+
{{:data.temp.text}}
+ {{else}}
+
{{:data.temp.text}}
+ {{/if}}
+
+ {{if data.temp.has_buttons}}
+
+
+
+ {{for data.temp.buttons}}
+ {{:helper.link(value.name, value.icon, {'temp' : 1, 'temp_action' : value.href}, value.status)}}
+ {{/for}}
+
+
+
+ {{/if}}
+
+
+
{{:helper.link('Clear screen', 'home', {'temp' : 1})}}
+
+
+
+{{/if}}
\ No newline at end of file
From 58e0a1f1367cc084e500a850e4c1ca0b7b9bf225 Mon Sep 17 00:00:00 2001
From: davipatury
Date: Sat, 18 Feb 2017 16:05:21 -0200
Subject: [PATCH 2/3] little fix.
---
nano/templates/secure_data.tmpl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/nano/templates/secure_data.tmpl b/nano/templates/secure_data.tmpl
index 3ad05868fc5..00f89e17059 100644
--- a/nano/templates/secure_data.tmpl
+++ b/nano/templates/secure_data.tmpl
@@ -20,7 +20,7 @@ Used In File(s): \code\game\machinery\computer\security.dm
hidden.parent("td").parent("tr").show()
}
- if(filter.value == ""){
+ if(filter == ""){
return;
} else {
hidden = $("#maintable_data").children("tbody").children("tr").children("td").children("input").filter(function(index) {
From 26d5a016f08097e7362a745984964ebdd58933ed Mon Sep 17 00:00:00 2001
From: davipatury
Date: Sat, 25 Feb 2017 09:56:27 -0300
Subject: [PATCH 3/3] The same error in two pull requests.
---
code/game/machinery/computer/security.dm | 81 ++++++++++++------------
1 file changed, 40 insertions(+), 41 deletions(-)
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index e6b349cf661..bdb1110379d 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -134,48 +134,47 @@
temp = null
if(href_list["temp_action"])
- if(href_list["temp_action"])
- var/temp_href = splittext(href_list["temp_action"], "=")
- switch(temp_href[1])
- if("del_all2")
- for(var/datum/data/record/R in data_core.security)
- qdel(R)
- setTemp("All records deleted. ")
- if("del_r2")
- if(active2)
- qdel(active2)
- if("del_rg2")
- if(active1)
- for(var/datum/data/record/R in data_core.medical)
- if(R.fields["name"] == active1.fields["name"] && R.fields["id"] == active1.fields["id"])
- qdel(R)
- qdel(active1)
- active1 = null
- if(active2)
- qdel(active2)
- active2 = null
- screen = SEC_DATA_R_LIST
- if("criminal")
- if(active2)
- switch(temp_href[2])
- if("none")
- active2.fields["criminal"] = "None"
- if("arrest")
- active2.fields["criminal"] = "*Arrest*"
- if("incarcerated")
- active2.fields["criminal"] = "Incarcerated"
- if("parolled")
- active2.fields["criminal"] = "Parolled"
- if("released")
- active2.fields["criminal"] = "Released"
+ var/temp_href = splittext(href_list["temp_action"], "=")
+ switch(temp_href[1])
+ if("del_all2")
+ for(var/datum/data/record/R in data_core.security)
+ qdel(R)
+ setTemp("All records deleted. ")
+ if("del_r2")
+ if(active2)
+ qdel(active2)
+ if("del_rg2")
+ if(active1)
+ for(var/datum/data/record/R in data_core.medical)
+ if(R.fields["name"] == active1.fields["name"] && R.fields["id"] == active1.fields["id"])
+ qdel(R)
+ qdel(active1)
+ active1 = null
+ if(active2)
+ qdel(active2)
+ active2 = null
+ screen = SEC_DATA_R_LIST
+ if("criminal")
+ if(active2)
+ switch(temp_href[2])
+ if("none")
+ active2.fields["criminal"] = "None"
+ if("arrest")
+ active2.fields["criminal"] = "*Arrest*"
+ if("incarcerated")
+ active2.fields["criminal"] = "Incarcerated"
+ if("parolled")
+ active2.fields["criminal"] = "Parolled"
+ if("released")
+ active2.fields["criminal"] = "Released"
- for(var/mob/living/carbon/human/H in mob_list)
- H.sec_hud_set_security_status()
- if("rank")
- if(active1)
- active1.fields["rank"] = temp_href[2]
- if(temp_href[2] in joblist)
- active1.fields["real_rank"] = temp_href[2]
+ for(var/mob/living/carbon/human/H in mob_list)
+ H.sec_hud_set_security_status()
+ if("rank")
+ if(active1)
+ active1.fields["rank"] = temp_href[2]
+ if(temp_href[2] in joblist)
+ active1.fields["real_rank"] = temp_href[2]
if(href_list["scan"])
if(scan)