From ce7bbdc0086d19ac0968391403c73e284cd0249a Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Wed, 5 May 2021 17:05:22 -0400 Subject: [PATCH] Simple player notes filter --- code/modules/admin/admin.dm | 42 ++++++++++++++++++++++++++----------- code/modules/admin/topic.dm | 7 ++++++- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index b655d8b5e7..b70af8354d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -229,8 +229,17 @@ proc/admin_notice(var/message, var/rights) return PlayerNotesPage(1) -/datum/admins/proc/PlayerNotesPage(page) - var/dat = "Player notes
" +/datum/admins/proc/PlayerNotesFilter() + if (!istype(src,/datum/admins)) + src = usr.client.holder + if (!istype(src,/datum/admins)) + to_chat(usr, "Error: you are not an admin!") + return + var/filter = input(usr, "Filter string (case-insensitive regex)", "Player notes filter") as text|null + PlayerNotesPage(1, filter) + +/datum/admins/proc/PlayerNotesPage(page, filter) + var/dat = "Player notes - Apply Filter
" var/savefile/S=new("data/player_notes.sav") var/list/note_keys S >> note_keys @@ -240,29 +249,38 @@ proc/admin_notice(var/message, var/rights) dat += "" note_keys = sortList(note_keys) + if(filter) + var/list/results = list() + var/regex/needle = regex(filter, "i") + for(var/haystack in note_keys) + if(needle.Find(haystack)) + results += haystack + note_keys = results + // Display the notes on the current page var/number_pages = note_keys.len / PLAYER_NOTES_ENTRIES_PER_PAGE // Emulate CEILING(why does BYOND not have ceil, 1) if(number_pages != round(number_pages)) number_pages = round(number_pages) + 1 var/page_index = page - 1 + if(page_index < 0 || page_index >= number_pages) - return + dat += "" + else + var/lower_bound = page_index * PLAYER_NOTES_ENTRIES_PER_PAGE + 1 + var/upper_bound = (page_index + 1) * PLAYER_NOTES_ENTRIES_PER_PAGE + upper_bound = min(upper_bound, note_keys.len) + for(var/index = lower_bound, index <= upper_bound, index++) + var/t = note_keys[index] + dat += "" - var/lower_bound = page_index * PLAYER_NOTES_ENTRIES_PER_PAGE + 1 - var/upper_bound = (page_index + 1) * PLAYER_NOTES_ENTRIES_PER_PAGE - upper_bound = min(upper_bound, note_keys.len) - for(var/index = lower_bound, index <= upper_bound, index++) - var/t = note_keys[index] - dat += "" - - dat += "
No keys found.
[t]
[t]

" + dat += "
" // Display a footer to select different pages for(var/index = 1, index <= number_pages, index++) if(index == page) dat += "" - dat += "[index] " + dat += "[index] " if(index == page) dat += "" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 2c80b58274..44b3c9e16b 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1971,7 +1971,12 @@ if("show") show_player_info(ckey) if("list") - PlayerNotesPage(text2num(href_list["index"])) + var/filter + if(href_list["filter"] && href_list["filter"] != "0") + filter = url_decode(href_list["filter"]) + PlayerNotesPage(text2num(href_list["index"]), filter) + if("filter") + PlayerNotesFilter() return mob/living/proc/can_centcom_reply()