tidying up styling, migrated some functions, final changes

This commit is contained in:
Birdtalon
2017-10-02 21:32:08 +01:00
parent ad7df9f7f8
commit ef0b899e43
8 changed files with 68 additions and 75 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ var/global/nologevent = 0
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>"
msg = "<span class='adminticket'><span class='prefix'>ADMIN TICKET:</span> <span class='adminticket'>[msg]</span></span>"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
if(C.prefs && !(C.prefs.toggles & CHAT_NO_TICKETLOGS))
+4 -4
View File
@@ -171,7 +171,8 @@ var/list/admin_verbs_debug = list(
/client/proc/admin_serialize,
/client/proc/admin_deserialize,
/client/proc/jump_to_ruin,
/client/proc/toggle_medal_disable
/client/proc/toggle_medal_disable,
/client/proc/startadmintickets,
)
var/list/admin_verbs_possess = list(
/proc/possess,
@@ -219,10 +220,9 @@ var/list/admin_verbs_snpc = list(
/client/proc/hide_snpc_verbs
)
var/list/admin_verbs_ticket = list(
/client/proc/startadmintickets,
/client/proc/vvadmintickets,
/client/proc/openTicketUI,
/client/proc/toggleticketlogs
/client/proc/toggleticketlogs,
/client/proc/resolveAllTickets
)
/client/proc/on_holder_add()
+20 -21
View File
@@ -6,10 +6,10 @@ Admin ticket system by Birdtalon
var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicketHolder
//Defines
//Deciseconds until ticket becomes stale if unanswered.
#define ADMIN_TICKET_TIMEOUT 3000
//Decisecions before opening another ticket.
#define ADMIN_TICKET_DUPLICATE_COOLDOWN 1200
//Deciseconds until ticket becomes stale if unanswered. Alerts admins.
#define ADMIN_TICKET_TIMEOUT 3000 // 5 minutes
//Decisecions before the user is allowed to open another ticket while their existing one is open.
#define ADMIN_TICKET_DUPLICATE_COOLDOWN 1200 // 2 minutes
//Status defines
#define ADMIN_TICKET_OPEN 1
@@ -32,19 +32,10 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
ticketCounter++
return
//Set the ticket counter to a value
/datum/adminTicketHolder/proc/setTicketCounter(var/N as num)
ticketCounter = N
/datum/adminTicketHolder/proc/purgeAllTickets() // Delete ALL tickets
QDEL_LIST(allTickets)
message_adminTicket("<span class='adminticket'>[usr.client] purged all admin tickets!</span>")
setTicketCounter(1)
/datum/adminTicketHolder/proc/closeAllOpenTickets() // Close all open tickets
/datum/adminTicketHolder/proc/resolveAllOpenTickets() // Resolve all open tickets
for(var/i in allTickets)
var/datum/admin_ticket/T = i
closeTicket(T.ticketNum)
resolveTicket(T.ticketNum)
//Open a new ticket and populate details then add to the list of open tickets
/datum/adminTicketHolder/proc/newTicket(var/client/C, var/passedContent)
@@ -59,7 +50,6 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
return
var/datum/admin_ticket/T = new /datum/admin_ticket
T.ticketNum = getTicketCounterAndInc()
T.clientName = C
T.timeOpened = worldtime2text()
T.content = passedContent
@@ -68,11 +58,13 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
T.ticketState = ADMIN_TICKET_OPEN
T.timeUntilStale = world.time + ADMIN_TICKET_TIMEOUT
T.setCooldownPeriod()
T.ticketNum = getTicketCounterAndInc()
allTickets += T
//Inform the user that they have opened a ticket
to_chat(C, "<span class='adminticket'>You have opened admin ticket number #[(globAdminTicketHolder.getTicketCounter() - 1)]! Please be patient and we will help you soon!</span>")
//Begin the stale count for this ticket.
spawn()
T.beginStaleCount()
@@ -118,6 +110,7 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
/datum/adminTicketHolder/proc/assignAdminToTicket(var/client/C, var/N as num)
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
T.assignAdmin(C)
return TRUE
//Single admin ticket
@@ -135,23 +128,27 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
var/ticketCooldown // Cooldown before allowing the user to open another ticket.
var/adminAssigned // Admin who has assigned themselves to this ticket
//Ticker called when a ticket is created, checks for stale-ness.
/datum/admin_ticket/proc/beginStaleCount()
if(!src)
return
while(world.time < timeUntilStale && !lastAdminResponse && !adminAssigned)
sleep(200)
while(world.time < timeUntilStale || !lastAdminResponse || !adminAssigned) // While within the stale period OR no admin responded OR no admin assigned.
sleep(200) // Check every 20 seconds.
if(ticketState == ADMIN_TICKET_OPEN && world.time > timeUntilStale)
message_adminTicket("<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'><a href='?src=[UID()];refreshdetail=[ticketNum]'>Ticket #[ticketNum]</a> has been open for [ADMIN_TICKET_TIMEOUT * 0.1] seconds. Changing status to stale.</span>")
ticketState = ADMIN_TICKET_STALE
break
//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)
lastAdminResponse = C
lastResponseTime = worldtime2text()
//Return the ticket state as a colour coded text string.
/datum/admin_ticket/proc/state2text()
switch(ticketState)
if(ADMIN_TICKET_OPEN)
@@ -163,7 +160,9 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
if(ADMIN_TICKET_STALE)
return "<font color='orange'>STALE</font>"
/datum/admin_ticket/proc/assignAdmin(var/client/C)
//Assign the client passed to var/adminAsssigned
/datum/admin_ticket/proc/assignAdmin(var/client/C, var/N as num)
if(!C)
return
adminAssigned = C
adminAssigned = C
return TRUE
+17 -25
View File
@@ -3,8 +3,9 @@
set category = "Tickets"
//dat
var/trStyle = "border:3px solid;"
var/tdStyle = "border:2px solid"
var/trStyle = "border-top:2px solid; border-bottom:2px solid; padding-top: 5px; padding-bottom: 5px;"
var/tdStyleleft = "border-top:2px solid; border-bottom:2px solid; width:150px; text-align:center;"
var/tdStyle = "border-top:2px solid; border-bottom:2px solid;"
var/datum/admin_ticket/ticket
var/dat
dat += "<head><style>.adminticket{border:2px solid}</style></head>"
@@ -13,13 +14,13 @@
dat +="<a href='?src=[UID()];refresh=1'>Refresh</a><br /><a href='?src=[UID()];showopen=1'>Open Tickets</a><a href='?src=[UID()];showresolved=1'>Resolved Tickets</a><a href='?src=[UID()];showclosed=1'>Closed Tickets</a>"
if(tab == ADMIN_TICKET_OPEN)
dat += "<h2>Open Tickets</h2>"
dat += "<table style='width:1100px; border: 3px solid;''>"
dat +="<tr style='border-top:2px solid; border-below: 2px solid; padding-top: 5px; padding-bottom: 5px;'><th>Control</th><th>Ticket</th><th>Detail</th></tr>"
dat += "<table style='width:1300px; border: 3px solid;''>"
dat +="<tr style='[trStyle]'><th style='[tdStyleleft]'>Control</th><th style='[tdStyle]'>Ticket</th></tr>"
if(tab == ADMIN_TICKET_OPEN)
for(var/T in allTickets)
ticket = T
if(ticket.ticketState == ADMIN_TICKET_OPEN || ticket.ticketState == ADMIN_TICKET_STALE)
dat += "<tr style='[trStyle]'><td style ='[tdStyle]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a></td> <td style='border:2px solid'><b>#[ticket.ticketNum]: ([ticket.timeOpened]): [ticket.content]</td> <td style ='[tdStyle]'><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a></td></tr>"
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.timeOpened]) [ticket.ticketState == ADMIN_TICKET_STALE ? "<font color='red'><b>STALE</font>" : ""] </td><td style='[tdStyle]'><b>[ticket.content]</td></tr>"
else
continue
else if(tab == ADMIN_TICKET_RESOLVED)
@@ -27,7 +28,7 @@
for(var/T in allTickets)
ticket = T
if(ticket.ticketState == ADMIN_TICKET_RESOLVED)
dat += "<tr style='[trStyle]'><td style='[tdStyle]'><a href='?src=[UID()];detailreopen=[ticket.ticketNum]'>Re-open</a></td> <td style ='[tdStyle]'><b>#[ticket.ticketNum] ([ticket.timeOpened]): [ticket.content]</td> <td style ='[tdStyle]'><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a></td></tr>"
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.timeOpened]) </td><td style='[tdStyle]'><b>[ticket.content]</td></tr>"
else
continue
else if(tab == ADMIN_TICKET_CLOSED)
@@ -35,7 +36,7 @@
for(var/T in allTickets)
ticket = T
if(ticket.ticketState == ADMIN_TICKET_CLOSED)
dat += "<tr style='[trStyle]'><td style ='[tdStyle]'><td style='[tdStyle]''><a href='?src=[UID()];detailreopen=[ticket.ticketNum]'>Re-open</a></td> <td style ='[tdStyle]'><b>Ticket #[ticket.ticketNum]: at [ticket.timeOpened]: [ticket.content]</td> <td style ='[tdStyle]'><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a></td></tr>"
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.timeOpened]) </td><td style='[tdStyle]'><b>[ticket.content]</td></tr>"
else
continue
@@ -46,7 +47,7 @@
/datum/adminTicketHolder/proc/showUI(var/client/C, var/tab)
var/dat = null
dat = returnUI(tab)
var/datum/browser/popup = new(usr, "admintickets", "Admin Tickets", 1200, 600)
var/datum/browser/popup = new(usr, "admintickets", "Admin Tickets", 1400, 600)
popup.set_content(dat)
popup.open()
@@ -56,7 +57,7 @@
var/dat = "<h1>Admin Tickets</h1>"
dat +="<a href='?src=[UID()];refresh=1>Show All</a><a href='?src=[UID()];refreshdetail=[T.ticketNum]'>Refresh</a>"
dat +="<a href='?src=[UID()];refresh=1'>Show All</a><a href='?src=[UID()];refreshdetail=[T.ticketNum]'>Refresh</a>"
dat += "<h2>Ticket #[T.ticketNum]</h2>"
@@ -64,7 +65,7 @@
dat += "<h4>Ticket Status: <font color='red'>[status]</font>"
dat += "<p>[T.content]</p>"
dat += "<a href='?src=[UID()];detailreopen=[T.ticketNum]'>Re-Open</a><a href='?src=[UID()];detailresolve=[T.ticketNum]'>Resolve</a><br />"
dat += "<a href='?src=[UID()];detailreopen=[T.ticketNum]'>Re-Open</a><a href='?src=[UID()];detailresolve=[T.ticketNum]'>Resolve</a><br /><br />"
if(!T.adminAssigned)
dat += "No admin assigned to this ticket - <a href='?src=[UID()];assignadmin=[T.ticketNum]'>Take Ticket</a><br />"
@@ -76,9 +77,9 @@
else
dat +="<font color='red'>No Admin Response</font>"
dat += "<br />"
dat += "<br /><br />"
dat += "<a href='?src=[UID()];detailclose=[T.ticketNum]'>Close</a>"
dat += "<a href='?src=[UID()];detailclose=[T.ticketNum]'>Close Ticket</a>"
var/datum/browser/popup = new(usr, "adminticketsdetail", "Admin Ticket #[T.ticketNum]", 800, 600)
popup.set_content(dat)
@@ -117,18 +118,6 @@
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"])
if(alert("Are you sure? This will send a negative message.",,"Yes","No") != "Yes")
return
if(globAdminTicketHolder.closeTicket(indexNum))
message_adminTicket("[usr.client] / ([usr]) closed admin ticket number [indexNum]")
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)
if(href_list["detailresolve"])
var/indexNum = text2num(href_list["detailresolve"])
if(globAdminTicketHolder.resolveTicket(indexNum))
@@ -138,6 +127,8 @@
if(href_list["detailclose"])
var/indexNum = text2num(href_list["detailclose"])
if(alert("Are you sure? This will send a negative message.",,"Yes","No") != "Yes")
return
if(globAdminTicketHolder.closeTicket(indexNum))
message_adminTicket("[usr.client] / ([usr]) closed admin ticket number [indexNum]")
to_chat(returnClient(indexNum), "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
@@ -155,4 +146,5 @@
var/indexNum = text2num(href_list["assignadmin"])
if(globAdminTicketHolder.assignAdminToTicket(usr.client, indexNum))
message_adminTicket("[usr.client] / ([usr]) has taken ticket number [indexNum]")
to_chat(returnClient(indexNum), "<span class='adminticket'>Your ticket is being handled by ")
to_chat(returnClient(indexNum), "<span class='adminticket'>Your ticket is being handled by [usr.client].")
showDetailUI(usr, indexNum)
+17 -15
View File
@@ -2,36 +2,38 @@
/client/proc/startadmintickets()
set name = "Restart Admin Ticket System"
set category = "Tickets"
set category = "Debug"
if(!holder)
return
if(!check_rights(R_DEBUG))
if(!holder && !check_rights(R_DEBUG))
return
if(!globAdminTicketHolder)
var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicketHolder
else
if(alert("Are you sure you want to reboot the admin ticket system?",,"Yes","No") != "Yes")
if(alert("Are you sure you want to reboot the admin ticket system?","Reboot Admin Tickets?","Yes","No") != "Yes")
return
message_admins("<span class='admintickets'>Restarting Admin Ticket System!</span>")
globAdminTicketHolder = new /datum/adminTicketHolder
message_admins("<span class='admintickets'>Admin Ticket System Restarted!</span>")
/client/proc/vvadmintickets()
set name = "Debug Admin Tickets"
debug_variables(globAdminTicketHolder)
/client/proc/openTicketUI()
set name = "Open Ticket Interface"
set category = "Tickets"
if(!holder)
return
if(!check_rights(R_ADMIN))
if(!holder && !check_rights(R_ADMIN))
return
globAdminTicketHolder.showUI()
globAdminTicketHolder.showUI()
/client/proc/resolveAllTickets()
set name = "Resolve All Open Tickets"
set category = "Tickets"
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
globAdminTicketHolder.resolveAllOpenTickets()
+7 -7
View File
@@ -115,12 +115,12 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
X << 'sound/effects/adminhelp.ogg'
to_chat(X, msg)
if("Adminhelp")
var/ticketNum
if(globAdminTicketHolder.checkForOpenTicket(usr.client))
var/datum/admin_ticket/T = globAdminTicketHolder.checkForOpenTicket(usr.client)
ticketNum = T.ticketNum
var/ticketNum // Holder for the ticket number
if(globAdminTicketHolder.checkForOpenTicket(usr.client)) // If user already has an open ticket
var/datum/admin_ticket/T = globAdminTicketHolder.checkForOpenTicket(usr.client) // Make T equal to the ticket they have open
ticketNum = T.ticketNum // ticketNum is the number of their ticket.
else
ticketNum = globAdminTicketHolder.getTicketCounter()
ticketNum = globAdminTicketHolder.getTicketCounter() // ticketNum is the ticket ready to be assigned.
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)
@@ -128,8 +128,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
window_flash(X)
to_chat(X, msg)
//Try to open a new adminticket and inform the user if they succed.
globAdminTicketHolder.newTicket(src, msg)
//Open a new adminticket and inform the user.
globAdminTicketHolder.newTicket(src, msg)
//show it to the person adminhelping too
to_chat(src, "<span class='boldnotice'>[selected_type]</b>: [original_msg]</span>")