From 842615cd5b5bba29c0cdc4aaa85db9b07302b952 Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Sat, 9 Mar 2019 22:20:19 +0100 Subject: [PATCH] Fixed an ahelp follow up bug. Works now --- code/__DEFINES/preferences.dm | 1 + code/controllers/subsystem/tickets/tickets.dm | 26 ++++--- code/modules/admin/admin.dm | 2 +- code/modules/admin/admin_verbs.dm | 24 +++++- .../admin/tickets/adminticketsverbs.dm | 12 +-- .../admin/tickets/mentorticketsverbs.dm | 33 ++++++++ code/modules/admin/topic.dm | 23 ++---- code/modules/admin/verbs/adminhelp.dm | 75 ++++++++++--------- code/modules/admin/verbs/adminpm.dm | 27 ++++--- paradise.dme | 1 + 10 files changed, 139 insertions(+), 85 deletions(-) create mode 100644 code/modules/admin/tickets/mentorticketsverbs.dm diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index f8f9609aced..b4fa2fb2f78 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -28,6 +28,7 @@ #define CHAT_NO_TICKETLOGS 65536 #define UI_DARKMODE 131072 #define DISABLE_KARMA 262144 +#define CHAT_NO_MENTORTICKETLOGS 524288 #define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC) diff --git a/code/controllers/subsystem/tickets/tickets.dm b/code/controllers/subsystem/tickets/tickets.dm index fdea7fe49fa..bec9050a30a 100644 --- a/code/controllers/subsystem/tickets/tickets.dm +++ b/code/controllers/subsystem/tickets/tickets.dm @@ -76,13 +76,12 @@ SUBSYSTEM_DEF(tickets) var/datum/ticket/existingTicket = checkForOpenTicket(C) if(existingTicket) existingTicket.setCooldownPeriod() - to_chat(C.mob, "[span_text]Your ticket #[existingTicket.ticketNum] remains open! Visit \"My tickets\" under the Admin Tab to view it.") + to_chat(C.mob, "[span_text]Your [ticket_name] #[existingTicket.ticketNum] remains open! Visit \"My tickets\" under the Admin Tab to view it.") return if(!title) title = passedContent - message_admins("making new ticket title: [title]; src type: [src.type]") var/datum/ticket/T = new(title, passedContent, getTicketCounterAndInc()) allTickets += T T.clientName = C @@ -265,7 +264,6 @@ UI STUFF popup.open() /datum/controller/subsystem/tickets/proc/showDetailUI(mob/user, ticketID) - message_admins("src type: [src.type]; ticketID [ticketID]; allTickets len [LAZYLEN(allTickets)]") var/datum/ticket/T = allTickets[ticketID] var/status = "[T.state2text()]" @@ -275,7 +273,7 @@ UI STUFF dat += "

Ticket #[T.ticketNum]

" - dat += "

[T.clientName] / [T.mobControlled] opened this ticket at [T.timeOpened] at location [T.locationSent]

" + dat += "

[T.clientName] / [T.mobControlled] opened this [ticket_name] at [T.timeOpened] at location [T.locationSent]

" dat += "

Ticket Status: [status]" dat += "" dat += "" @@ -288,7 +286,7 @@ UI STUFF dat += "Re-OpenResolve

" if(!T.stafAssigned) - dat += "No staf member assigned to this ticket - Take Ticket
" + dat += "No staf member assigned to this [ticket_name] - Take Ticket
" else dat += "[T.stafAssigned] is assigned to this Ticket. - Take Ticket
" @@ -309,7 +307,7 @@ UI STUFF //dat var/tickets = checkForTicket(user.client) var/dat - dat += "

Your open tickets

" + dat += "

Your open [ticket_system_name]

" dat += "
[T.title]
" for(var/datum/ticket/T in tickets) dat += "" @@ -317,7 +315,7 @@ UI STUFF dat += "" dat += "

Ticket #[T.ticketNum]

[T.content[i]]
" - var/datum/browser/popup = new(user, "userticketsdetail", "Tickets", 1000, 600) + var/datum/browser/popup = new(user, "[ticket_system_name]userticketsdetail", ticket_system_name, 1000, 600) popup.set_content(dat) popup.open() @@ -377,6 +375,9 @@ UI STUFF showDetailUI(usr, indexNum) if(href_list["detailclose"]) + if(!check_rights(R_ADMIN)) + to_chat(usr, "Admin status is required to close tickets.") + return var/indexNum = text2num(href_list["detailclose"]) if(alert("Are you sure? This will send a negative message.",,"Yes","No") != "Yes") return @@ -385,9 +386,10 @@ UI STUFF to_chat_safe(returnClient(indexNum), list( "- [ticket_name] Rejected! -", "Please try to be calm, clear, and descriptive in admin helps, do not assume the staf member 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.", - "[span_text]Your ticket has now been closed." + "[span_text]Your [ticket_name] has now been closed." )) showDetailUI(usr, indexNum) + if(href_list["detailreopen"]) var/indexNum = text2num(href_list["detailreopen"]) @@ -397,8 +399,10 @@ UI STUFF if(href_list["assignstaf"]) var/indexNum = text2num(href_list["assignstaf"]) - if(assignStafToTicket(usr.client, indexNum)) - message_staf("[usr.client] / ([usr]) has taken ticket number [indexNum]") - to_chat_safe(returnClient(indexNum), "[span_text]Your ticket is being handled by [usr.client].") + takeTicket(indexNum) showDetailUI(usr, indexNum) +/datum/controller/subsystem/tickets/proc/takeTicket(var/index) + if(assignStafToTicket(usr.client, index)) + message_staf("[usr.client] / ([usr]) has taken [ticket_name] number [index]") + to_chat_safe(returnClient(index), "[span_text]Your [ticket_name] is being handled by [usr.client].") \ No newline at end of file diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index f13ba0b660a..e0b4006e63a 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -31,7 +31,7 @@ var/global/nologevent = 0 /proc/message_mentorTicket(var/msg) for(var/client/C in GLOB.admins) if(check_rights(R_ADMIN | R_MENTOR | R_MOD, 0, C.mob)) - if(C.prefs && !(C.prefs.toggles & CHAT_NO_TICKETLOGS)) + if(C.prefs && !(C.prefs.toggles & CHAT_NO_MENTORTICKETLOGS)) to_chat(C, msg) /proc/admin_ban_mobsearch(var/mob/M, var/ckey_to_find, var/mob/admin_to_notify) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 0c4dd38ef5f..f6051587bc6 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -205,6 +205,9 @@ var/list/admin_verbs_mentor = list( /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ /client/proc/cmd_admin_pm_by_key_panel, /*admin-pm list by key*/ + /client/proc/openMentorTicketUI, + /client/proc/openMentorUserUI, + /client/proc/toggleMentorTicketLogs, /client/proc/cmd_mentor_say /* mentor say*/ // cmd_mentor_say is added/removed by the toggle_mentor_chat verb ) @@ -219,10 +222,11 @@ var/list/admin_verbs_snpc = list( /client/proc/hide_snpc_verbs ) var/list/admin_verbs_ticket = list( - /client/proc/openTicketUI, + /client/proc/openAdminTicketUI, /client/proc/toggleticketlogs, - /client/proc/resolveAllTickets, - /client/proc/openUserUI + /client/proc/resolveAllAdminTickets, + /client/proc/resolveAllMentorTickets, + /client/proc/openAdminUserUI ) /client/proc/on_holder_add() @@ -940,6 +944,20 @@ var/list/admin_verbs_ticket = list( else to_chat(usr, "You now will get admin log messages.") +/client/proc/toggleMentorTicketLogs() + set name = "Toggle Mentor Ticket Messgaes" + set category = "Preferences" + + if(!check_rights(R_MENTOR)) + return + + prefs.toggles ^= CHAT_NO_MENTORTICKETLOGS + prefs.save_preferences(src) + if(prefs.toggles & CHAT_NO_MENTORTICKETLOGS) + to_chat(usr, "You now won't get admin ticket messages.") + else + to_chat(usr, "You now will get admin ticket messages.") + /client/proc/toggleticketlogs() set name = "Toggle Admin Ticket Messgaes" set category = "Preferences" diff --git a/code/modules/admin/tickets/adminticketsverbs.dm b/code/modules/admin/tickets/adminticketsverbs.dm index f203ef501e8..ed783d19c95 100644 --- a/code/modules/admin/tickets/adminticketsverbs.dm +++ b/code/modules/admin/tickets/adminticketsverbs.dm @@ -1,8 +1,8 @@ //Verbs -/client/proc/openTicketUI() +/client/proc/openAdminTicketUI() - set name = "Open Ticket Interface" + set name = "Open Admin Ticket Interface" set category = "Admin" if(!holder || !check_rights(R_ADMIN)) @@ -10,8 +10,8 @@ SStickets.showUI(usr) -/client/proc/resolveAllTickets() - set name = "Resolve All Open Tickets" +/client/proc/resolveAllAdminTickets() + set name = "Resolve All Open Admin Tickets" set category = "Admin" if(!holder || !check_rights(R_ADMIN)) @@ -22,9 +22,9 @@ SStickets.resolveAllOpenTickets() -/client/proc/openUserUI() +/client/proc/openAdminUserUI() - set name = "My Tickets" + set name = "My Admin Tickets" set category = "Admin" if(!holder || !check_rights(R_ADMIN)) diff --git a/code/modules/admin/tickets/mentorticketsverbs.dm b/code/modules/admin/tickets/mentorticketsverbs.dm new file mode 100644 index 00000000000..ebc11ca7e16 --- /dev/null +++ b/code/modules/admin/tickets/mentorticketsverbs.dm @@ -0,0 +1,33 @@ +//Verbs + +/client/proc/openMentorTicketUI() + + set name = "Open Mentor Ticket Interface" + set category = "Admin" + + if(!holder || !check_rights(R_MENTOR)) + return + + SSmentor_tickets.showUI(usr) + +/client/proc/resolveAllMentorTickets() + set name = "Resolve All Open Mentor Tickets" + set category = "Admin" + + if(!holder || !check_rights(R_ADMIN)) + return + + if(alert("Are you sure you want to resolve ALL open tickets?","Resolve all open tickets?","Yes","No") != "Yes") + return + + SSmentor_tickets.resolveAllOpenTickets() + +/client/proc/openMentorUserUI() + + set name = "My Mentor Tickets" + set category = "Admin" + + if(!holder || !check_rights(R_MENTOR)) + return + + SSmentor_tickets.userDetailUI(usr) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 8f8a29f5236..d86de2c0d0e 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1552,22 +1552,13 @@ check_antagonists() else if(href_list["take_question"]) - var/mob/M = locateUID(href_list["take_question"]) - var/is_mhelp = href_list["is_mhelp"] - if(ismob(M)) - var/helptype = "ADMINHELP" - if(is_mhelp) - helptype = "MENTORHELP" - var/take_msg = "[helptype]: [key_name_hidden(usr.client)] is attending to [key_name(M)]'s question." - for(var/client/X in GLOB.admins) - if(check_rights(R_ADMIN, 0, X.mob)) - to_chat(X, take_msg) - else if(is_mhelp && check_rights(R_MOD|R_MENTOR, 0, X.mob)) - to_chat(X, take_msg) - to_chat(M, "Your question is being attended to by [key_name_hidden(usr.client, null, 0)]. Thanks for your patience!") - else - to_chat(usr, "Unable to locate mob.") - + var/index = text2num(href_list["take_question"]) + + if(href_list["is_mhelp"]) + SSmentor_tickets.takeTicket(index) + else //Ahelp + SStickets.takeTicket(index) + else if(href_list["cult_nextobj"]) if(alert(usr, "Validate the current Cult objective and unlock the next one?", "Cult Cheat Code", "Yes", "No") != "Yes") return diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index d1397e9679a..cdf9710e570 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -103,44 +103,45 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(check_rights(R_MENTOR, 0, X.mob)) mentorholders += X continue + var/ticketNum // Holder for the ticket number + var/prunedmsg ="[src]: [msg]" // Message without links + var/datum/ticket/T + var/isMhelp = selected_type == "Mentorhelp" + var/span + if(isMhelp) + span = "" + if(SSmentor_tickets.checkForOpenTicket(src)) // If user already has an open ticket + T = SSmentor_tickets.checkForOpenTicket(src) + else + ticketNum = SSmentor_tickets.getTicketCounter() // ticketNum is the ticket ready to be assigned. + else //Ahelp + span = "" + if(SStickets.checkForOpenTicket(src)) // If user already has an open ticket + T = SStickets.checkForOpenTicket(src) // Make T equal to the ticket they have open + else + ticketNum = SStickets.getTicketCounter() // ticketNum is the ticket ready to be assigned. + + if(T) + ticketNum = T.ticketNum // ticketNum is the number of their ticket. + T.addResponse(src, msg) + msg = "[span][selected_type]: [key_name(src, TRUE, selected_type)] ([ADMIN_QUE(mob,"?")]) ([ADMIN_PP(mob,"PP")]) ([ADMIN_VV(mob,"VV")]) ([ADMIN_SM(mob,"SM")]) ([admin_jump_link(mob)]) (CA) (TICKET) [ai_found ? "(CL)" : ""] (TAKE) : [span][msg]" + if(isMhelp) + //Open a new adminticket and inform the user. + SSmentor_tickets.newTicket(src, prunedmsg, msg) + for(var/client/X in mentorholders + modholders + adminholders) + if(X.prefs.sound & SOUND_MENTORHELP) + X << 'sound/effects/adminhelp.ogg' + to_chat(X, msg) + else //Ahelp + //Open a new adminticket and inform the user. + SStickets.newTicket(src, prunedmsg, msg) + for(var/client/X in modholders + adminholders) + if(X.prefs.sound & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + window_flash(X) + to_chat(X, msg) - switch(selected_type) - if("Mentorhelp") - var/ticketNum // Holder for the ticket number - var/prunedmsg ="[usr.client]: [msg]" // Message without links - if(SSmentor_tickets.checkForOpenTicket(usr)) // If user already has an open ticket - var/datum/ticket/T = SSmentor_tickets.checkForOpenTicket(usr) // Make T equal to the ticket they have open - ticketNum = T.ticketNum // ticketNum is the number of their ticket. - T.addResponse(usr.client, msg) - message_admins("open Mticket found num [ticketNum]") - else - ticketNum = SSmentor_tickets.getTicketCounter() // ticketNum is the ticket ready to be assigned. - msg = "[selected_type]: [key_name(src, TRUE, selected_type)] ([ADMIN_QUE(mob,"?")]) ([ADMIN_PP(mob,"PP")]) ([ADMIN_VV(mob,"VV")]) ([ADMIN_SM(mob,"SM")]) ([admin_jump_link(mob)]) (CA) (TICKET) [ai_found ? " (CL)" : ""] (TAKE) : [msg]" - //Open a new adminticket and inform the user. - SSmentor_tickets.newTicket(src, prunedmsg, msg) - for(var/client/X in mentorholders + modholders + adminholders) - if(X.prefs.sound & SOUND_MENTORHELP) - X << 'sound/effects/adminhelp.ogg' - to_chat(X, msg) - if("Adminhelp") - var/ticketNum // Holder for the ticket number - var/prunedmsg ="[usr.client]: [msg]" // Message without links - if(SStickets.checkForOpenTicket(usr)) // If user already has an open ticket - message_admins("open ticket found") - var/datum/ticket/T = SStickets.checkForOpenTicket(usr) // Make T equal to the ticket they have open - ticketNum = T.ticketNum // ticketNum is the number of their ticket. - T.addResponse(usr.client, msg) - message_admins("open Aticket found num [ticketNum]") - else - ticketNum = SStickets.getTicketCounter() // ticketNum is the ticket ready to be assigned. - msg = "[selected_type]: [key_name(src, TRUE, selected_type)] ([ADMIN_QUE(mob,"?")]) ([ADMIN_PP(mob,"PP")]) ([ADMIN_VV(mob,"VV")]) ([ADMIN_SM(mob,"SM")]) ([admin_jump_link(mob)]) (CA) (TICKET) [ai_found ? " (CL)" : ""](TAKE) : [msg]" - //Open a new adminticket and inform the user. - SStickets.newTicket(src, prunedmsg, msg) - for(var/client/X in modholders + adminholders) - if(X.prefs.sound & SOUND_ADMINHELP) - X << 'sound/effects/adminhelp.ogg' - window_flash(X) - to_chat(X, msg) + //show it to the person adminhelping too to_chat(src, "[selected_type]: [original_msg]") diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 8a563750a16..e9d813c1439 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -182,23 +182,28 @@ else if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]") - - if(type == "Mentorhelp") - return + //Check if the mob being PM'd has any open admin tickets. var/tickets = list() - tickets = SStickets.checkForTicket(C) + if(type == "Mentorhelp") + tickets = SSmentor_tickets.checkForTicket(C) + else + tickets = SStickets.checkForTicket(C) if(tickets) for(var/datum/ticket/i in tickets) i.addResponse(src, msg) // Add this response to their open tickets. return - - if(check_rights(R_ADMIN|R_MOD, 0, C.mob)) //Is the person being pm'd an admin? If so we check if the pm'er has open tickets - tickets = SStickets.checkForTicket(src) - if(tickets) - for(var/datum/ticket/i in tickets) - i.addResponse(src, msg) - return + if(type == "Mentorhelp") + if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, C.mob)) //Is the person being pm'd an admin? If so we check if the pm'er has open tickets + tickets = SSmentor_tickets.checkForTicket(src) + else // Ahelp + if(check_rights(R_ADMIN|R_MOD, 0, C.mob)) //Is the person being pm'd an admin? If so we check if the pm'er has open tickets + tickets = SStickets.checkForTicket(src) + + if(tickets) + for(var/datum/ticket/i in tickets) + i.addResponse(src, msg) + return /client/proc/cmd_admin_irc_pm() diff --git a/paradise.dme b/paradise.dme index ead5273f202..efa75177cce 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1135,6 +1135,7 @@ #include "code\modules\admin\DB ban\functions.dm" #include "code\modules\admin\permissionverbs\permissionedit.dm" #include "code\modules\admin\tickets\adminticketsverbs.dm" +#include "code\modules\admin\tickets\mentorticketsverbs.dm" #include "code\modules\admin\verbs\adminhelp.dm" #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminpm.dm"