mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 19:44:09 +01:00
Make admin and mentor tickets actually update their info in the table view (#24519)
* Make admin and mentor tickets actually update their info in the table view. * Additional ticket hardening against null mob and client. * The initial chat message on ahelp/mhelp should include the name again now.
This commit is contained in:
@@ -30,7 +30,7 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
|
||||
message_mentorTicket(msg, important)
|
||||
|
||||
/datum/controller/subsystem/tickets/mentor_tickets/create_other_system_ticket(datum/ticket/T)
|
||||
SStickets.newTicket(get_client_by_ckey(T.client_ckey), T.first_raw_response, T.raw_title)
|
||||
SStickets.newTicket(get_client_by_ckey(T.client_ckey), T.first_raw_response, T.title)
|
||||
|
||||
/datum/controller/subsystem/tickets/mentor_tickets/autoRespond(N)
|
||||
return
|
||||
|
||||
@@ -120,12 +120,26 @@ SUBSYSTEM_DEF(tickets)
|
||||
* msg - The raw message
|
||||
* ticketNum - Which ticket number the ticket has
|
||||
*/
|
||||
/datum/controller/subsystem/tickets/proc/makeUrlMessage(client/C, msg, ticketNum)
|
||||
/datum/controller/subsystem/tickets/proc/makeUrlMessage(target, msg, ticketNum)
|
||||
var/mob/M
|
||||
var/key_and_name
|
||||
if(istype(target, /datum/ticket))
|
||||
var/datum/ticket/T = target
|
||||
M = get_mob_by_ckey(T.client_ckey)
|
||||
key_and_name = M ? key_name(M, TRUE, ticket_help_type) : "[T.client_ckey] (DC)/(DELETED)"
|
||||
msg = T.title
|
||||
ticketNum = T.ticketNum
|
||||
else if(isclient(target))
|
||||
var/client/C = target
|
||||
M = C.mob
|
||||
key_and_name = key_name(M, TRUE, ticket_help_type)
|
||||
|
||||
var/list/L = list()
|
||||
L += "<span class='[ticket_help_span]'>[ticket_help_type]: </span><span class='boldnotice'>[key_name(C, TRUE, ticket_help_type)] "
|
||||
L += "([ADMIN_QUE(C.mob,"?")]) ([ADMIN_PP(C.mob,"PP")]) ([ADMIN_VV(C.mob,"VV")]) ([ADMIN_TP(C.mob,"TP")]) ([ADMIN_SM(C.mob,"SM")]) "
|
||||
L += "([admin_jump_link(C.mob)]) (<a href='?_src_=holder;openticket=[ticketNum][anchor_link_extra]'>TICKET</a>) "
|
||||
L += "[isAI(C.mob) ? "(<a href='?_src_=holder;adminchecklaws=[C.mob.UID()]'>CL</a>)" : ""] (<a href='?_src_=holder;take_question=[ticketNum][anchor_link_extra]'>TAKE</a>) "
|
||||
L += "<span class='[ticket_help_span]'>[ticket_help_type]: </span><span class='boldnotice'>[key_and_name] "
|
||||
if(M)
|
||||
L += "([ADMIN_QUE(M,"?")]) ([ADMIN_PP(M,"PP")]) ([ADMIN_VV(M,"VV")]) ([ADMIN_TP(M,"TP")]) ([ADMIN_SM(M,"SM")]) ([admin_jump_link(M)])"
|
||||
L += "(<a href='?_src_=holder;openticket=[ticketNum][anchor_link_extra]'>TICKET</a>) "
|
||||
L += "[isAI(M) ? "(<a href='?_src_=holder;adminchecklaws=[M.UID()]'>CL</a>)" : ""] (<a href='?_src_=holder;take_question=[ticketNum][anchor_link_extra]'>TAKE</a>) "
|
||||
L += "(<a href='?_src_=holder;resolve=[ticketNum][anchor_link_extra]'>RESOLVE</a>) (<a href='?_src_=holder;autorespond=[ticketNum][anchor_link_extra]'>AUTO</a>) "
|
||||
L += "(<a href='?_src_=holder;convert_ticket=[ticketNum][anchor_link_extra]'>CONVERT</a>) :</span> <span class='[ticket_help_span]'>[msg]</span>"
|
||||
return L.Join()
|
||||
@@ -141,7 +155,7 @@ SUBSYSTEM_DEF(tickets)
|
||||
var/new_ticket_num = getTicketCounterAndInc()
|
||||
var/url_title = makeUrlMessage(C, title, new_ticket_num)
|
||||
|
||||
var/datum/ticket/T = new(url_title, title, passedContent, new_ticket_num, C.ckey)
|
||||
var/datum/ticket/T = new(title, passedContent, new_ticket_num, C.ckey)
|
||||
allTickets += T
|
||||
T.locationSent = C.mob.loc.name
|
||||
T.mobControlled = C.mob
|
||||
@@ -190,10 +204,13 @@ SUBSYSTEM_DEF(tickets)
|
||||
return TRUE
|
||||
|
||||
/datum/controller/subsystem/tickets/proc/convert_ticket(datum/ticket/T)
|
||||
T.ticketState = TICKET_CLOSED
|
||||
T.ticket_converted = TRUE
|
||||
var/client/C = usr.client
|
||||
var/client/owner = get_client_by_ckey(T.client_ckey)
|
||||
if(!owner)
|
||||
to_chat(C, "<span class='notice'>Can't convert the ticket of a disconnected user.")
|
||||
return
|
||||
T.ticketState = TICKET_CLOSED
|
||||
T.ticket_converted = TRUE
|
||||
to_chat_safe(owner, list("<span class='[span_class]'>[key_name_hidden(C)] has converted your ticket to a [other_ticket_name] ticket.</span>",\
|
||||
"<span class='[span_class]'>Be sure to use the correct type of help next time!</span>"))
|
||||
message_staff("<span class='[span_class]'>[C] has converted ticket number [T.ticketNum] to a [other_ticket_name] ticket.</span>")
|
||||
@@ -202,7 +219,7 @@ SUBSYSTEM_DEF(tickets)
|
||||
|
||||
/datum/controller/subsystem/tickets/proc/create_other_system_ticket(datum/ticket/T)
|
||||
var/client/C = get_client_by_ckey(T.client_ckey)
|
||||
SSmentor_tickets.newTicket(C, T.first_raw_response, T.raw_title)
|
||||
SSmentor_tickets.newTicket(C, T.first_raw_response, T.title)
|
||||
|
||||
/datum/controller/subsystem/tickets/proc/autoRespond(N)
|
||||
if(!check_rights(rights_needed))
|
||||
@@ -241,6 +258,9 @@ SUBSYSTEM_DEF(tickets)
|
||||
|
||||
var/message_key = input("Select an autoresponse. This will mark the ticket as resolved.", "Autoresponse") as null|anything in sortTim(sorted_responses, GLOBAL_PROC_REF(cmp_text_asc)) //use sortTim and cmp_text_asc to sort alphabetically
|
||||
var/client/ticket_owner = get_client_by_ckey(T.client_ckey)
|
||||
if(!ticket_owner)
|
||||
to_chat(C, "<span class='notice'>Can't respond to the ticket of a disconnected user.")
|
||||
return
|
||||
switch(message_key)
|
||||
if(null) //they cancelled
|
||||
T.staffAssigned = null //if they cancel we dont need to hold this ticket anymore
|
||||
@@ -253,7 +273,7 @@ SUBSYSTEM_DEF(tickets)
|
||||
T.lastStaffResponse = "Autoresponse: [message_key]"
|
||||
resolveTicket(N)
|
||||
message_staff("[C] has auto responded to [ticket_owner]\'s adminhelp with:<span class='adminticketalt'> [message_key]</span>")
|
||||
log_game("[C] has auto responded to [ticket_owner]\'s adminhelp with: [response_phrases[message_key]]")
|
||||
log_game("[C] has auto responded to [T.client_ckey]\'s adminhelp with: [response_phrases[message_key]]")
|
||||
if("Mentorhelp")
|
||||
convert_ticket(T)
|
||||
else
|
||||
@@ -313,10 +333,8 @@ SUBSYSTEM_DEF(tickets)
|
||||
var/real_time_opened
|
||||
/// Ingame time the ticket was opened
|
||||
var/ingame_time_opened
|
||||
/// The initial message with links.
|
||||
/// The initial message from the user.
|
||||
var/title
|
||||
/// The title without URLs added.
|
||||
var/raw_title
|
||||
/// Content of the staff help.
|
||||
var/list/datum/ticket_response/ticket_responses
|
||||
/// Last staff member who responded.
|
||||
@@ -347,9 +365,8 @@ SUBSYSTEM_DEF(tickets)
|
||||
var/list/adminwho_data = list()
|
||||
|
||||
|
||||
/datum/ticket/New(tit, raw_tit, cont, num, the_ckey)
|
||||
/datum/ticket/New(tit, cont, num, the_ckey)
|
||||
title = tit
|
||||
raw_title = raw_tit
|
||||
client_ckey = the_ckey
|
||||
first_raw_response = cont
|
||||
ticket_responses = list()
|
||||
@@ -455,7 +472,7 @@ UI STUFF
|
||||
for(var/T in allTickets)
|
||||
ticket = T
|
||||
if(ticket.ticketState == TICKET_OPEN || ticket.ticketState == TICKET_STALE)
|
||||
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) [ticket.ticketState == TICKET_STALE ? "<font color='red'><b>STALE</font>" : ""] </td><td style='[tdStyle]'><b>[ticket.title]</td></tr>"
|
||||
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) [ticket.ticketState == TICKET_STALE ? "<font color='red'><b>STALE</font>" : ""] </td><td style='[tdStyle]'><b>[makeUrlMessage(ticket)]</td></tr>"
|
||||
else
|
||||
continue
|
||||
else if(tab == TICKET_RESOLVED)
|
||||
@@ -463,7 +480,7 @@ UI STUFF
|
||||
for(var/T in allTickets)
|
||||
ticket = T
|
||||
if(ticket.ticketState == TICKET_RESOLVED)
|
||||
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) </td><td style='[tdStyle]'><b>[ticket.title]</td></tr>"
|
||||
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) </td><td style='[tdStyle]'><b>[makeUrlMessage(ticket)]</td></tr>"
|
||||
else
|
||||
continue
|
||||
else if(tab == TICKET_CLOSED)
|
||||
@@ -471,7 +488,7 @@ UI STUFF
|
||||
for(var/T in allTickets)
|
||||
ticket = T
|
||||
if(ticket.ticketState == TICKET_CLOSED)
|
||||
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) </td><td style='[tdStyle]'><b>[ticket.title]</td></tr>"
|
||||
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) </td><td style='[tdStyle]'><b>[makeUrlMessage(ticket)]</td></tr>"
|
||||
else
|
||||
continue
|
||||
|
||||
@@ -504,7 +521,7 @@ UI STUFF
|
||||
dat += "<h3>[T.client_ckey] / [T.mobControlled] opened this [ticket_name] at [T.ingame_time_opened] at location [T.locationSent]</h3>"
|
||||
dat += "<h4>Ticket Status: [status]"
|
||||
dat += "<table style='width:950px; border: 3px solid;'>"
|
||||
dat += "<tr><td>[T.title]</td></tr>"
|
||||
dat += "<tr><td>[makeUrlMessage(T)]</td></tr>"
|
||||
|
||||
if(length(T.ticket_responses) > 1)
|
||||
for(var/i in 2 to length(T.ticket_responses))
|
||||
@@ -710,7 +727,7 @@ UI STUFF
|
||||
"realt" = T.real_time_opened,
|
||||
"relativet" = T.ingame_time_opened,
|
||||
"tcreator" = T.client_ckey,
|
||||
"ttopic" = T.raw_title,
|
||||
"ttopic" = T.title,
|
||||
"ttaker" = T.staff_ckey,
|
||||
"ttaketime" = T.staff_take_time,
|
||||
"allresponses" = all_responses_txt,
|
||||
|
||||
Reference in New Issue
Block a user