diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 384e9e80179..da754bf9937 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -1,4 +1,6 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+#define SKILL_DATA_R_LIST 1 // Record list
+#define SKILL_DATA_MAINT 2 // Records maintenance
+#define SKILL_DATA_RECORD 3 // Record
/obj/machinery/computer/skills//TODO:SANITY
name = "employment records console"
@@ -15,372 +17,281 @@
var/rank = null
var/screen = null
var/datum/data/record/active1 = 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
-/obj/machinery/computer/skills/attackby(obj/item/O as obj, user as mob, params)
+/obj/machinery/computer/skills/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/skills/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/skills/attack_hand(mob/user as mob)
+/obj/machinery/computer/skills/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)
- if(temp)
- dat = "[temp]
Clear Screen"
- else
- dat = text("Confirm Identity: []
", (scan ? text("[]", scan.name) : "----------"))
- if(authenticated)
- switch(screen)
- if(1.0)
- dat += {"
-"}
- dat += "Search Records
"
- dat += "New Record
"
- dat += {"
-
-
-
-
-| Name |
-ID |
-Rank |
-Fingerprints |
-
"}
- if(!isnull(data_core.general))
- for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
- for(var/datum/data/record/E in data_core.security)
- var/background
- dat += text("| [] | ", background, R, R.fields["name"])
- dat += text("[] | ", R.fields["id"])
- dat += text("[] | ", R.fields["rank"])
- dat += text("[] | ", R.fields["fingerprint"])
- dat += "
"
- dat += "Record Maintenance
"
- dat += "{Log Out}"
- if(2.0)
- dat += "Records Maintenance
"
- dat += "
Delete All Records
Back"
- if(3.0)
- dat += "Employment Record
"
- if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
- dat += text("")
- else
- dat += "General Record Lost!
"
- dat += "\nDelete Record (ALL)
\nPrint Record
\nBack
"
- if(4.0)
- if(!Perp.len)
- dat += "ERROR. String could not be located.
Back"
- else
- dat += {"
-
- "}
- dat += text("| Search Results for '[]': | ", tempname)
- dat += {"
-
-
-
-
-| Name |
-ID |
-Rank |
-Fingerprints |
-
"}
- for(var/i=1, i<=Perp.len, i += 2)
- var/crimstat = ""
- var/datum/data/record/R = Perp[i]
- if(istype(Perp[i+1],/datum/data/record/))
- var/datum/data/record/E = Perp[i+1]
- crimstat = E.fields["criminal"]
- var/background
- background = "'background-color:#00FF7F;'"
- dat += text("| [] | ", background, R, R.fields["name"])
- dat += text("[] | ", R.fields["id"])
- dat += text("[] | ", R.fields["rank"])
- dat += text("[] | ", R.fields["fingerprint"])
- dat += text("[] |
", crimstat)
- dat += "
"
- dat += "
Return to index."
+/obj/machinery/computer/skills/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "skills_data.tmpl", name, 800, 380)
+ ui.open()
+
+/obj/machinery/computer/skills/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(SKILL_DATA_R_LIST)
+ if(!isnull(data_core.general))
+ for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
+ data["records"] += list(list("ref" = "\ref[R]", "id" = R.fields["id"], "name" = R.fields["name"], "rank" = R.fields["rank"], "fingerprint" = R.fields["fingerprint"]))
+ if(SKILL_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"], "name" = "name")
+ fields[++fields.len] = list("field" = "ID:", "value" = active1.fields["id"], "name" = "id")
+ fields[++fields.len] = list("field" = "Sex:", "value" = active1.fields["sex"], "name" = "sex")
+ fields[++fields.len] = list("field" = "Age:", "value" = active1.fields["age"], "name" = "age")
+ fields[++fields.len] = list("field" = "Rank:", "value" = active1.fields["rank"], "name" = "rank")
+ fields[++fields.len] = list("field" = "Fingerprint:", "value" = active1.fields["fingerprint"], "name" = "fingerprint")
+ fields[++fields.len] = list("field" = "Physical Status:", "value" = active1.fields["p_stat"])
+ fields[++fields.len] = list("field" = "Mental Status:", "value" = active1.fields["m_stat"])
+ general["notes"] = active1.fields["notes"]
+ 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}"
- user << browse(text("Employment Records[]", dat), "window=secure_rec;size=600x400")
- onclose(user, "secure_rec")
- return
+ general["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/skills/Topic(href, href_list)
if(..())
return 1
- if(!( data_core.general.Find(active1) ))
+
+ if(!data_core.general.Find(active1))
active1 = 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/prm = splittext(href_list["temp_action"], "=")
+ switch(prm[1])
+ if("del_all2")
+ if(PDA_Manifest && PDA_Manifest.len)
+ PDA_Manifest.Cut()
+ for(var/datum/data/record/R in data_core.security)
+ qdel(R)
+ setTemp("All employment records deleted.
")
+ if("del_rg2")
+ if(active1)
+ if(PDA_Manifest && PDA_Manifest.len)
+ PDA_Manifest.Cut()
+ 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
+ screen = SKILL_DATA_R_LIST
+ if("rank")
+ if(active1)
+ if(PDA_Manifest && PDA_Manifest.len)
+ PDA_Manifest.Cut()
+ active1.fields["rank"] = prm[2]
+ if(prm[2] in joblist)
+ active1.fields["real_rank"] = prm[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
+ screen = SKILL_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
+
+ 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
+ else if(href_list["screen"])
+ screen = text2num(href_list["screen"])
+ if(screen < 1)
+ screen = SKILL_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
+ active1 = null
+
+ else if(href_list["d_rec"])
+ var/datum/data/record/R = locate(href_list["d_rec"])
+ if(!data_core.general.Find(R))
+ setTemp("Record not found!
")
+ return 1
+ active1 = R
+ screen = SKILL_DATA_RECORD
+
+ else if(href_list["del_all"])
+ var/list/buttons = list()
+ buttons[++buttons.len] = list("name" = "Yes", "icon" = "check", "val" = "del_all2=1", "status" = null)
+ buttons[++buttons.len] = list("name" = "No", "icon" = "times", "val" = null, "status" = null)
+ setTemp("Are you sure you wish to delete all employment records?
", buttons)
+
+ else if(href_list["del_rg"])
+ if(active1)
+ var/list/buttons = list()
+ buttons[++buttons.len] = list("name" = "Yes", "icon" = "check", "val" = "del_rg2=1", "status" = null)
+ buttons[++buttons.len] = list("name" = "No", "icon" = "times", "val" = null, "status" = null)
+ setTemp("Are you sure you wish to delete the record (ALL)?
", buttons)
+
+ else if(href_list["new_g"])
+ if(PDA_Manifest.len)
+ PDA_Manifest.Cut()
+ 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
+
+ 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 = "Employment 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"]]
+
\nEmployment/Skills Summary:[active1.fields["notes"]]
"}
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
+ P.info += "General Record Lost!
"
+ P.info += ""
+ P.name = "paper - 'Employment Record'"
+ printing = 0
- if("Log Out")
- authenticated = null
- screen = null
- active1 = null
-
- if("Log In")
- if(istype(usr, /mob/living/silicon/ai))
- src.active1 = null
- src.authenticated = usr.name
- src.rank = "AI"
- src.screen = 1
- else if(istype(usr, /mob/living/silicon/robot))
- src.active1 = 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
- if(check_access(scan))
- authenticated = scan.registered_name
- rank = scan.assignment
- screen = 1
-//RECORD FUNCTIONS
- if("Search Records")
- var/t1 = input("Search String: (Partial Name or ID or Fingerprints or Rank)", "Secure. records", null, null) as text
- if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || !in_range(src, usr)))
- return
- Perp = new/list()
- t1 = lowertext(t1)
- var/list/components = splittext(t1, " ")
- if(components.len > 5)
- return //Lets not let them search too greedily.
- for(var/datum/data/record/R in data_core.general)
- var/temptext = R.fields["name"] + " " + R.fields["id"] + " " + R.fields["fingerprint"] + " " + R.fields["rank"]
- for(var/i = 1, i<=components.len, i++)
- if(findtext(temptext,components[i]))
- var/prelist = new/list(2)
- prelist[1] = R
- Perp += prelist
- for(var/i = 1, i<=Perp.len, i+=2)
- for(var/datum/data/record/E in data_core.security)
- var/datum/data/record/R = Perp[i]
- if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
- Perp[i+1] = E
- tempname = t1
- screen = 4
-
- if("Record Maintenance")
- screen = 2
- active1 = null
-
- if("Browse Record")
- var/datum/data/record/R = 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)
- active1 = R
- screen = 3
-
- 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 = "Employment Record
"
- if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
- P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
\nEmployment/Skills Summary:[]
", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"], active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"], active1.fields["notes"])
- else
- P.info += "General Record Lost!
"
- P.info += ""
- P.name = "paper - 'Employment Record'"
- printing = null
-//RECORD DELETE
- if("Delete All Records")
- temp = ""
- temp += "Are you sure you wish to delete all Employment records?
"
- temp += "Yes
"
- temp += "No"
-
- if("Purge All Records")
- if(PDA_Manifest.len)
- PDA_Manifest.Cut()
- for(var/datum/data/record/R in data_core.security)
- qdel(R)
- temp = "All Employment records deleted."
-
- if("Delete Record (ALL)")
- if(active1)
- temp = "Are you sure you wish to delete the record (ALL)?
"
- temp += "Yes
"
- temp += "No"
-//RECORD CREATE
- if("New Record (General)")
-
- if(PDA_Manifest.len)
- PDA_Manifest.Cut()
- 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
-
-//FIELD FUNCTIONS
- if("Edit Field")
- var/a1 = active1
- 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(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 ) || !( 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("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 += "
"
+ if(href_list["field"])
+ if(incapable)
+ return 1
+ var/a1 = active1
+ 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("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("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)
- if(PDA_Manifest.len)
- PDA_Manifest.Cut()
- active1.fields["rank"] = href_list["rank"]
- if(href_list["rank"] in joblist)
- active1.fields["real_rank"] = href_list["real_rank"]
-
- if("Delete Record (ALL) Execute")
- if(active1)
- if(PDA_Manifest.len)
- PDA_Manifest.Cut()
- 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)
+ 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("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, "val" = "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/skills/proc/setTemp(text, list/buttons = list())
+ temp = list("text" = text, "buttons" = buttons, "has_buttons" = buttons.len > 0)
/obj/machinery/computer/skills/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
@@ -393,7 +304,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)
@@ -409,3 +320,7 @@ What a mess.*/
continue
..(severity)
+
+#undef SKILL_DATA_R_LIST
+#undef SKILL_DATA_MAINT
+#undef SKILL_DATA_RECORD
\ No newline at end of file
diff --git a/nano/templates/skills_data.tmpl b/nano/templates/skills_data.tmpl
new file mode 100644
index 00000000000..6f8fb1d6a0d
--- /dev/null
+++ b/nano/templates/skills_data.tmpl
@@ -0,0 +1,199 @@
+
+
+
+
+{{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')}} |
+
+
+
+ {{for data.records}}
+
+ | {{:helper.link(value.name, 'user', {'d_rec' : value.ref}, null, 'infoButton')}} |
+ {{:value.id}} |
+ {{:value.rank}} |
+ {{:value.fingerprint}} |
+
+ {{/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}}
+ Employment Record
+ General Data
+ {{if data.general.empty}}
+ General Record Lost!
+ {{else}}
+
+
+
+ {{for data.general.fields}}
+
+
+ {{:value.field}}
+
+
+ {{:helper.link(value.value, value.name ? 'pencil' : 'user-times', {'field' : value.name}, value.name ? null : 'disabled')}}
+
+
+ {{/for}}
+ |
+
+ {{if data.general.has_photos}}
+ {{for data.general.photos}}
+ {{if value.photo}}
+
+ {{/if}}
+ {{/for}}
+ {{/if}}
+ |
+
+
+
+ Employment Data
+
+
+ Employment/skills summary:
+
+
+ {{:data.general.notes ? data.general.notes : 'None'}}
+
+
+ {{/if}}
+ Menu
+ {{: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.val}, value.status)}}
+ {{/for}}
+
+
+
+ {{/if}}
+
+
+
{{:helper.link('Clear screen', 'home', {'temp' : 1})}}
+
+
+
+{{/if}}
\ No newline at end of file