diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index e9d813c1439..68a2155da69 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -130,6 +130,9 @@ var/recieve_message = "" + pm_tracker.add_message(C, src, msg, mob) + C.pm_tracker.add_message(src, src, msg, C.mob) + if(holder && !C.holder) recieve_message = "-- Click the [recieve_pm_type]'s name to reply --\n" if(C.adminhelped) @@ -233,3 +236,72 @@ continue if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob)) to_chat(X, "PM: [key_name(src, TRUE, 0)]->IRC-Admins: [msg]") + +/client/verb/open_pms_ui() + set name = "My PMs" + set category = "OOC" + pm_tracker.show_ui(usr) + +/datum/pm_tracker + var/list/pms = list() + var/current_title = "" + var/open = FALSE + var/window_id = "pms_window" + +/datum/pm_tracker/proc/add_message(var/client/title, var/client/sender, var/message, mob/user) + if(!pms[title.key]) + pms[title.key] = list() + pms[title.key].Add("[sender]: [message]") + + if(!open) + // The next time the window's opened, it'll be open to the most recent message + current_title = title.key + return + + // If it's already opened, it'll refresh + show_ui(user) + +/datum/pm_tracker/proc/show_ui(mob/user) + var/dat = "" + + dat += "Refresh" + dat += "
" + for(var/title in pms) + var/label = "[title]" + if(title == current_title) + label = "[label]" + dat += "[label]" + + dat += "

[current_title]

" + + dat += "" + + for(var/message in pms[current_title]) + dat += "" + + dat += "
[message]


" + dat += "Reply" + + var/datum/browser/popup = new(user, window_id, "Messages", 1000, 600, src) + popup.set_content(dat) + popup.open() + open = TRUE + +/datum/pm_tracker/Topic(href, href_list) + if(href_list["refresh"]) + show_ui(usr) + return + + if(href_list["newtitle"]) + current_title = href_list["newtitle"] + show_ui(usr) + return + + if(href_list["reply"]) + usr.client.cmd_admin_pm(ckey(href_list["reply"]), null) + show_ui(usr) + return + + if(href_list["close"]) + open = FALSE + return diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 00900fe5fd1..1ab6ae5d9b8 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -7,6 +7,7 @@ var/last_message = "" //contains the last message sent by this client - used to protect against copy-paste spamming. var/last_message_count = 0 //contains a number of how many times a message identical to last_message was sent. var/last_message_time = 0 //holds the last time (based on world.time) a message was sent + var/datum/pm_tracker/pm_tracker = new() ///////// //OTHER//