mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
439 lines
20 KiB
Plaintext
439 lines
20 KiB
Plaintext
/proc/create_message(type, target_ckey, admin_ckey, text, timestamp, server, secret, logged = 1, browse)
|
|
if(!SSdbcore.Connect())
|
|
to_chat(usr, "<span class='danger'>Failed to establish database connection.</span>")
|
|
return
|
|
if(!type)
|
|
return
|
|
if(!target_ckey && (type == "note" || type == "message" || type == "watchlist entry"))
|
|
var/new_ckey = ckey(input(usr,"Who would you like to create a [type] for?","Enter a ckey",null) as null|text)
|
|
if(!new_ckey)
|
|
return
|
|
new_ckey = sanitizeSQL(new_ckey)
|
|
var/datum/DBQuery/query_find_ckey = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[new_ckey]'")
|
|
if(!query_find_ckey.warn_execute())
|
|
qdel(query_find_ckey)
|
|
return
|
|
if(!query_find_ckey.NextRow())
|
|
if(alert(usr, "[new_ckey] has not been seen before, are you sure you want to create a [type] for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes")
|
|
qdel(query_find_ckey)
|
|
return
|
|
qdel(query_find_ckey)
|
|
target_ckey = new_ckey
|
|
if(QDELETED(usr))
|
|
return
|
|
if(target_ckey)
|
|
target_ckey = sanitizeSQL(target_ckey)
|
|
if(!admin_ckey)
|
|
admin_ckey = usr.ckey
|
|
if(!admin_ckey)
|
|
return
|
|
admin_ckey = sanitizeSQL(admin_ckey)
|
|
if(!target_ckey)
|
|
target_ckey = admin_ckey
|
|
if(!text)
|
|
text = input(usr,"Write your [type]","Create [type]") as null|message
|
|
if(!text)
|
|
return
|
|
text = sanitizeSQL(text)
|
|
if(!timestamp)
|
|
timestamp = SQLtime()
|
|
if(!server)
|
|
var/ssqlname = CONFIG_GET(string/serversqlname)
|
|
if (ssqlname)
|
|
server = ssqlname
|
|
server = sanitizeSQL(server)
|
|
if(isnull(secret))
|
|
switch(alert("Hide note from being viewed by players?", "Secret note?","Yes","No","Cancel"))
|
|
if("Yes")
|
|
secret = 1
|
|
if("No")
|
|
secret = 0
|
|
else
|
|
return
|
|
var/datum/DBQuery/query_create_message = SSdbcore.NewQuery("INSERT INTO [format_table_name("messages")] (type, targetckey, adminckey, text, timestamp, server, server_ip, server_port, round_id, secret) VALUES ('[type]', '[target_ckey]', '[admin_ckey]', '[text]', '[timestamp]', '[server]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]','[secret]')")
|
|
var/pm = "[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]: [text]"
|
|
var/header = "[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]" // yogs - Yog Tickets
|
|
if(!query_create_message.warn_execute())
|
|
qdel(query_create_message)
|
|
return
|
|
qdel(query_create_message)
|
|
if(logged)
|
|
log_admin_private(pm)
|
|
message_admins("[header]:<br>[text]")
|
|
admin_ticket_log(target_ckey, header) // yogs - Yog Tickets
|
|
admin_ticket_log(target_ckey, text)
|
|
if(browse)
|
|
browse_messages("[type]")
|
|
else
|
|
browse_messages(target_ckey = target_ckey, agegate = TRUE)
|
|
|
|
/proc/delete_message(message_id, logged = 1, browse)
|
|
if(!SSdbcore.Connect())
|
|
to_chat(usr, "<span class='danger'>Failed to establish database connection.</span>")
|
|
return
|
|
message_id = text2num(message_id)
|
|
if(!message_id)
|
|
return
|
|
var/type
|
|
var/target_ckey
|
|
var/text
|
|
var/user_key_name = key_name(usr)
|
|
var/user_name_admin = key_name_admin(usr)
|
|
var/datum/DBQuery/query_find_del_message = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0")
|
|
if(!query_find_del_message.warn_execute())
|
|
qdel(query_find_del_message)
|
|
return
|
|
if(query_find_del_message.NextRow())
|
|
type = query_find_del_message.item[1]
|
|
target_ckey = query_find_del_message.item[2]
|
|
text = query_find_del_message.item[4]
|
|
qdel(query_find_del_message)
|
|
var/datum/DBQuery/query_del_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET deleted = 1 WHERE id = [message_id]")
|
|
if(!query_del_message.warn_execute())
|
|
qdel(query_del_message)
|
|
return
|
|
qdel(query_del_message)
|
|
if(logged)
|
|
var/m1 = "[user_key_name] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]: [text]"
|
|
var/m2 = "[user_name_admin] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]:<br>[text]"
|
|
log_admin_private(m1)
|
|
message_admins(m2)
|
|
if(browse)
|
|
browse_messages("[type]")
|
|
else
|
|
browse_messages(target_ckey = target_ckey, agegate = TRUE)
|
|
|
|
/proc/edit_message(message_id, browse)
|
|
if(!SSdbcore.Connect())
|
|
to_chat(usr, "<span class='danger'>Failed to establish database connection.</span>")
|
|
return
|
|
message_id = text2num(message_id)
|
|
if(!message_id)
|
|
return
|
|
var/datum/DBQuery/query_find_edit_message = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0")
|
|
if(!query_find_edit_message.warn_execute())
|
|
qdel(query_find_edit_message)
|
|
return
|
|
if(query_find_edit_message.NextRow())
|
|
var/type = query_find_edit_message.item[1]
|
|
var/target_ckey = query_find_edit_message.item[2]
|
|
var/admin_ckey = query_find_edit_message.item[3]
|
|
var/old_text = query_find_edit_message.item[4]
|
|
var/editor_ckey = sanitizeSQL(usr.ckey)
|
|
var/new_text = input("Input new [type]", "New [type]", "[old_text]") as null|message
|
|
if(!new_text)
|
|
qdel(query_find_edit_message)
|
|
return
|
|
new_text = sanitizeSQL(new_text)
|
|
var/edit_text = sanitizeSQL("Edited by [editor_ckey] on [SQLtime()] from<br>[old_text]<br>to<br>[new_text]<hr>")
|
|
var/datum/DBQuery/query_edit_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET text = '[new_text]', lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id] AND deleted = 0")
|
|
if(!query_edit_message.warn_execute())
|
|
qdel(query_edit_message)
|
|
return
|
|
qdel(query_edit_message)
|
|
log_admin_private("[key_name(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from [old_text] to [new_text]")
|
|
message_admins("[key_name_admin(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from<br>[old_text]<br>to<br>[new_text]")
|
|
if(browse)
|
|
browse_messages("[type]")
|
|
else
|
|
browse_messages(target_ckey = target_ckey, agegate = TRUE)
|
|
qdel(query_find_edit_message)
|
|
|
|
/proc/toggle_message_secrecy(message_id)
|
|
if(!SSdbcore.Connect())
|
|
to_chat(usr, "<span class='danger'>Failed to establish database connection.</span>")
|
|
return
|
|
message_id = text2num(message_id)
|
|
if(!message_id)
|
|
return
|
|
var/editor_ckey = usr.ckey
|
|
var/kn = key_name(usr)
|
|
var/kna = key_name_admin(usr)
|
|
var/datum/DBQuery/query_find_message_secret = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, secret FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0")
|
|
if(!query_find_message_secret.warn_execute())
|
|
qdel(query_find_message_secret)
|
|
return
|
|
if(query_find_message_secret.NextRow())
|
|
var/type = query_find_message_secret.item[1]
|
|
var/target_ckey = query_find_message_secret.item[2]
|
|
var/admin_ckey = query_find_message_secret.item[3]
|
|
var/secret = text2num(query_find_message_secret.item[4])
|
|
editor_ckey = sanitizeSQL(editor_ckey)
|
|
var/edit_text = "Made [secret ? "not secret" : "secret"] by [editor_ckey] on [SQLtime()]<hr>"
|
|
var/datum/DBQuery/query_message_secret = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET secret = NOT secret, lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]")
|
|
if(!query_message_secret.warn_execute())
|
|
qdel(query_find_message_secret)
|
|
qdel(query_message_secret)
|
|
return
|
|
qdel(query_message_secret)
|
|
log_admin_private("[kn] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]")
|
|
message_admins("[kna] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]")
|
|
browse_messages(target_ckey = target_ckey, agegate = TRUE)
|
|
qdel(query_find_message_secret)
|
|
|
|
/proc/browse_messages(type, target_ckey, index, linkless = FALSE, filter, agegate = FALSE)
|
|
if(!SSdbcore.Connect())
|
|
to_chat(usr, "<span class='danger'>Failed to establish database connection.</span>")
|
|
return
|
|
var/list/output = list()
|
|
var/ruler = "<hr style='background:#000000; border:0; height:3px'>"
|
|
var/list/navbar = list("<a href='?_src_=holder;[HrefToken()];nonalpha=1'>\[All\]</a>|<a href='?_src_=holder;[HrefToken()];nonalpha=2'>\[#\]</a>")
|
|
for(var/letter in GLOB.alphabet)
|
|
navbar += "|<a href='?_src_=holder;[HrefToken()];showmessages=[letter]'>\[[letter]\]</a>"
|
|
navbar += "|<a href='?_src_=holder;[HrefToken()];showmemo=1'>\[Memos\]</a>|<a href='?_src_=holder;[HrefToken()];showwatch=1'>\[Watchlist\]</a>"
|
|
navbar += "<br><form method='GET' name='search' action='?'>\
|
|
<input type='hidden' name='_src_' value='holder'>\
|
|
[HrefTokenFormField()]\
|
|
<input type='text' name='searchmessages' value='[index]'>\
|
|
<input type='submit' value='Search'></form>"
|
|
if(!linkless)
|
|
output = navbar
|
|
if(type == "memo" || type == "watchlist entry")
|
|
if(type == "memo")
|
|
output += "<h2><center>Admin memos</h2>"
|
|
output += "<a href='?_src_=holder;[HrefToken()];addmemo=1'>\[Add memo\]</a></center>"
|
|
else if(type == "watchlist entry")
|
|
output += "<h2><center>Watchlist entries</h2>"
|
|
output += "<a href='?_src_=holder;[HrefToken()];addwatchempty=1'>\[Add watchlist entry\]</a>"
|
|
if(filter)
|
|
output += "|<a href='?_src_=holder;[HrefToken()];showwatch=1'>\[Unfilter clients\]</a></center>"
|
|
else
|
|
output += "|<a href='?_src_=holder;[HrefToken()];showwatchfilter=1'>\[Filter offline clients\]</a></center>"
|
|
output += ruler
|
|
var/datum/DBQuery/query_get_type_messages = SSdbcore.NewQuery("SELECT id, targetckey, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0")
|
|
if(!query_get_type_messages.warn_execute())
|
|
qdel(query_get_type_messages)
|
|
return
|
|
while(query_get_type_messages.NextRow())
|
|
if(QDELETED(usr))
|
|
return
|
|
var/id = query_get_type_messages.item[1]
|
|
var/t_ckey = query_get_type_messages.item[2]
|
|
if(type == "watchlist entry" && filter && !(t_ckey in GLOB.directory))
|
|
continue
|
|
var/admin_ckey = query_get_type_messages.item[3]
|
|
var/text = query_get_type_messages.item[4]
|
|
var/timestamp = query_get_type_messages.item[5]
|
|
var/server = query_get_type_messages.item[6]
|
|
var/editor_ckey = query_get_type_messages.item[7]
|
|
output += "<b>"
|
|
if(type == "watchlist entry")
|
|
output += "[t_ckey] | "
|
|
output += "[timestamp] | [server] | [admin_ckey]</b>"
|
|
output += " <a href='?_src_=holder;[HrefToken()];deletemessageempty=[id]'>\[Delete\]</a>"
|
|
output += " <a href='?_src_=holder;[HrefToken()];editmessageempty=[id]'>\[Edit\]</a>"
|
|
if(editor_ckey)
|
|
output += " <font size='2'>Last edit by [editor_ckey] <a href='?_src_=holder;[HrefToken()];messageedits=[id]'>(Click here to see edit log)</a></font>"
|
|
output += "<br>[text]<hr style='background:#000000; border:0; height:1px'>"
|
|
qdel(query_get_type_messages)
|
|
if(target_ckey)
|
|
target_ckey = sanitizeSQL(target_ckey)
|
|
var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, adminckey, text, timestamp, server, lasteditor, DATEDIFF(NOW(), timestamp) AS `age` FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 ORDER BY timestamp DESC")
|
|
if(!query_get_messages.warn_execute())
|
|
qdel(query_get_messages)
|
|
return
|
|
var/list/messagedata = list()
|
|
var/list/watchdata = list()
|
|
var/list/notedata = list()
|
|
var/skipped = 0
|
|
while(query_get_messages.NextRow())
|
|
if(QDELETED(usr))
|
|
return
|
|
type = query_get_messages.item[1]
|
|
if(type == "memo")
|
|
continue
|
|
var/secret = text2num(query_get_messages.item[2])
|
|
if(linkless && secret)
|
|
continue
|
|
var/id = query_get_messages.item[3]
|
|
var/admin_ckey = query_get_messages.item[4]
|
|
var/text = query_get_messages.item[5]
|
|
var/timestamp = query_get_messages.item[6]
|
|
var/server = query_get_messages.item[7]
|
|
var/editor_ckey = query_get_messages.item[8]
|
|
var/age = text2num(query_get_messages.item[9])
|
|
var/alphatext = ""
|
|
var/nsd = CONFIG_GET(number/note_stale_days)
|
|
var/nfd = CONFIG_GET(number/note_fresh_days)
|
|
if (agegate && type == "note" && isnum(nsd) && isnum(nfd) && nsd > nfd)
|
|
var/alpha = CLAMP(100 - (age - nfd) * (85 / (nsd - nfd)), 15, 100)
|
|
if (alpha < 100)
|
|
if (alpha <= 15)
|
|
if (skipped)
|
|
skipped++
|
|
continue
|
|
alpha = 10
|
|
skipped = TRUE
|
|
alphatext = "filter: alpha(opacity=[alpha]); opacity: [alpha/100];"
|
|
|
|
var/list/data = list("<p style='margin:0px;[alphatext]'> <b>[timestamp] | [server] | [admin_ckey]</b>")
|
|
if(!linkless)
|
|
data += " <a href='?_src_=holder;[HrefToken()];deletemessage=[id]'>\[Delete\]</a>"
|
|
if(type == "note")
|
|
data += " <a href='?_src_=holder;[HrefToken()];secretmessage=[id]'>[secret ? "<b>\[Secret\]</b>" : "\[Not secret\]"]</a>"
|
|
if(type == "message sent")
|
|
data += " <font size='2'>Message has been sent</font>"
|
|
if(editor_ckey)
|
|
data += "|"
|
|
else
|
|
data += " <a href='?_src_=holder;[HrefToken()];editmessage=[id]'>\[Edit\]</a>"
|
|
if(editor_ckey)
|
|
data += " <font size='2'>Last edit by [editor_ckey] <a href='?_src_=holder;[HrefToken()];messageedits=[id]'>(Click here to see edit log)</a></font>"
|
|
data += "<br>[text]</p><hr style='background:#000000; border:0; height:1px; [alphatext]'>"
|
|
switch(type)
|
|
if("message")
|
|
messagedata += data
|
|
if("message sent")
|
|
messagedata += data
|
|
if("watchlist entry")
|
|
watchdata += data
|
|
if("note")
|
|
notedata += data
|
|
qdel(query_get_messages)
|
|
output += "<h2><center>[target_ckey]</center></h2><center>"
|
|
if(!linkless)
|
|
output += "<a href='?_src_=holder;[HrefToken()];addnote=[target_ckey]'>\[Add note\]</a>"
|
|
output += " <a href='?_src_=holder;[HrefToken()];addmessage=[target_ckey]'>\[Add message\]</a>"
|
|
output += " <a href='?_src_=holder;[HrefToken()];addwatch=[target_ckey]'>\[Add to watchlist\]</a>"
|
|
output += " <a href='?_src_=holder;[HrefToken()];showmessageckey=[target_ckey]'>\[Refresh page\]</a></center>"
|
|
else
|
|
output += " <a href='?_src_=holder;[HrefToken()];showmessageckeylinkless=[target_ckey]'>\[Refresh page\]</a></center>"
|
|
output += ruler
|
|
if(messagedata)
|
|
output += "<h4>Messages</h4>"
|
|
output += messagedata
|
|
if(watchdata)
|
|
output += "<h4>Watchlist</h4>"
|
|
output += watchdata
|
|
if(notedata)
|
|
output += "<h4>Notes</h4>"
|
|
output += notedata
|
|
if(!linkless)
|
|
if (agegate)
|
|
if (skipped) //the first skipped message is still shown so that we can put this link over it.
|
|
output += " <center><a href='?_src_=holder;[HrefToken()];showmessageckey=[target_ckey];showall=1' style='position: relative; top: -3em;'>\[Show [skipped] hidden messages\]</center>"
|
|
else
|
|
output += " <center><a href='?_src_=holder;[HrefToken()];showmessageckey=[target_ckey];showall=1'>\[Show All\]</center>"
|
|
|
|
else
|
|
output += " <center><a href='?_src_=holder;[HrefToken()];showmessageckey=[target_ckey]'>\[Hide Old\]</center>"
|
|
if(index)
|
|
var/index_ckey
|
|
var/search
|
|
output += "<center><a href='?_src_=holder;[HrefToken()];addmessageempty=1'>\[Add message\]</a><a href='?_src_=holder;[HrefToken()];addwatchempty=1'>\[Add watchlist entry\]</a><a href='?_src_=holder;[HrefToken()];addnoteempty=1'>\[Add note\]</a></center>"
|
|
output += ruler
|
|
if(!isnum(index))
|
|
index = sanitizeSQL(index)
|
|
switch(index)
|
|
if(1)
|
|
search = "^."
|
|
if(2)
|
|
search = "^\[^\[:alpha:\]\]"
|
|
else
|
|
search = "^[index]"
|
|
var/datum/DBQuery/query_list_messages = SSdbcore.NewQuery("SELECT DISTINCT targetckey FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey REGEXP '[search]' AND deleted = 0 ORDER BY targetckey")
|
|
if(!query_list_messages.warn_execute())
|
|
qdel(query_list_messages)
|
|
return
|
|
while(query_list_messages.NextRow())
|
|
if(QDELETED(usr))
|
|
return
|
|
index_ckey = query_list_messages.item[1]
|
|
output += "<a href='?_src_=holder;[HrefToken()];showmessageckey=[index_ckey]'>[index_ckey]</a><br>"
|
|
qdel(query_list_messages)
|
|
else if(!type && !target_ckey && !index)
|
|
output += "<center></a> <a href='?_src_=holder;[HrefToken()];addmessageempty=1'>\[Add message\]</a><a href='?_src_=holder;[HrefToken()];addwatchempty=1'>\[Add watchlist entry\]</a><a href='?_src_=holder;[HrefToken()];addnoteempty=1'>\[Add note\]</a></center>"
|
|
output += ruler
|
|
usr << browse({"<!DOCTYPE html><html><head><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /></head><body>[jointext(output, "")]</body></html>"}, "window=browse_messages;size=900x500")
|
|
|
|
/proc/get_message_output(type, target_ckey)
|
|
if(!SSdbcore.Connect())
|
|
to_chat(usr, "<span class='danger'>Failed to establish database connection.</span>")
|
|
return
|
|
if(!type)
|
|
return
|
|
var/output
|
|
if(target_ckey)
|
|
target_ckey = sanitizeSQL(target_ckey)
|
|
var/query = "SELECT id, adminckey, text, timestamp, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0"
|
|
if(type == "message" || type == "watchlist entry")
|
|
query += " AND targetckey = '[target_ckey]'"
|
|
var/datum/DBQuery/query_get_message_output = SSdbcore.NewQuery(query)
|
|
if(!query_get_message_output.warn_execute())
|
|
qdel(query_get_message_output)
|
|
return
|
|
while(query_get_message_output.NextRow())
|
|
var/message_id = query_get_message_output.item[1]
|
|
var/admin_ckey = query_get_message_output.item[2]
|
|
var/text = query_get_message_output.item[3]
|
|
var/timestamp = query_get_message_output.item[4]
|
|
var/editor_ckey = query_get_message_output.item[5]
|
|
switch(type)
|
|
if("message")
|
|
output += "<font color='red' size='3'><b>Admin message left by <span class='prefix'>[admin_ckey]</span> on [timestamp]</b></font>"
|
|
output += "<br><font color='red'>[text]</font><br>"
|
|
var/datum/DBQuery/query_message_read = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET type = 'message sent' WHERE id = [message_id]")
|
|
if(!query_message_read.warn_execute())
|
|
qdel(query_get_message_output)
|
|
qdel(query_message_read)
|
|
return
|
|
qdel(query_message_read)
|
|
if("watchlist entry")
|
|
message_admins("<font color='red'><B>Notice: </B></font><font color='blue'>[key_name_admin(target_ckey)] has been on the watchlist since [timestamp] and has just connected - Reason: [text]</font>")
|
|
send2irc_adminless_only("Watchlist", "[key_name(target_ckey)] is on the watchlist and has just connected - Reason: [text]")
|
|
if("memo")
|
|
output += "<span class='memo'>Memo by <span class='prefix'>[admin_ckey]</span> on [timestamp]"
|
|
if(editor_ckey)
|
|
output += "<br><span class='memoedit'>Last edit by [editor_ckey] <A href='?_src_=holder;[HrefToken()];messageedits=[message_id]'>(Click here to see edit log)</A></span>"
|
|
output += "<br>[text]</span><br>"
|
|
qdel(query_get_message_output)
|
|
return output
|
|
|
|
#define NOTESFILE "data/player_notes.sav"
|
|
//if the AUTOCONVERT_NOTES is turned on, anytime a player connects this will be run to try and add all their notes to the databas
|
|
/proc/convert_notes_sql(ckey)
|
|
var/savefile/notesfile = new(NOTESFILE)
|
|
if(!notesfile)
|
|
log_game("Error: Cannot access [NOTESFILE]")
|
|
return
|
|
notesfile.cd = "/[ckey]"
|
|
while(!notesfile.eof)
|
|
var/notetext
|
|
notesfile >> notetext
|
|
var/server
|
|
var/ssqlname = CONFIG_GET(string/serversqlname)
|
|
if (ssqlname)
|
|
server = ssqlname
|
|
var/regex/note = new("^(\\d{2}-\\w{3}-\\d{4}) \\| (.+) ~(\\w+)$", "i")
|
|
note.Find(notetext)
|
|
var/timestamp = note.group[1]
|
|
notetext = note.group[2]
|
|
var/admin_ckey = note.group[3]
|
|
var/datum/DBQuery/query_convert_time = SSdbcore.NewQuery("SELECT ADDTIME(STR_TO_DATE('[timestamp]','%d-%b-%Y'), '0')")
|
|
if(!query_convert_time.Execute())
|
|
qdel(query_convert_time)
|
|
return
|
|
if(query_convert_time.NextRow())
|
|
timestamp = query_convert_time.item[1]
|
|
qdel(query_convert_time)
|
|
if(ckey && notetext && timestamp && admin_ckey && server)
|
|
create_message("note", ckey, admin_ckey, notetext, timestamp, server, 1, 0)
|
|
notesfile.cd = "/"
|
|
notesfile.dir.Remove(ckey)
|
|
|
|
/*alternatively this proc can be run once to pass through every note and attempt to convert it before deleting the file, if done then AUTOCONVERT_NOTES should be turned off
|
|
this proc can take several minutes to execute fully if converting and cause DD to hang if converting a lot of notes; it's not advised to do so while a server is live
|
|
/proc/mass_convert_notes()
|
|
to_chat(world, "Beginning mass note conversion")
|
|
var/savefile/notesfile = new(NOTESFILE)
|
|
if(!notesfile)
|
|
log_game("Error: Cannot access [NOTESFILE]")
|
|
return
|
|
notesfile.cd = "/"
|
|
for(var/ckey in notesfile.dir)
|
|
convert_notes_sql(ckey)
|
|
to_chat(world, "Deleting NOTESFILE")
|
|
fdel(NOTESFILE)
|
|
to_chat(world, "Finished mass note conversion, remember to turn off AUTOCONVERT_NOTES")*/
|
|
#undef NOTESFILE
|