diff --git a/code/controllers/subsystem/tickets.dm b/code/controllers/subsystem/tickets.dm index ff40b19773a..33b4b6ce9ae 100644 --- a/code/controllers/subsystem/tickets.dm +++ b/code/controllers/subsystem/tickets.dm @@ -32,7 +32,7 @@ SUBSYSTEM_DEF(tickets) var/report for(var/num in stales) report += "[num], " - message_adminTicket("Tickets [report] have been open for over [ADMIN_TICKET_TIMEOUT * 0.1] seconds. Changing status to stale.") + message_adminTicket("Tickets [report] have been open for over [ADMIN_TICKET_TIMEOUT MINUTES] minutes. Changing status to stale.") /datum/controller/subsystem/tickets/proc/checkStaleness() var/stales = list() @@ -65,10 +65,12 @@ SUBSYSTEM_DEF(tickets) resolveTicket(T.ticketNum) //Open a new ticket and populate details then add to the list of open tickets -/datum/controller/subsystem/tickets/proc/newTicket(client/C, passedContent, title) - if(!C || !passedContent) +/datum/controller/subsystem/tickets/proc/newTicket(mob/M, passedContent, title) + if(!M || !passedContent) return + var/client/C = M.client + //Check if the user has an open ticket already within the cooldown period, if so we don't create a new one and re-set the cooldown period var/datum/admin_ticket/existingTicket = checkForOpenTicket(C) if(existingTicket) @@ -79,52 +81,46 @@ SUBSYSTEM_DEF(tickets) if(!title) title = passedContent - var/datum/admin_ticket/T = new /datum/admin_ticket + var/datum/admin_ticket/T = new(title, passedContent) T.clientName = C - T.timeOpened = worldtime2text() - T.title = title - T.content += passedContent - T.locationSent = C.mob.loc.loc.name - T.mobControlled = C.mob - T.ticketState = ADMIN_TICKET_OPEN - T.timeUntilStale = world.time + ADMIN_TICKET_TIMEOUT - T.setCooldownPeriod() - T.ticketNum = getTicketCounterAndInc() - allTickets += T + T.locationSent = M.loc.name + T.mobControlled = M //Inform the user that they have opened a ticket to_chat(C, "You have opened admin ticket number #[(SStickets.getTicketCounter() - 1)]! Please be patient and we will help you soon!") //Set ticket state with key N to open -/datum/controller/subsystem/tickets/proc/openTicket(var/N) +/datum/controller/subsystem/tickets/proc/openTicket(N) var/datum/admin_ticket/T = SStickets.allTickets[N] if(T.ticketState != ADMIN_TICKET_OPEN) T.ticketState = ADMIN_TICKET_OPEN return TRUE //Set ticket state with key N to resolved -/datum/controller/subsystem/tickets/proc/resolveTicket(var/N) +/datum/controller/subsystem/tickets/proc/resolveTicket(N) var/datum/admin_ticket/T = SStickets.allTickets[N] if(T.ticketState != ADMIN_TICKET_RESOLVED) T.ticketState = ADMIN_TICKET_RESOLVED return TRUE //Set ticket state with key N to closed -/datum/controller/subsystem/tickets/proc/closeTicket(var/N) +/datum/controller/subsystem/tickets/proc/closeTicket(N) var/datum/admin_ticket/T = SStickets.allTickets[N] if(T.ticketState != ADMIN_TICKET_CLOSED) T.ticketState = ADMIN_TICKET_CLOSED return TRUE //Check if the user already has a ticket open and within the cooldown period. -/datum/controller/subsystem/tickets/proc/checkForOpenTicket(var/client/C) +/datum/controller/subsystem/tickets/proc/checkForOpenTicket(mob/M) + var/client/C = M.client for(var/datum/admin_ticket/T in allTickets) if(T.clientName == C && T.ticketState == ADMIN_TICKET_OPEN && (T.ticketCooldown > world.time)) return T return FALSE //Check if the user has ANY ticket not resolved or closed. -/datum/controller/subsystem/tickets/proc/checkForTicket(var/client/C) +/datum/controller/subsystem/tickets/proc/checkForTicket(mob/M) + var/client/C = M.client var/list/tickets = list() for(var/datum/admin_ticket/T in allTickets) if(T.clientName == C && (T.ticketState == ADMIN_TICKET_OPEN || T.ticketState == ADMIN_TICKET_STALE)) @@ -134,11 +130,12 @@ SUBSYSTEM_DEF(tickets) return FALSE //return the client of a ticket number -/datum/controller/subsystem/tickets/proc/returnClient(var/N) +/datum/controller/subsystem/tickets/proc/returnClient(N) var/datum/admin_ticket/T = SStickets.allTickets[N] return T.clientName -/datum/controller/subsystem/tickets/proc/assignAdminToTicket(var/client/C, var/N) +/datum/controller/subsystem/tickets/proc/assignAdminToTicket(mob/M, var/N) + var/client/C = M.client var/datum/admin_ticket/T = SStickets.allTickets[N] T.assignAdmin(C) return TRUE @@ -150,7 +147,7 @@ SUBSYSTEM_DEF(tickets) var/clientName // Client which opened the ticket var/timeOpened // Time the ticket was opened var/title //The initial message with links - var/list/content = list() // content of the admin help + var/list/content // content of the admin help var/lastAdminResponse // Last admin who responded var/lastResponseTime // When the admin last responded var/locationSent // Location the player was when they send the ticket @@ -160,12 +157,24 @@ SUBSYSTEM_DEF(tickets) var/ticketCooldown // Cooldown before allowing the user to open another ticket. var/adminAssigned // Admin who has assigned themselves to this ticket +/datum/admin_ticket/New(tit, cont) + title = tit + content = list() + content += cont + timeOpened = worldtime2text() + timeUntilStale = world.time + ADMIN_TICKET_TIMEOUT + setCooldownPeriod() + ticketNum = SStickets.getTicketCounterAndInc() + ticketState = ADMIN_TICKET_OPEN + SStickets.allTickets += src + //Set the cooldown period for the ticket. The time when it's created plus the defined cooldown time. /datum/admin_ticket/proc/setCooldownPeriod() ticketCooldown = world.time + ADMIN_TICKET_DUPLICATE_COOLDOWN //Set the last admin who responded as the client passed as an arguement. -/datum/admin_ticket/proc/setLastAdminResponse(var/client/C) +/datum/admin_ticket/proc/setLastAdminResponse(mob/M) + var/client/C = M.client lastAdminResponse = C lastResponseTime = worldtime2text() @@ -182,17 +191,19 @@ SUBSYSTEM_DEF(tickets) return "STALE" //Assign the client passed to var/adminAsssigned -/datum/admin_ticket/proc/assignAdmin(var/client/C, var/N) +/datum/admin_ticket/proc/assignAdmin(mob/M, var/N) + var/client/C = M.client if(!C) return adminAssigned = C return TRUE -/datum/admin_ticket/proc/addResponse(var/client/C, var/M as text) +/datum/admin_ticket/proc/addResponse(mob/M, msg) + var/client/C = M.client if(C.holder) setLastAdminResponse(C) - M = "[C]: [M]" - content += M + M = "[C]: [msg]" + content += msg /datum/admin_ticket/proc/makeStale() ticketState = ADMIN_TICKET_STALE @@ -204,7 +215,7 @@ UI STUFF */ -/datum/controller/subsystem/tickets/proc/returnUI(var/tab = ADMIN_TICKET_OPEN) +/datum/controller/subsystem/tickets/proc/returnUI(tab = ADMIN_TICKET_OPEN) set name = "Open Ticket Interface" set category = "Tickets" @@ -250,14 +261,14 @@ UI STUFF return dat -/datum/controller/subsystem/tickets/proc/showUI(mob/user, var/tab) +/datum/controller/subsystem/tickets/proc/showUI(mob/user, tab) var/dat = null dat = returnUI(tab) var/datum/browser/popup = new(user, "admintickets", "Admin Tickets", 1400, 600) popup.set_content(dat) popup.open() -/datum/controller/subsystem/tickets/proc/showDetailUI(mob/user, var/ticketID) +/datum/controller/subsystem/tickets/proc/showDetailUI(mob/user, ticketID) var/datum/admin_ticket/T = SStickets.allTickets[ticketID] var/status = "[T.state2text()]"