user feedback, updates adminhelp string, replying to a ticket stops stale counter

This commit is contained in:
Birdtalon
2017-10-01 23:18:51 +01:00
parent 6936306786
commit 550db12717
9 changed files with 92 additions and 30 deletions
+1
View File
@@ -25,6 +25,7 @@
#define MEMBER_PUBLIC 8192
#define CHAT_NO_ADMINLOGS 16384
#define DONATOR_PUBLIC 32768
#define CHAT_NO_TICKETLOGS 65536
#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC)
+7
View File
@@ -21,6 +21,13 @@ var/global/nologevent = 0
var/msg = rendered
to_chat(C, msg)
/proc/message_adminTicket(var/msg)
msg = "<span class='admintickets'><span class='prefix'>ADMIN TICKET:</span> <span class='admintickets'>[msg]</span></span>"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
if(C.prefs && !(C.prefs.toggles & CHAT_NO_TICKETLOGS))
to_chat(C, msg)
///////////////////////////////////////////////////////////////////////////////////////////////Panels
+15
View File
@@ -222,6 +222,7 @@ var/list/admin_verbs_ticket = list(
/client/proc/startadmintickets,
/client/proc/vvadmintickets,
/client/proc/openTicketUI,
/client/proc/toggleticketlogs
)
/client/proc/on_holder_add()
@@ -924,6 +925,20 @@ var/list/admin_verbs_ticket = list(
else
to_chat(usr, "You now will get admin log messages.")
/client/proc/toggleticketlogs()
set name = "Toggle Admin Ticket Messgaes"
set category = "Preferences"
if(!check_rights(R_ADMIN))
return
prefs.toggles ^= CHAT_NO_TICKETLOGS
prefs.save_preferences(src)
if(prefs.toggles & CHAT_NO_TICKETLOGS)
to_chat(usr, "You now won't get admin ticket messages.")
else
to_chat(usr, "You now will get admin ticket messages.")
/client/proc/toggledrones()
set name = "Toggle Maintenance Drones"
set category = "Server"
+21 -10
View File
@@ -6,10 +6,10 @@ Admin ticket system by Birdtalon
var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicketHolder
//Defines
//Deciseconds until timeout
//Deciseconds until ticket becomes stale if unanswered.
#define ADMIN_TICKET_TIMEOUT 3000
//Decisecions before opening another ticket
#define ADMIN_TICKET_DUPLICATE_COOLDOWN 300
//Decisecions before opening another ticket.
#define ADMIN_TICKET_DUPLICATE_COOLDOWN 1200
//Status defines
#define ADMIN_TICKET_OPEN 1
@@ -38,7 +38,7 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
/datum/adminTicketHolder/proc/purgeAllTickets() // Delete ALL tickets
QDEL_LIST(allTickets)
message_admins("<span class='adminticket'>[usr.client] purged all admin tickets!</span>")
message_adminTicket("<span class='adminticket'>[usr.client] purged all admin tickets!</span>")
ticketCounter = 1
/datum/adminTicketHolder/proc/closeAllOpenTickets() // Close all open tickets
@@ -79,23 +79,29 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
//Set ticket state with key N to open
/datum/adminTicketHolder/proc/openTicket(var/N as num)
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
T.ticketState = ADMIN_TICKET_OPEN
if(T.ticketState != ADMIN_TICKET_OPEN)
T.ticketState = ADMIN_TICKET_OPEN
return TRUE
//Set ticket state with key N to resolved
/datum/adminTicketHolder/proc/resolveTicket(var/N as num)
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
T.ticketState = ADMIN_TICKET_RESOLVED
if(T.ticketState != ADMIN_TICKET_RESOLVED)
T.ticketState = ADMIN_TICKET_RESOLVED
return TRUE
//Set ticket state with key N to closed
/datum/adminTicketHolder/proc/closeTicket(var/N as num)
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
T.ticketState = ADMIN_TICKET_CLOSED
if(T.ticketState != ADMIN_TICKET_CLOSED)
T.ticketState = ADMIN_TICKET_CLOSED
return TRUE
//List Open Tickets in chat
/datum/adminTicketHolder/proc/listOpenTicketsToChat()
for(var/T in allTickets)
var/datum/admin_ticket/ticket = T
message_admins("<span class='adminticket'>Ticket #[ticket.ticketNum]: Opened by [ticket.clientName] at [ticket.timeOpened]: [ticket.content]</span>")
message_adminTicket("<span class='adminticket'>Ticket #[ticket.ticketNum]: Opened by [ticket.clientName] at [ticket.timeOpened]: [ticket.content]</span>")
//Check if the user already has a ticket open and within the cooldown period.
/datum/adminTicketHolder/proc/checkForOpenTicket(var/client/C)
@@ -104,6 +110,11 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
return T
return FALSE
//return the client of a ticket number
/datum/adminTicketHolder/proc/returnClient(var/N as num)
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
return T.clientName
//Single admin ticket
/datum/admin_ticket
@@ -122,10 +133,10 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
/datum/admin_ticket/proc/beginStaleCount()
if(!src)
return
while(world.time < timeUntilStale)
while(world.time < timeUntilStale && !lastAdminResponse)
sleep(200)
if(ticketState == ADMIN_TICKET_OPEN && world.time > timeUntilStale)
message_admins("<span class='adminticket'>Ticket #[ticketNum] has been open for [ADMIN_TICKET_TIMEOUT * 0.1] seconds. Changing status to stale.</span>")
message_adminTicket("<span class='adminticket'>Ticket #[ticketNum] has been open for [ADMIN_TICKET_TIMEOUT * 0.1] seconds. Changing status to stale.</span>")
ticketState = ADMIN_TICKET_STALE
break
+36 -15
View File
@@ -59,9 +59,11 @@
dat += "<h4>Ticket Status: <font color='red'>[status]</font>"
dat += "<p>[T.content]</p>"
dat += "<a href='?src=[UID()];reopen=[T.ticketNum]'>Re-Open</a><a href='?src=[UID()];resolve=[T.ticketNum]'>Resolve</a><a href='?src=[UID()];close=[T.ticketNum]'>Close</a>"
dat += "<b>Last Admin Response:</b> [T.lastAdminResponse] at [T.lastResponseTime]"
dat += "<a href='?src=[UID()];detailreopen=[T.ticketNum]'>Re-Open</a><a href='?src=[UID()];detailresolve=[T.ticketNum]'>Resolve</a><a href='?src=[UID()];detailclose=[T.ticketNum]'>Close</a><br />"
if(T.lastAdminResponse)
dat += "<b>Last Admin Response:</b> [T.lastAdminResponse] at [T.lastResponseTime]"
else
dat +="<font color='red'>No Admin Response</font>"
var/datum/browser/popup = new(usr, "adminticketsdetail", "Admin Ticket #[T.ticketNum]", 800, 600)
popup.set_content(dat)
@@ -95,19 +97,38 @@
if(href_list["resolve"])
var/indexNum = text2num(href_list["resolve"])
globAdminTicketHolder.resolveTicket(indexNum)
message_admins("<span class='adminticket'>[usr.client] / ([usr]) resolved admin ticket number [indexNum]</span>")
showUI(usr)
return
if(globAdminTicketHolder.resolveTicket(indexNum))
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) resolved admin ticket number [indexNum]</span>")
to_chat(returnClient(indexNum), "<span class='adminticket'>Your admin ticket has now been resolved.</span>")
showUI(usr)
if(href_list["close"])
var/indexNum = text2num(href_list["close"])
globAdminTicketHolder.closeTicket(indexNum)
message_admins("<span class='adminticket'>[usr.client] / ([usr]) closed admin ticket number [indexNum]</span>")
showUI(usr)
return
if(globAdminTicketHolder.closeTicket(indexNum))
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) closed admin ticket number [indexNum]</span>")
to_chat(returnClient(indexNum), "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
to_chat(returnClient(indexNum), "<span class='adminticket'>Please try to be calm, clear, and descriptive in admin helps, do not assume the admin 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>")
to_chat(returnClient(indexNum), "<span class='adminticket'>Your ticket has now been closed.</span>")
showUI(usr)
else if(href_list["reopen"])
var/indexNum = text2num(href_list["reopen"])
globAdminTicketHolder.openTicket(indexNum)
message_admins("<span class='adminticket'>[usr.client] / ([usr]) re-opened admin ticket number [indexNum]</span>")
if(href_list["detailresolve"])
var/indexNum = text2num(href_list["detailresolve"])
if(globAdminTicketHolder.resolveTicket(indexNum))
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) resolved admin ticket number [indexNum]</span>")
to_chat(returnClient(indexNum), "<span class='adminticket'>Your admin ticket has now been resolved.</span>")
showDetailUI(usr, indexNum)
if(href_list["detailclose"])
var/indexNum = text2num(href_list["detailclose"])
if(globAdminTicketHolder.closeTicket(indexNum))
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) closed admin ticket number [indexNum]</span>")
to_chat(returnClient(indexNum), "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
to_chat(returnClient(indexNum), "<span class='boldmessage'>Please try to be calm, clear, and descriptive in admin helps, do not assume the admin 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>")
to_chat(returnClient(indexNum), "<span class='adminticket'>Your ticket has now been closed.</span>")
showDetailUI(usr, indexNum)
if(href_list["detailreopen"])
var/indexNum = text2num(href_list["detailreopen"])
if(globAdminTicketHolder.openTicket(indexNum))
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) re-opened admin ticket number [indexNum]</span>")
showDetailUI(usr, indexNum)
+6
View File
@@ -26,6 +26,12 @@
message_admins("[key_name_admin(usr)] rejected [key_name_admin(C.mob)]'s admin help")
log_admin("[key_name(usr)] rejected [key_name(C.mob)]'s admin help")
if(href_list["openadminticket"])
if(!check_rights(R_ADMIN))
return
var/ticketID = text2num(href_list["openadminticket"])
globAdminTicketHolder.showDetailUI(usr, ticketID)
if(href_list["stickyban"])
stickyban(href_list["stickyban"],href_list)
+2 -1
View File
@@ -115,7 +115,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
X << 'sound/effects/adminhelp.ogg'
to_chat(X, msg)
if("Adminhelp")
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""] (<A HREF='?_src_=holder;take_question=[mob.UID()]'>TAKE</A>) :</span> <span class='adminhelp'>[msg]</span>"
var/ticketNum = globAdminTicketHolder.getTicketCounter()
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;openadminticket=[ticketNum]'>TICKET</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""] :</span> <span class='adminhelp'>[msg]</span>"
for(var/client/X in modholders + adminholders)
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -27,12 +27,12 @@ table.pmon td, table.pmon th {
}
table.adminticket {
border-bottom: 1px dotted black;
border-bottom: 5px dotted black;
}
tr.adminticket {
border-bottom: 1px dotted black;
padding: 0px 5px 0px 5px;
border-bottom: 5px dotted black;
padding: 10px 5px 10px 5px;
}
/* Table styling for the crew manifest */