diff --git a/code/modules/admin/tickets/admintickets.dm b/code/modules/admin/tickets/admintickets.dm
index 2582aa18e98..9fbaa9241d0 100644
--- a/code/modules/admin/tickets/admintickets.dm
+++ b/code/modules/admin/tickets/admintickets.dm
@@ -28,9 +28,9 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
//Return the ticket counter and increment
/datum/adminTicketHolder/proc/getTicketCounterAndInc()
- var/C = ticketCounter
+ . = ticketCounter
ticketCounter++
- return C
+ return
//Set the ticket counter to a value
/datum/adminTicketHolder/proc/setTicketCounter(var/N as num)
@@ -39,12 +39,12 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
/datum/adminTicketHolder/proc/purgeAllTickets() // Delete ALL tickets
QDEL_LIST(allTickets)
message_adminTicket("[usr.client] purged all admin tickets!")
- ticketCounter = 1
+ setTicketCounter(1)
/datum/adminTicketHolder/proc/closeAllOpenTickets() // Close all open tickets
for(var/i in allTickets)
var/datum/admin_ticket/T = i
- T.ticketState = ADMIN_TICKET_CLOSED
+ closeTicket(T.ticketNum)
//Open a new ticket and populate details then add to the list of open tickets
/datum/adminTicketHolder/proc/newTicket(var/client/C, var/passedContent)
@@ -115,6 +115,10 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
return T.clientName
+/datum/adminTicketHolder/proc/assignAdminToTicket(var/client/C, var/N as num)
+ var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
+ T.assignAdmin(C)
+
//Single admin ticket
/datum/admin_ticket
@@ -129,11 +133,12 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
var/ticketState // State of the ticket, open, closed, resolved etc
var/timeUntilStale // When the ticket goes stale
var/ticketCooldown // Cooldown before allowing the user to open another ticket.
+ var/adminAssigned // Admin who has assigned themselves to this ticket
/datum/admin_ticket/proc/beginStaleCount()
if(!src)
return
- while(world.time < timeUntilStale && !lastAdminResponse)
+ while(world.time < timeUntilStale && !lastAdminResponse && !adminAssigned)
sleep(200)
if(ticketState == ADMIN_TICKET_OPEN && world.time > timeUntilStale)
message_adminTicket("Ticket #[ticketNum] has been open for [ADMIN_TICKET_TIMEOUT * 0.1] seconds. Changing status to stale.")
@@ -156,4 +161,9 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
if(ADMIN_TICKET_CLOSED)
return "CLOSED"
if(ADMIN_TICKET_STALE)
- return "STALE"
\ No newline at end of file
+ return "STALE"
+
+/datum/admin_ticket/proc/assignAdmin(var/client/C)
+ if(!C)
+ return
+ adminAssigned = C
\ No newline at end of file
diff --git a/code/modules/admin/tickets/adminticketsUI.dm b/code/modules/admin/tickets/adminticketsUI.dm
index 32055cd6acc..19df32767a8 100644
--- a/code/modules/admin/tickets/adminticketsUI.dm
+++ b/code/modules/admin/tickets/adminticketsUI.dm
@@ -3,38 +3,43 @@
set category = "Tickets"
//dat
- var/dat = "
Admin Tickets
"
+ var/trStyle = "border:3px solid;"
+ var/tdStyle = "border:2px solid"
+ var/datum/admin_ticket/ticket
+ var/dat
+ dat += ""
+ dat += "Admin Tickets
"
dat +="Refresh
Open TicketsResolved TicketsClosed Tickets"
if(tab == ADMIN_TICKET_OPEN)
dat += "Open Tickets
"
- dat += ""
- dat +="| Control | Ticket | Detail |
"
+ dat += ""
+ dat +="| Control | Ticket | Detail |
"
if(tab == ADMIN_TICKET_OPEN)
for(var/T in allTickets)
- var/datum/admin_ticket/ticket = T
+ ticket = T
if(ticket.ticketState == ADMIN_TICKET_OPEN || ticket.ticketState == ADMIN_TICKET_STALE)
- dat += "| ResolveClose | Ticket #[ticket.ticketNum]: at [ticket.timeOpened]: [ticket.content] | Details |
"
+ dat += "| Resolve | #[ticket.ticketNum]: ([ticket.timeOpened]): [ticket.content] | Details |
"
else
continue
else if(tab == ADMIN_TICKET_RESOLVED)
dat += "Resolved Tickets
"
for(var/T in allTickets)
- var/datum/admin_ticket/ticket = T
+ ticket = T
if(ticket.ticketState == ADMIN_TICKET_RESOLVED)
- dat += "| ResolveClose | Ticket #[ticket.ticketNum]: at [ticket.timeOpened]: [ticket.content] | Details |
"
+ dat += "| Re-open | #[ticket.ticketNum] ([ticket.timeOpened]): [ticket.content] | Details |
"
else
continue
else if(tab == ADMIN_TICKET_CLOSED)
dat += "Closed Tickets
"
for(var/T in allTickets)
- var/datum/admin_ticket/ticket = T
+ ticket = T
if(ticket.ticketState == ADMIN_TICKET_CLOSED)
- dat += "| ResolveClose | Ticket #[ticket.ticketNum]: at [ticket.timeOpened]: [ticket.content] | Details |
"
+ dat += " | Re-open | Ticket #[ticket.ticketNum]: at [ticket.timeOpened]: [ticket.content] | Details |
"
else
continue
- dat += "
"
+ dat += "
"
return dat
@@ -51,7 +56,7 @@
var/dat = "Admin Tickets
"
- dat +="Refresh"
+ dat +="Refresh"
dat += "Ticket #[T.ticketNum]
"
@@ -59,12 +64,22 @@
dat += "Ticket Status: [status]"
dat += "
[T.content]
"
- dat += "Re-OpenResolveClose
"
+ dat += "Re-OpenResolve
"
+
+ if(!T.adminAssigned)
+ dat += "No admin assigned to this ticket - Take Ticket
"
+ else
+ dat += "[T.adminAssigned] is assigned to this Ticket. - Take Ticket
"
+
if(T.lastAdminResponse)
dat += "Last Admin Response: [T.lastAdminResponse] at [T.lastResponseTime]"
else
dat +="No Admin Response"
+ dat += "
"
+
+ dat += "Close"
+
var/datum/browser/popup = new(usr, "adminticketsdetail", "Admin Ticket #[T.ticketNum]", 800, 600)
popup.set_content(dat)
popup.open()
@@ -98,14 +113,17 @@
if(href_list["resolve"])
var/indexNum = text2num(href_list["resolve"])
if(globAdminTicketHolder.resolveTicket(indexNum))
- message_adminTicket("[usr.client] / ([usr]) resolved admin ticket number [indexNum]")
+ message_adminTicket("[usr.client] / ([usr]) resolved admin ticket number [indexNum]")
to_chat(returnClient(indexNum), "Your admin ticket has now been resolved.")
showUI(usr)
if(href_list["close"])
+
var/indexNum = text2num(href_list["close"])
+ if(alert("Are you sure? This will send a negative message.",,"Yes","No") != "Yes")
+ return
if(globAdminTicketHolder.closeTicket(indexNum))
- message_adminTicket("[usr.client] / ([usr]) closed admin ticket number [indexNum]")
+ message_adminTicket("[usr.client] / ([usr]) closed admin ticket number [indexNum]")
to_chat(returnClient(indexNum), "- AdminHelp Rejected! -")
to_chat(returnClient(indexNum), "Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting. If you asked a question, please ensure it was clear what you were asking.")
to_chat(returnClient(indexNum), "Your ticket has now been closed.")
@@ -114,14 +132,14 @@
if(href_list["detailresolve"])
var/indexNum = text2num(href_list["detailresolve"])
if(globAdminTicketHolder.resolveTicket(indexNum))
- message_adminTicket("[usr.client] / ([usr]) resolved admin ticket number [indexNum]")
+ message_adminTicket("[usr.client] / ([usr]) resolved admin ticket number [indexNum]")
to_chat(returnClient(indexNum), "Your admin ticket has now been resolved.")
showDetailUI(usr, indexNum)
if(href_list["detailclose"])
var/indexNum = text2num(href_list["detailclose"])
if(globAdminTicketHolder.closeTicket(indexNum))
- message_adminTicket("[usr.client] / ([usr]) closed admin ticket number [indexNum]")
+ message_adminTicket("[usr.client] / ([usr]) closed admin ticket number [indexNum]")
to_chat(returnClient(indexNum), "- AdminHelp Rejected! -")
to_chat(returnClient(indexNum), "Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting. If you asked a question, please ensure it was clear what you were asking.")
to_chat(returnClient(indexNum), "Your ticket has now been closed.")
@@ -130,5 +148,11 @@
if(href_list["detailreopen"])
var/indexNum = text2num(href_list["detailreopen"])
if(globAdminTicketHolder.openTicket(indexNum))
- message_adminTicket("[usr.client] / ([usr]) re-opened admin ticket number [indexNum]")
- showDetailUI(usr, indexNum)
\ No newline at end of file
+ message_adminTicket("[usr.client] / ([usr]) re-opened admin ticket number [indexNum]")
+ showDetailUI(usr, indexNum)
+
+ if(href_list["assignadmin"])
+ var/indexNum = text2num(href_list["assignadmin"])
+ if(globAdminTicketHolder.assignAdminToTicket(usr.client, indexNum))
+ message_adminTicket("[usr.client] / ([usr]) has taken ticket number [indexNum]")
+ to_chat(returnClient(indexNum), "Your ticket is being handled by ")
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index aecf78f6bd7..c5b167f6657 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -115,7 +115,12 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
X << 'sound/effects/adminhelp.ogg'
to_chat(X, msg)
if("Adminhelp")
- var/ticketNum = globAdminTicketHolder.getTicketCounter()
+ var/ticketNum
+ if(globAdminTicketHolder.checkForOpenTicket(usr.client))
+ var/datum/admin_ticket/T = globAdminTicketHolder.checkForOpenTicket(usr.client)
+ ticketNum = T.ticketNum
+ else
+ ticketNum = globAdminTicketHolder.getTicketCounter()
msg = "[selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob)]) (CA) (TICKET) [ai_found ? " (CL)" : ""] : [msg]"
for(var/client/X in modholders + adminholders)
if(X.prefs.sound & SOUND_ADMINHELP)