diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt
index dfd4b30dad3..a7308fea1b0 100644
--- a/SQL/database_changelog.txt
+++ b/SQL/database_changelog.txt
@@ -1,3 +1,13 @@
+27 August 2015, by Jordie0608
+
+Modified table 'watch', removing 'id' column, making 'ckey' primary and adding the columns 'timestamp', 'adminckey', 'last_editor' and 'edits'.
+
+ALTER TABLE `feedback`.`watch` DROP COLUMN `id`, ADD COLUMN `timestamp` datetime NOT NULL AFTER `reason`, ADD COLUMN `adminckey` varchar(32) NOT NULL AFTER `timestamp`, ADD COLUMN `last_editor` varchar(32) NULL AFTER `adminckey`, ADD COLUMN `edits` text NULL AFTER `last_editor`, DROP PRIMARY KEY, ADD PRIMARY KEY (`ckey`)
+
+Remember to add a prefix to the table name if you use them.
+
+----------------------------------------------------
+
14 August 2015, by Jordie0608
Added new table 'notes' to replace BYOND's .sav note system.
diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql
index ae8bf1859d6..6b0518bda38 100644
--- a/SQL/tgstation_schema.sql
+++ b/SQL/tgstation_schema.sql
@@ -314,10 +314,13 @@ DROP TABLE IF EXISTS `watch`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `watch` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
`ckey` varchar(32) NOT NULL,
`reason` text NOT NULL,
- PRIMARY KEY (`id`)
+ `timestamp` datetime NOT NULL,
+ `adminckey` varchar(32) NOT NULL,
+ `last_editor` varchar(32),
+ `edits` text,
+ PRIMARY KEY (`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql
index b49032a7ee1..a800b11013f 100644
--- a/SQL/tgstation_schema_prefixed.sql
+++ b/SQL/tgstation_schema_prefixed.sql
@@ -302,17 +302,20 @@ CREATE TABLE `SS13_poll_vote` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `watch`
+-- Table structure for table `SS13_watch`
--
DROP TABLE IF EXISTS `SS13_watch`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_watch` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
`ckey` varchar(32) NOT NULL,
`reason` text NOT NULL,
- PRIMARY KEY (`id`)
+ `timestamp` datetime NOT NULL,
+ `adminckey` varchar(32) NOT NULL,
+ `last_editor` varchar(32),
+ `edits` text,
+ PRIMARY KEY (`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index e40f3490f91..0955e000881 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -48,7 +48,11 @@ var/global/floorIsLava = 0
body += "Jobban | "
body += "Identity Ban | "
body += "Notes | "
- body += "Watchlist Flag "
+ if(M.client.check_watchlist(M.client.ckey))
+ body += "Remove from Watchlist | "
+ body += "Edit Watchlist reason "
+ else
+ body += "Add to Watchlist "
if(M.client)
body += "| Prison | "
diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm
index 103d7eac30d..39c3dcf064e 100644
--- a/code/modules/admin/admin_investigate.dm
+++ b/code/modules/admin/admin_investigate.dm
@@ -22,7 +22,7 @@
F << "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
"
//ADMINVERBS
-/client/proc/investigate_show( subject in list("hrefs","notes","ntsl","singulo","wires","telesci", "gravity", "records", "cargo", "supermatter", "atmos", "experimentor", "kudzu") )
+/client/proc/investigate_show( subject in list("hrefs","notes","watchlist","ntsl","singulo","wires","telesci", "gravity", "records", "cargo", "supermatter", "atmos", "experimentor", "kudzu") )
set name = "Investigate"
set category = "Admin"
if(!holder) return
@@ -46,3 +46,5 @@
return
if("notes")
show_note()
+ if("watchlist")
+ watchlist_show()
diff --git a/code/modules/admin/admin_memo.dm b/code/modules/admin/admin_memo.dm
index 7c40c3aa53a..883c7fcda0c 100644
--- a/code/modules/admin/admin_memo.dm
+++ b/code/modules/admin/admin_memo.dm
@@ -19,7 +19,7 @@
var/sql_ckey = sanitizeSQL(src.ckey)
switch(task)
if("Write")
- var/DBQuery/query_memocheck = dbcon.NewQuery("SELECT ckey FROM [format_table_name("memo")] WHERE (ckey = '[sql_ckey]')")
+ var/DBQuery/query_memocheck = dbcon.NewQuery("SELECT ckey FROM [format_table_name("memo")] WHERE ckey = '[sql_ckey]'")
if(!query_memocheck.Execute())
var/err = query_memocheck.ErrorMsg()
log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n")
@@ -27,7 +27,7 @@
if(query_memocheck.NextRow())
src << "You already have set a memo."
return
- var/memotext = input(src,"Write your Memo","Memo") as text|null
+ var/memotext = input(src,"Write your Memo","Memo") as message
if(!memotext)
return
memotext = sanitizeSQL(memotext)
@@ -56,20 +56,20 @@
if(!target_ckey)
return
var/target_sql_ckey = sanitizeSQL(target_ckey)
- var/DBQuery/query_memofind = dbcon.NewQuery("SELECT ckey, memotext FROM [format_table_name("memo")] WHERE (ckey = '[target_sql_ckey]')")
+ var/DBQuery/query_memofind = dbcon.NewQuery("SELECT memotext FROM [format_table_name("memo")] WHERE ckey = '[target_sql_ckey]'")
if(!query_memofind.Execute())
var/err = query_memofind.ErrorMsg()
- log_game("SQL ERROR obtaining ckey, memotext from memo table. Error : \[[err]\]\n")
+ log_game("SQL ERROR obtaining memotext from memo table. Error : \[[err]\]\n")
return
if(query_memofind.NextRow())
- var/old_memo = query_memofind.item[2]
- var/new_memo = input("Input new memo", "New Memo", "[old_memo]", null) as null|text
+ var/old_memo = query_memofind.item[1]
+ var/new_memo = input("Input new memo", "New Memo", "[old_memo]", null) as message
if(!new_memo)
return
new_memo = sanitizeSQL(new_memo)
var/edit_text = "Edited by [sql_ckey] on [SQLtime()] from
[old_memo]
to
[new_memo]
"
edit_text = sanitizeSQL(edit_text)
- var/DBQuery/update_query = dbcon.NewQuery("UPDATE [format_table_name("memo")] SET memotext = '[new_memo]', last_editor = '[sql_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE (ckey = '[target_sql_ckey]')")
+ var/DBQuery/update_query = dbcon.NewQuery("UPDATE [format_table_name("memo")] SET memotext = '[new_memo]', last_editor = '[sql_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE ckey = '[target_sql_ckey]'")
if(!update_query.Execute())
var/err = update_query.ErrorMsg()
log_game("SQL ERROR editing memo. Error : \[[err]\]\n")
diff --git a/code/modules/admin/sql_notes.dm b/code/modules/admin/sql_notes.dm
index 730e4531575..360eac2b357 100644
--- a/code/modules/admin/sql_notes.dm
+++ b/code/modules/admin/sql_notes.dm
@@ -3,13 +3,14 @@
usr << "Failed to establish database connection."
return
if(!target_ckey)
- var/new_ckey = ckey(input(usr,"Who would you like to add a note for?","Enter a ckey",null) as text|null)
+ var/new_ckey = ckey(input(usr,"Who would you like to add a note for?","Enter a ckey",null) as text)
if(!new_ckey)
return
+ new_ckey = sanitizeSQL(new_ckey)
var/DBQuery/query_find_ckey = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[new_ckey]'")
if(!query_find_ckey.Execute())
var/err = query_find_ckey.ErrorMsg()
- log_game("SQL ERROR obtaining ckey from notes table. Error : \[[err]\]\n")
+ log_game("SQL ERROR obtaining ckey from player table. Error : \[[err]\]\n")
return
if(!query_find_ckey.NextRow())
usr << "[new_ckey] has not been seen before, you can only add notes to known players."
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 3093d959d6d..0baffec09b0 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -446,12 +446,12 @@
mins = min(525599,mins)
minutes = CMinutes + mins
duration = GetExp(minutes)
- reason = input(usr,"Reason?","reason",reason2) as text|null
+ reason = input(usr,"Please State Reason","Reason",reason2) as message
if(!reason) return
if("No")
temp = 0
duration = "Perma"
- reason = input(usr,"Reason?","reason",reason2) as text|null
+ reason = input(usr,"Please State Reason","Reason",reason2) as message
if(!reason) return
log_admin("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
@@ -497,7 +497,7 @@
else switch(alert("Appearance ban [M.ckey]?",,"Yes","No", "Cancel"))
if("Yes")
- var/reason = input(usr,"Reason?","reason","Metafriender") as text|null
+ var/reason = input(usr,"Please State Reason","Reason") as message
if(!reason)
return
ban_unban_log_save("[key_name(usr)] appearance banned [key_name(M)]. reason: [reason]")
@@ -905,7 +905,7 @@
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
if(!mins)
return
- var/reason = input(usr,"Reason?","Please State Reason","") as text|null
+ var/reason = input(usr,"Please State Reason","Reason") as message
if(!reason)
return
@@ -929,7 +929,7 @@
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("No")
- var/reason = input(usr,"Reason?","Please State Reason","") as text|null
+ var/reason = input(usr,"Please State Reason","Reason") as message
if(reason)
var/msg
for(var/job in notbannedlist)
@@ -1066,7 +1066,7 @@
if(!mins)
return
if(mins >= 525600) mins = 525599
- var/reason = input(usr,"Reason?","reason","Griefer") as text|null
+ var/reason = input(usr,"Please State Reason","Reason") as message
if(!reason)
return
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins)
@@ -1086,7 +1086,7 @@
del(M.client)
//qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
if("No")
- var/reason = input(usr,"Reason?","reason","Griefer") as text|null
+ var/reason = input(usr,"Please State Reason","Reason") as message
if(!reason)
return
switch(alert(usr,"IP ban?",,"Yes","No","Cancel"))
@@ -1126,61 +1126,46 @@
unjobbanpanel()
//Watchlist
- else if(href_list["watchlist"])
- if(!check_rights(R_ADMIN)) return
- var/mob/M = locate(href_list["watchlist"])
- if(!dbcon.IsConnected())
- usr << "Failed to establish database connection."
+ else if(href_list["watchadd"])
+ var/target_ckey = locate(href_list["watchadd"])
+ usr.client.watchlist_add(target_ckey)
+
+ else if(href_list["watchremove"])
+ var/target_ckey = href_list["watchremove"]
+ usr.client.watchlist_remove(target_ckey)
+
+ else if(href_list["watchedit"])
+ var/target_ckey = href_list["watchedit"]
+ usr.client.watchlist_edit(target_ckey)
+
+ else if(href_list["watchaddbrowse"])
+ usr.client.watchlist_add(null, 1)
+
+ else if(href_list["watchremovebrowse"])
+ var/target_ckey = href_list["watchremovebrowse"]
+ usr.client.watchlist_remove(target_ckey, 1)
+
+ else if(href_list["watcheditbrowse"])
+ var/target_ckey = href_list["watcheditbrowse"]
+ usr.client.watchlist_edit(target_ckey, 1)
+
+ else if(href_list["watchsearch"])
+ var/target_ckey = href_list["watchsearch"]
+ usr.client.watchlist_show(target_ckey)
+
+ else if(href_list["watchshow"])
+ usr.client.watchlist_show()
+
+ else if(href_list["watcheditlog"])
+ var/target_ckey = sanitizeSQL("[href_list["watcheditlog"]]")
+ var/DBQuery/query_watchedits = dbcon.NewQuery("SELECT edits FROM [format_table_name("watch")] WHERE ckey = '[target_ckey]'")
+ if(!query_watchedits.Execute())
+ var/err = query_watchedits.ErrorMsg()
+ log_game("SQL ERROR obtaining edits from watch table. Error : \[[err]\]\n")
return
- if(!ismob(M))
- usr << "This can only be used on instances of type /mob"
- return
- if(!M.ckey)
- usr << "This mob has no ckey"
- return
- var/sql_ckey = sanitizeSQL(M.ckey)
- var/DBQuery/query = dbcon.NewQuery("SELECT ckey FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')")
- query.Execute()
- if(query.NextRow())
- switch(alert(usr, "[sql_ckey] is already on the watchlist, do you want to:", "Ckey already flagged", "Remove", "Edit reason", "Cancel"))
- if("Cancel")
- return
- if("Remove")
- var/DBQuery/query_watchdel = dbcon.NewQuery("DELETE FROM [format_table_name("watch")] WHERE ckey = '[sql_ckey]'")
- if(!query_watchdel.Execute())
- var/err = query_watchdel.ErrorMsg()
- log_game("SQL ERROR during removing watch entry. Error : \[[err]\]\n")
- return
- log_admin("[key_name(usr)] has removed [key_name_admin(M)] from the watchlist")
- message_admins("[key_name_admin(usr)] has removed [key_name_admin(M)] from the watchlist", 1)
- if("Edit reason")
- var/DBQuery/query_reason = dbcon.NewQuery("SELECT ckey, reason FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')")
- query_reason.Execute()
- if(query_reason.NextRow())
- var/watch_reason = query_reason.item[2]
- var/new_reason = input("Insert new reason", "New Reason", "[watch_reason]", null) as null|text
- new_reason = sanitizeSQL(new_reason)
- if(!new_reason)
- return
- var/DBQuery/update_query = dbcon.NewQuery("UPDATE [format_table_name("watch")] SET reason = '[new_reason]' WHERE (ckey = '[sql_ckey]')")
- if(!update_query.Execute())
- var/err = update_query.ErrorMsg()
- log_game("SQL ERROR during edit watch entry reason. Error : \[[err]\]\n")
- return
- log_admin("[key_name(usr)] has edited [sql_ckey]'s reason from [watch_reason] to [new_reason]",1)
- message_admins("[key_name_admin(usr)] has edited [sql_ckey]'s reason from [watch_reason] to [new_reason]",1)
- else
- var/reason = input(usr,"Reason?","reason","Metagaming") as text|null
- if(!reason)
- return
- reason = sanitizeSQL(reason)
- var/DBQuery/query_watchadd = dbcon.NewQuery("INSERT INTO [format_table_name("watch")] (ckey, reason) VALUES ('[sql_ckey]', '[reason]')")
- if(!query_watchadd.Execute())
- var/err = query_watchadd.ErrorMsg()
- log_game("SQL ERROR during adding new watch entry. Error : \[[err]\]\n")
- return
- log_admin("[key_name(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]")
- message_admins("[key_name_admin(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]", 1)
+ if(query_watchedits.NextRow())
+ var/edit_log = query_watchedits.item[1]
+ usr << browse(edit_log,"window=watchedits")
else if(href_list["mute"])
if(!check_rights(R_ADMIN)) return
diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm
index cf13ea9fe4c..58394d17d93 100644
--- a/code/modules/admin/verbs/massmodvar.dm
+++ b/code/modules/admin/verbs/massmodvar.dm
@@ -171,7 +171,7 @@
return .(O.vars[variable])
if("text")
- var/new_value = input("Enter new text:","Text",O.vars[variable]) as text|null
+ var/new_value = input("Enter new text:","Text",O.vars[variable]) as message|null
if(new_value == null) return
var/process_vars = 0
diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm
index 9cc7f8a7a76..67887272f82 100644
--- a/code/modules/admin/verbs/modifyvariables.dm
+++ b/code/modules/admin/verbs/modifyvariables.dm
@@ -49,7 +49,7 @@ var/list/VVckey_edit = list("key", "ckey")
switch(class)
if("text")
- var_value = input("Enter new text:","Text") as null|text
+ var_value = input("Enter new text:","Text") as null|message
if("num")
var_value = input("Enter new number:","Num") as null|num
@@ -106,7 +106,7 @@ var/list/VVckey_edit = list("key", "ckey")
switch(class)
if("text")
- var_value = input("Enter new text:","Text") as text
+ var_value = input("Enter new text:","Text") as message
if("num")
var_value = input("Enter new number:","Num") as num
@@ -302,7 +302,7 @@ var/list/VVckey_edit = list("key", "ckey")
return
if("text")
- new_var = input("Enter new text:","Text") as text
+ new_var = input("Enter new text:","Text") as message
if(findtext(new_var,"\["))
var/process_vars = alert(usr,"\[] detected in string, process as variables?","Process Variables?","Yes","No")
@@ -557,7 +557,7 @@ var/list/VVckey_edit = list("key", "ckey")
return .(O.vars[variable])
if("text")
- var/var_new = input("Enter new text:","Text",O.vars[variable]) as null|text
+ var/var_new = input("Enter new text:","Text",O.vars[variable]) as null|message
if(var_new==null) return
if(findtext(var_new,"\["))
diff --git a/code/modules/admin/watchlist.dm b/code/modules/admin/watchlist.dm
new file mode 100644
index 00000000000..687dbb16715
--- /dev/null
+++ b/code/modules/admin/watchlist.dm
@@ -0,0 +1,118 @@
+client/proc/watchlist_add(target_ckey, browse = 0)
+ if(!target_ckey)
+ var/new_ckey = ckey(input(usr,"Who would you like to add to the watchlist?","Enter a ckey",null) as text)
+ if(!new_ckey)
+ return
+ new_ckey = sanitizeSQL(new_ckey)
+ var/DBQuery/query_watchfind = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[new_ckey]'")
+ if(!query_watchfind.Execute())
+ var/err = query_watchfind.ErrorMsg()
+ log_game("SQL ERROR obtaining ckey from player table. Error : \[[err]\]\n")
+ return
+ if(!query_watchfind.NextRow())
+ usr << "[new_ckey] has not been seen before, you can only add known players."
+ return
+ else
+ target_ckey = new_ckey
+ var/target_sql_ckey = sanitizeSQL(target_ckey)
+ if(check_watchlist(target_sql_ckey))
+ usr << "[target_sql_ckey] is already on the watchlist."
+ return
+ var/reason = input(usr,"Please State Reason","Reason") as message
+ if(!reason)
+ return
+ reason = sanitizeSQL(reason)
+ var/timestamp = SQLtime()
+ var/adminckey = usr.ckey
+ if(!adminckey)
+ return
+ var/admin_sql_ckey = sanitizeSQL(adminckey)
+ var/DBQuery/query_watchadd = dbcon.NewQuery("INSERT INTO [format_table_name("watch")] (ckey, reason, adminckey, timestamp) VALUES ('[target_sql_ckey]', '[reason]', '[admin_sql_ckey]', '[timestamp]')")
+ if(!query_watchadd.Execute())
+ var/err = query_watchadd.ErrorMsg()
+ log_game("SQL ERROR during adding new watch entry. Error : \[[err]\]\n")
+ return
+ log_admin("[key_name(usr)] has added [target_ckey] to the watchlist - Reason: [reason]")
+ message_admins("[key_name_admin(usr)] has added [target_ckey] to the watchlist - Reason: [reason]", 1)
+ if(browse)
+ watchlist_show(target_sql_ckey)
+
+client/proc/watchlist_remove(target_ckey, browse = 0)
+ var/target_sql_ckey = sanitizeSQL(target_ckey)
+ var/DBQuery/query_watchdel = dbcon.NewQuery("DELETE FROM [format_table_name("watch")] WHERE ckey = '[target_sql_ckey]'")
+ if(!query_watchdel.Execute())
+ var/err = query_watchdel.ErrorMsg()
+ log_game("SQL ERROR during removing watch entry. Error : \[[err]\]\n")
+ return
+ log_admin("[key_name(usr)] has removed [target_ckey] from the watchlist")
+ message_admins("[key_name_admin(usr)] has removed [target_ckey] from the watchlist", 1)
+ if(browse)
+ watchlist_show()
+
+client/proc/watchlist_edit(target_ckey, browse = 0)
+ var/target_sql_ckey = sanitizeSQL(target_ckey)
+ var/DBQuery/query_watchreason = dbcon.NewQuery("SELECT reason FROM [format_table_name("watch")] WHERE ckey = '[target_sql_ckey]'")
+ if(!query_watchreason.Execute())
+ var/err = query_watchreason.ErrorMsg()
+ log_game("SQL ERROR obtaining reason from watch table. Error : \[[err]\]\n")
+ return
+ if(query_watchreason.NextRow())
+ var/watch_reason = query_watchreason.item[1]
+ var/new_reason = input("Input new reason", "New Reason", "[watch_reason]") as message
+ new_reason = sanitizeSQL(new_reason)
+ if(!new_reason)
+ return
+ var/sql_ckey = sanitizeSQL(usr.ckey)
+ var/edit_text = "Edited by [sql_ckey] on [SQLtime()] from
[watch_reason]
to
[new_reason]
"
+ edit_text = sanitizeSQL(edit_text)
+ var/DBQuery/query_watchupdate = dbcon.NewQuery("UPDATE [format_table_name("watch")] SET reason = '[new_reason]', last_editor = '[sql_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE ckey = '[target_sql_ckey]'")
+ if(!query_watchupdate.Execute())
+ var/err = query_watchupdate.ErrorMsg()
+ log_game("SQL ERROR editing watchlist reason. Error : \[[err]\]\n")
+ return
+ log_admin("[key_name(usr)] has edited [target_ckey]'s watchlist reason from [watch_reason] to [new_reason]")
+ message_admins("[key_name_admin(usr)] has edited [target_ckey]'s watchlist reason from
[watch_reason]
to
[new_reason]")
+ if(browse)
+ watchlist_show(target_sql_ckey)
+
+client/proc/watchlist_show(search)
+ var/output
+ output += ""
+ output += "\[Clear Search\] \[Add Ckey\]"
+ output += "
"
+ if(search)
+ search = "^[search]"
+ else
+ search = "^."
+ search = sanitizeSQL(search)
+ var/DBQuery/query_watchlist = dbcon.NewQuery("SELECT ckey, reason, adminckey, timestamp, last_editor FROM [format_table_name("watch")] WHERE ckey REGEXP '[search]' ORDER BY ckey")
+ if(!query_watchlist.Execute())
+ var/err = query_watchlist.ErrorMsg()
+ log_game("SQL ERROR obtaining ckey, reason, adminckey, timestamp, last_editor from watch table. Error : \[[err]\]\n")
+ return
+ while(query_watchlist.NextRow())
+ var/ckey = query_watchlist.item[1]
+ var/reason = query_watchlist.item[2]
+ var/adminckey = query_watchlist.item[3]
+ var/timestamp = query_watchlist.item[4]
+ var/last_editor = query_watchlist.item[5]
+ output += "[ckey] | Added by [adminckey] on [timestamp] \[Remove\] \[Edit Reason\]"
+ if(last_editor)
+ output += " Last edit by [last_editor] (Click here to see edit log)"
+ output += "
[reason]
"
+ usr << browse(output, "window=watchwin;size=900x500")
+
+client/proc/check_watchlist(target_ckey)
+ var/target_sql_ckey = sanitizeSQL(target_ckey)
+ var/DBQuery/query_watch = dbcon.NewQuery("SELECT reason FROM [format_table_name("watch")] WHERE ckey = '[target_sql_ckey]'")
+ if(!query_watch.Execute())
+ var/err = query_watch.ErrorMsg()
+ log_game("SQL ERROR obtaining reason from watch table. Error : \[[err]\]\n")
+ return
+ if(query_watch.NextRow())
+ return query_watch.item[1]
+ else
+ return 0
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index 233fee84513..6958f17e392 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -234,11 +234,10 @@ var/next_external_rsc = 0
while (query_cid.NextRow())
related_accounts_cid += "[query_cid.item[1]], "
- var/DBQuery/query_watch = dbcon.NewQuery("SELECT ckey, reason FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')")
- query_watch.Execute()
- if(query_watch.NextRow())
- message_admins("Notice: [key_name_admin(src)] is flagged for watching and has just connected - Reason: [query_watch.item[2]]")
- send2irc_adminless_only("Watchlist", "[key_name(src)] is flagged for watching and has just connected - Reason: [query_watch.item[2]]")
+ var/watchreason = check_watchlist(sql_ckey)
+ if(watchreason)
+ message_admins("Notice: [key_name_admin(src)] is on the watchlist and has just connected - Reason: [watchreason]")
+ send2irc_adminless_only("Watchlist", "[key_name(src)] is on the watchlist and has just connected - Reason: [watchreason]")
var/admin_rank = "Player"
if (src.holder && src.holder.rank)
diff --git a/tgstation.dme b/tgstation.dme
index 383abb503be..26859927fa4 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -824,6 +824,7 @@
#include "code\modules\admin\secrets.dm"
#include "code\modules\admin\sql_notes.dm"
#include "code\modules\admin\topic.dm"
+#include "code\modules\admin\watchlist.dm"
#include "code\modules\admin\DB ban\functions.dm"
#include "code\modules\admin\permissionverbs\permissionedit.dm"
#include "code\modules\admin\verbs\adminhelp.dm"