diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index a691b61f3f5..fc7a2d8bdca 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -536,7 +536,8 @@ if(player_ckey) create_message("note", player_ckey, admin_ckey, note_reason, null, null, 0, 0, null, 0, severity) var/client/C = GLOB.directory[player_ckey] - var/datum/admin_help/AH = admin_ticket_log(player_ckey, "[kna] [msg]") + // var/datum/admin_help/AH = admin_ticket_log(player_ckey, "[kna] [msg]") // SKYRAT EDIT ORIGINAL + var/datum/admin_help/AH = admin_ticket_log(player_ckey, "[kna] [msg]", FALSE) // SKYRAT EDIT -- Player ticket viewing var/appeal_url = "No ban appeal url set!" appeal_url = CONFIG_GET(string/banappeals) var/is_admin = FALSE diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 2c71ced1c63..754daeea263 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -215,9 +215,11 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) statclick = new(null, src) _interactions = list() + _interactions_player = list() // SKYRAT EDIT ADDITION -- Player ticket viewing if(is_bwoink) AddInteraction("[key_name_admin(usr)] PM'd [LinkedReplyName()]") + AddInteractionPlayer("[key_name_admin(usr, FALSE)] PM'd [LinkedReplyName()]") // SKYRAT EDIT ADDITION -- Player ticket viewing message_admins("Ticket [TicketHref("#[id]")] created") else MessageNoRecipient(msg) @@ -286,6 +288,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]" AddInteraction("[LinkedReplyName(ref_src)]: [msg]") + AddInteractionPlayer("[LinkedReplyName(ref_src)]: [msg]") // SKYRAT EDIT ADDITION -- Player ticket viewing log_admin_private("Ticket #[id]: [key_name(initiator)]: [msg]") //send this msg to all admins @@ -330,6 +333,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) initiator.current_ticket = src AddInteraction("Reopened by [key_name_admin(usr)]") + AddInteractionPlayer("Reopened by [key_name_admin(usr, FALSE)]") // SKYRAT EDIT ADDITION -- Player ticket viewing var/msg = "Ticket [TicketHref("#[id]")] reopened by [key_name_admin(usr)]." message_admins(msg) log_admin_private(msg) @@ -361,6 +365,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) state = AHELP_CLOSED GLOB.ahelp_tickets.ListInsert(src) AddInteraction("Closed by [key_name].") + AddInteractionPlayer("Closed by [key_name_admin(usr, FALSE)].") // SKYRAT EDIT ADDITION -- Player ticket viewing if(!silent) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "closed") var/msg = "Ticket [TicketHref("#[id]")] closed by [key_name]." @@ -387,6 +392,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) addtimer(CALLBACK(initiator, /client/proc/giveadminhelpverb), 50) AddInteraction("Resolved by [key_name].") + AddInteractionPlayer("Resolved by [key_name_admin(usr, FALSE)].") // SKYRAT EDIT ADDITION -- Player ticket viewing to_chat(initiator, "Your ticket has been resolved by an admin. The Adminhelp verb will be returned to you shortly.", confidential = TRUE) if(!silent) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "resolved") @@ -421,6 +427,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) message_admins(msg) log_admin_private(msg) AddInteraction("Rejected by [key_name].") + AddInteractionPlayer("Rejected by [key_name_admin(usr, FALSE)].") // SKYRAT EDIT ADDITION -- Player ticket viewing SSblackbox.LogAhelp(id, "Rejected", "Rejected by [usr.key]", null, usr.ckey) Close(silent = TRUE) @@ -447,6 +454,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) message_admins(msg) log_admin_private(msg) AddInteraction("Marked as IC issue by [key_name]") + AddInteractionPlayer("Marked as IC issue by [key_name_admin(usr, FALSE)]") // SKYRAT EDIT ADDITION -- Player ticket viewing SSblackbox.LogAhelp(id, "IC Issue", "Marked as IC issue by [usr.key]", null, usr.ckey) Resolve(silent = TRUE) @@ -587,7 +595,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //Use this proc when an admin takes action that may be related to an open ticket on what //what can be a client, ckey, or mob -/proc/admin_ticket_log(what, message) +// /proc/admin_ticket_log(what, message) // SKYRAT EDIT ORIGINAL +/proc/admin_ticket_log(what, message, admin_only = TRUE) // SKYRAT EDIT CHANGE -- Player ticket viewing var/client/C var/mob/Mob = what if(istype(Mob)) @@ -596,11 +605,19 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) C = what if(istype(C) && C.current_ticket) C.current_ticket.AddInteraction(message) + // SKYRAT EDIT ADDITION START -- Player ticket viewing + if(!admin_only) + C.current_ticket.AddInteractionPlayer(message) + // SKYRAT EDIT ADDITION END return C.current_ticket if(istext(what)) //ckey var/datum/admin_help/AH = GLOB.ahelp_tickets.CKey2ActiveTicket(what) if(AH) AH.AddInteraction(message) + // SKYRAT EDIT ADDITION START -- Player ticket viewing + if(!admin_only) + AH.AddInteractionPlayer(message) + // SKYRAT EDIT ADDITION END return AH // diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 1bad7eb45b8..ff32ff03c5e 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -205,6 +205,7 @@ html = "PM to-Admins: [rawmsg]", confidential = TRUE) var/datum/admin_help/AH = admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to External: [keywordparsedmsg]") + AH.AddInteractionPlayer("Reply PM from-[key_name(src, TRUE, FALSE)] to External: [keywordparsedmsg]") // SKYRAT EDIT ADDITION -- Player ticket viewing externalreplyamount-- send2adminchat("[AH ? "#[AH.id] " : ""]Reply: [ckey]", rawmsg) else @@ -223,13 +224,16 @@ confidential = TRUE) //omg this is dumb, just fill in both their tickets var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)]: [keywordparsedmsg]" - admin_ticket_log(src, interaction_message) + // admin_ticket_log(src, interaction_message) // SKYRAT EDIT ORIGINAL + admin_ticket_log(src, interaction_message, FALSE) // SKYRAT EDIT CHANGE -- Player ticket viewing if(recipient != src) //reeee - admin_ticket_log(recipient, interaction_message) + // admin_ticket_log(recipient, interaction_message) // SKYRAT EDIT ORIGINAL + admin_ticket_log(recipient, interaction_message, FALSE) // SKYRAT EDIT CHANGE -- Player ticket viewing SSblackbox.LogAhelp(current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) else //recipient is an admin but sender is not var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" - admin_ticket_log(src, "[replymsg]") + // admin_ticket_log(src, "[replymsg]") // SKYRAT EDIT ORIGINAL + admin_ticket_log(src, "[replymsg]", FALSE) // SKYRAT EDIT CHANGE -- Player ticket viewing to_chat(recipient, type = MESSAGE_TYPE_ADMINPM, html = "[replymsg]", @@ -281,7 +285,8 @@ html = "Admin PM to-[key_name(recipient, src, 1)]: [msg]", confidential = TRUE) - admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]") + // admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]") // SKYRAT EDIT ORIGINAL + admin_ticket_log(recipient, "PM From [key_name_admin(src, FALSE)]: [keywordparsedmsg]", FALSE) // SKYRAT EDIT CHANGE -- Player ticket viewing if(!already_logged) //Reply to an existing ticket SSblackbox.LogAhelp(recipient.current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) diff --git a/modular_skyrat/modules/admin/code/admin_help.dm b/modular_skyrat/modules/admin/code/admin_help.dm index 7a3d2bb8102..47325400559 100644 --- a/modular_skyrat/modules/admin/code/admin_help.dm +++ b/modular_skyrat/modules/admin/code/admin_help.dm @@ -1,5 +1,6 @@ /datum/admin_help var/handler + var/list/_interactions_player //Let the initiator know their ahelp is being handled /datum/admin_help/proc/HandleIssue(key_name = key_name_admin(usr)) @@ -23,5 +24,31 @@ message_admins(msg) log_admin_private(msg) AddInteraction("Being handled by [key_name]") + AddInteractionPlayer("Being handled by [key_name_admin(usr, FALSE)]") handler = "[usr.ckey]" + +/datum/admin_help/proc/PlayerTicketPanel() + var/list/dat = list("Player Ticket") + dat += "State: " + switch(state) + if(AHELP_ACTIVE) + dat += "OPEN" + if(AHELP_RESOLVED) + dat += "RESOLVED" + if(AHELP_CLOSED) + dat += "CLOSED" + else + dat += "UNKNOWN" + dat += "

Opened at: [gameTimestamp("hh:mm:ss", opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)" + if(closed_at) + dat += "
Closed at: [gameTimestamp("hh:mm:ss", closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)" + dat += "

" + dat += "
Log:

" + for(var/I in _interactions_player) + dat += "[I]
" + + usr << browse(dat.Join(), "window=ahelp[id];size=620x480") + +/datum/admin_help/proc/AddInteractionPlayer(formatted_message) + _interactions_player += "[time_stamp()]: [formatted_message]" diff --git a/modular_skyrat/modules/admin/code/adminhelp.dm b/modular_skyrat/modules/admin/code/adminhelp.dm new file mode 100644 index 00000000000..2f1c4f882a5 --- /dev/null +++ b/modular_skyrat/modules/admin/code/adminhelp.dm @@ -0,0 +1,28 @@ +// File for more general procs, admin_help.dm is focused on the datum/admin_help/ +/client/verb/viewlatestticket() + set category = "Admin" + set name = "View Latest Ticket" + + if(!current_ticket) + // Check if the client had previous tickets, and show the latest one + var/list/prev_tickets = list() + var/datum/admin_help/last_AH + // Check all resolved tickets for this player + for(var/datum/admin_help/AH in GLOB.ahelp_tickets.resolved_tickets) + if(AH.initiator_ckey == ckey) // Initiator is a misnomer, it's always the non-admin player even if an admin bwoinks first + prev_tickets += AH + // Check all closed tickets for this player + for(var/datum/admin_help/AH in GLOB.ahelp_tickets.closed_tickets) + if(AH.initiator_ckey == ckey) + prev_tickets += AH + // Take the most recent entry of prev_tickets and open the panel on it + if(LAZYLEN(prev_tickets)) + last_AH = pop(prev_tickets) + last_AH.PlayerTicketPanel() + return + + // client had no tickets this round + to_chat(src, "You have not had an ahelp ticket this round.") + return + + current_ticket.PlayerTicketPanel() diff --git a/tgstation.dme b/tgstation.dme index bf471c9647e..3363ed29139 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3389,6 +3389,7 @@ #include "modular_skyrat\modules\additionalert\code\modules\clothing\outfit\ert.dm" #include "modular_skyrat\modules\additionalert\code\modules\clothing\spacesuits\hardsuit.dm" #include "modular_skyrat\modules\admin\code\admin_help.dm" +#include "modular_skyrat\modules\admin\code\adminhelp.dm" #include "modular_skyrat\modules\admin\code\aooc.dm" #include "modular_skyrat\modules\admin\code\loud_say.dm" #include "modular_skyrat\modules\admin\code\sooc.dm"