diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index dc05bae4431..56f05e84f10 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -1,15 +1,22 @@ Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255. -The latest database version is 4.6; The query to update the schema revision table is: +The latest database version is 4.7; The query to update the schema revision table is: -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 6); +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 7); or -INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 6); +INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 7); In any query remember to add a prefix to the table names if you use one. ---------------------------------------------------- +Version 4.7, 18 August 2018, by CitrusGender +Modified table `messages`, adding column `severity` to classify notes based on their severity. + +ALTER TABLE `messages` ADD `severity` enum('high','medium','minor','none') DEFAULT NULL AFTER `expire_timestamp` + +---------------------------------------------------- + Version 4.6, 11 August 2018, by Jordie0608 Modified table `messages`, adding column `expire_timestamp` to allow for auto-"deleting" messages. diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 18602cc52a9..dc0861220ae 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -254,6 +254,7 @@ CREATE TABLE `messages` ( `round_id` int(11) unsigned NOT NULL, `secret` tinyint(1) unsigned NOT NULL, `expire_timestamp` datetime DEFAULT NULL, + `severity` enum('high','medium','minor','none') DEFAULT NULL, `lasteditor` varchar(32) DEFAULT NULL, `edits` text, `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 938b293035a..5cb57a9582e 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -254,6 +254,7 @@ CREATE TABLE `SS13_messages` ( `round_id` int(11) unsigned NOT NULL, `secret` tinyint(1) unsigned NOT NULL, `expire_timestamp` datetime DEFAULT NULL, + `severity` enum('high','medium','minor','none') DEFAULT NULL, `lasteditor` varchar(32) DEFAULT NULL, `edits` text, `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 6f49344dc6b..b62febed7e2 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -1,7 +1,7 @@ //Update this whenever the db schema changes //make sure you add an update to the schema_version stable in the db changelog #define DB_MAJOR_VERSION 4 -#define DB_MINOR_VERSION 6 +#define DB_MINOR_VERSION 7 //Timing subsystem //Don't run if there is an identical unique timer active diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index cf5c1d26063..787866a4944 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -412,6 +412,12 @@ output += "IP: " output += "Computer id: " output += "Duration: " + output += "Severity:" output += "" for(var/j in get_all_jobs()) diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index fefcf003fe6..7905a8d155e 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -123,9 +123,9 @@ GLOBAL_PROTECT(Banlist) if (temp) WRITE_FILE(GLOB.Banlist["minutes"], bantimestamp) if(!temp) - create_message("note", key, bannedby, "Permanently banned - [reason]", null, null, 0, 0, null, 0) + create_message("note", key, bannedby, "Permanently banned - [reason]", null, null, 0, 0, null, 0, 0) else - create_message("note", key, bannedby, "Banned for [minutes] minutes - [reason]", null, null, 0, 0, null, 0) + create_message("note", key, bannedby, "Banned for [minutes] minutes - [reason]", null, null, 0, 0, null, 0, 0) return 1 /proc/RemoveBan(foldername) diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index e7a9b76851f..928e289cb75 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -1,4 +1,4 @@ -/proc/create_message(type, target_key, admin_ckey, text, timestamp, server, secret, logged = 1, browse, expiry) +/proc/create_message(type, target_key, admin_ckey, text, timestamp, server, secret, logged = 1, browse, expiry, note_severity) if(!SSdbcore.Connect()) to_chat(usr, "Failed to establish database connection.") return @@ -72,7 +72,12 @@ return expiry = query_validate_expire_time.item[1] qdel(query_validate_expire_time) - 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, expire_timestamp) 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]', [expiry ? "'[expiry]'" : "NULL"])") + if(type == "note" && isnull(note_severity)) + note_severity = input("Set the severity of the note.", "Severity", null, null) as null|anything in list("High", "Medium", "Minor", "None") + if(!note_severity) + return + note_severity = sanitizeSQL(note_severity) + 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, expire_timestamp, severity) 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]', [expiry ? "'[expiry]'" : "NULL"], [note_severity ? "'[note_severity]'" : "NULL"])") var/pm = "[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""]: [text]" var/header = "[key_name_admin(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""]" if(!query_create_message.warn_execute()) @@ -222,6 +227,45 @@ browse_messages(target_ckey = ckey(target_key), agegate = TRUE) qdel(query_find_edit_expiry_message) +/proc/edit_message_severity(message_id) + if(!SSdbcore.Connect()) + to_chat(usr, "Failed to establish database connection.") + return + message_id = text2num(message_id) + if(!message_id) + return + var/kn = key_name(usr) + var/kna = key_name_admin(usr) + var/datum/DBQuery/query_find_edit_note_severity = SSdbcore.NewQuery("SELECT type, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), severity FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") + if(!query_find_edit_note_severity.warn_execute()) + qdel(query_find_edit_note_severity) + return + if(query_find_edit_note_severity.NextRow()) + var/type = query_find_edit_note_severity.item[1] + var/target_key = query_find_edit_note_severity.item[2] + var/admin_key = query_find_edit_note_severity.item[3] + var/old_severity = query_find_edit_note_severity.item[4] + if(!old_severity) + old_severity = "NA" + var/editor_key = sanitizeSQL(usr.key) + var/editor_ckey = sanitizeSQL(usr.ckey) + var/new_severity = input("Set the severity of the note.", "Severity", null, null) as null|anything in list("high", "medium", "minor", "none") //lowercase for edit log consistency + if(!new_severity) + qdel(query_find_edit_note_severity) + return + new_severity = sanitizeSQL(new_severity) + var/edit_text = sanitizeSQL("Note severity edited by [editor_key] on [SQLtime()] from [old_severity] to [new_severity]
") + var/datum/DBQuery/query_edit_note_severity = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET severity = '[new_severity]', lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id] AND deleted = 0") + if(!query_edit_note_severity.warn_execute(async = TRUE)) + qdel(query_edit_note_severity) + qdel(qdel(query_find_edit_note_severity)) + return + qdel(query_edit_note_severity) + log_admin_private("[kn] has edited the severity of a [type] for [target_key] made by [admin_key] from [old_severity] to [new_severity]") + message_admins("[kna] has edited the severity time of a [type] for [target_key] made by [admin_key] from [old_severity] to [new_severity]") + browse_messages(target_ckey = ckey(target_key), agegate = TRUE) + qdel(query_find_edit_note_severity) + /proc/toggle_message_secrecy(message_id) if(!SSdbcore.Connect()) to_chat(usr, "Failed to establish database connection.") @@ -260,10 +304,10 @@ return var/list/output = list() var/ruler = "
" - var/list/navbar = list("\[All\]|\[#\]") + var/list/navbar = list("All#") for(var/letter in GLOB.alphabet) - navbar += "|\[[letter]\]" - navbar += "|\[Memos\]|\[Watchlist\]" + navbar += "[letter]" + navbar += "MemosWatchlist" navbar += "
\ \ [HrefTokenFormField()]\ @@ -274,14 +318,14 @@ if(type == "memo" || type == "watchlist entry") if(type == "memo") output += "

Admin memos

" - output += "\[Add memo\]" + output += "Add memo" else if(type == "watchlist entry") output += "

Watchlist entries

" - output += "\[Add watchlist entry\]" + output += "Add watchlist entry" if(filter) - output += "|\[Unfilter clients\]" + output += "Unfilter clients" else - output += "|\[Filter offline clients\]" + output += "Filter offline clients" output += ruler var/datum/DBQuery/query_get_type_messages = SSdbcore.NewQuery("SELECT id, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), targetckey, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), text, timestamp, server, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = lasteditor), expire_timestamp FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0 AND (expire_timestamp > NOW() OR expire_timestamp IS NULL)") if(!query_get_type_messages.warn_execute()) @@ -308,9 +352,9 @@ if(expire_timestamp) output += " | Expires [expire_timestamp]" output += "" - output += " \[Change Expiry Time\]" - output += " \[Delete\]" - output += " \[Edit\]" + output += " Change Expiry Time" + output += " Delete" + output += " Edit" if(editor_key) output += " Last edit by [editor_key] (Click here to see edit log)" output += "
[text]
" @@ -318,7 +362,7 @@ if(target_ckey) target_ckey = sanitizeSQL(target_ckey) var/target_key - var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), text, timestamp, server, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = lasteditor), DATEDIFF(NOW(), timestamp), (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), expire_timestamp FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 AND (expire_timestamp > NOW() OR expire_timestamp IS NULL) ORDER BY timestamp DESC") + var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), text, timestamp, server, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = lasteditor), DATEDIFF(NOW(), timestamp), (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), expire_timestamp, severity FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 AND (expire_timestamp > NOW() OR expire_timestamp IS NULL) ORDER BY timestamp DESC") if(!query_get_messages.warn_execute()) qdel(query_get_messages) return @@ -344,6 +388,7 @@ var/age = text2num(query_get_messages.item[9]) target_key = query_get_messages.item[10] var/expire_timestamp = query_get_messages.item[11] + var/severity = query_get_messages.item[12] var/alphatext = "" var/nsd = CONFIG_GET(number/note_stale_days) var/nfd = CONFIG_GET(number/note_fresh_days) @@ -357,25 +402,33 @@ alpha = 10 skipped = TRUE alphatext = "filter: alpha(opacity=[alpha]); opacity: [alpha/100];" - - var/list/data = list("

[timestamp] | [server] | [admin_key]") + var/list/data = list("

") + if(severity) + data += " " + data += "[timestamp] | [server] | [admin_key][secret ? " | - Secret" : ""]" if(expire_timestamp) data += " | Expires [expire_timestamp]" - data += "" + data += "

" if(!linkless) - data += " \[Change Expiry Time\]" - data += " \[Delete\]" if(type == "note") - data += " [secret ? "\[Secret\]" : "\[Not secret\]"]" + if(severity) + data += "[severity=="none" ? "No" : "[capitalize(severity)]"] Severity" + else + data += "N/A Severity" + data += " Change Expiry Time" + data += " Delete" + if(type == "note") + data += " [secret ? "Secret" : "Not secret"]" if(type == "message sent") data += " Message has been sent" if(editor_key) data += "|" else - data += " \[Edit\]" + data += " Edit" if(editor_key) data += " Last edit by [editor_key] (Click here to see edit log)" - data += "
[text]


" + data += "
" + data += "

[text]


" switch(type) if("message") messagedata += data @@ -396,34 +449,33 @@ qdel(query_get_message_key) output += "

[target_key]

" if(!linkless) - output += "\[Add note\]" - output += " \[Add message\]" - output += " \[Add to watchlist\]" - output += " \[Refresh page\]
" + output += "Add note" + output += " Add message" + output += " Add to watchlist" + output += " Refresh page" else - output += " \[Refresh page\]" + output += " Refresh page" output += ruler if(messagedata) - output += "

Messages

" + output += "

Messages

" output += messagedata if(watchdata) - output += "

Watchlist

" + output += "

Watchlist

" output += watchdata if(notedata) - output += "

Notes

" + output += "

Notes

" 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 += "
\[Show [skipped] hidden messages\]
" + output += "
Show [skipped] hidden messages
" else - output += "
\[Show All\]
" - + output += "
Show All
" else - output += "
\[Hide Old\]
" + output += "
Hide Old
" if(index) var/search - output += "
\[Add message\]\[Add watchlist entry\]\[Add note\]
" + output += "
Add messageAdd watchlist entryAdd note
" output += ruler if(!isnum(index)) index = sanitizeSQL(index) @@ -446,9 +498,13 @@ output += "[index_key]
" qdel(query_list_messages) else if(!type && !target_ckey && !index) - output += "
\[Add message\]\[Add watchlist entry\]\[Add note\]
" + output += "
Add messageAdd watchlist entryAdd note
" output += ruler - usr << browse({"[jointext(output, "")]"}, "window=browse_messages;size=900x500") + var/datum/browser/browser = new(usr, "Note panel", "Manage player notes", 1000, 500) + var/datum/asset/notes_assets = get_asset_datum(/datum/asset/simple/notes) + notes_assets.send(src) + browser.set_content(jointext(output, "")) + browser.open() /proc/get_message_output(type, target_ckey) if(!SSdbcore.Connect()) @@ -521,7 +577,7 @@ 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, null, 0) + create_message("note", ckey, admin_ckey, notetext, timestamp, server, 1, 0, null, 0, 0) notesfile.cd = "/" notesfile.dir.Remove(ckey) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 5b295f384dd..43d9c06388f 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -213,37 +213,38 @@ var/banduration = text2num(href_list["dbbaddduration"]) var/banjob = href_list["dbbanaddjob"] var/banreason = href_list["dbbanreason"] + var/banseverity = href_list["dbbanaddseverity"] switch(bantype) if(BANTYPE_PERMA) - if(!banckey || !banreason) - to_chat(usr, "Not enough parameters (Requires ckey and reason).") + if(!banckey || !banreason || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity, and reason).") return banduration = null banjob = null if(BANTYPE_TEMP) - if(!banckey || !banreason || !banduration) - to_chat(usr, "Not enough parameters (Requires ckey, reason and duration).") + if(!banckey || !banreason || !banduration || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, reason, severity and duration).") return banjob = null if(BANTYPE_JOB_PERMA) - if(!banckey || !banreason || !banjob) - to_chat(usr, "Not enough parameters (Requires ckey, reason and job).") + if(!banckey || !banreason || !banjob || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity, reason and job).") return banduration = null if(BANTYPE_JOB_TEMP) - if(!banckey || !banreason || !banjob || !banduration) - to_chat(usr, "Not enough parameters (Requires ckey, reason and job).") + if(!banckey || !banreason || !banjob || !banduration || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity, reason and job).") return if(BANTYPE_ADMIN_PERMA) - if(!banckey || !banreason) - to_chat(usr, "Not enough parameters (Requires ckey and reason).") + if(!banckey || !banreason || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity and reason).") return banduration = null banjob = null if(BANTYPE_ADMIN_TEMP) - if(!banckey || !banreason || !banduration) - to_chat(usr, "Not enough parameters (Requires ckey, reason and duration).") + if(!banckey || !banreason || !banduration || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity, reason and duration).") return banjob = null @@ -268,7 +269,7 @@ if(!DB_ban_record(bantype, playermob, banduration, banreason, banjob, bankey, banip, bancid )) to_chat(usr, "Failed to apply ban.") return - create_message("note", bankey, null, banreason, null, null, 0, 0, null, 0) + create_message("note", bankey, null, banreason, null, null, 0, 0, null, 0, banseverity) else if(href_list["editrightsbrowser"]) edit_admin_permissions(0) @@ -597,6 +598,9 @@ var/reason = input(usr,"Please State Reason.","Reason") as message|null if(!reason) return + var/severity = input("Set the severity of the note/ban.", "Severity", null, null) as null|anything in list("High", "Medium", "Minor", "None") + if(!severity) + return if(!DB_ban_record(BANTYPE_JOB_PERMA, M, -1, reason, "appearance")) to_chat(usr, "Failed to apply ban.") return @@ -604,7 +608,7 @@ jobban_buildcache(M.client) ban_unban_log_save("[key_name(usr)] appearance banned [key_name(M)]. reason: [reason]") log_admin_private("[key_name(usr)] appearance banned [key_name(M)]. \nReason: [reason]") - create_message("note", M.key, null, "Appearance banned - [reason]", null, null, 0, 0, null, 0) + create_message("note", M.key, null, "Appearance banned - [reason]", null, null, 0, 0, null, 0, severity) message_admins("[key_name_admin(usr)] appearance banned [key_name_admin(M)].") to_chat(M, "You have been appearance banned by [usr.client.key].") to_chat(M, "The reason is: [reason]") @@ -967,6 +971,7 @@ //Banning comes first if(notbannedlist.len) //at least 1 unbanned job exists in joblist so we have stuff to ban. + var/severity = null switch(alert("Temporary Ban for [M.key]?",,"Yes","No", "Cancel")) if("Yes") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null @@ -976,7 +981,9 @@ var/reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null if(!reason) return - + severity = input("Set the severity of the note/ban.", "Severity", null, null) as null|anything in list("High", "Medium", "Minor", "None") + if(!severity) + return var/msg for(var/job in notbannedlist) if(!DB_ban_record(BANTYPE_JOB_TEMP, M, mins, reason, job)) @@ -990,7 +997,7 @@ msg = job else msg += ", [job]" - create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0) + create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0, severity) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes.") to_chat(M, "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg].") to_chat(M, "The reason is: [reason]") @@ -999,6 +1006,9 @@ return 1 if("No") var/reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null + severity = input("Set the severity of the note/ban.", "Severity", null, null) as null|anything in list("High", "Medium", "Minor", "None") + if(!severity) + return if(reason) var/msg for(var/job in notbannedlist) @@ -1013,7 +1023,7 @@ msg = job else msg += ", [job]" - create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0) + create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0, severity) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg].") to_chat(M, "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg].") to_chat(M, "The reason is: [reason]") @@ -1150,6 +1160,12 @@ var/message_id = href_list["editmessageexpiryempty"] edit_message_expiry(message_id, browse = 1) + else if(href_list["editmessageseverity"]) + if(!check_rights(R_ADMIN)) + return + var/message_id = href_list["editmessageseverity"] + edit_message_severity(message_id) + else if(href_list["secretmessage"]) if(!check_rights(R_ADMIN)) return @@ -1214,7 +1230,9 @@ if(query_get_message_edits.NextRow()) var/edit_log = query_get_message_edits.item[1] if(!QDELETED(usr)) - usr << browse(edit_log,"window=noteedits") + var/datum/browser/browser = new(usr, "Note edits", "Note edits") + browser.set_content(jointext(edit_log, "")) + browser.open() qdel(query_get_message_edits) else if(href_list["newban"]) diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 88d08260e20..7c08a3332ce 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -551,6 +551,14 @@ GLOBAL_LIST_EMPTY(asset_datums) "padlock.png" = 'html/padlock.png' ) +/datum/asset/simple/notes + assets = list( + "high_button.png" = 'html/high_button.png', + "medium_button.png" = 'html/medium_button.png', + "minor_button.png" = 'html/minor_button.png', + "none_button.png" = 'html/none_button.png', + ) + //this exists purely to avoid meta by pre-loading all language icons. /datum/asset/language/register() for(var/path in typesof(/datum/language)) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index e5468b5e1c2..b5b7719220c 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -682,7 +682,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) qdel(query_get_notes) return qdel(query_get_notes) - create_message("note", key, system_ckey, message, null, null, 0, 0, null, 0) + create_message("note", key, system_ckey, message, null, null, 0, 0, null, 0, 0) /client/proc/check_ip_intel() diff --git a/html/browser/common.css b/html/browser/common.css index 5f74c5581f4..0883a2df92f 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -396,3 +396,17 @@ ul.sparse { .slider.round:before { border-radius: 50%; } + +.severity { + margin:0px; + padding: 1px 8px 1px 8px; + border-radius: 25px; + border: 1px solid #161616; + background: #40628a; + color: #ffffff; +} + +.severity img { + display: inline-block; + vertical-align: middle; +} diff --git a/html/high_button.png b/html/high_button.png new file mode 100644 index 00000000000..6cbae7271b9 Binary files /dev/null and b/html/high_button.png differ diff --git a/html/medium_button.png b/html/medium_button.png new file mode 100644 index 00000000000..7a9fc286fdc Binary files /dev/null and b/html/medium_button.png differ diff --git a/html/minor_button.png b/html/minor_button.png new file mode 100644 index 00000000000..ae141e16443 Binary files /dev/null and b/html/minor_button.png differ diff --git a/html/none_button.png b/html/none_button.png new file mode 100644 index 00000000000..2438f2c926b Binary files /dev/null and b/html/none_button.png differ